Lógica para Computação Segundo Semestre, 2014 Aula 12: Lógica de Predicados DAINF-UTFPR Prof. Ricardo Dutra da Silva Vamos estender a lógica proposicional para torná-la mais expressiva. Na lógica proposicional, as fórmulas não dependiam da estrutura das proposições, apenas do modo como estas eram combinadas. Considere, por exemplo, a sentença declarativa: “Todo estudante é mais novo do que algum professor.”. Na lógica proposicional, a sentença seria um átomo. No entanto, a abordagem não captura estruturas mais finas da sentença, como “ser estudante”, “ser professor” ou “ser mais jovem do que alguém”. Para capturar essa maior expressividade usamos predicados. O predicado E(Carlos) pode ser usado para denotar que Carlos é um estudante; o predicado P (Ricardo) para denotar que Ricardo é um professor e o predicado J(Carlos, Ricardo) para denotar que Carlos é mais jovem que Ricardo. Os predicados acima estão modificando indivíduos específicos. Isso não ajuda muito na tarefa de descrever a frase que consideramos inicialmente, que fala de alunos e estudantes de uma forma mais geral. Os alunos e professores poderiam ser listados mas isso também não é prático. Então, usamos o conceito de variável que pode ser substituída por um indivíduo ou objeto qualquer. Usando as variáveis x e y, poderíamos escrever: E(x) : x é um estudante P (y) : y é um professor J(x, y) : x é mais jovem do que y. Ainda não temos uma formalização para os quantificadores “todo” e “algum”. Serão usados os símbolos ∀, que lemos “para todo”; e ∃, que lemos “existe” ou “para algum”. Os quantificadores sempre modificam uma variável. Tendo os predicado, os quantificadores e os conectivos já conhecidos da lógica proposicional, a sentença inicial de exemplo poderia ser escrita como: ∀x(E(x) → (∃y(P (y) ∧ J(x, y)))). Para avaliar se a fórmula é verdadeira é necessário definir os alunos e professores sobre os quais estamos falando. Considerando a UTFPR, possivelmente a sentença é verdadeira. 1 2 Aula 12: Lógica de Predicados No entanto, o resultado pode ser diferente em um curso de alfabetização para adultos. Na Lógica de Predicados também trabalhamos com o conceito de função. Considerando a sentença: “Toda criança é mais jovem do que sua mãe”, podemos formalizá-la como ∀x∀y(C(x) ∧ M (y, x) → J(x, y)), usando os predicados C(x) : x é uma criança M (y, x) : y é mãe de x J(x, y) : x é mais jovem do que y. As funções muitas vezes simplificam o que está sendo dito. Sabemos que uma criança possui apenas uma mãe, logo, poderíamos usar uma função m(x) que representa a mãe de x e evitaríamos escrever algo mais complicado como o predicado M (y, x). A fórmula seria simplificada como ∀x(C(x) → J(x, m(x))). Funções podem ser usadas quando o objeto sobre o qual falamos é definido unicamente. Não seria possível uma função b(x) que representa de forma não ambígua o irmão de x, pois um irmão pode não ser unicamente definido. Como fizemos com a lógica proposicional, vamos definir formalmente a sintaxe da Lógica de Predicados e em seguida a sua semântica. Definição 12.1. O alfabeto da lógica de predicados é formado por • símbolos de pontuação “(” e “)”. • Um conjunto V = {x1 , x2 , . . .} de variáveis. • Um conjunto C = {c1 , c2 , . . .} de constantes. • Um conjunto P = {P1 , P2 , . . .} de predicados. • Um conjunto F = {f1 , f2 , . . .} de funções. • Conectivos ¬, ∨, ∧, →, ∀, ∃. Cada um dos predicados e funções contém uma aridade, ou seja, um número específico de argumentos. Aula 12: Lógica de Predicados 3 Os símbolos para funções “falam” sobre objetos. As funções recebem objetos e retornam objetos. A função m(Carlos) = M aria recebe o objeto Carlos e informa o objeto Maria. Os símbolos para predicados são usados para representar propriedades e relações entre objetos. Ao dizer “Carlos é estudante”, ser estudante é uma propriedade de Carlos. Podemos representar a propriedade pelo predicado E(x) que será verdadeira se x é estudante. No caso de x = Carlos o resultado é verdadeiro. A relação “mais jovem” dada pelo predicado J(x, y) é verdadeira somente se x for mais jovem que y. Predicados e funções podem ter aridade zero. Funções de aridade zero são constantes. Os predicados com aridade zero são as variáveis proposicionais ou átomos da Lógica Proposicional. A escolha dos conjuntos P e F depende do que pretendemos descrever. Caso queiramos representar relações entre familiares, poderíamos ter P = {H, F, S, D} para representar os predicados “ser do sexo masculino”, “ser do sexo feminino”, “ser filho de” e “ser filha de”, respectivamente. As funções F = {m, p} poderiam ser usadas para representar a mãe e o pai de alguém. Na linguagem de predicados teremos sentenças cuja valoração representará um objeto e sentenças cuja valoração representará um valor verdade. As primeiras sentenças são chamadas termos e as segundas são chamadas fórmulas. Definição 12.2. O conjunto de termos T é definido como: • Base 1: se xi ∈ V, então xi ∈ T ; • Base 2: se ci ∈ C, então ci ∈ T ; • Passo recursivo: se t1 , t2 , . . . , tn são termos e f ∈ (F ) é uma função n-ária, n > 0, então f (t1 , t2 , . . . , tn ) ∈ T ; Os termos da linguagem são formados por variáveis, constantes e funções. Exemplo 12.1 Seja o alfabeto: • “(” e “)”; • V = {x, y}; 4 Aula 12: Lógica de Predicados • C = {a, b}; • P = {E, P, J}; • F = {m}; • ¬, ∨, ∧, →, ∀, ∃. A seguir são formados alguns termos usando a Definição 12.6. • x termo regra x (base 1) • a termo regra a (base 2) • m(x) termo regra x (base 1) m(x) (passo) Definição 12.3. Sejam t1 , t2 , . . . , tn termos e seja P um predicado n-ário, então P (t1 , t2 , . . . , tn ) é um átomo. Exemplo 12.2 Seja o alfabeto: • “(” e “)”; • V = {x, y}; • C = {a, b}; 5 Aula 12: Lógica de Predicados • P = {E, P, J}; • F = {m}; • ¬, ∨, ∧, →, ∀, ∃. Pela Definição 12.6, x e m(x) são termos. Pela Definição 12.3, J(x, m(x)) é um átomo formado pelo predicado J, de aridade dois. A Definição 12.3 indica que predicados n-ários assumem o papel dos átomos, como tínhamos na linguagem proposicional. Também, da mesma forma que a linguagem proposicional, a construção de fórmulas é feita pela concatenação de átomos e conectivos. Definição 12.4. O conjunto de fórmulas da Lógica de Predicados é definido como: • Base: um átomo é uma fórmula. • Passo recursivo 1: se A é uma fórmula então (¬A) também é uma fórmula. • Passo recursivo 2: se A e B são fórmulas então (A ∧ B), (A ∨ B) e (A → B) são fórmulas. • Passo recursivo 3: se A é uma fórmula e x é uma variável, então ∀x(A) e ∃x(A) são fórmulas. Exemplo 12.3 Considere a sentença “Todo filho do meu pai é meu irmão.” e os predicados F (x, y) : x é filho de y P (x, y) : x é pai de y I(x, y) : x é irmão de y. Se fizermos a contante e ser o objeto “eu”, a fórmula ∀x∀y(P (x, e) ∧ F (y, x) → I(y, e)) formaliza a sentença “Todo filho do meu pai é meu irmão.”. 6 Aula 12: Lógica de Predicados Alternativamente, usando a função p(x) para “pai de x”, a mesma sentença pode ser formalizada como ∀x(F (x, p(e)) → I(x, e)). Exemplo 12.4 As fórmulas do Exemplo 12.3 são bem formadas conforme a Definição 12.4. A fórmula ∀x∀y(P (x, e) ∧ F (y, x) → I(y, e)) pode ser construída da seguinte maneira: fórmula P (x, e) F (y, x) I(y, e) (P (x, e) ∧ F (y, x)) ((P (x, e) ∧ F (y, x)) → I(y, e)) ∀y(((P (x, e) ∧ F (y, x)) → I(y, e))) ∀x(∀y(((P (x, e) ∧ F (y, x)) → I(y, e)))) regra (base) (base) (base) (passo 2) (passo 2) (passo 3) (passo 3) Definição 12.5. A ordem de precedência na Lógica de Predicados é dada pela listagem dos conectivos na seguinte ordem, da maior precedência para a menor, ¬, ∀, ∃, ∧, ∨, →. Definição 12.6. O conjunto de subtermos de um termo E, Subt(E), é definido como: • Base 1: se E = x ∈ V, então Subt(E) = Subt(x) = {x}; • Base 2: se E = c ∈ C, então Subt(E) = Subt(c) = {c}; • Passo recursivo: se E = f (t1 , t2 , . . . , tn ), então Subt(E) = Subt(f (t1 , t2 , . . . , tn )) = {f (t1 , t2 , . . . , tn )} ∪ Subt(t1 ) ∪ Subt(t2 ) ∪ . . . Subt(tn ). Definição 12.7. O conjunto de subfórmulas de uma fórmula A, Subf(A), é definido como: • Base: se A é um átomo, Subf(A) = {A}. • Passo recursivo 1: se A = ¬B, então Subf(A) = Subf(¬B) = {¬B} ∪ Subf(B); Aula 12: Lógica de Predicados 7 • Passo recursivo 2: se A = B ∧C, então Subf(A) = Subf(B ∧C) = {B ∧C}∪Subf(B)∪ Subf(C); • Passo recursivo 3: se A = B ∨C, então Subf(A) = Subf(B ∨C) = {B ∨C}∪Subf(B)∪ Subf(C); • Passo recursivo 4: se A = B → C, então Subf(A) = Subf(B → C) = {B → C} ∪ Subf(B) ∪ Subf(C); • Passo recursivo 5: se A = ∀x(B), então Subf(A) = Subf(∀x(B)) = {∀x(B)}∪Subf(B); • Passo recursivo 6: se A = ∃x(B), então Subf(A) = Subf(∃x(B)) = {∃x(B)}∪Subf(B). Exercício 12.1. Compute as subfórmulas de H = ∀x(P (x)) → (P (x) ∧ ∀y(R(y)). Definição 12.8. Seja E uma fórmula: • se ∀x(H) é uma subfórmula de E, então o escopo de ∀x em E é H. • se ∃x(H) é uma subfórmula de E, então o escopo de ∃x em E é H. Exercício 12.2. Quais as subfórmulas da fórmula E = ∀x(∃y(∀zP (x, y, w, z) → ∀yQ(z, y, x, f (z1 )))) formam o escopo para os quantificadores presentes em E. Definição 12.9. Seja x uma variável e E uma fórmula, se x ocorre em E dentro do escopo de um quantificador, ∀x ou ∃x, então x é uma variável ligada; caso contrário, x é uma variável livre. Exercício 12.3. Classifique como ligada ou livre cada uma das variáveis da fórmula E = ∀x(∃y(∀zP (x, y, w, z) → ∀yQ(z, y, x, f (z1 )))).