MAC425/5739 Inteligência Artificial Inferência lógica Denis Deratani Mauá (largamente baseado no material de aula do Profs. Paulo Santos e Peter Norvig) LÓGICA PROPOSICIONAL Assume mundo é composto por fatos ! Símbolos: nomes em letras maiúsculas (P, Q, R, ...) que podem assumir verdadeiro e falso ! Sentenças atômicas: constituídas por elementos sintáticos indivisíveis (símbolo proposicional) ! Sentenças complexas: são construídas a partir de sentenças mais simples com a utilização de conectivos lógicos: ¬ (não), ∧ (e), ∨ (ou), (implica), (dupla implicação) ! Sentença cujo principal conectivo é ∧: conjunção ! Sentença cujo principal conectivo é ∨: disjunção LP: SINTAXE Sentença → SentençaAtômica | SentençaComplexa SentençaAtômica → Verdadeiro | Falso | Símbolo Símbolo → P | Q | R | ... SentençaComplexa → ¬Sentença | (Sentença ∧ Sentença) | (Sentença ∨ Sentença) | (Sentença Sentença) | (Sentença Sentença) LÓGICA DE PRIMEIRA ORDEM Assume mundos compostos por: ! Objetos: pessoas, casas, números, cores, jogos de futebol, guerras, … ! Relações: vermelho, redondo, número primo, irmão de, maior que, parte de, entre, … ! Funções: pai de, amigo de, soma, triângulo, … LPO: SINTAXE Constantes Jacob, 2, NULO, e, ... Predicados IrmãoDe, >, ... Funções RaizQuadrada, PaiDe, ... Variáveis x, y, a, b, ... Conectivos ¬, ⇒, ∧, ∨, ⇔ Igualdade = Quantificadores ∀, ∃ Apenas símbolos, não a coisa em si LPO: SINTAXE Termos = função(termo1,...,termon) ou constante ou variável [referem-se a objetos] Sentenças atômicas = predicado(termo1,...,termon) ou termo1 = termo2 [enunciam fatos] Sentenças complexas = ¬S, S1 ∧ S2, S1 ∨ S2, S1 ⇒ S2, S1 ⇔ S2, ( ∀ | ∃ ) <variáveis> S Exemplo: ! ∀x B(x, K, R) ⇒ (T(L(R, x)), T(L(K, x))) SEMÂNTICA EM LÓGICA DE PRIMEIRA ORDEM Relaciona sentenças a modelos a fim de determinar valor-verdade ! Interpretação especifica quais objetos, relações e funções são referidos pelos símbolos de constantes, relações e funções R J R J R J R J Interpretação é, portanto, um mapeamento entre símbolos de constantes símbolos de predicados símbolos de funções → → → objetos relações funções Uma sentença atômica predicado(termo1,...,termon) é verdadeira se e somente se os objetos relativos a termo1,...,termon estão contidos na relação relativa à predicado ... SUBSTITUIÇÃO Substituição (lista de atribuições): ϴ: Variáveis → Termos (variáveis em variáveis, variáveis em constantes, variáveis em funções, ...) Dada uma sentença α e uma substituição ϴ, αϴ denota o resultado da substituição de ϴ em α: α = P(x, y) ϴ = {x/H, y/F(B)} αϴ = P(H, F(B)) INFERÊNCIA Derivar sentenças acarretadas por base de conhecimento Lógica proposicional: •Verificação de modelos • enumeração é intratável; pode ser feito de forma eficiente (SAT solvers) • Provador de teoremas (regras de inferência) • busca no espaço de sentenças onde ações são regras de inferência • Modus ponens: α ⇒ β, α β Se Sócrates é humano então Sócrates é mortal, Sócrates é humano Sócrates é Mortal • Algoritmo de inferência é correto se deriva sentenças acarretadas • Algoritmo de inferência é completo se deriva qualquer sentença acarretada INFERÊNCIA EM LÓGICA PROPOSICIONAL Modus Ponens: A partir de uma implicação e a premissa da implicação, pode-se inferir a conclusão Eliminação de E: De uma conjunção, pode-se inferir qualquer um dos conjuntores Resolução Unitária: De uma disjunção, se um dos disjuntores é falso, então pode-se inferir que o outro é verdadeiro INFERÊNCIA Derivar sentenças acarretadas por base de conhecimento Lógica de primeira ordem: • Redução à lógica proposicional • Em geral é intratável • Provador de teoremas (regras de inferência) • busca no espaço de sentenças onde ações são regras de inferência • Existem algoritmos completos e corretos • Acarretamento é semidecidível REDUÇÃO À INFERÊNCIA PROPOSICIONAL Converta base de conhecimento em lógica proposicional e use inferência proposicional INSTANCIAÇÃO UNIVERSAL (UI) Toda instância de uma sentença universalmente quantificada é acarretada por ela: ∀v α α{v/g} Para qualquer variável v e termo g Exemplos: ∀x K(x) ∧ G(x) ⇒ E(x, J) K(J) ∧ G(J) ⇒ E(J, J) K(R) ∧ G(R) ⇒ E(R, J) K(F(J)) ∧ G(F(J)) ⇒ E(F(J), J) ... INSTANCIAÇÃO EXISTENCIAL (EI) Para qualquer sentença α, variável v, e constante k que não aparece em nenhum outro lugar da base de conhecimento: ∃v α {v/k}α Exemplo: ∃x C(x) ∧ O(x, J) C(C1) ∧ O(C1,J) C1 é um novo símbolo de constante, chamado constante de Skolem REDUÇÃO À INFERÊNCIA PROPOSICIONAL Teorema de Herbrand (1930): se uma sentença α é consequência a lógica de uma base de conhecimento de 1 ordem, então é também consequência de um subconjunto finito da base de conhecimento proposicionalizada Resultado: para a profundidade de n = 0 à n = ∞: • • criar uma base proposicional com profundidade n, verificar consequência lógica de α Só funciona se α é consequência lógica da BC, caso contrário não termina Teorema de Church-Turing (1936): acarretamento em lógica de primeira ordem é semidecidível PROBLEMAS COM A PROPOSICIONALIZAÇÃO Gera muitas sentenças irrelevantes Exemplo: ∀x K(x) ∧ G(x) ⇒ E(x) K(J) ∀y G(y) B(R,J) Dedução de E(J) deveria ser direta, porém proposicionalização produz fatos irrelevantes como G(R) REGRAS DE INFERÊNCIA EM PRIMEIRA ORDEM Geram sentenças consistentes diretamente da base de conhecimento em primeira ordem MODUS PONENS GENERALIZADO (MPG) p1', p2', … , pn', (p1 ∧ p2 ∧ … ∧ pn ⇒ q) onde pi'θ = piθ para todo i qθ p1' é K(J) p1 é K(x) p2' é G(y) p2 é G(x) θ é {x/J, y/J} q é E(x) qθ é E(J) Cláusulas definidas: disjunção com um único literal positivo Todas as variáveis são (implicitamente) universalmente quantificadas UNIFICAÇÃO ∀x K(x) ∧ G(x) ⇒ E(x) K(J) ∀y G(y) B(R,J) E(J)? No exemplo obtemos a inferência desejada imediatamente se existir uma substituição θ tal que K(x) e G(x) se resolvam com K(J) e G(y) θ = {x/J, y/J} é o que procuramos Unify(α, β) = θ se αθ = βθ Unify recebe duas sentenças atômicas e retorna substituição que as torne (sintaticamente) idênticas ou falha UNIFICAÇÃO - EXEMPLO Unify(α, β) = θ se αθ = βθ α β θ P(J, x) P(J, J) {x/J} P(J, x) P(y, O) {x/O, y/J} P(J, x) P(y, M(y)) {y/J, x/M(J)} P(J, x) P(x, O) falha P(J, x) Q(J, x) falha P(J, F(x)) P(J, G(x)) falha UNIFICAÇÃO Para unificar P(J, x) e P(y, z): θ = {y/J, x/z} ou θ = {y/J, x/J, z/J} Primeiro unificador é mais geral Se duas sentenças são unificáveis, há exatamente um unificador mais geral (MGU) – a não ser por renomeação de variáveis MGU = { y/J, x/z } UNIFICAÇÃO Unificar P(J, x) e P(x, R): θ = {x/J} e θ = {x/R} ambos falham Standardizing apart: Unify(P(J, x), P(z, R)) = θ = {x/R, z/J} UNIFICAÇÃO - EXEMPLO Base de conhecimento: ∀x ¬K(A, x) ∨ H(A, x) K(A, B) Consulta: H(A, B)? Unificação: Unify(K(A, x), K(A, B)) = θ = {x/B} Inferência (por resolução unitária): ¬ K(A, B) ∨ H(A, B) EXEMPLO Base de conhecimento: “The law says that it is a crime for an American to sell weapons to hostile nations. The country Nono, an enemy of America, has some missiles, and all of its missiles were sold to it by Colonel West, who is American.” Objetivo: Provar que Col. West é um criminoso EXEMPLO ‘it is a crime for an American to sell weapons to hostile nations’: American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) ‘Nono … has some missiles’: ∃x Owns(Nono, x) ∧ Missile(x) Owns(Nono, M1), Missile(M1) [instanciação existencial] ‘… all of its missiles were sold to it by Colonel West’: Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) EXEMPLO ‘Missiles are weapons’: Missile(x) ⇒ Weapon(x) ‘An enemy of America counts as "hostile“’: Enemy(x, America) ⇒ Hostile(x) ‘West, who is American …’ American(West) ‘The country Nono, an enemy of America …’ Enemy(Nono, America) EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M1) 3. Missile(M1) 4. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) 5. Missile(x) ⇒ Weapon(x) Enemy(x, America) ⇒ Hostile(x) 6. 7. American(West) 8. Enemy(Nono, America) Criminal(West)? EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M1) 3. Missile(M1) 4. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) 5. Missile(x) ⇒ Weapon(x) Enemy(x, America) ⇒ Hostile(x) 6. 7. American(West) 8. Enemy(Nono, America) Criminal(West)? Weapon(M1) EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M1) 3. Missile(M1) 4. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) 5. Missile(x) ⇒ Weapon(x) Enemy(x, America) ⇒ Hostile(x) 6. 7. American(West) 8. Enemy(Nono, America) Criminal(West)? Sells(West, M1, Nono) Weapon(M1) EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M1) 3. Missile(M1) 4. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) 5. Missile(x) ⇒ Weapon(x) Enemy(x, America) ⇒ Hostile(x) 6. 7. American(West) 8. Enemy(Nono, America) Criminal(West)? Sells(West, M1, Nono) Weapon(M1) Hostile(Nono) EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M1) 3. Missile(M1) 4. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) 5. Missile(x) ⇒ Weapon(x) Enemy(x, America) ⇒ Hostile(x) 6. 7. American(West) 8. Enemy(Nono, America) Criminal(West)? Sells(West, M1, Nono) Weapon(M1) Hostile(Nono) Criminal(West) ENCADEAMENTO PROGRESSIVO ENCADEAMENTO PROGRESSIVO É correto e completo para cláusulas de Horn (cláusulas definidas sem símbolos funcionais) Pode não terminar se α não for consequência lógica de BC ! Isso é o melhor possível (Teorema de Church-Turing)! Requer casamento de cláusulas com premissas (NP-difícil) ENCADEAMENTO REGRESSIVO É chamado com uma lista de objetivos contendo inicialmente um único elemento, a consulta original, e retorna o conjunto de todas as substituições que satisfazem à consulta ENCADEAMENTO REGRESSIVO O algoritmo recebe o primeiro objetivo e encontra toda cláusula da base de conhecimento cujo literal positivo (ou cabeça) se unifica com objetivo Cada cláusula desse tipo cria uma nova chamada recursiva, na qual a premissa (ou corpo) da cláusula é adicionada à pilha de objetivos ENCADEAMENTO REGRESSIVO — EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO — EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO — EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO — EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO — EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO — EXEMPLO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO 1. American(x) ∧ Weapon(y) ∧ Sells(x, y, z) ∧ Hostile(z) ⇒ Criminal(x) 2. Owns(Nono, M ) 3. Missile(M ) 4. 5. Missile(x) ∧ Owns(Nono, x) ⇒ Sells(West, x, Nono) Missile(x) ⇒ Weapon(x) 6. Enemy(x, America) ⇒ Hostile(x) 7. American(West) Enemy(Nono, America) 8. 1 1 ENCADEAMENTO REGRESSIVO ☺ Espaço linear com relação ao tamanho da prova ☹ Incompleto devido a loops infinitos (busca em profundidade) ⇒ ☺ Pode ser consertado verificando se cada novo objetivo já foi verificado antes ☹ Ineficiente, pois submetas podem ser resolvidos várias vezes ⇒☺ Pode ser consertado armazenando resultados anteriores (☹ com aumento da uso de memória) Método utilizado em programação em lógica (prolog) RESOLUÇÃO Lógica proposicional: A ∨ B, ¬B ∨ C A∨C Prova por resolução (refutação): ! 1. Adicione negação da consulta à BC ! 2. Transforme a BC em forma normal conjuntiva (CNF) ! 3. Enquanto for possível, aplique regra de resolução; se cláusula vazia (NIL) é produzida, pare e retorne que consulta é verdadeira ! 4. Retorne que consulta é falsa Prova por resolução sempre termina porque cada passo gera cláusulas menores RESOLUÇÃO Lógica de primeira ordem: L1 ∨ ··· ∨ Lk, M1 ∨ ··· ∨ Mn (L1 ∨ ··· ∨ Li-1 ∨ Li+1 ∨ ··· ∨ Lk ∨ M1 ∨ ··· ∨ Mj-1 ∨ Mj+1 ∨ ··· ∨ Mn)θ onde Unify(Li, ¬Mj) = θ (as duas clausulas são separadamente padronizadas, assim não possuem variáveis iguais) RESOLUÇÃO - EXEMPLO 1. Consulta deve ser negada e adicionada à BC Exemplo: Feathers(x) ⇒ Bird(x) Feathers(Tweety) Bird(Tweety)? RESOLUÇÃO - EXEMPLO 1. Consulta deve ser negada e adicionada a BC Exemplo: Feathers(x) ⇒ Bird(x) Feathers(Tweety) ¬Bird(Tweety) RESOLUÇÃO - EXEMPLO 2. As sentenças devem estar em forma normal conjuntiva (CNF) Exemplo: Feathers(x) ⇒ Bird(x) Feathers(Tweety) ¬Bird(Tweety) RESOLUÇÃO - EXEMPLO 2. As sentenças devem estar em forma normal conjuntiva (CNF) Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) ¬Bird(Tweety) RESOLUÇÃO - EXEMPLO 3. Aplique regra de resolução enquanto possível e não gerar cláusula NIL Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) ¬Bird(Tweety) RESOLUÇÃO - EXEMPLO 3. Aplique regra de resolução enquanto possível e não gerar cláusula NIL Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) ¬Bird(Tweety) RESOLUÇÃO - EXEMPLO 3. Aplique regra de resolução enquanto possível e não gerar cláusula NIL Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) ¬Bird(Tweety) ¬Feathers(Tweety) RESOLUÇÃO - EXEMPLO 3. Aplique regra de resolução enquanto possível e não gerar cláusula NIL Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) ¬Bird(Tweety) ¬Feathers(Tweety) RESOLUÇÃO - EXEMPLO 3. Aplique regra de resolução enquanto possível e não gerar cláusula NIL Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) ¬Bird(Tweety) ¬Feathers(Tweety) NIL RESOLUÇÃO Exemplo: ¬Feathers(x) ∨ Bird(x) Feathers(Tweety) Bird(Tweety) com θ = {x/Tweety} Prova por resolução de CNF(BC ∧ ¬α) é correta e completa para lógica de primeira ordem EXEMPLO: PROVA POR RESOLUÇÃO PROVA POR REFUTAÇÃO Para provar teorema (consequência lógica) A provamos que ¬A é insatisfatível • para provar falsidade basta encontrar modelo para ¬A Isso não prova que ¬A é verdadeiro (válida) ! Apenas que A é falso ! Mostrar que ¬A é satisfatível não implica que ¬A é válida Prove que ‘x+y=4 ⇒ x=2 ∧ y=2’ ! Logicamente equivalente a ‘¬(x+y=4) ∨ (x=2 ∧ y=2)’ ! Vamos tentar provar que existe x,y tal que ¬(¬(x+y=4) ∨ (x=2 ∧ y=2)), que é equivalente a (x+y=4) ∧ (¬(x=2) ∨ ¬(y=2)) ! x=1, y=3 → teorema é falso ! mas (x+y=4) ∧ (¬(x=2) ∨ ¬(y=2)) também é falso: x=2, y=2 BIBLIOGRAFIA • Russell, S. and Norvig, P. Inteligência Artificial, 3a Edição, Ed. Campus/Elsevier, 2010. Capítulos 7 e 9. • Notas de aula da Prof. Paulo Santos (FEI) • Notas de aula do Prof. Peter Norvig