1. Inteligência Artificial – ACH2016
Aula 13 – Backward Chaining e Programação
Lógica
Norton Trevisan Roman
(norton@usp.br)
11 de abril de 2019
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 1 / 35
2. L.P.O. – Backward Chaining
Funcionamento
Começando do objetivo, “voltamos” nas regras de
modo a encontrar fatos conhecidos que suportem a
prova
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 2 / 35
3. L.P.O. – Backward Chaining
Funcionamento
Começando do objetivo, “voltamos” nas regras de
modo a encontrar fatos conhecidos que suportem a
prova
Trata de regras do tipo antecedente ⇒ consequente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 2 / 35
4. L.P.O. – Backward Chaining
Funcionamento
Começando do objetivo, “voltamos” nas regras de
modo a encontrar fatos conhecidos que suportem a
prova
Trata de regras do tipo antecedente ⇒ consequente
Fatos são tratados como uma implicação com um
consequente e nenhum antecedente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 2 / 35
5. L.P.O. – Backward Chaining
Funcionamento
Começando do objetivo, “voltamos” nas regras de
modo a encontrar fatos conhecidos que suportem a
prova
Trata de regras do tipo antecedente ⇒ consequente
Fatos são tratados como uma implicação com um
consequente e nenhum antecedente
Usado em programação lógica
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 2 / 35
6. L.P.O. – Backward Chaining
Algoritmo
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
7. L.P.O. – Backward Chaining
Algoritmo
Base de Conhecimento
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
8. L.P.O. – Backward Chaining
Algoritmo
Lista dos elementos que for-
mam a query (θ já aplicado)
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
9. L.P.O. – Backward Chaining
Algoritmo
A substituição atual
(inicialmente {})
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
10. L.P.O. – Backward Chaining
Algoritmo
Conjunto de todas as substi-
tuições que satisfazem a query
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
11. L.P.O. – Backward Chaining
Algoritmo
Conjunto de substituições
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
12. L.P.O. – Backward Chaining
Algoritmo
Retira o primeiro objetivo em obj
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
13. L.P.O. – Backward Chaining
Algoritmo
Verifica toda cláusula na
BC cujo consequente se
unifica com esse objetivo
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
14. L.P.O. – Backward Chaining
Algoritmo
Cada uma dessas cláusulas
cria uma nova chamada
recursiva ao algoritmo
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
15. L.P.O. – Backward Chaining
Algoritmo
Suas premissas (antecedentes)
são adicionadas a (obj − q0
) e
passadas a essa nova chamada
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
16. L.P.O. – Backward Chaining
Algoritmo
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Composição(θ0
, θ) é a substituição cujo efeito é idêntico ao de aplicar
cada uma das substituições em sequência
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
17. L.P.O. – Backward Chaining
Algoritmo
Função Backward(BC,obj,θ): conjunto de substituições
resposta ← {}
se obj estiver vazia então
retorna {θ}
q0
← (Primeiro(obj)) θ
para cada sentença s em BC onde são aplicados com sucesso
Padroniza(s) = (p1 ∧ . . . ∧ pn ⇒ q) e θ0
← Unifica(q, q0
) faça
novoObj ← [p1, . . . , pn|Resto(obj)]
resposta ← Backward(BC, novoObj, Composição(θ0
, θ)) ∪ resposta
retorna resposta
Composição(θ0
, θ) é a substituição cujo efeito é idêntico ao de aplicar
cada uma das substituições em sequência
Ou seja, (p) Composição(θ0
, θ) = ((p) θ0
) θ
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 3 / 35
32. L.P.O. – Backward Chaining
Caracterı́sticas
É uma busca em profundidade recursiva
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 5 / 35
33. L.P.O. – Backward Chaining
Caracterı́sticas
É uma busca em profundidade recursiva
Cláusulas são testadas na ordem em que ocorrem na base
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 5 / 35
34. L.P.O. – Backward Chaining
Caracterı́sticas
É uma busca em profundidade recursiva
Cláusulas são testadas na ordem em que ocorrem na base
Sofre com presença de laços
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 5 / 35
35. L.P.O. – Backward Chaining
Caracterı́sticas
É uma busca em profundidade recursiva
Cláusulas são testadas na ordem em que ocorrem na base
Sofre com presença de laços
Ex: Encontre um caminho de A a C, a partir da base
(testando as alternativas em ordem)
1 Ligação(A,B)
2 Ligação(B,C)
3 Ligação(x,z) ⇒ Caminho(x,z)
4 Ligação(y,z) ∧ Caminho(x,y) ⇒ Caminho(x,z)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 5 / 35
53. L.P.O. – Backward Chaining
Caracterı́sticas
Caminho(A,C)?
1 Ligação(A,B)
2 Ligação(B,C)
3 Ligação(y,z) ∧ Caminho(x,y) ⇒ Caminho(x,z)
4 Ligação(x,z) ⇒ Caminho(x,z)
Caminho(A,C)
Ligação(y,C) Caminho(A,B)
Ligação(B,C) Ligação(y,B) Caminho(A,A)
Ligação(A,B)
. . .
Note que forward chaining
não sofre desse problema
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 7 / 35
54. L.P.O. – Backward Chaining
Caracterı́sticas
Caminho(A,C)?
1 Ligação(A,B)
2 Ligação(B,C)
3 Ligação(y,z) ∧ Caminho(x,y) ⇒ Caminho(x,z)
4 Ligação(x,z) ⇒ Caminho(x,z)
Caminho(A,C)
Ligação(y,C) Caminho(A,B)
Ligação(B,C) Ligação(y,B) Caminho(A,A)
Ligação(A,B)
. . .
De Caminho(A,B) e
Caminho(B,C) sai di-
reto Caminho(A,C)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 7 / 35
55. L.P.O. – Backward Chaining
Caracterı́sticas
Sofre com computações redundantes
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 8 / 35
56. L.P.O. – Backward Chaining
Caracterı́sticas
Sofre com computações redundantes
Solução: Guarde resultados já obtidos para sub-objetivos e
reuse-os.
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 8 / 35
57. L.P.O. – Backward Chaining
Programação Lógica
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 9 / 35
60. Programação Lógica
Caracterı́sticas
Programas são construı́dos pela expressão do
conhecimento em uma linguagem formal
São conjuntos de cláusulas definidas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 10 / 35
61. Programação Lógica
Caracterı́sticas
Programas são construı́dos pela expressão do
conhecimento em uma linguagem formal
São conjuntos de cláusulas definidas
Problemas são resolvidos via inferência a partir
desse conhecimento
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 10 / 35
62. Programação Lógica
Caracterı́sticas
Programas são construı́dos pela expressão do
conhecimento em uma linguagem formal
São conjuntos de cláusulas definidas
Problemas são resolvidos via inferência a partir
desse conhecimento
Alguns usos:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 10 / 35
63. Programação Lógica
Caracterı́sticas
Programas são construı́dos pela expressão do
conhecimento em uma linguagem formal
São conjuntos de cláusulas definidas
Problemas são resolvidos via inferência a partir
desse conhecimento
Alguns usos:
Linguagem de prototipação, Análise sintática de lı́ngua
natural, Sistemas especialistas etc
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 10 / 35
64. Programação Lógica
Caracterı́sticas
Programas são construı́dos pela expressão do
conhecimento em uma linguagem formal
São conjuntos de cláusulas definidas
Problemas são resolvidos via inferência a partir
desse conhecimento
Alguns usos:
Linguagem de prototipação, Análise sintática de lı́ngua
natural, Sistemas especialistas etc
Prolog é a linguagem mais usada, mas não a única
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 10 / 35
65. Programação Lógica
Programação Lógica × Não Lógica
Lógica Não Lógica
Identifique o problema Identifique o problema
Reúna a informação Reúna a informação
(Pausa para o café) Identifique soluções
Codifique a informação na base Programe a solução
Codifique instâncias do
problema como fatos
Codifique instâncias do
problema como dados
Faça perguntas (queries) Aplique o programa aos dados
Encontre fatos falsos Corrija erros de procedimento
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 11 / 35
66. Programação Lógica – Prolog
Notação
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
67. Programação Lógica – Prolog
Notação
Variáveis: iniciam com letras maiúsculas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
68. Programação Lógica – Prolog
Notação
Variáveis: iniciam com letras maiúsculas
Contantes: escritas com letras minúsculas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
69. Programação Lógica – Prolog
Notação
Variáveis: iniciam com letras maiúsculas
Contantes: escritas com letras minúsculas
Cláusulas são escritas com o consequente antes dos
antecedentes:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
70. Programação Lógica – Prolog
Notação
Variáveis: iniciam com letras maiúsculas
Contantes: escritas com letras minúsculas
Cláusulas são escritas com o consequente antes dos
antecedentes:
criminoso(X) :- compatriota(X), arma(Y), vender(X,Y,Z),
hostil(Z).
(compatriota(x)∧arma(y)∧vender(x, y, z)∧hostil(z) ⇒ criminoso(x))
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
71. Programação Lógica – Prolog
Notação
Variáveis: iniciam com letras maiúsculas
Contantes: escritas com letras minúsculas
Cláusulas são escritas com o consequente antes dos
antecedentes:
criminoso(X) :- compatriota(X), arma(Y), vender(X,Y,Z),
hostil(Z).
(compatriota(x)∧arma(y)∧vender(x, y, z)∧hostil(z) ⇒ criminoso(x))
Queries são feitas diretamente ao interpretador
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
72. Programação Lógica – Prolog
Notação
Variáveis: iniciam com letras maiúsculas
Contantes: escritas com letras minúsculas
Cláusulas são escritas com o consequente antes dos
antecedentes:
criminoso(X) :- compatriota(X), arma(Y), vender(X,Y,Z),
hostil(Z).
(compatriota(x)∧arma(y)∧vender(x, y, z)∧hostil(z) ⇒ criminoso(x))
Queries são feitas diretamente ao interpretador
Sim... é interpretada, mas há versões compiladas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 12 / 35
73. Programação Lógica – Prolog
Caracterı́sticas
A execução de um programa é feita via backward
chaining, usando busca em profundidade
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 13 / 35
74. Programação Lógica – Prolog
Caracterı́sticas
A execução de um programa é feita via backward
chaining, usando busca em profundidade
Cláusulas são testadas na ordem em que foram escritas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 13 / 35
75. Programação Lógica – Prolog
Caracterı́sticas
A execução de um programa é feita via backward
chaining, usando busca em profundidade
Cláusulas são testadas na ordem em que foram escritas
A base de conhecimento (ou seja, regras e fatos) só
pode ser lida de arquivos
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 13 / 35
76. Programação Lógica – Prolog
Caracterı́sticas
A execução de um programa é feita via backward
chaining, usando busca em profundidade
Cláusulas são testadas na ordem em que foram escritas
A base de conhecimento (ou seja, regras e fatos) só
pode ser lida de arquivos
Via “[’nome do arquivo’].”
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 13 / 35
77. Programação Lógica – Prolog
Caracterı́sticas
A execução de um programa é feita via backward
chaining, usando busca em profundidade
Cláusulas são testadas na ordem em que foram escritas
A base de conhecimento (ou seja, regras e fatos) só
pode ser lida de arquivos
Via “[’nome do arquivo’].”
Repare o ’.’ ao final → Todo comando em prolog termina
em ’.’
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 13 / 35
78. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
79. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
80. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
81. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
“Provadas” pela execução de código, em vez de inferência
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
82. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
“Provadas” pela execução de código, em vez de inferência
Predicados de entrada e saı́da
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
83. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
“Provadas” pela execução de código, em vez de inferência
Predicados de entrada e saı́da
“write(termo)” e “read(variável)”
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
84. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
“Provadas” pela execução de código, em vez de inferência
Predicados de entrada e saı́da
“write(termo)” e “read(variável)”
assert/retract: modificam a base de conhecimento
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
85. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
“Provadas” pela execução de código, em vez de inferência
Predicados de entrada e saı́da
“write(termo)” e “read(variável)”
assert/retract: modificam a base de conhecimento
Igualdade (operador =)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
86. Programação Lógica – Prolog
Funcionalidades externas à inferência lógica:
Funções aritméticas
Ex: “X is 7+4.”, “X is 3*5+2.” etc
“Provadas” pela execução de código, em vez de inferência
Predicados de entrada e saı́da
“write(termo)” e “read(variável)”
assert/retract: modificam a base de conhecimento
Igualdade (operador =)
Verifica se ambos os termos são unificáveis (em vez de
referenciarem o mesmo objeto)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 14 / 35
88. Programação Lógica – Prolog
Negação
E se quisermos dizer que algo não é verdade?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 16 / 35
89. Programação Lógica – Prolog
Negação
E se quisermos dizer que algo não é verdade?
Problemas:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 16 / 35
90. Programação Lógica – Prolog
Negação
E se quisermos dizer que algo não é verdade?
Problemas:
A regra resultante não é uma cláusula definida (literais
devem ser positivos)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 16 / 35
91. Programação Lógica – Prolog
Negação
E se quisermos dizer que algo não é verdade?
Problemas:
A regra resultante não é uma cláusula definida (literais
devem ser positivos)
Em LPO, não temos como concluir uma negação →
Somente fatos positivos são derivados
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 16 / 35
92. Programação Lógica – Prolog
Negação
Em programação lógica, tipicamente assumimos um
mundo fechado
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 17 / 35
93. Programação Lógica – Prolog
Negação
Em programação lógica, tipicamente assumimos um
mundo fechado
Sabemos tudo que há para saber sobre o domı́nio
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 17 / 35
94. Programação Lógica – Prolog
Negação
Em programação lógica, tipicamente assumimos um
mundo fechado
Sabemos tudo que há para saber sobre o domı́nio
Se não sabemos algo (ou não podemos prová-lo), então deve
ser falso
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 17 / 35
95. Programação Lógica – Prolog
Negação
Em programação lógica, tipicamente assumimos um
mundo fechado
Sabemos tudo que há para saber sobre o domı́nio
Se não sabemos algo (ou não podemos prová-lo), então deve
ser falso
Que fazer então?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 17 / 35
96. Programação Lógica – Prolog
Negação
Em programação lógica, tipicamente assumimos um
mundo fechado
Sabemos tudo que há para saber sobre o domı́nio
Se não sabemos algo (ou não podemos prová-lo), então deve
ser falso
Que fazer então?
Simular a negação usando a falha em prová-la
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 17 / 35
97. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
98. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
99. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
+ objetivo será verdadeiro se o objetivo não puder ser
provado
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
100. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
+ objetivo será verdadeiro se o objetivo não puder ser
provado
O interpretador fará uma busca em todas as coisas
ilegais, comparando-as com X
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
101. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
+ objetivo será verdadeiro se o objetivo não puder ser
provado
O interpretador fará uma busca em todas as coisas
ilegais, comparando-as com X
Se nenhum fato ilegal for o mesmo que X, X é legal
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
102. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
+ objetivo será verdadeiro se o objetivo não puder ser
provado
O interpretador fará uma busca em todas as coisas
ilegais, comparando-as com X
Se nenhum fato ilegal for o mesmo que X, X é legal
Tudo que eu não puder provar ilegal, é legal
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
103. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
+ objetivo será verdadeiro se o objetivo não puder ser
provado
O interpretador fará uma busca em todas as coisas
ilegais, comparando-as com X
Se nenhum fato ilegal for o mesmo que X, X é legal
Tudo que eu não puder provar ilegal, é legal
Perigoso, se não soubermos tudo sobre o domı́nio
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
104. Programação Lógica – Prolog
Simulando Negação
Se não conseguimos provar, então é falso
legal(X) :- + ilegal(X)
+ objetivo será verdadeiro se o objetivo não puder ser
provado
O interpretador fará uma busca em todas as coisas
ilegais, comparando-as com X
Se nenhum fato ilegal for o mesmo que X, X é legal
Tudo que eu não puder provar ilegal, é legal
Perigoso, se não soubermos tudo sobre o domı́nio
Em uma base vazia, qualquer coisa pode ser derivada assim
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 18 / 35
105. Programação Lógica – Prolog
Simulando Negação – Exemplo
legal(X) :- + ilegal(X).
ilegal(roubar).
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 19 / 35
106. Programação Lógica – Prolog
E o calcanhar de Aquiles...
caminho(X,Z) :- ligacao(X,Z).
caminho(X,Z) :- caminho(X,Y), ligacao(Y,Z).
ligacao(a,b).
ligacao(b,c).
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 20 / 35
107. Programação Lógica – Prolog
E o calcanhar de Aquiles...
caminho(X,Z) :- ligacao(X,Z).
caminho(X,Z) :- caminho(X,Y), ligacao(Y,Z).
ligacao(a,b).
ligacao(b,c).
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 20 / 35
108. Programação Lógica – Prolog
E o calcanhar de Aquiles...
caminho(X,Z) :- ligacao(X,Z).
caminho(X,Z) :- caminho(X,Y), ligacao(Y,Z).
ligacao(a,b).
ligacao(b,c).
caminho(X,Z) :- caminho(X,Y), ligacao(Y,Z).
caminho(X,Z) :- ligacao(X,Z).
ligacao(a,b).
ligacao(b,c).
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 20 / 35
109. Programação Lógica – Prolog
E o calcanhar de Aquiles...
caminho(X,Z) :- ligacao(X,Z).
caminho(X,Z) :- caminho(X,Y), ligacao(Y,Z).
ligacao(a,b).
ligacao(b,c).
caminho(X,Z) :- caminho(X,Y), ligacao(Y,Z).
caminho(X,Z) :- ligacao(X,Z).
ligacao(a,b).
ligacao(b,c).
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 20 / 35
110. Programação Lógica – Prolog
Outros problemas...
Prolog não faz o teste de ocorrência
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 21 / 35
111. Programação Lógica – Prolog
Outros problemas...
Prolog não faz o teste de ocorrência
Quanto unifica uma variável com um termo complexo, não
verifica se a variável ocorre dentro do termo ({x/f (x)})
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 21 / 35
112. Programação Lógica – Prolog
Outros problemas...
Prolog não faz o teste de ocorrência
Quanto unifica uma variável com um termo complexo, não
verifica se a variável ocorre dentro do termo ({x/f (x)})
Assim, algumas inferências inconsistentes podem ser feitas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 21 / 35
113. Programação Lógica – Prolog
Outros problemas...
Prolog não faz o teste de ocorrência
Quanto unifica uma variável com um termo complexo, não
verifica se a variável ocorre dentro do termo ({x/f (x)})
Assim, algumas inferências inconsistentes podem ser feitas
Prolog não faz checagem para identificar recursão
infinita
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 21 / 35
114. Programação Lógica – Prolog
Outros problemas...
Prolog não faz o teste de ocorrência
Quanto unifica uma variável com um termo complexo, não
verifica se a variável ocorre dentro do termo ({x/f (x)})
Assim, algumas inferências inconsistentes podem ser feitas
Prolog não faz checagem para identificar recursão
infinita
Isso o torna rápido quando são dados os axiomas corretos
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 21 / 35
115. Programação Lógica – Prolog
Outros problemas...
Prolog não faz o teste de ocorrência
Quanto unifica uma variável com um termo complexo, não
verifica se a variável ocorre dentro do termo ({x/f (x)})
Assim, algumas inferências inconsistentes podem ser feitas
Prolog não faz checagem para identificar recursão
infinita
Isso o torna rápido quando são dados os axiomas corretos
E incompleto quando são dados os errados
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 21 / 35
119. Inferência em LPO
Usos
Resolução
Usada por provadores automáticos de teoremas
Forward Chaining:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 22 / 35
120. Inferência em LPO
Usos
Resolução
Usada por provadores automáticos de teoremas
Forward Chaining:
Aplicada a bases dedutivas e sistemas de produção
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 22 / 35
121. Inferência em LPO
Usos
Resolução
Usada por provadores automáticos de teoremas
Forward Chaining:
Aplicada a bases dedutivas e sistemas de produção
Backward Chaining
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 22 / 35
122. Inferência em LPO
Usos
Resolução
Usada por provadores automáticos de teoremas
Forward Chaining:
Aplicada a bases dedutivas e sistemas de produção
Backward Chaining
Usada em programação lógica
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 22 / 35
123. Inferência em LPO e LProp: Fragilidades
Monotonicidade
O conjunto de sentenças acarretadas pode apenas
aumentar, na medida em que informação é
adicionada à base
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 23 / 35
124. Inferência em LPO e LProp: Fragilidades
Monotonicidade
O conjunto de sentenças acarretadas pode apenas
aumentar, na medida em que informação é
adicionada à base
Ou seja, a adição de premissas não podem mudar conclusões
antigas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 23 / 35
125. Inferência em LPO e LProp: Fragilidades
Monotonicidade
O conjunto de sentenças acarretadas pode apenas
aumentar, na medida em que informação é
adicionada à base
Ou seja, a adição de premissas não podem mudar conclusões
antigas
Isso significa que, se BC |= α, então BC ∧ β |= α,
onde β é uma nova asserção na base
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 23 / 35
126. Inferência em LPO e LProp: Fragilidades
Monotonicidade
O conjunto de sentenças acarretadas pode apenas
aumentar, na medida em que informação é
adicionada à base
Ou seja, a adição de premissas não podem mudar conclusões
antigas
Isso significa que, se BC |= α, então BC ∧ β |= α,
onde β é uma nova asserção na base
Se antes BC |= α, a adição de β a BC não pode mudar isso,
e BC ∧ β |= α
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 23 / 35
127. Inferência em LPO e LProp: Fragilidades
Monotonicidade
O conjunto de sentenças acarretadas pode apenas
aumentar, na medida em que informação é
adicionada à base
Ou seja, a adição de premissas não podem mudar conclusões
antigas
Isso significa que, se BC |= α, então BC ∧ β |= α,
onde β é uma nova asserção na base
Se antes BC |= α, a adição de β a BC não pode mudar isso,
e BC ∧ β |= α
Propriedade chamada de monotonicidade do
acarretamento
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 23 / 35
128. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Isso faz com que regras de inferência possam ser
aplicadas toda vez que suas premissas forem
encontradas na base
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 24 / 35
129. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Isso faz com que regras de inferência possam ser
aplicadas toda vez que suas premissas forem
encontradas na base
Não haverá nada na base para invalidar a conclusão dessa
regra
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 24 / 35
130. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Isso faz com que regras de inferência possam ser
aplicadas toda vez que suas premissas forem
encontradas na base
Não haverá nada na base para invalidar a conclusão dessa
regra
E qual o problema com isso?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 24 / 35
131. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Isso faz com que regras de inferência possam ser
aplicadas toda vez que suas premissas forem
encontradas na base
Não haverá nada na base para invalidar a conclusão dessa
regra
E qual o problema com isso?
Não captura uma propriedade comum do raciocı́nio humano
→ a mudança de ideia
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 24 / 35
132. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Isso faz com que regras de inferência possam ser
aplicadas toda vez que suas premissas forem
encontradas na base
Não haverá nada na base para invalidar a conclusão dessa
regra
E qual o problema com isso?
Não captura uma propriedade comum do raciocı́nio humano
→ a mudança de ideia
Para esses casos, existe a lógica não monotônica
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 24 / 35
133. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Na lógica não-monotônica, podemos tirar
conclusões provisoriamente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 25 / 35
134. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Na lógica não-monotônica, podemos tirar
conclusões provisoriamente
Nos reservando o direito de retratação à luz de nova
informação
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 25 / 35
135. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Na lógica não-monotônica, podemos tirar
conclusões provisoriamente
Nos reservando o direito de retratação à luz de nova
informação
O conjunto de conclusões apoiadas pela base não
necessariamente aumenta
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 25 / 35
136. Inferência em LPO e LProp: Fragilidades
Monotonicidade
Na lógica não-monotônica, podemos tirar
conclusões provisoriamente
Nos reservando o direito de retratação à luz de nova
informação
O conjunto de conclusões apoiadas pela base não
necessariamente aumenta
Pode até reduzir
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 25 / 35
137. Inferência em LPO e LProp: Fragilidades
Tempo
Como lidar com tempo em LPO ou lógica
proposicional?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 26 / 35
138. Inferência em LPO e LProp: Fragilidades
Tempo
Como lidar com tempo em LPO ou lógica
proposicional?
Como fazer uma afirmação valer apenas em um determinado
momento?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 26 / 35
139. Inferência em LPO e LProp: Fragilidades
Tempo
Como lidar com tempo em LPO ou lógica
proposicional?
Como fazer uma afirmação valer apenas em um determinado
momento?
Para isso existe a lógica temporal
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 26 / 35
140. Inferência em LPO e LProp: Fragilidades
Tempo
Como lidar com tempo em LPO ou lógica
proposicional?
Como fazer uma afirmação valer apenas em um determinado
momento?
Para isso existe a lógica temporal
Assume que fatos valem em instantes particulares, e que
esses instantes são ordenados
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 26 / 35
141. Inferência em LPO e LProp: Fragilidades
Tempo
Como lidar com tempo em LPO ou lógica
proposicional?
Como fazer uma afirmação valer apenas em um determinado
momento?
Para isso existe a lógica temporal
Assume que fatos valem em instantes particulares, e que
esses instantes são ordenados
Instantes podem ser pontuais ou intervalos
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 26 / 35
142. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
143. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Ex: ∃x ∀y P(f (x)) ⇒ Q(y)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
144. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Ex: ∃x ∀y P(f (x)) ⇒ Q(y)
E como podemos fazer afirmações sobre
propriedades de objetos?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
145. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Ex: ∃x ∀y P(f (x)) ⇒ Q(y)
E como podemos fazer afirmações sobre
propriedades de objetos?
Ex: Todas as raças de cães vem dos lobos?
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
146. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Ex: ∃x ∀y P(f (x)) ⇒ Q(y)
E como podemos fazer afirmações sobre
propriedades de objetos?
Ex: Todas as raças de cães vem dos lobos?
Lógica de Segunda Ordem
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
147. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Ex: ∃x ∀y P(f (x)) ⇒ Q(y)
E como podemos fazer afirmações sobre
propriedades de objetos?
Ex: Todas as raças de cães vem dos lobos?
Lógica de Segunda Ordem
Permite expressões como ∀Q ∃P ∃f ∃x ∀y P(f (x)) ⇒ Q(y)
(quantificador do tipo “para todo conjunto de objetos”)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
148. Inferência em LPO e LProp: Fragilidades
Ordens mais altas
Em LPO trabalhamos com objetos e suas relações
Ex: ∃x ∀y P(f (x)) ⇒ Q(y)
E como podemos fazer afirmações sobre
propriedades de objetos?
Ex: Todas as raças de cães vem dos lobos?
Lógica de Segunda Ordem
Permite expressões como ∀Q ∃P ∃f ∃x ∀y P(f (x)) ⇒ Q(y)
(quantificador do tipo “para todo conjunto de objetos”)
Vê as relações e funções da LPO como objetos em si
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 27 / 35
149. Inferência em LPO e LProp: Fragilidades
E muito mais...
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
150. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
151. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Lógica probabilı́stica
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
152. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Lógica probabilı́stica
De inconsistência
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
153. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Lógica probabilı́stica
De inconsistência
Lógica paraconsistente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
154. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Lógica probabilı́stica
De inconsistência
Lógica paraconsistente
De imprecisão
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
155. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Lógica probabilı́stica
De inconsistência
Lógica paraconsistente
De imprecisão
Lógica difusa (Fuzzy) (veremos mais adiante)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
156. Inferência em LPO e LProp: Fragilidades
E muito mais...
Há ainda as que tratam de incerteza
Lógica probabilı́stica
De inconsistência
Lógica paraconsistente
De imprecisão
Lógica difusa (Fuzzy) (veremos mais adiante)
etc
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 28 / 35
157. Lógica de Primeira Ordem
Considerações Finais
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
158. Lógica de Primeira Ordem
Considerações Finais
LPO é Completa (Gödel, 1929)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
159. Lógica de Primeira Ordem
Considerações Finais
LPO é Completa (Gödel, 1929)
Se a base acarreta S, então podemos provar S a partir da
base
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
160. Lógica de Primeira Ordem
Considerações Finais
LPO é Completa (Gödel, 1929)
Se a base acarreta S, então podemos provar S a partir da
base
Resolução é um sistema de provas completo para
LPO (Robinson, 1965)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
161. Lógica de Primeira Ordem
Considerações Finais
LPO é Completa (Gödel, 1929)
Se a base acarreta S, então podemos provar S a partir da
base
Resolução é um sistema de provas completo para
LPO (Robinson, 1965)
Se uma prova existir, podemos encontrá-la
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
162. Lógica de Primeira Ordem
Considerações Finais
LPO é Completa (Gödel, 1929)
Se a base acarreta S, então podemos provar S a partir da
base
Resolução é um sistema de provas completo para
LPO (Robinson, 1965)
Se uma prova existir, podemos encontrá-la
E se não existir? O processo pode continuar para
sempre
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
163. Lógica de Primeira Ordem
Considerações Finais
LPO é Completa (Gödel, 1929)
Se a base acarreta S, então podemos provar S a partir da
base
Resolução é um sistema de provas completo para
LPO (Robinson, 1965)
Se uma prova existir, podemos encontrá-la
E se não existir? O processo pode continuar para
sempre
LPO é semi-decidı́vel: se houver prova, encontramos, se não
houver, podemos ficar buscando eternamente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 29 / 35
164. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
165. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
166. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, é
possı́vel construir uma sentença (chamada sentença de
Gödel) G(F) tal que:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
167. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, é
possı́vel construir uma sentença (chamada sentença de
Gödel) G(F) tal que:
G(F) é uma sentença de F mas não pode ser provada dentro de F
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
168. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, é
possı́vel construir uma sentença (chamada sentença de
Gödel) G(F) tal que:
G(F) é uma sentença de F mas não pode ser provada dentro de F
Se F for consistente, então G(F) é verdadeira
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
169. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, é
possı́vel construir uma sentença (chamada sentença de
Gödel) G(F) tal que:
G(F) é uma sentença de F mas não pode ser provada dentro de F
Se F for consistente, então G(F) é verdadeira
Ou seja, não há sistema de provas completo e consistente
para LPO + aritmética
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
170. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, é
possı́vel construir uma sentença (chamada sentença de
Gödel) G(F) tal que:
G(F) é uma sentença de F mas não pode ser provada dentro de F
Se F for consistente, então G(F) é verdadeira
Ou seja, não há sistema de provas completo e consistente
para LPO + aritmética
Ou há sentenças que são verdadeiras, mas não prováveis
(incompleto), ou que são prováveis, mas não verdadeiras
(inconsistente)
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 30 / 35
171. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude (cont.):
Isso ocorre porque a aritmética nos permite construir
sentenças auto-referenciáveis
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 31 / 35
172. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude (cont.):
Isso ocorre porque a aritmética nos permite construir
sentenças auto-referenciáveis
P: “P não pode ser provada”
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 31 / 35
173. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude (cont.):
Isso ocorre porque a aritmética nos permite construir
sentenças auto-referenciáveis
P: “P não pode ser provada”
Se P for verdadeira, então não podemos prová-la, e o sistema é
incompleto
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 31 / 35
174. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
1o
Teorema da Incompletude (cont.):
Isso ocorre porque a aritmética nos permite construir
sentenças auto-referenciáveis
P: “P não pode ser provada”
Se P for verdadeira, então não podemos prová-la, e o sistema é
incompleto
Se P for falsa, então P pode ser provada, e acabamos de derivar
uma sentença falsa → o sistema é inconsistente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 31 / 35
175. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
2o
Teorema da Incompletude:
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 32 / 35
176. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
2o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, não é
possı́vel provar que o sistema em si é consistente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 32 / 35
177. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
2o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, não é
possı́vel provar que o sistema em si é consistente
E, com isso, não podemos provar todos os teoremas
da matemática dentro de qualquer sistema de
axiomas
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 32 / 35
178. Lógica de Primeira Ordem
E o balde de água fria... Gödel (1931)
2o
Teorema da Incompletude:
Em qualquer sistema formal consistente F, dentro do qual
possa ser feita uma certa quantidade de aritmética, não é
possı́vel provar que o sistema em si é consistente
E, com isso, não podemos provar todos os teoremas
da matemática dentro de qualquer sistema de
axiomas
Sequer conseguimos provar que o sistema como um todo é
consistente
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 32 / 35
179. Referências
Russell, S.; Norvig P. (2010): Artificial Intelligence: A Modern Approach.
Prentice Hall. 3a ed.
Slides do livro: aima.eecs.berkeley.edu/slides-pdf/
Hiż, A. (1957): Inferential Equivalence and Natural Deduction. The
Journal of Symbolic Logic, 22(3). pp. 237-240.
Nilsson, N. J. (1986): Probabilistic Logic. Artificial Intelligence, 28(1).
pp. 71-87.
ocw.mit.edu/OcwWeb/Electrical-Engineering-
and-Computer-Science/6-034Spring-2005/LectureNotes/index.
htm
jmvidal.cse.sc.edu/talks/learningrules/
first-orderlogicsdefs.xml
Norton Trevisan Roman(norton@usp.br) 11 de abril de 2019 33 / 35