O paradigma de programação em lógica constitui-se como um processo de definição de relações em que se constroem fatos e regras sobre os elementos e suas relações. A ativação dos programas acontece por meio de consultas (ou perguntas) sobre o relacionamento definido. Ao construir-se um banco de dados referente a uma família, inicia-se pelas relações de parentesco, tais como: pai(joão,maria) convencionado que joão é pai de maria mãe(maria,luiz) convencionado que maria é mãe de luiz As cláusulas, sem condições, definem os fatos sobre o domínio do problema. De outra maneira, é possível definir as regras que são cláusulas com condições: avo_materno(joão,luiz):-pai(joão,maria), mãe(maria,luiz) Nesse contexto, avalie as afirmações a seguir. I. A consulta mãe(maria, X) retorna verdadeiro conforme identificado na cláusula. II. A conclusão joão é avô materno de luiz é identificada como cabeça da cláusula. III. A regra irmão(X,Y):-pai(Z, X), pai(Z, Y) é uma regra genérica que define irmãos por parte de pai. IV. A regra avo_materno(X,Y):-pai(Z,X), mae(Y,Z) é uma regra genérica para o programa. É correto apenas o que se afirma em:
Questão
O paradigma de programação em lógica constitui-se como um processo de definição de relações em que se constroem fatos e regras sobre os elementos e suas relações. A ativação dos programas acontece por meio de consultas (ou perguntas) sobre o relacionamento definido. Ao construir-se um banco de dados referente a uma família, inicia-se pelas relações de parentesco, tais como:
pai(joão,maria) convencionado que joão é pai de maria
mãe(maria,luiz) convencionado que maria é mãe de luiz
As cláusulas, sem condições, definem os fatos sobre o domínio do problema. De outra maneira, é possível definir as regras que são cláusulas com condições:
avo_materno(joão,luiz):-pai(joão,maria), mãe(maria,luiz)
Nesse contexto, avalie as afirmações a seguir.
I. A consulta mãe(maria, X) retorna verdadeiro conforme identificado na cláusula.
II. A conclusão joão é avô materno de luiz é identificada como cabeça da cláusula.
III. A regra irmão(X,Y):-pai(Z, X), pai(Z, Y) é uma regra genérica que define irmãos por parte de pai.
IV. A regra avo_materno(X,Y):-pai(Z,X), mae(Y,Z) é uma regra genérica para o programa.
É correto apenas o que se afirma em:
pai(joão,maria)
mãe(maria,luiz)
avo_materno(joão,luiz) :- pai(joão,maria), mãe(maria,luiz)
irmão(X,Y) :- pai(Z,X), pai(Z,Y)
avo_materno(X,Y) :- pai(Z,X), mae(Y,Z)
Alternativas
A) I e II.
B) II e III.
C) III e IV.
D) I, II e IV.
E) I, III e IV.
Explicação
Vamos avaliar cada afirmação no contexto de Programação em Lógica (estilo Prolog), em que uma cláusula tem cabeça (head) e corpo (body):
- Fatos: apenas cabeça, sem condições.
- Regras: cabeça :- corpo.
Dados do enunciado:
- Fato: .
- Fato: .
- Regra/fato derivável: .
I. “A consulta mãe(maria, X) retorna verdadeiro conforme identificado na cláusula.”
A consulta procura um valor de que satisfaça algum fato/regra com predicado . Como existe o fato , a consulta unifica com .
Porém, a afirmação diz que “retorna verdadeiro conforme identificado na cláusula”. Em Prolog, a consulta não apenas retorna verdadeiro/falso; ela normalmente retorna uma substituição (a resposta é ). Considerando a leitura estrita, a frase está imprecisa (o correto seria: “é satisfeita e retorna ”). Assim, não considero a I correta.
II. “A conclusão joão é avô materno de luiz é identificada como cabeça da cláusula.”
Na regra:
A parte à esquerda de é a cabeça. Logo, “joão é avô materno de luiz” (isto é, ) está na cabeça.
Portanto, II é correta.
III. “A regra irmão(X,Y):-pai(Z, X), pai(Z, Y) é uma regra genérica que define irmãos por parte de pai.”
A regra
diz que e são irmãos se existe um mesmo que é pai de ambos. Isso caracteriza irmãos por parte de pai (meio-irmãos ou irmãos completos pelo pai).
(Observação: faltaria uma condição como para evitar o caso trivial , mas a ideia de “por parte de pai” está correta.)
Portanto, III é correta.
IV. “A regra avo_materno(X,Y):-pai(Z,X), mae(Y,Z) é uma regra genérica para o programa.”
A regra proposta é:
Interpretando o corpo:
- : é pai de .
- : é mãe de .
Então seria mãe do pai de (avó paterna de ), não “avô materno”. Além disso, o predicado está invertendo os papéis esperados (para avô materno de alguém, deveria envolver a mãe do neto, não a mãe do pai).
Portanto, IV é incorreta.
Conclui-se que estão corretas apenas II e III.
Alternativa correta: (B).