Paradigmas de linguagem e programação
Lista 1
Prof. Sergio d Zorzo
1. Expresse cada uma das seguintes afirmações usando uma sentença escrita em lógica de primeira ordem, utilizando apenas os símbolos de predicados “pai”, “mãe”, “progenitor”,
“mulher”, “filho”
Obs: faça uso de quaisquer quantificadores que julgar necessários
a. “Se X é um pai ou X é uma mãe então X é progenitor de alguém”
(∀X)((∃Y)progenitor(X, Y) se pai(X) ou mãe(X))
b. “Se X é um progenitor e X é uma mulher então X é mãe de alguém”
(∀X)((∃Y)mae(X, Y) se progenitor(X) e mulher(X))
c. “Se X é um pai ou X é uma mãe então alguém é progenitor de alguém”
(∀X)((∃Y)(∃Z)progenitor(Y, Z) se pai(X) ou mãe(X)) d. “Se todo mundo é um progenitor então alguém é um filho”
(∃Y)filho(Y) se (∀X)progenitor(X)
2. Expresse cada uma das seguintes afirmações usando lógica de primeira ordem em forma clausal, utilizando apenas as palavras grifadas como símbolos de predicado
a. “Nem tudo que reluz é ouro”
{reluz(algumacoisa), ¬ouro(algumacoisa)}
b. “Tudo está bem quando termina bem” estáBem(X) se terminaBem(X)
c. “Nenhum homem é uma ilha”
¬ilha(X) se homem(X)
d. “Os fins justificam os meios” justifica(Y, X) se fim(X) e meio(X, Y)
3. Encontre os unificadores mais gerais para os seguintes pares de termos (se possível)
a. p(a, X) e p(Y, b)
{Y/a, X/b}
b. p(X, X) e p(Y, Z)
{X/Y, Z/Y}
c. p(X, Y) e p(Y, X)
{X/Y1, Y/X1}
d. p(t(X, t(X, b))) e p(t(a, Z))
{X/a, Z(t(a, b)}
e. p(t(X, t(X, b))) e p(t(a, t(Z, Z))) não unificam
f. p(X, f(Y)) e p(f(Y), X)
{X/f(Y1), X1/f(Y)}
g. p(X, f(X)) e p(f(Z), f(Z)) não unificam
4. Faça a árvore de busca para o seguinte programa lógico, considerando a consulta
?sub(l(a,X), l(a,l(b,nil)))
S1: sub(X, Y) se pre(X, Y)
S2: sub(X, l(U,Y)) se sub(X, Y)
P1: pre(nil, Y)
P2: pre(l(U,X), l(U,Y)) se pre(X, Y)
?sub(l(a,X),
S1:
S2:
X/l(a,X)
?pre(l(a,X),l(a,l
P2:
S1:
X/l(a,
?sub(l(a,X),l(
U/a
?pre(X,l(
P1:
P2:
X/nil
X1/l(U
?pre(X
P1: