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:

Imagem 1

pai(joão,maria)

Imagem 2

mãe(maria,luiz)

Imagem 3

avo_materno(joão,luiz) :- pai(joão,maria), mãe(maria,luiz)

Imagem 4

irmão(X,Y) :- pai(Z,X), pai(Z,Y)

Imagem 5

avo_materno(X,Y) :- pai(Z,X), mae(Y,Z)

Alternativas

A) I e II.

B) II e III.

86%

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: pai(joa~o,maria)\mathrm{pai}(joão,maria).
  • Fato: ma~e(maria,luiz)\mathrm{mãe}(maria,luiz).
  • Regra/fato derivável: avo_materno(joa~o,luiz)  :  pai(joa~o,maria),  ma~e(maria,luiz)\mathrm{avo\_materno}(joão,luiz)\;:-\;\mathrm{pai}(joão,maria),\;\mathrm{mãe}(maria,luiz).

I. “A consulta mãe(maria, X) retorna verdadeiro conforme identificado na cláusula.”

A consulta ma~e(maria,X)\mathrm{mãe}(maria, X) procura um valor de XX que satisfaça algum fato/regra com predicado ma~e\mathrm{mãe}. Como existe o fato ma~e(maria,luiz)\mathrm{mãe}(maria,luiz), a consulta unifica com X=luizX=luiz.

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 é X=luizX=luiz). Considerando a leitura estrita, a frase está imprecisa (o correto seria: “é satisfeita e retorna X=luizX=luiz”). 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:

avo_materno(joa~o,luiz)  :  pai(joa~o,maria),  ma~e(maria,luiz)\mathrm{avo\_materno}(joão,luiz)\;:-\;\mathrm{pai}(joão,maria),\;\mathrm{mãe}(maria,luiz)

A parte à esquerda de ::- é a cabeça. Logo, “joão é avô materno de luiz” (isto é, avo_materno(joa~o,luiz)\mathrm{avo\_materno}(joão,luiz)) 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

irma~o(X,Y)  :  pai(Z,X),  pai(Z,Y)\mathrm{irmão}(X,Y)\;:-\;\mathrm{pai}(Z,X),\;\mathrm{pai}(Z,Y)

diz que XX e YY são irmãos se existe um mesmo ZZ 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 XYX \neq Y para evitar o caso trivial X=YX=Y, 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 é:

avo_materno(X,Y)  :  pai(Z,X),  mae(Y,Z)\mathrm{avo\_materno}(X,Y)\;:-\;\mathrm{pai}(Z,X),\;\mathrm{mae}(Y,Z)

Interpretando o corpo:

  • pai(Z,X)\mathrm{pai}(Z,X): ZZ é pai de XX.
  • mae(Y,Z)\mathrm{mae}(Y,Z): YY é mãe de ZZ.

Então YY seria mãe do pai de XX (avó paterna de XX), 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).

Questões relacionadas

Ver últimas questões

Comece a estudar de forma inteligente hoje mesmo

Resolva questões de concursos e vestibulares com IA, gere simulados personalizados e domine os conteúdos que mais caem nas provas.

Cancele quando quiser.