• Nenhum resultado encontrado

4 LÓGICA DE PRIMEIRA ORDEM.

No documento Raciocinio Logico (páginas 41-50)

O cálculo proposicional possui limitações com respeito a codificação de sentenças declarativas. De fato, o cálculo proposicional manipula de forma satisfatória componentes das sentenças como não, e, ou, se ... então, mas certos aspectos lógicos

que aparecem em linguagens naturais ou artificiais são muito mais ricos. Por exemplo, como expressar coisas do tipo: “Existe...” e “Para todo...” na lógica proposicional?

Exemplo: Considere a seguinte sentença declarativa: Todo estudante é mais jovem do que algum instrutor. Na lógica proposicional podemos identificar esta sentença com uma variável proposicional p. No entanto, esta codificação não reflete os detalhes da estrutura lógica desta sentença. De que trata esta sentença?

- Ser um estudante. - Ser um instrutor.

- Ser mais jovem do que alguém.

Para expressar estas propriedades utilizaremos predicados. Por exemplo, podemos escrever estudante (ana) para denotar que Ana é uma estudante. Da mesma forma podemos escrever instrutor (marcos) para denotar que Marcos é um instrutor. Por fim, podemos escrever jovem (ana, marcos) para denotar que Ana é mais jovem do que Marcos. Nestes exemplos, estudante, instrutor e jovem são exemplos de predicados. Ainda precisamos codificar as noções de “todo” e “algum”. Para isto introduziremos o conceito de variável. Variáveis serão denotadas por letras latinas minúsculas do final do alfabeto: u, v, w, x, y, z (possivelmente acrescidas de sub-índices x1, x2, ...). Variáveis devem ser pensadas como “lugares vazios” que podem ser preenchidos (ou instanciados) por elementos concretos, como João, Maria, etc. Utilizando variáveis podemos especificar o significado dos predicados estudante, instrutor e jovem de uma maneira mais formal:

- estudante (x): x é um estudante. - instrutor (x): x é um instrutor. - jovem (x, y): x é mais jovem do que y.

Note que o nome das variáveis não é importante. É equivalente a: - estudante (x): x é um estudante.

- estudante(y): y é um estudante.

Para que possamos finalmente expressar em detalhes a sentença apresentada no exemplo precisamos codificar o significado de Todo e algum em Todo estudante é mais jovem do que algum instrutor. Os quantificadores e fazem este trabalho:

: significa para todo; : significa existe.

Os quantificadores e estão sempre ligados a alguma variável:

x: para todo x;

x: existe um x (ou existe algum x).

Agora podemos finalmente codificar a sentença: Todo estudante é mais jovem do que algum instrutor. Da seguinte forma:

x (estudante (x) → ( y (instrutor (y) Λ jovem (x, y))))

Note que predicados diferentes podem ter um número distinto de argumentos: os predicados estudante e instrutor admitem apenas um argumento e por isto são chamados de predicados unários, enquanto que o predicado jovem admite dois argumentos, e portanto é um predicado binário. O número de argumentos de um predicado é chamado sua aridade. Assim, os predicados unários têm aridade 1, enquanto que os predicados binários têm aridade 2, etc. No cálculo de predicados são permitidos predicados com qualquer aridade finita.

Exemplo: Considere a sentença: Nem todos os pássaros podem voar. Escolhemos os seguintes predicados para expressar esta sentença:

- pássaro(x): x é um pássaro. - voar (x): x pode voar.

Esta sentença pode ser codificada da seguinte forma: ¬(x (pássaro (x) → voar(x)))

Exemplo: Uma outra maneira de expressar a mesma ideia da sentença anterior é dizer que: Existem alguns pássaros que não podem voar. Esta última sentença pode ser codificada da seguinte maneira:

x (pássaro (x) Λ ¬voar(x))

Posteriormente veremos que as duas codificações dadas são semanticamente equivalentes. De fato, existem transformações que convertem uma na outra.

O vocabulário da lógica de primeira ordem consiste de três conjuntos:

- Um conjunto P de símbolos de predicado; - Um conjunto F de símbolos de função; - Um conjunto C de constantes.

Onde cada símbolo de predicado e de função vem com sua aridade bem definida. Os predicados são casos especiais de função: enquanto as funções possuem contradomínio qualquer, os predicados têm contradomínio sempre igual a {V,F}. As constantes são funções de aridade 0.

Termos são definidos da seguinte forma: - Qualquer variável é um termo;

- Se c F é uma função de aridade 0 então c é um termo; - Se t1, ... , tn são termos e f F é uma função de aridade n > 0

então f (t1, ... , tn) é um termo. - Nada mais é termo.

Em BNF (Backus Naur form) temos: t :: = x | c | f (t, ... , t)

Onde x percorre o conjunto de variáveis V, c percorre os símbolos de função de aridade 0 de F e f percorre os elementos de aridade maior do que 0 de F.

Exemplo: Suponha que n, f e g são símbolos de função de aridade respectivamente igual a 0, 1 e 2. Então g (f (n), n) e f (g (n, f (n))) são termos, mas g(n) e f (f (n), n) não são termos por violarem as aridades dos símbolos. A escolha dos conjuntos P e F para símbolos de predicado e de função é definida a partir do que se pretende descrever.

Definimos o conjunto de fórmulas sobre o conjunto S = (F, P) indutivamente da seguinte forma:

- Se p P é um símbolo de predicado de aridade n > 0, e se t1, ... , tn são termos sobre F então p (t1, .... , tn) é uma fórmula.

- Se Φ é uma fórmula então (¬Φ) é também uma fórmula. - Se Φ e ψ são fórmulas então (Φ Λ ψ), (Φ V ψ), (Φ → ψ) e (Φ ↔ ψ) são fórmulas.

- Se Φ é uma fórmula e x é uma variável então ( xΦ) e ( xΦ) também são fórmulas.

- Nada mais é fórmula. Em BNF temos:

Φ :: = p (t1, ... , tn) | (¬Φ) | (Φ Λ Φ) | (Φ V Φ) | (Φ → Φ) | (Φ ↔ ψ) | (( xΦ) | (( xΦ)

Onde p é um símbolo de predicado de aridade n > 0, ti são termos sobre F e x é uma variável.

Adotaremos a seguinte prioridade de operadores: 1. ¬, , ;

2. Λ, V; 3. →, ↔.

Exemplo: Considere a seguinte sentença: Todo filho de meu pai é meu irmão. Podemos codificar esta fórmula de pelo menos duas formas distintas:

1. Representando a noção de “pai” como predicado: Neste caso escolhemos três predicados: filho, pai e irmão com os seguintes significados e aridades:

- filho (x, y): x é filho de y. - pai (x, y): x é pai de y. - irmão (x, y): x é irmão de y.

Uma possível codificação para a sentença dada utilizando estes predicados é:

x y (pai (x, João) Λ filho (y, x) → irmão (y, João))

Dizendo que: “para todo x e todo y, se x é o pai de João e se y é um filho de x então y é um irmão de João”. Representando a noção de “pai” como função, que chamaremos de f: Neste caso, f(x) retorna o pai de x. Note que isto funciona apenas porque o pai de uma dado x é único e está sempre definido, e portanto f é realmente uma função. Uma possível codificação para esta sentença é dada por:

x (filho (x, f(João) → irmão (y, João))

Significando que “para todo x, se x é um filho do pai de João então x é um irmão de João. Esta codificação é menos complexa que a anterior porque envolve apenas um quantificador.

Especificações formais em geral exigem um domínio de conhecimento. Muitas vezes este conhecimento não está explicitado no domínio. Sendo assim, um especificador pode desconsiderar restrições importantes para um modelo ou implementação. Por exemplo, as codificações dadas no exemplo anterior podem parecer corretas, mas e se x for igual a João? Se o domínio de relações de parentesco não é um conhecimento comum o especificador pode não notar que uma pessoa não pode ser irmão dela mesma.

A abrangência de x (respectivamente, x) em xΦ (respectivamente, xΦ) é Φ. Uma ocorrência de uma variável ligada numa fórmula, é uma ocorrência de uma variável x, dentro do campo de abrangência de um quantificador x ou x. Uma ocorrência de uma variável livre é uma ocorrência de uma variável x não ligada.

Exemplo: Na fórmula x (p(f(x), y) → q(x)), as duas ocorrências da variável x são ligadas, enquanto a ocorrência da variável y é livre. Na fórmula x p(f(x), y) → q(x) a primeira ocorrência da variável x é ligada, no entanto a segunda é livre.

Dada uma variável x, um termo t e uma fórmula Φ, definimos Φ [x/t] como sendo a fórmula obtida após substituir cada ocorrência livre de x em Φ por t.

Exemplo: Considere novamente a fórmula x ((p(x) → q(x)) Λ s(x, y)), que chamaremos simplesmente de Φ. Temos que Φ [x/f(x, y)] = Φ. De fato, todas as ocorrências de x em Φ são ligadas, e portanto a substituição [x/f(x, y)] não tem nenhum efeito sobre esta fórmula.

Exemplo: Agora considere a fórmula ( x (p(x) Λ q(x))) → (¬p(x) V q(y)) que chamaremos simplesmente de ψ. Neste caso temos uma ocorrência livre de x e, portanto [x/f(x, y)] é igual a (

x (p(x) Λ q(x))) → (¬p(f(x, y)) V q(y)). As substituições podem

produzir efeitos colaterais indesejados: Considere o termo f(x, y) e a fórmula y (p(x, y)). Então ( y (p(x, y))) [x/f(x, y)] resulta na fórmula ( y (p(f(x, y), y))) se fizermos uma substituição “ingênua”.

Observe que o termo resultante possui uma semântica diferente da esperada porque a variável y do termo f(x, y) não corresponde a variável y quantificada universalmente na fórmula dada. Como resolver este problema?

Dados um termo t, uma variável x e uma fórmula Φ, dizemos que t é livre para x em Φ se nenhuma ocorrência livre de x em Φ está no escopo de ( y ou y para qualquer variável y que ocorra em t.

Exemplo: Considere a fórmula s(x) Λ y (p(x) → q(y)), que possui duas ocorrências livres de x. A ocorrência de x mais a esquerda poderia, por exemplo, ser substituída pelo termo f(y, y), no entanto a outra ocorrência não poderia ser substituída por este termo porque tal substituição acarretaria captura da variável y. Quando precisamos realizar uma substituição de um termo t que não está livre para uma variável x em uma fórmula Φ, o que fazemos é renomear as variáveis ligadas para evitar capturas:

Exemplo: No caso do exemplo anterior, a substituição de x por f(y, y) em s(x) Λ y (p(x) → q(y)) pode ser resolvida renomeando a variável ligada y da fórmula para algum nome novo, por exemplo

: s(x) Λ (p(x) → q( )). Agora a substituição pode ser realizada

sem provocar captura de variáveis.

O ingrediente novo da lógica de primeira ordem não encontrado na lógica proposicional é a quantificação: dada uma sentença Φ qualquer, as novas construções xΦ e xΦ - leia “para todo x, Φ” e “para algum x, Φ”, respectivamente são introduzidas. xΦ significa que Φ é verdadeiro para todo valor de x e xΦ significa que há pelo menos um x tal que Φ é verdadeiro. Os valores das variáveis são tirados de um universo de discurso pré-determinado. Um refinamento da lógica de primeira ordem permite variáveis de diferentes tipos, para tratar de diferentes classes de objetos.

A lógica de primeira ordem tem poder expressivo suficiente para formalizar praticamente toda a matemática. Uma teoria de primeira ordem consiste em um conjunto de axiomas (geralmente finitos ou recursivamente enumerável) e de sentenças dedutíveis a partir deles. A teoria dos conjuntos de Zermelo-Fraenkel é um exemplo de uma teoria de primeira ordem, e aceita-se geralmente que toda a matemática clássica possa ser formalizada nela. Há outras teorias que são normalmente formalizadas na lógica de primeira ordem de maneira independente (embora elas admitam a implementação na teoria dos conjuntos) tais como a aritmética de Peano. Um cálculo de predicados consiste em:

- regras de formação (definições recursivas para dar origem a fórmulas bem-formadas ou FBFs).

- regras de transformação (regras de inferência para derivar teoremas).

- axiomas.

Os axiomas considerados aqui são os axiomas lógicos que fazem parte do cálculo de predicados. Além disso, os axiomas não- lógicos são adicionados em teorias de primeira ordem específicas: estes não são considerados como verdades da lógica, mas como verdades da teoria particular sob consideração. Quando o conjunto dos axiomas é infinito, requer-se que haja um algoritmo que possa decidir para uma fórmula bem-formada dada, se ela é um axioma ou não. Deve também haver um algoritmo que possa decidir se uma aplicação dada de uma regra de inferência está correta ou não. É importante notar que o cálculo de predicados pode ser formalizado de muitas maneiras equivalentes; não há nada canônico sobre os axiomas e as regras de inferência propostos aqui, mas toda a formalização dará origem aos mesmos teoremas da lógica (e deduzirá os mesmos teoremas a partir de um conjunto qualquer de axiomas não-lógicos).

Alfabeto

O alfabeto de 1ª ordem, Σ, tem a seguinte constituição: Σ = X ΣC ΣF ΣR ΣL ΣP, onde

X = {x, y, z, x1, x2, ..., y1, y2, ..., z1, z2, ...} é um conjunto enumerável de variáveis;

ΣC = {a, b, c, a1, a2, ..., b1, b2, ..., c1, c2, ...} é um conjunto de símbolos chamados de constantes;

ΣF = {F1, F2, ...} é um conjunto de símbolos ditos sinais

funcionais;

ΣR = {R1, R2, ...} é um conjunto de símbolos ditos sinais relacionais ou predicativos;

ΣL = {¬, Λ, V, →, ↔, , } é o conjunto de símbolos ditos sinais lógicos;

ΣP = {(,),,} é o conjunto de símbolos de pontuação.

As constantes, sinais funcionais e sinais predicativos constituem a coleção de sinais ditos símbolos não lógicos. Há diversas variações menores listadas abaixo:

O conjunto de símbolos primitivos (operadores e quantificadores) varia frequentemente. Alguns símbolos primitivos podem ser omitidos, substituindo-os com abreviaturas adequadas; por exemplo (p ↔ q) é uma abreviatura para (p → q) (q → p). No sentido contrário, é possível incluir outros operadores como símbolos primitivos, como as constantes de verdade ⊤ para “verdadeiro” e o

para “falso” (estes são operadores do aridade 0). O número mínimo dos símbolos primitivos necessários é um, mas se nós nos restringirmos aos operadores listados acima, seria necessário três; por exemplo, o ¬, o ∧, e o bastariam.

Alguns livros mais velhos usam a notação Φ ⊃ ψ para Φ → ψ, ~Φ para ¬Φ, Φ & ψ para Φ ∧ ψ, e uma riqueza de notações para os quantificadores; por exemplo, xΦ pode ser escrito como (x)Φ. A igualdade é às vezes considerada como parte da lógica de primeira ordem; Neste caso, o símbolo da igualdade será incluído no alfabeto, e comportar-se-á sintaticamente como um predicado binário. Assim a LPO será chamada de lógica de primeira ordem com igualdade. As constantes são na verdade funções de aridade 0, assim seria possível e conveniente omitir constantes e usar as funções que tenham qualquer aridade.

Mas é comum usar o termo “função” somente para funções de aridade 1. Na definição acima, as relações devem ter pelo menos aridade 1. É possível permitir relações de aridade 0; estas seriam consideradas variáveis proposicionais.

Há muitas convenções diferentes sobre onde pôr parênteses; por exemplo, se pode escrever x ou ( x). Às vezes se usa dois pontos ou ponto final ao invés dos parênteses para criar fórmulas não ambíguas. Uma convenção interessante, mas incomum, é a “notação polonesa”, onde se omite todos os parênteses, e escreve- se o ∧, ∧ , e assim por diante na frente de seus argumentos. A notação polonesa é compacta e elegante, mas rara e de leitura complexa. Uma observação técnica é que se houver um símbolo de função de aridade 2 que representa um par ordenado (ou símbolos de predicados de aridade 2 que representam as relações de projeção de um par ordenado) então se pode dispensar inteiramente as funções ou predicados de aridade > 2. Naturalmente o par ou as projeções necessitam satisfazer aos axiomas naturais.

Os conjuntos das constantes, das funções, e das relações compõem a assinatura e são geralmente considerados para dar forma a uma linguagem, enquanto as variáveis, os operadores lógicos, e os quantificadores são geralmente considerados para pertencer à lógica. Uma estrutura dá o significado semântico de cada símbolo da assinatura. Por exemplo, a linguagem da teoria dos grupos consiste de uma constante (elemento da identidade), de uma função de aridade 1 (inverso), de uma função de aridade 2 (produto), e de uma relação de aridade 2 (igualdade), que seria omitida pelos autores que incluem a igualdade na lógica subjacente.

Regras de Formação

As regras de formação definem os termos, fórmulas, e as variáveis livres como segue. O conjunto dos termos é definido recursivamente pelas seguintes regras:

- Qualquer constante é um termo (sem variáveis livres). - Qualquer variável é um termo (cuja única variável livre é ela mesma).

- Toda expressão f (t1,…, tn) de n ≥ 1 argumentos (onde cada argumento ti é um termo e f é um símbolo de função de aridade n) é um termo. Suas variáveis livres são as variáveis livres de cada um dos termos ti.

- Cláusula de fechamento: Nada mais é um termo.

O conjunto das fórmulas bem-formadas (chamadas geralmente FBFs ou apenas fórmulas) é definido recursivamente pelas seguintes regras:

- Predicados simples e complexos: se P for uma relação de aridade n ≥ 1 e os ai são os termos então P (a1, ..., an) é bem formada. Suas variáveis livres são as variáveis livres de quaisquer termos ai. Se a igualdade for considerada parte da lógica, então (a1 = a2) é bem formada. Tais fórmulas são ditas atômicas.

- Cláusula indutiva I: Se Φ for uma FBF, então ¬Φ é uma FBF. Suas variáveis livres são as variáveis livres de Φ.

- Cláusula indutiva II: Se Φ e ψ são FBFs, então (ψ ∧ Φ), (ψ V Φ), (ψ → Φ), (ψ ↔ Φ) são FBFs. Suas variáveis livres são as variáveis livres de Φ e de ψ.

- Cláusula indutiva III: Se Φ for uma FBF e x for um variável, então xΦ e xΦ são FBFs, cujas variáveis livres são as variáveis livres de Φ com exceção de x. Ocorrências de x são ditas ligadas ou mudas (por oposição a livre) em xΦ e xΦ.

- Cláusula de fechamento: Nada mais é uma FBF.

Na prática, se P for uma relação de aridade 2, nós escrevemos frequentemente “a P b” em vez de “P a b”; por exemplo, nós

escrevemos 1 < 2 em vez de < (1 2). Similarmente se f for uma função de aridade 2, nós escrevemos às vezes “a f b” em vez de “f (a b)”; por exemplo, nós escrevemos 1 + 2 em vez de + (1 2). É também comum omitir alguns parênteses se isto não conduzir à ambiguidade. Às vezes é útil dizer que “P(x) vale para exatamente um x”, o que costuma ser denotado por !xP(x). Isto também pode ser expresso por x (P (x) y (P (y) → (x = y))). Exemplos: A linguagem dos grupos abelianos ordenados tem uma constante 0, uma função unária −, uma função binária +, e uma relação binária ≤. Assim:

- [0, x, y são termos atômicos];

- [+ (x, y), + (x, + (y, − (z))) são termos, escritos geralmente como x + y, x + (y + (−z))];

- [= (+ (x, y), 0), ≤ (+ (x, + (y, − (z))), + (x, y)) são fórmulas atômicas, escritas geralmente como x + y = 0, x + y - z ≤ x + y,];

- [( x y ≤ (+ (x, y), z)) ∧ ( x = (+ (x, y), 0)) é uma fórmula, escrita geralmente como ( x y (x + y ≤ z)) ∧ ( x (x + y = 0))].

Substituição: Se t é um termo e Φ(x) é uma fórmula que contém possivelmente x como uma variável livre, então Φ(t) se definido como o resultado da substituição de todas as instâncias livres de x por t, desde que nenhuma variável livre de t se torne ligada neste processo. Se alguma variável livre de t se tornar ligada, então para substituir t por x é primeiramente necessário mudar os nomes das variáveis ligadas de Φ para algo diferente das variáveis livres de t. Para ver porque esta condição é necessária, considere a fórmula Φ(x) dada por y y ≤ x (“x é máximal”). Se t for um termo sem y como variável livre, então Φ(t) diz apenas que t é maximal. Entretanto se t é y, a fórmula Φ(y) é y y ≤ y que não diz que y é máximal. O problema de que a variável livre y de t (=y) se transformou em ligada quando nós substituímos y por x em Φ(x). Assim, para construir Φ(y) nós devemos primeiramente mudar a variável ligada y de Φ para qualquer outra coisa, por exemplo a variável z, de modo que o Φ(y) seja então z z ≤ y. Esquecer desta condição é uma causa notória de erros.

Igualdade: Há diversas convenções diferentes para se usar a igualdade (ou a identidade) na lógica de primeira ordem. Esta seção resume as principais. Todas as convenções resultam mais ou menos no mesmo com mais ou menos a mesma quantidade de trabalho, e diferem principalmente na terminologia. A convenção mais comum para a igualdade é incluir o símbolo da igualdade como um símbolo lógico primitivo, e adicionar os axiomas da igualdade aos axiomas da lógica de primeira ordem. Os axiomas de igualdade são

x = x

x = y → F(…, x, …) = F(…, y, …) para qualquer função F x = y → (R(…, x, …) → R(…, y, …)) para qualquer relação R (incluindo a própria igualdade)

A próxima convenção mais comum é incluir o símbolo da igualdade como uma das relações de uma teoria, e adicionar os axiomas da igualdade aos axiomas da teoria. Na prática isto é quase idêntico à da convenção precedente, exceto no exemplo incomum de teorias com nenhuma noção de igualdade. Os axiomas são os mesmos, e a única diferença é se eles serão chamados de axiomas lógicos ou de axiomas de teoria. Nas teorias sem funções e com um número finito de relações, é possível definir a igualdade em termos de relações, definindo os dois termos s e t como iguais se qualquer relação continuar inalterada ao se substituir s por t em qualquer argumento. Por exemplo, em teoria dos conjuntos com uma relação

, nós definiríamos s = t como uma abreviatura para

∀x (s ∈ x ↔ t ∈ x) ∧ ∀x (x ∈ s ↔ x ∈ t). Esta definição de igualdade satisfaz automaticamente os axiomas da igualdade. Em algumas teorias é possível dar definições de igualdade ad hoc. Por exemplo, em uma teoria de ordens parciais com uma relação ≤ nós poderíamos definir s = t como uma abreviatura para s ≤ t ∧ t ≤ s.

Regras de Inferência

A regra de inferência modus ponens é a única necessária para a lógica proposicional de acordo com a formalização proposta aqui. Ela diz que se Φ e Φ → ψ são ambos demonstrados, então pode-se deduzir ψ. A regra de inferência chamada Generalização Universal é característica da lógica de primeira ordem:

Se ╞ Φ, então ╞ xΦ

onde se supõe que Φ é um teorema já demonstrado da lógica de primeira ordem. Observe que a Generalização é análoga à regra da necessitação da lógica modal, que é:

Se ╞ P, então ╞ xP

Limitações: Apesar da Lógica de Primeira Ordem ser suficiente para formalizar uma grande parte da matemática, e também ser comumente usada em Ciência da Computação e outras áreas, ela tem as suas limitações. Suas limitações incluem limitações em sua expressividade e limitações com relação aos fragmentos das línguas naturais que pode descrever.

Expressividade: O teorema de Löwenheim–Skolem mostra que se uma teoria de primeira ordem tem um modelo infinito, então a teoria também tem modelos de todas as cardinalidades infinitas. Em particular, nenhuma teoria de primeira ordem com um modelo infinito pode ser categórica. Assim, não há uma teoria de primeira ordem cujo único modelo tem o conjunto dos números naturais como domínio, ou cujo único modelo tem o conjunto dos números reais como domínio. Várias extensões da Lógica de Primeira-Ordem, incluindo a Lógica de Ordem Superior e a Lógica Infinitária, são mais expressivas no sentido de que elas admitem axiomatizações categóricas dos números naturais ou reais. Essa expressividade tem um custo em relação às propriedades meta-lógicas; de acordo com o Teorema de Lindström, qualquer lógica que seja mais forte que a lógica de primeira ordem falhará em validar o teorema da compaccidade ou em validar o teorema de Löwenheim–Skolem.

Formalizando as Línguas Naturais

A lógica de primeira ordem é capaz de formalizar vários quantificadores na lingua natural, como “todas as pessoas que moram em Paris,

No documento Raciocinio Logico (páginas 41-50)

Documentos relacionados