11-Sintaxe Da Programao Lgica

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 19

Lógica para Computação

Sintaxe da Programação Lógica

Profa. Dra. Lígia Maria Soares Passos

UFRRJ – BCC – TN709 – Lógica para Computação


Conteúdos

1. Introdução

2. Sintaxe da Programação Lógica


Cláusula de Programa
Programa Lógico
Cláusula Objetivo
Cláusula Vazia

1
Introdução
Introdução

A Programação Lógica, frequentemente denominada PROLOG,


é uma linguagem de ampla utilização em diversas áreas da
Computação.

O propósito da Programação Lógica é computar ligações


resultantes de unificações.

Na disciplina TN709, estamos interessados nos Fundamentos


Matemáticos da Programação Lógica.

2
Sintaxe da Programação Lógica
Sintaxe da Programação Lógica

A sintaxe da Programação Lógica é definida pelos seguintes


elementos:

a) cláusula de programa;
b) programa lógico;
c) cláusula objetivo.

3
Cláusula de Programa

Cláusula de Programa
Uma cláusula de programa, na Lógica de Predicados, é uma
cláusula do tipo C = (∀x1 )...(∀xn )G, onde G é uma disjunção
de literais, que contém exatamente um literal positivo.

Notação
Uma cláusula de programa (∀∗)(B ∨ ¬A1 ∨ ... ∨ ¬An ) é
denotada por B ← A1 , ..., An .
Nesse caso, B é a cabeça da cláusula e A1 , ..., An é a cauda.

4
Cláusula de Programa

Cláusula Unitária
Uma cláusula de programa unitária é uma cláusula que não
contém literais negativos. Uma cláusula unitária é
denominada fato.

Notação
B ←.
Nesse caso, só temos a cabeça da cláusula.

5
Alfabeto - Observações Importantes

a) Algumas vezes, por questão de simplificação, poderemos


utilizar no contexto da Programação Lógica, sem prejuízos,
para símbolos de predicado as letras minúsculas do
alfabeto p, q, r, s, t, u, v, com respectivos índices (quando
necessário). Além disso, poderemos utilizar ainda palavras
cuja semântica é explícita, como os predicados pai, primo,
tio, conhece, ama etc.
b) Em relação às variáveis, poderemos considerar, além da
variável x, as variáveis y e z, com seus respectivos índices,
quando necessário.

6
Cláusula de Programa

Exemplo:
A cláusula de programa C1 = (∀x)(∀y)(p(x) ∨ ¬q(x) ∨ ¬r(x, y)) é
denotada por p(x) ← q(x), r(x, y).
Como chegamos em p(x) ← q(x), r(x, y), a partir de C1 ?

7
Cláusula de Programa

Exemplo:
C1 = (∀x)(∀y)(p(x) ∨ ¬q(x) ∨ ¬r(x, y))
⇐⇒ (∀∗)(p(x) ∨ ¬q(x) ∨ ¬r(x, y))1
⇐⇒ (∀∗)(¬q(x) ∨ ¬r(x, y) ∨ p(x))
⇐⇒ (∀∗)(¬(q(x) ∧ r(x, y)) ∨ p(x))
⇐⇒ (∀∗)((q(x) ∧ r(x, y)) → p(x))
Como temos um fecho universal, o quantificador (∀∗) pode ser
omitido. Assim, temos (q(x) ∧ r(x, y)) → p(x). Considerando
que a vírgula representa o conectivo ∧ e invertendo a
implicação, temos a cláusula de programa p(x) ← q(x), r(x, y).
1
(∀∗) representa um fecho universal, isto é, todas as variáveis estão
quantificadas universalmente.
8
Cláusula de Programa

Exercício:
Determine a representação em cláusula de programa da
seguinte fórmula:

(∀x)(∀y)(∀z)(avo(x, y) ∨ ¬pai(x, z) ∨ ¬pai(z, y))

9
Programa Lógico

Programa Lógico
Um programa lógico é um conjunto de cláusulas de
programa.

10
Programa Lógico

Exemplo de programa lógico:


avo(x, y) ← pai(x, z), pai(z, y).
filho(x, y) ← pai(y, x).
pai(a1 , a2 ) ←.
pai(a1 , a3 ) ←.
pai(a1 , a4 ) ←.
pai(a2 , a5 ) ←.
pai(a3 , a6 ) ←.
a1 = Pedro, a2 = Jayme, a3 = Ivo, a4 = Luzia, a5 = Eduardo,
a6 = Isa.

11
Programa Lógico

Exemplo implementado em PROLOG:


avo(X,Y):- pai(X,Z), pai(Z,Y).
filho(X,Y) :- pai(Y,X).
pai(pedro,jayme).
pai(pedro,ivo).
pai(pedro,luzia).
pai(jayme,eduardo).
pai(ivo,isa).

12
Cláusula Objetivo

Cláusula Objetivo
Uma cláusula objetivo é uma cláusula que não contém literal
positivo e, portanto, não é uma cláusula de programa.

Notação
← A1 , ..., An .
Nesse caso, só temos a cauda.

13
Cláusula Objetivo

Exemplos:
← pai(x, a6 ).
← avo(a1 , x).
← filho(x, a1 ).
Em PROLOG:
pai(X,isa).
avo(pedro,X).
filho(X,pedro).

14
Cláusula de Horn

Cláusula de Horn
Uma cláusula de Horn é uma cláusula de programa ou uma
cláusula objetivo.

15
Cláusula Vazia

Cláusula Vazia
Uma cláusula vazia é uma cláusula que não contém nenhum
literal. Observe que a cláusula vazia não é uma cláusula de
Horn. Uma cláusula vazia representa uma contradição lógica.

Notação
Uma cláusula vazia C é denotada por C = {}.

16

Você também pode gostar