Escolar Documentos
Profissional Documentos
Cultura Documentos
Predicados
Teorema de Herbrand
e Unificação
Desejo antigo...
Encontrar um procedimento geral de
decisão para verificar a validade (ou
inconsistência) de uma fórmula
Leibniz (1700s)
Peano (1700s-1800s)
Hilbert na década de 20
Church e Turing[1936] ->
impossível!!
Não existe um procedimento de decisão
para verificar a validade/invalidade de
fórmulas da lógica de predicados
Mas existem métodos de prova que
podem verificar se uma fórmula é válida
se realmente ela for!
Para fórmulas inválidas, esses
procedimentos são indecidíveis
Herbrand (1930)
Uma fórmula válida é verdadeira sob todas as suas
interpretações
Herbrand desenvolveu um algoritmo para encontrar
uma interpretação que pode invalidar uma fórmula!
No entanto, se ela é válida, nenhuma dessas
interpretações pode existir
O algoritmo termina após um número finito de tentativas!
O método de Herbrand é a base para muitos
métodos modernos de prova automática
Reduzindo o problema
Um conjunto S de cláusulas é
insatisfatível em LP sse for falso sob
todas as interpretações sobre todos os
domínios
... é inconveniente e impossível
considerar todas as interpretações
sobre todos os domínios
Mas, para provar por refutação, basta
achar instâncias complementares de
predicados
Universo de Herbrand de um
Conjunto de Cláusulas (H)
Ho é o conjunto de constantes que
aparecem em S
Se nenhuma constante aparece em S
então Ho é formado por uma única constante,
Ho={a}
Se f é um símbolo funcional n-ário ocorrendo
em S, e
se t1, ...,tn são termos que pertencem a H, então o
termo f(t1, ...,tn) também pertence a H
Exemplos de universos de
Herbrand
S = {P(x) Q(x), P(x)}
H0 = H = {a}
I1 e I2 satisfazem S
Teorema de Herbrand
Um conjunto de cláusulas é insatisfatível sse há
um conjunto finito insatisfatível de instâncias-
base de cláusulas de S
B = {P(a), Q(a),
P(f(a)), Q(f(a)), ...}
Implementação de Gilmore (60)
S = {P(a), ~P(x) Q(f(x)), ~Q(f(a))}
H0 = {a}
Geram-se todos os Si (método multiplicativo)
A aplicação de O em C1 e C2 é
C1O= {p(w), q(w,z,w)}
C2O = {p(w), q(g(a,z,x)), r(g(a,z,x),w,z,w,z)}
O1={xw,yg(f(w)),zf(w)} unifica
S={p(f(x),y,x),p(z,g(z),w)}
O2={xa,wa,yg(f(a)),zf(a)} tb!
O1 é mais geral pois O2=O1{wa}
Conjunto de diferenças
Dado S={A1,...An}, um conjunto de
expressões, o conjunto de diferenças é
achado pelo algoritmo
1-Pegue o primeiro símbolo de cada
expressão Ai
2-Se todos os símbolos coincidem, passe para
o próximo símbolo
Senão o conjunto de diferenças é D={E1,...,En}
D pode ser vazio
Exemplo de conjunto de
diferenças
S={p(f(x),y,x),p(z,g(z),a)}
D1={f(x),z}
D2=...
Unificação
Dado um conjunto de expressões S, se S é
unificável, acha-se um Unificador mais geral (ou
indica-se a impossibilidade) fazendo:
1- k=0, O0={}
2-Se SOk=1, Ok é este unificador
Senão ache o conjunto de diferenças Dk de SOk
3-Se existe uma variável x e um termo t em Dk de
forma que x não ocorra em t, então faça
Ok+1=Ok{xt} e incremente k
Se não existir, S não é unificável
Exemplo de unificação
S={p(f(x),y,x), p(z,g(z),w)}
k=0, O0={}, SO0=S <>1, D0={f(x),z}
z não ocorre em f(x), O1=O0{zf(x)}
k=1, O1={}{zf(x)}={zf(x)}
SO1={p(f(x),y,x), p(f(x), g(f(x)),w)}
SO1<>1, D1={y,g(f(x))}
y não ocorre em g(f(x))
O2={zf(x)}{yg(f(x))} ={zf(x),yg(f(x))}, k=2
SO2={p(f(x),g(f(x)),x), p(f(x), g(f(x)),w)} <> 1
D2={x,w}
x não ocorre em w, O3={zf(x)}{yg(f(x))}{xw}
O3={zf(w)}{yg(f(w)),xw}, k=3
SO3={p(f(w), g(f(w)),w)} = 1
O3 é o unificador mais geral
Exemplo não-unificável
S={p(f(x)),p(x)}
D0={f(x),x} e x ocorre em f(x)
Se continuamos ??