Capítulo 2 Lógica Proposicional Lógica para Programação LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08 c Inês Lynce c Luísa Coheur
Programa Apresentação Conceitos Básicos Lógica Proposicional ou Cálculo Proposicional Lógica de 1 a ordem ou Lógica de Predicados Programação em Lógica Prolog
Programa Apresentação Conceitos Básicos Lógica Proposicional ou Cálculo Proposicional Lógica de 1 a ordem ou Lógica de Predicados Programação em Lógica Prolog
Bibliografia Martins J.P., Lógica para Programação, Capítulo 2. Ben-Ari M., Mathematical Logic for Computer Science, Springer-Verlag, 2003, capítulos 2 e 4 (parte) Huth M. e Ryan M., Logic in Computer Science, Cambridge University Press, 2004, capítulos 1 e 6 (parte)
Componentes de uma Lógica (relembrar) 1. Linguagem 2. Sistema dedutivo 3. Sistema semântico
Sistema Semântico 1. O que acontece num sistema semântico? 2. Conceitos básicos 3. Como obter o valor lógico de uma fbf? 4. Diagramas de decisão binários (BDDs) 5. Diagramas de decisão binários ordenados (OBDDs)
Sistema Semântico 1. O que acontece num sistema semântico? 2. Conceitos básicos 3. Como obter o valor lógico de uma fbf? 4. Diagramas de decisão binários (BDDs) 5. Diagramas de decisão binários ordenados (OBDDs)
Como tínhamos visto, um BDD pode ter símbolos proposicionais não ordenados z y x x y 0 1
... e assim sendo, até caminhos incompatíveis... x y z x y x 0 1
Conceito: BDD ordenado Seja [x 1,x 2,...,x n ] uma lista ordenada de símbolos proposicionais sem duplicações Seja B um BDD cujos símbolos proposicionais estão contidos na lista [x 1,x 2,...,x n ] Diz-se que B tem a ordenação [x 1,x 2,...,x n ] se se verificarem ambas as seguintes condições: todos os símbolos proposicionais de B ocorrem na lista; sempre que x i ocorre antes de x j ao longo de um caminho em B então i < j.
Conceito: OBDDs Um BDD ordenado diz-se um OBDD.
Exemplo: ordenação [x, y, z] x y y z 0 1 Também podemos dizer que este OBDD tem a ordenação [x,a,y,z,b]
E a escolha a ordenação afecta o tamanho do OBDD? Sim, tipicamente a ordenação afecta o tamanho do BDD; Encontrar ordenação óptima é computacionalmente difícil; Normalmente são usadas heurísticas.
Exemplo (x 1 x 2 ) (x 3 x 4 )... (x 2n 1 x 2n ) Ordenação [x 1, x 2,..., x n ] Ordenação [x 1, x 3,..., x 2n 1, x 2, x 4,..., x 2n ]
Ordenação [x 1, x 2,..., x 6 ] x 1 x 2 x 3 x 4 x 5 x 6 0 1
Ordenação [x 1, x 3, x 5, x 2, x 4, x 6 ] x 1 x 3 x 3 x 5 x 5 x 5 x 5 x 2 x 2 x 2 x 2 x 4 x 4 x 6 0 1
OBDDs compatíveis Duas ordenações para B 1 e B 2 dizem-se compatíveis se nunca se verifica que x ocorre antes de y em B 1 e y ocorre antes de x em B 2
Teorema: OBDDs reduzidos Dada uma relação de ordem total e uma fbf, o OBDD reduzido correspondente é único.
Ou dito de outra maneira... Se aplicarmos as transformações R1-R3 a um OBDD então obtemos sempre o mesmo OBDD reduzido (a ordem de aplicação das transformações é irrelevante).
Assim... Se B e B são dois OBDDs reduzidos com ordenações de simbolos proposicionais compatíveis e que representam a mesma fórmula então têm estruturas idênticas.
Pode-se então dizer que... Os OBDDs têm uma forma canónica.
A forma canónica é muito importante, pois possibilita a realização de vários testes Ausência de símbolos proposicionais redundantes Teste de validade Teste de satisfazibilidade Teste de inconsistência Teste de equivalência semântica Teste de implicação
Ausência de símbolos proposicionais redundantes Dada uma fbf e um símbolo proposicional s que ocorre nessa fbf, se o valor da fbf não depende de s então s não ocorre no OBDD que representa a fbf.
Teste de validade Uma fbf é uma tautologia sse é representada pelo OBDD reduzido B 1.
Teste de satisfazibilidade Uma fbf é satisfazível sse o seu OBDD reduzido não é B 0.
Teste de inconsistência Uma fbf é uma contradição sse o seu OBDD reduzido é B 0.
Teste de equivalência semântica Dadas duas fbfs representadas por dois OBDDs com ordenações de símbolos proposicionais compatíveis, é possível decidir eficientemente se as fbfs são semanticamente equivalentes: as fbfs são equivalentes sse os respectivos OBDDs reduzidos têm uma estrutura idêntica.
Teste de implicação Uma fbf α implica uma fbf β sse o OBDD reduzido para α β é representada pelo OBDD reduzido B 0.
Mais ainda: os OBDDs podem ser uma maneira compacta de representar fórmulas Função de paridade par: dados n símbolos proposicionais, devolve V sse existe um número par de símbolos com valor V Representação com OBDDs: 2n + 1 nós (independentemente da ordenação) Representação CNF é exponencial x 1 x 2 x 2 x 3 x 3 x 4 x 4
Vamos agora estudar uma série de algoritmos para OBDDs... 1. Reduz 2. Aplica 3. Restringe
Vamos agora estudar uma série de algoritmos para OBDDs... 1. Reduz 2. Aplica 3. Restringe
Algoritmo Reduz Permite reduzir eficientemente OBDDs (é uma alternativa às redução estudadas anteriormente); Tem duas etapas principais: rotula; compacta.
Exemplo Peguem lá em papel e lápis e vamos lá ver como é que isto funciona com um exemplo!
Algoritmo Reduz - conceitos auxiliares Cada nó não terminal n tem um nó positivo e um nó negativo associados: pos(n) representa o nó apontado pelo arco a cheio que tem início em n; neg(n) representa o nó apontado pelo arco a tracejado que tem início em n.
Algoritmo Reduz - conceitos auxiliares Funções associadas aos rótulos: id(n): devolve o rótulo do nó n; id!(n, r): associa o rótulo r ao nó n.
Algoritmo Reduz rotula Nós terminais com o rótulo 0 são etiquetados com #0; Nós terminais com o rótulo 1 são etiquetados com #1;
Algoritmo Reduz rotula Por níveis debaixo para cima: Caso 1: se id(neg(n)) = id(pos(n)) então id!(n, neg(n))(ou id!(n, pos(n))); Caso 2: se existe um nó m tal que: raiz(n) = raiz(m); id(neg(n)) = id(neg(m)); id(pos(n)) = id(pos(m)); então id!(n, id(m)). Caso 3: atribui-se um novo rótulo a n.
Algoritmo Reduz compacta Percorre-se o OBDD uma vez, eliminando os nós com rótulos repetidos.
Exemplo: Reduz #4 x 1 #4 x 1 #3 x #2 2 x 2 Reduz = #3 x 2 #2 x #2 3 x 3 #2 x 3 #0 0 #1 1 #0 0 #1 1 #0 0 #1 1
Vamos agora estudar uma série de algoritmos para OBDDs... 1. Reduz 2. Aplica 3. Restringe
Algoritmo Aplica Usado para implementar operações binárias como por exemplo e ; Basicamente, dados dois OBDDs B f e B g que representam duas operações binárias f e g, o algoritmo Aplica(f op g) produz o BDD que corresponde à fórmula (f op g).
Intuitivamente... O algoritmo aplica actua recursivamente usando a estrutura dos dois OBDDs: Seja s o símbolo proposicional que aparece em primeiro lugar na lista ordenada; Divide-se o problema em dois sub-problemas: um sub-problema em que s é verdadeiro e outro sub-problema em que s é falso; Nas folhas, aplica-se a operação op directamente. No final aplica-se (por exemplo) o algoritmo reduz para obter um OBDD reduzido.
Exemplo Peguem lá outra vez em papel e lápis, se fazem favor...
Aplica: algoritmo Abordagem top-down começando pela raiz (o algoritmo é recursivo) Sejam r f e r g as raizes dos OBDDs B f e B g, respectivamente Caso 1: se r f e r g são nós terminais com os rótulos rt f e rt g, respectivamente, então calculamos o valor de (rt f op rt g ) e obtemos a OBDD B 0 correspondente ao valor Falso ou B 1 correspondente ao valor Verdadeiro; Caso 2: se r f e r g são dois nós são não terminais e têm o mesmo rótulo (designado por x i ). Então criamos um nó não terminal n com o rótulo x i : Com um arco tracejado para aplica(op, neg(r f ),neg(r g)); Com um arco a cheio para aplica(op, pos(r f ),pos(r g));
Aplica: algoritmo (cont.) Caso 3: se r f é um nó não terminal x i e r g é um nó terminal ou um nó não terminal x j com j > i então sabemos que não existe nenhum nó x i em B g porque os dois OBDDs têm ordenações compatíveis. Então criamos um nó não terminal n com o rótulo x i : Com um arco tracejado para aplica(op, neg(r f ), r g ) Com um arco a cheio para aplica(op, pos(r f ), r g ) Nota: O caso em que r g é um nó não terminal x i e r f é um nó terminal ou um nó não terminal x j com j > i é tratado simetricamente;
Aplica: algoritmo (cont.) Não esquecer de reduzir o OBDD no fim!!!
Exemplo: argumentos para a operação R 1 x 1 S 1 x 1 R 2 x 2 x 3 R 3 x 3 S 2 R 4 x 4 S 3 x 4 R 5 R 6 S 4 S 5 0 1 0 1
Exemplo: OBDD resultante de aplica(, B f, B g ) x 1 x 2 x 3 x 4 0 1
Aplica: memorização (do Inglês memoisation) Muitas chamadas recursivas podem ser exactamente iguais Memorização permite que o resultado destas chamadas seja calculado apenas uma vez e guardado em memória Chamadas seguintes acedem directamente ao resultado memorizado Sem memorização: complexidade exponencial em função da dimensão dos argumentos Com memorização: número de chamadas a apply limitado superiormente por 2 B f B g, em que B corresponde à dimensão do BDD
Vamos agora estudar uma série de algoritmos para OBDDs... 1. Reduz 2. Aplica 3. Restringe
Restringe: definições auxiliares f[1/s] representa a fórmula obtida ao substituir as ocorrências de s em f por 1 f[0/s] representa a fórmula obtida ao substituir as ocorrências de s em f por 0 f[1/s] e f[0/s] são chamadas restrições de f
Exemplo Se f for a fórmula x (y x) então f[0/x] corresponde à fórmula F (y F) (equivalente a F) e f[1/y] corresponde à fórmula x (V x) (equivalente a x)
Restringe restringe(0,x, B f ) calcula o OBDD reduzido que representa f [0/x] usando a mesma ordenação que B f restringe(1,x, B f ) calcula o OBDD reduzido que representa f [1/x] usando a mesma ordenação que B f
Restringe: algoritmo restringe(0,x, B f ) Para cada nó n com o rótulo x os arcos que têm n como nó final são dirigidos para neg(n) e o nó n é removido restringe(1,x, B f ) Para cada nó n com o rótulo x os arcos que têm n como nó final são dirigidos para pos(n) e o nó n é removido No final aplica-se o algoritmo reduz para obter um OBDD reduzido
Exemplo: OBDD B f x 1 y 1 x 2 y 2 x 3 y 3 0 1
Exemplo: restringe x 1 x 1 x 1 y 1 y 1 y 1 x 2 x 2 x 2 y 2 y 2 y 2 y 3 y 3 0 1 0 1 0 1 restringe(0,x 3, B f ), restringe(1,x 3, B f ), resultado de aplica(,restringe(0,x 3, B f ),restringe(1,x 3, B f ))
Restringe: algoritmo Não esquecer de reduzir o OBDD no fim!!!
Últimas notas em relação ao uso de OBDDs OBDDs são eficientes para representar sistemas que não crescem muito e muito depressa Importância da ordenação escolhida (heurística) Complexidade exponencial em função do número de símbolos proposicionais no pior caso
E agora vamos entrar na última secção do Capítulo 2 Vamos rever uns conceitos Vamos ver umas propriedades da lógica proposicional
Componentes de uma lógica (relembrar) Podemos manipular as frases da linguagem a dois níveis diferentes: A nível simbólico - sistema dedutivo: realização de operações de manipulação de símbolos que dão origem a sequências de frases que começam pelas premissas e tentam obter uma conclusão A nível do significado - sistema semântico: atribuição de significado/valor lógico às proposições de um argumento com o objectivo de avaliar validade/invalidade de um argumento
Manipulação a nível simbólico sistema dedutivo (relembrar) Composto por um conjunto de regras para a manipulação de símbolos chamadas regras de inferência. Estas regras especificam como formar novas fbfs a partir das fbfs existentes
Manipulação a nível simbólico sistema dedutivo prova de um argumento (relembrar) Prova de um argumento (,α): sequência finita de fbfs geradas a partir de de modo a obter α, tal que cada fbf ou é uma premissa ou é o resultado da aplicação de uma regra de inferência a uma ou mais fbfs anteriores da prova
Manipulação a nível simbólico sistema dedutivo derivação e demonstração (relembrar) Dado um argumento (,α), α é derivável a partir de, ou seja, α sse existir uma sequência de regras de inferência que aplicadas às fbfs de (e às fbfs geradas a partir de ) produz α. Por outras palavras, α é derivável a partir de se existe uma prova de α a partir de Se α então o argumento (,α) é demonstrável
Manipulação a nível simbólico sistema dedutivo axiomas e teoremas (relembrar) Axioma: fbf que é aceite sem demonstração O conjunto de todas as fbfs deriváveis a partir de L corresponde à teoria gerada a partir de, ou seja, aos teoremas de (Th( ))
Manipulação a nível de significado sistema semântico (relembrar) Especifica as condições sob as quais as proposições são verdadeiras ou falsas Uma interpretação permite determinar os valores lógicos das proposições
Manipulação a nível de significado sistema semântico implicação lógica (relembrar) Dado um argumento (,α), se não existe nenhuma interpretação que torna todas as proposições em verdadeiras e α falso, então diz-se que implica logicamente α ou que α é uma implicação lógica (ou consequência lógica) de, ou seja, = α Se = α então o argumento (,α) é válido
Conceitos de solidez (relembrar) Solidez de uma lógica: qualquer argumento demonstrável (pelo sistema dedutivo) é válido (de acordo com a semântica)
E se houvesse alguma regra de inferência mal pensada?
Conceitos de completude (relembrar) Completude de uma lógica: qualquer argumento válido (de acordo com a semântica) é demonstrável (pelo sistema dedutivo)
E se houvesse alguma regra de inferência a menos?
Relação entre os conceitos de solidez e completude (relembrar) Os conceitos de solidez e completude estabelecem uma relação entre o sistema dedutivo e a semântica Numa lógica sólida e completa os conceitos de derivabilidade e validade são equivalentes
Relação entre os conceitos de solidez e completude (relembrar) Linguagem Sistema dedutivo Semântica Derivabilidade Solidez Completude Validade =
Assim, agora vamos estudar a solidez e completude da lógica proposicional
A provar: a lógica proposicional é sólida, isto é...... para quaisquer fbfs α 1,...,α n, se {α 1,...,α n } β então {α 1,...,α n } = β
Por outras palavras...... se consigo provar, usando o sistema de dedutivo, que {α 1,...,α n } β, então β é consequência lógica de {α 1,...,α n } (ou seja, não existe nenhuma interpretação que torna todas as proposições em {α 1,...,α n } verdadeiras e β falso).
Como é que vamos provar isto? Por indução matemática, sendo n o comprimento da prova: Base de indução: provar que é verdade para provas de tamanho 1 Hipótese de indução: assume-se que é verdade para provas de tamanho n A provar: verificar que é verdade para provas de tamanho n+1
Base de indução Se uma prova tem 1 linha, então tem a forma: 1 α Prem Devido à existência desta prova, {α} α. Ora, por razões óbvias {α} = α (não é possível arranjar uma interpretação que torne todas as fórmulas de {α} verdadeiras e α falso), pelo que a propriedade de solidez se verifica para qualquer prova com apenas uma linha.
Hipótese de indução Suponhamos que para qualquer prova com n (ou menos linhas) que estabeleça {α 1,...,α n } β, então verifica-se igualmente {α 1,...,α n } = β
Resta então provar que...... o mesmo se verifica para qualquer prova com n + 1 linhas.
E para fazermos esta prova...... há que considerar exaustivamente as possibilidades de passar uma prova de n linhas para uma prova com n+1 linhas. E para isso há que considerar cada uma das regras de inferência estudadas.
Peguem em papel e lápis...... e vamos lá ver como é que isto se faz.
Caso I Suponhamos que {α 1,...,α k } β e que a prova disto é dada por (nota: máx n passos): 1 α 1 Prem... k α k Prem... n β
Caso I Por hipótese de indução: {α 1,...,α k } = β
Caso I Suponhamos que agora que {α 1,...,α k } (γ σ) e que a prova disto é dada por (nota: n+1 passos): 1 α 1 Prem... k α k Prem... n+1 γ σ
Caso I Será que {α 1,...,α k } = (γ σ)? É isto que temos de provar...
Caso I De acordo com a regra de inferência I, para γ σ serem introduzidos na prova, então é porque quer γ, quer σ já existiam na prova. Ou seja: {α 1,...,α k } γ e {α 1,...,α k } σ Considerando as provas até aos pontos em que γ e σ foram introduzidos, essas provas têm um número de linhas menor ou igual a n.
Caso I Então, por hipótese de indução, verificam-se ambas as seguintes condições: {α 1,...,α k } = γ {α 1,...,α k } = σ
Caso I Ora se {α 1,...,α k } = γ e {α 1,...,α k } = σ não é possível que exista uma interpretação que torne {α 1,...,α k } verdadeiras e γ σ falsa.
Caso I Então, por definição de consequência lógica: {α 1,...,α k } = (γ σ)
A lógica proposicional é completa, isto é,...... para quaisquer fbfs α 1,...,α n, se {α 1,...,α n } = β então {α 1,...,α n } β
Para demonstrar isto, há que apresentar primeiro um conjunto de conceitos e de teoremas
Conceitos Conjunto consistente: um conjunto de fbfs é consistente sse para nenhuma fbf α se verifica (α α); Conjunto inconsistente: um conjunto de fbfs é inconsistente sse para alguma fbf α se verifica (α α);
Conceitos (cont) Conjunto maximamente consistente: um conjunto de fbfs é maximamente consistente sse se verificam as duas condições que se seguem: Para nenhuma fbf α se verifica (α α); Para qualquer fbf α, ou α ou então α.
Teorema 1 Qualquer conjunto consistente de fbf pode ser estendido para um conjunto maximamente consistente.
Teorema 2 Qualquer conjunto maximamente consistente tem um modelo, ou seja, existe uma interpretação que satisfaz todas as fbfs do conjunto.
Teorema 3 Para qualquer fbf α, se = α então α.
Teorema 4 Se {α 1,...,α n 1,α n } = β, então {α 1,...,α n 1 } = (α n β).
Vamos lá ver esta prova...
Teorema 5 Se {α 1,...,α n } = β, então = (α 1 (...α n β)...).
Prova: n aplicações do Teorema 4
Teorema 6: a lógica proposicional é completa (finalmente!!) Para quaisquer fbfs α 1,...,α n, se {α 1,...,α n } = β então {α 1,...,α n } β
Vamos lá ver esta prova...
Mas antes ainda há que relembrar uma propriedade do sistema dedutivo que estudámos anteriormente...
Propriedades do sistema dedutivo (Teorema 7) Se é um conjunto de fbfs, α e β são fbfs e (α β) então ( {α}) β.
Prova da completude Suponhamos que {α 1,...,α n } = β Então = (α 1 (...α n β)...) (Teorema 5) Então (α 1 (...α n β)...) (Teorema 3) Aplicando n vezes o Teorema 7 temos que {α 1,...,α n } β.
Últimos resultados A regra da resolução é sólida Se existe uma demonstração por resolução da cláusula Φ a partir do conjunto de cláusulas então = Φ A regra da resolução é completa Se é um conjunto de cláusulas não satisfazível então existe uma demonstração por resolução de {} a partir de