Parte I - Programa de Pós-Graduação em Sistemas e Computação

Propaganda
CONCEITOS DE
LINGUAGEM DE PROGRAMAÇÃO
Linguagens Lógicas
Alunos:
Emico Ferreira Santana
Silas Silva Santos
ABORDAGEM:
● Expressa programas na forma de lógica
simbólica;
 ● Um processo de inferência lógica é usado
para produzir os resultados;

–
Não são declarados os procedimentos para
determinar os resultados;
 – Declarados as especificações dos resultados
desejados;
●
Programas declarativos;
INTRODUÇÃO AO CALCULO DE PREDICADOS:

● Proposição:



– Declaração lógica que pode ou não ser verdadeira;
– Consiste em objetos e relações entre si;
● Lógica Formal:




– Desenvolvida para fornecer um método para descrever
proposições;
– Buscando que essas proposições formalmente
declaradas fossem verificadas quanto a validade;
– Relação entre lógica formal e a matemática;

● Axiomas fundamentais da teoria dos números e dos conjuntos são
o conjunto inicial de proposições presumidas como verdadeiras;
INTRODUÇÃO AO CALCULO DE PREDICADOS:

● Lógica Simbólica:
–
Pode ser utilizada para as necessidades básicas
da lógica formal:
●
Expressar proposições;
 ● Expressar relações entre proposições;
 ● Descrever como novas proposições podem ser
inferidas de outras que se presumem verdadeiras;
–
Calculo de predicados:
●
Forma particular de lógica simbólica usada para a
programação lógica;
PROPOSIÇÕES:

● Os objetivos de proposições de programação
lógica são apresentados por termos simples,
constantes ou variáveis;
–
Constante:
●
–
É um símbolo que representa um objeto;
Variável:
●
É um símbolo que pode representar diferentes objetos
em diferentes tempos;

– No sentido matemático;
PROPOSIÇÕES:
●
Proposições atômicas:
–
Proposições simples;
 – Constituído de termos compostos;

● Elemento de uma relação matemática;

–
– Aparência de uma função matemática;
Termo composto e formado por duas partes:

● Functor:


– Símbolo de função que nomeia a relação;
● Lista ordenada de parâmetros:


– 1-tupla: termo composto com um único parâmetro;
– 2-tupla: termo composto com dois parâmetros;
PROPOSIÇÕES:

●Proposições:
●
Exemplo:
–
homem( jack )

–
● 1-tupla na relação chamada homem;
gosta( bob, bife )

● 2-tupla na relação chamada gosta;
–
Se adicionar homem( fred ), a relação homem terá dois
elementos distintos;
 – Todos os termos simples dessas proposições são
constantes e sem nenhuma semântica intrínseca;

● homem, jack, gosta, bob, bife e fred;
PROPOSIÇÕES:

●Proposições:

● Declarado de duas maneiras:
–
Proposição definida como verdadeira;
 – A verdade da proposição precisa ser determinado;

● Ou seja:
–

Podem ser declarados como fatos ou consultas;
● Proposições compostas:
–
Tem duas ou mais proposições atômicas, ligadas por
conectores lógicos ou operadores;

● Da mesma maneira que expressões logicas compostas são
construídas em linguagens imperativas;
PROPOSIÇÕES:

●Proposições:
●
Nomes, símbolos e significados dos conectores
lógicos do calculo de predicado sao os seguintes:
–
Negação (¬): ¬a (não a);
 – Conjunção (∩): a∩b (a e b);
 – Disjunção(∪): a∪b (a ou b);
 – Equivalência (≡): a≡b (a e equivalente a b);
 – Implicação:
● (⊃): a⊃b (a implica b);
 ● (⊂): a ⊂ b (b implica a);

PROPOSIÇÕES:

●Proposições Compostas:
●
¬ : precedência mais elevada;
 ● ∩, e ∪ ≡ tem precedência maior que ⊃ e ⊂;
 ● Exemplo:
–
a ∩¬ b ⊃ d ;

●(a∩(¬b))⊃d;
PROPOSIÇÕES:

●Proposições (Variáveis):
● Variáveis podem aparecer em proposições, mas
somente quando introduzidas por símbolos especiais,
os quantificadores;
 ● Dois quantificadores no calculo de predicado:

–
Sendo X uma variável e P uma proposição;
 – Universal: ∀ X P

–
● Para todo X, P e verdadeiro;
Existencial: ∃ X . P


● Existe um valor de X tal que P seja verdadeiro;
● Ponto (.), simplesmente separa a variável da proposição;
PROPOSIÇÕES:

●Proposições (Variáveis):
●
Exemplo:
–
∀ X . ( mulher( X ) ⊃ humano( X ))

–
● Significa que para qualquer valor de X, se X for uma mulher, X
e humano;
∃ X . ( mãe( mary, X ) ⊃ homem( X ))

● Significa que existe um valor de X tal que mary e mãe de X e X
e um homem (mary tem um filho);
PROPOSIÇÕES:
●O escopo dos quantificadores universais e
 existenciais são as proposições atômicas as
 quais eles são anexados;

●
Pode ser estendido utilizando parênteses;
 ● Os quantificadores universais e existenciais tem
precedência mais elevada do que qualquer um dos
operadores;
FORMA CLAUSAL :

● Calculo de Predicados:
–
É a base para as linguagens de programação logica;

–
● Minimizar redundâncias;
Problema do calculo de Predicados:

● Existem muitas maneiras diferentes de declarar proposições com
o mesmo significado;


● Não constitui um problema para logica;


– Muita redundância;
– Mas o calculo de predicado será um serio problema para sistemas
automatizados;
● Forma Clausal:
–
Forma padrão, relativamente simples, de proposições;

● Sem perda de generalidade;
FORMA CLAUSAL :

●Forma Clausal:

● Sintaxe de uma proposição na Forma Clausal:

– B1 U B2 U … U Bn ⊂ A1 ∩ A2 ∩ … ∩ An


– Significado:


● Sendo os As e Bs termos;
● Se todos os As forem verdadeiros, pelo menos um B será verdadeiro;
– Características:




● Quantificadores existenciais não são necessários;
● Quantificadores universais ficam implícitos no uso de variáveis nas
proposições atômicas;
● Nenhum outro operador além de conjunção e disjunção é necessário;
● Ordem da clausal geral:

– Disjunção no lado esquerdo e a conjunção no lado direito;
FORMA CLAUSAL :

●Forma Clausal:

● Antecedente:
–

● Consequente:
–

É o lado direito de uma proposição
Consequência da verdade de seu antecedente;
● Exemplos:
–
gosta( bob, truta ) ⊂ gosta(bob, peixe ) ∩ peixe( truta )

● “Se bob gosta de peixe e truta e um peixe, então bob gosta de
truta”;
–
pai( louis, alan ) U pai ( louis, violet ) ⊂ pai( alan, bob ) ∩
mae( violet, bob ) ∩ avo( louis, bob )

● “Se alan e pai de bob e violet e mãe de bob e louis e avo de bob,
então louis e pai de alan ou de violet”;
CALCULO DE PREDICADOS E DEMONSTRAÇÃO
DE TEOREMAS :

●Calculo de Predicados e Demonstração de
Teoremas:
●
Calculo de Predicados oferece um método para
expressar coleções de preposições;
– Um uso das coleções de preposições é determinar se
quaisquer fatos interessantes ou uteis podem ser inferidos a
partir das mesmas;
 – Processo semelhante ao dos matemáticos, que buscam
descobrir novos teoremas que possam ser inferidos a partir de
axiomas e de teoremas conhecidos;

CALCULO DE PREDICADOS E DEMONSTRAÇÃO
DE TEOREMAS :
●
Resolução:
–
È uma regra de inferência;
● Permite a computação de preposições inferidas a partir de
proposições dadas;
 ● Constitui assim, um método potencial na demonstração
automática de teoremas;

–
Idealizada para ser aplicada a proposições na forma
clausal;
CONCEITO DE RESOLUÇÃO :

●Conceito de resolução:

● Supondo duas proposições com as formas:
–
P1 ⊂ P2

–
● P2 implica em P1;
Q1 ⊂ Q2

● Q2 implica em Q1;
–
Supondo ainda que P1 seja idêntico a Q2, de modo que seja
possível renomear P1 e Q2 como T;


–
Assim:

–
● T ⊂ P2
● Q1 ⊂ T
● Q1 ⊂ P2
O Processo de inferir tal proposição a partir de duas
proposições originais é uma resolução;
CONCEITO DE RESOLUÇÃO :

●Conceito de resolução:

● Exemplo:
–
Considerando duas proposições:


–
Proposição usando resolução:

–
● mais_sabio( joanne, jake ) ⊂ mae( joanne, jake )
Construção da resolução:

–
● mais_velho( joanne, jake ) ⊂ mae( joanne, jake )
● mais_sabio( joanne, jake ) ⊂ mais_velho( joanne, jake )
● Os termos do lado esquerdo das duas proposições são unidos
por um E para formar o lado esquerdo da nova proposição;
Mesmo processo para o lado direito;

● O termo que aparece em ambos os lados da nova proposição e
removido;
CONCEITO DE RESOLUÇÃO :

●Conceito de resolução:

● Exemplo:

– Considerando duas proposições:

● pai( bob, jake ) U mae( bob, jake ) ⊂ pais( bob, jake )


● avo( bob, fred ) ⊂ pai( bob, jake ) ∩ pai( jake, fred )


– Se: bob é um dos pais de jake, isto implica que bob é ou o pai ou a mãe de
jake;
– E: bob é pai de jake e jake é pai de fred, isto implica que bob é avô de fred;
– Proposição usando resolução:


● pai( bob, jake), é a proposição atômica que permitiu a operação;
● mae( bob, jake ) U avo( bob, fred ) ⊂ pais( bob, jake ) ∩ pai( jake, fred )

– Entao:
 ● Se: bob é um dos pais de jake e jake é o pai de fred, então ou bob é
mãe de jake ou bob é avô de fred;
CONCEITO DE RESOLUÇÃO :

●Conceito de resolução:
●
Os conceitos, em geral são mais complexos que
os exemplos;
–
Principalmente com variáveis em proposições;
● A resolução precisa determinar os valores para essas
variáveis para que o processo de comparação possa ocorrer;
 ● Unificação:



– Processo de determinar valores uteis;
● Instanciação:

– Atribuição temporária de valores a variáveis para permitir a
unificação;
CONCEITO DE RESOLUÇÃO :

●Conceito de resolução:

● Capacidade de detectar inconsistência em um
conjunto de dado de proposição:
–
Essa propriedade permite que a resolução seja usada para
demonstrar teoremas:

● Prova pela contradição:



● Hipóteses:


– Método de prova indireta, não-construtiva;
– Assumindo-se como verdade o contrario do que queremos provar e
então chegando-se a uma contradição.
– Proposições originais;
● Meta:

– A negação do teorema;
CONCEITO DE RESOLUÇÃO :

●Conceito de resolução:

● Demonstração de teoremas e a base da
programação logica;
–
Lista de fatos dados;
 – Relações como hipóteses;
 – Meta a ser inferida a partir das hipóteses;
● Utilizado a resolução;
 ● Quando proposições são usadas para resolução,
somente um tipo restrito de forma clausal pode ser
ativado;

–
Simplifica o processo de resolução;
CLÁUSULAS DE HORN :

●Cláusulas de Horn:


● Tipos especiais de proposições;
● Podem estar em somente duas formas:
– Uma única proposição atômica no lado esquerdo;
 – Ou, lado esquerdo vazio;


● Cláusulas de Horn encabeçadas:

– Uma única proposição atômica no lado esquerdo;



● Declaração de relações;
– gosta( bob, truta ) ⊂ gosta( bob, peixe ) ∩ peixe( truta )
● Cláusulas de Horn sem-cabeça:

– Lado esquerdo vazio;


● Declaração de fatos;
– pai( bob, jake )
CLÁUSULAS DE HORN :

●Cláusulas de Horn:
●
Se a condição expressa pelo corpo da clausula:
–
progenitor (X, Y) - é verdadeira então, segue como
consequência logica que a cabeça - filho(Y, X) - também
o é;
 – Por outro lado, se não for possível demonstrar que o
corpo da cláusula é verdadeiro, o mesmo irá se aplicar à
cabeça.
PROGRAMAÇÃO BASEADA EM LÓGICA

●“Logic Programming”;

● Programação Baseada em Lógica é uma forma de
implementar computações que coincidem com provas de
teoremas;

– Se P então Q;

● onde P e Q denotam declarações;




– Podem ser verdade ou falsa, mas não ambas;
● A declaração P é a hipótese do teorema;
● Enquanto que Q é a conclusão;
● Possibilita dupla interpretação dos passos de computação
que ocorrem durante a execução de um programa;

– Permitem que as especificações lógico-formais de certos
problemas sejam também os próprios programas executáveis que
resolvem aqueles problemas;
LOGIC PROGRAMMING :





●Inspirada na observação que provar um teorema lógico
“sem criatividade” é um processo intelectual bastante
semelhante a acompanhar a execução de um programa
imperativo passo a passo, obedecendo as regras de
inferência determinadas para a logica em uso:



● E partindo de um conjunto de expressões fornecidas (conjunto
de axiomas);
● Novas expressões são geradas até que uma expressão alvo
seja obtida (um teorema);
● Ou alternativamente que a impossibilidade de gerar aquela
expressão alvo seja estabelecida (teorema foi refutado);
LOGIC PROGRAMMING :

●Expressão:
● Tanto as expressões fornecidas originalmente, como
as expressões geradas durante o processo de busca do
teorema (ou impossibilidade), podem em geral ser
particularizadas;
 ● Exemplo:

–
Dedução que “Sócrates é mortal”, com base nas premissas:


● “Sócrates é um homem e todo homem é mortal”;
● “se Sócrates é homem, ele também é mortal”;

– “Sócrates é homem” fornece “Sócrates é mortal”;
LOGIC PROGRAMMING :

●Particularização:
●
Forma de passar parâmetros entre sentenças;
 ● “todo homem é mortal”;
–
“se X é homem ele também é mortal”;
● Sendo X uma variável;
 ● “Sócrates é homem”;
 ● Forneceu o valor “Sócrates” a variável X;

HISTÓRIA :

●História:
●
Artigo de 1965 de J. A. Robinson;
–
Apresenta resultados teóricos que possibilitaram a
construção de linguagens de programação baseadas em
particularização de sentenças e prova de teoremas;
●
Primeira metade dos anos de 1970:
–
Primeiras implementações Prolog;
HISTORIA :

●Historia:
●
Anos 1980 – Projeto de Quinta Geração:
–
Objetivo principal:

● Era o desenvolvimento de hardware e software de alto
desempenho, caracterizando uma nova geração de
computadores;

–
Paradigma básico;

–
– Maquinas PSI (“Personal Sequential Inference machines”);
● Atingiram maturidade teórico e pratico;
Desenvolvido no Japão;
CARACTERÍSTICAS :

●Características:
●
Linguagem Declarativa:
–
Descrição do problema que se pretende computar;
 – Base de Dados:

–
● Coleção de fatos;
Relações Logicas (regras):

● Domínio relacional do problema;
A RELAÇÃO :

●A Relação:
●
Basicamente, nada existe na mente humana sem
relação;
–
Não podemos conceber a existência de um objeto no
mundo que não tenha uma relação no tempo e no
espaço;
● Tudo é relação;
 ● A relação entre os objetos é que os define no mundo


– Exemplo:
 ● Dois irmãos existem por ter pais em comum;
 ● Sem a relação de paternidade a definição irmãos não
existiria;
A RELAÇÃO :

●A Relação:

● A Classificação e A Seriação:
–
Elementos fundamentais para a evolução cognitiva do
homem, a classificação e a seriação permitem o agrupamento
para discernimento e a organização hierárquica dos
elementos do mundo;

● Exemplo:

–
– Analisar o comportamento desde o nascimento:
 ● Inicialmente os bebes possuem movimentos de reflexos, que
são repetidos durante meses ate o momento em que são
combinados entre si e outros elementos sensoriais;
 ● Isto dá ínicio ao sistema cíclico de aprendizado;
 ● Uma vez portadora deste sistema, a criança pode distinguir os
objetos ao seu redor classificando-os e atribuindo a eles relações
de hierarquia;
A classificação e a seriação funcionam paralelamente;
A RELAÇÃO :

●A Relação:
 ●É
necessário que tenhamos estes conceitos de
relações na Linguagem Prolog;
–
Sendo que, através desta linguagem de programação,
iremos representar o mundo através de relações;
 – A Linguagem de programação Prolog, que significa
programação em lógica, não é baseada no
sequenciamento de procedimentos, mas na definição de
relações, na forma com a qual se representa o mundo
que se quer implementar no computador;
LINGUAGEM PROLOG :
● Implementação mais popular dos conceitos de
 programação em lógica;
 ● Alguns recursos:

–
Representação e manipulação de negação explicita nas
 clausulas;
 – Funções e predicados predefinidos para a aritmética de
 números inteiros e de ponto flutuante;
 – Operadores meta-lógicos para controlar regras de
 escolha utilizada;
 – Recursos, semelhantes, de Entrada/Saída de dados;
LINGUAGEM PROLOG :
●
Conversão usual entre logica de notação e
 linguagem de programação:
–
Conectivo ← pelos caracteres : – Conectivo ^ pela virgula (,)
 – Terminar cada clausula com um ponto (.)
 – Todas as variáveis iniciam com letra maiúscula;
LINGUAGEM PROLOG :

● Especificações são Programas:
–
A linguagem de especificação é entendida pela máquina e
é, por si só, uma linguagem de programação;





● Naturalmente, o refinamento de especificações é mais efetivo do
que o refinamento de programas;
● Um número ilimitado de cláusulas diferentes pode ser usado e
predicados (procedimentos) com qualquer numero de argumentos
são possíveis;
● Não ha distinção entre o programa e os dados;
● As cláusulas podem ser usadas com grande vantagem sobre as
construções convencionais para a representação de tipos abstratos
de dados;
● A adequação da lógica para a representação simultânea de
programas e suas especificações a torna um instrumento
especialmente útil para o desenvolvimento de ambientes e
protótipos;
LINGUAGEM PROLOG :
●
Capacidade Dedutiva:
–
O conceito de computação confunde-se com o de
(passo de) inferência;
 – A execução de um programa é a prova do teorema
 representado pela consulta formulada, com base nos
 axiomas representados pelas cláusulas (fatos e regras)
do programa;
LINGUAGEM PROLOG :
●
Não-determinismo:
–
Os procedimentos podem apresentar múltiplas
 respostas, da mesma forma que podem solucionar
 múltiplas e aleatoriamente variáveis condições de
 entrada;
 – Através de um mecanismo especial, denominado
 "backtracking", uma sequencia de resultados
alternativos pode ser obtida;
LINGUAGEM PROLOG :

● Reversibilidade das Relações:
–
Ou "computação bidirecional";
 – Os argumentos de um procedimento podem
alternativamente, em diferentes chamadas representar ora
parâmetros de entrada, ora de saída;

● Os procedimentos podem assim ser projetados para atender a
múltiplos propósitos;
–
A execução pode ocorrer em qualquer sentido, dependendo
do contexto;

● Por exemplo, o mesmo procedimento para inserir um elemento
no topo de uma pilha qualquer pode ser usado, em sentido
contrario, para remover o elemento que se encontrar no topo desta
pilha;
LINGUAGEM PROLOG :

● Tríplice Interpretação dos Programas em Logica:
–
Um programa em logica pode ser semanticamente
 interpretado de três modos distintos:





–
● (1) por meio da semântica declarativa, inerente à lógica;
● (2) por meio da semântica procedimental, onde as cláusulas dos
programas são vistas como entrada para um método de prova;
● (3) por meio da semântica operacional, onde as cláusulas são
vistas como comandos para um procedimento particular de
prova por refutação;
Essas três interpretações são intercambiáveis segundo a
 particular abordagem que se mostrar mais vantajosa ao
 problema que se tenta solucionar;
LINGUAGEM PROLOG :

● Recursão:

– Forma natural de ver e representar dados e programas;


● Entretanto, na sintaxe da linguagem não ha laços do tipo "for" ou
"while":





– Podem ser programados;
– São desnecessários;
– Não usam comandos de atribuição;
● Uma estrutura de dados contendo variáveis livres pode ser retornada
como a saída de um procedimento:



– Essas variáveis livres podem ser posteriormente instanciadas por
outros procedimentos produzindo o efeito de atribuições implícitas a
estruturas de dados;
 ● Variáveis livres são automaticamente agrupadas por meio de
 referências transparentes ao programador;
LINGUAGEM PROLOG :

● Vantagens:













– É de aprendizado muito mais fácil e natural do que as linguagens
procedimentais convencionais, podendo inclusive ser ministrada a
estudantes entre o final do primeiro e o inicio do segundo grau com grande
aproveitamento;
– Implementa com precisão todos os novos modelos surgidos nos últimos
anos, inclusive redes neurais, algoritmos genéticos, sociedades de agentes
inteligentes, sistemas concorrentes e paralelos;
– Permite a implementação de extensões, inclusive em nível meta, e a
definição precisa de sistemas reflexivos (essenciais, por exemplo, a
robótica);
– Libera o programador dos problemas associados ao controle de suas
rotinas, permitindo-lhe concentrar-se nos aspectos lógicos da situação a
representar.
Download