• Nenhum resultado encontrado

ESPECIFICAÇÃO FORMAL E IMPLEMENTAÇÃO DE UM PROTÓTIPO PARA A LINGUAGEM PARALOG

N/A
N/A
Protected

Academic year: 2022

Share "ESPECIFICAÇÃO FORMAL E IMPLEMENTAÇÃO DE UM PROTÓTIPO PARA A LINGUAGEM PARALOG "

Copied!
147
0
0

Texto

(1)

SIMONE NASSER MATOS FERREIRA

ESPECIFICAÇÃO FORMAL E IMPLEMENTAÇÃO DE UM PROTÓTIPO PARA A LINGUAGEM PARALOG

Dissertação apresentada como requisito parcial à obtenção do grau de Mestre, pelo Curso de Pós-Graduação em Informática, Setor de Ciências Exatas, Universidade Federal do Paraná.

Orientador: Prof. Martin A. Musicante

CURITIBA 2001

(2)

UFPR

Ministério da Educação Universidade Federal do Paraná Mestrado em Informática

PARECER

Nós, abaixo assinados, membros da Banca Examinadora da defesa de Dissertação de Mestrado em Informática da aluna Simone Nasser Mattos Ferreria, avaliamos o trabalho intitulado "Projeto e Implementação de Protótipo para a Linguagem PARALOG", cuja defesa foi realizada no dia 26 de julho de 2001, às treze horas, na sala de vídeo do departamento de Informática da Universidade Federal do Paraná. Após a avaliação, decidimos pela aprovação da candidata.

Curitiba, 26 de julho de 2001.

Prof. 0r/ Bráulio Coelho Ávila PUC/PR

Prof. Dr. Michel Gagjnon DINF/UFPR

(3)

A Deus, fonte inesgotável de amor.

Às minhas amigas, Maria e Dalmi, in memoriam.

Aos meus pais, João e Sônia, amores inigualáveis.

Ao meu marido, Marcos, pela dedicação, apoio e carinho.

(4)

AGRADECIMENTOS

Ao ser supremo, Deus, que nos dá proteção, saúde e resistência.

A minha família, que apoiou e incentivou esta etapa da minha vida, a de realização do mestrado.

Ao professor orientador Martin A. Musicante, que muito mais que um orientador, foi amigo paciente e dedicado, que como uma luz no meio das trevas, guiou-me em toda esta jornada.

Aos professores Décio Krause e Bráulio Coelho Ávila, pelos comentários, discussões, apoio e orientações que contribuíram para o enriquecimento deste trabalho.

Aos professores Wagner Machado Nunan Zola e Bráulio Coelho Ávila, pelas observações e contribuições na banca de qualificação.

Ao professor Jair Minoro Abe, pela indicação de alguns materiais sobre lógica paraconsistente.

Aos professores do Departamento de Pós-Graduação em Informática, pelas contribuições nas disciplinas ministradas.

Aos colegas da Coordenação de Informática do CEFET-PR Unidade de Ponta Grossa, pela oportunidade concedida.

Aos dirigentes do Centro Federal de Educação Tecnológica do Paraná - Unidade de Ponta Grossa, que me concederam licença para cursar o Mestrado, no primeiro ano, em regime parcial.

À amiga Glória Silva, pelas horas divididas e pelo transporte com destino à rodoviária.

Aos colegas de viagem Clodis Boscaxioli, Geraldo Ranthum, Ezequiel Gueber, Ivo Mario Mathias e Mônica H. Pietruchinki, pelas horas passadas juntas com destino à Universidade Federal do Paraná.

A todos que direta ou indiretamente contribuíram para a conclusão deste trabalho.

(5)

SUMÁRIO

AGRADECIMENTOS ii LISTA DE FIGURAS viii LISTA DE ABREVIATURAS ix

RESUMO X ABSTRACT xi 1 Introdução 1

1.1 Organização da Dissertação 3

2 Semântica de Transição 5 2.1 Semântica Operacional 5

2.1.1 Sintaxe 6 2.1.2 Semântica 6 2.2 Semântica de Transição 8 2.3 Considerações Finais 10

3 ASF+SDF 11 3.1 ASF+SDF 11 3.2 Implementação da Linguagem de Expressões (Exp) 13

3.3 Considerações Finais 18 4 Programação Lógica Paraconsistente 19

4.1 Histórico da Lógica Paraconsistente 19 4.2 Lógicas Paraconsistentes, Paxacompletas e Não-Aléticas 20

4.3 Lógica Anotada 21 4.4 Programação Lógica Paraconsistente 27

(6)

4.4.1 Sintaxe 28 4.4.2 Semântica 29 4.4.3 A Semântica Operacional dos PHGs 31

4.5 ParaLog 34 4.5.1 Sintaxe de ParaLog 34

4.5.2 Semântica ParaLog 38 4.5.3 Avaliação dos Programas em ParaLog 40

4.5.4 Programando com o Prolog Paraconsistente 40

4.6 Considerações Finais 44 5 Ambiente Operacional Interativo Prolog 45

5.1 Construção do Ambiente Prolog 45

5.2 Módulos Básicos 47

5.2.1 Layout 47 5.2.2 Booleans 47

5.3 Módulos Sintáticos 48

5.3.1 PrologTerms 48 5.3.2 PrologProgram 49 5.3.3 NormalizationFunction 49 5.3.4 PrologFunctions 50

5.4 Módulo de Unificação 50

5.4.1 Substitution 50 5.4.2 Equations 51 5.4.3 Unification 51

5.5 Módulo de Avaliação 52

5.5.1 EvalProlog 53 5.5.2 VariantClause 55 5.5.3 TermSets 56

5.6 Funcionamento do Ambiente Interativo Prolog 56

5.7 Considerações Finais 58 6 Ambiente Operacional Interativo ParaLog 60

6.1 Implementando o ParaLog 60 6.1.1 Módulos Básicos 60

(7)

6.1.2 Módulo Sintático 61 6.1.3 Módulos de Regularização e Transformação 62

6.1.4 Módulo de Unificação 69 6.1.5 Módulo de Avaliação 69 6.2 Funcionamento do Ambiente Interativo ParaLog 71

6.3 Considerações Finais 73

7 Conclusões 74 7.1 Principais Resultados Obtidos 75

7.2 Sugestões de Trabalhos Futuros 76 APÊNDICES

A Programas em ASF+SDF 83 A.l Capítulo 3 - Linguagem Exp 83

A. 1.1 Booleans.sdf2 83 A. 1.2 Booleans.eqs 83 A.1.3 Identifiers.sdf2 84 A. 1.4 Integers.sdf2 84 A. 1.5 Integers.eqs 85 A.l.6 Layout.sdf2 88 A. 1.7 LingExp.sdf2 89 A. 1.8 LingExp.eqs 90 A.1.9 Value-EnvBool.sdf2 91

A. 1.10 Value-EnvBool.eqs 92 A. 1.11 Value-Envlnt.sdf2 92 A.l.12 Value-Envlnt.eqs 93 A.2 Capítulo 5 - Linguagem Prolog 93

A.2.1 Booleans.sdf2 93 A.2.2 Booleans.eqs 93 A.2.3 Equations.sdf2 94 A.2.4 Equations.eqs 94 A.2.5 EvalProlog.sdf2 94 A.2.6 EvalProlog.eqs 95 A.2.7 Layout.sdf2 98

(8)

A.2.8 NoniiaIisationPuiictioii.sdf2 99 A.2.9 NormalisationFunction.eqs 99 A.2.10 PrologPunctioiis.sdí2 99 A.2.11 PrologFunctions.eqs 100 A.2.12 PrologProgram.sdf2 100 A.2.13 PrologTenns.sdf2 101 A.2.14 Substitution.sdf2 102 A.2.15 Substitution.eqs 103 A.2.16 TermSets.sdf2 104 A.2.17 TermSets.eqs 104 A.2.18 Unification.sdf2 105 A.2.19 Unification.eqs 105 A.2.20 VariantClause.sdf2 106 A.2.21 VariantClause.eqs 107 A.3 Capítulo 6 - Linguagem ParaLog 108

A.3.1 Booleans.sdf2 108 A.3.2 Booleans.eqs 108 A.3.3 Closed.sdf2 109 A.3.4 Closed.eqs 110 A.3.5 EliminationO£Negation.sdf2 116

A.3.6 EliminationOfNegation.eqs 117

A.3.7 Equations.sdf2 118 A.3.8 Equations.eqs 118 A.3.9 EvalParaLog.sdf2 118 A.3.10 EvalParaLog.eqs 119 A.3.11 Layout .sdf2 125 A.3.12 NormalisationPunction.sdf2 125

A.3.13 NormalisationFunction.eqs 125 A.3.14 ParaLogPunctions.sdf2 125 A.3.15 ParaLogFunctions.eqs 126 A.3.16 ParaLogSyntax.sdf2 126 A.3.17 Substitution.sdf2 128 A.3.18 Substitution.eqs 129

(9)

A.3.19 TermSets.sdf2 1 3 1

A.3.20 TermSets.eqs 1 3 1

A.3.21 Unification.sdf2 1 3 1

A.3.22 Unification.eqs 1 3 1

A.3.23 VariantClause.sdf2 1 3 2

A.3.24 VariantClause.eqs 1 3 3

(10)

LISTA DE FIGURAS

4.1 Reticulado Seis 28 4.2 Árvore de Resolução do Prolog Padrão 43

5.1 Relação de dependência entre os módulos 47 5.2 Relação de dependência entre os módulos (cont.) 48

5.3 Programa de Relação Familiar em Prolog 57

6.1 Programa ParaLog valor de p 67 6.2 Programa ParaLog valor de p após processo de eliminação 67

6.3 Programa ParaLog valor de p após processo de fechamento 68 6.4 Programa ParaLog valor de p após processo de regularização 68 6.5 Programa ParaLog valor de p após processo de avaliação 71

6.6 Programa doença após o processo de avaliação 72

(11)

LISTA DE ABREVIATURAS

ASF — Algebraic Specification Formalism BNF — Backus-Naur Form

HG — Horn Generalizado

GIPE — Generation of Interative Programming Environments

INRIA — Institut National de Recherche en Informatique et en Automatique nh — não-Horn

ParaLog — Prolog Paraconsistente

ParaLoge — Prolog Paraconsistente Estendido PHG — Programa Horn Generalizado Prolog — Programação Lógica

SIS — Structural Inductive Semantics

SLD — Resolução Linear com Função de Seleção para as Cláusulas Horn SLD-nh — Resolução Linear com Fune. de Seleção para as Cláusulas não-Horn SDF — Syntax Definition Formalism

TransLog — Transformação de Programas Lógicos UMG — Unificador mais geral

(12)

RESUMO

O formalismo de semântica de transição define o significado dos programas de uma linguagem por meio de regras indutivas. Esta característica faz com que ele possa ser usado tanto no projeto quanto na implementação de protótipos de linguagens de programação.

Essas regras podem ser implementadas no meta-ambiente ASF+SDF, o qual permite o desenvolvimento e geração automática de sistemas interativos que manipulam programas, especificações ou outros textos escritos em uma linguagem formai, gerando dessa forma um interpretador para a linguagem. Com base em tais pressupostos, desenvolvemos uma especificação formal para a linguagem ParaLog, utilizando semântica de transição. O protótipo de um ambiente operacional ParaLog, implementado no ASF+SDF, funciona como um interpretador para programas paraconsistentes capaz de raciocinar na presença de uma base de conhecimento que contenha inconsistências.

Palavras-chave: semântica de transição, especificação formal, ASF+SDF, forma- lização de programas paraconsistentes.

(13)

ABSTRACT

Transition semantics is useful for the definition and construction of interpreters, as it allows the syntactic and semantic definition of a programming language by means of inductive rules. These rules can be implemented in the meta-environment ASF+SDF, which makes possible the development and automatic generation of interactive systems that manipulate programs, specifications or other texts written in a formal language, thus generating an interpreter for the language. On the basis of such assumptions, we develop a formal specification for the ParaLog language using transition semantics. The prototype of a ParaLog operational environment, implemented in ASF+SDF, is an interpreter for paraconsistent programs which is capable of reasoning in the presence of a knowledge base containing inconsistencies.

Key words: transition semantics, formal specification, ASF+SDF, formalization of paraconsistent programs.

(14)

CAPÍTULO 1 Introdução

Na atualidade, lógicas paraconsistentes [CSV89, CM87, CS89] têm sido alvo de estu- dos de pesquisa, principalmente no campo da ciência da computação, no âmbito da in- teligencia artificial. Estudos nessa área podem ser encontrados em: Inteligencia Artificial Distribuída [PA98], Lógica Modal e Multimodal [AA98, BP93, Sak92, APA97], Lingua- gens de Programação Lógica Paraconsistente [BS88, BS87, Sub87b], Robótica [FAT+99], Provadores de Teoremas [CHLS90], entre outros [AF98, NAS99].

O uso da programação lógica paraconsistente abre novos temas de pesquisa, pois reúne conceitos de programação lógica clássica com os conceitos de inconsistência, paracom- pleteza ou ambos, visando ao tratamento de incertezas. Um exemplo de linguagem de programação paraconsistente é o ParaLog [CPA+95], que utiliza conceitos de lógica para- consistente para o tratamento de conflitos de crença em suas bases de conhecimento.

No que se refere às linguagens de programação, vários métodos têm sido propostos para sua descrição formal. Entre eles, os métodos denotacional e operacional são os mais populares.

A Semântica Denotacional [Wat91, Win93] tem como característica principal definir o significado dos programas com funções matemáticas. O significado de cada frase é definido em termos dos significados de suas sub-frases.

A Semântica Operacional [Win93, Ast91] tem por objetivo declarar "como" uma frase é executada. Pode descrever transformações sintáticas que imitam a execução do programa em uma máquina abstrata ou definir uma relação entre o programa e os seus possíveis resultados [Mus96].

A característica comum de todos os formalismos operacionais é a definição indutiva de uma relação de transição [PI08I, Ast91].

(15)

Conforme apresentado em [BHK89], a implementação da semântica operacional de uma linguagem pode ser feita por meio de vários sistemas de software como: Lex [LS86], Yacc [Joh86], Metal (linguagem de especificação do sistema Mentor [KLMM83]), SSL (especificação da linguagem Synthesizer Generator [Rep82, RT89]), PSG (especificação da linguagem do sistema PSG [BS86]) e SDF [Kli92, HHKR92]. Em [HK89] encontramos a comparação entre SDF com Lex, Yacc e Metal.

Nessa comparação destaca-se o formalismo dado pelo SDF [HHKR92] que é um forma- lismo de definição sintática comparável à BNF em alguns aspectos, mas possui um amplo escopo para definição da sintaxe léxica e abstrata. Além disso, as definições sintáticas para Lex / Yacc / Metal e SSL são restritas para gramática LALR, enquanto SDF permite gramáticas livres de contexto arbitrárias. Portanto, em SDF:

• há uma melhor integração entre sintaxe léxica e sintaxe livre de contexto;

• nomes de tokens são, por exemplo, gerados automaticamente;

• é fixada correspondência entre regras de sintaxe livre de contexto e regras de sintaxe abstrata.

Podemos observar que o formalismo do SDF apresenta várias vantagens e é por isso que neste trabalho usaremos seus conceitos para desenvolver as regras de semântica de transição da linguagem ParaLog. A implementação das regras será feita no meta-ambiente ASF+SDF [Kli92, BKOO], que utiliza os conceitos do SDF para gerar um interpretador para linguagens de programação.

Muitas vezes, ao escrever em uma linguagem de programação, o programador de- seja representar suas crenças e não verdades absolutas [BS88]. Ele pode, por exemplo, escrever certas cláusulas porque acredita que elas sejam verdadeiras e não porque elas sejam obrigatoriamente verdadeiras. Por meio do ParaLog isso pode ser representado de maneira simples, uma vez que o mesmo permite a definição de constantes anotacionais [Abe92, Abe93, CAS91] e da resolução-SLDnh1 [BS87].

Desenvolver um ambiente para uma linguagem de programação paraconsistente amplia o escopo da aplicação da programação lógica em ambientes onde ocorrem conflitos de

1 Os referidos conceitos serão definidos no capítulo 4.

(16)

crença e informações contraditórias, uma vez que, em linguagens de programação clássica, esses conflitos são difíceis de ser tratados.

Dessa forma, nossas principais contribuições serão:

• especificação formal da linguagem ParaLog, usando semântica de transição;

• uso da especificação acima para gerar um ambiente de programação.

Cabe destacar que, apesar de existirem outras descrições (inclusive formais) de Para- Log, a definição aqui proposta é a primeira definição formal, usando semântica de transição da linguagem em todos os seus detalhes.

1.1 Organização da Dissertação

Esta dissertação está organizada em sete capítulos, descritos a seguir:

Capítulo 2 - Semântica Operacional. Neste capítulo descrevemos o funcionamento da semântica de transição [Ast91]. Desenvolvemos também a especificação formal das ex- pressões inteiras e booleanas, usando semântica de transição.

Capítulo 3 - ASF+SDF. Neste capítulo descrevemos o meta-ambiente ASF+SDF2

[KH92, BKOO], o qual pode ser usado na criação de uma especificação formal. Incluimos também um exemplo de como ficaria a implementação de expressões inteiras e booleanas, vistas no Capítulo 2, nesse meta-ambiente.

Capítulo 4 - Programação Lógica Paraconsistente. Descrevemos conceitos sobre Lógica Paraconsistente [CSV89, CM87, CS89], bem como explicitamos sua programação lógica [BS88, BS87, Sub87b]. Apresentamos também a linguagem de programação paraconsis- tente ParaLog [CPA+95]. Tal linguagem, além de englobar o Prolog padrão, estende seu escopo permitindo manipular inconsistência e/ou paracompleteza, intratáveis no Prolog padrão.

2Desenvolvido pelo European Community's Esprit program no projeto Gipe e Gipe II.

(17)

Capítulo 5 - Ambiente Operacional Interativo Prolog. Descrevemos aqui nosso protótipo de um ambiente operacional interativo Prolog, que servirá de base para a construção do protótipo de ParaLog. O desenvolvimento do ambiente interativo será feito em ASF+SDF, descrito no Capítulo 3.

Capítulo 6 - Ambiente Operacional Interativo ParaLog. A partir da formalização de pro- gramas Prolog obtida no Capítulo 5, descrevemos neste capítulo nosso protótipo de um ambiente operacional interativo ParaLog. A sintaxe e semântica propostas estão baseadas nos conceitos introduzidos no Capítulo 4, em conformidade [Abe92, Abe93, CAS91, CPA+95, BS87]. O desenvolvimento do ambiente também será feito em ASF+SDF.

Capítulo 7 - Conclusão. Neste capítulo são apresentadas as conclusões, bem como al- guns tópicos de pesquisa futura que podem dar continuidade ao presente trabalho.

(18)

CAPÍTULO 2 Semântica de Transição

Neste capítulo faremos uma breve introdução aos formalismos conhecidos como se- mântica operacional. Descrevemos com mais detalhes características da semântica de transição, que é considerada um marco na evolução do formalismo operacional [PI08I].

Para comparação e um estudo mais aprofundado sobre semântica operacional, o leitor pode buscar referências em [Ast91, Win93, Wat91, IFI91, Gun91, Mus96, Sil92],

Neste capítulo trataremos apenas da semântica de execução ou semântica dinâmica das linguagens de programação, devendo mencionar a existência da semântica estática dessas linguagens aonde o comportamento estático, principalmente de tipos, é estudado.

2.1 Semântica Operacional

A semântica de uma linguagem de programação descreve a relação entre a sintaxe dos programas e um modelo computacional para eles. Ela preocupa-se com a interpretação ou compreensão de programas.

Costuma-se construir a definição operacional de uma linguagem organizando-a em sintaxe abstrata1 e um conjunto de regras de avaliação das frases da linguagem2.

A característica comum a todos os formalismos operacionais é a definição indutiva de uma relação de transição, pela qual o significado de frases sintáticas é definido. Definições indutivas [Acz77] e sistemas de transição [PI08I, Ast91] são usados em descrições de semântica operacional.

Consideramos a seguir um exemplo de uma linguagem de expressões aritméticas e booleanas com variáveis e identificadores, a qual será denominada de Exp. Após, definire-

1 Define a gramática (árvore sintática) sem preocupar-se com regras de precedência, associatividade e pontuação.

2 Podem ser definidas de diversas formas, por exemplo, mediante uma máquina abstrata ou funções recursivas.

(19)

mos sua sintaxe e semântica.

O conteúdo das seções a seguir foram adaptados de [Ast91].

2.1.1 Sintaxe

Como representação de sintaxe abstrata, adotaremos a representação usual infixa com parênteses. Assumimos que Num denota um conjunto de representações de números natu- rais; true e false são símbolos sintáticos para verdade e falsidade; Id e Bid denotam dois conjuntos de símbolos, o conjunto de identificadores inteiros e booleanos, respectivamente.

Os elementos genéricos Num, Id e Bid serão denotados por n, id e bid, isto é, n, id e bid são variáveis sobre Num, Id e Bid respectivamente, e assim metavariáveis de Exp. Os conjuntos Iexp e Bexp são definidos representando-se as expressões inteiras e booleanas da linguagem Exp. Usando a notação BNF(Backus-Naur Form), temos:

(Exp) ::= (Iexp) | (Bexp)

(Iexp) ::= (Num) | (Id) | ((Iexp iop Iexp)) (Bexp) ::= (true) | (false) \ (Bid) \

((Bexp bop Bexp)) | ((Iexp rop Iexp)) \ ( -¡(Bexp) ) (iop) ::= + I * I —

(bop) ::= A | V

(rop) ::= > I < I <= I >=

A notação BNF acima indicada é uma notação compacta para a correspondente defi- nição indutiva da linguagem Exp. O nome à esquerda do símbolo ::= indica o conjunto a ser definido.

Por exemplo, a expressão 5 + 2 > = X pode ser construída usando a gramática acima, aplicando-se sucessivamente as regras.

Na seção seguinte, apresentaremos uma definição semântica para Exp.

2.1.2 Semântica

Em Exp, temos duas categorias de objetos: Iexp e Bexp, que são chamados de domínios semânticos. Note-se que a semântica associada a uma expressão inteira, dita e

(20)

(conjunto de metavariáveis de Iexp), não é um valor inteiro, mas uma função. Ou seja:

para qualquer atribuição de valores de identificadores das variáveis de e, nós conseguire- mos um valor inteiro. Assim, teremos que distinguir entre: conjuntos auxiliares de valores, conjuntos básicos, conjuntos estruturados e os conjuntos de valores correspondentes para categorias sintáticas de interesse, aqui Iexp e Bexp.

Vejamos como pode ser escrita uma definição da semântica operacional de Exp usando o formalismo da Semântica Indutiva Estruturada (SIS).

Primeiramente definimos o domínio básico de valores inteiros e booleanos. Assumimos que:

• Int e Bool denotam representações de valores inteiros e booleanos, respectivamente, para qualquer símbolo de operação op (incluindo símbolos de aridade 0);

• para qualquer n £ Num, n denota o correspondente valor em Int;

• true e false denotam verdade e falsidade em Bool;

• para valores nx e ri2, a representação do resultado de aplicar a operação "op" para esses os valores n^en^ê escrita por n\ op n2.

Definimos agora o domínio semântico das expressões. Chamamos de state uma a- tribuição de valores para conjuntos finitos de identificadores que preservam o tipo; isto é, o conjunto de estados denotados por State é o conjunto de mapeamentos finitos de subconjuntos de Id U Bid conforme: se s G State, s(id) G Int se id € Id e s(bid) G Bool se bid G Bid. Então, a semântica de uma expressão inteira e, notada I[e], é uma função que recebe o estado s, cujo domínio contém identificadores de e, devolvendo um valor inteiro I[e]s, ou seja, um elemento de Int, analogamente para expressões booleanas.

Formalmente, dados quaisquer dois conjuntos A e B, denotaremos por (A—>B)o conjunto das funções parciais de A em B\ se / e (A ->• B), então dom(f) = {a | / ( a ) € B}\ por

(A —> B)f indicamos o conjunto de funções parciais finitas de A em B.

Assim temos:

State = {(Id U Bid) (Int U Bool))f

I : Iexp (State —> Int)

(21)

B : Bexp (State Bool)

Podemos escrever e —f—> v para I[e]s = v; esta notação simplesmente enfatiza que para qualquer s nós conseguimos uma relação binária —j—>, que pode ser interpretada

"dado s, avalia para o valor inteiro". Note-se, contudo que — > Ç Iexp x State x Int;

portanto, ——.> é uma relação ternaria. Analogamente, podemos fazer o mesmo para a avaliação semântica das expressões booleanas, denotadas por B; podendo definir a relação

— Ç Bexp x State x Bool.

Temos assim duas funções semânticas correspondendo às duas categorias principais de objetos sintáticos. Agora, uma definição SIS consiste simplesmente na definição de relações ——.> e por meio de uma definição indutiva, cujas cláusulas são dirigidas pela estrutura sintática de expressões.

A definição indutiva da SIS pode ser feita em dois estilos:

• semântica de passo grande (big step) [Ast91, Gun91];

• semântica de passo pequeno (small step) [Ast91, Kah87].

Neste trabalho abordaremos somente a semântica de passo pequeno (também conhecida como Semântica de Transição), pois o desenvolvimento dos ambientes Prolog e ParaLog, descritos nos Capítulos 5 e 6 respectivamente, ocorre no meta-ambiente ASF+SDF[Kli92, HHKR92, BKOO], o qual utiliza naturalmente conceitos de semântica de transição para a criação de um ambiente operacional relativo a uma determinada linguagem. Para maiores informações sobre semântica de passo grande, o leitor pode referenciar-se em [Ast91, Mus96, Win93, Sil92].

2.2 Semântica de Transição

A semântica de transição é um formalismo que permite a definição de uma relação de passo pequeno (small step) entre frases de uma linguagem, visto que a semântica de um programa é caracterizada pela relação step e seu fecho reflexivo e transitivo.

Para definirmos a linguagem Exp em semântica de transição consideramos que:

• n e . b c denotam respectivamente quaisquer constantes inteiras e booleanas perten- centes a Num e a {true, false};

(22)

• id e bid representam respectivamente identificadores inteiros e booleanos perten- centes a Id e Bid;

• &, 61, &2 e ei, e2 representam respectivamente expressões do tipo booleana e inteiras pertencentes a Bexp e a Iexp;

• bv, bvi, h)2 e v, vi, denotam respectivamente valores booleanos e inteiros perten- centes a Bool e a Int;

• iop, bop e rop representam respectivamente símbolos matemáticos (+, *, —), booleanos (A, V) e relacionais (>, <, < = , >=).

Vejamos agora, por exemplo, as regras para definição de Exp:

id E dom(s)

onde bid G dorn(s) onde v = vi iop V2 onde bv = bv 1 bop bv2 onde bv = Vi rop V2 onde bv' = —>bv [01] n - 5 - » n

[02] bc-¡r> bç

[03] id -5-» s (id) onde [04] bid -s-> s(bid)

[05] (ü! iop v2) -J-* v

[06] (bv 1 bop bv2) -3-> bv [07] (i>i rop v2) s-* bv [08] ->(bv) -5-> bv'

(23)

As regras acima são essencialmente divididas em duas categorias:

• regras [01] - [08] definem um passo de avaliação elementar e são chamadas de axiomas;

• regras [09] - [15] definem a transformação de uma expressão correspondente aplicando um passo de avaliação elementar e são chamadas de regras de inferencia. O que está acima da linha é chamado numerador (premissas); e o que está abaixo da linha, algumas vezes é chamado de denominador (conseqüências).

Podemos notar, neste exemplo, que cada regra corresponde a um passo de avaliação elementar; cada passo transforma uma expressão em outra pela reescrita de suas subex- pressões, até a obtenção de uma expressão que não possa mais ser reescrita. Supondo que s = {(X 3)}, a avaliação da expressão X — 3 > = 0, utilizando as regras de semântica de transição desta Seção, pode ser dada pela seguinte tabela abaixo:

Termo Regra U s a d a

X - 3 > = 0

-s-» 3 — 3 > = 0 [03]

0 > = 0 [05]

t* true [07]

2.3 Considerações Finais

Este capítulo descreveu algumas características do formalismo de semântica de transição, o qual é útil para a construção de projetos de interpretadores, uma vez que nos permite a definição sintática e semântica de uma linguagem de programação por meio de regras, como foi o caso da avaliação das expressões booleanas nele mostrado.

A implementação dessas regras pode ser feita usando-se o meta-ambiente ASF+SDF, que descreveremos no capítulo a seguir.

(24)

CAPÍTULO 3 ASF+SDF

Descrevemos neste capítulo o meta-ambiente ASF+SDF, o qual é útil para especi- ficação de tipos abstratos de dados arbitrários, tradicionalmente chamada de especificação algébrica, bem como para a definição formal de qualquer linguagem de programação.

Este capítulo está baseado em [BCD+88, Kli92, HHKR92, BKOO].

3.1 ASF+SDF

O ASF+SDF [BCD+88, Kli92, BKOO] é um gerador genérico de ambientes interativos para linguagens de programação, o qual, dada a especificação formal de uma linguagem de programação, sintaxe e semântica, produz um ambiente paxa ela. Esse ambiente contém um:

• editor;

• interpretador ou compilador;

• type checker, e

• depurador.

O ambiente de especificação é baseado na combinação do formalismo Algebraic Speci- fication Formalism (ASF) com o formalismo Syntax Definition Formalism (SDF) [Kli92, HHKR92, BKOO]. O meta-ambiente fornece um editor de módulos para o desenvolvimento de especificações modulares. Cada módulo consiste de duas partes: uma para a sintaxe da linguagem e uma para sua semântica.

O estilo de definição da sintaxe dos programas assemelha-se à BNF, mas também trata da definição léxica e da sintaxe abstrata da linguagem. Por exemplo, a regra BNF:

(25)

(Exp) ::= (Iexp) \ (Bexp) pode ser escrita no meta-ambiente ASF+SDF como:

Iexp — Exp Bexp = Exp

A definição de uma linguagem em tal meta-ambiente consistirá das seguintes partes:

• definição da sintaxe concreta, isto é, lexical e context-free, bem como da sintaxe abstrata da linguagem;

• definição de suas semânticas estáticas e dinâmicas.

O SDF permite a definição da sintaxe concreta e abstrata em um único sistema. Seu projeto e implementação são adaptados para o projetista da linguagem, o qual deseja de- senvolver novas linguagens ou implementar as existentes de maneira altamente interativa.

O ASF é baseado na noção de um modelo que consiste de uma signature definindo a sintaxe abstrata das funções que operarão sobre termos da linguagem e um conjunto de equações condicionais. As equações definem a semântica operacional de transição da linguagem e são implementadas como um sistema de reescrita de termos [Klo92], produzindo especificações executáveis.

A especificação da linguagem tipicamente inclui características como:

• edição orientada pela sintaxe;

• verificação de tipos;

• execução de programas, incluindo execução passo-a-passo.

O uso do meta-ambiente traz algumas vantagens como o aumento de uniformidade e a redução do esforço de implementação, pois ele prove: formalismo de especificação algébrica baseada na lógica equacionai; estruturação modular de especificações; integrada definição de sintaxe léxica, livre de contexto e abstrata; escrita de suas especificações u- sando suas próprias notações (sintaxe definida pelo usuário), completa integração sintática e semântica [BKOO].

Em resumo, o ambiente ASF+SDF permite:

(26)

• escrever uma especificação formal para alguns problemas de forma interativa;

• criar um ambiente interativo para uma linguagem;

• analisar e transformar programas.

Na seção a seguir descrevemos a implementação da semântica de transição da linguagem jExp no meta-ambiente ASF+SDF. Essa seção está baseada nas definições sintáticas e semânticas descritas nas Seções 2.1.1 e 2.2.

3.2 Implementação da Linguagem de Expressões (Exp)

A implementação de um ambiente interativo para Exp consiste da definição sintática (SDF) e semântica (ASF) da linguagem, que gera, para cada módulo desenvolvido, res- pectivamente, os arquivos (module).sdf 2 e (module).eqs.

Para facilitar a criação do ambiente interativo da linguagem Exp, a implementação usará os módulos1 abaixo:

1. Layout define algumas sintaxes padrão do ambiente ASF+SDF, como: espaço, ta- bulação, caractere de nova linha, comentários (ver Apêndice A.l.6).

2. Booleans: é responsável por fazer avaliações de expressões booleanas. Este módulo teve alterações em relação à versão original, pois foram criadas as funções and, or e

neg, as quais fazem avaliações do tipo e, ou e não, respectivamente (ver Apêndices A.l.l e A.1.2).

3. Integers: permite fazer avaliações de expressões inteiras. Este módulo também sofreu alterações. Criamos as funções plus, sub e mult para realizar cálculos aritméticos, e as funções gt, ge, It e le para realizar operações relacionais (ver Apêndices A. 1.4 e A.l.5).

4. Value-Envlnt : define o mapeamento de estados para identificadores inteiros (ver Apêndice A.l.11 e A.1.12).

'Os referidos módulos fazem parte da implementação da linguagem exemplo denominada PICO [BKOO].

(27)

5. Identifiers: define os identificadores inteiros (Id) e booleanos (Bid). Este módulo foi alterado porque sua implementação original somente define identificadores inteiros.

Sua nova versão está listada abaixo2:

module Identifiers imports Layout exports

sorts Id Bid lexical syntax

[a-z] [a-zO-9]* Id [A-Z] [a-zO-9]* -> Bid variables

"id" [0-9\']* ^ Id

"bid" [0-9\']* -> Bid

Além dos módulos acima, criamos também os módulos Value-EnvBool e LingExp.

O primeiro módulo representa o mapeamento de estados para identificadores booleanos.

O segundo módulo conterá as definições sintáticas e semânticas de Exp, descritas nas Seções 2.1.1 e 2.2.

O módulo de expressões inteiras e booleanas possui dois arquivos: LingExp.sdf2 e LingExp. eqs. O primeiro deles define a sintaxe de expressões, e é listado a seguir:

module LingExp

imports Value-EnvBool Value-Envlnt exports

sorts Iexp Bexp Exp lexical syntax context-free syntax

Bexp Exp Iexp Exp Id -»• Iexp

Num —¥ Iexp Iexp "+" Iexp Iexp { l e f t }

Iexp "-" Iexp Iexp{Ieft}

Iexp "*" Iexp Iexp{left}

"(" Iexp ")" Iexp{bracket}

2 A sintaxe dos módulos será explicada em detalhes no próximo exemplo.

(28)

Bid Bexp Bool Bexp Bexp "&" Bexp Bexp{left}

Bexp "I" Bexp ->• Bexp{left}

Iexp ">" Iexp -»• Bexp Iexp " > = " Iexp Bexp Iexp "<" Iexp Bexp

Iexp " < = " Iexp -> Bexp

"not" "(" Bexp ")" -> Bexp

"(" Bexp ")" Bexp{bracket}

"step" "(" VENV VENVB "," Exp ")" Exp

"evalExp" "(" VENV "," VENVB "," Exp ")" Exp

"isnumber" "(" Exp ")" Bool variables

'v"[0-9\']* Num 'e"[0-9\']* -¥ Iexp 'bc"[0-9\']* Bool 'v"[0-9\']* ->• Num 'b"[0-9\']* -> Bexp

:IB"[0-9\']* Exp context-free priorities

Bexp "&" Bexp Bexp >

Bexp "I" Bexp -> Bexp >

Iexp "*" Iexp -» Iexp >

{left: Iexp "+" Iexp ->• Iexp { l e f t } Iexp "-" Iexp ->• Iexp { l e f t }

}

A listagem acima é composta pelas seguintes seções:

• sorts : nomes de domínios ou símbolos não terminais que podem ser usados em outras seções da especificação. De acordo com o módulo listado acima, nesta seção temos as definições de Iexp, Bexp e Exp, que representam respectivamente expressões inteiras, expressões booleanas e expressões inteiras e booleanas da linguagem Exp.

• lexical syntax : regras de sintaxe léxica. Neste seção os símbolos correspondentes a iop, bopz e rop da linguagem Exp (Capítulo 2) foram definidos diretamente para

3O s símbolos & e | representam respectivamente os símbolos A e V definidos na Seção 2.1.1.

(29)

facilitar a implementação na seção context-free.

• context-free syntax : regras de sintaxe da linguagem a ser especificada.

As regras definidas nesta seção correspondem à BNF da linguagem. Por exemplo, a regra de produção:

Iexp ::= Iexp "+" Iexp

é definida como:

Iexp "+" Iexp —» Iexp

Nesta seção, também é definida a sintaxe das regras de avaliação (semântica) da linguagem e algumas prioridades de parametrização e associatividade ("evalExp" e

"step", listadas anteriormente, são alguns exemplos de regras de avaliação).

A função notA é um exemplo de sintaxe da linguagem, enquanto a função step é um exemplo de função de avaliação e representa um passo de avaliação das expressões.

Esta função possue como argumentos um mapeamento (para expressões inteiras e booleanas — VENV, VENVB), e uma expressão (Exp) que passará por um processo de avaliação (small step) para devolver uma expressão.

• variables : definição das meta-variáveis da linguagem, as quais podem ser usadas de dois modos: como variáveis em definições semânticas adicionadas para definição SDF e como regras em programas durante edição dirigida pela sintaxe.

• context-free priorities : define relações de prioridades e associatividades entre os o- peradores. O símbolo > (Seção context-free priorities) indica que a expressão à esquerda tem maior prioridade do que a expressão à direita. Também definimos um grupo de função associativa (Seção context-free priorities - Iexp), a qual define como aceitar ou rejeitar árvores contendo ocorrências relacionadas de funções diferentes com a mesma prioridade. A palavra left é utilizada para fazer associações da esquerda para a direita.

4Representa o símbolo -> definido na Seção 2.1.1.

(30)

Em síntese, a definição SDF tem o propósito de definir:

• um conjunto de sentenças (strings) ;

• um conjunto de árvores sintáticas (árvore de parsing);

• uma relação entre sentença (árvore de parsing) e árvore de sintaxe abstrata.

Além do arquivo LingExp. sdf2, já descrito, tem-se também o arquivo LingExp.eqs.

Este arquivo consiste da definição small step da semântica da linguagem Exp definida na Seção 2.2, sendo transcrito parcialmente a seguir:

equations

[01] step(Venv, VenvB, n) = = n [02] step(Venv, VenvB, bc) = = bc

[03] step (Venv, VenvB, id) : = lookup (id , Venv) [04] step (Venv, VenvB, bid) = = lookupB(bid, VenvB)

[09a] step (Venv, VenvB, e l + e2) = = e l ' + e2 w h e n step(Venv, VenvB, el) = el' [10a] step(Venv, VenvB, v + e2) = = v + e2' w h e n step(Venv, VenvB, e2) = e2' [05a] step (Venv, VenvB, v l + v2) = = v w h e n plus(vl, v2) - v

[evl] evalExp (Venv, VenvB, n) = [ev2] evalExp (Venv, VenvB, IB) = [ev3] evalExp (Venv, VenvB, IB)

[ev4] evalExp(Venv, VenvB, IB) = n

true w h e n IB = true false w h e n IB =false IB" w h e n

IB != false, IB != true, isnumber(IB) = false, step(Venv, VenvB, IB) = IB',

evalExp(Venv, VenvB, IB') = IB"

De acordo com a listagem5 acima, a regra6 [01] faz a avaliação de um número natural, devolvendo o próprio número como resultado final. A regra [02] define a avaliação de um valor booleano (true ou false), devolvendo o próprio valor booleano. As regras [03] e [04]

representam a avaliação de um identificador inteiro e booleano respectivamente, e usam dois módulos: Value-Int e Value-Bool. A regra [05a] permite fazer avaliação de adição

5A listagem completa do programa está no Apêndice A.1.8.

6Não estão na ordem descritas no Capítulo 2, devido a problemas de ambigüidade da gramática no meta-ambiente ASF+SDF.

(31)

quando se têm dois valores numéricos (exemplo: 1 e 2). Para que a avaliação seja efetuada na regra [05a], torna-se necessário o uso do módulo Integers. A regra [09a] representa a avaliação quando se tem um conjunto de expressões inteiras tanto à esquerda quanto à direita do sinal de "+". A regra [10a] faz avaliação quando se tem um valor numérico à esquerda e uma expressão inteira à direita do sinal de "+". As quatro últimas regras [evl], [ev2], [ev3] e [ev4] permitem fazer a avaliação de uma expressão inteira ou booleana, devolvendo um resultado final. A primeira regra [evl] é utilizada quando a expressão já é um valor numérico. A segunda e a terceira regra ([ev2] e [ev3]) permitem devolver um valor true ou false quando a expressão é do tipo booleano. A última regra [ev4] faz a avaliação de uma expressão, até que um valor final seja encontrado para essa expressão.

Em resumo, em ASF o significado de operadores é definido por meio de um procedi- mento de normalização, isto é, um procedimento de expansão textual que elimina todas as estruturas modulares de uma especificação e consegue uma simples especificação, que consiste de uma signature e equations. Outros exemplos de especificações ASF podem ser encontradas em [BHK89, Hen91].

3.3 Considerações Finais

O formalismo ASF+SDF permite a definição tanto sintática quanto semântica de lin- guagens. Ele pode ser usado para a definição de linguagens de programação, especificação de reescrita, consulta de banco de dados, processamento de texto e aplicações dedicadas, ou seja, pode ser usado para especificação formal de uma ampla variedade de problemas.

Seu sistema de avaliação permite gerar um interpretador baseado nas regras da semântica da linguagem.

O ASF+SDF nos permite também o desenvolvimento e geração automática de sistemas interativos, manipulando programas, especificações ou outros textos que são escritos em uma linguagem formal. É, pois, por meio desse ambiente de desenvolvimento e dos con- ceitos de semântica de transição que nossos protótipos de especificação das linguagens Prolog e ParaLog, descritos nos Capítulos 5 e 6, foram desenvolvidos.

(32)

CAPÍTULO 4

Programação Lógica Paraconsistente

Neste capítulo descrevemos alguns conceitos importantes sobre Lógica Paraconsistente [BS88, CS89, CSV89, Cos93], bem como uma variação da linguagem Prolog baseada nas Lógica Anotadas [Abe92, Abe93, CAS91], denominada ParaLog [CPA+95, BS87].

4.1 Histórico da Lógica Paraconsistente

O manuseio de inconsistência em bases de conhecimento tem se tornado um problema prático [CS89]. Na construção dessas bases de conhecimentos recebemos informações de várias fontes, o que pode levar-nos a fatos contraditórios. Um exemplo disso seria a construção de um sistema médico especialista. No caso de um médico M.i concluir que o paciente P possui uma infecção viral, e ao mesmo tempo o médico A42 concluir que o mesmo paciente P possui rejeição alérgica, esses fatos contraditórios podem levar o paciente P a tomar decisões, como por exemplo, consultar-se com um terceiro médico M-z. Se fossemos construir um sistema com as opiniões dos médicos M. 1, M.2 e M3, teríamos provavelmente a presença de inconsistências.

Na lógica clássica não possuímos meios para lidar com essas inconsistências. Tec- nicamente, o motivo é que se em um sistema baseado em uma tal lógica houver uma contradição, todas as expressões bem formadas de sua linguagem (ditas "fórmulas" da linguagem) podem ser demonstradas, ou seja, nessa lógica "prova-se tudo".

Os principais precursores das idéias de paraconsistência são Jan Lukasiewicz e Nicolaj Vasil'év. Ambos em 1910, independentemente, apresentaram algumas perspectivas lógicas e resultados sob a lógica tradicional Aristotélica, os quais hoje podem ser incluídos no domínio de Lógica Paraconsistente. Em 1948, sob influência de Stanislaw Jaskowski,

(33)

Lukasiewicz propos o primeiro Cálculo Preposicional Paraconsistente, mas somente em 1950, independentemente dos trabalhos de Lukasiewicz, Vasil'év e Jaskowski, N.C.A. da Costa, desenvolveu várias lógicas paraconsistentes que possuem os seguintes níveis lógicos [Arr80, CM87, Cos93]:

• cálculo preposicional;

• cálculo de predicados;

• cálculo de predicados com igualdade;

• cálculo de descrições e teoria dos conjuntos.

4.2 Lógicas Paraconsistentes, Paracompletas e Não-Aléticas

Os conceitos apresentados nesta seção foram extraídos de [Á96, Cos93].

Seja considerada uma teoria dedutiva T fundada sobre uma lógica £, e suponha-se que uma linguagem de T e de £ possua um símbolo para a negação: se existir mais de uma negação, uma delas deve ser escolhida. Uma teoria T diz-se inconsistente se seus teoremas contêm ao menos dois deles, um dos quais é a negação do outro. Nesse caso, sendo A e A tais teoremas, normalmente deriva-se em T uma contradição, isto é, uma expressão da forma A A -1 A\ caso contrário, T é consistente.

Uma teoria T é dita trivial se todas as fórmulas de £ — ou todas as fórmulas fechadas de £ — forem teoremas de T, ou seja, se todos os enunciados sintaticamente corretos do ponto de vista da linguagem de T puderem ser provados em T. Se esse for o caso, a teoria não permite que se distinga o "demonstrável" do "não demonstrável", não apresentando interesse algum, uma vez que não se poderá separar o falso do verdadeiro.

Caso contrário, T é não trivial.

Uma Lógica Paraconsistente permite a convivência de contradições em uma teoria e substitue eficazmente a lógica convencional em algumas situações reais, quando esta se mostra ineficiente ou incapaz de ser aplicada. Dessa forma, uma lógica é considerada Paraconsistente se pode ser utilizada como lógica subjacente a teorias inconsistentes mas não triviais [Cos93].

(34)

Um outro conceito importante dentro das lógicas não clássicas são as lógicas Para- completas. Uma lógica £ diz-se Paracompleta se nela não for válido o princípio do terceiro excluído, isto é, não se pode ter em geral que A V ->A seja um teorema da lógica, dado uma fórmula A.

Uma lógica que é simultaneamente Paraconsistente e Paracompleta, é dita Não- Alética.

4.3 Lógica Anotada

Nesta seção, com base nas referências [Abe93, Abe92, CAS91, Á96], faremos um apa- nhado geral da lógica de primeira Ordem Anotada. Vale a pena ressaltar que as lógicas anotadas são lógicas paraconsistentes e, em geral, paracompletas e não-aléticas.

Essas lógicas foram estudadas do ponto de vista da programação lógica por Blair e Subrahmanian, e algumas de suas aplicações podem ser encontradas em [NAS99].

Seja r = (|r|, <) um reticulado finito fixo, no qual fixa-se um operador

|r| —> |r|

Esse reticulado é conhecido como reticulado de valores-verdades e ~ constitui o "sig- nificado" do símbolo de negação -i dos sistemas que serão considerados. Associados a esse reticulado r tem-se, ainda, os seguintes símbolos e operações:

• _L indica o mínimo de r;

• T indica o máximo de r;

• sup indica a operação de supremo — em relação a subconjuntos de r;

• inf indica a operação de ínfimo — em relação a subconjuntos de r.

A linguagem CT é definida medicante os seguintes símbolos primitivos e construtores (léxicos):

1. variáveis individuais: x,y,z,w,x 1;X2,... ;

2. para cada número natural n , símbolos funcionais n-ários (os símbolos funcionais 0-ários constituem o conjunto das constantes individuais);

(35)

3. para cada número natural n , símbolos de predicados n-ários;

4. o símbolo de igualdade = ;

5. cada membro de r é uma constante anotacional;

6. os símbolos ->, V, A, -», 3 e V;

7. os símbolos auxiliares (, ) e ,.

Os termos da linguagem CT são definidos de maneira usual. São utilizados a, b, c e d

— com ou sem índices — como meta variáveis para os termos.

DEFINIÇÃO. 4 . 3 . 1 (FÓRMULA) Uma fórmula básica é uma expressão do tipo p{ai,...,On),

em que p é um símbolo predicativo n-ário e oi,..., an são termos de Cr. Se p(a\,..., an) é uma fórmula básica e ¡i € r é uma constante anotacional, então pß(ai,..., an) e o = b

— onde a e b são termos — chamam-se fórmulas atômicas. As fórmulas têm a seguinte definição indutiva generalizada:

1. uma fórmula atômica é uma fórmula;

2. se A é uma fórmula, então ->A é uma fórmula;

3. se A e B são fórmulas, então i v B, A A B e A -» B são fórmulas;

4. se A é uma fórmula e x é uma variável individual, então ( 3x ) A e (Vx) A são fórmulas;

5. uma expressão de CT constitui uma fórmula se e somente se for obtida aplicando-se uma das regras — 1 a 4 — anteriores.

A fórmula é lida "a negação — ou negação fraca — de A" ; A V B "a disjunção de A e B"] A A B "a conjunção de A e B"\ A B "a implicação de B por A"; (3x)A "a instanciacão de A por x" ; (Vx)A "a generalização de A por x".

Introduz-se alguns símbolos definidos:

DEFINIÇÃO. 4 . 3 . 2 ( N E G A Ç Ã O F O R T E E EQUIVALÊNCIA) Sejam Ae B fórmulas quais- quer de CT, define-se:

(36)

(A B) =def ((.A B) A (B -> A)) e

( - A ) =&/ (A ((A A) A - ( A A)))

O símbolo -n denomina-se negação forte ; portanto, (~"A) deve ser lido a negação forte de A. A formula (A «-» B) é lida, usualmente como, a equivalência de A e B.

4.3.3 DEFINIÇÃO. Seja A uma formula. Então:

• -i°A indica A;

• indica -iA e

• -.kA indica {K e N, K > 0) Também, se fi 6 r, convenciona-se que:

• ¡J, indica /x;

• n indica ~ /i e

• rJ< n indica ~ i^*"1 //), (K € N, K > 0)

DEFINIÇÃO. 4 . 3 . 4 (LITERAL) Seja pß(a,i, —,an), uma formula atômica. Qualquer for- mula do tipo ...,an)(K > 0) denomina-se uma fórmula hiper-literal ou, simples- mente, literal. As demais fórmulas denominam-se fórmulas complexas.

A seguir, é apresentada uma descrição semântica para as linguagens JZT.

DEFINIÇÃO. 4 . 3 . 5 (ESTRUTURA) Uma estrutura v para uma linguagem CT consiste dos seguintes objetos:

1. um conjunto não-vazio |t>|, denominado o universo de v. Os elementos de \v\

chamam-se indivíduos de v\

2. para cada símbolo funcional n-ário / de CT, uma operação n-ária fv de |t>|n em \v\

— em particular, para cada constante individual e de CT, ev é um indivíduo de v\

3. para símbolo predicativo p de peso n de £T, uma função Pv ••

M

n

-> k|.

(37)

Seja v uma estrutura para CT. A linguagem-diagrama CT(v) é obtida de modo habitual.

Dado um termo livre de variável a de CT{v), define-se, também, de modo comum, o indivíduo v(a) de v. Utilizam-se i e j como meta-variáveis para denotar nomes.

Define-se, agora, o valor-verdade f(A) de uma fórmula fechada A de CT(v). A definição é obtida por indução sobre o comprimento de A. Por abuso de linguagem, utilizam-se os mesmos símbolos para meta-variáveis de termos da linguagem diagrama.

4.3.6 DEFINIÇÃO. Seja A uma fórmula fechada e v uma interpretação para CT. 1. Se A é atômica da forma on), então:

v (A) = 1 se e somente pv(v(ai),..., (an)) > ß v(A) = 0 se e somente pv(v(a{),..., (on)) ¿ ß 2. Se A é atômica da forma a = b, então:

v (A) = 1 se e somente se v(a) = v(b) v(A) = 0 se e somente se v(a) ^ v(b) 3. Se A é da forma ^{p^ai, ...,an))(K > 1), então:

v(A) = On)) 4. Sejam A e B formulas fechadas quaisquer. Então,

v(A A B) = 1 se e somente se v(A) = v(B) = 1 v(A y B) = 1 se e somente se v(A) = 1 ou v (B) = 1 v(A -> B) = 1 se e somente se v(A) = 0 ou v(B) = 1 5. Se A é uma formula fechada complexa, então:

v(-^A) = 1 — v(A) 6. Se A é da forma (3x)B, então:

v(A) = 1 se e somente se v(Bx[i]) = 1 para algum i em Cr(v)

onde Bx[i] denota a formula obtida pela substituição simultânea de x em B por i.

7. Se A é da forma (Vx)B, então:

(38)

v(A) = 1 se e somente se v(Bx[i]) = 1 para todo i em CT(v)

onde Bx[i] denota a fórmula obtida pela substituição simultânea de x em B por i.

4.3.7 TEOREMA. Sejam A, B e C formulas quaisquer de QT. Os conectivos -», V, A,-n, junto com os quantificadores V e 3, possuem todas as propriedades da implicação, dis- junção, conjunção e negação clássicas, bem como dos quantificadores V e 3 clássicos, respectivamente. Por exemplo, tem-se que:

1. h -nVzA 3x-nA 2. h ^ 3 xB V C o 3 x(B V C) 3. h -n3xB V 3xC 3x ( B V C)

O sistema de postulados — esquemas de axiomas e regras de inferência — para QT, que é apresentado a seguir, será denominado de Ar-

A, B, C denotam fórmulas quaisquer; F e G denotam fórmulas complexas; p denota uma fórmula básica; e ß,fij( 1 < j < n) denotam constantes anotacionais; x,xi, ...,xn, 2/i,..., yn são variáveis individuais.

(->X) A A )

(->2) {A (B C)) {(A B) (A -> C)) (->8) {(A ->B)->A)->A)

A,A-t B (->«) — ^

(AI) (A A £ ) A

(A2) ( A A B ) ^ B

(A3) A-+(B^(AAB))

(VI) A^{AvB)

(V2) B (Av B)

(V3) (A C) ( ( £ C ) ( ( A V B ) 4 C ) ) (-.1) ( F G ) - > ( ( F -IG) - > ->F)

( - 2 ) F —» ( - I F - » A)

( - . 3 ) F V - I F

(39)

(n) p±

(r2) h> i rk-lp ^ ) K > 1 (7-3) Pu Px, onde ß> X

(^4) P„i A p„2 A ... A pßn -> pß, onde ¡i = sup ¡ij, j = 1,2,..., n B A(x)

(Vi)

B->\/xA(x)

(V2) VxA{x) A(t) (30 A(t) 3xA(x)

A(x) B

(32) —

3xA{x) B (=1) x = x

(=2) = yi -»• ... = f(xu ...,xn) = f(y 1,..., yn)

( = 3 ) X i = Vi ••• - > • Xn = ! / n

4.3.8 DEFINIÇÃO. Uma estrutura A diz-se não-trivial se existe um átomo anotado fechado

Pxti,...,tn t a l q u e A{pxtu ...,tn) = 0.

Portanto, uma estrutura A é não trivial se e somente se existir algum átomo anotado fechado que não é válido em A.

4.3.9 DEFINIÇÃO. Uma estrutura A diz-se inconsistente se existe um átomo anotado fechado p\t\,..., ín tal que

-A(p\ti,...,ín) = 1 = A(-ipaíi, ...,tn)

Portanto, uma estrutura A é inconsistente se e somente se existir algum átomo anotado fechado tal que ele e a sua negação sejam válidos em A.

4 . 3 . 1 0 DEFINIÇÃO. Uma estrutura A diz-se paraconsistente se A é inconsistente e não- trivial. O sistema QT diz-se paraconsistente se existe uma estrutura A para Qr tal que A seja paraconsistente.

4 . 3 . 1 1 DEFINIÇÃO. Uma estrutura A diz-se paracompleta se existe um átomo anotado fechado p\ti, ...,tn tal que

(40)

A(pxti,...,tn) = O = A(pp\ti,...,

O sistema Qr diz-se paracompleto se existe uma estrutura A para QT tal que A seja paracompleto.

4.3.12 T E O R E M A . QT é paraconsistente se e somente se # r > 2. (O símbolo # indica o número cardinal de r).

4.3.13 T E O R E M A . Se Qr é paracompleto, então > 2 . Se # T > 2 , existem sistemas QT que são paracompletos e existem Qr que não são paracompletos.

4 . 3 . 1 4 T E O R E M A . Se QT é não-alética então # r > 2. Se # r > 2, existem sistemas Qr

que são não-aléticos e sistemas Qr que não são não-aléticos.

Por conseguinte, vê-se que os sistemas QT são em geral paraconsistentes, paracompletos e não-aléticos.

4 . 3 . 1 5 T E O R E M A . O cálculo QR é não-trivial.

Em [Abe92] foram demonstrados teoremas de correção e de completeza para os cálculos Qt. Em [CAS91] evidencia-se que a teoria anotada dos conjuntos é extraordina- riamente forte, envolvendo, como caso particular, a teoria dos conjuntos difusos — fuzzy sets.

4.4 Programação Lógica Paraconsistente

Blair e Subrahmanian [BS88, Sub87a] introduziram o uso de lógicas anotadas em programação lógica. Seus trabalhos mostraram que é possível e conveniente associar anotações às cláusulas Horn [Bra86].

Esta seção contém um apanhado geral de tais trabalhos. Para fixar, considera-se um reticulado finito r = (|T|, <), onde r = { JL , t, f , It, If T }, como foi definido em [AS87].

Os elementos que compõem o reticulado, conhecidos como constantes anotacionais, repre- sentam respectivamente: indefinido, verdade, falso, quase verdadeiro, quase falso e sobre

definido — em uma lógica com 6 anotações. O símbolo T , de forma intuitiva, pode ser visto como inconsistente. Na Figura 4.1 temos o diagrama de Hasse e podemos observar a ordem < subjacente.

(41)

• A -

Figura 4.1: Reticulado Seis

Considera-se, também, o operador |r| |r|, definido a seguir (a exposição que se segue pode ser adaptada para um reticulado finito arbitrário)

4 . 4 . 1 DEFINIÇÃO. O operador r r é definido como [Sub87a, C P A + 9 5 ] :

• - ( / ) = í;

. ~ ((f) = i f , . ~ (it) = i f ,

• ~ (-L) = -L;

• ~ (T) = T.

4.4.1 Sintaxe

DEFINIÇÃO. 4 . 4 . 2 (LITERAL ANOTADO) Se p é uma fórmula básica e p, € {t, / } , então diz-se que pß é um literal bem-anotado, e que fx é uma boa-anotação de p.

\

As vezes escreve-se p:p em vez de p¿, as demais noções sintáticas são introduzidas como na seção anterior.

Intuitivamente, o átomo anotado qualquer p:p, pode ser lido como: "crê-se em p com o grau de crença menor do que ou igual a p,".

DEFINIÇÃO. 4 . 4 . 3 (CLÁUSULA H O R N GENERALIZADA) Se p0\p^,...,pn:pn são literais bem-anotados, então

p0:fio <= pi.pLI A...A pn:pn

(42)

chama-se cláusula horn generalizada — ou cláusula-hg, chama-se cabeça da cláusula, enquanto que pi'.ßi A...A pn:p,n denomina-se corpo da cláusula.

A aplicação de uma substituição 9 para uma fórmula básica p de um literal anotado p\¡x resulta no literal p9\¡i. A noção de substituição é estendida de forma óbvia para uma conjunção de literais anotados e para cláusulas-hg.

Uma unificação mais geral — umg — de fórmulas básicas p e q é a unificação 9, tal que para qualquer unificação £ dos literais p e q, há uma substituição 7, tal que #7 = Se dois literais anotados são unificáveis, então eles possuem uma unificação mais geral.

DEFINIÇÃO. 4 . 4 . 4 (UNIFICAÇÃO) Se p-./j, e q:p são literais, então diz-se que p:p, e q:p são unificáveis s e p e q são unificáveis.

DEFINIÇÃO. 4 . 4 . 5 (PROGRAMA H O R N GENERALIZADO) U M Programa Horn Generali- zado — PHG — é qualquer conjunto finito, não vazio, de cláusulas-hg.

4.4.2 Semântica

Todas as interpretações têm como domínio a base de Herbrand, isto é, o universo de indivíduos da interpretação consiste dos termos básicos da linguagem que está sendo interpretada. Uma interpretação é uma função I:BL -» r, onde Bl é A base Herbrand em consideração e r é o reticulado subjacente.

4 . 4 . 6 DEFINIÇÃO. AS notações ( V ) F e ( 3) F são usadas para denotar fechamento universal e fechamento existencial da fórmula F.

4.4.7 DEFINIÇÃO. Diz-se que a interpretação I satisfaz um Programa Horn Generalizado G se ela satisfaz todas as cláusulas-hg C pertencentes a G.

4 . 4 . 8 DEFINIÇÃO. Se I satisfaz um Programa Horn Generalizado G, então diz-se que I é um modelo para G.

A ordenação < sobre as constantes anotacionais é estendida, de forma óbvia, para as interpretações. De fato, dado o PHG G e as interpretações Herbrand Iy e J2, diz-se que

h < h se e somente se (Vp e BG)h(p) < hip)

(43)

onde BG é a base Her brand de G. Note-se que o conjunto das interpretações constitui um reticulado completo em relação à ordem <.

4.4.9 DEFINIÇÃO. Se C é uma cláusula-hg em G, então o resultado da substituição de todo literal negado ~<p'-p em C por p p chama-se contraparte positiva Cpos de C.

4 . 4 . 1 0 DEFINIÇÃO. O P H G obtido pela substituição de cada cláusula-hg C no P H G G por Cpos chama-se contraparte positiva de G e denota-se por Gpos.

4.4.11 LEMMA. 11= (3)->P:// se e somente se / (= p. Analogamente, 11= (V)-Ip:p

se e somente se I (= (V)P p.

4.4.12 T E O R E M A . I é um modelo de G se e somente se I é um modelo de Gpos.

O teorema acima assegura que o dispositivo de anotação é poderoso o suficiente para tornar o uso de átomos negados desnecessários. Conseqüentemente, a partir desse ponto, será assumido que os PHGs não possuem negação de literais.

4 . 4 . 1 3 DEFINIÇÃO. Supondo-se que G é um PHG, define-se Tq como uma aplicação de interpretações Herbrand de G em interpretações Herbrand de G, onde

TG{I)(J>) = s u p {P\p:p <= qi'-ßi A ... A qk'-ßk é uma instância básica de uma cláusula-hg em G e I |= qnpi A ... A qk-Pk}

4 . 4 . 1 4 DEFINIÇÃO. A interpretação I de um P H G diz-se normal se verifica a seguinte condição:

(Vp e BG)TG(p) # T

4.4.15 DEFINIÇÃO. Diz-se que um PHG G é bem-comportado se as cláusulas-hg de G satisfazem às seguintes condições:

1. se Ci e G<l são cláusulas-hg em G, sendo suas cabeças p\.p\ respectivamente e

2. se pi e P2 são unificáveis, então pi é comparável com p<¿

(44)

4.4.3 A Semântica Operacional dos PHGs

4.4.16 DEFINIÇÃO. Se G é um P H G , p é um átomo na linguagem d e G e / I uma anotação, define-se uma árvore e/ou T(G,p:p) da seguinte forma:

1. a raiz de T(G,p:ß) é um nó-ou rotulado p:/i;

2. se N é um nó-ou , então ele é rotulado por um literal anotado simples;

3. cada nó-e é rotulado por uma cláusula-hg de G e por uma substituição;

4. descendentes de um nó-ou são nós-e e os descendentes de nós-e são nós-ou ; 5. se N é um nó-ou rotulado por q:a(a ^ 1 ) , e s e C6 é uma instância de uma

cláusula-hg C em G da seguinte forma:

q:ß <= Di.ipi A ... A Dk\t¡)k

onde, ß > a, então há um descendente de N rotulado por C e 9. Um nó-ou sem descendente chama-se nó não-informativo;

6. se N é um nó-e rotulado por uma cláusula C e a substituição 9, então para todo literal anotado q:7 no corpo de C, há um nó-ou descendente rotulado q9:7. Um nó-e sem descendente chama-se nó-sucesso.

Associado a todo nó N da árvore e/ou T(G,p\p) existe uma constante anotacional v(N), chamada valor do nó.

Define-se v assim:

1. se N é um nó sucesso rotulado q:tp, então f(iV) = 2. se N é um nó não-informativo, então v(N) = _L;

3. se N é um nó-ou que não é não-informativo e seus descendentes são iVi,..., Nk, então u(N) = sup {»(N^, ...,v(Nk)}-,

4. se N é um nó-e e não-terminal com a cláusula-hg p:p q\:ip\ A ... A qk'i>k, e se o valor v(Ni) de cada um de seus nós descendentes Ni rotulados qi é tal que v(Nj) > ipi para todo 1 < i < k, então v(N) — p; senão v(N) = _L.

Referências

Documentos relacionados

A prevalência global de enteroparasitoses foi de 36,6% (34 crianças com resultado positivo para um ou mais parasitos), ocorrendo quatro casos de biparasitismo, sendo que ,em

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

(1983) estudaram o efeito da adição de monensina (l00mg) em dietas de novilhas da raça holandesa, recebendo 33% de concentrado e 67% de volumoso, verificaram que houve aumento de

3.3 o Município tem caminhão da coleta seletiva, sendo orientado a providenciar a contratação direta da associação para o recolhimento dos resíduos recicláveis,

Para preparar a pimenta branca, as espigas são colhidas quando os frutos apresentam a coloração amarelada ou vermelha. As espigas são colocadas em sacos de plástico trançado sem

A solução, inicialmente vermelha tornou-se gradativamente marrom, e o sólido marrom escuro obtido foi filtrado, lavado várias vezes com etanol, éter etílico anidro e

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)

O Sistema de Abastecimento de Água é uma obra da comunidade e para seu melhor aproveitamento é fundamental que as famílias. estejam organizadas