Blocos de lógica paraconsistente com API simples.
Project description
Paraconsistent Lib
Biblioteca Python para construção de redes de raciocínio baseadas em Lógica Paraconsistente Anotada de dois valores (LPA2v).
1. Visão Geral
Paraconsistent Lib implementa a Lógica Paraconsistente Anotada de dois valores (LPA2v), permitindo a modelagem de sistemas de raciocínio que lidam naturalmente com inconsistências e incertezas. A biblioteca oferece uma arquitetura modular baseada em blocos lógicos conectáveis, facilitando a composição de redes de inferência complexas.
Características Principais
- Implementação completa da LPA2v com as 12 regiões de estados lógicos
- Arquitetura modular baseada em blocos conectáveis
- Cálculo automático de graus de certeza, contradição e evidências
- Type-safe com suporte completo a type hints Python
- Zero dependências externas (apenas biblioteca padrão Python)
- Cache inteligente para otimização de performance
2. Instalação
Requisitos
- Python 3.9 ou superior
- Sem dependências externas
Instalação via pip
pip install paraconsistent
3. Fundamentos Teóricos
3.1 Lógica Paraconsistente Anotada (LPA2v)
A LPA2v trabalha com dois graus de evidência:
- μ (mu): Grau de evidência favorável, μ ∈ [0, 1]
- λ (lambda): Grau de evidência desfavorável, λ ∈ [0, 1]
A partir destes valores, são calculados:
- DC (Degree of Certainty): DC = μ - λ, DC ∈ [-1, 1]
- DCT (Degree of Contradiction): DCT = μ + λ - 1, DCT ∈ [-1, 1]
3.2 Regiões de Estados Lógicos
A LPA2v define 12 regiões no quadrado unitário de anotação (QUPC):
Estados Extremos:
- t (true): Alta certeza positiva
- f (false): Alta certeza negativa
- ┬ (Inconsistent): Alta contradição
- ┴ (Indeterminate): Baixa informação
Estados de Transição:
- Q┬→t: Quase inconsistente tendendo ao verdadeiro
- Q┬→f: Quase inconsistente tendendo ao falso
- Qt→┬: Quase verdadeiro tendendo à inconsistência
- Qf→┬: Quase falso tendendo à inconsistência
- Qt→┴: Quase verdadeiro tendendo à indeterminação
- Qf→┴: Quase falso tendendo à indeterminação
- Q┴→t: Quase indeterminado tendendo ao verdadeiro
- Q┴→f: Quase indeterminado tendendo ao falso
3.3 Métricas Complementares
Distância Radial:
- d: Distância euclidiana ao vértice mais próximo
- D: Distância normalizada (clampada em [0, 1])
Degree of Real Certainty:
- DCR: DCR = (1 - D) × sign(DC)
Evidências Resultantes:
- μE: Evidência baseada em DC, μE = (DC + 1) / 2
- μECT: Evidência de contradição, μECT = (DCT + 1) / 2
- μER: Evidência real, μER = (DCR + 1) / 2
Intervalo de Certeza:
- φ (phi): φ = 1 - |DCT|
4. Guia de Uso
4.1 Criando um Bloco
from paraconsistent.blocks import ParaconsistentBlock
# Criar bloco com valores padrão
bloco = ParaconsistentBlock()
4.2 Configurando Parâmetros
from paraconsistent.blocks import ParaconsistentBlock
bloco = ParaconsistentBlock()
# Configurar limite de controle de certeza (FtC)
bloco.config.FtC = 0.70
4.3 Alimentando Entradas
# Definir graus de evidência
bloco.input.mu = 0.80 # Evidência favorável
bloco.input.lam = 0.20 # Evidência desfavorável
# Os cálculos são realizados automaticamente
4.4 Obtendo Resultados
# Acessar resultados individuais
Dc = bloco.complete.Dc # Degree of Certainty
Dct = bloco.complete.Dct # Degree of Contradiction
muER = bloco.complete.muER # Evidência Real
label = bloco.complete.label # Região lógica
# Ou imprimir todos os resultados
bloco.print_complete()
4.5 Conectando Múltiplos Blocos
from paraconsistent.blocks import ParaconsistentBlock
# Criar rede de dois blocos
b1 = ParaconsistentBlock()
b2 = ParaconsistentBlock()
# Configurar bloco 1
b1.config.FtC = 0.70
b1.input.mu = 0.80
b1.input.lam = 0.30
# Usar saída de b1 como entrada de b2
b2.input.mu = b1.complete.muER
b2.input.lam = 1 - b1.complete.phi
# Resultado propagado automaticamente
print(f"Estado final: {b2.complete.label}")
5. Referência da API
5.1 Construtor
ParaconsistentBlock(
*,
mu: float | None = None,
lam: float | None = None,
**param_overrides
)
Parâmetros:
mu: Grau de evidência favorável inicial (opcional)lam: Grau de evidência desfavorável inicial (opcional)**param_overrides: Parâmetros de configuração (FtC)
5.2 Configuração (config)
| Parâmetro | Tipo | Faixa | Padrão | Descrição |
|---|---|---|---|---|
| FtC | float | [0, 1] | 0.50 | Fator de Tolerância à Certeza (Certainty Control Limit) |
Nota: Os valores VSSC, VICC, VSSCT e VICCT são calculados automaticamente a partir de FtC:
- VSSC = FtC
- VICC = -FtC
- VSSCT = 1 - FtC
- VICCT = FtC - 1
5.3 Entradas (input)
# Forma 1: Atribuição direta
bloco.input.mu = 0.80
bloco.input.lam = 0.20
# Forma 2: Método funcional
bloco.input(mu=0.80, lam=0.20)
Valores são automaticamente clampados no intervalo [0, 1].
5.4 Saídas (complete)
| Campo | Tipo | Faixa | Descrição |
|---|---|---|---|
| mu | float | [0, 1] | Grau de evidência favorável |
| lam | float | [0, 1] | Grau de evidência desfavorável |
| Dc | float | [-1, 1] | Degree of Certainty: μ - λ |
| Dct | float | [-1, 1] | Degree of Contradiction: μ + λ - 1 |
| d | float | [0, ∞) | Distância radial bruta |
| D | float | [0, 1] | Distância radial normalizada |
| Dcr | float | [-1, 1] | Degree of Real Certainty: (1 - D) × sign(Dc) |
| phi | float | [0, 1] | Intervalo de certeza: 1 - |Dct| |
| phiE | float | [0, 1] | Intervalo de certeza (alias de phi) |
| muE | float | [0, 1] | Evidência resultante: (Dc + 1) / 2 |
| muECT | float | [0, 1] | Evidência de contradição: (Dct + 1) / 2 |
| muER | float | [0, 1] | Evidência real: (Dcr + 1) / 2 |
| decision_output | float | {0.0, 0.5, 1.0} | Saída de decisão binária |
| label | str | - | Rótulo da região lógica (t, f, ┬, ┴, etc.) |
| Regions | dict | - | Flags booleanas por região |
| FtC | float | [0, 1] | Echo dos parâmetros usados no cálculo |
Saída de Decisão (decision_output):
- 1.0 se μER > FtC (Aceitar como verdadeiro)
- 0.0 se μER < FtC (Rejeitar como falso)
- 0.5 se μER = FtC (Indecisão)
5.5 Métodos
# Exportar como dicionário tipado
resultado: Complete = bloco.to_dict()
# Imprimir formatado no console
bloco.print_complete()
# Configurar parâmetro FtC
bloco.set_params(FtC=0.7)
6. Exemplos Avançados
6.1 Sistema de Controle Fuzzy
from paraconsistent.blocks import ParaconsistentBlock
# Criar blocos para temperatura e pressão
temp_block = ParaconsistentBlock()
press_block = ParaconsistentBlock()
decision_block = ParaconsistentBlock()
# Sensor de temperatura (alta = 0.8, baixa = 0.1)
temp_block.input.mu = 0.8
temp_block.input.lam = 0.1
# Sensor de pressão (alta = 0.7, baixa = 0.2)
press_block.input.mu = 0.7
press_block.input.lam = 0.2
# Combinar evidências para decisão
decision_block.input.mu = (temp_block.complete.muER + press_block.complete.muER) / 2
decision_block.input.lam = 1 - decision_block.input.mu
# Avaliar situação
if decision_block.complete.decision_output == 1.0:
print("Sistema em condição segura")
elif decision_block.complete.decision_output == 0.0:
print("Alerta: condição crítica detectada")
else:
print("Situação indefinida - requer análise manual")
6.2 Análise de Contradições
from paraconsistent.blocks import ParaconsistentBlock
# Cenário: Múltiplas fontes contraditórias
bloco = ParaconsistentBlock()
bloco.config.FtC = 0.6
# Entrada contraditória (alta evidência favorável E desfavorável)
bloco.input.mu = 0.9
bloco.input.lam = 0.8
# Analisar contradição
print(f"Degree of Contradiction: {bloco.complete.Dct:.2f}")
print(f"Região Lógica: {bloco.complete.label}")
if "┬" in bloco.complete.label:
print("⚠️ Inconsistência detectada - revisar fontes de informação")
7. Arquitetura
7.1 Estrutura de Módulos
paraconsistent/
├── blocks/
│ └── block.py # Classe ParaconsistentBlock
├── core/
│ ├── config.py # Configurações e validação
│ ├── engine.py # Motor de cálculo
│ ├── metrics.py # Métricas geométricas
│ ├── labels.py # Classificação de regiões
│ └── types.py # Type definitions
└── __init__.py
7.2 Fluxo de Cálculo
- Entrada: Validação e clamping de μ e λ
- Graus Principais: Cálculo de GC e GCT
- Geometria: Cálculo de d, D e GCR
- Evidências: Cálculo de μE, μECT, μER e φ
- Decisão: Comparação de μER com FtC
- Classificação: Identificação da região lógica
7.3 Cache e Performance
O sistema implementa cache inteligente que invalida automaticamente ao alterar entradas ou parâmetros, garantindo consistência sem sacrificar performance.
8. Validação e Testes
A biblioteca foi validada contra casos de teste padrão da literatura, com taxa de acerto superior a 97% em 37 casos de teste independentes.
9. Licença
MIT License
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10. Contribuindo
Contribuições são bem-vindas! Por favor, abra uma issue ou pull request no repositório GitHub.
11. Suporte
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file paraconsistent-0.2.3.tar.gz.
File metadata
- Download URL: paraconsistent-0.2.3.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b547dbb8b21eb51d18cf540bf8b92c185de899255eee2513c632cdd3d86700
|
|
| MD5 |
28d096a0ede84192177fc49e16504b9e
|
|
| BLAKE2b-256 |
00b61f366e8a3f25681f52d7272886f880bcbf8ba2399617e51ea4935ebef265
|
File details
Details for the file paraconsistent-0.2.3-py3-none-any.whl.
File metadata
- Download URL: paraconsistent-0.2.3-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb4c5b34c2a94048c46213cad7928fd8f3ed574f4dd91fa19f3e93828fbdb322
|
|
| MD5 |
42f17af97aca9073fafbf9a1dfafcd0f
|
|
| BLAKE2b-256 |
e7e0f9bf6c9106d32a89b79446005809008a921efb6217b7aeeac28555ac65d9
|