Programação em Lógica UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010 Roteiro • Introdução • Conceitos Básicos • Linguagens Lógicas • Semântica de Modelos • Semântica de Prova • Programação em Lógica • Prolog Programação em Lógica - ICC 2010 2 Introdução • Sistemas Simbólicos • Linguagens Formais • Sintaxe e Semântica • Teoria de Primeira Ordem Programação em Lógica - ICC 2010 3 Sistemas Simbólicos • São sistemas construídos a partir de símbolos. • Organizam-se em quatro níveis bem definidos: • • • • Léxico Sintático Semântico Pragmático • Sistemas simbólicos típicos são as linguagens: • Naturais • Formais Programação em Lógica - ICC 2010 4 Linguagens Formais • Conjuntos finitos de expressões formais: – Fórmulas – Fórmulas bem formadas (fbf) – Sentenças • Construídas a partir de: – Um Alfabeto conjunto finito de símbolos – Uma Gramática gera as expressões válidas da linguagem • Classificação de Chomsky: – – – – Programação em Lógica - ICC 2010.1 Linguagens Linguagens Linguagens Linguagens Regulares Livres de Contexto Sensíveis ao Contexto Enumeráveis Recursivamente 5 Sintaxe e Semântica • Sintaxe: fórmulas bem formadas (fbf) Regida por uma gramática • Semântica: atribuição de significado às fbfs Regida por uma interpretação Programação em Lógica - ICC 2010.1 6 Teoria de Primeira Ordem [1] • Uma Teoria de Primeira Ordem (TPO) consiste em: – uma linguagem de primeira ordem, definida sobre um alfabeto de primeira ordem, – um conjunto de axiomas, e – um conjunto de regras de inferência. • A linguagem de primeira ordem consiste nas fbfs da teoria. • Os axiomas e regras de inferência são utilizados para a derivação dos teoremas da teoria. Programação em Lógica - ICC 2010.1 7 Conceitos Básicos • • • • • Programação em Lógica - ICC 2010.1 Alfabeto de Primeira Ordem Termo Fórmula Bem Formada Linguagem de Primeira Ordem Quantificadores 8 Alfabeto de Primeira Ordem [2] • Um Alfabeto de Primeira Ordem (APO) é constituído por sete classes de símbolos: (i) Variáveis Individuais, (ii) Constantes Individuais, (iii) Constantes Funcionais, (iv) Constantes Predicativas, (v) Conetivos, (vi) Quantificadores, e (vii) Símbolos de Pontuação. Programação em Lógica - ICC 2010.1 Símbolos não lógicos Símbolos lógicos 9 Detalhes dos APOs • As classes (v) a (vii) são as mesmas para todos os alfabetos, sendo denominadas símbolos lógicos. • As classes (i) a (iv) podem variar de alfabeto para alfabeto e são denominadas símbolos não-lógicos. • Para qualquer alfabeto de primeira ordem, somente as classes (ii) e (iii) podem ser vazias. Programação em Lógica - ICC 2010.1 10 Convenções de Notação • As constantes individuais são denotadas por cadeias de símbolos iniciando com letra minúscula (a,b, ..., z). • As variáveis individuais serão denotadas por cadeias de símbolos iniciando com letra maiúscula (A, B, ..., Z). • Os conetivos são: ¬, , , , , e • Os quantificadores são e . • Os símbolos de pontuação são “(”, “)” e “,”. • A hierarquia para a precedência entre conetivos e quantificadores, em ordem decrescente é: » (1) ¬, e » (2) e » (3) , e Programação em Lógica - ICC 2010.1 11 Exemplo • Definição de um APO para o jogo Escoteirinho • Variáveis individuais: {X, Y} • Constantes individuais: {pedra, tesoura, papel} • Constantes funcionais: { } • Constantes predicativas: {ganha, perde, empata} • Conetivos: {¬, , , , , }. • Quantificadores: {, } • Símbolos de pontuação: {(, ), ,}. Programação em Lógica - ICC 2010.1 12 O Jogo: uma TPO • Assume-se variáveis universalmente quantificadas. • ganha(X, Y) X=pedra Y=tesoura. ganha(X, Y) X=papel Y=pedra. ganha(X, Y) X=tesoura Y=papel. Predicado ganha/2 • perde(X, Y) X=tesoura Y=pedra. perde(X, Y) X=pedra Y=papel. perde(X, Y) X=papel Y=tesoura. Predicado perde/2 • empata(X,Y) ¬ganha(X, Y) ¬perde(X, Y). Programação em Lógica - ICC 2010.1 Predicado empata/2 13 Outra Versão do Jogo • Assume-se variáveis universalmente quantificadas. • ganha(pedra, tesoura). ganha(papel, pedra). ganha(tesoura, papel). Predicado ganha/2 • perde(tesoura, pedra). perde(pedra, papel). perde(papel, pedra). Predicado perde/2 • empata(X, X). Programação em Lógica - ICC 2010.1 Predicado empata/2 14 Termos [3] Um termo é definido indutivamente da seguinte maneira: • (i) Uma variável individual é um termo; • (ii) Uma constante individual é um termo; • (iii) Se f é uma função n-ária e t1, t2, ..., tn são termos, então f(t1,t2,...,tn) é um termo. Noção Fundamental Programação em Lógica - ICC 2010.1 15 Fórmula Bem Formada [4] • Uma fórmula bem-formada (fbf) é definida indutivamente da seguinte maneira: 1. Se p é uma constante predicativa e t1, t2, ..., tn são termos, então, p(t1, t2, ..., tn) é uma fórmula bem formada denominada fórmula atômica ou simplesmente átomo; 2. Se f e g são fórmulas bem formadas, então (¬f), (fg), (fg), (fg) e (fg) são fórmulas bem formadas; 3. Se f é uma fórmula bem formada e X é uma variável, então (Xf) e (Xf) são fórmulas bem formadas. Programação em Lógica - ICC 2010.1 16 Exemplos de fbfs • X (p(X, g(X)) q(X)¬r(X)) Para todo X, se q(X) é verdadeiro e r(X) é falso, então p(X, g(X)) é verdadeiro. • X Y(¬p(X)¬g(X) p(Y)) Para todo X existe um Y tal que: se p(X) é falso e g(X) é falso, então p(Y) é verdadeiro. Programação em Lógica - ICC 2010.1 17 Linguagem de Primeira Ordem [5] • Uma linguagem de primeira ordem (LPO) sobre um alfabeto de primeira ordem é o conjunto de todas as fórmulas bem formadas construídas a partir dos símbolos deste alfabeto. Noção Fundamental Programação em Lógica - ICC 2010.1 18 Quantificadores [6] • O escopo de X em Xf e de X em Xf é f. • Uma ocorrência ligada de uma variável em uma fórmula é uma ocorrência que imediatamente segue o quantificador e qualquer ocorrência dessa mesma variável no escopo desse quantificador. • Qualquer outra ocorrência de variável é dita ser livre. Programação em Lógica - ICC 2010.1 19 Fórmula Fechada [7] • Uma fórmula é dita ser fechada quando não contém nenhuma ocorrência de variáveis livres. Programação em Lógica - ICC 2010.1 20 Fecho Universal e Existencial [8] • Se f é uma fórmula, então (f) denota o fecho universal de f, que é a fórmula fechada obtida pela imposição de um quantificador universal a todas as variáveis que ocorrem livremente em f. • Da mesma forma, (f) denota o fecho existencial de f, obtido pela imposição de um quantificador existencial a todas as variáveis que ocorrem livremente em f. Programação em Lógica - ICC 2010.1 21 Literal [9] • Um literal é um átomo ou a negação de um átomo. Um literal positivo é um átomo, enquanto que um literal negativo é a negação de um átomo. Importante Programação em Lógica - ICC 2010.1 22 Linguagens Lógicas • • • • • • • • Programação em Lógica - ICC 2010.1 Cláusula Cláusula de Programa Cláusula Unitária Programa em Lógica Predicado Cláusula Objetivo Cláusula Vazia Cláusula de Horn 23 Cláusula [10] Uma cláusula é uma fórmula do tipo: X1 ... Xs (l1 ... lm) onde cada li é um literal e X1, ..., Xs são todas as variáveis em l1, ..., lm. Isto é: “uma cláusula é o fecho universal de uma disjunção de literais” Noção Fundamental Programação em Lógica - ICC 2010.1 24 Exemplos de Cláusulas • XYZ (p(X,Z) ¬q(X,Y) ¬r(Y,Z)) • XY (¬p(X,Y) q(f(X),Y,Z) • ABC (p(A) q(A,f(B)) r(g(C),a,b) ¬s(A)) Programação em Lógica - ICC 2010.1 25 Notação Clausal • Assume-se todas as variáveis universalmente quantificadas. • A disjunção dos literais positivos é implicada pela conjunção dos literais negativos. Noção Fundamental • Isto é: X1 ... Xs (a1 a2 ... ak ¬b1 ¬b2 ... ¬ bm) pode ser escrito como: a1 a2 ... ak b1 b2 ... bm e finalmente: a1 , a2 , ..., ak b1 , b2 , ..., bm Notação Clausal Disjunção dos Literais Positivos Programação em Lógica - ICC 2010.1 Conjunção dos Literais Negativos 26 Na Tabela Verdade p q ¬q p¬q qp pq V V F V V V V F V V V V F V F F F F F F V V V V Cláusula Programação em Lógica - ICC 2010.1 Mesmos Valores Verdade Notação Clausal 27 Cláusula de Programa [11] • Uma cláusula de programa é uma cláusula do tipo a b1, ..., bn , que contém exatamente um literal positivo. O literal positivo, a, é denominado a cabeça da cláusula, enquanto que a conjunção de literais b1, ..., bn é o corpo da mesma. Programação em Lógica - ICC 2010.1 28 Cláusula Unitária [12] • Uma cláusula unitária, ou um fato, é uma cláusula do tipo a. Isto é, uma cláusula de programa com o corpo vazio. • Em um programa em lógica, a cláusula unitária ou fato é incondicionalmente (sempre) verdadeira Importante Programação em Lógica - ICC 2010.1 29 Importante Regras e Fatos • A semântica informal de a b1, ..., bn é: • “para todas as possíveis atribuições de cada uma das variáveis presentes na cláusula, se b1, ..., bn são todos verdadeiros, então a é verdadeiro". • Assim, se n>0, uma cláusula de programa é condicional (regra). Por outro lado, a cláusula unitária é incondicional (fato). Sua semântica informal é: • “para todas as possíveis atribuições de cada uma das variáveis presentes em a, a é verdadeiro". Programação em Lógica - ICC 2010.1 30 Programa em Lógica [13] • Um programa em lógica é um conjunto finito de cláusulas de programa. Noção Fundamental Programação em Lógica - ICC 2010.1 31 Definição de um Predicado [14] • Caracterização de um predicado: nome e aridade (número de argumentos). • Em um programa em lógica, o conjunto de todas as cláusulas de programa que possuem o mesmo predicado p na cabeça é denominado a definição do predicado p. • Noção Fundamental Programação em Lógica - ICC 2010.1 32 Cláusula Objetivo [15] • Uma cláusula objetivo é uma cláusula do tipo b1, ..., bn, isto é, uma cláusula que possui o consequente vazio. Cada bi (i = 1, ..., n) é denominado um sub-objetivo da cláusula. Programação em Lógica - ICC 2010.1 33 Cláusula Vazia [16] • A cláusula vazia, denotada por (aqui é um quadradinho mesmo ), é a cláusula que possui tanto o antecedente quanto o consequente vazios. Tal cláusula deve ser interpretada como uma contradição. Noção Fundamental Programação em Lógica - ICC 2010.1 34 Cláusula de Horn [17] Uma cláusula de Horn é uma cláusula de programa, uma cláusula objetivo ou a cláusula vazia. Cláusulas de Horn Significado a b1, ..., bn Regra: verdade condicional a Fato: verdade incondicional b1, ..., bn Objetivo: consulta ao programa Vazia: contradição Programação em Lógica - ICC 2010.1 35 Supercontextos das Cláusulas de Horn Lógica Matemática Cálculo de Predicados de Primeira Ordem Forma Clausal Cláusulas de Horn Todos os contextos tem a mesma expressividade, isto é, tudo que é possível expressar em lógica matemática, pode ser expresso com Cláusulas de Horn! Importante Programação em Lógica - ICC 2010.1 36 A Seguir, em Lógica para CC • Exemplos, exercícios, debates e reflexão para o perfeito entendimento desta fundamentação. • Programação PROLOG Básica Programação em Lógica - ICC 2010.1 37