Introdução à Lógica Para a Ci`ência da Computação

Propaganda
Jair Minoro Abe
Alexandre Scalzitti
João Inácio da Silva Filho
Introdução à Lógica
para a
Ciência da Computação
1
Jair Minoro Abe
Alexandre Scalzitti
João Inácio da Silva Filho
Introdução à Lógica
para a
Ciência da Computação
2.001
2001, by Editora Arte & Ciência
Direção Geral
Henrique Villibor Flory
Editor e Projeto Gráfico
Aroldo José Abreu Pinto / Karel H. Langermans
Editoração Eletrônica
Alain Ferreira do Nascimento
Capa
Karel H. Langermans
Dados Internacionais de Catalogação na Publicação (CIP)
(Biblioteca de F.C.L. - Assis - UNESP)
Índice para catálogo sistemático:
1.
2.
3.
Editora Arte & Ciência
Rua Treze de Maio, 71 – Bela Vista
São Paulo – SP - CEP 01327-000
Tel/fax: (0XX11) 257-5871
Na internet: http://www.arteciencia.com.br
Dedico este trabalho ao Rusky (1990-2000)
que me ensinou muitas coisas,
aprendi muitas coisas,
por uma linguagem não falada.
Jair Minoro Abe
Prefácio
Este texto foi elaborado pelos autores tendo por base os diversos
cursos de Lógica que os mesmos têm lecionado nos últimos anos.
A presente monografia é destinada a introduzir o leitor neste fascinante ramo do conhecimento humano que é a moderna Lógica Matemática.
O trabalho foi redigido para atender um número maior de leitores, englobando estudantes de diversas áreas, tais como, Ciência da Computação, Análise
de Sistemas, Processamento de Dados, Inteligência Artificial, as diversas
Engenharias, Matemática, Ciências Biológicas, Economia, Psicologia, Filosofia, Direito, enfim todo estudioso interessado no assunto.
A Lógica se converteu nos últimos anos em disciplina de primeira
necessidade para os diversos cursos, e isto não é surpreendente, pois,
disse o pensador norte americano W. Quine : “A Lógica é o denominador
comum das Ciências Especiais ...”.
Não se exige, praticamente, pré-requisito algum para sua leitura; com
efeito, a exposição do texto está detalhada tanto quanto possível com notas
explicativas referente a pontos “delicados” do desenvlvimento, procurando
fazer do texto uma leitura agradável. Os tópicos escolhidos cobrem o que
hodiernamente denominamos de “núcleo” da Lógica Clássica.
Complementou-se com algumas aplicações nas diversas áreas.
Um comentário ao neófito em Lógica: não se lê um livro de lógica
como se lê um livro de romance, i.e., sua leitura muitas vezes não é conveniente que se faça de maneira linear; também sugere-se ao leitor que faça os
inúmeros exercícios propostos para um entendimento salutar dos conceitos
vistos. Aqui se aplica vivamente um pensamento de Confúcio: “se ouço,
esqueço; se vejo, gravo; se faço, compreendo ...”
O tomo que vem a lume é apenas uma primeira versão que pretendemos futuramente aprimorá-lo e enriquecê-lo. Para tanto, contamos com as
sugestões e críticas construtivas por parte dos leitores.
Os Autores.
7
SUMÁRIO
PREFÁCIO
1 – INTRODUÇÃO................................................................................................9
0.1– Nota Histórica......................................................................................9
0.2– O que é Lógica ?.................................................................................10
0.3– Ciência e Lógica.................................................................................11
0.4– Aspectos da lógica atual..................................................................13
1– INTRODUÇÃO AO CÁLCULO PROPOSICIONAL
1.1– Introdução..........................................................................................15
1.2– Os paradoxos.....................................................................................15
1.3– Linguagens artificiais........................................................................20
1.4– A linguagem universal da lógica.....................................................22
1.5– Conectivos lógicos e tabelas-verdade...........................................22
1.6– Fórmulas atômicas e fórmulas.........................................................37
1.7– Árvore de composição de uma fórmula - árvore de
decomposição............................................................................................38
1.8– Tabela-verdade de uma fórmula......................................................49
1.9- Tautologias.........................................................................................65
1.10– Árvore de refutação........................................................................70
1.11– Inferência lógica..............................................................................82
1.12– Regra de eliminação de parêntesis................................................93
1.13– A notação polonesa de fórmulas..................................................94
1.14– Forma normal disjuntiva.................................................................95
1.15– Uma axiomatização da lógica proposicional..............................101
2- O CÁLCULO DE PREDICADOS..................................................................117
2.1– Lógica e gramática...........................................................................117
2.2– Um sistema formal para a lógica de predicados..........................125
2.3– Estrutura dedutiva...........................................................................128
2.4– Semântica..........................................................................................138
3– ALGUNS ASPECTOS DE PROGRAMAÇÃO EM LÓGICA E PROLOG
3.1– Introdução........................................................................................145
3.2– A proposta da programação em lógica........................................146
3.3– Cláusula de Horn.............................................................................147
3.4– Considerações preliminares...........................................................148
3.5– Cláusula............................................................................................151
9
3.6– Cláusula de programa.....................................................................153
3.7- Cláusula de programa condicional.................................................154
3.8- Cláusula de programa incondicional.............................................155
3.9– Cláusula gol......................................................................................156
3.10- Cláusula vazia..................................................................................157
3.11- Cláusula de Horn.............................................................................157
3.12– Programs lógicos e teoremas.......................................................159
3.13– Computação de gols......................................................................161
3.14– Substituições e unificadores........................................................170
3.15– Substituições..................................................................................171
3.16– Instância de uma substituição...........................................................
3.17– Composição de substituições.....................................................172
3.18– Variante...........................................................................................172
3.19– Proposições....................................................................................173
3.20- Substituição mais geral.......................................................................
.3.21– Unificadores...................................................................................173
3.22– Unificador mais geral – umg........................................................174
3.23– Algoritmo de unificação.....................................................................
3.24– Resolvente......................................................................................180
3.25– SLD-derivação.................................................................................182
3.26– SLD-refutação.................................................................................183
3.27– Um pouco de PROLOG.................................................................190
3.28– A notação PROLOG.......................................................................190
3.29– A estratégia PROLOG...................................................................192
3.30– Interpretador PROLOG.................................................................193
3.31– Assuntos relacionados à programação em lógica....................196
4– CIRCUITOS LÓGICOS DE CHAVEAMENTO
4.1– A álgebra da lógica.........................................................................199
4.2– Negação lógica – circuito não......................................................202
4.3– Conjunção lógica – circuito E.......................................................204
4.4- Disjunção lógica – circuito OR......................................................205
4.5– Exemplos de aplicações.................................................................207
5– PORTAS LÓGICAS.......................................................................................215
5.1– As portas lógicas básicas..............................................................216
5.2– Porta lógica inversora.....................................................................216
5.3– Porta lógica E...................................................................................217
5.4– Porta lógica NÃO-E (NAND)........................................................217
5.5– Porta lógica OU...............................................................................218
5.6– Porta lógica NÃO-OU (NOR)........................................................219
5.7– Combinação de portas lógicas......................................................220
5.8– Exemplos de aplicação...................................................................207
APÊNDICE
1.Algumas estruturas algébricas...........................................................233
2.Lógica proposicional e álgebra de Boole..........................................235
3.Modelos de Herbrand..........................................................................236
4.A lógica clássica .................................................................................240
REFERÊNCIAS BIBLIOGRÁFICAS.....................................................245
10
1 INTRODUÇÃO
1.1 - Nota Histórica
A Lógica, ao que tudo indica, foi descoberta por Aristóteles (384-322
a.C.). Os registros se encontram em seu famoso livro “ da Metafísica”.
Após sua descoberta, ela permaneceu praticamente intacta por mais de dois
mil anos, sendo retocada em detalhes de pouca importância. E. Kant chegou
mesmo a asseverar que a ciência descoberta pelo Estagirita se constituía
numa ciência acabada: a lógica não havia dado nenhum passo para diante e
nenhum para trás (desde sua introdução).
Não obstante, grandes mudanças começaram a ocorrer notadamente
com G. Boole (1815-1864), A. De Morgan (1806-1871) e contemporâneos com
a introdução da simbolização na Lógica. Boole, na realidade, estava estudando as “Leis do Pensamento Humano”. Houve, porém, alguns precursores dessa mudança, como G. Leibniz (1646-1716) e J.H. Lambert (1728-1777).
Outras investigações de caráter mais filosófico foram efetuadas por G. Frege
(1848-1925), contribuindo enormemente para o desenvolvimento da lógica
de predicados. Porém, o grande avanço propriamente dito foi estabelecido
com a publicação da monumental obra “Principia Mathematica”, em três
volumes, de A. N. Whitehead e B. Russell no alvorecer deste século. Podese mesmo dizer que a moderna Lógica Matemática teve início com a publicação da referida obra. Aliás, não seria exagero, se afirmarmos, como A. N.
Whitehead disse, que a lógica atual está para a lógica aristotélica como a
matemática moderna está para a aritmética das tribos primitivas.
No entanto, as décadas posteriores aguardavam mais novidades. K.
Gödel, na época um jovem lógico austríaco, mostrou que não pode haver
uma sistematização completa da Aritmética. Isto quer dizer que, intuitivamente e sem rigor, há proposições aritméticas que dizem: “sou verdadeiro,
porém indemonstrável”. Desse resultado, Gödel deduziu outro: que, se a
Aritmética for consistente, sua consistência não pode ser demonstrada “dentro” da teoria, ou seja, há que se recorrer à teorias que a englobem, mais
gerais, e, portanto, mais inseguras que a original. Tais resultados são conhecidos como “teoremas de incompleteza de Gödel”. Como se sabe, os resultados de Gödel representaram o limiar de uma nova era na moderna Lógica
Matemática. Suas reflexões são de longo alcance, deixando muitas questões
sobre os fundamentos da disciplina para as décadas posteriores.
Outra contribuição de envergadura foi efetuada pelo lógico polonês
A. Tarski. Constitui na matematização do conceito de verdade como correspondência. Tal concepção de verdade remonta Aristóteles: “dizer do que
não é que é, e dizer do que é, que não é, é falso. E, dizer do que não é, que não
11
é, e dizer do que é, que é, é verdadeiro”. Noutras palavras, verdade é aquilo
que é e falso, aquilo que não é. Note que o conceito de verdade repousa no
verbo ser. Antes de Tarski, a idéia de verdade era utilizado livremente no
discurso matemático e inúmeras contradições haviam aparecido nas teorias
matemáticas.
Outra enorme revolução que a lógica experimentou neste século foram
alguns resultados de independência de certos postulados da teoria dos
conjuntos obtidas por P. Cohen. No início da década de sessenta, Cohen
mostrou, por exemplo, que um dos axiomas mais discutidos, o Axioma da
Escolha, era independente dos demais postulados da teoria dos conjuntos.
Também Cohen demonstrou a independência de outros postulados significativos da teoria dos conjuntos. Cohen foi agraciado com a medalha “Fields”
(o prêmio de maior prestígio em Matemática) por suas perquirições.
Como a Matemática constitui prolongamento natural da teoria dos
conjuntos, segue-se que há patentemente Matemáticas alternativas em relação à Matemática Clássica. Grosso modo, teorias dos conjuntos em que
valem certos postulados como o Axioma da Escolha, Hipótese do Contínuo,
e outros denominam-se Teoria dos Conjuntos Cantorianas. Teorias em que
não valem essas condições, chamam-se Não-Cantorianas. Logo, podemos
falar em Matemáticas Cantorianas e Não-Cantorianas. As Matemáticas NãoCantorianas ganharam relevo sobretudo com os resultados de Solovay na
década de setenta. Solovay considerou um modelo de teoria dos conjuntos
no qual não vale a forma geral do Axioma da Escolha e, se obtém resultados
que diferem muito da Matemática Cantoriana. Por exemplo, prova-se que na
reta real, todo subconjunto é Lebesgue mensurável (intuitivamente que todo
conjunto de números reais pode ser “medido”), ou, que num espaço de
Hilbert, todo operador é limitado, e por conseguinte, contínuo. Porém, esses
resultados modificam profundamente a maneira de se ver as teorias físicas,
pois, como é sabido, teorias físicas têm, em sua maioria, bases em certas
estruturas conjuntistas. Advém, então, a indagação: qual a teoria dos conjuntos que melhor retrata as teorias físicas? Além disso, qual é o significado
físico quando uma mesma teoria física é considerada em teorias de conjuntos distintas?
Todas essas questões estão sendo pesquisadas intensamente. Tal
situação se mostra absolutamente nova, pois, o investigador que vai aplicar
a Lógica possui em mãos agora Matemáticas alternativas, situação esta muito
distinta de um passado recente. Aliás, a Matemática que era una até então,
cederá fatalmente à diversidade.
1.2 - O que é Lógica ?
O que é Lógica?
Talvez seja esta a primeira curiosidade que advém à mente do leitor.
Preliminarmente, observemos que o público não especialista costuma empregar o termo “lógica” em várias acepções: por exemplo, costumamos ouvir
expressões como “a lógica do amor”, “a lógica do técnico de futebol”, “a
lógica do presidente”, e assim por diante. Convém ressaltarmos que, apesar
do uso do termo “lógica” nesses exemplos não ser destituído totalmente de
12
sentido, tais contextos são inadequados quando tratamos do termo “lógica” que adquire hodiernamente. Uma definição popular de lógica é: Lógica é
o estudo das inferências (raciocínios) válidos. Tal definição não está incorreta, porém, ela não é adequada se observarmos o que a Lógica é
modernamente. Por exemplo, a Teoria dos Modelos, um ramo importante da
Lógica atualmente, dificilmente se enquadraria nessa definição. Outra definição que encontramos em algumas obras de Lógica é a seguinte: Lógica é o
estudo do raciocínio feito pelos matemáticos... Comentamos uma definição
que nos parece mais adequada: Lógica é o que os lógicos cultivam ou o que
está nos tratados de Lógica. Ou seja, para bem compreendermos o que é
lógica, é necessário seu cultivo sistemático. O leitor deve ter percebido que
não existe uma definição satisfatória de Lógica. Tal questão pertence à Filosofia que trata, entre outras coisas, de temas que não possuem resposta
cabal. Esta situação se afigura constrangedora, pois vamos estudar Lógica
sem poder saber exatamente o que ela é ...
1.3 - Ciência e Lógica
Entre as várias indagações que o homem se faz, uma das mais significativas e recorrentes diz respeito ao conhecimento. E é justamente no campo
da ciência que se dá a investigação e a busca desse conhecimento. Seríamos
parciais se disséssemos que isto ocorre apenas no campo científico ou acadêmico. Essa busca, na verdade, acontece na maioria das atividades que
envolvem o ser humano. Existem métodos de apreensão da realidade nos
campos religioso, político, social, entre outros. Mesmo assim, a ciência (e o
método científico) ocupa um papel cada vez mais importante em todos esses
campos. Mas, nos perguntamos, o que é ciência? Ou, em outros termos, com
o que se preocupa o cientista em sua investigação? Por exemplo, um biólogo
está buscando o que?
Uma resposta adequada e definitiva é difícil, mas, em princípio, diríamos que todo cientista está buscando compreender algum fenômeno, entender e explicar uma parte da nossa realidade.
O biólogo que, por exemplo, esteja buscando conhecimento sobre
moscas. Neste caso, a porção da realidade que ele pretende captar, compreender (e depois transmitir a outras pessoas, à comunidade) seria algum aspecto relativo à vida da mosca, ou algo assim. O médico pesquisador, por
exemplo, que busca investigar o mecanismo interno de certas doenças, a
tuberculose, o câncer, etc. Já o psicanalista, que se preocupa em compreender o psiquismo das pessoas. Enfim, cada cientista está, então, tentando
entender e explicar certas porções de nossa realidade.
Passaríamos, então, para um segundo ponto, que seria o caminho
percorrido na busca dessa compreensão da realidade. É sabido que, em
tempos mais remotos, alguns cientistas usaram uma boa dose de misticismo
nas suas ponderações, porém, hoje dificilmente uma tal atitude seria aceita
ou encorajada no campo científico. Diríamos que o cientista utiliza aquele
que é um dos atributos mais importantes do ser humano para empreender
sua investigação, a razão. A ciência só se concretiza em virtude e através da
razão humana, sendo definida, justamente, como uma atividade racional.
Teríamos assim uma primeira relação importante: ciência e razão.
13
Mas afinal, perguntaríamos novamente, o que é razão? Não pretendemos abusar da paciência do leitor, mas responder tal questão não é simples,
sendo porém necessário que consideremos um importante aspecto da questão. A questão fundamental a ser percebida, para a nossa discussão, é que a
razão humana se materializa, se corporifica sempre em algum contexto
lingüístico. Poderíamos praticamente dizer que não há razão sem linguagem,
o que ilustra a importância da Teoria da Linguagem para a ciência. Pois bem,
perguntemos neste ponto, ao biólogo, que linguagem estará ele utilizando
para investigar seu objeto de estudo, as mosquinhas? Talvez ele se surpreenda com a pergunta, mas provavelmente dirá, a língua portuguesa, ou seja,
a linguagem natural que aprendemos desde tenra idade. Talvez muitos dos
cientistas diriam o mesmo: a linguagem natural!
Voltemos aos lógicos e perguntemos a eles: qual é a porção da realidade que o lógico busca compreender? Que linguagem estará ele empregando para isso? Vejamos um objeto lógico que a maioria das pessoas certamente conhece muito bem, os números naturais: 0, 1, 2, 3, ..., n, ... (sim! números
são entidades lógicas). Além dos números, a maioria das pessoas sabe somar e multiplicar números, sabe também, comparar números, e assim por
diante.
Uma peculiaridade interessante numa investigação em Lógica. Um
biólogo que quer estudar as moscas, sabe onde ir buscá-las. Um médico
também sabe em que espaço se encontram as doenças que quer investigar,
em seres vivos. Mas, e quanto ao número 2, onde será que ele se encontra?
Uma questão como essa, que pode parecer irrelevante à primeira vista, tem
desdobramentos interessantes. Indague o leitor a si mesmo se o número 2
existe de fato ou não. Acreditamos que um matemático convencional não
poria dúvidas quanto à existência do número 2, mas certamente teria dificuldades em justificá-la. Para aguçarmos um pouco mais essa questão, o leitor
está certo de que este livro, que está diante dele, existe mesmo? É claro que
sim! diria. Se pedíssemos uma argumentação que justificasse essa certeza,
talvez uma resposta suficiente aos olhos do senso comum seria: Eu estou
vendo, tocando! Ou seja, justificaria a existência do livro pelos sentidos
usuais que os seres humanos são dotados. Infelizmente, não estaríamos
satisfeitos com essa argumentação. O tato pode falhar, a visão nos engana
freqüentemente. Logo, em termos racionais, os sentidos não são capazes de
nos fornecer fundamentos para a certeza absoluta da existência do livro. Se
o leitor aplicasse essa argumentação a ele próprio, as coisas ficariam ainda
piores. O leitor tem certeza absoluta que existe? O que pode parecer estranho, mas inatacável, nessa linha de argumentação, é que não conseguimos
legitimar a existência das coisas somente por argumentos lógicos. Um dos
mais belos desenvolvimentos em cima desse argumento é devido ao matemático e filósofo francês René Descartes, resumido na frase “penso, logo
existo”. Porém, o que podemos concluir daí é que existe pensamento, não o
ser.
Assim, necessitamos de uma postura para vermos as coisas. A maioria absoluta dos lógicos e cientistas em geral adota a postura platônica
(muitas vezes inconscientemente). Grosso modo, Platão acredita na existência de dois mundos:
1) O mundo físico (em que vivemos) e
14
2) O mundo das entidades ideais.
Para nos familiarizarmos com o segundo mundo tomemos o exemplo
clássico da circunferência. Alguém consegue desenhar uma circunferência
perfeita? Acreditamos que o leitor tenha respondido não. Porém, para Platão
a circunferência perfeita existe, porém não no nosso mundo físico e sim no
mundo das entidades ideais. Além disso, Platão diz que as circunferências
do mundo físico são cópias imperfeitas da circunferência perfeita, do mundo
ideal. Todas as entidades lógicas estão no mundo das entidades ideais. Os
objetos são atemporais e não temos o conceito de espaço em tal mundo.
Nesse sentido, podemos dizer que o número 2 sempre existiu e sempre vai
existir independentemente da existência do homem e, além disso, não se
encontra em lugar algum.
Decorre daí, em particular, que a Lógica (ou Matemática) é a mesma
para todos. Platão nos diz também que o único acesso ao mundo das entidades ideais é feita através de nosso intelecto, e segundo ele, esta é a razão
pela qual poucos o conhecem, e que a nossa relação com tais entidades é de
descoberta (e não de criação, por exemplo). Os poucos que não seguem a
postura platônica são vistos como excêntricos, porém existem adeptos de
outras correntes, em número menor.
1.4 - Aspectos da Lógica Atual
As principais áreas de pesquisa em lógica clássica na atualidade podem ser classificadas nas seguintes:
1. Sintaxe lógica: nesta área estudam-se certos constructos lingüísticos
formalizados, as linguagens artificiais. Estas servem para traduzir problemas
lógicos referentes ás linguagens da matemática e das ciências empíricas.
Também pode-se estudar questões ligadas ás linguagens naturais. Por meio
desta ferramenta, pode-se axiomatizar teorias, etc. e, como observamos anteriormente, obteve-se resultados extremamente fecundos como os teoremas
de incompleteza de Gödel.
2. Teoria de modelos: aqui se estudam as inter-relações existentes
entre as linguagens artificiais e certas estruturas conjuntistas às quais elas
se referem. Os contornos atuais deste ramo se devem a A. Tarski e A.
Robinson. Um dos resultados mais importantes da teoria de modelos foi a
matematização do conceito de verdade feita por Tarski, dando-se assim, uma
contribuição de profundo significado filosófico. Um dos resultados surpreendentes que o próprio Tarski observou foi de que a classe das proposições
verdadeiras é mais abrangente que a classe das proposições demonstráveis
em teorias matemáticas fortes e consistentes. A teoria de modelos possui
atualmente as mais variadas aplicações, por exemplo, em ciências empíricas
e na metodologia da ciência.
3. Teoria da recursão: grosso modo, a teoria da recursão trata do que é
exeqüível mecanicamente, computacionalmente, sem recurso á “inteligência”. Foram introduzidas certas máquinas ideais atualmente conhecidas como
máquinas de Turing (outros contemporâneos foram A. Church e E. Post).
15
Todos os grandes computadores da atualidade (inicialmente projetados e
construídos por J. von Neumann por volta de 1950) são realizações físicas da
máquina de Turing. São conhecidos resultados deveras interessantes na
teoria da recursão; atualmente uma das questões mais atraentes é a investigação do que é computável, em particular, o problema conhecido como P =
NP. Não convém falar dele aqui por ser demasiado técnico.
4. Fundamentos da matemática: aqui um dos tópicos de pesquisa é a
obtenção de sistemas lógicos potentes capazes de fundamentar a matemática clássica, investigar alguns de seus axiomas, analisando suas conseqüências tanto matemáticas quanto seu significado do ponto de vista das aplicações. Alguns desses sistemas investigados são a teoria das categorias,
teoria dos topos, teoria dos tipos e outros sistemas. O interessante é que tais
sistemas extremamente fortes servindo de análise a própria matemática, encontraram aplicações em ciência da computação e Inteligência Artificial.
5. Lógica algébrica: a lógica serviu de catalisador deste ramo da matemática pura. Todo sistema lógico é no fundo uma certa estrutura algébrica;
por exemplo, o cálculo proposicional clássico constitui numa álgebra de
Boole, que por sua vez é uma estrutura mais básica: ela constitui num anel de
Boole. Muitos problemas em lógica ou matemática, ou mesmo em ciência da
computação, podem ser melhor tratados como certas estruturas algébricas.
6. Aplicações da lógica em matemática: este tópico estuda-se aplicações de técnicas da lógica para a solução de problemas em matemática. Por
meio deste expediente foram resolvidas algumas questões relevantes em
álgebra e topologia Também não teceremos mais comentários por ser uma
tema demasiado técnico.
Exercício 1. Responda sucintamente.
1.
Dar algumas definições usuais do que é Lógica. A Lógica é
uma Ciência? Discutir de forma breve.
2.
O que é postura platônica ?
3.
Comente o por quê a lógica clássica esteve estagnada por
mais de dois milênios.
4.
Quando pode ser considerado o início da lógica moderna ?
5.
Quem foi o introdutor dos símbolos em lógica ?
6.
O que é teoria dos conjuntos Cantoriana ?
7.
A matemática que você viu até agora é feita em que teoria de
conjuntos ?
8.
Qual é o prêmio de maior prestígio em matemática ?
9.
Por quê não existe prêmio Nobel em Matemática ?
10.
Quais são algumas das principais áreas de pesquisa em Lógica Clássica na atualidade ?
16
2. INTRODUÇÃO AO CÁLCULO
PROPOSICIONAL
2.1 - Introdução
Neste capítulo trataremos alguns conceitos elementares da lógica
proposicional, de uma maneira intuitiva. Isto não nos impede, entretanto, de
sermos rigorosos em nosso tratamento. O cálculo proposicional é o estudo
da linguagem proposicional. Ela estuda basicamente cinco símbolos:
1.
Negação: ¬
2.
Conjunção: ^
3.
Disjunção: ∨
4.
Implicação: →
5.
Bi-implicação: ↔
2.2 Os paradoxos
Os paradoxos ou antinomias foram objeto de estudos e inquietações
por parte de filósofos e lógicos, desde os tempos da Antiga Grécia. Sem
muito rigor, os paradoxos podem ser classificados em paradoxos semânticos
e paradoxos lógicos. Vejamos alguns.
Paradoxos semânticos.
1)Paradoxo do mentiroso.
Dentre os paradoxos desta categoria, destaca-se aquele descoberto
pelo filósofo grego Eubúlides de Mileto (384-322 a.C.) conhecido popularmente como o paradoxo do mentiroso. Eubúlides foi professor de Demóstenes,
contemporâneo e declarado inimigo de Aristóteles.
Teçamos algumas considerações sobre esse assunto.
Inicialmente, trata-se do senso comum que toda sentença declarativa
da língua portuguesa ou é verdadeira ou é falsa, nunca ambas simultaneamente. Suponhamos, por exemplo, que, num quadro negro, se escreva a
seguinte (única) frase :
S1 : ‘A sentença escrita neste quadro contém oito palavras’.
Verifica-se, neste caso, prontamente, que a sentença S1 constitui uma
17
sentença verdadeira, pois S1, contém efetivamente, oito palavras.
Consideremos agora esta outra sentença:
S2 : ‘A sentença escrita neste quadro contém onze palavras’.
Evidentemente trata-se de uma sentença falsa pois S2 contém oito
palavras e não onze.
Passemos a considerar agora esta terceira sentença, de interesse para
nosso argumento:
S3 : ‘A sentença escrita neste quadro é falsa’.
Constitui S3 uma sentença verdadeira ou falsa ?
Analisemo-la: observemos, preliminarmente, que S3 se trata de uma
sentença declarativa, legítima do ponto de vista gramatical e, pelo exposto,
ou S3 é verdadeira,
ou S3 é falsa.
Se S3 for verdadeira, é verdadeira S3 - é verdadeiro que ‘A sentença
escrita neste quadro é falsa’ - e, portanto, concluímos que S3 é falsa.
Analogamente, se S3 é falsa, é falsa S3 - é falso que ‘A sentença
escrita neste quadro é falsa’ - logo, deduzimos que S3 é verdadeira.
Por conseguinte, S3 é verdadeira se e somente se S3 é falsa !
Tal é o paradoxo do mentiroso. Ressaltamos que esta antinomia é de
difícil solução, e constitui, até agora, um genuíno paradoxo.
2) Paradoxo do cartão
Proposto pelo matemático britânico P. Jourdain, em 1913: suponha-se
que numa das faces de um cartão esteja escrita a frase
A sentença escrita no verso
deste cartão é verdadeira.
A sentença escrita no verso
deste cartão é falsa.
Pergunta-se, a sentença escrita em cada um dos lados do cartão é
verdadeira ou falsa ? E a resposta é que cada uma das sentenças é verdadeira
se, e somente se, for falsa.
3) Paradoxo de Grelling
Proposto em 1908 por Leonhard Nelson e Kurt Grelling, da seguinte
maneira: definimos os adjetivos como autológicos, se a propriedade que ele
denota pode ser atribuída a ele mesmo. Assim, os adjetivos “curto” e
“proparoxítona” são autológicos, enquanto os adjetivos que não possuem
tal propriedade de denotarem atributos que não sejam aplicados a si próprios, chamam-se heterológicos. “Longo”, “oxítona” e “verde” são, portanto,
adjetivos heterológicos. Consideremos agora o adjetivo “heterológico”. Se
“heterológico” for heterológico, então ele é autológico. Se “heterológico”
18
não for heterológico, ou seja, autológico, ele é heterológico. Por conseguinte, o adjetivo “heterológico” é, simultaneamente, heterológico e não
heterológico.
4) Paradoxo de Berry
Proposto em 1906. Existe um número finito de símbolos (letras, sinais
de pontuação, etc.) na língua portuguesa. Então, existe um número finito de
expressões em nossa língua que contem menos de 200 símbolos, mesmo
contando as repetições. Há, portanto, um número finito de inteiros positivos
que podem ser denotados por expressões da língua portuguesa que contem
menos de 200 símbolos. Agora consideremos k como sendo “o menor inteiro positivo que não se consegue denotar numa expressão em português
com menos de 200 símbolos”. Ora, a expressão em itálico acima tem menos
de 200 símbolos, e é a própria expressão do inteiro positivo k.
5) Paradoxo do barbeiro.
Numa pequena cidade do interior vive um barbeiro, muito conhecido
dos moradores da cidade, que barbeia todas (e somente aquelas) pessoas
moradoras da cidade que não se barbeiam sozinhas. Ora, o barbeiro é um
morador da cidade. Coloca-se a questão: quem faz a barba do barbeiro ?
É óbvio que:
ou ele se barbeia,
ou ele não se barbeia.
Portanto, como o leitor se apercebe, um tal barbeiro se barbeia se e
somente se ele não se barbeia. Adotando-se a Lógica Clássica, tal barbeiro
não existe.
6) Paradoxo do exame
Numa segunda-feira, certa professora informa seus alunos de que eles
terão um exame nos próximos quatro dias, mas que não deverão saber o dia
exato, a não ser no momento de prestar o exame. Os alunos, então, raciocinaram assim: o exame não pode ocorrer na sexta-feira (o quarto dia), pois, em
caso contrário, eles saberiam de antemão, na quinta-feira, depois das aulas,
que ele seria na sexta-feira, quebrando-se, assim, o acordo de ser surpresa.
De modo análogo, não pode ser na quinta-feira. Nem na quarta-feira, nem na
terça-feira. Logo, não pode haver exame nas condições formuladas pela mestre. Porém, esta, digamos na quarta-feira, pode aplicar o exame, satisfazendo
as condições impostas.
7) Paradoxo dos insociáveis
Os habitantes de uma comunidade formam entre si vários tipos de
associações ou clubes. Um habitante pode pertencer a mais de um clube.
Cada clube tem o nome de um habitante. Não existem dois clubes diferentes
com o nome do mesmo habitante. E toco habitante tem um clube com seu
nome. Não é necessário que uma pessoa seja membro do clube que leva seu
nome. Se a pessoa é membro do clube que leva seu nome, ela é chamada de
uma pessoa sociável. Se a pessoa não é membro do clube que tem seu nome,
ela é então chamada de uma pessoa insociável. É possível formar um clube
contendo todos os insociáveis da comunidade?
19
Paradoxo semiótico.
Seja A o conjunto dos números naturais de 1 a 12, inclusive, A = {1, 2,
..., 11, 12}. Imaginemos um sistema de notação N para eles. Usaremos os
numerais 1, 2, ... , 8 e 9 e sinais 0, 1, 2, ... , 9, 10, 11 e 12, para denotá-los, como
usualmente, e mais o signo j.
O signo j denotará o menor elemento de A que no sistema de notação
N não pode ser denotado por um único símbolo. N aparenta ser, sem sombra
de dúvida, um sistema de notação cordial. Porém, vejamos o que ocorre com
o número 10. Suponhamos que 10 seja denotável por um único símbolo de N;
então esse símbolo obviamente só pode ser j, e 10 não é denotável por um
único símbolo de N, de conformidade com a definição de j. Admitamos,
então, que 10 não seja denotável por um único símbolo de N; daí advém que
10 é o menor número de A que não pode ser denotado por um único símbolo
e que, em conseqüência, deve ser denotado por j. A conclusão é a de que 10
é denotável por um único símbolo de N se, e somente se, não o for. Adotando-se a Lógica Clássica, o sistema notacional N não existe.
Paradoxo da Física Quântica.
O paradoxo a seguir acha-se ligado á dualidade onda-corpúsculo do
elétron. No chamado experimento dos dois orifícios, enviam-se elétrons sobre um anteparo, passando por um obstáculo, onde há dois orifícios convenientemente colocados, e o feixe de elétrons produz no anteparo configurações de interferência, comprovando o caráter ondulatório. Porém, se colocarmos um detetor de partículas logo após qualquer um dos orifícios, tudo
se passa como se o feixe fosse composto de partículas, que atravessam o
obstáculo, normalmente, através dos orifícios. Logo, o elétron é onda e corpúsculo ao mesmo tempo. O físico acata a solução de Copenhague: mantémse que nada se pode conhecer do interfenômeno.
Paradoxos lógicos.
Os paradoxos desta categoria, diferentemente dos semânticos, envolvem certas noções lógicas, principalmente relacionadas coma teoria intuitiva das coleções.
1)Paradoxo de Russell1
Vejamos inicialmente o chamado Paradoxo de Russell. A exposição um
tanto quanto detalhada possui o fito de relembrar alguns conceitos fundamentais da teoria intuitiva de conjuntos.2
Dentro da posição platônica subjacente à teoria dos conjuntos, um
dos princípios básicos que regem essa teoria, de conteúdo bastante evidente, é o seguinte:
Princípio da separação (ou da compreensão): Toda propriedade P
determina um certo conjunto, a saber, o conjunto formado pelos objetos que
possuem a propriedade P e apenas por eles.
Exemplo. Consideremos a propriedade de ser homem. Ela determina o
1 Descoberto independentemente por E. Zermelo.
2 Uma exposição da teoria elementar de conjuntos pode ser vista em [Abe &
Papavero 92] .
20
conjunto
{x | x é um homem} = conjunto dos homens.
Exemplo. Se P ≡ser satélite natural da Terra. Então:
{x | x é um satélite natural da Terra } = {Lua}
Exemplo. Seja P ≡ pessoas que sonham e não-sonham simultaneamente. Então:
{x | x é uma pessoa que sonha e não sonha simultaneamente} = ∅
Como dissemos há pouco, é bastante intuitivo que, dada uma propriedade qualquer, ela determina o conjunto dos elementos que satisfazem a
referida propriedade.
O princípio em questão, porém, na realidade, é incompatível com a
lógica elementar clássica. Isto foi constatado em 1902 pelo renomado lógico
inglês Bertrand Russell, e o paradoxo por ele descoberto leva o nome de
antinomia (ou paradoxo) de Russell. Vamos agora expô-lo:
Inicialmente, observemos que existem conjuntos X tais que X não é
membro de si mesmo, isto é:
X∉X
Exemplo. O conjunto de todos os homens, por não ser um homem,
não é membro de si mesmo.
Exemplo. Dado o conjunto A = {0, 1, 2}, é evidente que A ∉ A.
Observemos, também, que existem ‘conjuntos’ X tais que são membros de si mesmos, isto é, X ∈ X.
Exemplo. O ‘conjunto’ de todos os conjuntos, por ser um conjunto, é
obviamente membro de si mesmo.
Exemplo. Um caso interessante é o seguinte: seja o ‘conjunto’
A = {B | o número de elementos de B é maior ou igual a 3}.
Existem muitos conjuntos com pelo menos 3 elementos:
B1 = {0, 1, 2, 3}
B2 = conjunto das bananas de São Paulo
B3 = {a, b, c, d, e}
B4 = conjunto dos planetas de nosso sistema solar, etc.
Logo, A possui mais do que 3 elementos e, consequentemente, A ∈ A.
Exemplo. Seja a um objeto. Formemos o conjunto dos objetos distintos de a,
{x| x ¹ a}. Obviamente tal conjunto é distinto de a e, por conseguinte,
pertence a ele mesmo.
Consideremos, agora, o seguinte conjunto:
R = {X | X ∉ X}.
21
Por um princípio da Lógica Clássica (Princípio do Terceiro Excluído),
ou R ∈ R ,
ou R ∉ R.
Se R ∈ R, concluímos que R ∉ R.
Se R ∉ R, concluímos que R ∈ R.
Logo, R ∈ R se e somente se R ∉ R.
Tal é a famosa antinomia de Russell.
Historicamente, o desgosto que causou a descoberta da antinomia de
Russell entre os especialistas em Lógica Matemática foi bem expresso por G.
Frege em 1903, num apêndice ao segundo volume de seu Grundgesetze:
“Nada pior praticamente pode acontecer a um autor científico do que
ver uma das fundações de seu edifício ser abalada depois de ter terminado
a obra. Fui colocado nessa posição por uma carta contendo o paradoxo de
Mr. Bertrand Russell exatamente quando a impressão deste segundo volume
estava quase pronta ... Solatium miseris, socios habuisse malorum. Eu também tenho este consolo, se é que é consolo; pois todos aqueles que em suas
demonstrações empregaram extensões de conceitos, classes, conjuntos, inclusive sistemas de Dedekind, estão nesta mesma posição. Não é só uma
questão de meu método particular de colocar as fundações, mas trata-se de
saber se alguma fundamentação lógica para a Matemática é possível ...”
(Frege, 1964).
2) Paradoxo de Cantor
Por exigir um resultado da Teoria dos Conjuntos, que é o Teorema de
Cantor, o paradoxo será apresentado de modo resumido, em suas idéias
principais. Mas, antes disso, cumpre colocar a idéia básica do Teorema de
Cantor, a de que o número de elementos de um conjunto qualquer é sempre
menor que o número de elementos do conjunto formado por todos os seus
subconjuntos. Em linguagem simbólica: #A < #2A. Vamos ao paradoxo, então: seja C o conjunto de todos os conjuntos. Portanto, cada subconjunto
de C é também um membro de C. Assim, o conjunto potência de C é
subconjunto de C. Em linguagem da teoria dos conjuntos, 2C ⊂ C. Mas, 2C
⊂ C implica em #2C ≤ #C, o que é absurdo, de acordo com o Teorema de
Cantor, segundo o qual, #C < #2C .
3) Paradoxo de Burali-Forti
Proposto em 1897, esse paradoxo exige uma familiarização do leitor
com a Teoria dos Números Ordinais. Em linhas gerais, ele é análogo ao
paradoxo de Cantor, visto acima. Não faria sentido apresentá-lo neste texto,
a não ser resumidamente, por tratar de um conteúdo por demais específico
da matemática. Em linhas gerais, o paradoxo seria o seguinte: dado qualquer
número ordinal, existe um outro número ordinal maior que ele. Mas o número
ordinal determinado pelo conjunto de todos os números ordinais é o maior
número ordinal existente.
2.3 Linguagens artificiais
Os poucos exemplos de paradoxos semânticos colocam em relevo o
22
fato de qualquer linguagem natural, como por exemplo, a língua portuguesa,
não pode ser adequada ao tratamento rigoroso da lógica. Mais ainda, admitindo-se certas leis básicas da lógica clássica, toda linguagem universal,
como tem a capacidade de referir-se a si própria, sem quaisquer restrições,
leva inevitavelmente a contradições. Isto foi observado no início deste século pelo renomado lógico polonês Alfred Tarski. Necessitamos, então, construir uma linguagem que possibilite o tratamento da lógica. Uma tal linguagem será usualmente chamada de linguagem artificial (de artefato) ou linguagem formal (de forma).
A consideração de linguagens artificiais nos obriga a pensar certas
questões. Ao termos uma linguagem artificial em tela, automaticamente, temos uma linguagem que diz respeito a ela. A essa linguagem damos a denominação de meta-linguagem. Observamos, então, que para construirmos a
linguagem artificial em questão (que denominaremos de linguagem objeto),
obviamente serão empregados os recursos oferecidos pela meta-linguagem.
Esta observação é fundamental, porquanto veremos posteriormente que, no
caso da consideração da linguagem proposicional, por exemplo, faremos
uso, além da linguagem portuguesa, de porções da própria Matemática e de
noções ditadas pelo “senso comum”. À primeira vista, parece que nos enredamos num círculo vicioso, porém, à medida em que o leitor se familiarize
com os conceitos desenvolvidos notará que não há tal inconveniente.
L
Linguagem Objeto
L in
Linguagem Proposicional
Meta-linguagem
(Teoria dos conjuntos
Cantoniana)
Figura 1
Logo, ao considerarmos uma linguagem-objeto, necessitamos de uma
espécie de pano de fundo. Mais pormenorizadamente, tal pano de fundo é
qualquer modelo (ou, o que dá no mesmo, a própria teoria) de teoria dos
conjuntos (Cantoriana). Mais ainda, freqüentemente utilizamos uma aritmética usual e, portanto, uma meta-matemática na meta-linguagem. O leitor
zeloso, notará então que o estudo feito em tais linguagens artificiais será
feito olhando-se de “fora”, ou seja, todos os resultados que puderem ser
observados, serão observados de um lugar que não é o mesmo onde eles
efetivamente ocorrem. Por conseguinte, tratar-se-ão de meta-teoremas. Uma
importante observação, feita a partir disso, é a de que quase sempre estamos
trabalhando e realizando meta-matemática. Daí, o que chamaríamos, licenciosamente, de uma equação fundamental:
Matemática = Meta-Matemática !!
Esta situação é ilustrada magnificamente por Nietzsche: “ ... a frontei-
23
ra da Ciência possui uma infinidade de pontos. Todo homem nobre e
talentoso, antes de atingir a metade de sua carreira, defronta-se com algum ponto da fronteira que desafia sua compreensão, independentemente
de saber como a região pode ser inteiramente mapeada. Quando o pesquisador, levado à periferia, compreende como a Lógica, neste lugar, curva-se
sobre si mesma e morde a própria cauda, fica perplexo com uma nova
espécie de percepção: uma percepção trágica que requer, para se tornar
tolerável, o remédio da arte.”
Por exemplo, havia você percebido que os Teoremas que aprendeu
sobre Geometria ou Cálculo Diferencial e Integral são, na realidade, metateoremas?
Exercício 1. Discutir pelo menos dois paradoxos semânticos da linguagem natural, não vistos no texto, mostrando, então, a inadequação do
uso das linguagens naturais para o desenvolvimento de teorias lógicas.
Exercício 2. Pesquise sobre “teoremas” da Geometria Euclidiana e
determine se estes são realmente teoremas ou meta-teoremas da Geometria
Euclidiana.
2.4 – A linguagem universal da lógica
A linguagem da teoria dos conjuntos constitui na linguagem universal da lógica.
Exercício 1. Dê exemplos de linguagens artificiais. Qual é a linguagem
universal da Lógica?
2.5 - Conectivos lógicos e tabelas-verdade
No estudo da linguagem proposicional, apesar de ser formal, invocaremos muitas vezes proposições da língua portuguesa, com o fito de amenizar a exposição. Esperamos que o leitor se aperceba de um rigor saudável
que estará subjacente às discussões que se seguem, apesar de conscientemente cometer tal heresia.
As sentenças que estão em tela são as ditas sentenças declarativas.
Tais sentenças são sentenças, como o próprio nome diz, que declaram (afirmam) algo. Portanto, o que afirmam é passível de ser considerada ou como
verdadeira, ou como falsa. Vejamos alguns exemplos.
Exemplo 1. Exemplos de sentenças declarativas.
1.
A neve é branca. (verdadeira)
2.
2 + 2 = 5 (falsa)
3.
Há cinco milhões de grãos de areia na lua. (ninguém contou os
grãos; mas sabemos ou que é verdade, ou que é falsa (provavelmente falsa)).
Daqui em diante, toda sentença (declarativa) que trabalharmos é ou
verdadeira ou falsa, mas nunca ambas simultaneamente. Daí a lógica clássica
ser chamada de lógica bivalente. Existem várias notações para designarmos
os valores-verdade ou valores-lógicos das sentenças.
24
Adotaremos neste texto a notação booleana:
“1” designa o valor-verdade “verdadeiro”
“0” designa o valor-verdade “falso”
1) Negação
Dada a proposição A podemos considerar a proposição ( A) denominada a negação de A. Como a proposição A ou é verdadeira ou falsa, a
tabela-verdade da negação toma então a seguinte forma:
Tabela-verdade da negação.
A
1
0
( ¬A)
0
1
A proposição A é verdadeira se e somente se sua negação (¬A) é falsa.
Exemplo 2.
1. Seja A ≡ (2 + 2 = 4) (no caso, verdadeira). Então ( ¬A) ≡ ( ¬(2 + 2 = 4))
constitui uma sentença falsa. Na aritmética comum, costuma-se escrever a
última expressão como 2 + 2 ≠ 4.
2.Seja B ≡ (2 ∈ {1, 3, 5}) (no caso, falsa). Logo, (¬B) ≡ ( ¬(2 ∈ {1, 3, 5})
constitui uma sentença verdadeira. Na linguagem da Teoria dos Conjuntos
(ver [Abe & Papavero, 92]), a última expressão é usualmente escrita como 2
∉ {1, 3, 5}.
Mesmo na linguagem comum, a tabela-verdade se aplica:
Exemplo 3. Seja A ≡ “A neve é branca” (verdadeira). Sua negação é
(¬A) ≡ “A neve não é branca” (falsa).
Também, A ≡ “A cidade de São Paulo é pequena” (falsa). Sua negação
é (¬A) ≡ “A cidade de São Paulo não é pequena” (verdadeira).
Algumas negações delicadas.
Exemplo 4. Vejamos algumas negações de sentenças:
1. A ≡ “Todo homem é mortal”
Qual é a negação de A ? O mais simples é escrever
(¬A) ≡ “Nem todo homem é mortal” ou “ Não é que todo homem é
mortal”. Porém, há outras sentenças equivalentes que queremos chamar a
atenção: dizer “Nem todo homem é mortal” é o mesmo que dizer “Existem
homens que não são mortais” ou “Há homens imortais”.
2. A ≡ “Existem pessoas inseguras”
Qual é a negação de A ? O mais simples é escrever
(¬A) ≡ “Não existem pessoas inseguras”. Porém, esta é equivalente a
escrever “Todas as pessoas não são inseguras” (pense bem !) ou “Todas as
pessoas são seguras”.
3. A ≡ “Todos os animais mamíferos são animais vertebrados”.
(¬A) ≡ “Nem todos os animais mamíferos são animais vertebrados” ou
25
“Não é que todos os animais mamíferos são animais vertebrados”. Ou ainda,
“Existem animais mamíferos que não são animais vertebrados” ou “Há animais mamíferos que são animais invertebrados”.
4. A ≡ “Existem pessoas que se preocupam em ética”.
(¬A) ≡ “Não existem pessoas que se preocupam em ética” ou “Não
existem pessoas que se preocupam em ética”. Ou ainda, “Todas as pessoas
não se preocupam com a ética”
5. A ≡ “Todo número par é divisível por dois”
(¬A) ≡ “Nem todo número par é divisível por dois” ou “Não é que todo
número par é divisível por dois”. Ou ainda, “Existem números pares que não
são divisíveis por dois” ou “Há números pares que indivisíveis por dois”.
Exercício 1. Faça o que se pede.
1. Em cada item são dadas duas sentenças. Responda se a segunda
frase é ou não é a negação da primeira. Caso não seja, determine essa negação.
a) Estou feliz.
b) Todos os elefantes são cor-de-rosa.
c) Alguns cavalos são brancos.
d) Todos os cavalos são pretos.
e) O sol está brilhando.
f) Estou certo.
g) Nenhum homem é um elefante.
h) Todos os tomates são vermelhos.
i) Algumas vezes estou certo.
j) Há sempre alguém na portaria.
Não estou feliz.
Um elefante não é cor-de-rosa.
Alguns cavalos são pretos.
Alguns cavalos são brancos.
O sol não está brilhando.
Estou errado.
Algum homem é um elefante.
Todos os tomates são amarelos.
Todas as vezes estou certo.
Nem sempre há alguém na portaria.
2. Em cada sentença abaixo, determine a respectiva negação.
a) Hoje é sábado.
c) Esta sala está muito fria.
e) Não é verdade que não se sabe que fez isso.
g) Todas as ruas da cidade estão esburacadas.
i) Não vou viajar.
b) Lógica é fácil.
d) É falso que a vida é bela.
f) Existem políticos trabalhadores.
h) Toda ação provoca uma reação.
j) Irei a outro lugar.
3. Em cada item são dadas duas sentenças. Responda se a segunda
frase é ou não é a negação da primeira. Caso não seja, determine a respectiva
negação.
a) Todos os estudantes são responsáveis.
Alguns estudantes são irresponsáveis.
b) A neve é branca.
A neve não é branca.
c) Ele é rico.
Ele é pobre.
d) Eu creio na honestidade.
Ninguém é honesto.
e) Nenhum homem é uma ilha.
Algum homem é uma ilha.
f) Todos os livros são interessantes
Um livro não é interessante.
g) Há sempre alguém feliz.
Nem sempre há alguém feliz.
h) Alguns estudantes são responsáveis.
Alguns est. são irresponsáveis.
i) Todos os exercícios são instrutivos.
Todos os exercícios são fáceis.
26
j) Algumas vezes me engano.
Todas as vezes me engano.
4. Em cada sentença abaixo, determine a respectiva negação.
a) Há alunos na sala.
c) Algumas pessoas gostam de chocolate.
e) Ninguém foi ao aniversário.
g) É falso que esta moeda é verdadeira.
i) Há uma pedra no meio do caminho.
k) Há sempre alguém no saguão.
m) Não é o caso de não ser reprovado.
b) Esta aula é muito importante.
d) Todos votaram nele.
f) Existem pessoas estudiosas.
h) Todas as pessoas são felizes.
j) Se fosse fácil, já estaria feito.
l) Sempre há alguém no saguão.
n) É o caso de ser aprovado.
5. Em cada item são dadas duas sentenças. Responda se a segunda
frase é ou não é a negação da primeira. Caso não seja, determine essa negação.
a) Estudo e trabalho.
b) O sol brilha e o ar está quente.
c) Estou certo e você está errado.
Não estudo nem trabalho.
O sol não brilha ou o ar não está quente.
Estou errado ou você está certo.
6. Em cada sentença abaixo, determine a respectiva negação.
a) Hoje é feriado ou domingo.
b) A sala e o quarto estão escuros.
c) A rua está esburacada e mal iluminada. d) Se for feriado ou domingo, vou viajar.
e) Se for feriado e o tempo estiver ensolarado, vou viajar.
2) Conjunção
Dadas as proposições A e B podemos considerar a nova proposição
(A ∧ B), a conjunção de A e B.
A veracidade ou falsidade da proposição (A ∧ B) depende da veracidade ou falsidade da proposição A e da proposição B. Logo, a tabela-verdade de (A ∧ B) possui quatro possibilidades de valores-verdade para A e B.
1. A é verdadeira e B também é verdadeira.
2. A é verdadeira e B é falsa.
3. A é falsa e B é verdadeira.
4. A é falsa e B também é falsa.
Postulamos que a proposição (A ∧ B) é verdadeira se e somente se
ambas as proposições A e B são verdadeiras. A proposição (A ∧ B) é falsa se
e somente se uma das proposições A ou B for falsa.
As considerações acima podem ser esquematizadas como se segue:
Tabela-verdade da conjunção:
27
A
1
1
0
0
B
1
0
1
0
(A ∧ B)
1
0
0
0
Exemplo 5. Consideremos as seguintes proposições:
1) [(2 + 4 = 4) ∧ (1 ≤ 2)]
Esta proposição é verdadeira
verdadeira
verdadeira
2) [(2 + 4 = 4) ∧ (1 ≥ 2)]
verdadeira
falsa
falsa
verdadeira
3) [(2 + 4 ≠ 4) ∧ (1 ≤ 2)]
4) [(2 + 4 ≠ 4) ∧ (1 ≥ 2)]
falsa
Esta proposição é falsa
Esta proposição é falsa
Esta proposição é falsa
falsa
Observação. Convém frisar algumas diferenças entre os conectivos
∧ (lógico) e “e” (da língua portuguesa). Na linguagem proposicional, se A e
B são fórmulas, então (A ∧ B) e (B ∧ A) são logicamente equivalentes. Com
efeito, vejamos os exemplos seguintes:
a) (2 + 2 = 4 ∧ 1 ≤ 2) e
b) (1 ≤ 2 ∧ 2 + 2 = 4)
possuem o mesmo significado.
Na linguagem natural, porém, nem sempre isto ocorre. Vejamos os
seguintes exemplos:
a) Sejam A ≡ ‘João é inteligente’ e B ≡ ‘João lê as obras de Platão’. (A ∧ B)
representa a sentença ‘João é inteligente e João lê as obras de Platão’. (B ∧
A) a sentença ‘João lê as obras de Platão e João é inteligente’. O senso
comum nos indica que (A ∧ B) e (B ∧ A) se eqüivalem.
b) Sejam agora A ≡ ‘Maria casou’ e B ≡ ‘Maria teve um filho’. (A ∧ B)
representaria a sentença ‘Maria casou e Maria teve um filho’. (B ∧ A) a
sentença ‘Maria teve um filho e Maria casou’. Neste caso, note-se, não há
uma equivalência entre as sentenças (A ∧ B) e (B ∧ A). Na linguagem natural
insinua-se quase sempre uma certa seqüência temporal (e às vezes uma
implicação de causalidade).
A observação se aplica também aos demais conectivos.
Exercício 2. Faça o que se pede.
1. Em cada item são dadas duas sentenças. Escreva a conjunção delas.
a) A ≡ João estuda.
B ≡ Não estudo.
b) A ≡ O sol brilha.
B ≡ O ar não está quente.
c) A ≡ Estou certo.
B ≡ Estou errado.
2. Em cada sentença abaixo, determine a respectiva negação.
a) Hoje é feriado e domingo.
b) A sala e o quarto estão escuros.
c) A rua está esburacada e mal iluminada. d) Clarissa vai á praia e tomar sol.
e) Ela é bonita e inteligente.
28
3. Admitindo-se o senso comum, diga se são verdadeiras ou falsas.
a) O sol brilha e a nuvem é verde.
b) 2 + 2 = 4 e ¬ = {¬}
c) Curitiba é a capital do Paraná e Paris é a capital da França.
4. Obtenha a negação das seguintes proposições:
a) Bianca não estuda e é mal educada.
b) Está chovendo e fazendo frio.
c) Chiquinho é esperto e atento.
3) Disjunção
Dadas as proposições A e B podemos considerar a nova proposição
(A ∧ B), a conjunção de A e B.
Postulamos que a proposição (A ∨ B) é verdadeira se e somente se
uma das proposições (ou ambas) A ou B são verdadeiras. A proposição (A ∨
B) é falsa se e somente se quando ambas proposições A e B for falsa.
As considerações acima podem ser esquematizadas como se segue:
Tabela-verdade da disjunção:
A
1
1
0
0
B
1
0
1
0
(A ∨ B)
1
1
1
0
Exemplo 6. Consideremos as seguintes proposições:
1) [(2 + 4 = 4) ∧ (1 ≤ 2)]
verdadeira
2) [(2 + 4 = 4) ∧ (1 ≥ 2)]
verdadeira
Esta proposição é vardadeira
verdadeira
4) [(2 + 4 ≠ 4) ∧ (1 ≥ 2)]
falsa
Esta proposição é verdadeira
falsa
3) [(2 + 4 ≠ 4) ∧ (1 ≤ 2)]
falsa
Esta proposição é verdadeira
verdadeira
Esta proposição é falsa
falsa
Na linguagem natural, muitas vezes o conectivo “ou” possui idéia de exclusão:
“Bianca vai ao supermercado ou vai á escola”. Neste caso, é claro que Bianca
vai fazer uma coisa ou outra, mas não ambas simultaneamente.
O conectivo que leva em conta a observação anterior chama-se
disjunção exclusiva.
29
Exercício 3. Faça a tabela-verdade da disjunção exclusiva.
Em Lógica, como se observou, uma disjunção é verdadeira quando
uma das proposições constituintes é verdadeira ou, também, quando ambas
são verdadeiras simultaneamente.
Exercício 4. Faça o que se pede.
1. Sejam as proposições A ≡ “O livro é interessante” e B ≡ “O livro é caro”.
Fornecer uma sentença na linguagem natural que descreva cada uma das
simbolizações abaixo:
a) (¬A)
b) (A ∧ B)
c) (A ∨ B)
d) (B ∨ (¬A))
e) ((¬A) ∧ (¬B))
2. Sejam as sentenças: A ≡ “A neve é branca” e B ≡ “O sol é um astro”.
Determinar o valor-verdade das sentenças abaixo:
a) [A ∧ (¬B)] b) [¬(A ∨ B)]
c) [(¬A) ∨ B] d) [(¬A) ∧ (¬B)]
e) [A ↔ (¬B)]
3. Em que casos as sentenças abaixo são falsas? (Em cada item estude todas
as possibilidades)
a) Ela é mineira e ele é paraense.
b) Ela é mineira ou ele é paraense.
c) É falso que ela é mineira e ele é paraense.
d) É falso que ela é mineira e é falso que ele é paraense.
4. Sejam as expressões A ≡ “O céu é azul”, B ≡ “Deus existe” e C ≡ “O Sol
gira em torno da Terra”. Fornecer uma sentença na linguagem natural que
descreva cada uma das afirmações abaixo:
a) (¬A)
b) (A ∧ B)
c) ((A ∨ B) ∧ C)
d) (B ∨ (¬C))
e) [(¬A) ∧ (¬B)]
f) [¬((¬A) ∨ C)]
g) [¬(A ∨ (¬¬B))]
h) (C ∧ (¬B))
5. Escreva as sentenças em linguagem simbólica abaixo utilizando os
conectivos ¬, ∧ e ∨.
a) Não é verdade que Galileu esteja certo.
b) A água não pode ser simultaneamente líquida e sólida.
c) O seguro da casa inclui incêndio ou roubo.
d) Compro ou não compro.
e) Não estudarei hoje, mas estudarei amanhã e quarta-feira.
6. Determinar a tabela verdade das sentenças abaixo, sendo
A ≡ ∅ = {∅}, B ≡ ∅ = ∅, C ≡ {∅} = {{∅}}:
a) [A ∧ (¬C)]
b) [¬(B ∨ C)]
c) [(¬B) ∧ (¬C)]
d) [¬(A ∧ (¬B))]
f) [¬[(¬A) ∧ (¬B)]]
g) [A ∨ (¬(A ∧ C))]
30
7. Em que casos as sentenças abaixo não são falsas? (Estude todas as
possibilidades)
a) A Terra gira e Maria gosta de José.
b) Passarei em lógica ou 2 + 2 = 4.
c) É falso que ela gosta dele e é falso que ele gosta dela.
d) É falso que ela gosta dele e ele gosta dela.
8. Entendemos por disjunção exclusiva ao tipo de disjunção em que as
sentenças não podem ocorrer simultaneamente, como no exemplo “Ela está
alegre ou não está alegre”. Definir, nos casos abaixo se o ou corresponde à
disjunção inclusiva ou exclusiva.
a) Eu menti ontem ou mentirei amanhã.
b) Meu time é o campeão deste ano ou não é o campeão deste ano.
c) Ela se formou em 1993 ou em 1998.
d) Com sol ou com chuva, você trabalhava.
e) O terno é de Bentinho ou de Escobar.
4) Implicação
Dadas as proposições A e B podemos considerar a nova proposição (A → B), a implicação de B por A.
A proposição A chama-se antecedente da implicação (A → B) e B
chama-se o conseqüente da implicação (A → B).
Postulamos que a proposição (A → B) é falsa se e somente se o
antecedente A é verdadeiro e o conseqüente B é falso. Nos demais casos, a
proposição (A → B) é verdadeira.
As considerações acima podem ser esquematizadas como se segue:
Tabela-verdade da implicação:
A
1
1
0
0
B (A → B)
1
1
0
0
1
1
0
1
Exemplo 7. Consideremos as seguintes proposições:
1) [(2 + 4 = 4) ∧ (1 ≤ 2)]
verdadeira
2) [(2 + 4 = 4) ∧ (1 ≥ 2)]
verdadeira
Esta proposição é verdadeira
verdadeira
Esta proposição é falsa
falsa
3) [(2 + 4 ≠ 4) ∧ (1 ≤ 2)]
falsa
verdadeira
falsa
falsa
4) [(2 + 4 ≠ 4) ∧ (1 ≥ 2)]
Esta proposição é verdadeira
Esta proposição é verdadeira
31
Observação. Teçamos algumas considerações sobre a tabela-verdade referente à implicação.
1) A tabela é positivamente obscura no uso ordinário. Vejamos alguns exemplos.
Leis causais. Quando a implicação lógica é interpretada como causar na
linguagem natural.
1. Sejam as sentenças
A ≡ “Este pote d’água for colocado no fogo no instante t0” e
B ≡ “A água congelará”.
A sentença A só é falsa no caso de o pote não ser colocado no fogo
no instante indicado. Coloquemos o pote no fogo num instante t distinto de
t0. Logo, A é falsa.
Consideremos a sentença
(A → B) ≡ “Se este pote d’água for colocado no fogo no instante t0 então a
água congelará”.
De acordo com a tabela-verdade da implicação, (A → B) é verdadeira, independentemente do valor-verdade de B, o que configura uma situação absurda !
2. Sejam as sentenças
A ≡ “Se sua sogra chegar em sua casa exatamente no instante t0” e
B ≡ “Você ficará mais inteligente”.
A sentença A só é falsa no caso de sua sogra não chegar em sua
casa exatamente no instante indicado (o que é muito provável). Suponhamos que ela venha antes do instante t0. Logo, A é falsa.
Consideremos a sentença
(A → B) ≡ “Se sua sogra chegar em sua casa exatamente no instante t0 então
você ficará mais inteligente”.
De acordo com a tabela-verdade da implicação, (A → B) é verdadeira, independentemente do valor-verdade de B, o que configura uma situação
absurda (convenhamos) !
Situações em que o antecedente não é um fato.
Consideremos a sentença:
Exemplo 8. A sentença ‘Se João Guimarães Rosa não tivesse escrito nenhuma obra literária, então não teria havido inflação em nenhuma época
em nosso país’ é admitidamente falsa, mesmo que o antecedente seja falso.
O mesmo se sucede com a sentença ‘Se Cabral não tivesse descoberto o Brasil, então homem não teria chegado á lua’.
2) Uma justificativa favorável que podemos oferecer para a tabela-verdade
da implicação é a seguinte: admitamos ser razoável a tabela-verdade da conjunção. Para quaisquer sentenças A e B, é, então, razoável considerar a
32
sentença ((A ∧ B) → B) como verdadeira, quaisquer que sejam os valoresverdade de A e B.
Assim, se A e B são ambas verdadeiras, (A ∧ B) é verdadeira, e, por
conseguinte, isto justifica a 1 a linha da tabela.
Se A é falsa e B verdadeira, então (A ∧ B) é falsa. Este caso
corresponde à 3a linha da tabela.
Se A e B são ambas falsas, então (A ∧ B) é falsa, o que correspondente à última linha da tabela.
3) Esta observação é citada em [Iséki & Abe 01]: “Temos certeza que o leitor
está perplexo que o valor-verdade de 0 → 0 e 0 → 1 é 1. Uma explicação
adequada é dada no exemplo a seguir. Estamos acostumados a dizer a seguinte
sentença: “se x é divisível por 10, então x é divisível por 2”. Se escrevermos
em símbolos obtemos
x(x/10 → x/2).
(Aqui, a expressão x/a significa que x é divisível por a.) A expressão anterior
é amplamente aceita como verdadeira.. Como x é arbitrário, se fizermos x = 20,
temos 20/10 = 2 e 20/2 = 10 e, por conseguinte, como o antecedente e o
conseqüente são ambos verdadeiros, a expressão como um todo é verdadeira (isto é, o valor verdade de 1 → 1 é associado 1). Se fizermos x = 8, o
antecedente é falso enquanto que o conseqüente é verdadeiro, ou seja temos
o caso 0 → 1; no entanto a expressão como um todo é verdadeira. Finalmente, se fizermos x = 5, tanto o antecedente quanto o conseqüente são falsos,
porém a expressão como um todo é verdadeira.
Esta explicação é conhecida como interpretação do famoso lógico
polonês S. Lesniewski.
Convém ressaltar que nas considerações acima há uma questão
muito importante subjacente, ou seja, contém um problema de metodologia
matemática.
Questões da lógica proposicional levamos para uma estrutura generalizada denominada lógica de predicados, e ali podemos eleger respostas
adequadas.
Por exemplo, ainda sobre esse procedimento, sabemos que não
podemos efetuar subtrações quaisquer de números naturais. Porém, se estendermos para os números inteiros , obtemos uma boa interpretação para a
subtração. Outro exemplo, o mesmo se dá quando uma equação quadrática
não é solúvel no conjunto dos reais, apelamos para o mundo dos números
complexos onde obtemos uma solução.
De modo geral, a observação importante é que ao considerarmos
uma estrutura básica, vários problemas têm uma resposta adequada em estruturas mais gerais.”
Exercício 5. Nas seguintes sentenças dizer qual é o antecedente e
qual é o conseqüente:
1. (2 + 2 = 7 → 2 + 1 = 0)
2. Det(M) = 0 implica que M não é invertível.
3. Se f : ℜ → ℜ é uma função derivável, então f : ℜ → ℜ é uma função
contínua.
33
1.
2.
3.
4.
Exercício 6. Dizer se são verdadeiras ou falsas (adote o “bom senso” nos juízos):
Se a neve é branca, então Paris é a capital da França.
Se Penha é um bairro de São Paulo, então o céu não contém estrelas.
Se os planetas giram em torno da terra, então inexistem extra-terráqueos.
Se o sol é um planeta inerte, então a terra é uma estrela.
5) Bi-implicação
Dadas as proposições A e B podemos considerar a nova proposição (A ↔ B), a bi-implicação de A e B.
Postulamos que a proposição (A ↔ B) é verdadeira se e somente se
as proposições A e B possuem o mesmo valor-verdade. A proposição (A ↔
B) é falsa se e somente se as proposições A e B tiverem valores-verdade
trocados.
As considerações acima podem ser esquematizadas como se segue:
Tabela-verdade da bi-implicação:
A
1
1
0
0
B
1
0
1
0
(A ↔ B)
1
0
0
1
Exemplo 9. Consideremos as seguintes proposições:
1) [(2 + 4 = 4) ∧ (1 ≤ 2)]
verdadeira
verdadeira
verdadeira
falsa
2) [(2 + 4 = 4) ∧ (1 ≥ 2)]
3) [(2 + 4 ≠ 4) ∧ (1 ≤ 2)]
falsa
verdadeira
falsa
falsa
4) [(2 + 4 ≠ 4) ∧ (1 ≥ 2)]
Esta proposição é verdadeira
Esta proposição é falsa
Esta proposição é falsa
Esta proposição é verdadeira
Exercício 7. Faça o que se pede.
1. Indiquemos por A ≡ “Está calor” e por B ≡ “É verão”. Escrever em forma
simbólica as seguintes afirmações:
a) É verão somente se está calor.
b) Uma condição necessária para estar calor é que seja verão.
c) Uma condição suficiente para estar calor é que seja verão.
d) Sempre que é verão, faz calor.
e) Nunca é verão, quando está calor.
34
2. Dentro do contexto da lógica proposicional, identifique as sentenças abaixo quanto a sua veracidade ou falsidade justificando devidamente cada resposta dada.
a) (5 + 4 = 9 ∧ 2 ≤ 4),
b) (3 + 2 = 6 ∧ 2 + 2 = 4),
c) (5 + 3 = 7 ∨ 4 + 4 = 7),
d) (4 + 3 = 7 ∨ 2 + 3 = 4),
e) (2 + 3 = 5 → 2 + 2 = 4),
f) (3 + 3 = 5 → 32 ≤ 33),
g) (2 + 4 = 7 → 2 + 2 = 5),
h) (3 + 2 = 5 → 2 + 2 = 5),
i) (6 + 2 = 8 ↔ 6 ≤ 8),
j) (3 + 3 = 5 ↔ 2 + 2 = 3),
k) (2 + 2 = 3 ↔ 2 + 2 = 4),
l) (3 + 4 = 6 ↔3 + 3 = 7),
m) (3 ≤ 2 → 4 ≤ 3),
n) (32 ≤ 33 → 4 + 5 = 8),
o) (2 ≤ 3 → (2 + 2 = 4 ∧ 7 + 2 = 9)), l) ((3 ≤ 4 ∧ 4 ≤ 3) →3 + 3 = 7).
A seguir apresentamos algumas leituras que a negação, conjunção,
disjunção, implicação e bi-implicação podem ter na linguagem natural.
(¬A)
(A ∧ B)
(A ∨ B)
(A → B)
Não A;
Não se dá que A;
Não é fato que A;
Não é verdade que A;
Não é que A;
Não se tem A.
A e B;
A, mas B;
A, embora B;
A, assim como B;
A e, além disso, B;
Tanto A como B;
A e também B;
Não só A, mas também B;
A, apesar de B.
A ou B ou ambos.
se A, então B;
se A, isto significa que B;
tendo-se A, então B;
quando A, então B;
sempre que A, B;
B, sempre que se tenha A;
B, contanto que A;
A é condição suficiente para B;
B é condição necessária para A;
Uma condição suficiente para B é A;
Uma condição necessária para A é B;
B, se A;
35
B, quando A;
B, no caso de A;
A, só se B;
A, somente quando B;
A, só no caso de B;
A implica B,
A acarreta B,
B é implicada por A.
(A ↔ B)
A se e só se B;
A se e somente se B;
A quando e somente quando B;
A eqüivale a B;
Uma condição necessária e suficiente
para A é B;
A é condição necessária e suficiente
para B
3. Escreva as sentenças a seguir em linguagem simbólica, usando sentenças
básicas (ou atômicas), isto é, as sentenças que não podem ser construídas a
partir de outras sentenças.
a) Se Antônio está feliz, a esposa do Antônio não está feliz, e se o Antônio
não está feliz, a esposa do Antônio não está feliz.
b) Ou Antônio virá à festa e Pedro não, ou Antônio não virá à festa e Pedro
se divertirá.
c) Uma condição necessária e suficiente para o rei ser feliz é ele ter vinho,
mulheres e música.
d) Teresa vai ao cinema só se o filme for uma comédia.
4. Traduza as sentenças abaixo, dado o seguinte esquema:
A ≡ Clarissa sorri
B ≡ Clarissa desperta
C ≡ Clarissa vai á praia
D ≡ Clarissa fica indecisa
E ≡ Clarissa sente o sol
a) (B → A)
b) (A → C)
c) ((D ∨ C) → (A ↔ (B ∧ (¬E))))
5. Simbolize as sentenças abaixo, dado o seguinte esquema:
A ≡ o estudante comete erros,
B ≡ há motivação para o estudo,
C ≡ o estudante aprende a matéria.
a) Se o estudante não comete erros, então ele aprende a matéria.
b) Se não há motivação para o estudo, então o estudante não aprende a
matéria.
c) Se há motivação para o estudo, o estudante não comete erros.
d) O estudante aprende a matéria se, e somente se, há motivação para o
estudo.
36
6. Simbolize as sentenças abaixo:
a) Ou Capitu é ou não é a criação mais notável de Machado de Assis.
b) Não é verdade que Machado de Assis escreveu ou não escreveu
poesias.
c) Se é fácil ler o que José da Silva escreveu, não é fácil ler o que escreveu
Guimarães Rosa.
7. Escreva as sentenças a seguir em linguagem simbólica, usando formas
simples, isto é, as sentenças que não podem ser construídas a partir de
outras sentenças.
a) Uma condição suficiente para x ser ímpar é x ser primo
b) Uma condição necessária para uma seqüência s convergir é que s seja
limitada.
c) O suborno será pago se, e somente se, a mercadoria for entregue.
d) Judite vencerá o torneio de xadrez, a menos que Tânia vença hoje.
e) Se x é positivo, então x2 é positivo.
8. Traduza as sentenças abaixo, dado o seguinte esquema:
A ≡ ganho um livro
B ≡ ganho uma revista
C ≡ posso ler
D ≡ estou motivado
E ≡ sou aprovado no exame.
a) (C → (A ∨ B))
b) (D → (¬C))
c) (D → ((¬C) ∧ (A ∨ B)))
d) ((¬D) → (E → (A ∨ B)))
e) ((¬D) → (C → (A ∨ B))
f) (((¬C) ∧ A) → (E → (¬D)))
9. Traduza as sentenças abaixo, dado o seguinte esquema:
A ≡ há nuvens,
B ≡ choverá,
C ≡ ventará.
D ≡ fará bom tempo amanhã.
a) (A → B)
b) (A → (¬D))
c) ((¬D) ∧ (B ∧ C))
d) ((¬A) → D)
e) (A ∧ (B ∨ C))
f) ((A ∧ B) ∨ C)
g) (A → (B ∨ C))
h) ((A → B)∨ C)
i) ((A ↔ B) ∧ ((¬C) ∧ D))
j) (A ↔((B ∧ C) ∨ D))
10. Simbolize as sentenças abaixo, dado o seguinte esquema:
A ≡ o estudante comete erros;
37
B ≡ há motivação para o estudo,
C ≡o estudante aprende a matéria.
a) Se não há motivação para o estudo, então o estudante comete erros ou
não aprende a matéria.
b) Se o estudante comete erros, então, se não há motivação para o estudo,
o estudante não aprende a matéria.
c) O estudante comete erros; além disso, há motivação para o estudo e o
estudante aprende a matéria.
d) Não há motivação para o estudo se e somente se o estudante comete
erros e não aprende a matéria.
e) Se há motivação para o estudo e o estudante não comete erros, então o
estudante aprende a matéria se há motivação.
11. Simbolize as sentenças abaixo, dado o seguinte esquema:
A ≡ Paulo diminui os erros cometidos,
B ≡ há motivação para o estudo,
C ≡ Paulo aprendeu a matéria,
D ≡ O professor é bom.
a) Se o professor é bom, Paulo aprende a matéria.
b) Se o professor não é bom, não há motivação para estudar.
c) O professor é bom, há motivação para estudar e, além disso, Paulo
aprende a matéria.
d) Paulo não aprendeu a matéria; ele não diminuiu os erros cometidos.
e) Se Paulo não diminuiu os erros cometidos, o professor não era bom ou
não havia motivação para estudar.
f) Paulo aprende a matéria ou diminui os erros cometidos.
g) Paulo diminui os erros cometidos se, e somente se, há motivação para
estudar.
h) Se o professor é bom, então, caso haja motivação para estudar, Paulo
aprenderá a matéria.
i) Paulo diminuirá o número de erros cometidos se, e somente se, não
ocorrer o seguinte: não deixa de haver motivação para o estudo e Paulo
não deixa de aprender a matéria.
12. Simbolize as sentenças abaixo:
a) É fácil compreender as obras de José da Silva, mas não os de Guimarães
Rosa.
b) Se Diana foi ao baile, não é fato que não tenha ido ao baile.
c) Não é fato que Paulo que vá à festa e fique satisfeito.
d) Se o computador auxilia o cientista se, e somente se, altera a sua
programação, então, se altera a programação, é útil.
e) Não se dá o seguinte: não viajamos e não levamos as barracas.
f) Irei á praia salvo se chover.
g) Vou estudar exceto se tiver vontade.
13. Dadas as sentenças atômicas abaixo, escrever por meio de símbolos:
A ≡ “Ela é bonita”
B ≡ “Ela é inteligente”
C ≡ “Ela é rica”
38
D ≡ “Ela é jovem”
E ≡ “Ela gosta de mim”
F ≡ “Quero casar com ela”
a) “Ela é pobre”
b) “Ela é rica ou jovem”
c) “Ela é inteligente e anciã”
d) “Não é que ela é burra”
e) “Se ela é rica, então quero casar com ela”
f) “Ela é inteligente, bonita, rica, jovem e ela gosta de mim”
g) “Quero casar com ela, mas ela não gosta de mim”
h) “Uma condição necessária para casar com ela é que ela seja bonita”
i) “Uma condição suficiente para casar com ela é que ela seja rica”
j) “Ela é feia, burra, pobre, anciã, mas quero casar com ela”
k) “Quero casar com ela só se ela gosta de mim”
l) “Se ela é jovem então ela é bonita”
m) “Uma condição necessária e suficiente para casar com ela é que ela
goste de mim”
n) “Quero casar com ela, exceto se ela é burra”
2.6 - Fórmulas atômicas e fórmulas
Como observamos no início deste capítulo, através dos conectivos
lógicos ¬ , ∧, ∨, → e ↔, podemos construir sentenças mais “complexas” a
partir de outras sentenças mais “simples”. Este procedimento é clarificado
pela seguinte regra de formação de sentenças:
Partimos de certas sentenças denominadas fórmulas atômicas1 : p,
q, r, ... Elas desempenham, intuitivamente, o papel de sentenças básicas ou
atômicas da linguagem proposicional.
As sentenças (que daqui em diante receberão o nome de ‘fórmulas’)
em geral são obtidas pela seguinte definição indutiva generalizada:
1. Todas as fórmulas atômicas são fórmulas.
2. Se A e B são fórmulas, então
(¬A),
(A ∧ B),
(A ∨ B),
(A → B) e
(A ↔ B)
são também fórmulas.
3. Uma dada expressão constitui uma fórmula se e somente se foi obtida pela
aplicação de uma das regras (1 ou 2) acima.
Observe-se que os símbolos A e B introduzidos na definição anterior
(item 2) se tratam de variáveis que denotam sentenças quaisquer da linguagem
proposicional. O leitor deve estar atento para o fato de que tais símbolos não
são propriamente símbolos da linguagem em apreço, mas sim símbolos que
estão “fora” da linguagem proposicional. Tais variáveis denominam-se,
costumeiramente, meta-variáveis.
39
A cláusula 3 da definição acima é também conhecida como cláusula
maximal e, juntamente com as demais, permite-nos reconhecer quando uma
dada expressão se trata de uma fórmula ou não.
Daqui em diante, usamos também a seguinte terminologia: diz-se
que uma fórmula
(¬A) é do tipo não.
(A ∧ B) é do tipo e
(A ∨ B) é do tipo ou
(A → B) é do tipo implica
(A ↔ B) é do tipo bi-implica.
2.7 - Árvore de composição de uma fórmula. Árvore de decomposição.
Vimos a definição de fórmula no parágrafo anterior. Podemos esquematizála no que chamamos árvore de formação de fórmulas: A, B, C, D indicam
fórmulas atômicas.
(¬A)
A
B
C
D
(A → B)
(B ∧ C)
(C ∨ D)
(D ↔ D)
((A ∧ (B ∧ C))
(¬(¬A))
((C ∨ D) → (B ∧ C))
...
(¬(D ↔ D))
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
Na árvore acima notamos alguns pontos importantes.
Inicialmente, observemos a 1a linha: partimos de sentenças atômicas
A, B, C, D, ... que constitui a regra 1 da definição de fórmula.
Observemos a 2a linha: aplicamos a regra 2 e obtemos novas fórmulas: (¬A), (A → B), (B ∧ C), (C ∨ D), (D ↔ D), dentre outras. Observe que as
fórmulas obtidas seguem estritamente a regra 2, ou seja, por exemplo, em (A
→ B), é absolutamente necessário abrir um parêntesis á esquerda, escrever
a atômica A, escrever o conectivo → e depois escrever a atômica B e
finalmente fechar o parêntesis á esquerda.
Observemos a 3a linha: aplicamos a regra 2 novamente e obtemos
novas fórmulas: (¬(¬A)), ((A ∧ (B ∧ C)), ((C ∨ D) → (B ∧ C)), (¬(D ↔ D)),
entre outros. Novamente atente para a regra 2 que foi aplicada cuidadosamente ás fórmulas anteriormente obtidas.
Finalmente, queremos observar ao leitor que é muito importante
então aplicar corretamente a regra de formação de fórmulas.
A verificação cuidadosa da formação de fórmulas, permite também
imediatamente analisar como uma fórmula foi obtida. Esta tarefa é de
fundamental importância para as discussões deste livro. A seguir, prepare1
No sentido de sentença indecomponível.
40
mos alguns conceitos para o enquadramento desta noção.
Vamos exibir um processo gráfico para determinar todas as
subfórmulas (i.e., intuitivamente, todas as fórmulas que compõe a fórmula
em questão) de uma dada fórmula. Tal processo faz uso de uma estrutura,
muito utilizada nas diversas áreas das ciências da computação, chamada
árvore, mais precisamente faremos uso somente de árvores binárias. A
seguir, apresentamos graficamente as componentes de uma árvore binária
qualquer, observamos que tal descrição, não tem nenhum caráter formal, é
apenas para nos familiarizarmos com os elementos dessa estrutura.
Acima está a representação gráfica de uma árvore binária genérica,
chamamos de aresta o segmento de reta que “liga” os nós, (ou vértices ). Os
nós ou vértices são de três espécies, o nó a partir da qual toda a árvore é
gerada é chamado de raiz, o nó terminal chamado de folha e os nós intermediários chamados de nó interior. Freqüentemente utilizaremos as seguintes
denominações para determinados nós de uma árvore binária nó pai, nó
filho, nó irmão. Tal denominação pode ser vista no diagrama abaixo, referente a árvore anteriormente citada.
41
Observações:
1. Chamamos a estrutura acima de árvore binária, pois cada nó pode ter zero,
um ou no máximo dois filhos.
2. Podemos também classificar os nós como sucessores e ancestrais, por
exemplo:
Utilizaremos essa estrutura de árvore binária do seguinte modo:
1. Dada uma fórmula qualquer S esta será a raiz da árvore de subfórmulas
de S,
2. Se S é uma fórmula do tipo não, então ela é composta por uma fórmula A,
de tal modo que S = (¬A), logo teremos
(¬A)
A
3. Se S é uma fórmula do tipo e, então ela é composta por duas fórmulas A e
B de tal modo que S = (A ∧ B), logo teremos (A ∧ B).
A
B
4. Se S é uma fórmula do tipo ou, então ela é composta por duas fórmulas A
e B de tal modo que S = (A ∨ B), daí teremos (A ∨ B)
A
B
5. Se S é uma fórmula do tipo implica, então ela é composta por duas fórmulas A e B de tal modo que S é dado por (A → B), e teremos (A → B)
A
B
6. Se S é uma fórmula do tipo bi-implica, então ela é composta por duas
fórmulas A e B de tal modo que S é dado por (A ↔ B), e teremos
42
(A ↔ B)
A
B
Cada nó representa uma fórmula, em particular, cada nó “gera” uma
sub-árvore, isto é, cada nó pode ser considerada uma raiz de uma árvore
“menor” que tem como nós os sucessores do respectivo nó raiz.
A construção de uma árvore de subfórmulas a partir de uma fórmula dada, termina quando todas as folhas contiverem somente letras
proposicionais.
É muito importante o leitor ter em mente que uma fórmula é definida
passo a passo e é única a sua construção. Assim, por exemplo, podemos
dizer qual conectivo foi aplicado inicialmente, o segundo, etc., até chegarmos ao último. Desse modo, é possível decompor uma fórmula exibindo
todas as suas fórmulas que o compõe. Como este tema é relevante, convém
familiarizarmos mais de perto.
Analisemos a fórmula:
1) [A → (B ∨ C)]
Podemos verificar sem dificuldade que ela foi obtida das fórmulas A
e (B ∨ C) pela aplicação do conectivo →. Portanto, este → foi o último
conectivo que foi aplicado à fórmula [A → (B ∨ C)]. Esquematizamos isso
assim:
[A → (B ∨ C)]
A
(B ∨ C)
A fórmula (B ∨ C) por sua vez foi obtida das fórmulas atômicas B e C.
(B ∨ C)
B
C
A árvore final fica assim:
[A → (B ∨ C)]
A
(B ∨ C)
B
C
43
Notamos alguns passos importantes:
1. O primeiro conectivo aplicado é então ∨.
2. O último conectivo aplicado é →.
Vejamos mais um exemplo:
2) {¬[[(¬B) ∧ (¬(¬A))] ↔ [¬(¬(B ∨ C))]]}
Como saber a seqüência em que foram aplicados os conectivos ?
Se prestarmos atenção quando definimos a definição de fórmula, vimos
uma propriedade que um parêntesis á esquerda possui sempre o
parêntesis à direita correspondente. Vejamos. Você pode identificar isso de
vários modos, porém, há alguns pares de parêntesis óbvios. Por exemplo,
o par de parêntesis mais externos da fórmula:
Vemos que a fórmula {¬[[(¬B) ∧ (¬(¬A))] ↔ [¬(¬(B ∨ C))]]} foi
obtida de
[[(¬B) ∧ (¬(¬A))] ↔ [¬(¬(B ∨ C))]] pela aplicação do conectivo ¬. Logo,
deduzimos que a primeira ocorrência ¬ foi o último conectivo aplicado á
fórmula. Por conseguinte, o tipo desta fórmula é negação.
[[(¬B) ∧ (¬(¬A))] ↔ [¬(¬(B ∨ C))]] por sua vez foi obtida de
(1) [(¬B) ∧ (¬(¬A))] e
(2) [¬(¬(B ∨ C))] pela aplicação do conectivo ↔. Logo, ↔ foi o
último conectivo aplicado na fórmula anterior.
44
Analisemos separadamente:
(1) [(¬B) ∧ (¬(¬A))] foi obtida de (¬B) e (¬(¬A)) pela aplicação do conectivo
∧. Logo, ∧ foi o último conectivo aplicado na fórmula anterior.
(¬B) foi obtida de B pela aplicação do conectivo ¬. Logo, ¬ foi o último
conectivo aplicado na fórmula anterior.
(¬(¬A)) foi obtida de (¬A) pela aplicação do conectivo ¬. Logo, ¬ foi o
último conectivo aplicado na fórmula anterior.
(¬A) foi obtida de A pela aplicação do conectivo ¬. Logo, ¬ foi o último
conectivo aplicado na fórmula anterior.
(2) [¬(¬(B ∨ C))] foi obtida de (¬(B ∨ C)) pela aplicação do conectivo ¬.
Logo, ¬ foi o último conectivo aplicado na fórmula anterior.
(¬(B ∨ C)) foi obtida de (B ∨ C) pela aplicação do conectivo ¬. Logo, ¬ foi o
último conectivo aplicado na fórmula anterior.
(B ∨ C) por sua vez foi obtida das fórmulas atômicas B e C. Logo, ∨ foi o
último conectivo aplicado na fórmula anterior.
A árvore de decomposição toma a forma:
{¬[[(¬B) ∧ (¬(¬A))] ↔ [¬(¬(B ∨ C))]]}
[[(¬B) ∧ (¬(¬A))] ↔ [¬(¬(B ∨ C))]]
[(¬B) ∧ (¬(¬A))]
[¬(¬(B ∨ C))]
(¬B)
(¬(¬A))
B
(¬A)
A
(¬(B ∨ C))
(B ∨ C)
B
C
Vendo o esquema de decomposição de uma fórmula, podemos então
identificar qual foi o último conectivo que foi aplicado àquela fórmula. Daí
podemos determinar o tipo de uma fórmula.
Façamos mais exemplos.
3) {[(A → B) → A] → A}
Vemos 3 conectivos →. O último é a terceira ocorrência de →. O
tipo desta fórmula é então implicação.
Logo, a árvore de decomposição fica
45
{[(A → B) → A] → A}
[(A → B) → A]
A
(A → B)
A
A
B
4) {A ∧ [C ∧ (A ∨ C)]}
Vemos 3 ocorrências de conectivos: ∧, ∧, ∨. O último é a primeira
ocorrência de ∧. O tipo desta fórmula é então conjunção. Logo, a árvore de
decomposição fica:
{A ∧ [C ∧ (A ∨ C)]}
[C ∧ (A ∨ C)]
A
C
(A ∨ C)
A
C
5) {[( E → C) ∨ (A ∧ D)] ∧ [(E ↔ C) ↔ (A ∨ D)]}
Vemos 7 ocorrências de conectivos: →, ∨, ∧, ∧, ↔, ↔, ∨. O último
é a quarta ocorrência ∧. O tipo desta fórmula é então conjunção. Logo, a
árvore de decomposição fica:
{[( E → C) ∨ (A ∧ D)] ∧ [(E ↔ C) ↔ (A ∨ D)]}
[( E → C) ∨ (A ∧ D)]
( E → C)
E
[(E ↔ C) ↔ (A ∨ D)]
(A ∧ D)
C
A
(E ↔ C)
D
E
(A ∨ D)
C
A
D
Exercício 1. Em cada uma das fórmulas abaixo dizer qual é o último
conectivo aplicado e o tipo da fórmula. Em seguida faça a árvore de
decomposição.
1. {(A → (¬C)) ↔ [[¬[C ∧ (A ∨ C)]] → [¬[( E → C) ∨ (A ∧ D)]]]}
2. (¬((( E → C) ∨ (A ∧ D)) ∧ ((( E → C) → (¬(F ∨ D))) ↔ (E ∧ D))))
46
3.
{¬[¬[¬[¬[(A → B) → B] → A]]]}
Exemplo 1. (Fórmulas e suas respectivas árvores de subfórmulas)
1. Dada a fórmula A a única subfórmula é a própria fórmula A, ou seja, a
árvore de subfórmulas constitui-se de um único nó que é a própria raiz.
2. Dada a fórmula B a única subfórmula é dada pela própria fórmula B, isto
é, a árvore de subfórmulas constitui-se de um único nó que é a própria raiz.
3. Dada a fórmula (B ∧ C) teremos a seguinte árvore de subfórmulas:
(B ∧ C)
B
C
Nesse caso a árvore constitui-se de três nós, o nó raiz contém a
fórmula (B ∧ C), a seguir vemos que a árvore divide-se em duas, a “quebra”
ocorre exatamente sobre o conectivo ∧ que determina o tipo da fórmula e que
“liga” as letras proposicionais B e C, repare que as letras proposicionais são
as folhas da árvore. Os parênteses mais externos de cada nó abaixo da raiz
são eliminados, e por fim, note que cada nó representa uma subfórmula da
fórmula dada.
4. Dada a fórmula (B ∨ C) teremos a seguinte árvore de subfórmulas:
(B ∨ C)
B
C
A árvore compõe-se de três nós, na raiz temos a fórmula (B ∨ C), a
seguir vemos que a árvore divide-se em duas, a “quebra” ocorre exatamente
sobre o conectivo ∨ que faz a ligação das letras proposicionais B e C. As
letras proposicionais são as folhas da árvore, os parênteses mais externos
de cada nó abaixo da raiz são eliminados, e cada nó representa uma subfórmula
da fórmula dada.
5. Dada a fórmula (B → C) teremos a seguinte árvore de subfórmulas:
(B → C)
B
C
Novamente, a árvore compõe-se de três nós, no nó raiz temos (B →
C), a seguir vemos que a árvore divide-se em duas, a “quebra” ocorre
exatamente sobre o conectivo → que faz a ligação das letras proposicionais
B e C. As letras proposicionais são as folhas da árvore, os parênteses mais
externos de cada nó abaixo da raiz são eliminados, e cada nó representa uma
subfórmula da fórmula dada.
6. Dada a fórmula (¬B) temos a seguinte árvore de sufórmulas:
47
(¬B)
B
Aqui a árvore compõe-se de dois nós, na raiz está a fórmula (¬B), a
seguir vemos que a árvore decompõe-se em uma parte, novamente a “quebra”
ocorre exatamente sobre o conectivo que determina o tipo da fórmula, aplicada
na fórmula atômica B. A fórmula atômica é a folha da árvore, os parênteses
mais externos de cada nó abaixo da raiz são eliminados, e cada nó representa
uma subfórmula da fórmula dada.
7. Considere a fórmula ((¬A) ∧ B) a sua árvore de formação é:
((¬A) ∧ B)
(¬A)
B
A
Na raiz da árvore está a fórmula ((¬A) ∧ B) e a árvore é decomposta em
duas partes. A “quebra” ocorre exatamente sobre o conectivo ∧ que faz a
ligação das fórmulas (¬A) e B. A fórmula atômica r é uma das folhas da
árvore, os parênteses mais externos de cada nó abaixo da raiz são eliminados.
Uma das folhas da árvore acima contém (¬A), que não é uma fórmula atômica,
daí a necessidade de continuarmos o processo de decomposição. Novamente
os parênteses mais externos do nó filho de (¬A) são eliminados.
8. Considere a fórmula (A ∨ (¬B)) teremos a seguinte árvore de
decomposição:
(A ∨ (¬B))
A
(¬B)
B
9. Considere a fórmula ((A ∧ B) → A) teremos a seguinte árvore de
decomposição:
((A ∧ B) → A)
(A ∧ B)
A
A
B
Na raiz da árvore está a fórmula (A ∧ B) → A), a árvore é decomposta
em duas partes e a “quebra” ocorre exatamente sobre o conectivo → que faz
a ligação das fórmulas (A ∧ B) e A. A fórmula atômica A é uma das folhas da
árvore, os parênteses mais externos de cada nó abaixo da raiz são eliminados.
Uma das folhas da árvore acima contém (A ∧ B), que não é uma fórmula
atômica, daí a necessidade de continuarmos o processo de decomposição.
48
Novamente os parênteses mais externos dos nós filhos de (A ∧ B) são eliminados. Note que apesar da árvore apresentar cinco nós a fórmula ((A ∧ B) →
A) tem somente quatro subfórmulas distintas, entre si, basta ver que dois
nós contém a uma mesma fórmula.
10. Considere a fórmula ((A → B) ∧ C) teremos a seguinte árvore de
decomposição:
((A → B) ∧ C)
(A → B)
C
A
B
Temos na raiz a fórmula ((A → B) ∧ C), a seguir vemos que a árvore
é decomposta em duas partes, e a “quebra” ocorre exatamente sobre o
conectivo ∧ que faz a ligação das subfórmulas (A → B) e C. Os parênteses
mais externos de cada nó abaixo da raiz são eliminados, como as folhas da
árvore acima são (A → B) e C, que não são letras proposicionais temos a
necessidade de continuarmos o processo de decomposição. Fazendo a
decomposição da árvore até que todas as folhas sejam letras proposicionais
obteremos a árvore acima.
11. Considere a fórmula (C ∧ (B ∨ A)) teremos a seguinte árvore de
decomposição:
(C ∧ (B ∨ A))
C
(B ∨ A)
B
A
12. Seja dada a seguinte fórmula (A → (B → A)), vejamos a sua árvore de
subfórmulas.
(A → (B → A))
A
(B → A)
B A
13. Dada a a fórmula ((A → C) ∧ (B ∨ A)) teremos a seguinte árvore de
decomposição:
((A → C) ∧ (B ∨ A))
49
(A → C)
A
(B ∨ A)
C B
A
14. Considere a fórmula ((A → C) ∧ (B → D)) teremos:
((A → C) ∧ (B → D))
(A → C)
(B → D)
A
C
B
D
15. Considere a fórmula ((¬(A → B)) ∨ (¬C)) teremos a seguinte árvore de
decomposição:
((¬(A → B)) ∨ (¬C))
(¬(A → B))
(¬C)
(A → B)
C
A
B
16. Considere a fórmula ((¬(A ∨ B)) → (¬(¬C))). Temos:
((¬(A ∨ B)) → (¬(¬C)))
(¬(A ∨ B))
(¬(¬C))
(A ∨ B)
A
(¬C)
B
C
17. Dada a fórmula ((A → B) → ((A→ (¬B)) → (¬A))) temos:
((A → B) → ((A→ (¬B)) → (¬A)))
(A → B)
A
B
((A→ (¬B)) → (¬A))
(A→ (¬B))
A
(¬B)
(¬A)
A
B
Exercício 2. 1) Determine todas as subfórmulas de cada uma das
fórmulas dadas a seguir, usando o conceito de árvore de decomposição.
1. ((A → C) → ((B → C) → ((A ∨ B) → C))).
50
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
(( A ∨ (A ∧ B)) ↔ A)
((A ∧ (A ∨ B)) ↔ A)
((A → (A → B)) ↔ (A → B))
(((A → B) ∧ (A → C)) ↔ (A → (B ∧ C)))
((¬( A ∨ B)) ↔ ((¬A) ∧ (¬B)))
((¬(A ∧ B)) ↔ ((¬A) ∨ (¬B)))
[[A → (B → C)] → [(A → B) → (A → C)]]
[[A → (B → C)] → [B → (A → C)]]
[(A ↔ B) → (A ∨ B)]
[((¬A) → B) → (B → A)]
2) Idem.
1. [(¬(A ∧ B)) ↔ (¬(A ∨ B))]
2. [(A → B) ↔ ((¬B) → (¬A))]
3. [(A → (B ∧ C))]
4. [(A → B) ∧ (A → C)]
5. [[(¬B) → (¬A)] → [(¬((¬B) → A)) → B]]
¬B) ↔ (¬
¬C)] ↔ (¬
¬A)]
6. [[(¬
2.8 - Tabela-verdade de uma fórmula
Temos agora condições de construir a tabela-verdade de qualquer
fórmula dada. Seja A uma fórmula qualquer, considere o esquema a seguir.
P a sso s
Instruções
1
Construa a árvore de decomposição da fórmula.
2
Veja quais e quantas são as fórmulas atômicas.
3
Escreva em ordem alfabética as atômicas e trace colunas para cada uma
delas
4
Trace 2n linhas, sendo n o número de atômicas
5
6
Agora olhe para a árvore de decomposição. Se houver apenas um ramo,
olhe-as de baixo para cima, e escreva cada uma das sub-fórmulas da
esquerda para a di rei ta (senti do usual de escri ta), cada uma em uma
coluna separada
Se a árvore apresentar dois ramos, consideramos primeiro o ramo da
e s q ue rd a , e e s c re va c a d a uma d a s s ub -fó rmula s c o me ç a nd o p e la s
a tô mi ca s, d e b a i xo p a ra ci ma , tra nsp o rta nd o -a s na p ri me i ra li nha e
escrevendo-as da esquerda para a direita (sentido usual de escrita), cada
uma em uma coluna separada. Passe à coluna da direita e faça o mesmo,
até esgotar todas as sub-fórmulas de A, até chegar à última fórmula que
é A.
Como preencher a tabela-verdade:
51
P a sso s
Instruções
1
Olhemos inicialmente todas as colunas das atômicas.
. Na primeira coluna, preenchemos a primeira metade com 1 e a outra
metade com 0.
N a s e g und a c o l una , p a r a c a d a m e t a d e d e 1 d a p r i m e i r a c o l una ,
preenchemos a primeira metade com 1 e a outra metade com 0. Na outra
metade 0, ai nda da pri mei ra coluna, preenchemos a pri mei ra metade
com 1 e a outra metade com 0.
Nas demais colunas, repete-se o processo anterior, para cada bloco de
1 e de 0, até chegar à última coluna que deve apresentar-se assim: 1, 0,
1, 0, etc.
2
3
4
Preenchimento das demais colunas.
P a sso s
Instruções
1
A tabela já está pronta para que a primeira coluna após as atômicas seja
preenchível olhando-se a tabela verdade da fórmula da coluna.
2
Re p e te -s e o p ro c e s s o a c i ma , p o i s a ta b e la já d á a s e q üê nc i a d e
preenchimento.
3
Como na última coluna deve figurar a fórmula A, a tabela-verdade de A
está feita
Vejamos vários exemplos para que o leitor se familiarize com este conceito.
1.
(¬(B ∧ C))
(B ∧ C)
B
2.
C
B
C
(B ∧ C)
(¬(B ∧ C))
1
1
1
0
1
0
0
1
0
1
0
1
0
0
0
1
B
1
1
0
0
C
1
0
1
0
(¬B )
0
0
1
1
((¬B) ∧ C)
(¬B)
C
52
(¬(B ∧ C))
0
0
1
0
(D → (¬E))
3.
D
(¬E)
E
D
1
1
0
0
4.
E
1
0
1
0
D →(¬Ε)
0
1
1
1
(Β ∧ Α)
1
0
0
0
A →(Β ∧ Α)
1
0
1
1
(A → (B ∧ A))
(B ∧ A)
A
B
A
A
1
1
0
0
5.
(¬Ε)
0
1
0
1
B
1
0
1
0
(A → (¬(B ∨ A)))
(¬(B ∨ A))
A
(B ∨ A)
B
A
53
A B (Β ∨ Α) (¬(B ∨ A)) (A → (¬(B ∨ A)))
1 1
1
0
0
1 0
1
0
0
0 1
1
0
1
0 0
0
1
1
(A → (B → A))
6.
A
(B → A)
B
A
1
1
0
0
7.
B
1
0
1
0
(B → A)
1
1
0
1
A
(A → (B → A)
1
1
1
1
((A → B) → A)
(A → B)
A
A
B
A
1
1
0
0
B
1
0
1
0
(B → A)
1
0
1
1
54
(B → A)A →)
1
1
0
0
((A ↔ B) → A)
8.
(A ↔ B)
A
A
B
A
1
1
0
0
(A ↔ B)
1
0
0
1
B
1
0
1
0
((A ↔ B) → A)
1
1
1
0
{A → [(¬B) ∧ C]}
9.
A
[(¬B) ∧ C]
(¬B)
C
B
A
1
1
1
1
0
0
0
0
B
1
1
0
0
1
1
0
0
C
1
0
1
0
1
0
1
0
(¬B)
0
0
1
1
0
0
1
1
[(¬B) ∧ C]
0
0
1
0
0
0
1
0
55
{A → [(¬B) ∧ C]}
0
0
1
0
1
1
1
1
{(A ∨ B) → [B ∧ (B ↔ A)]}
10.
(A ∨ B)
A
[B ∧ (B ↔ A)]
B
(B ↔ A)
B
B
A
B
1
1
0
0
1
0
1
0
A
(A ∨ B) (B ↔ A) [B ∧ (B ↔ A)]} {(A ∨ B) → [B ∧ (B ↔ A)]}
1
1
1
0
1
0
0
1
1
0
0
0
1
0
0
1
{¬[A ∧ (¬A)]}
11.
[A ∧ (¬A)]
A
(¬
¬A)
A
1
0
(¬A)
0
1
[A ∧ (¬A)]
0
0
{[¬(A ∧ B)] ↔ [(¬A) ∨ (¬B)]}
12.
A
[¬(A ∧ B)]
[(¬A) ∨ (¬B)]
(A ∧ B)
(¬A)
(¬B)
A
B
B
56
{¬[A ∧ (¬A)]} ↔ A)
1
1
A B (A ∧ B) [¬(A ∧ B)] (¬A) (¬B)
11
1
0
0
0
10
0
1
0
1
01
0
1
1
0
00
0
1
1
1
[(¬A) ∨ (¬B)]}
{[¬(A ∧ B)] ↔ [(¬A) ∨ ¬B)]}
0
1
1
1
1
1
1
1
{[A → (B ∧ C)] → [(A ∨ B) ∨ (A ∧ C)]}
13.
[A → (B ∧ C)]
[(A ∨ B) ∨ (A ∧ C)]
A
(B ∧ C)
B
C
A
B
C (B ∧ C)
1
1
1
1
0
0
0
0
1
1
0
0
1
1
0
0
1
0
0
0
1
0
1
0
1
0
1
0
(A ∨ B)
A
[Α → (Β ∧ Χ)]
1
0
0
0
1
1
1
1
(A ∧ C)
B
(A ∨ B) (A ∨ C)
0
1
1
1
1
1
0
0
14. [(A ∧ B) ↔ (B ∧ A)]
(A ∧ B)
A
B
(B ∧ A)
B
A
A
57
1
1
1
1
1
0
1
0
C
[(A ∨ B) ∨ (A ∧ C)]
S
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
(B ∧ A)
1
0
0
0
A B (Α ∧ Β)
1 1
1
1 0
0
0 1
0
0 0
0
[(A ∧ B) ↔ (B ∧ A)])
1
1
1
1
15. S ≡ {(A ∧ A) → [(B ∨ A) → [(A ∨ B) → B]]}
(A ∧ A)
A
[(B ∨ A) → [(A ∨ B) → B]]
A
(B ∨ A)[(A ∨ B) → B]
B
(A ∨ B)B
A
A
A B (A ∧ A) (B ∨ A) (Α
1 1
1
1
1 0
0
1
0 1
0
1
0 0
0
0
∨ Β) [(A ∨
1
1
1
0
B) →B]) [(B ∨ A) → [(A ∨ B) → B]]
S
1
0
1
1
1
1
1
1
16. (A → (¬(B ↔ A)))
A
(¬(B ↔ A))
(B ↔ A)
B
B
A
58
1
0
1
1
A
1
1
0
0
(B ↔ A) (¬(B ↔ A)) (A → (¬(B ↔ A)))
1
0
0
0
0
1
0
1
1
1
0
1
B
1
0
1
0
((¬(A ↔ B)) → A)
17)
(¬(A ↔ B))
A
(A ↔ B)
A
A
1
1
0
0
18.
B
(A ↔ B)) (¬(A ↔ B)) ((¬(A ↔ B)) → A)
1
0
1
0
0
1
0
1
0
1
0
1
B
1
0
1
0
((¬(A → B)) → A)
(¬(A → B))
A
(A → B)
A
B
59
A
1
1
0
0
(A ↔ B)) (¬(A ↔ B)) ((¬(A ↔ B)) → A)
1
0
1
0
0
1
0
1
0
1
0
1
B
1
0
1
0
((A → C) ∨ (B ↔ C))
19.
(A → C)
(B ↔ C)
A
C
B
C
A
B
C (A → C) (B ↔ C)
1
1
1
1
0
0
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
1
1
1
1
0
0
1
1
0
0
1
((A → B) ↔ (G → (¬A)))
20.
(A → B)
(G → (¬A))
A
B
G
(¬A)
A
60
((A → C) ∨ (B ↔ C))
1
0
1
1
1
1
1
1
A
B G (¬A) (A → B)
1
1
1
1
0
1
1
0
0
1
1
0
1
0
1
1
0
1
0
1
1
1
0
0
1
((A → B) ↔ (G → (¬A)))
1
1
1
1
0
1
1
0
0
0
X ≡ ((A → C) → ((B ↔ C) → (B → C)))
21.
(A → C)
A
((B ↔ C) → (B → C))
C
(B ↔ C)
B
A
1
1
1
1
0
0
0
0
(G → (¬A)))
B
1
1
0
0
1
1
0
0
C
(B → C)
B
C
C (A → C) (B → C) (B ↔ C) ((B ↔ C) → (B → C)) X
1
1
1
1
1
1
0
0
1
0
1
1
1
1
0
0
1
1
0
0
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
0
1
1
1
1
1
1
61
Y ≡ ((A → B) → ((C→ (¬B)) ↔ (¬D)))
21.
(A → B)
((C→ (¬B)) ↔ (¬D))
A
B
((C→ (¬B))
C
(¬B)
(¬D)
D
B
(¬B) (¬D) (A → B) (C→ (¬B)) ((C→ (¬B)) « (¬D))
A
B
C D
1
1
1
1
0
0
1
0
1
1
1
1
1
1
1
1
1
0
0
0
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
0
1
0
1
0
1
0
1
1
1
0
0
0
0
1
1
1
0
1
1
1
1
1
1
0
0
1
0
0
1
0
1
0
1
1
0
0
0
0
1
1
1
1
1
1
0
0
0
1
0
0
0
1
1
1
1
1
0 0
1
1
1
0
1
1
0
0
0
0
0
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
0
1
0
0
0
62
Y
Z ≡ ((A → (B → C)) → ((A → C) → (A → D)))
22.
(A → (B → C))
((A → C) → (A → D))
(B → C)
A
B C
(A → C)
(A → D)
A
A
C
D
A
B
C D (B → C) (Α → C) (A → D) (A → (B → C)) ((A → C) → (A → D)) Z
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
1
1
1
0
0
0
0
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
0
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
0
0
0
0
1
1
1
0
0
1
1
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
0
1
0
1
1
1
1
1
0
1
0
0
0
1
1
1
1
1
0 0
1
1
1
1
1
1
1
1
0
0
0
1
0
0
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
Exercício 1. Faça o que se pede.
1) Obter a árvore de subfórmulas das seguintes fórmulas e analisar o respectivo
valor-verdade.
1. A
2. [¬(B ∧ C)]
3.
{¬[¬(B ∨ C)]}
4.
((A → C) → ((B→ C) → ((A ∧ B) → C))).
5.
((¬(¬(A ∨ B))) → (¬(¬A)))
6.
((A → (B → C)) → ((A→ B) → (A → C)))
7.
((A → C) → ((B→ C) → ((A ∨ B) → C))))
63
2) Fazer a árvore de subfórmulas das seguintes fórmulas e analisar o
respectivo valor-verdade.
1. [[(¬B) → (¬A)] → [((¬B) → A) → B]]
2. [[(¬B) ∧ (¬C)] ↔ (¬A)]
3. [¬[(A → B) ∧ (A ∨ (¬A))]]
4. [¬(A ∨ (¬A))]
5. [¬(A ∧ (¬A))]
6. [(¬B) ∧ (¬C)] ↔ (¬A)
7. [¬(( A → B) ∧ (A ∨ (¬A)))]
8. [[A → (B → C)] → [(A → B) → (A → C)]]
9. [[A → (B → C)] → [B → (A → C)]]
10. [(A ↔ B) → (A ∨ B)]
11. [((¬A) → B) → (B → A)]
3) Idem.
1. [(¬(A ∧ B)) ↔ (¬(A ∨ B))]
2. [(A → B) ↔ ((¬B) → (¬A))]
3. [(A→ (B ∧ C))]
4. [(A→ B) ∧ (A → C)]
5. [[(¬B) → (¬A)] → [(¬((¬B) → A)) → B]]
6. [[(¬B) ↔ (¬C)] ↔ (¬A)]
7. [¬[(¬(A → B)) ∧ (B ∨ (¬A))]]
8. [¬(A → (¬A))]
9. [¬(A ∧ (¬(¬A)))]
10. [[(¬B) ∧ (¬C)] ↔ (¬(¬A))]
11. [¬(( A → B) ↔ (A ↔ (¬A)))]
12. [[ A ↔ ( B → C)] → [( A ↔ B) → ( A ↔ C)]]
4) Fazer a árvore de subfórmulas das seguintes fórmulas e analisar o respectivo
valor-verdade.
1. [¬[( A → B) ∧ (A ∨ (¬A))]]
2. [[(¬B) ∧ (¬C)] ↔ (¬A)]
3. [¬[(¬A) ∧ A]]
4. [[(¬B) → (¬A)] → [((¬B) → A) → B]]
5. [[ A →( B → C)] → [ B → ( B → C)]]
6. [¬[A ∧ (¬A)]]
7. [[(¬B) ∧ (¬C)] ↔ (¬A)]
8. [¬[( A → B) ∧ (A ∨ (¬A))]]
9. [[ A →( B → C)] → [ B → ( A → C)]]
10. [[(¬B) → (¬A)] → [((¬B) → A) → B]]
11. [[(¬B) ∧ (¬C)] ↔ (¬A)]
12. [¬[( A → B) ∧ (A ∨ (¬A))]]
5) Idem.
1. [¬[A ∧ (¬A)]]
2. [[A → (B → C)] → [B → (A → C)]]
3. [[A → (B → C)] → [(A → B) → (A → C)]]
4. [¬[A ∧ (¬A)]]
64
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[¬[(A → B) ∧ (A ∨ (¬A))]]
[[(¬B) ∧ (¬C)] ↔ (¬A)]
[[A → (B → C)] → [B → (A → C)]]
[[A → (B → C)] → [(A → B) → (A → C)]]
[[A → (B → C)] → [B → (A → C)]]
[[(¬B) → (¬A)] → [((¬B) → A) → B]]
[[(¬B) ∧ (¬C)] ↔ (¬A)]
[¬[(A → B) ∧ (A ∨ (¬A))]]
[¬[A ∧ (¬A)]]
[[A → (B → C)] → [B → (A → C)]]
6) Determine a veracidade ou falsidade de cada uma das fórmulas dadas a
seguir.
1. A,
2. D,
3. (B ∧ C),
4. (A ∨ C),
5. (A → A),
6. (¬A),
7. (¬(B ∧ C)),
8. (¬(B ∨ C)),
9. (¬(A → C)),
10. (A → (B ∧ A)),
11. (A → (B ∨ A)),
7) Idem.
1. (A → (B → A)),
2. ((A ∧ B) → A),
3. ((A → B) → A),
4. (A → (¬(B ∨ A))),
5. ((¬(A ∧ B)) → A),
6. ((¬(A → B)) → A),
7. ((A → C) ∨ (B ∧ C)),
8. ((A → B) → (E → (¬C))),
9. ((A → C) → ((B → C) → ((A ∨ B) → C))),
10. ((A → B) → ((A → (¬B)) → (¬A))),
11. ((A → (B → C)) → ((A → B) → (A → C))).
8) Dada uma implicação (A → B), definimos três variações dessa implicação
como sendo a Recíproca, (B → A), a Inversa, ((¬A) → (¬B)) e a Contrapositiva,
((¬B) → (¬A)). Nas sentenças abaixo, determine o que se pede:
1. A Recíproca de “Se tem quatro lados, é um quadrado”.
2. A Inversa de “Se Maria é professora, ela é pobre”.
3. A Contrapositiva de “Se José estudar, ele passará em lógica”.
4. A Contrapositiva de “Se um político mente, ele ganha a eleição”.
9) Determine:
65
1. A Recíproca da Inversa de (A → B)
2. A Inversa da Contrapositiva de (A → B)
3. A Contrapositiva da Inversa de (A → B)
4. A Contrapositiva da Recíproca de (A → B)
5. A Recíproca da Inversa de “Se Antonio ganhar a causa, o assassino
será libertado”.
6. A Inversa da Contrapositiva de “Se o time tiver coragem, vencerá”.
7. A Contrapositiva da Inversa de “Se for um triângulo, será um triângulo
equilátero”.
8. A Contrapositiva da Recíproca de “Se o relógio estiver certo, estamos
atrasados”.
10) Em cada uma das sentenças abaixo, determine se há condição necessária
para a outra
condição, se há condição suficiente para a outra condição, ou se ambas,
necessária e
suficiente.
1. Rita virá somente se não chover.
2. Quando Dorival a ver, ele vai avisá-la.
3. O ar está quente somente quando o sol está brilhando.
4. Toda vez que o telefone toca, Nara corre para atendê-lo.
11) Indiquemos por A, a sentença “Alice mora aqui” e por B, a sentença “O
coelho é feliz”. Escrever em forma simbólica as seguintes afirmações:
1. Se Alice mora aqui, então o coelho é feliz.
2. Alice não mora aqui e o coelho é infeliz.
3. É necessário que Alice se mude daqui para o coelho ser feliz.
4. Alice morar aqui é suficiente para o coelho ser feliz.
5. Alice morar aqui é necessário para o coelho ser feliz.
6. O coelho não é feliz, se Alice mora aqui.
7. Alice não mora mais aqui ou, então, Alice mora aqui e o coelho é feliz.
12) Em que casos as sentenças abaixo são falsas?
1. Se Sócrates é homem, Sócrates é mortal.
2. Se as regras existem, têm que ser cumpridas.
3. Se Pelé não estava bem, não deveria ter jogado.
4. A rosa é vermelha se e somente se o cravo é branco.
5. A temperatura e a pressão permanecem constantes se e somente se o
volume não se alterar.
13) Em cada uma das sentenças abaixo, determine qual é a condição necessária
para a outra condição, e qual é a condição suficiente para a outra condição,
ou ambas, necessária e suficiente.
1. Se Marieta se casar com Chico, então ela gosta dele.
2. Gilberto virá, se não chover.
3. Quando ela está feliz, ela sorri, e quando ela sorri, ela está feliz.
4. Todo homem pode ler. (Considere “poder ler” como uma condição e “ser
66
homem” como outra.)
5. O homem é um animal racional.
14) Discutir pelo menos dois paradoxos semânticos da linguagem natural,
mostrando, então, a inadequação do uso das linguagens naturais para o
desenvolvimento de teorias lógicas.
15) Escrever todas as tabelas-verdade dos conectivos vistos da linguagem
proposicional.
16) Discutir através de dois exemplos (distintos do texto), que a tabelaverdade do conectivo da implicação não “funciona” na linguagem natural.
17) Discutir através de dois exemplos, que a tabela-verdade do conectivo da
conjunção apresenta diferenças no uso na linguagem natural.
2.9 - Tautologias
Nesta seção estudamos uma importante classe de fórmulas
denominadas tautologias.
Definição 1. Denomina-se função-verdade de n argumentos (n ≥ 1)
a qualquer função f: 2n → 2, onde 2 denota o conjunto {0, 1}.
É imediato que uma função-verdade f: 2n → 2 fica completamente
caracterizada se explicitarmos os seus argumentos e imagens através de uma
tabela, que ilustramos através de alguns exemplos:
Exemplo 1. Seja f: 22 → 2 caracterizada pela seguinte tabela:
x1
x2
f(x1, x2)
1
1
0
1
0
0
0
0
1
0
0
1
Exemplo 2. Seja f: 23 → 2 caracterizada pela seguinte tabela:
x1
x2
x3
f(x1, x2, x3)
1
1
1
0
1
1
0
0
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
1
0
1
67
Vimos na seção que a cada fórmula podemos associar uma função-verdade
correspondente.
Definição 2. Uma fórmula A diz-se ser uma tautologia se o valorverdade de A sempre for verdadeiro, quaisquer que sejam os valores-verdade
de suas fórmulas atômicas componentes.
Segue-se que uma fórmula A constitui uma tautologia se e somente
se sua função-verdade correspondente for a função f ≡ 1.
Exemplo 2. As seguintes fórmulas são exemplos de tautologias:
((A ∧ B) → B)
1.
(A ∧ B )
A
2.
B
B
A
B
(A ∧ B)
((A ∧ B) → B)
1
1
1
1
1
0
0
1
0
0
1
0
0
0
1
1
(¬(A ∧ (¬A)))
(A ∧ (¬A))
A
(¬A)
A
A
(¬A)
(A ∧ (¬A))
(¬(A ∧ (¬A)))
1
0
0
1
0
1
0
1
68
S ≡ ((A → (B → C)) → ((A → B) → (A → C)))
3.
(A → (B → C))
((A → B) → (A → C))
(B → C)
A
B
(A → B)
C
A
B
(A → C)
A
C
A
B
C
(B → C)
1
1
1
1
(A → B) (Α → C) (A → (B → C)) ((A → B) → (A → C)) Z
1
1
1
1
1
1
1
1
0
0
0
0
1
0
0
1
1
0
0
0
1
0
1
0
1
0
0
1
1
1
0
1
1
1
0
0
1
1
1
1
0
1
0
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
Definição 3. Diz-se que uma fórmula A implica tautologicamente a
fórmula B se (A → B) constituir uma tautologia. Neste caso, diz-se também
que B é uma conseqüência lógica de A.
Diz-se que as fórmulas A e B são logicamente equivalentes se (A ↔
B) constituir uma tautologia.
Exemplo 3. A fórmula (A → (B → C)) implica logicamente ((A → B) →
(A → C)), conforme o exemplo 2.4.3, parte c). Também, pelo mesmo exemplo
(parte a)), (A ∧ B) implica logicamente B.
Exemplo 4. As fórmulas (A ∨ B) e (B ∨ A) são logicamente
equivalentes. Também o são (A ∧ (B ∧ C)) e ((A ∧ B) ∧ C).
Exercício 1. Quais das seguintes fórmulas é implicada logicamente
pela fórmula [A ∧ (¬B)] ?
1. A
1. B
2. (¬B)
3. [(¬A) ∨ B]
4. (A ∨ B)
5. [A ∨ (¬B)]
6. [A → B]
7. [(¬A) → B]
8. [A ∨ (B ∨ C)]
69
2)
1.
2.
3.
Quais das seguintes fórmulas é implicada logicamente pela fórmula [(¬A)
→ B] ?
(¬A)
[A ∨ (¬B)]
(B ∨ (¬A))
Quais das seguintes fórmulas é logicamente equivalente à fórmula (A ∧
B) ?
1. (B ∧ A)
2. [¬((¬B) ∨ (¬A))]
3. [(A ∨ (A ∧ B))]
3)
Quais das seguintes fórmulas é logicamente equivalente à fórmula (A →
B) ?
1. [B ∨ (¬A)]
2. [B ∨ (C ∨ (¬A))]
3. (B → A)
4)
Vejamos, em seguida, algumas propriedades gerais das tautologias.
Teorema 1. Se A e (A → B) são tautologias, então também B é uma
tautologia.
Demonstração: Suponhamos, por absurdo, que B toma o valor 0 para
alguma associação de valores-verdade para as fórmulas atômicas
constituintes de A e de B. Então, para essa associação, A toma o valor 1
(pois, por hipótese A constitui uma tautologia) e, por conseguinte, (A → B)
toma o valor 0, o que contradiz o fato de (A → B) ser uma tautologia.
Exemplo 5. Temos que (A → (B → A)) e ( (A → (B → A)) → ((A → B)
→ (A → A)) são tautologias. Pelo teorema anterior concluímos que ((A → B)
→ (A → A)) também constitui uma tautologia.
Teorema 2. Se A é uma tautologia, cujas fórmulas atômicas
constituintes são A1 , A2 , ... , An e B é obtida a partir de A pela substituição de
A1 , ... , An pelas fórmulas A1 , ... , An, respectivamente, então B constitui ,
também, uma tautologia.
Demonstração: A cada associação de valores-verdade para as
fórmulas atômicas constituintes de B, as fórmulas A1, ... , An tomam os valoresverdade x1, ..., xn, respectivamente, então o valor-verdade de A é 1 (pois, por
hipótese, A é uma tautologia) e, portanto, B toma também o valor 1. Em
conseqüência, B é uma tautologia.
Exemplo 6. Consideremos a tautologia A ≡ ((A1 ∧ A2) → A1). Sejam A1
≡ (E ∨ C) e A2 ≡ (C ∧ D). Então B ≡ (((E ∨ C) ∧ (C ∧ D)) → (E ∨ D)) é também
uma tautologia:
70
A1
A2
(A1 ∧ A2)
((A1 ∧ A2) → A1)
1
1
1
1
1
0
0
1
0
0
1
0
0
0
1
1
A2
(A1 ∧ A2)
A1
A º ((A1 ∧ A2)
B ≡ (((E ∨ C) ∧ (C ∧ D)) → (E ∨ D))
C
D
E (E ∨ C) (C ∧ D) (((E ∨ C) ∧ (C ∧ D))
1
1
1
1
1
1
1
1
1
1
0
0
0
0
1
0
0
1
1
0
0
1
1
1
1
0
1
0
1
1
1
1
0
1
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
1
1
1
1
1
1
Assim, o Teorema anterior nos mostra que a substituição em uma tautologia
gera ainda uma tautologia.
Teorema 3. Se B1 é obtida de A1 (suponha-se que possua ocorrências
de A) pela substituição de B para uma ou mais ocorrências de A (em A1),
então (A ↔ B) implica logicamente (A1 ↔ B1).
Demonstração: Consideremos quaisquer associações de valoresverdade às fórmulas atômicas.
Se A e B tomarem valores-verdade opostos, então (A ↔ B) é falsa e,
portanto, (A ↔ B) → (A1 ↔ B1) é verdadeira.
Se A e B tomarem os mesmos valores-verdade, então o mesmo se dá
com A1 e B1, pois B1 difere de A por conter B em alguns ‘lugares’ onde A1
‘contém’ A. Logo, (A ↔ B) é verdadeira, e, em conseqüência, também é (A1
↔ B1). Por conseguinte, (A ↔ B) → (A1 ↔ B1) é sempre verdadeira e, portanto,
uma tautologia.
Exemplo 7. Consideremos as seguintes fórmulas :
A1 ≡ [((E ∧ (F ∨ C)) → C]
A≡C
B ≡ (D ∧ G)
B1 ≡ [(E ∧ (F ∨ (D ∧ G))) → C]
Pelo Teorema anterior,
é uma tautologia.
71
2.10 - Árvore de refutação
As tautologias, como já observamos, constituem uma classe
importante de fórmulas, pois, elas são sentenças verdadeiras, como vimos.
Em Ciência, sempre buscamos o conhecimento e isto implica particularmente
na busca da verdade. Ao utilizarmos a linguagem da lógica clássica, então tal
“verdade” se reflete, de modo particular, nas tautologias. Felizmente, para a
lógica proposicional, há um método efetivo para “testar” se uma fórmula é
tautologia ou não, por exemplo, valendo-se das tabelas-verdade. Neste
parágrafo, é objeto de estudo um outro algoritmo denominado árvore de
refutação de fórmulas para verificar se uma dada fórmula é tautologia ou
não.
Iremos introduzir a árvore de refutação através de alguns exemplos.
Verifiquemos se a fórmula [(A ∧ B) → A)] é tautologia.
Eis os passos.
1. Inicialmente, traçamos linhas em número suficiente e colunas para cada
fórmula atômica ou conectivo componente, acrescido de uma coluna de
justificativa. Ilustremos abaixo:
[(A
2.
∧
B)
→
A)]
Justificativa
Em seqüência, suponha-se que a fórmula [(A ∧ B) → A)] seja 0 (falsa).
Escrevemos o valor-verdade 0 (falso) abaixo do último conectivo da
fórmula em questão. Ilustremos este passo abaixo:
[(A
∧
B)
→
A)]
Justificativa
0
Falseamento
·
Vemos que o último conectivo aplicado é o da implicação. Pomos 0 na
linha imediatamente abaixo e na coluna correspondente. Note que o valor
atribuído é o valor da fórmula “inteira” [(A ∧ B) → A)], ou seja, ela é falsa.
·
3. Vejamos agora a tabela-verdade da implicação. A tabela nos diz que a
implicação é 0 (falsa) se e somente se o antecedente (A ∧ B) é 1
(verdadeiro) e o conseqüente A é 0 (falso). Escrevemos estes valores na
linha imediatamente seguinte, nas respectivas colunas. Ilustremos este
passo.
72
∧
[(A
→
B)
A)]
0
Falseamento
1
4.
0
Tab. →
Passamos a aplicar o raciocínio anterior nas duas fórmulas: (A ∧ B) e A.
No caso de (A ∧ B), ela é 1 (verdadeira). Consultando-se a tabela-verdade
da conjunção vemos que uma conjunção é 1 (verdadeira) se e somente
se ambas fórmulas A e B são verdadeiras, isto é o valor-verdade de A é
1 e de B é 1. No caso da fórmula da direita, não é necessário repetir o
processo, pois ela já é atômica. Ilustremos este passo:
∧
[(A
→
B)
A)]
0
0
1
Justificativa
Falseamento
1
5.
Justificativa
Tab. →
Tab. ∧
1
Se olharmos para a tabela resultante, observamos que a sentença A é 1
(verdadeira) na primeira coluna, e 0 (falsa) na última coluna, ou seja, a
sentença A está sendo verdadeira e falsa ao mesmo tempo. Isto constitui
uma inconsistência. Vamos analisar cuidadosamente, então, o algoritmo.
Como em Lógica Clássica supusemos que não existem inconsistências,
algum passo que fizemos está “errado”, ou seja é “falso”. O único elo fraco
acima é justamente o primeiro passo, quando supusemos que a fórmula [(A ∧
B) → A)] era falsa. Logo, o “errado” ou “falso” é supormos que [(A ∧ B) →
A)] é 0 (falso). Portanto, concluímos que ela é (sempre) 1 (verdadeira). Ora, se
[(A ∧ B) → A)] é sempre verdadeira, ela é tautologia, como queríamos provar.
Nos exemplos e exercícios subseqüentes, tais passos são feitos num
única tabela, como abaixo.
[(A
∧
B)
→
A)]
Justificativa
0
1
1
Falseamento
Tab. →
0
Tab. ∧
1
Principais tautologias.
A seguir listamos algumas das principais tautologias. Em muitas delas,
aplicamos a árvore de refutação e fizemos a verificação de que são tautologias.
Sejam A, B e C fórmulas quaisquer:
73
Leis comutativas
1. ((A ∨ B) ↔ (B ∨ A))
Demonstração. Como se trata do conectivo da bi-implicação, temos dois
casos:
1o caso:
∨
((A
↔
B)
∨
(B
A))
0
1
0
0
0
0
0
0
2o caso:
∨
((A
↔
B)
∨
(B
0
A))
1
1
0
0
0
0
0
0
Em qualquer um dos casos caímos em contradição. Logo, 1) constitui em
tautologia.
2. ((A ∧ B) ↔ (B ∧ A))
3. ((A ↔ B) ↔ (B ↔ A))
4. (((A → (B → C)) ↔ (B → (A → C)))
Leis associativas
5 (((A ∨ B) ∨ C) ↔ (A ∨ (B ∨ C)))
Demonstração. Como se trata do conectivo da bi-implicação, temos dois
casos:
1o caso:
((A
∨
B)
∨
C))
↔
(A
∨
B))
∨
C))
0
1
0
0
0
0
0
0
0
0
0
74
0
2o caso:
∨
((A
∨
B)
↔
C)
Α)
∨
Β)
0
∨
C))
1
0
1
0
0
0
0
0
0
0
0
0
Em qualquer um dos casos caímos em contradição. Logo, 1) constitui em
tautologia.
6. (((A ∧ B) ∧ C) ↔ (A ∧ (B ∧ C)))
Leis distributivas
7. ((A ∧ (B ∨ C)) ↔ ((A ∧ B) ∨ (A ∧ C)))
Demonstração: como se trata do conectivo da bi-implicação, temos dois
casos:
1o caso:
(((A ∨
(B
∨
C))
↔
((Α
∧
0
Β)
∧
∧
(A
C)))
1
1
0
1
1
0
0
1
1
0
0
0
0
0
o
2 caso: aqui temos a conjunção da “esquerda” falsa e a disjunção da “direita”
verdadeira. Desafortunadamente, ambas fórmulas possuem três casos a serem
analisados. Faremos o raciocínio na fórmula da “direita”, que é uma disjunção
verdadeira:
(((A ∧
(B
∨
C))
↔
((Α
∧
Β)
∨
(A
∧
C)))
0
0
1
1
1
0
1
1
0
1
1
0
1
1
75
2o sub-caso.
(((A ∧
(B
C ))
∨
↔
((Α
∧
Β)
∨
(A
C)))
∧
0
0
1
0
1
1
1
1
0
1
1
1
1
1
3o sub-caso.
(((A ∧
(B
C))
∨
↔
((Α
∧
Β)
∨
(A
C)))
∧
0
0
1
1
1
1
1
1
1
1
1
1
1
1
Em qualquer um dos casos caímos em contradição. Logo, 7) constitui em
tautologia.
8. ((A ∨ (B ∧ C)) ↔ ((A ∨ B) ∧ (A ∨ C)))
Leis idempotentes
9. ((A ∨ A) ↔ A)
Demonstração. Como se trata do conectivo da bi-implicação, temos dois
casos:
1o caso:
((A
∨
↔
(A
(A
0
1
0
0
0
0
76
2o caso:
((A
∨
↔
(A
(A
0
0
1
1
1
1
Em qualquer um dos casos caímos em contradição. Logo, 1) constitui em
tautologia.
10. ((A ∧ A) ↔ A)
Lei da dupla negação
11. (A ↔ (¬(¬A))
Demonstração. Como se trata do conectivo da bi-implicação, temos dois
casos:
1o caso:
((A
↔
(¬
(¬
(A
0
1
0
1
0
2o caso:
((A
↔
(¬
(¬
A))
0
0
1
0
1
Em qualquer um dos casos caímos em contradição. Logo, 1) constitui em
tautologia.
Lei do terceiro excluído
12. (A ∨ (¬A))
Demonstração. Como se trata do conectivo da disjunção, temos que:
77
∨
((A
(¬
A))
0
0
0
1
Temos uma contradição. Logo, é uma tautologia.
Lei da não-contradição
13. (¬(A ∧ (¬A)))
Demonstração. Como se trata do conectivo da conjunção, temos que:
(¬
∧
((A
(¬
A)))
0
1
1
1
0
Temos uma contradição. Logo, é uma tautologia.
Lei da transitividade da implicação
14. ((A → B) → ((B → C) → (A → C)))
.
Demonstração. Como se trata do conectivo da implicação, temos que:
((Α
→
0
1
Β)
→
((B
→
C)
→
(A
→
C)))
0
0
1
0
1
0
0
1
0
0
Temos uma contradição. Logo, é uma tautologia.
Lei do silogismo hipotético
15. (((A → B) ∧ (B → C)) → (A → C)
Demonstração. Como se trata do conectivo da implicação, temos que:
78
0
((Α
→
Β)
∧
((B
→
C))
1
→
(A
0
1
1
1
→
C)
0
1
0
0
1
0
Temos uma contradição. Logo, é uma tautologia.
Leis da contraposição.
16. (((A → B) ↔ ((¬B) → (¬A)))
Demonstração. Como se trata do conectivo da bi-implicação, temos dois
casos:
1o caso:
((Α
→
Β)
↔
((¬
Β)
→
(¬
A)))
0
1
0
1
0
0
1
1
0
0
2o caso:
((Α
→
Β)
↔
((¬
Β)
→
(¬
A)))
0
0
1
1
0
0
1
1
0
0
Temos uma contradição. Logo, é uma tautologia.
17. ((A → (¬B)) ↔ (B → (¬A))
Lei da exportação.
18. (((A ∧ B) → C) → (A → (B→C)))
Lei da importação.
19. ((A → (B → C)) → ((A ∧ B) → C))
Lei da exportação e da importação.
20. (((A ∧ B) → C) ↔ (A → (B → C)))
79
Leis de absorção
21.(( A ∨ (A ∧ B)) ↔ A)
22. ((A ∧ (A ∨ B)) ↔ A)
23. ((A → (A → B)) ↔ (A → B))
24. (((A → B) ∧ (A → C)) ↔ (A → (B ∧ C)))
Leis de De Morgan
25.((¬( A ∨ B)) ↔ ((¬A) ∧ (¬B)))
26. ((¬(A ∧ B)) ↔ ((¬A) ∨ (¬B)))
Prova por casos
27.(((( A ∨ B) ∧ (A → C)) ∧ (B → C)) → C)
Prova por contradição
28. ((((¬A) → B) ∧ (¬B)) → A)
29. ((A → (¬A)) → (¬A))
30. (((¬A) → A) → A)
31. (((A ∧ (¬B)) → (C ∧ (¬C))) → (A → B))
32. (((A ∧ (¬B)) → (¬A)) → (A → B))
33. (((A ∧ (¬B)) → B) → (A → B))
Lei do destacamento
34.((( A ∧ (A → B)) → B)
Modus tollendo tollens
35. (((¬B) ∧ (A → B)) → (¬A))
Modus tollendo Ponens
36. (((¬A) ∧ (A → B)) → B)
Leis de simplificação
37. ((A ∧ B) → A)
38. ((A ∧ B) → B)
Leis de adição.
39.(A → (A ∨ B))
40. (B → (A ∨ B))
Lei de equivalência para a implicação e disjunção
41. ((A → B) ↔ ((¬A) ∨ B))
Lei de negação para a implicação
42. ((¬(A → B)) ↔ (A ∧ (¬B)))
Leis para proposições bicondicionais
43. ((A ↔ B) ↔ ((A → B) ∧ (B → A)))
44. ((A ↔ B) ↔ ((A ∧ B) ∨ ((¬A) ∧ (¬B))))
80
Lei de Peirce
45. (((A → B) → A) → A)
Esquema B
46. (A → (B → A))
Esquema C
47. ((A → (B → C)) → ((A → B) → (A → C)))
Lei da identidade
48. (A → A)
Exercício 1. Completar as verificações que são tautologias, pelo
uso da árvore de refutação.
Exercício 2. Demonstrar, pelo método da árvore de refutação, se as
seguintes fórmulas são tautologias. Caso contrário, explicite os valoresverdade das sentenças atômicas, para as quais a fórmula é falsa.
1. {¬[B ∧ (¬B)]}
2. {[A →(B → C)] → [(A ∧ B) → C)]}
3. {[(¬A) ∧ (¬B)] ↔ [¬(A ∨ B)]}
4. [A ∨ (¬A)]
5. {[(¬C) ∨ (¬B)] ↔ (¬A)}
6. {¬[(A → B) ∧ (A ∨ (¬C))]}
7. {[(A ∧ B) → C)] → [A → (B → C)]}
8. {¬[(¬C) ∧ C]}
9. {[¬(B ∨ A)] ↔ [(¬A) ∧ (¬B)]}
10. [B ∧ (¬B)]
11. {¬[A ∧ (¬B)]}
12. {¬[(A → B) ∧ (A ∨ (¬C))]}
13. {[(¬C) ∨ (¬A)] ↔ (¬B)}
14. {[¬(A ∧ B)] ↔ [(¬A) ∨ (¬B)]}
15. {[(A ∧ B) → C)] → [A → (B → C)]}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Exercício 3. Idem.
{¬[B ∧ (¬B)]}
{¬[A ∧ (¬B)]}
{[(¬A) ∨ (¬B)] ↔ (¬C)}
{¬[A ∨ (¬C)]}
{¬[(A → C) ∧ (A ∨ (¬B))]}
{[¬(A ∨ B)] ↔ [(¬A) ∧ (¬B)]}
{[(A → B) ∧ (A → C)] → (A → C)}
{(A → B) → [(B → C) → (A → C)]}
{¬[C ∧ (¬B)]}
{[(¬C) ∨ (¬B)] ↔ (¬C)}
{[¬[B ∨ (¬C)]] ∨ B}
{¬[(A → C) ∧ (A ∨ (¬B))]}
81
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Exercício 4. Idem.
{(C → B) → [(B → A) → (C → A)]}
{[(B → C) ∧ (C → A)] → ( B → A)}
{[(¬A) ∧ (¬B)] ↔ [¬(A ∨ B)]}
{[¬[A ∨ (¬C)]] ∨ A}
{¬[(D → C) ∧ (D ∨ (¬B))]}
{¬[B ∧ (¬A)]}
{[(¬C) ∨ (¬A)] ↔ (¬C)}
[(A ∧ (¬A)) → B]
[(A ∧ (¬A)) → (¬B)]
[(A → (¬A)) → B]
[(A ↔ (¬A)) → B]
[(A ↔ (¬A)) → (¬B)]
[A → (¬(¬A))]
{((¬A) ∧ (A ∨ B)) → B}
{(A → B) → [(¬B) → (¬A)]}
[¬((¬A) ∧ (¬(¬A)))]
{[(A → (¬A)) → B] ∧ [B → (¬(¬B))]}
Exercício 5. Dê exemplos de tautologias na linguagem portuguesa.
2.11 - Contradições
Definição 1. Uma fórmula A diz-se ser uma contradição se o valorverdade de A for sempre falso, quaisquer que sejam os valores-verdade de
suas fórmulas atômicas componentes.
Logo, uma fórmula A constitui uma contradição se e somente se sua
função-verdade correspondente for a função constante f ≡ 0.
Exemplo 1.
1. (A ∧ (¬A))
A
(¬A)
A
(A ∧ (¬A))
A
(¬A)
1
0
0
0
1
0
82
2.
((A ∧ B) ∧ (¬A))
(A ∧ B)
A
Α
(¬A)
B
A
B
(Α ∧ Β)
((A ∧ B) ∧ (¬A))
(¬Α)
1
1
1
0
0
1
0
0
0
0
0
0
1
0
0
0
1
1
0
0
Lema 1. Uma fórmula A é uma tautologia se e somente se a fórmula
(¬A) for uma contradição, e vice-versa.
Demonstração: Imediata.
Corolário 1.1. Seja τ o conjunto das tautologias da linguagem
proposicional e π o conjunto das contradições. Então τ é equipotente a π.
Demonstração: Conseqüência do lema anterior.
Vê-se, pelos resultados anteriores, que a linguagem proposicional
contém ‘tantas tautologias quanto contradições’. Intuitivamente, isto
denuncia uma importante propriedade da linguagem proposicional: o
pesquisador que utiliza a linguagem proposicional da Lógica Clássica para
suas perquirições, a linguagem “está equipada” em igual número de sentenças
verdadeiras e falsas. Logo, ela (a linguagem) se posiciona neutramente na
busca da verdade.
Podemos obter um algoritmo similar á árvore de refutação vista
anteriormente para verificar se uma fórmula constitui uma contradição. Com
efeito, basta supor, por absurdo, que a fórmula é verdadeira e cair num absurdo.
Se isto ocorrer, fica provado que a fórmula é uma contradição.
Exemplo 2. Algumas aplicações do algoritmo.
1. [¬((A ∧ B) → A)]
[¬
((A
∧
Β)
→
A)]
1
0
1
0
1
2. [¬(A → (B → A))]
83
0
[¬
→
(A
(Β
→
A))]
1
0
1
0
1
0
3. [¬((A → B) → ((A → (¬B)) → (¬A)))]
[¬
((A
→
Β)
→
((A
→
(¬
B))
→
(¬
A)))]
1
0
1
0
1
0
1
1
1
0
1
0
0
Exercício 1. Aplique o algoritmo acima visto para verificar se as seguintes
proposições são contradições. Caso contrário, explicite os valoresverdade das atômicas para os quais ela é verdadeira.
1. [¬(A → A)]
2. {¬[(¬A) ∨ A]}
3. {¬[B → (C → B)]}
4. {B ∧ [C ∧ (¬B)]}
5. {[A → [B ∧ (¬B)]] ∧ A}
Exercício 2. Dê exemplos de sentenças na linguagem portuguesa
que são sempre falsas.
2.11 - Inferência Lógica
Neste parágrafo estudamos uma parte importante da Lógica formal:
inferência ou raciocínio. Particularmente estamos interessados nas inferências
válidas.
Uma inferência, quando se fixa uma linguagem conveniente para
expressar os juízos de que se compõe, se expressa por um conjunto ordenado
de sentenças: as premissas e a conclusão. O passo lógico das premissas á
conclusão constitui numa dedução. Uma inferência se diz válida, se de
premissas verdadeiras, obtivermos necessariamente conclusões também
84
verdadeiras.
Vamos estudar algumas regras de inferência.
1)
Modus Ponendo Ponens. Esta regra compõe-se duas premissas, a
premissa maior e a premissa menor, e uma conclusão.
A forma da regra se escreve como:
A, ( A → B )
B
(A → B)
A
B
ou
1. Premissa maior: (A → B)
2. Premissa menor: A
3. Conclusão: B
Exemplo 1. Vejamos alguns exemplos.
a) 1. Premissa maior: Se chove, então o céu está encoberto.
2. Premissa menor: Chove
3. Conclusão: O céu está encoberto.
b) 1. Premissa maior: Se trabalhas arduamente, então é recompensado de
algum modo.
2. Premissa menor: Trabalhas arduamente.
3. Conclusão: És recompensado de alguma forma.
c) 1. Premissa maior: Se f : ℜ → ℜ é uma função derivável, então f é uma
função contínua.
2. Premissa menor: f : ℜ → ℜ é uma função derivável.
3. Conclusão: f é uma função contínua.
Observemos que na regra Modus Ponendo Ponens, as fórmulas A
e B são arbitrárias. Então ela nos permite outras aplicações:
d) 1. Premissa maior: Se não faz frio, então o lago não gelará.
2. Premissa menor: Não faz frio
3. Conclusão: O lago não gelará.
Se simbolizarmos por C ≡ Faz frio e por D ≡ O lago gelará, temos:
Outros exemplos:
1. {(¬A) → B}
Premissa maior
85
2.
3.
(¬A)
B
Premissa menor
Conclusão
Teorema 1. A regra de Modus Ponendo Ponens é uma inferência
válida.
Demonstração: Suponhamos que A e (A → B) são proposições
verdadeiras. Suponha-se por absurdo que B é falsa. De A verdadeira e B
falsa concluímos que (A → B) é falsa, o que é absurdo. Podemos esquematizar
assim:
A
1
(A → B)
B
1
0
0
2) Modus Tollendo Ponens
Esta regra consiste de duas premissas e uma conclusão.
2.1 1a forma
(A ∨ B)
(¬A)
B
ou
1. Premissa: (A ∨ B)
2. Premissa: (¬A)
3. Conclusão: B
Exemplo 2. 1. Premissa: “Clarissa compra um vestido azul ou Clarissa
compra uma blusa bege”
2. Premissa: “Clarissa não compra um vestido azul”
3. Conclusão: “Clarissa compra uma blusa bege”
2.2 2a forma
(A ∨ B)
(¬B)
A
Exemplo 3. 1. Premissa: “Clarissa compra um vestido azul ou Clarissa
compra uma blusa bege”
2. Premissa: “Clarissa não compra uma blusa bege”
3. Conclusão: “Clarissa compra um vestido azul”
3) Regra da Dupla Negação.
Esta regra compõe-se de uma única premissa e uma conclusão. São duas
formas:
2.1) ( ¬ ( ¬A))
A
e
2.2)
A
( ¬ ( ¬ A))
86
2.1) 1. Premissa: (¬(¬A))
2. Conclusão: A
Seja a proposição: “Não é o caso que Bianca não estuda”
Podemos inferir daí que
“Bianca estuda”
Portanto, se pomos:
A ≡ Bianca estuda, temos:
(¬(¬A)) ≡ Não é o caso que Bianca não estuda.
Temos então:
1. Não é o caso que Bianca não estuda.
2. Bianca estuda.
Ou, em símbolos,
1. (¬(¬A))
2. A
Premissa
Conclusão
Premissa
Conclusão
Seja a proposição: não é que 1 ≠ 1. Temos
Se pomos A ≡ (1 = 1), temos:
1. não é que 1 ≠ 1
Premissa
2. 1 = 1
Conclusão
2.2)
2.1) 1. Premissa: A
2. Conclusão: (¬(¬A))
Seja a proposição: “Johnny Mathis interpreta com maestria”
Podemos inferir daí que
“Não é o caso que Johnny Mathis não interpreta com maestria”
Portanto se pomos:
A ≡ Johnny Mathis interpreta com maestria, temos:
(¬(¬A)) ≡ Não é o caso que Johnny Mathis não interpreta com maestria.
Temos então:
1. Johnny Mathis interpreta com maestria.
Premissa
2. Não é o caso que Johnny Mathis não interpreta com maestria.
Conclusão
Ou, em símbolos,
1. A
2. (¬(¬A))
Premissa
Conclusão
87
Seja a proposição: ∅ = {∅}.
Se pomos A ≡ ∅ = {∅}, temos:
1. ∅ = {∅}
Premissa
2. Não é que ∅ ≠ {∅}
Conclusão
Teorema 2. A Regra da Dupla Negação é uma regra de inferência
válida.
Demonstração. De fato, se (¬(¬A)) é verdadeira, (¬A) é falsa e,
portanto, A é verdadeira. Podemos esquematizar assim:
(¬(¬A))
(¬A)
A
1
0
1
Se A é verdadeira, então (¬A) é falsa e, portanto, (¬(¬A)) é
verdadeira.
Podemos esquematizar assim:
A
(¬A)
(¬(¬A))
1
0
1
Observação. Na língua portuguesa, existe o que se chama negação
enfática. Por exemplo, na proposição
“Não se viu nenhuma pessoa” é a mesma coisa que “pessoa alguma foi
vista”, diferentemente das discussões acima. Portanto, caro leitor, se for
aplicada ao pé da letra a lei acima, você está fadado a ser mal interpretado.
Outro exemplo: “não consigo aprender nada” é a mesma coisa que ignorância
total.
Começando a fazer deduções.
Uma dedução consiste em uma seqüência de fórmulas, cada uma
delas ou é uma premissa ou obtida de fórmulas anteriores pela aplicação de
regras de inferência.
Exemplo 4.
1. (A → B)
Premissa
2. A
Premissa
3. B
1, 2, Modus Ponens
4. (¬(¬B))
3, Dupla negação
Constitui uma dedução. Diz-se que (¬(¬B)) foi deduzida a partir das premissas
88
(A → B) e A.
4) Modus Tollendo Tolens
Esta regra compõe-se duas premissas e uma conclusão.
A forma da regra se escreve como:
A,(A → B)
B
Ou
(A → B)
(¬B)
(¬A)
1. (A → B)
2. (¬B)
3. (¬A)
Premissa
Premissa
Conclusão
Exemplo 5. Vejamos alguns exemplos.
a) 1. Se chove, então o céu está encoberto Premissa
2. O céu não está encoberto
Premissa
3. Não chove
Conclusão
b) 1. Se trabalhas arduamente, então
Premissa
2. Não é recompensado de algum modo
Premissa
3. Não trabalhas arduamente
Conclusão
é recompensado de algum modo
c) 1. Se f : ℜ → ℜ é uma função derivável, então f é uma função contínua
Premissa
2. f : ℜ → ℜ não é uma função contínua
Premissa
3. f : ℜ → ℜ não é uma função derivável
Conclusão
d) 1. Se não faz frio, então o lago não gelará
2. Não é que o lago não gelará
3. Não é que não faz frio
Premissa
Premissa
Conclusão
Se simbolizarmos por A ≡ Faz frio e por B ≡ O lago gelará, temos:
1. [(¬A) → (¬B)]
Premissa
2. (¬(¬B))
Premissa
3. (¬(¬A))
Conclusão
Podemos continuar a dedução e inferir
4. A
3, Dupla negação
ou seja, Faz frio.
89
Teorema 3. A regra de Modus Tollendo Ponens é uma inferência
válida.
Demonstração: Suponhamos que (A → B) e (¬B) são proposições
verdadeiras. Suponha-se por absurdo que (¬A) é falsa. De (¬B) verdadeira,
temos B falsa e de (¬A) é falsa concluímos que A é verdadeira. De A verdadeira
e B falsa concluímos que (A → B) é falsa, o que é absurdo. Podemos
esquematizar assim:
(A → B)
(¬B)
1
1
B
(¬A)
A
0
0
1
0
5) Regra de Simplificação:
Esta regra é composta de uma premissa e uma conclusão.
5.1 1a forma.
(A ∧ B)
A
ou
1. Premissa: (A ∧ B)
2. Conclusão: A
Exemplo 6. 1. Premissa: “João estuda e João é compenetrado”
2. Conclusão: “João estuda”
5.2 2a forma.
(A ∧ B)
B
ou
1. Premissa: (A ∧ B)
2. Conclusão: B
Exemplo 7. 1. Premissa: “João estuda e João é compenetrado”
2. Conclusão: “João é compenetrado”
6) Regra de Adjunção.
Esta regra compõe-se de duas premissas e uma conclusão.
6.1 1a forma.
A
B
(A ∧ B)
ou
1. Premissa: A
2. Premissa: B
3. Conclusão: (A ∧ B)
90
Exemplo 8. 1. Premissa: “Clarissa é amorosa”
2. Premissa: “Clarissa é quieta”
3. Conclusão: “Clarissa é amorosa e Clarissa é quieta”
2a forma.
A
B
(B ∧ A)
ou
1. Premissa: A
2. Premissa: B
3. Conclusão: (B ∧ A)
Exemplo 9. 1. Premissa: “Clarissa é amorosa”
2. Premissa: “Clarissa é quieta”
3. Conclusão: “Clarissa é quieta e Clarissa é amorosa”
7) Lei de Adição
A Lei de Adição expressa que de uma proposição válida A pode-se inferir a
disjunção dela com qualquer outra proposição B.
A Lei da Adição se expressa como:
7.1)
1. Premissa: A
2. Conclusão: (A ∨ B)
7.2)
1. Premissa: B
2. Conclusão: (A ∨ B)
Exemplo 10. 1. Premissa: “O amor é azul”
2. Conclusão: “O amor é azul ou o amor é eterno”
Exemplo 11. 1. Premissa: “2 + 2 = 4”
2. Conclusão: “2 + 2 = 4 ∨ 3 + 2 ≤ 1”
Exemplo 12. 1. Premissa: “Passei em Matemática”
2. Conclusão: “O exame é amanhã ou passei em Matemática”
Exemplo 13. 1. Premissa: “2 + 2 = 4”
2. Conclusão: “3 + 2 ≤ 1∨ 2 + 2 = 4”
Exemplo 14. 1. Premissa: B
2. Conclusão: ((¬C) ∨ B)
Exemplo 15. 1. Premissa: A
2. Conclusão: (A ∨ ((¬B) → C))
8) Lei do Silogismo Hipotético
91
Esta regra compõe-se de duas premissas e uma conclusão.
1.
2.
3.
Premissa: (A → B)
Premissa: (B → C)
Conclusão: (A → C)
Exemplo 16. 1. Premissa: “Se fizer calor, então Clarissa irá á praia”
2. Premissa: “Se Clarissa irá á praia, então Clarissa arrumará a casa”
3. Conclusão: “Se fizer calor, então Clarissa arrumará a casa”
Exemplo 17. 1. Premissa: “Se f : ℜ → ℜ é polinomial, então f : ℜ →
ℜ é derivável”
2. Premissa: “Se f : ℜ → ℜ é derivável, então f : ℜ → ℜ é contínua”
3. Conclusão: “Se f : ℜ → ℜ é polinomial, então f : ℜ → ℜ é contínua”
9) Lei do Silogismo Disjuntivo
Esta regra compõe-se de três premissas e uma conclusão.
9.1 1a forma.
A ∨ B)
(A → C)
(B → D)
(C ∨ D)
ou
1. Premissa: (A ∨ B)
2. Premissa: (A → C)
3. Premissa: (B → D)
4. Conclusão: (C ∨ D)
Exemplo 18. 1. Premissa: “Ou chove ou as terras estão secas”
2. Premissa: “Se chover, então não trabalharemos”
3. Premissa: “Se as terras estão secas, então jogaremos futebol”
4. Conclusão: “Ou não trabalharemos ou jogaremos futebol”
9.2 2a forma.
(A ∨ B)
(A → C)
(B → D)
(D ∨ C)
ou
1. Premissa: (A ∨ B)
2. Premissa: (A → C)
3. Premissa: (B → D)
4. Conclusão: (D ∨ C)
Exemplo 19. 1. Premissa: “Ou chove ou as terras estão secas”
2. Premissa: “Se chover, então não trabalharemos”
3. Premissa: “Se as terras estão secas, então jogaremos futebol”
4. Conclusão: “Ou jogaremos futebol ou não trabalharemos”
92
10) Leis Comutativas.
Esta regra compõe-se de uma premissa e uma conclusão.
10.1 1a forma.
(A ∧ B)
(B ∧ A)
ou
1. Premissa: (A ∧ B)
2. Conclusão: (B ∧ A)
Exemplo 20.: 1. Premissa: “Clarissa é quieta e Clarissa é amorosa”
2. Conclusão: “Clarissa é amorosa e Clarissa é quieta”
Observação: muito cuidado ao considerar linguagens naturais. Veja
o exemplo
1. Premissa: “Maria casou e Maria teve um filho”
2. Conclusão: “Maria teve um filho e Maria casou”
Reiteramos. As regras de inferência (como tudo o mais) referem-se á linguagem
proposicional e não á linguagem natural.
10.2 2a forma.
(A ∨ B)
(B ∨ A)
ou
1. Premissa: (A ∨ B)
2. Conclusão: (B ∨ A)
Exemplo 21. 1. Premissa: “Clarissa é quieta ou Clarissa é amorosa”
2. Conclusão: “Clarissa é amorosa ou Clarissa é quieta”
11) Leis das proposições bi-condicionais.
11.1(A↔B)
(A→B)
11.2(A↔B)
(B→A)
11.3(B→A)
(A↔B)
11.4
(A↔B)
((A↔B)∧(A↔B)
12) Leis de De Morgan.
12.1[¬(A∧B)]
[(¬A) ∨ (¬B)]
12.2 [¬(A∨B)]
[(¬A) ∧ (¬B)]
93
12.3
(A∧B)
{¬[(¬A)∨(¬B)]}
12.4
(A∧B)
{¬[(¬A)∨(¬B)]}
12.5
[(¬A)∨(¬B)]
[ ¬(A∧B)
12.6
[(¬A)∧(¬B)]
[ ¬(A∨B)
12.7
{¬[(¬A)∨(¬B)]}
(A∧B)
12.8
{¬[(¬A)∨(¬B)]}
(A∨B)
Exercício 1. Simbolize as proposições e o quê se pode concluir,
aplicando-se as regras de inferência vistas ?
1. Ou Paulo tem a maioria dos votos ou Maria tem a maioria dos votos. Se
Paulo tem a maioria dos votos, então Luiz será o tesoureiro. Se Maria tem a
maioria dos votos, então Marcos será o tesoureiro.
2. Se a emenda não for aprovada, então a Constituição fica como está. Se a
Constituição fica como está, então não incorporamos novos membros ao
comitê. Ou incorporamos novos membros ao comitê ou o informe se atrasará
em um mês. Porém, o informe não se atrasará em um mês.
Nas seguintes inferências, verificar se a conclusão é conseqüência das
premissas. No caso positivo, faça uma dedução usando as regras vistas.
1. Se esta é uma sociedade matriacal, então o irmão da mãe é o chefe da
família. Se o irmão da mãe é o chefe da família, então o pai não possui
autoridade. Esta é uma sociedade matriacal. Portanto, o pai não possui
autoridade.
2. Se o presidente da escola de samba for correto ou for forte ou for íntegro,
então a escola progride sem problemas. Se a escola progride sem problemas,
então todos os sócios estão satisfeitos. Se os sócios estão satisfeitos, então
não há descontentamento com o presidente, nem o presidente é anti-ético,
nem o presidente toma atitudes imorais, nem o presidente vacila e nem o
presidente esconde informações. Acontece que há descontentamento com
o presidente, além disso o presidente é anti-ético, toma atitudes imorais,
vacila e esconde informações. Logo o presidente da escola de samba não é
correto, nem íntegro e é fraco.
94
2.12 - Regras de eliminação de parênteses
Vejamos algumas convenções destinadas a aliviar a leitura das
fórmulas, através da eliminação de parênteses. As regras para tal são as
seguintes:
R1) Inicialmente omitimos os parênteses ‘mais externos’ de uma fórmula. É
claro que se a fórmula for uma fórmula atômica, não há parênteses a omitir.
Exemplo 1. (A ∧ B) → C abrevia ((A ∧ B) → C)
R2) Se a fórmula contiver apenas ocorrências de um só conectivo binário
(isto é, ∧, ∨, → ou ↔), os parênteses são omitidos por associação à esquerda.
Exemplo 2. Exemplos de forma simplificada.
1. A → D → C → B abrevia ((A → D) → C) → B)
2. B ∧ B ∧ C abrevia ((B ∧ B) ∧ C).
R3) quando uma fórmula apresentar ocorrências de mais de um conectivo,
ponha-se a seguinte ordenação entre os conectivos:
1o ¬
2o ∧
3o ∨
4o →
5o ↔
Os parênteses são eliminados de acordo com as seguintes regras,
ilustradas pelos exemplos correspondentes:
R4) Primeiramente, ¬ se aplica à ‘menor’ fórmula que o segue imediatamente.
Exemplo 3. Para se restaurar os parênteses da expressão A ∨ ¬B → C
↔ A ∧ D, inicia-se primeiro pelo conectivo ¬:
A ∨ (¬B) → C ↔ A ∧ D
R5) Em seguida, ∧ conecta as ‘menores’ fórmulas a ele adjacentes:
Exemplo 4. Tomando-se a expressão do exemplo anterior, obtemos:
A ∨ (¬B) → C ↔ (A ∧ D)
R6) Logo o ∨, que conecta as ‘menores’ fórmulas a ele adjacentes:
Exemplo 5. A expressão do exemplo anterior toma a forma (A ∨
(¬B)) → C ↔ (A ∧ D)
R7) O passo seguinte é tratar do → que conecta as ‘menores’ fórmulas a ele
adjacentes:
95
Exemplo 6. ainda em relação ao exemplo anterior:
((A ∨ (¬B)) → C ) ↔ (A ∧ D)
R8) Por último, ↔ conecta as ‘menores’ fórmulas a ele adjacentes:
Exemplo 7. O exemplo anterior toma a forma:
(((A ∨ (¬B)) → C ) ↔ (A ∧ D))
Exemplo 8. Seja a restauração dos parênteses da expressão
A ↔ B ↔ C ∧ D ∧ A ∨ ¬A → D
Os passos da restauração são os seguintes:
1. A ↔ B ↔ C ∧ D ∧ A ∨ (¬A) → D
(R4)
2. A ↔ B ↔ (C ∧ D) ∧ A ∨ (¬A) → D
(R5 e R2)
3. A ↔ B ↔ ((C ∧ D) ∧ A) ∨ (¬A) → D
(R2)
4. A ↔ B ↔ (((C ∧ D) ∧ A) ∨ (¬A)) → D
(R6)
5. A ↔ B ↔ ((((C ∧ D ∧ A) ∨ (¬A)) → D)
(R7)
6. (A ↔ B) ↔ ((((C ∧ D) ∧ A) ∨ (¬A)) → D)
(R8 e R2)
7. ((A ↔ B) ↔ ((((C ∧ D) ∧ A) ∨ (¬A)) → D))
(R2)
Exemplo 9. Simplifiquemos os parênteses de (A ∨ (B → A)).
1. (A ∨ (B → A))
(R1)
2. A ∨ (B → A)
(R1)
1.
2.
3.
4.
5.
6.
7.
Exercício 1. Simplifique os parêntesis das seguintes fórmulas.
[[ A → ( B → C)] → [( A → B) → ( A → C)]]
[[ A → ( B → C)] → [ B → ( A → C)]]
[[(¬B) → (¬A)] → [((¬B) → A) → B]]
[[(¬B) ∧ (¬C)] ↔ (¬A)]
[¬[( A → B) ∧ (A ∨ (¬A))]]
[¬[A ∧ (¬A)]]
[[ A → ( B → C)] → [ B → ( A → C)]]
2.13 - A notação polonesa de fórmulas
Há uma outra notação para as fórmulas que não faz uso dos parênteses.
Tal sistema é conhecido como notação polonesa de fórmulas e mostra que,
de fato, os parênteses são simplesmente símbolos auxiliares da linguagem
proposicional.
As regras da notação polonesa são as seguintes:
Sejam A e B fórmulas quaisquer. Escrevemos :
P1) ¬A ao invés de (¬A)
P2) ∧AB ao invés de (A ∧ B)
P3) ∨ AB ao invés de (A ∨ B)
P4) → AB ao invés de (A → B)
P5) ↔ AB ao invés de (A ↔ B)
a)
1.
Exemplo 1. Vamos escrever as seguintes fórmulas na notação polonesa:
((A ∧ B) → C)
→(A ∧ B)C
(P4)
96
2. →∧ABC
(P2)
a) (A ∨ ((B ∧ (¬C)) → D))
1. ∨A((B ∧ (¬C)) → D)
2. ∨A→(B ∧ (¬C))D
3. ∨A→∧B¬CD
4. ∨A→∧B¬CD
(P3)
(P4)
(P2)
(P1)
Exemplo 2. Dada a expressão → → AB →→ BC → ¬AC, em notação
polonesa, podemos transformá-la na notação original através dos seguintes
passos:
1) → → AB → → BC → (¬A)C
(P1)
2) → (A → B) → (B → C) (¬A) → C)
(P4)
3) → (A → B) ((B → C) → ((¬A) → C ))
(P4)
4) ((A → B) → ((B → C) → ((¬A) → C)))
(P4)
1.
2.
3.
4.
5.
6.
Exercício 1. Escrever na notação polonesa as seguintes fórmulas.
((¬(A → B)) → A),
((A → C) ∨ (B ∧ C)),
((A → B) → (E → (¬C))),
((A → C) → ((B → C) → ((A ∨ B) → C))),
((A → B) → ((A → (¬B)) → (¬A))),
((A → (B → C)) → ((A → B) → (A → C))).
Exercício 2. As seguintes expressões estão escritas na notação
polonesa. Escreva-as na forma original.
1. ¬¬¬A
2. →∧A¬BA
3. →→¬B¬A→AB
4. →→→AAAA
5. ∧A∧A∧AA
2.14 - Forma normal disjuntiva
O objetivo deste parágrafo é obter uma fórmula logicamente
equivalente a uma dada fórmula que é uma disjunção de conjunções de
fórmulas atômicas ou de suas negações, com certas condições. Essa fórmula
é muito útil em aplicações, principalmente em circuitos elétricos.
Definição 1 [Literal]. Qualquer fórmula atômica ou sua negação
chama-se literal.
1.
2.
3.
Exemplo 1. São exemplos de literais.
A
(¬B)
C
Exemplo 2. Não são literais:
97
1.
2.
(¬(¬B))
(A ∧ B)
Definição 2 [Conjunção fundamental]. Uma fórmula diz-se
conjuntiva fundamental se:
1. ou é um literal
2. ou é uma conjunção de dois ou mais literais, desde que não há
repetição de variáveis proposicionais.
1.
2.
3.
4.
5.
Exemplo 3. São exemplos de conjuntivas fundamentais.
{B ∧ [C ∧ (¬A)]}
A
(¬A)
{[(¬C) ∧ (¬B)] ∧ (¬A)}
(A ∧ B)
1.
2.
3.
Exemplo 4. Não são exemplos de conjuntivas fundamentais:
{[(¬A) ∧ (¬B)] ∧ (¬A)} (houve repetição da fórmula atômica A)
[¬(¬A)] (não é um literal)
{B ∧ [C ∧ (¬B)]} (houve repetição da fórmula atômica B)
Definição 3. Diz-se que uma conjuntiva fundamental A está contida
na conjuntiva fundamental B se todos os literais de A são também literais de
B.
1.
2.
3.
4.
Exemplo 5. Exemplos.
(A ∧ B) está contida em [(A ∧ B) ∧ C]
[C ∧ (¬A)] está contida em {B ∧ [C ∧ (¬A)]}
{B ∧ (¬A)]} está contida em {B ∧ [C ∧ (¬A)]}
A está contida em (¬A)
1.
2.
3.
Exemplo 6. Contra-exemplos.
(¬A) não está contida em [(A ∧ B) ∧ C]
[C ∧ (¬B)] não está contida em {B ∧ [C ∧ (¬A)]}
A não está contida em {B ∧ [C ∧ (¬A)]}
Definição 4. Diz-se que uma fórmula A está na forma disjuntiva
normal se:
1. ou A é uma conjunção fundamental
2. ou A é uma disjunção de duas ou mais conjunções fundamentais,
sendo que nenhuma delas está contida nas demais.
Exemplo 7. As seguintes fórmulas estão na forma disjuntiva
normal:
1. {B ∧ [C ∧ (¬A)]}
2. A
3. (¬A)
4. {[(¬C) ∧ (¬B)] ∧ (¬A)}
98
(A ∧ B)
[(¬A) ∨ A]
{[D ∧ (¬A)] ∨ [B ∧ [C ∧ (¬A)]]}
{{[D ∧ (¬A)] ∨ [B ∧ [C ∧ (¬A)]]} ∨ [(D ∧ C) ∨ A]}
Pode-se provar um resultado que toda função-verdade é
determinada por uma fórmula que contém somente ocorrências dos
conectivos ¬, ∧ ou ∨. Na realidade, o resultado que vamos expor através de
exemplos, já fornece uma fórmula na sua forma disjuntiva normal.
5.
6.
7.
8.
Método para obtenção de uma fórmula equivalente á uma na forma disjuntiva
normal.
Consideremos a fórmula S (com fórmulas atômicas componentes
A e B) que tenha por tabela-verdade:
A
B
S
1
1
0
1
0
1
0
0
1
0
1
1
Passo 1. Escolhemos apenas as linhas em que S é verdadeira. No caso são
as 2a, 3a e 4a linhas.
Passo 2. Para cada linha do passo anterior, olhamos apenas para as
atômicas e construímos uma fórmula conjuntiva fundamental assim:
2a linha - como A é verdadeira, mantemos A e como B é falsa, substituímos
por (¬B). Fórmula conjuntiva fundamental relativa á 2a linha: [A ∧ (¬B)].
3a linha - como A é falsa, substituímos por (¬A) e como B é verdadeira,
mantemos B.
Fórmula conjuntiva fundamental relativa á 3a linha: [(¬A) ∧ B].
4a linha - como A é falsa, substituímos por (¬A) e como B é falsa,
substituímos por (¬B). Fórmula conjuntiva fundamental relativa á 4a linha:
[(¬A) ∧ (¬B)].
Passo 3. Finalmente, para obtermos a forma disjuntiva normal é só
fazermos a disjunção das fórmulas obtidas, ou seja,
{[A ∧ (¬B)] ∨ [(¬A) ∧ B] ∨ [(¬A) ∧ (¬B)]}
Exercício 1. Faça a verificação, i.e., verifique que as tabelas-verdade
de S e de
{[A ∧ (¬B)] ∨ [(¬A) ∧ B] ∨ [(¬A) ∧ (¬B)]} são iguais.
Vejamos mais um exemplo.
Exemplo 8. Encontre uma fórmula disjuntiva normal equivalente a
{[(¬B) → C] ↔ [(¬A) ∧ B]}
99
Preliminarmente construamos sua tabela-verdade:
S ≡ {[(¬B) → C] ↔ [(¬A) ∧ B]}
[(¬B) → C]
[(¬A) ∧ B]
(¬B)
C
(¬A)
B
B
A
A
Β
1
1
1
1
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
1
0
[(¬Α) ∧ Β]
S
1
0
0
1
0
0
1
0
1
0
1
0
0
0
1
1
1
1
0
1
1
0
0
1
(¬Β)
(¬A)
[(¬Β) → C]
1
0
0
0
0
0
1
1
0
0
1
1
0
0
1
1
1
1
C
Passo 1. Linhas em que S são verdadeiras: 4, 5 e 8.
Passo 2. Fórmulas conjuntivas fundamentais:
Linha 4 - [A ∧ (¬B) ∧ (¬C)]
Linha 5 - [(¬A) ∧ B ∧ C]
Linha 8 - [(¬A) ∧ (¬B) ∧ (¬C)]
Passo 3. S ⇔ {[A ∧ (¬B) ∧ (¬C)] ∨ [(¬A) ∧ B ∧ C] ∨ [(¬A) ∧ (¬B) ∧ (¬C)]}
Logo, uma fórmula disjuntiva normal equivalente a
{[(¬B) → C] ↔ [(¬A) ∧ B]}
é a fórmula
{[A ∧ (¬B) ∧ (¬C)] ∨ [(¬A) ∧ B ∧ C] ∨ [(¬A) ∧ (¬B) ∧ (¬C)]}.
Exercício 2. Faça a verificação.
Exemplo 9. Encontre uma fórmula S cujas fórmulas atômicas são
A, B, C e D e cuja tabela-verdade é:
100
A
Β
C
1
0
1
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
D
S
1
1
0
1
0
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
1
0
0
0
0
1
0
Basta aplicar o método anterior.
Passo 1. Linhas que S são verdadeiras: 6, 10 e 15.
Passo 2: Fórmulas conjuntivas fundamentais:
Linha 6: [A ∧ (¬B) ∧ C ∧ (¬D)]
Linha 10: [(¬A) ∧ B ∧ C ∧ (¬D)]
Linha 15: [(¬A) ∧ (¬B) ∧ (¬C) ∧ D]
Passo 3. A fórmula solicitada é
S ≡ {[A ∧ (¬B) ∧ C ∧ (¬D)] ∨ [(¬A) ∧ B ∧ C ∧ (¬D)] ∨ [(¬A) ∧ (¬B) ∧ (¬C)
∧ D]}
Exercício 3. O leitor é convidado para fazer a verificação.
das
1.
2.
3.
4.
5.
6.
Exercício 4. Encontre uma fórmula na forma disjuntiva normal
seguintes fórmulas:
{[A → (B ∨ C)] ↔ (¬A)}
{¬[[(¬B) ∧ (¬(¬A))] ∧ [(A → B) ∨ (B → A)]]}
{[¬(A ∨ C)] → [A → (A → A)]}
{A → [A → (A → A)]}
{[(A ↔ B) ∧ A] → B}
{A → [(B → B) ∨ (A → A)]}
Exercício 5. Encontre fórmulas S1, S2, S3 e S4 cujas fórmulas
atômicas são A e B e cujas tabelas-verdade são:
101
A
B
S1
A
B
S2
1
1
0
1
1
0
1
0
1
1
0
1
0
0
1
0
0
1
0
0
1
0
1
0
A
B
S3
A
B
S3
1
1
0
1
1
1
1
0
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
1
Exercício 6. Encontre fórmulas S1, S2 e S3 cujas fórmulas atômicas
são A, B e C e cujas tabelas-verdade são:
A
B
C
S1
A
B
C
S2
A
B
C
S3
1
1
1
1
1
1
1
0
1
1
1
0
1
1
0
1
1
1
0
1
1
1
0
0
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
1
0
0
0
1
0
0
1
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
1
0
1
0
0
1
0
1
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
1
0
Exercício 7. Encontre fórmulas S1 e S2 cujas fórmulas atômicas
são A, B, C e D e cujas tabelas-verdade são:
A
B
C
D
S1
A
B
C
D
1
1
1
1
1
1
1
1
1
0
1
1
1
0
0
1
1
1
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
0
0
1
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
102
S2
2.15 - Uma axiomatização da lógica proposicional
Vamos introduzir a partir deste ponto uma teoria axiomática formal L
para a lógica proposicional. Tal teoria fica estabelecida quando damos,
inicialmente, o vocabulário de L, constituído pelos seguintes símbolos,
divididos em três categorias:
1. Variáveis proposicionais: Um conjunto enumerável de símbolos
denominadas de variáveis proposicionais.
2. Conectivos lógicos: ¬ (negação), ∧ (conjunção), ∨ (disjunção) e →
(implicação)
3. Símbolos auxiliares: (, ).
Passemos agora à gramática de L.
Definição 1. Qualquer seqüência finita de símbolos do vocabulário
de L, diz-se uma expressão de L.
Exemplo 1. São expressões de L, onde A e B são variáveis
proposicionais.
1. A¬∨)
2. (A → B)
3. ∧∨A(¬
Notamos intuitivamente que as expressões dadas em a) e c) são
destituídas de sentido, ao passo que a expressão b) constitui uma expressão
‘bem formada’; tal expressão fará parte do conjunto das expressões relevantes
de L.
Definição 2. Dadas as expressões A e B de L, a expressão:
(¬A) denomina-se a negação de A,
(A ∧ B) denomina-se a conjunção de A e B (ou, simplesmente, conjunção),
(A ∨ B) denomina-se a disjunção de A e B (ou, simplesmente, disjunção),
(A → B) denomina-se a implicação de B por A ( ou, simplesmente, implicação).
Observação. Uma vez mais enfatizamos que os símbolos A e B,
utilizados na definição anterior, não pertencem aos símbolos do vocabulário
de L; constituem variáveis (denominadas meta-variáveis) que servem para
designar expressões quaisquer de L.
As expressões relevantes de L (denominadas fórmulas) para o discurso
matemático são dadas pela seguinte definição indutiva.
Definição 3. Uma expressão A diz-se uma fórmula se existir uma
seqüência finita de expressões (B1, ... ,Bn) (n ≥ 1) tal que, para cada i, 1 ≤ i ≤
n:
1. ou Bi é uma fórmula atômica;
2. ou Bi é uma negação, conjunção, disjunção, implicação, de expressões
anteriores da seqüência,
103
3.
Bn é A.
Exemplo 2. Sejam A, B e C fórmulas atômicas. São exemplos de
fórmulas:
1) ((A ∨ B) ∧ C). Basta tomar a seqüência (A, B, C, (A ∨ B), ((A ∨ B) ∧ C))
ou, mais didaticamente, escrevemos na coluna:
1. A
(atômica)
2. B
(atômica)
3. C
(atômica)
4. (A ∨ B)
(1, 2, disjunção)
5. ((A ∨ B) ∧ C))
(4, 3, conjunção)
De modo óbvio possui a seguinte árvore de decomposição:
((A ∨ B) ∧ C)
(A ∨ B)
A
C
B
Exemplo 3. a) (A → B) é uma fórmula, pois é dada pela seqüência (A,
B, (A → B).
b) (¬(¬(¬A))) também é uma fórmula, pois é dada pela seqüência (A,
(¬A), (¬(¬A)), (¬(¬(¬A))).
Podemos agora introduzir (por definição) o conectivo ↔ da biimplicação.
Definição 4. Sejam A e B fórmulas de L. Ponha-se:
(A ↔ B) = ((A → B) ∧ (B → A)).
Note-se que (A ↔ B) constitui uma fórmula de L, denominada de biimplicação de A e B (ou, simplesmente, uma bi-implicação).
Adotamos a regra de eliminação de parênteses vista em 2.6.
Adotaremos os seguintes postulados (esquemas de axiomas e regras
de inferência) para a linguagem proposicional L, apresentados por [Kleene
52].
Sejam A , B e C fórmulas quaisquer :
(→1) [A → (B → A)]
(→2) {[A → (B → C)] → [(A → B) → (A → C)]}
(∧1) [(A ∧ B) → A]
(∧2) [(A ∧ B) → B]
(∧3) {A → [B → (A ∧ B)]}
(∨1) [A → (A ∨ B)]
(∨2) [B → (A ∨ B)]
(∨3) {(A → C) → [(B → C) → [(A ∨ B) → C]]}
(¬1) {(A → B) → [[A → (¬B)] → (¬A)]}
104
(¬2) [(¬(¬A)) → A]
(MP) (Modus Ponens)
Observação. Note-se que os esquemas de axiomas acima abreviam
uma infinidade de fórmulas (axiomas). Cada axioma de um esquema de axiomas
correspondente diz-se ser uma instanciação ou instância daquele esquema
de axiomas. Os exemplos abaixo ilustram esse fato.
Exemplo 4.
A fórmula A1 → (A2 → A1) é um axioma, que por sua vez é uma
instanciação (ou instância) de (→1).
b) Idem, em relação à fórmula A5 → (A5 → A5).
c) Idem, para a fórmula (¬A1) → (A10 → (¬A1)).
d) Idem, para (A1 → A2) → ((A3 ∧ A1) → (A1 → A2)).
e) {[(A ∨ C) ∧ (C ∨ B)] → (C ∨ B)} é um axioma; é uma instanciação (ou
instância) de (∧2)
a)
Observação. Observe-se que, dada uma fórmula de L, podemos
verificar, sem dificuldade, se ela constitui um axioma ou não. As lógicas que
possuem esta propriedade são chamadas axiomáticas.
Logo, pela observação precedente, a lógica proposicional é axiomática.
Vejamos, em seguida, algumas noções sintáticas centrais, como as de
demonstração (ou prova) e de Teorema.
Definição 5. Uma demonstração (ou prova) em L é uma seqüência
finita de fórmulas (A1, A2, ..., An) tal que, para cada i, 1 ≤ i ≤ n,
1. ou Ai é um axioma,
2. ou Ai é conseqüência direta de algumas fórmulas precedentes da seqüência
pela aplicação da regra de Modus Ponens.
Exemplo 5. A seguinte seqüência de fórmulas (A1, A2, A3) constitui
uma demonstração, pois:
A1 ≡ (A → ((A → A) → A)) → ((A → (A → A)) → (A → A))
(→2)
A2 ≡ A → ((A → A) → A)
(→1)
A3 ≡ (A → (A → A)) → (A → A)
(A 1 , A 2 ,
MP)
Definição 6. Uma fórmula A de L denomina-se um teorema (de L) se
existir uma demonstração (A1, A2, ..., An) tal que An = A. Uma tal seqüência dizse ser uma demonstração de A.
Exemplo 6. A fórmula (A → (A → A)) → (A → A) constitui um teorema
de L, pois a seqüência (A1, A2, A3), vista no exemplo anterior, constitui uma
demonstração tal que A3 é (A → (A → A)) → (A → A).
Notação. Se uma fórmula A constituir um teorema de L, simbolizamos
105
esse fato por | A (ou, simplesmente | A). assim, no exemplo anterior,
temos que | (A → (A → A)) → (A → A).
Observação. 1. Pela definição anterior, concluímos que todo axioma
de L constitui um teorema de L. Com efeito, se A é um axioma de L, a seqüência
(A1), onde A1 = A , constitui uma demonstração de A.
2. Dado um teorema A de L, existem infinitas demonstrações de A. Com
efeito, seja (A1, A2, ..., An) uma demonstração de A. Podemos inserir um axioma
na seqüência anterior (desde que não seja como último elemento) e temos
obviamente uma nova demonstração de A. Podemos repetir o processo e,
assim, temos uma infinidade de demonstrações de A.
Teorema 1 (Lei da Identidade do Cálculo Proposicional). Temos que
| (A → A), para toda fórmula A.
Demonstração 4:Consideremos a seguinte demonstração de (A → A):
1. [(A → ((A → A)) → ((A → (A → A)) → (A → A))]
(→2)
2. [A → ((A → A) → A)]
(→2)
3. [(A → (A → A)) → (A → A)]
(1, 2, MP)
4. [A → (A → A)]
(→1)
5. (A → A)
(3, 4, MP)
Suponhamos, agora, que queremos saber quais sentenças são
dedutíveis a partir de um conjunto de sentenças (premissas ou hipóteses
(verdadeiras ou não)). Temos que lançar mão dos conceitos seguintes:
Definição 7. Seja Γ um conjunto de fórmulas. Uma dedução a partir
do conjunto Γ de fórmulas é uma seqüência finita de fórmulas (A1, A2, ... , An)
tal que, para todo i, 1 ≤ i ≤ n, uma das condições abaixo se verifica:
1. ou Ai é um axioma,
2. ou Ai ∈ Γ,
3. ou Ai é obtida de fórmulas anteriores pela regra do Modus Ponens.
Exemplo 7. Seja Γ = { A → B, B → C}. Então, a seqüência de fórmulas:
1. A → B
(elemento de Γ)
2. B → C
(elemento de Γ)
3. (A → (B → C)) → ((A → B) → (A → C))
(→2)
4. (B → C) → (A → (B → C))
(→1)
5. A → (B → C)
(2, 4, MP)
6. (A → B) → (A → C)
(3, 6, MP)
7. A → C
(1, 6, MP)
constitui uma dedução a partir de Γ.
5
O leitor deve prestar atenção ao duplo emprego das palavras ‘teorema’ e ‘demonstração’. É claro que tais palavras já possuem significados técnicos precisos, vistos no
texto. A palavra ‘teorema’ do ‘Teorema 1’, entretanto, se refere a uma afirmação da
sintaxe da linguagem proposicional; é, pois, em realidade, um ‘meta-teorema’; a palavra ‘demonstração’ que a acompanha constitui a demonstração do ‘meta-teorema’
correspondente.
106
Definição 8. Uma fórmula A diz-se uma conseqüência sintática de um
conjunto Γ de fórmulas se existir uma dedução a partir de Γ (A1, A2, ... , An) tal
que An coincide com A. Uma tal seqüência se denomina dedução de A a partir
de Γ.
Logo, uma fórmula A constitui uma conseqüência sintática de Γ se for
o último termo de uma dedução a partir de Γ. Os membros de Γ chamam-se
hipóteses ou premissas da dedução. Utilizamos o símbolo
Γ | A (ou simplesmente Γ | A)
para abreviarmos que A é conseqüência sintática de Γ.
Quando Γ for um conjunto finito {B1, ... , Bn} escrevemos
B1, ... , Bn | A
ao invés de {B1, ..., Bn} | A
Note-se que também
Γ, B1, ... , Bn | A
abrevia Γ ∪ {B1, ... , Bn} | A (em particular, Γ, B | A abrevia Γ ∪ {B} | A)
Lema 1. Seja A uma fórmula. Então, ∅ | A se e somente se A for um
teorema (isto é, | A).
Demonstração. Imediata.
Teorema 2. As seguintes propriedades são válidas:
1. Se Γ ⊂ ∆ e Γ | A, então ∆ | A.
2. Γ | A se e somente se existir um conjunto finito ∆ de Γ tal que ∆ | A.
3. Se ∆ | A e, para cada B em ∆ , Γ | B, então Γ | A.
Demonstração: 1. Imediata.
2. (⇐) conseqüência de 1.
(⇒) Se Γ | A, existe uma (A1, ... , An) dedução de A a partir de Γ. Seja ∆ =
{Ai | Ai ∈ Γ). É imediato que ∆ ⊆ Γ, ∆ é finito e ∆ | A.
3. Suponhamos que ∆ | A. Então existe uma dedução (A1, ... , An) de A a
partir de ∆. Seja {Aj1, ... , A jk} o conjunto dos elementos da dedução que são
elementos de ∆. Pela hipótese, para cada x, 1 ≤ x ≤ k, tem-se que
Γ | Ajx
Seja (Bjx1, ... , Bjxn) uma dedução de Ajx a partir de Γ.
Construímos uma nova seqüência A partir de (A1, ... , An), substituindo
cada Ajx pela seqüência correspondente considerada acima. Esta nova
seqüência constitui uma dedução de A a partir de Γ.
Exemplo 8. Do exemplo 7 concluímos que a fórmula A → C é uma
conseqüência sintática de Γ = { A → B, B → C}, ou seja:
A → B, B → C | A → C.
1.
2.
3.
Exemplo 9. A → (B → C) | B → (A → C).
Demonstração:
A → (B → C)
[A → (B → C)] → [(A → B) → (A → C)]
[(A → B) → (A → C)]
107
(hipótese)
(→2)
(1, 2, MP)
4. B → (A → B)
5. B → (A → C).
exemplo anterior)
(→1)
(4,
3,
Teorema 3. Sejam Γ um conjunto de fórmulas e A, B fórmulas
quaisquer. Se Γ | A e Γ | A → B, então Γ | B.
Demonstração: Sejam (A1, ... , An) uma dedução de A a partir de Γ e (B1,
... , Bm) uma dedução de A → B a partir de Γ. Consideremos a seqüência (A1,
..., An-1, A, B1, ... , Bm-1, A → B, B). É imediato que esta última seqüência
constitui uma dedução de B a partir de Γ (B é obtida de A e A → B por meio
de Modus Ponens).
Em muitos resultados da Matemática, freqüentemente, demonstramos
uma proposição B assumindo uma outra proposição A; concluímos, então ,
que ‘Se A então B’ é verdadeira.
Exemplo 10. “Se f: [0, 1] → ℜ é uma função derivável, então f é uma
função contínua”.
Assumimos que f é derivável e demonstramos, a partir daí, que f é
contínua. Fica assim demonstrado que “Se f é derivável, então f é contínua”.
Este procedimento é justificado, para o cálculo proposicional, pelo
Teorema da Dedução, que veremos a seguir.
Teorema 4. (Teorema da Dedução). Sejam Γ um conjunto de fórmulas,
A e B fórmulas e Γ, A | B. Então Γ | A → B. Em particular, se A | B, então
| A → B (Herbrand, 1930).
Demonstração: Sejam (B1, B2, ... , Bn) uma dedução de B a partir de Γ
∪ {A}. Afirmamos que
Γ | A → Bi, 1 ≤ i ≤ n.
Procedemos por indução finita sobre i:
1) i = 1. Temos que
1. B1 é axioma,
2. B1 ∈ Γ,
3. B1 é A.
Nos casos 1 e 2 temos que
i. B1 → (A → B1) (→1)
ii. B1 (hipótese ou axioma)
iii. A → B1 (1,2,MP)
iv. Γ | A → B1.
No caso 1.3, temos que:
| A → B1 (pelo Teorema 1)
Γ | A → B1 (pelo Teorema 2)
2) assumimos que Γ | A → Bk, para 1 ≤ k < 1 < n.
Consideremos a fórmula Bi:
1. Bi é axioma,
2. Bi ∈ Γ,
3. Bi é A,
4. Bi é obtida pela aplicação do MP de duas fórmulas Bj e Bm anteriores da
108
seqüência, onde Bm é Bj → Bi, j, m < i.
Nos casos 2.1, 2.2, 2.3, o procedimento é análogo ao dos casos 1.1, 1.2 e 1.3,
respectivamente, do item anterior.
analisemos agora 2.4. Temos que:
(hipótese de indução)
i. Γ | A → Bj
ii. Γ | A → (Bj → Bi)
(hipótese de indução)
iii. | (A → (Bj → Bi)) → ((A → Bj) → (A → Bi))
(→2)
iv. Γ | (A → Bj) → (A → Bi)
(ii, iii, Teorema 3)
v. Γ | A → Bi
(i, iv, Teorema 3)
Logo, temos que Γ | A → Bi, 1 ≤ k ≤ n.
Em particular, para k = n, temos que
Γ | A → B.
Lema 2.
1) A → A, B → C | A → C
2) A → (B → C) | B → (A → C).
3) | A → ((A → B) → B).
Demonstração:
1) A → A, B → C | A → C
1. A → B
(hipótese)
2. B → C
(hipótese)
3. A
(1, 3, MP)
4. C
(2, 4, MP)
Concluímos que A → B, B → C, A | C, donde, pelo Teorema da
Dedução, advém que A → B, B → C | A → C.
2) A → (B → C) | B → (A → C).
1. A → (B → C)
(hipótese)
2. B
(hipótese)
3. A
(hipótese)
4.
B→C
(1, 3, MP)
5.
C
(2, 4, MP)
∴φ0 Α → (B → C), B , A | C.
∴φ0 Α → (B → C) | B → (A → C) (Teorema da Dedução).
3) | A → ((A → B) → B).
1. A
(hipótese)
2. A → B
(hipótese)
3.
B
+(1, 2, MP)
∴φ0 | A → ((A → B) → B) (Teorema da Dedução).
1)
2)
3)
4)
5)
6)
Lema 3. Sejam A e B fórmulas quaisquer de L. São teoremas:
B → ¬¬B
¬A → (A → B)
(¬B → ¬A) → (A → B)
(A → B) → (¬B → ¬A)
A → (¬B → ¬(A → B))
(A → B) → ((¬A → B) → B)
109
1)
1.
2.
3.
4.
5.
6.
7.
8.
9.
Demonstração:
B → ¬¬B
B
B → (¬B → B)
¬B → B
(¬B → B) → ((¬B → ¬B) → ¬¬B)
(¬B → ¬B) → ¬¬B
¬B → ¬B
¬¬B
B | ¬¬B
| B → ¬¬B
2) ¬A → (A → B)
1. ¬A
2. A
3. A → (¬B → A)
4. ¬B → A
5. ¬A → (¬B → ¬A)
6. ¬B → ¬A
7. (¬B → A) → ((¬B → ¬A) → ¬¬B)
8. ¬¬B
9. ¬¬B → B
10. B
11. ¬A → (A → B)
3) (¬B → ¬A) → (A → B)
1. ¬B → ¬A
2. A
3. A → (¬B → A)
4. ¬B → A
5. (¬B → A) → ((¬B → ¬A) → ¬¬B)
6. (¬B → ¬A) → ¬¬B
7. ¬¬B
8. ¬¬B → B
9. B
10. (¬B → ¬A) → (A → B)
4) (A → B) → (¬B → ¬A)
1. A → B
2. ¬B
3. (A → B) → ((A → ¬B) → ¬A)
4. (A → ¬B) → ¬A
5. ¬B → (A → ¬B)
6. A → ¬B
7. ¬A
8. (A → B) → (¬B → ¬A)
(hipótese)
(→1)
(1, 2, MP)
(¬1)
(3, 4, MP)
(Teorema 1)
(5, 6, MP)
(Teorema da Dedução).
(hipótese)
(hipótese)
\(→1)
(2, 3, MP)
(→1)
(1, 5, MP)
(¬1)
(4, 6, 7, MP)
(¬2)
(8, 9, MP)
(Teorema da Dedução)
(hipótese)
(hipótese)
(→1)
(2, 3, MP)
(4, 5, MP)
(5, 6, MP)
(¬2)
(7, 8, MP)
(Teorema da Dedução)
(hipótese)
(hipótese)
(¬2)
(1, 3, MP)
(→1)
(2, 5, MP)
(4, 6, MP)
(Teorema da Dedução)
5) A → (¬B → ¬(A → B))
1. A
(hipótese)
110
2.
3.
4.
5.
6.
¬B
| A → ((A → B) → B)
| ((A → B) → (¬B → ¬(A → B))
| A → (¬B → ¬(A → B))
| ¬(A → B)
6) (A → B) → ((¬A → B) → B)
1. A → B
2. ¬A → B
3. | (A → B) → (¬B → ¬A)
4. | ¬B → ¬A
5. | ¬B → B
6. (¬B → B) → ((¬B → ¬B) → ¬¬B)
7. (¬B → ¬B) → ¬¬B
8. | ¬B → ¬B
9. | ¬¬B
10. ¬¬B → B
(¬2)
11. | B
(hipótese)
(lema 2, item 3)
(lema 3, item 4)
(3, 4, lema 2, item 1)
(1, 2, 5, MP)
(hipótese)
(hipótese)
(lema 2.8.3, item 4)
(1,2,MP)
(4, 2, lema 2, item 1) (¬1)
(¬1)
(5, 6, MP)
(Teorema 1)
(7, 8, MP)
(9, 10, MP)
Lema 4. Sejam A, B, C fórmulas quaisquer. São teoremas:
1) ¬A → (C → ¬(A ∧ B))
1. ¬A
(hipótese)
2. C
(hipótese)
3. ((A ∧ B) → A) → (((A ∧ B) → ¬A) → ¬(A ∧ B))
(¬1)
4. A ∧ B → A
(∧1)
5. ((A ∧ B) → ¬A) → ¬(A ∧ B)
(1.3, 1.4, MP)
6. ¬A → ((A ∧ B) → ¬A)
(→1)
7. (A ∧ B) → ¬A
(1, 6, MP)
8. ¬(A ∧ B)
(5, 7, MP)
∴φ0 | ¬A → (C → ¬(A ∧ B))
(Teorema da Dedução)
2) A → (C → (A ∨ B))
1. A
2. C
3. A → (A ∨ B)
4. A ∨ B
∴φ0 | A → (C → (A ∨ B))
(hipótese)
(hipótese)
(∨1)
(1, 3, MP)
(Teorema da Dedução)
3) B → (C → (A ∨ B))
1. B
2. C
3. B → (A ∨ B)
4. A ∨ B
∴φ0 | B → (C → (A ∨ B))
(hipótese)
(hipótese)
(∨2)
(1, 3, MP)
(Teorema da Dedução)
4) ¬(A ∨ B) → ¬A ∧ ¬B
1. ¬(A ∨ B)
(hipótese)
111
2.
3.
4.
5.
6.
7.
8.
9.
A→A∨B
¬(A ∨ B) → ¬A
¬A
B→A∨B
¬(A ∨ B) → ¬B
¬B
¬A → (¬B → (¬A ∧ ¬B))
(¬A ∧ ¬B)
∴φ0 | ¬(A ∨ B) → ¬A ∧ ¬B
(∨1)
(2, lema 2, item 4)
(1, 3, MP)
(∨2)
(5, lema 2, item 4)
(4.5, 4.6, MP)
(∧3)
(4, 7, 8, MP)
(Teorema da Dedução)
5) A → ¬(¬A ∧ ¬B)
1. A
(hipótese)
2. ((¬A ∧ ¬B) → A) → (((¬A ∧ ¬B) → ¬A) → ¬(¬A ∧ ¬B)) (¬1)
3. A → ((¬A ∧ ¬B) → A)
(→1)
4. (¬A ∧ ¬B) → A
(1, 3, MP)
5. (¬A ∧ ¬B → ¬A) → ¬(¬A ∧ ¬B)
(2, 4, MP)
6. (¬A ∧ ¬B) → ¬A
(∧1)
7. ¬(¬A ∧ ¬B)
(5, 6, MP)
∴φ0 | A → ¬(¬A ∧ ¬B)
(Teorema da Dedução)
6) B → ¬(¬A ∧ ¬B)
1. B
(hipótese)
2. (¬A ∧ ¬B → B) → ((¬A ∧ ¬B → ¬B) → ¬(¬A ∧ ¬B))
(¬1)
3. B → (¬A ∧ ¬B → B)
(→1)
4. ¬A ∧ ¬B → B
(1, 3, MP)
5. (¬A ∧ ¬B → ¬B) → (A ∧ B)
(4, 2, MP)
6. ¬A ∧ ¬B → ¬B
(∧2)
7. ¬(¬A ∧ ¬B)
(5, 6,MP)
∴φ0 | B → ¬(¬A ∧ ¬B)
(Teorema da Dedução)
7) A ∨ B → ¬(¬A ∧ ¬B)
1. A ∧ B
(hipótese)
2. (A → ¬(¬A ∧ ¬B)) → ((B → ¬(¬A ∧ ¬B)) → ((A ∨ B) → ¬(¬A ∧ ¬B)))
(∨3)
3. | A → ¬(¬A ∧ ¬B)
(item 5 deste lema)
4. | B → ¬(¬A ∧ ¬B)
(item 6 deste lema)
5. ¬(¬A ∧ ¬B)
(1, 2, 3, 4, MP)
∴φ0 | A ∨ B → ¬(¬A ∧ ¬B)
(Teorema da Dedução)
8) (¬A ∧ ¬B) → ¬(A ∨ B)
1. A ∨ B → ¬(¬A ∧ ¬B)
2. ¬¬(¬A ∧ ¬B) → ¬(A ∨ B)
3. ¬A ∧ ¬B → ¬¬(¬A ∧ ¬B)
4. ¬A ∧ ¬B → ¬(A ∨ B)
1).
(item 7 deste lema)
(lema 3, item 4)
(lema 3, item 1)
(3, 2, lema 2, item
Teorema 5. Seja A uma fórmula, cujas fórmulas atômicas são A1, A2,...,
Am. Seja (x1, x2, ..., xm) uma dada associação de valores-verdade de A1, A2, ...,
112
Am, respectivamente. Consideremos a seqüência de fórmulas A’1, A’2, ..., A’m,
tal que
A’i =
Seja
A’ =
para a associação de valores-verdade considerada,
.
Nestas condições, afirmamos que
A’1, ..., A’m | A’.
Demonstração: Procedemos por indução no número n de ocorrências
dos conectivos em A.
1. n = 0. Neste caso, A constitui uma fórmula atômica A1. Temos que
A1
A1’
A’
1
A1
A1
0
¬A1
¬A1
Logo, temos que A’1 é A1 e A é A1 no caso correspondente à primeira
associação, e A’1 é ¬A1 e A é ¬A1 no caso da segunda. Em ambos os casos
temos que
A1 | A1 e ¬A1 | ¬A1, de modo óbvio.
2. Suponhamos a proposição verdadeira para toda fórmula que possua menos
de n ocorrências dos conectivos (n > 0). Seja (x1, ..., xm) uma associação de
valores-verdade. Consideremos uma fórmula A com n ocorrências dos
conectivos lógicos. Pela lei de formulação de fórmulas, A só pode ser dos
tipos
1 ¬B,
2. B ∧ C,
3. B ∨ C ou
4. B → C.
Caso 1. A é ¬B
Notemos, preliminarmente, que B possui exatamente n - 1 ocorrências
de conectivos e, portanto, podemos aplicar a hipótese da indução para B.
Subcaso 1.1. B toma o valor 1 para a associação de valoresverdade considerada. Então B’ é B. Por outro lado, A toma o valor 0. Logo, A’
é ¬A (isto é, ¬¬B).
Pela hipótese da indução, tem-se que
B’1, ..., B’m | B.
Porém, pelo Lema 3, item 1, e Lema 2, advém que
B’1, ..., B’m | ¬¬B.
Mas ¬¬B é A’. Logo,
B’1, ..., B’m | A’.
Subcaso 1.2. B toma o valor 0. Então B’ = ¬B e A’ = A, pois A
toma o valor 1. Pela hipótese da indução, temos que
B’1, ..., B’m | B’,
ou seja,
B’1, ..., B’m | ¬B,
113
Porém, ¬B é A’. Logo,
B’1, ..., B’m | A’.
Caso 2. A é B ∧ C.
Notemos que a referida propriedade é válida para B e C (pois ambas
possuem número de ocorrências de conectivos estritamente menor que n).
Assim,
B’1, ..., B’m | B’ e
B’1, ..., B’m | C’.
Subcaso 2.1. B e C toma valor 1. Então B’ é B, C’ é C e A’ é A.
B’1, ..., B’m | B e
B’1, ..., B’m | C.
Pelo axioma (∧3) advém que | B → (C → (B ∧ C)).
Por conseguinte, pelo Teorema 3, temos
B’1, ..., B’m | B ∧ C.
Porém, B ∧ C é A. Logo,
B’1, ..., B’m | A’.
Subcaso 2.2.2. B toma o valor-verdade 0 e C toma o valor 1.
Então B’ é ¬B, C’ é ¬C e A’ é ¬A.
B’1, ..., B’m | ¬B e
B’1, ..., B’m | C.
Pelo Lema 4, item 1, advém que
| ¬B → (C → ¬(B ∧ C)). Daí
B’1, ..., B’m | ¬(B ∧ C) (Teorema 3).
Porém, ¬(B ∧ C) é A’. Logo,
B’1, ..., B’m | A’.
Subcaso 2.2.3. Para os caso em que B toma o valor 1 e C o
valor 0, e B e C tomam ambos valor 0, a demonstração é semelhante à do caso
anterior.
Caso 2.3. A é B ∨ C
Novamente, a propriedade é válida para B e C. Logo,
B’1, ..., B’m | B‘ e
B’1, ..., B’m | C‘.
Subcaso 2.3.1. B e C toma valor 1. Logo, B’ é B, C’ é C e A’ é A.
B’1, ..., B’m | B e
B’1, ..., B’m | C.
Pelo Lema 2.8.4, item 2, advém que
| B → (C → (B ∨ C)).
logo, pelo Teorema 3 , segue-se que
B’1, ..., B’m | B ∨ C.
Porém, B ∨ C é A’. Portanto,
B’1, ..., B’m | A’.
Subcaso 2.3.2. quando B ou C toma valor 1, a demonstração é
análogo à do subcaso anterior.
Subcaso 2.3.3. B e C tomam valor 0. Logo, B’ é ¬B, é ¬C e A’
é ¬A.
B’1, ..., B’m | ¬B e
114
B’1, ..., B’m | ¬C.
Pelo Lema 2, item 4, advém que
¬B, ¬C | ¬B ∧ ¬C.
Pelo Lema 2, item 8, segue-se que
| (¬B ∧ ¬C) → ¬(B ∨ C).
Combinando os resultados anteriores, temos
B’1, ..., B’m | ¬(B ∨ C).
Porém ¬(B ∨ C) é A’. Logo,
B’1, ..., B’m | A’.
Caso 2.4. A é B → C
B e C possuem número de ocorrências de conectivos estritamente
menores que n. Logo, a propriedade é válida para B e C.
B’1, ..., B’m | B’ e
B’1, ..., B’m | C’.
Subcaso 2.4.1. B toma o valor 0. Logo , B’ é ¬B e A’ é A.
B’1, ..., B’m | ¬B
Pelo Lema 3, item 2, advém que
| ¬B → (B → C).
Logo, B’1, ..., B’m | B → C.
Porém, B → C é A’. assim,
B’1, ..., B’m | A’.
Subcaso 2.4.2. B toma valor 1 e C toma valor 0. Então B’ é B, C’
é ¬C e A’ é ¬A.
B’1, ..., B’m | B e
B’1, ..., B’m | ¬C.
Pelo Lema 3, item 5, temos que
| B → (¬C → ¬(B → C)).
Logo, B’1, ..., B’m | ¬(B → C).
Porém, ¬(B → C) é A’. assim,
B’1, ..., B’m | A’.
Subcaso 2.4.3. B e C tomam valor 1. Logo, B’ é B, C’ é C e A’ é
A.
B’1, ..., B’m | B
B’1, ..., B’m | C.
Temos que C → (B → C) é um axioma. Logo,
B’1, ..., B’m | B → C. Porém B → C é A’. assim,
B’1, ..., B’m | A’.
E o teorema está demonstrado.
Exemplo 11. Suponhamos que a seja a fórmula ¬(A ∨ (¬B)):
B
(¬B)
(A ∨ (¬B))
1
1
0
1
1
1
0
1
1
0
0
1
0
0
1
0
0
1
1
0
A
115
¬(A ∨ (¬B))
Temos, então:
1a linha: A, B | ¬¬(A ∨ (¬B))
2a linha: A, ¬ B | ¬¬(A ∨ (¬B))
3a linha: ¬A, B | ¬(A ∨ (¬B))
4a linha: ¬A, ¬B | ¬¬(A ∨ (¬B)).
Exemplo 12. Suponhamos que a seja a fórmula {A → [(¬B) ∧ C]}
C
(¬B)
[(¬B) ∧ C]
{A → [(¬B) ∧ C]}
1
1
0
0
0
1
0
0
0
0
1
0
1
1
1
1
1
0
0
1
0
0
0
1
1
0
0
1
0
1
0
0
0
1
0
0
1
1
1
1
0
0
0
1
0
1
A
B
1
1
Temos, então:
1a linha: A, B, C | ¬{A → [(¬B) ∧ C]}
2a linha: A, B, ¬C | ¬{A → [(¬B) ∧ C]}
3a linha: ¬A, ¬B, C | {A → [(¬B) ∧ C]}
4a linha: ¬A, ¬B, ¬C | ¬{A → [(¬B) ∧ C]}
5a linha: A, B, C | {A → [(¬B) ∧ C]}
6a linha: A, B, ¬C | {A → [(¬B) ∧ C]}
7a linha: ¬A, ¬B, C | {A → [(¬B) ∧ C]}
8a linha: ¬A, ¬B, ¬C | {A → [(¬B) ∧ C]}
Exercício 1. Aplique o teorema anterior para obter todas as deduções
possíveis:
1. {A → [(B ∧ C) → (A → C)]}
2. {(B ∨ A) ∧ A}
3. {A ∧ [(B ∧ A) ∨ (A ∨ B)]}
4. [(B → A) → A]
Teorema 6. (Teorema da Correção). Se A é um teorema de L, então A
constitui uma tautologia de L.
Demonstração: Notemos, inicialmente, que todos os axiomas de L
são tautologias. Se as premissas da regra de Modus Ponens são tautologias,
então ao conclusão também é uma tautologia. Logo, todo teorema é uma
tautologia.
A recíproca do último teorema também é válida, e conhecida como o
Teorema da Correção. Ela mostra-nos que o cálculo proposicional é completo.
Existem muitas demonstrações deste teorema; a que apresentamos abaixo é
devida a L. Kalmár (1935).
Teorema 7. (Teorema da Completeza). Se A é uma tautologia de L,
116
então a constitui um teorema de L.
Demonstração: Seja A uma tautologia. Sejam A1, A2, ..., An as fórmulas
atômicas componentes de A. Para cada associação de valores-verdade às
componentes A1, A2, ..., An, respectivamente, temos que (utilizando as
notações do teorema anterior):
A’1, A’2, ..., A’n | A (A’ é A, pois A é uma tautologia).
Fixados os n - 1 primeiros valores-verdade da associação em questão,
temos as seguintes possibilidades:
1. o valor-verdade de An é 1. Então A’1, ..., A’n-1, An | A.
2. o valor-verdade de An é 0. Então A’1, ..., A’n-1, ¬An | A.
Pelo Teorema da Dedução advém que
A’1, ..., A’n-1 | An → A e
A’1, ..., A’n-1 | ¬An → A.
Pelo Lema 2.8.3, item 6, Advém que
| (An → A) → ((¬An → A) → A).
Donde concluímos que
A’1, ..., A’n-1 | A
Repetindo o raciocínio acima, após n passos obtemos, então:
| A.
Definição 9. O cálculo proposicional diz-se consistente se não existirem
teoremas ? A e ? (¬A).
Definição 10. O cálculo proposicional diz-se trivial se todas as suas
fórmulas forem teoremas. Em caso contrário, o cálculo proposicional diz-se
não-trivial.
Teorema 8. (Consistência). O Cálculo proposicional L é consistente,
isto é, não existe fórmula A tal que | A e | ¬A.
Demonstração: Suponhamos, por absurdo, que uma tal fórmula A
exista. Então, pelo Teorema 2.8.6., A e ¬A são tautologias, o que é impossível.
Finalmente, temos mais uma caracterização para a consistência de L.
Teorema 9. O cálculo proposicional L é consistente se e somente se
ele for não-trivial.
Demonstração: (⇒) Com efeito, se todas as fórmulas forem
teoremas, então |A e | ¬A para alguma fórmula A, o que é contraditório.
(⇐) Se L não for consistente, então | A e | ¬A para alguma fórmula
A. Pelo Lema 3, advém que
1. | ¬A → (A → B)
2. | A
3. | ¬A
4. | B (pelo Teorema 3).
Logo, qualquer fórmula B de L é um Teorema, o que contraria a
hipótese.
117
2 O CÁLCULO DE PREDICADOS
2.1 - Lógica e gramática
No cálculo proposicional estudamos o raciocínio proposicional. Porém, apesar de importante, ela não consegue expressar sentenças elementares importantes tais como da aritmética elementar. Não há meios de simbolizar substantivos comuns ou próprios, adjetivos, pronomes, verbos, ou advérbios.
Gostaríamos de desenvolver uma linguagem formal que pudesse ser suficiente para expressar qualquer conjunto relevante de fatos sistemáticos. Cuidaremos de cobrir algumas insuficiências da lógica proposicional, e para
isso construiremos uma nova linguagem, mais rica definindo dois novos
símbolos e novamente definindo fórmula, dedução, etc. Abaixo citaremos
um exemplo daquilo que a lógica proposicional não conseguiria tratar. Poderíamos explicitar pela lógica proposicional a diferença entre as duas sentenças a seguir?
A ≡ Todos são mortais.
B ≡ Alguém é bondoso.
Na lógica proposicional as duas sentenças acima seriam tratadas
como unidades, isto é, não teríamos como “decompo-las” em sentenças
menores ligadas pelos conectivos lógicos, daí não poderíamos falar da diferença entre estas duas sentenças na lógica proposicional.
O que passamos a ver agora é como formar novas sentenças a partir
do tratamento de substantivos, adjetivos e predicados, mas antes faremos
uma breve recordação de leituras de algumas sentenças fazendo uso de
palavras como alguns, todos, existem, nem todos, não existem, etc. Tais
palavras dão as sentenças uma nova abrangência, por exemplo:
Existem cavalos com patas verdes.
A sentença acima diz que existem cavalos com a propriedade de as
1
Esta linguagem será naturalmente mais rica, no sentido de podermos nos referir e tratar
explicitamente qualidades e relações, introduzindo-se constantes individuais e variáveis.
As constantes para fazer referência aos objetos de que se trata, e variáveis para nos
referirmos a objetos (de um conjunto determinado) não especificados.
2
Os substantivos, adjetivos e predicados mencionados são os gramaticais.
119
patas serem verdes; a idéia é elaborar uma linguagem que trate de sentenças
como a do exemplo acima. Relembrando temos que as sentenças são constituídas, quase sempre, de dois termos, respectivamente
a ) o ser (de quem ou de que se diz algo - sujeito)
b ) aquilo que se diz (do ser - predicado).
Em cada uma das sentenças abaixo o sujeito esta sublinhado e o
restante da frase que não estiver sublinhado é o predicado.
a ) “Pedro é um rapaz dedicado ao trabalho.”
b ) “2 é um número par.”
c ) “As flores são perfumadas.”
d ) “O homem é um mamífero.”
e ) “O mundo é redondo.”
Apenas para termos um forma de representação, como foi feito no
primeiro capítulo, adotaremos uma representação para os sujeitos e
predicados, esta representação irá ser reformulada de modo rigoroso logo
após esta introdução intuitiva. Representarão os predicados as letras maiúsculas latinas em itálico: A, B, B, D, ... P, ..., e os sujeitos serão representados
por letras latinas minúsculas em itálico: a, b, c, d, e, ..., p, q, ... . Para indicar
que um sujeito sofre a ação do predicado utilizaremos ama notação específica, vejamos alguns exemplos:
1. R ≡ ser redondo.
t ≡ Terra.
para indicarmos por R(t) a sentença “A Terra é redonda.”
2. M ≡ ser mamífero.
s ≡ Simba.
para indicarmos por M(s) a sentença “Simba é um mamífero.”
3. P ≡ ser perfumado.
r ≡ rosa.
para indicarmos por P(r) a sentença “A rosa é perfumada.”
4. N ≡ ser um número par.
q ≡ 4.
para indicarmos por N(q) a sentença “Quatro é um número par.”
Vejamos um outro exemplo, no qual o universo do discurso é o universo dos números inteiros ..., -2, -1, 0, 1, 2, 3, ... :
“Todo número inteiro par é divisível por 2”
Numa simbolização utilizando, variáveis fica:
Para qualquer x, se x for um número inteiro par, x é divisível por 2.
120
Fazendo uso da simbolização anterior:
P ≡ ser um número inteiro par.
D ≡ ser um divisível por 2.
“Para qualquer x, (P(x) → D(x))”
Logo se introduzirmos se simbolizarmos:
C ≡ ser coala.
E ≡ comer folhas de eucalipto.
poderíamos representar a sentença “Todo coala come folhas de eucalipto”
por:
“Para todo x, (C(x) → E(x))”
Acima utilizamos variáveis, como os representados pela letra “x”,
nos exemplos anteriores, aos que não estão acostumados faremos aqui alguns comentários, também estes comentários são de caráter intuitivo. O uso
de variáveis ocorre como quando não queremos especificar o objeto em
algum contexto, exemplificando:
a ) “Alguém estudou aqui.”
b ) “Ele foi para o Alasca.”
c ) “Ninguém estudou aqui.”
Em todos os exemplos anteriores o uso de pronomes indefinidos,
não especifica quem sofre a ação do predicado, e em lugar de utilizar estes
pronomes utilizaremos variáveis, isto é, diremos o seguinte:
a ) “x estudou aqui.”
b ) “y foi para o Alasca.”
c ) “z não estudou aqui.”
respectivamente. Representaremos as variáveis por letras latinas minúsculas em itálico, indexadas por números naturais: x1, x2, x3, x4, ..., porém como
esta notação é muito “carregada” em geral quando não houver problemas de
ambigüidade utilizaremos apenas letras latinas em itálico, como por exemplo:
x, y, z, w. O uso de variáveis encerra problemas bem mais complexos mas
estes serão tratados posteriormente, neste momento estamos preocupados
apenas em introduzir leituras de sentenças pelo uso destes símbolos. Aprenderemos a ler e a simbolizar por meio de exemplos, utilizaremos ainda os
seguintes símbolos:
- símbolo de quantificação universal; leia-se “para todo”, “todo”.
∃ - símbolo de quantificação existencial; leia-se “algum”, “existe”.
121
Vamos simbolizar os exemplos anteriores com o uso destes novos símbolos:
“Todo número inteiro par é divisível por 2”
P ≡ ser um número inteiro par.
D ≡ ser um divisível por 2.
( x)(P(x) → D(x))
“Todo coala come folhas de eucalipto”
C ≡ ser coala.
E ≡ comer folhas de eucalipto.
( x)(C(x) → E(x))
“Alguém estudou aqui.”
E ≡ estudar aqui.
(∃x)(E(x))
“Ele foi para o Alasca”
I ≡ ir para o Alasca.
(∃x)(I(x))
“Ninguém estuda aqui”
A ≡ estudar aqui.
( x)(¬A(x))
“Nem todo cão é manso”
C ≡ ser cão.
M ≡ ser manso.
(∃x)[C(x)→(¬(M(x)))]
Exemplo 1. Exemplos de leituras de sentenças com
quantificadores, a seguir terão especificados, cada um, o seu domínio do
discurso.
O domínio do discurso é o universo dos números naturais.
Predicados e Constantes
A(x) ≡ x é divisível por 2.
B(x) ≡ x é divisível por 3.
Cabe observar que nos predicados fizemos uso das constantes 2
e 3 do universo dos números naturais.
122
Proposições
(∃x)(A(x))
Tradução
Existe um número natural divisível por 2.
(∃x)(¬A(x))
Existe um número natural que não é divisível por 2.
(∀x)(A(x))
Todo número natural é divisível por 2.
[¬((∀x)(A(x))] Não é verdade que todo número natural seja divisível por 2.
(∀x)(¬A(x))
Todo número natural não é divisível por 2.ouNenhum número natural é
divisível por 2.ouNão existe número natural divisível por 2.
(∃x)(A(x) ∧ B(x)) Existe um número natural divisível por 2 e divisível por 3.
(∃x)(A(x) ∨ B(y)) Existe um número natural divisível por 2 ou divisível por 3.
O domínio do discurso é o universo dos números naturais.
Predicados e Constantes
A(x, y) ≡ x é maior que y.
B(x, 100) ≡ x é maior que 100.
Proposições
Tradução
($x)($y)(A(x, y)) Existem alguns números naturais maiores que alguns números naturais.
($x)("y)(A(x, y)) Existem alguns números maiores que qualquer número natural.
("x)($y)(A(x, y)) Qualquer número natural é maior que algum número natural.
("x)("y)(A(x, y)) Todo número natural é maior que qualquer número natural.
($x)(B(x, 100)) Algum número natural é maior que 100.
("x)(B(x, 100)) Todo número natural é maior que 100.
Qualquer número natural não é mai or que 100.ouNão exi ste número
("x)(ØB(x, 100))
natural maior que 100.
O domínio do discurso é o universo dos pontos da geometria euclidiana.
Predicados
A(x, y, z) ≡ x está entre y e z.
Proposições
Tradução
(∀y)(∀z)(∃x)(A(x, y, z)) Dados dois pontos quaisquer, existe um ponto entre eles.
(∃y)(∃z)(∀x)(A(x, y, z))
Existem dois pontos tais que todo ponto está entre eles.
O domínio do discurso é o universo dos números reais.
Predicados e Constantes
A(x1 , x, y, z) ≡ x1 é a soma de x, y e z.
B(x1 , x, 1, 2) ≡ x1 é a soma de x, 1 e 2.
123
Proposições
Tradução
Dados três números reais, existe um número real que
(∀x)(∀y)(∀z)(∃x1)(A(x1, x, y, z))
é a soma deles.
Existem três números reais cujo resultado da soma é
(∃x)(∃y)(∃z)(∀x1)(A(x1, x, y, z))
qualquer valor real.
Para todo número real somado com 1 e 2, existe um
(∀x)(∃x1)( B(x1 , x, 1, 2))
número real que é o resultado desta soma.
O domínio do discurso é o universo dos seres vivos.
Predicados e Constantes
A(x) ≡ x é um velocista.
B(x) ≡ x é veloz.
C(x) ≡ x é tão rápido quanto uma tartaruga.
Proposições
Tradução
(∀x)(A(x) → B(x))
Todos que são ciclistas são velozes.OuTodo
ciclista é veloz.
(∀x)(A(x) ∧ B(x))
Todos são ciclistas e todos são velozes
(∃x)[A(x) ∧ (¬B(x))]
(∃x)[A(x) → (¬B(x))]
Existem seres que são ciclistas e seres que
não são velozes.
Existem seres que são ciclistas e que não são
velozes
O domínio do discurso é o universo dos seres vivos.
Predicados e Constantes
A(x) ≡ x é um animal.
B(x) ≡ x é um mamífero.
C(x) ≡ x é um homem.
Proposições
1. [ (∀x)(C(x) → B(x) ) ∧ (∀x)(B(x) → A(x) ) ] → [ (∀x)(C(x) → A(x) ) ]
Respectiva Tradução
1. Se todos os homens são mamíferos e todos os mamíferos são animais
então todo homem é animal.
No próximo tópico deste capítulo, assim como fizemos na lógica
proposicional, daremos um tratamento formalizado da lógica
quantificacional, ou como é mais conhecido, da lógica de predicados.
124
Exercício 1. Traduza em símbolos, para isso, em cada bloco de
sentenças, simbolize os predicados, as constantes e as variáveis, e depois
rescreva a sentença toda utilizando estes símbolos.
1. Todos são felizes.
2. Algumas pessoas felizes.
3. Nenhuma pessoa é infeliz.
4. João não é feliz.
5. Carlos e Carolina são felizes.
1.
2.
3.
4.
5.
6.
Exercício 2. Idem.
Alguns animais são carnívoros.
Alguns animais não são carnívoros.
Todos os animais são carnívoros.
Nem todos os animais são carnívoros.
Nenhum animal é carnívoro.
Simba é um animal carnívoro.
1.
2.
3.
4.
5.
6.
7.
8.
Exercício 3. Idem.
Não existem insetos que voem.
Nem todos os insetos voam.
Todas as moscas voam.
Algumas moscas não voam.
Não existem moscas que voam.
Não existem moscas que não voam.
Nenhuma barata voa.
Nem toda barata não voa.
1.
2.
3.
4.
5.
6.
7.
Exercício 4. Idem.
Romeu ama Julieta.
Édipo ama Jocasta.
Todos amam Maria.
Maria não ama ninguém
Romeu ama Maria e Romeu não ama Julieta.
Todos amam Romeu mas ele não ama ninguém.
Jane ama Tarzan que também ama Jane.
1.
2.
3.
4.
5.
Exercício 5. Idem.
Ana é irmã de José.
Maria é irmã de Ana.
Pedro é pai de Ana.
Pedro é pai de Maria e de José.
Ana é irmã de José e Maria é irmã de Ana então Maria é irmã de José.
125
6.
7.
8.
9.
Tarso é irmão de Pedro e tio de Ana.
Tarso é irmão de Pedro então é tio de José.
Tarso é tio de Maria.
Tarso é tio de Maria e Ana que são irmãs de José logo Tarso é tio de
José.
Exercício 6. Idem.
Todo animal é mortal.
Todo mamífero é um animal.
Alguns mamíferos não são animais.
Todo homem é mamífero.
Alguns homens não são mamíferos.
Nenhum homem é animal
Nem todo homem é mortal
Alguns homens são mortais.
Existem homens que são mamíferos mas não são animais e portanto
são mortais.
10. Não existem homens imortais.
11. Nenhum animal é imortal.
1.
2.
3.
4.
5.
6.
7.
8.
9.
2.2 - Um sistema formal para a lógica de predicados
Apresentamos neste parágrafo um estudo formal da lógica de
predicados. Vamos iniciar estabelecendo o vocabulário da linguagem de
predicados. Esse vocabulário consiste dos seguintes grupos de símbolos:
1.Variáveis individuais: x1, x2 , ....
2. Constantes individuais: c1, c2 , ...
3. Símbolos funcionais: fnm , n, m = 1, 2, 3, ...
4. Símbolos predicativos: pnm , n, m = 1, 2, 3, ...
5. Conectivos lógicos: ¬ , ∧ , ∨ , →.
6. Quantificadores: , ∃ .
7. Símbolos auxiliares: parêntesis e vírgula.
Estabelecido o vocabulário da linguagem, passamos ao estudo da
gramática.
Definição 1. (Expressão) Uma expressão é qualquer seqüência finita
de símbolos do vocabulário.
Exemplo 1. São exemplos de expressões :
1. x1∀(,
2. ∃ x1 p12(x1)
3. → x1(
126
Intuitivamente, percebemos que as expressões 1 e 3 do exemplo
anterior são destituídas de sentido, ao passo que a expressão 2 “quer dizer
algo”.
Desse modo, podemos perceber a necessidade de caracterizar as
expressões que serão de utilidade para o discurso lógico.
Definição 2. (Termo) O conceito de termo é definido de modo
recursivo, como se segue:
1. Variáveis individuais são termos.
2. Constantes individuais são termos.
3. Se t1, ... ,tm são termos e fnm é um símbolo funcional m-ário, então fnm(t1, ... ,
tm) é um termo.
4. Cláusula Maximal : Uma dada expressão constitui um termo se, e somente
se, foi obtida a partir de uma das regras (1 a 3) acima.
Exemplo 2. São exemplos de termos:
1. c1
2. f12(x1)
3. x101
Definição 3 (Fórmula). O conceito de fórmula é definido de modo
recursivo, como se segue
1. Se t1 , ... , tm são termos e pnm é um símbolo predicativo m-ário, então
pnm(t1 , ... , tm) é uma fórmula (dita atômica).
2. Se A e B são fórmulas quaisquer, então (¬A), (A ∧ B), (A ∨ B) e (A → B)
são fórmulas.
3. Se x é uma variável individual e A é uma fórmula, então, ( x)A e (∃x)A
são fórmulas.
4. Cláusula Maximal : Uma dada expressão constitui uma fórmula, se, e
somente se, foi obtida a partir de uma das regras (1 a 3) acima.
Dada uma expressão A, a expressão (¬A) chama-se a negação de A.
Se A e B são expressões, (A ∧ B) chama-se a conjunção de A e B;
(A ∨ B) chama-se a disjunção de A e B;
(A →B) chama-se a implicação de B por A;
(A ↔ B) chama-se a bi-implicação de A e B;
Dada uma variável individual x e uma fórmula A, a expressão ( x)A
chama-se a generalização de A por x e (∃x)A chama-se a instanciação de A
por x.
Exemplo 3. São exemplos de fórmulas:
1) {[p11(x1) ∨ p23(c1, x4 , x2)] → ( x1)((∃x2)p23(c1, c4 , x2))}.
127
Para ficar um pouco mais didático, enumeramos em coluna:
1.
2.
3.
4.
5.
6.
7.
(p11(x1),
(atômica)
p23(c1, x4 , x2),
(atômica)
(atômica)
p23(c1, c4 , x2),
[p11(x1) ∨ p23(c1, x4 , x2)],
(1, 3, disjunção)
(∃x2)p23(c1, c4 , x2),
(instanciação de 4 por x2)
( x1)((∃x2)p23(c1, c4 , x2)),
(generalização de 5 por x1)
{[p11(x1) ∨ p23(c1, x4 , x2)] → ( x1)((∃x2)p23(c1, c4 , x2))} (4, 6,
implicação).
De modo óbvio possui a seguinte árvore de decomposição:
{[p11(x1) ∨ p23(c1, x4 , x2)] → ( x1)((∃x2)p23(c1, c4 , x2))}
[p11(x1) ∨ p23(c1, x4 , x2)] ( x1)((∃x2)p23(c1, c4 , x2))}
p11(x1)
p23(c1, x4 , x2)
(∃x2)p23(c1, c4 , x2)
p23(c1, c4 , x2)
Sejam A ≡ p12(x, y), B ≡ p23(c1 ,c4 ,x2) e C ≡ p13(x1 , y1 , c1) fórmulas atômicas.
São exemplos de fórmulas:
2) ((A ∨ B) ∧ C).
1. A
2. B
3. C
4. (A ∨ B)
5. ((A ∨ B) ∧ C))
(atômica)
(atômica)
(atômica)
(1, 2, disjunção)
(4, 3, conjunção)
De modo óbvio possui a seguinte árvore de decomposição:
((A ∨ B) ∧ C)
(A ∨ B)
A
C
B
3) p33(x1 , y2 , z1)
128
Observação: Tendo em vista uma maior facilidade na leitura,
doravante utilizaremos uma notação simplificada para as variáveis individuais,
símbolos predicativos e símbolos funcionais. Por motivos óbvios, nossa
escolha recairá sobre símbolos tradicionalmente utilizados na matemática.
Assim , as variáveis individuais serão indicadas por x, y, z, w, ... os símbolos
predicativos, por p, q, r, ... e os símbolos funcionais, por f, g, h, ...
Definição 4 (Subfórmula). Seja A uma fórmula.
1. Se A é uma fórmula atômica p(t1, ... , tn), então p(t1 ,... , tn) é uma
subfórmula de A.
2. Se A é do tipo ¬B, então B é uma subfórmula de A.
3. Se A é do tipo B ∨ C, então B e C são subfórmulas de A.
4. Se A é do tipo B ∧ C, então B e C são subfórmulas de A.
5. Se A é do tipo B → C, então B e C são subfórmulas de A.
6. Se A é do tipo xB, então B é subfórmula de A.
7. Se A é do tipo ∃xB, então B é subfórmula de A.
8. Se B é subfórmula de A e C é subfórmula de B, então C é subfórmula de
A.
9. As únicas subfórmulas de A são definidas pelas regras (1 a 8) acima,
além da própria fórmula A.
Exemplo 4. Na fórmula x∃y(¬p(x) → z(q(z) → ¬p(z))) temos as
seguintes sub-fórmulas:
1. x∃y(¬p(x) → z(q(z) → ¬p(z)))
2. ∃y(¬p(x) → z(q(z) → ¬p(z)))
3. (¬p(x) → z(q(z) → ¬p(z)))
4. ¬p(x)
5. p(x)
6. z(q(z) → ¬p(z))
7. (q(z) → ¬p(z))
8. q(z)
9. ¬p(z)
10. p(z).
Definição 5 (Escopo de quantificadores). Se x é uma variável
individual e A é uma fórmula, definimos o escopo do quantificador x, na
fórmula xA, como sendo a fórmula A. Analogamente, o escopo do
quantificador ∃x, na fórmula ∃xA, é a fórmula A.
Exemplo 5. São exemplos de escopos :
1. (p(x) → q(x)) é o escopo de x, na fórmula x(p(x) → q(x))
2. q(x) é o escopo de ∃x, na fórmula ¬p(x) → ∃y q(x)
Definição 6 (Variável livre e ligada). Dizemos que a ocorrência de
129
uma variável individual x é livre em uma fórmula A, se essa ocorrência de x
não se dá no escopo de um quantificador ( x ou ∃x) em uma subfórmula de
A (do tipo xB ou ∃xB). Caso contrário, dizemos que a ocorrência dessa
variável x é ligada.
Exemplo 6. São exemplos de ocorrências de variáveis livres e ligadas:
1. Na fórmula x(p(x) → q(y)), x ocorre ligada e y ocorre livre.
2. Na fórmula q(x) → ∃yp(y) ∧ zq(y), x ocorre livre, a primeira ocorrência de
y é ligada e a segunda ocorrência de y é livre.
3. Na fórmula ¬p(x) → ∃xq(x), a primeira ocorrência de x é livre e a segunda
é ligada.
Definição 7 (Termo livre para uma variável). Dizemos que um termo
t é livre para a variável x em uma fórmula A, se nenhuma ocorrência livre de x
está no escopo de um quantificador ( y ou ∃y), onde y é uma variável que
ocorre em t.
Exemplo 7. Sejam t1 o termo x, t2 o termo y , t3 o termo f(x, y, z) e
as fórmulas
A : z(p(z) → q(x)) → ∃xr(w),
B : p(x) → ∃x(r(x) ∧ q(z)) e
C : y(p(y) ∨ q(y)).
Neste caso, t2 é livre para x em A , pois ao substituirmos t2 nas
ocorrências livres de x na fórmula A, a variável y não se torna ligada. Mas t3
não é livre para w em A, pois ao substituir as ocorrências livres de w na
fórmula A, pelo termo t3, a variável x, presente no termo t3 , se torna ligada.
Observamos também que o termo t1 é livre para y em C, pois y não
possui ocorrências livres em C.
Notação: Seja A uma fórmula, x uma variável e t um termo livre para
x em A. Denotaremos por Ax [t] , a fórmula obtida a partir de A, pela
substituição da variável x por t .
2.3 - Estrutura dedutiva
A, B e C são fórmulas, x é uma variável, A(x) é uma fórmula, t é um
termo que é livre para x em A(x) e A(t) é a fórmula obtida a partir de A(x),
substituindo-se as ocorrências livres de x por t.
(→1) [A → (B → A)]
(→2) {[A → (B → C)] → [(A → B) → (A → C)]}
(∧1) [(A ∧ B) → A]
(∧2) [(A ∧ B) → B]
(∧3) {A → [B → (A ∧ B)]}
(∨1) [A → (A ∨ B)]
130
(∨2)
(∨3)
(¬1)
(¬2)
[B → (A ∨ B)]
{(A → C) → [(B → C) → [(A ∨ B) → C]]}
{(A → B) → [[A → (¬B)] → (¬A)]}
[(¬(¬A)) → A]
(MP) (Modus Ponens)
(∃1) Ax [t]→∃xA
( 2) xA→Ax [t]
E, agora, apresentamos as Regras de Inferência.
Seja A uma fórmula, x uma variável, t um termo livre para x em A e
C uma fórmula que não possui ocorrências livres de x.
R1
A,(A→B)
B
R2
(C→A)
C→( Ax) A)
R3
(A→C )
((∃x) A→C)
Regras derivadas.
As seguintes regras são sumamente importantes e úteis:
Seja A uma fórmula.
R4
De ( x)A podemos derivar (¬(∃x)(¬A)).
De (¬(∃x)(¬A)) podemos derivar ( x)A.
R5
De ( x)(¬A) podemos derivar (¬(∃x)A).
De (¬(∃x)A) podemos derivar ( x)(¬A).
R6
De ( y)( x)A podemos derivar ( x)( y)A.
R7
De (∃x)A podemos derivar (¬( x)(¬A)).
De (¬( x)(¬A)) podemos derivar (∃x)A.
R8
De (∃x)(¬A) podemos derivar (¬( x)A).
De (¬( x)A) podemos derivar (∃x)(¬A).
R9
De (∃y)(∃x)A podemos derivar (∃x)(∃y)A.
131
R10
De (∃y)( x)A podemos derivar ( x)(∃y)A.
Sejam A e B fórmulas.
R11
De ( x)(A ∧ B) podemos derivar [( x)A ∧ ( x)B].
De [( x)A ∧ ( x)B] podemos derivar ( x)(A ∧ B).
R12
R13
De (∃x)(A ∨ B) podemos derivar [(∃x)A ∨ (∃x)B].
De [(∃x)A ∨ (∃x)B] podemos derivar (∃x)(A ∨ B).
De ( x)(A → B) podemos derivar [( x)A → ( x)B].
R14
De (∃x)(A ∧ B) podemos derivar [(∃x)A ∧ (∃x)B].
R15
De [( x)A ∨ ( x)B] podemos derivar ( x)(A ∨ B).
Se A e B são fórmulas e x não é livre em A. Temos:
R16
De ( x)(A ∨ B) podemos derivar (A ∨ ( x)B).
De (A ∨ ( x)B) podemos derivar [( x)A ∨ ( x)B).
R17
De (∃x)(A ∨ B) podemos derivar (A ∨ (∃x)B).
De (A ∨ (∃x)B) podemos derivar (∃x)(A ∨ B).
R18
De ( x)(A ∧ B) podemos derivar (A ∧ ( x)B).
De (A ∧ ( x)B) podemos derivar ( x)(A ∧ B).
R19
De (∃x)(A ∧ B) podemos derivar (A ∧ (∃x)B).
De (A ∧ (∃x)B) podemos derivar (∃x)(A ∧ B).
R20
De ( x)(A → B) podemos derivar (A → ( x)B).
De (A → ( x)B) podemos derivar ( x)(A → B).
R21
De (∃x)(A → B) podemos derivar (A → (∃x)B).
De (A → (∃x)B) podemos derivar (∃x)(A → B).
R20
De ( x)(A → B) podemos derivar (∃x)(A → B).
De (∃x)(A → B) podemos derivar ( x)(A → B).
R21
De (∃x)(A → B) podemos derivar ( x)(A → B).
De (( x)(A → B) podemos derivar (∃x)(A → B).
Definição 8 (Premissa, Conseqüência Imediata). Nas regras de
132
inferência, acima, as fórmulas acima da linha são chamadas de premissas
para aplicação das regras de inferência, e a fórmula abaixo da linha é chamada
de conseqüência imediata das premissas.
Definição 9 (Dedução). Seja Γ um conjunto de fórmulas onde não
compareçam axiomas, e A uma fórmula. Uma dedução de A a partir de Γ é uma
seqüência de fórmulas A1, A2, ... An-1, An, tal que para todo i, 1 ≤ i ≤ n
a ) ou Ai ∈ Γ,
b ) ou Ai é um axioma,
c ) ou Ai é conseqüência imediata da fórmulas anteriores da seqüência
pela aplicação de uma das regras R1, R2 ou R3.
d ) An = A
Notação. Usamos a notação Γ Ã A para indicar que existe uma
dedução de A a partir de um conjunto Γ de fórmulas.
Observação.Γ é chamada de conjunto de premissas para a dedução.
Assim, se uma fórmula B pertence à Γ, diremos que B é uma premissa se B
comparecer a uma dada dedução.
Definição 10 (Teorema). Se A é uma dedução a partir de um conjunto
vazio de fórmulas (Γ = ∅) diremos que A é um teorema da lógica de predicados,
e indicaremos este fato por à A.
Definição 11 (Dependência). Seja (A1, A2, ... , An) uma dedução de A
a partir de Γ, e P uma premissa (isto é, P ∈ Γ). Diremos que Ai (para todo i, 1
≤ i ≤ n ) depende de P se:
a ) Ai é a própria fórmula P,
b ) Ai é conseqüência imediata de fórmulas que dependem de P,
c ) Ai depende de P, somente como é requerido pelas cláusulas
anteriores.
Definição 12 (Variação). Seja (A1, A2, ... , An) uma dedução de A a
partir de Γ, dizemos que uma variável x é variada em uma certa dedução
para uma premissa P ∈ Γ se x ocorre livre em P, e alguma das fórmulas Ai
(para todo i, 1 ≤ i ≤ n ) na dada dedução é conseqüência imediata de fórmulas
que dependem de P pela aplicação da regra R.2 ou da regra R.3 com respeito
a variável x.
Notação: Se em uma dada dedução de A a partir de Γ uma variável
x foi variada indicaremos esse fato por ΓÃxA.
Para apresentar uma dedução na prática adotaremos um
procedimento que consiste na construção de uma tabela com quatro
colunas, assim indicada.
Numeração da linha da dedução
Passos da dedução Justificativa de
133
cada passo da dedução
Dependência em relação a uma premissa
Esperamos por meio de exemplos elucidar este procedimento.
Exemplo 1. Sejam x e y variáveis, A e C fórmulas tais que:
a ) y é livre para x em A,
b ) y não ocorre livre em A,
c ) C é uma fórmula que não possui ocorrências livres de y.
nessas condições, seja Γ = { C→Ax[y]} o conjunto das premissas ( neste
exemplo, Γ é um conjunto unitário) então afirmamos que ΓÃy C→ Ax[y].
Vamos agora exibir uma dedução de C→ Ax[y] a partir de Γ, vale a
pena observarmos que a dedução não é única. Respeitando a formação da
tabela
Numeração da linha da dedução Passos da dedução Justificativa de
cada passo da dedução
Dependência em relação a uma premissa
temos a seguinte dedução:
Dedução
Justificativa
Γ
yAx[y] → A
Ax.12.
Γ
yAx[y] → ↔xA
1, R2.
Γ C → Ax[y]
Premissa
Γ y C → yAx[y]
3, R2.
Γ (↔yAx[y] → xA) →
[C → ( yAx[y] → xA)]
Ax.1.
6 Γ Ã C→( yAx[y]→ xA)
2, 5, R1.
7 Γ Ã (C→ yAx[y])→([C→
( yAx[y]→ xA)]→(C→ xA)
Ax.2.
8 Γ Ã y [C → ( yAx[y] →
xA)] → (C → xA)
4, 7, R1.
9 Γ y C → xA.
6, 8, R1.
1
2
3
4
5
Dependência
——{3}
{3}
———{3}
{3}
Vamos à algumas explicações:
1
Γ
yAx[y] → A
Ax.12.
nesta linha apenas aplicamos o axioma 12.
2
Γ
yAx[y] →
xA
1, R2.
nesta linha a justificativa diz que aplicamos a regra R2 na fórmula da linha
1 para obtermos a fórmula da linha 2.
3
Γ C → Ax[y]
Premissa
134
{3}
O passo da dedução contida na linha 3 nada mais é do que a premissa, na coluna de “Dependência” encontramos “{3}”, isto pois, se a fórmula
da linha 3 for uma premissa repetiremos o número da linha em que esta se
encontra.
4
Γ
y
C → yAx[y]
3, R2.
{3}
No passo da dedução desta linha a ocorrência da variável y em Ãy
indica que a regra R2 foi aplicada em uma fórmula (C→Ax[y]) que depende
de uma premissa (no caso dela própria) e com respeito a variável y (por
causa da quantificação “ y”)
A justificativa desta linha diz que aplicamos a regra R2 na fórmula
da linha 3 para obter a fórmula da linha 4. Novamente na coluna de
“Dependência” encontramos “{3}” isto pois a fórmula da linha 4 é
conseqüência imediata da uma fórmula que depende da premissa.
5
Γ ( yAx[y] → xA) → [C → ( yAx[y] → xA)]
Ax.1.
Apenas aplicamos o axioma um.
6
Γ C → yAx[y] → xA)
2, 5, R1.
Modus Ponens
7
Ax.2.
Γ (C → yAx[y]) → ([C → ( yAx[y] → xA)] → (C → xA)
Aplicação do axioma dois.
8 Γ
{3}
y
[C → ( yAx[y] → xA)] → (C → xA)
4, 7, R1.
Neste passo da dedução a variável y continua ocorrendo em à y
pois a dedução da linha 8 dependeu da dedução feita na linha 4, onde a
variável y foi vaiada.
9
Γ
y
C → xA.
6, 8, R1.
{3}
Observação. Observe que na linha 2 quando aplicamos a regra R2
com respeito a variável x não aparece x , assim como foi feito para a variável
y, isto porque a fórmula na qual foi aplicada a regra R2 não dependia de
nenhuma premissa; já que era um axioma.
Uma outra questão é a seguinte. A regra 1 necessita de duas premissas.
Na linha 8, aplicamos a regra 1, tendo como premissas as fórmulas da linha 4
e da linha 7. Como vemos na quarta coluna, a fórmula da linha 4, de fato,
depende de uma premissa mas a fórmula da linha 7 não depende de premissa
alguma. No entanto, vemos que a conseqüência imediata da aplicação dessa
135
regra, a saber, a fórmula da linha 9, manteve a dependência com a premissa.
É correto o raciocínio?
A resposta é afirmativa.
Passaremos, agora, a um dos mais importantes resultados deste
capítulo que certamente facilitará muito o trabalho de deduzir fórmulas a
partir de premissas. Trata-se do Teorema da Dedução, que enunciaremos
sem demonstração.
Teorema 6 (da Dedução): Seja A e B fórmulas e Γ um conjunto de
fórmulas. Se Γ , A Ã B (isto será uma abreviação para Γ ∪ {A} B), de
maneira que na dedução não haja aplicações da regra R2 ou R3 sobre que
dependem da premissa A, com respeito às variáveis livres de A, então Γ A
→ B.
Quando for conveniente, poderemos explicitar as fórmulas de Γ
assim, ao invés de Γ P → R, podemos escrever, P → Q, Q → R P → R
1
2
3
4
5
6
Dedução
Γ, P P→Q
Γ, P P
Γ, P Q
Γ, P Q→R
Γ, P R
Γ, P P→R
Justificativa Dependência
premissa
{1}
premissa
{2}
2, 5, R1.
{1, 2}
premissa
{4}
2, 5, R1.
{1, 2, 4}
5, T.D.
{1, 4}
Façamos duas importantes observações:
• neste exemplo, não precisamos nos preocupar com a restrição
quanto à variação da variável, pois na dedução não foi utilizada a
regra R2 nem a regra R3;
• aplicamos o Teorema da Dedução na linha 5, onde podemos ver que
na dedução auxiliar Γ, P R, a dependência das premissas P → Q,
P e Q → R, presentes nas linhas 1, 2 e 4. Entretanto, após o uso do
Teorema na dedução, Γ P → R, não há mais dependência da
premissa P (dizemos que a premissa P foi descartada na dedução Γ
P → R).
Exemplo 2. Sejam x e y variáveis, A e C fórmulas tais que:
a y é livre para x em A;
b y não ocorre livre em A;
a C não possui ocorrências livres de y.
Mostraremos que à (C → Ax[y]) → (C→Ax[y]), (observe que Γ = ∅)
136
Dedução
1 C → Ax[y]
yAx[y] → A
2 2 C → Ax[y]
yAx[y] → xA
3 (C → Ax[y]) → [ yAx[y] → xA]
Justificativa Dependência
Ax.12.
—1, R2.
—2 , T.D.
—-
Aqui aplicamos a regra R2, mas não sobre fórmulas que dependam
da premissa descartada (C→Ax[y])
Como último exemplo, vamos mostrar uma utilização indevida do
Teorema da Dedução. Seja A uma fórmula que possua ocorrências livres da
variável x e C uma sentença. Estaria correta a seguinte dedução?
1
2
3
Dedução
C→A C→A
C → A C → xA
(C → A) → [C → xA]
Justificativa
Premissa
1, R2.
2 , T.D.
Dependência
{1}
{1}
—-
Na linha 2 não poderíamos ter usado o teorema da dedução
(T.D.), pois houve uma aplicação da regra R2 em uma fórmula que dependia
de (C → A).
O Teorema da Dedução é o principal exemplo das chamadas regras
derivadas. As regras derivadas são deduções auxiliares já demonstradas
que podem ser utilizadas em uma outra dedução com o objetivo de simplificála. Em uma linguagem computacional, poderíamos dizer que as regras
derivadas funcionam como sub-rotinas dentro de um programa. A seguir,
veremos algumas regras derivadas básicas:
Mais Regras Derivadas
Apresentaremos ao todo doze regras, para as regras D1, D2, D3, ...,
D9,, vale o seguinte: A, B, C, são fórmulas e Γ um conjunto de fórmulas.
D1) A, A → B
1
2
3
B.
Dedução
A, A → B
A, A → B
A, A → B
A
A→B
B
Justificativa
premissa
premissa
1, 2, R1.
Dependência
{1}
{2}
{1, 2}
D2) A, B Ã A ∧ B.
1
2
3
4
Dedução
A, B A → (B → (A ∧ B))
A, B A
A, B B → (A ∧ B)
A, B B
Justificativa Dependência
Ax.3.
—premissa
{2}
1, 2, R1.
{2}
premissa
{4}
137
5
D3) A ∧ B
1
2
3
A∧B
A, B
3, 4, R1.
{2, 4}
A.
Dedução
A ∧ B (A ∧ B) → A
A∧B A∧B
A∧B A
Justificativa
Ax.4.
premissa
1, 2, R1.
Dependência
—{2}
{2}
D4) A ∧ B B.
1
2
3
Dedução
A ∧ B (A ∧ B) → B
A∧B A∧B
A∧B B
Justificativa
Ax.5.
premissa
1, 2, R1.
Dependência
—{2}
{2}
D5) A A ∨ B.
1
2
3
Dedução
A A→A∨B
A A
A A ∨ B.
Justificativa
Ax.6.
premissa
1, 2, R1.
Dependência
—{2}
{2}
D6) A Ã B ∨ A.
Análogo ao D5).
D7) ¬¬A à A.
1
2
3
Dedução
¬¬A à ¬¬A → A
¬¬A à ¬¬A
¬¬A à A.
Justificativa
Ax.10.
premissa
1, 2, R1.
Dependência
—{2}
{2}
D8) Se Γ, A Ã C e Γ, B Ã C então Γ , A ∨ B Ã C.
Dedução
1 Γ, A C
2 Γ A→C
3 Γ (A → C) → [(B → C) →
(A ∨ B → C)]
4 Γ (B → C) → (A ∨ B → C)
5 Γ, B C
6 Γ B→C
7 Γ A ∨ B →C
8 Γ, A ∨ B A ∨ B → C
Justificativa
hipótese
1, T.D.
Ax.8.
2, 3, R1.
hipótese
5, T.D.
4, 6, R1.
7
138
Dependência
————————-
9 Γ, A ∨ B
10 Γ, A ∨ B
A∨B
C
premissa
8, 9, R1.
{9}
{9}
D9) Se Γ, A Ã B e Γ, A Ã ¬B então Γ Ã ¬A.
1
2
3
4
5
6
7
Dedução
Γ, A B
Γ A→B
Γ (A → B) → [(A → ¬B) → ¬A]
Γ (A → ¬B) → ¬A
Γ, A ¬B
Γ A → ¬B
Γ ¬A
Justificativa Dependência
hipótese
—1, T.D.
—Ax.9.
—2, 3, R1.
—hipótese
—5, T.D.
—4, 6, R1.
—-
Para as regras D10, D11 e D12, x é uma variável, P é uma fórmula e t é
um termo livre para x em P, e seja D um axioma qualquer que não possua
ocorrências livres de x.
D10) P
1
2
3
4
5
6
D11)
1
2
3
x
Dedução
P P → (D → P)
P P
P D → P.
P x D → xP
P D
P x xP.
xP
x
Justificativa
Ax.1.
premissa
1, 2, R1.
3, R2.
um axioma
4, 5, R1.
Dependência
—{2}
{2}
{2}
—{2}
Px[k].
Dedução
xP
xP → Px[k].
xP
xP
xP
xPx[t].
D12) Px[t]
1
2
3
xP.
Justificativa
Ax.12.
premissa
1, 2, R1.
Dependência
—{2}
{2}
∃xP.
Dedução
Justificativa Dependência
Px[t]
Px[t].premissa
{1}
Px[t]
Px[t]→∃xP Ax.11.
—Px[t] ∃xP. 1, 2, R1.
{1}
Convidamos o leitor a encontrar as seguintes deduções:
D13) P→Q
x
D14) P→Q
x
xP→ xQ.
∃xP→∃xQ.
139
2.4 - Semântica
Até agora estudamos o que se chama sintaxe da linguagem (de
predicados). Ela é um puro jogo simbólico. Entretanto, toda linguagem se
refere a objetos ou estados de coisas. A semântica da linguagem trata
precisamente das interconexões entre a mesma e aquilo a que ela
se refere. Este por sua vez são certos contrutos conjuntistas que o
denominamos estruturas. Tais estruturas podem refletir certos aspectos
relevantes de porções da realidade. Uma esquematização simplificada é como
abaixo:
Modelos
(abstratos)
Linguagem
Artificiais
Porção da
Realidade
Logo, interpretar uma linguagem é, em última análise, relacioná-lo
com uma certa estrutura (conjuntista).
Definição 1. Uma estrutura E para uma linguagem L consiste dos
seguintes objetos:
1. Um conjunto não-vazio D, denominado o universo de E. Os seus
elementos chamam-se indivíduos de E.
2. Para cada símbolo funcional n-ário f, uma operação n-ária fE de D em D.
3. Para cada símbolo predicativo n-ário p, uma relação n-ária pE sobre D.
4. Para cada constante individual c, um indivíduo cE de D.
Seja E uma estrutura para L. Para cada indivíduo a de E escolhemos
uma nova constante, denominada o nome de a. Convenciona-se que
diferentes nomes são escolhidos para diferentes indivíduos. A nova
linguagem acrescida dos nomes de indivíduos de E chama-se linguagem
diagrama de L e a denotamos por L(E). Usamos i e j como meta-variáveis
para nomes.
Uma expressão diz-se livre de variáveis se não contiver variáveis
individuais. Definimos agora um indivíduo E(a) de E para cada termo a livre
140
de variáveis de L(E). Se a é um nome, E(a) é o próprio indivíduo do qual a é
seu nome. Se a não é um nome, a é da forma f(a1, ... , an) (dado que a é livre de
variáveis), onde f é um símbolo funcional de L. Pomos E(a) = fE(E(a1), ... ,
E(an)).
Uma fórmula fechada A é uma fórmula que não possui variáveis livres.
Isto quer dizer que A possui um só significado.
Definimos o valor-verdade V(A) de uma fórmula A de cada fórmula
fechada A de L(E).
Se A ≡ a = b, então V(A) = 1 ⇔ E(a) = E(b).
Se A ≡ p(a1, ... , an), então V(A) = 1 ⇔ pE(E(a1), ... , E(an)).3
Se A ≡ (¬B), então V(A) = 1 ⇔ V(B) = 0.
Se A ≡ (B ∧ C), então V(A) = 1 ⇔ V(B) = 1 e V(C) = 1.
Se A ≡ (B ∨ C), então V(A) = 1 ⇔ V(B) = 1 ou V(C) = 1.
Se A ≡ (B → C), então V(A) = 1 ⇔ V(B) = 0 ou V(C) = 1.
Se A ≡ ( x)B, então V(A) = 1 ⇔ V(Bx[i]) = 1 para todo i (em L(E)).
Se A ≡ (∃x)B, então V(A) = 1 ⇔ V(Bx[i]) = 1 para algum i (em L(E)).
Definição 2 (Conseqüência semântica). Seja Γ um conjunto de
fórmulas e A uma fórmula. Diz-se que A é conseqüência semântica de Γ se
para toda interpretação E temos que V(A) = 1, sempre que V(B) =1, qualquer
que seja B ∈ Γ. Neste caso, simbolizamos por Γ ? A. No caso de Γ = ∅,
escreve-se ? A e A chama-se fórmula logicamente válida ou, simplesmente,
fórmula válida.
Teorema 1. Se A é uma tautologia, então ? A.
O seguinte teorema mostra que se existe uma dedução de A a partir de
Γ, então A é conseqüência semântica de Γ. Tal teorema nos mostra que o
cálculo de predicados é correto.
Teorema 2 (da Correção). Se Γ ? A, então Γ ? A.
1.
2.
3.
4.
5.
6.
3
Exercício 1. Mostre que as seguintes fórmulas são logicamente
válidas.
[A → (B → A)]
{[A → (B → C)] → [(A → B) → (A → C)]}
[(A ∧ B) → A]
[(A ∧ B) → B]
{A → [B → (A ∧ B)]}
[A → (A ∨ B)]
pE(E(a1), ... , E(an)) indica que (E(a1), ... , E(an)) ∈ pE
141
[B → (A ∨ B)]
{(A → C) → [(B → C) → [(A ∨ B) → C]]}
{(A → B) → [[A → (¬B)] → (¬A)]}
[(¬(¬A)) → A]
Ax [t]→∃xA
xA→Ax[t]
Passemos á questão da completeza do cálculo de predicados. Esta
questão consiste em analisar se uma fórmula A é conseqüência semântica de
Γ, então há uma dedução de A a partir de Γ. A resposta é afirmativa e é
conhecida como teorema da completeza do cálculo de predicados.
7.
8.
9.
10.
11.
12.
Definição 3 (Conjunto inconsistente de fórmulas). Um conjunto de
fórmulas diz-se inconsistente se existir uma fórmula A tal que Γ A e Γ
(¬A). Caso contrário, Γ diz-se consistente.
Definição 4 (Conjunto trivial de fórmulas). Um conjunto de fórmulas
Γ diz-se trivial Γ A, para qualquer fórmula A. Caso contrário, Γ diz-se nãotrivial.
Teorema 3. Um conjunto de fórmulas Γ é trivial se e somente se for
inconsistente.
Demonstração. Se Γ for trivial, então Γ é obviamente inconsistente.
Se Γ for inconsistente, então existe uma fórmula A tal que Γ A e Γ (¬A).
Porém, temos Γ ? A → [(¬A) → B]. Combinando-se os resultados acima,
obtemos Γ B. Como B é arbitrário, advém que Γ é trivial.
Definição 5 (Conjunto consistente maximal de fórmulas). Um conjunto
de fórmulas Γ diz-se consistente maximal se Γ for consistente e não estiver
contido propriamente em nenhum outro conjunto consistente.
Definição 6 (Modelo). Seja E uma estrutura e Γ um conjunto de
fórmulas. E diz-se um modelo de Γ se V(A) = 1 para toda fórmula A ∈ Γ.
Teorema 4. Γ
A se e somente se todo modelo de Γ for modelo de
{A}.
Definição 7 (Satisfação). Diz-se que uma estrutura E satisfaz um
conjunto de fórmulas Γ se for modelo do mesmo. E diz-se um modelo de Γ se
V(A) = 1, para todo A ∈ Γ. Em particular, E satisfaz um fórmula A se for
modelo de A.
Teorema 5 (Compacidade). Um conjunto de fórmulas Γ é consistente
142
se e somente se qualquer de seus conjuntos finitos for consistente.
Demonstração. Se Γ é consistente então é imediato que qualquer de
seus conjuntos finitos é consistente. Se qualquer de seus conjuntos finitos
for consistente, admitamos que Γ seja inconsistente. Logo, existe uma fórmula
A tal que Γ A e Γ (¬A). daí, temos Γ [A ∧ (¬A)], o que utiliza um
conjunto finito de fórmulas de Γ. Logo, tal conjunto finito é inconsistente, o
que constitui absurdo.
Definição 8 (Conjunto de Henkin). Um conjunto de fórmulas Γ chamase conjunto de Henkin se para cada instanciação fechada ∃xA tal que Γ
∃xA, existe uma constante e tal que Γ ∃xA → Ax[e].4
Teorema 6 (Conjunto maximal). Todo conjunto consistente de fórmulas
Γ está contido num conjunto consistente maximal de fórmulas.
Demonstração. Seja Γ um conjunto consistente de fórmulas. Vamos
fazer uma restrição: admitimos que o número cardinal do conjunto de fórmulas
é enumerável:5 A0, A1, ... , An, ... Construamos uma seqüência de conjuntos
de fórmulas Γ0, Γ1, ... , Γn, ... assim:
Γ0 = Γ
Γi+1 = para i ≥ 0.
Observemos que cada Γi é consistente. Também, Γ ⊆ Γi, para todo i. Seja Γ*
= . Temos Γ ⊆ Γ*. Afirmamos que Γ* é consistente. Com efeito, se Γ* for
inconsistente, há uma fórmula A tal que temos Γ* [A ∧ (¬A)]. Logo, há uma
dedução de tal fórmula a partir de Γ* que consiste em um número finito de
fórmulas. Logo, há seguramente um n tal que Γn
[A ∧ (¬A)], o que é
absurdo, porquanto Γn é consistente. Finalmente, provemos que Γ* é maximal.
Com efeito, admitamos que exista uma fórmula B ∉ Γ* tal que Γ ∪ {B} seja
consistente. A fórmula B é uma das fórmulas da seqüência A0, A1, ... , An, ...
Seja B = Ak. Como Ak ∉ Γ*, isto significa que Γk ∪ {Ak} é inconsistente e, em
conseqüência, Γ* é inconsistente, o que contraria o que se demonstrou
acima.
Definição 9. Seja t um termo livre para a variável x. Diz-se que que t Γsatisfaz uma fórmula A(x) se Γ A(t).
Teorema 7. Seja Γ um conjunto consistente maximal de fórmulas.
Temos:
1. Γ A ⇔ A ∈ Γ (em particular, todo axioma A ∈ Γ)
2. A ∧ B ∈ Γ ⇔ A ∈ Γ e B ∈ Γ
3. A ∨ B ∈ Γ ⇔ A ∈ Γ ou B ∈ Γ
4
5
Que escrevemos também “Γ for modelo de A”.
Para cardinais quaisquer, recomendamos a obra [Shoenfield 67].
143
4.
5.
6.
7.
8.
A → B ∈ Γ ⇔ A ∉ Γ ou B ∈ Γ
Para toda fórmula A, A ∈ Γ ou (¬A) ∈ Γ
Se A ∈ Γ e (A → B) ∈ Γ, então B ∈ Γ
xA ∈ Γ ⇔ todo termo t Γ-satisfaz A(x)
∃xA ∈ Γ ⇔ algum termo t Γ-satisfaz A(x)
Teorema 8. Todo conjunto de Henkin consistente de fórmulas possui
modelo.
Demonstração. Seja um conjunto consistente. Ele está contido num
conjunto consistente maximal Γ. Provemos que Γ possui modelo. Sejam t e s
termos livres de variáveis 6 . Pomos t ∼ s se Γ t = s. Pode-se provar que ∼
constitui uma relação de eqüivalência sobre o conjunto dos termos livres de
variáveis. Denotemos a classe de eqüivalência determinada por t por t*. O
modelo que construiremos possui como universo o conjunto quociente do
conjunto dos termos pela relação ∼. Estabeleçamos as correspondências. A
cada símbolo predicativo n-ário p associamos a relação pE definida por
pE(t1*, ... , tn*) se e somente se Γ ? p(t1, ... , tn)
Pode se verificar que a definição precedente é independente dos
representantes escolhidos e, portanto, está bem definida. Além disso, o
símbolo de igualdade corresponde á igualdade entre classes de eqüivalência,
como é fácil de verificar.
A cada símbolo funcional n-ário f associamos a função fE definida
por
fE(t1*, ... , tn*) = f(t1, ... , tn)*
A cada constante individual c associamos o indivíduo cE definido
por
cE = c*
Pode se verificar que as definições precedentes são independentes
dos representantes escolhidos e, portanto, estão bem definidas.
Teorema 9. Seja Γ um conjunto de Henkin. Seja E a estrutura obtida
no teorema anterior (denominada estrutura canônica). Seja A uma fórmula
fechada. Então E(A) = 1 se e somente se Γ A.
Teorema 10. (Completeza forte). Se Γ A, então Γ A.
Demonstração. Suponha-se que Γ A. Se Γ ? A, então Γ ∪ {(¬A)} é
consistente. Daí Γ ∪ {(¬A)} possui um modelo E. Em particular, E é modelo
de Γ, E é modelo de {A}, o que contraria o fato de E ser modelo de Γ ∪
{(¬A)}, em particular, de (¬A). Logo, Γ ? A.
6
Sobre os conceitos da teoria intuitiva dos conjuntos recomendamos a obra [Abe &
Papavero 92].
144
Teorema 11. (Completeza fraca). Se
A, então
A.
Teorema 12. (Consistência). Um conjunto Γ de fórmulas possui
modelo se e somente se Γ for consistente.
145
3 ALGUNS ASPECTOS DE
PROGRAMAÇÃO EM
LÓGICA E PROLOG
3.1 - Introdução
A lógica, desde Aristóteles, sempre esteve ligada ao pensamento
científico. Ela constitui a base para deduzir conseqüências a partir de certas
premissas; para estudar a validade ou a falsidade de sentenças dada a validade ou a falsidade de outras sentenças; para verificar a validade de argumentações; e para estabelecer a consistência de um conjunto de sentenças.
Já os computadores surgiram na história há muito pouco tempo, ao
compará-los com a lógica. Quase todos os computadores de hoje em dia são
baseados no modelo (ou máquina) de von Neumann que surgiu na década
de 40. Esta máquina é uma concretização da máquina (ideal) de Alain Turing.
A máquina proposta por von Neumann é constituída por um “grande” conjunto de células de memória e uma unidade de processamento com algumas
células de memória locais chamadas registradores.
Figura 1: Esquema básico da máquina de von Neumann.
A unidade de processamento pode copiar dados armazenados nas
células de memória para os registradores, realizar operações com esses dados nos registradores e transferir os resultados de volta para as células de
memória. Um programa para a máquina de von Neumann deverá fornecer
147
instruções que realizem as operações descritas acima.
O desenvolvimento de computadores baseados na máquina de von
Neumann encontrou muitas limitações tecnológicas e de engenharia que
foram sendo resolvidas através dos anos. Porém, à medida que os problemas
relativos à construção de computadores eram resolvidos, os problemas relativos a como utilizá-los apareciam. Em outras palavras, os computadores
eram capazes de realizar as instruções fornecidas pelo homem porém o homem ainda não era plenamente apto a programar os computadores para resolver problemas práticos que surgiam. A única linguagem disponível na
época era a linguagem específica de cada máquina através da qual o programador fornecia instruções ao “estilo von Neumann”.
A construção de programas escritos em linguagem de máquina era
complexa e tomava muito tempo. A partir daí, linguagens mais fáceis para a
compreensão humana começaram a aparecer: Fortran, Algol e Pascal mas
todas elas apresentavam características marcantes da máquina de von
Neumann subjacente. Notamos que apesar dessas linguagens serem mais
fáceis para a compreensão do homem, elas ainda eram orientadas à máquina,
isto é, o homem contruía programas nessas linguagens pensando em termos
de operações do computador.
3.2 - A proposta da programação em lógica
Seria muito interessante se, ao invés de termos linguagens orientadas à máquina, tivéssemos linguagens “orientadas ao homem”, ou seja,
linguagens que não fossem meras abstrações do modelo de von Neumann
mas que fossem derivadas de um modelo abstrato que não tivesse relação
direta ou dependência com nenhuma máquina.
Felizmente isso foi possível através da lógica. Até o início da década de 70 utilizava-se a lógica apenas como uma ferramenta para projetar
computadores (mais especificamente para projetar circuitos) e para auxiliar
na construção de programas escritos em Algol ou Fortran . A partir do início
da década de 70, trabalhos de Robert Kowalski propunham a utilização da
lógica diretamente como uma linguagem de programação. A essa nova área
da ciência que nascia, deu-se o nome de programação em lógica. Os programas contruídos utilizando a lógica diretamente como linguagem de programação receberam o nome de programas lógicos.
Em termos gerais, a proposta da programação em lógica é a seguinte: um programa lógico é constituído por um conjunto de axiomas e por um
conjunto de regras de inferência. De posse desse programa podemos fazer
“perguntas” a ele. Essas “perguntas” na verdade são fórmulas as quais
desejamos saber se podem ser deduzidas (ou não) a partir dos axiomas e
regras de inferência contidos no programa lógico. Observando a Figura 2,
temos:
1
O conceito de máquina de Turing apóia toda a Teoria da Computabilidade que contém
problemas em aberto que desafiam pesquisadores do mundo todo.
2
A citada linguagem específica de cada máquina na verdade é a linguagem do
microprocessador com o qual a máquina (o computador) foi construído.
148
Figura 2: Funcionamento de um programa lógico.
Em outras palavras, as “perguntas” nada mais são do que fórmulas
as quais desejamos saber se são teoremas na teoria formal fornecida pelo
programa lógico. Essa teoria formal seria constituída pelos axiomas e regras
de inferência do programa lógico.
Dizemos que as “perguntas”, que na verdade são fórmulas, as quais
submetemos ao programa lógico constituem a entrada do programa lógico.
Dada uma entrada, dizemos que o processo de tentarmos demonstrar essa
entrada a partir dos axiomas e regras de inferência do programa lógico é a
execução do programa lógico. Esta noção se identifica com a noção de
computação da máquina de Turing.
Paralelamente aos trabalhos de Robert Kowalski, Alain Colmerauer
e seus colegas desenvolveram um programa que capturava a idéia do mecanismo de tentar provar as “perguntas” (fórmulas) a partir de um conjunto de
axiomas e regras de inferência. Esse programa recebeu o nome PROLOG (do
francês “PROgramation et LOGique”). Mais adiante veremos um pouco sobre o PROLOG mas antes disso veremos os principais conceitos e ferramentas da programação em lógica. Para começar, teremos uma seção totalmente
dedicada às cláusulas de Horn pois é através delas que poderemos escrever
os programas lógicos. Depois, teremos uma seção dedicada a exemplos e
mais conceitos ligados aos programas lógicos.
4.3 - Cláusula de Horn
A linguagem que utilizamos para trabalhar com a programação em
lógica é um subconjunto da linguagem do cálculo de predicados vista no
capítulo 3 e recebe o nome de linguagem das cláusulas de Horn. Portanto,
trabalharemos com o cálculo de predicados restrito à linguagem das cláusulas de Horn.
Esquematicamente, temos:
3
Algol e Fortran eram as linguagens mais famosas até essa época.
149
Figura 3: Cláusulas de Horn.
O objetivo desta seção é estudar as cláusulas de Horn de tal modo
que na próxima seção estaremos em condições de utilizá-las para escrever os
primeiros programas lógicos. Para isso, primeiramente destacaremos algumas das regras que já utilizamos no cálculo proposicional e de predicados
bem como um pouco do jargão da programação em lógica. Depois, estudaremos as cláusulas de programa e as cláusulas gol (que são os dois tipos de
cláusulas de Horn).
3.4 - Considerações preliminares
O objetivo desta sub-seção é fixar parte do jargão da lógica e de
programação em lógica que utilizaremos daqui em diante.
A toda hora utilizaremos predicados na construção de programas
lógicos. Por isso, apesar de termos definido que apenas letras tais como p, q
com ou sem índices denotam predicados, tomaremos a liberdade de utilizar,
por exemplo,
casados ( x, y )
para denotar que x é casado com y ao invés de
p6(x,y)
que seria muito menos ilustrativo.
Dizemos que uma fórmula do cálculo do predicados é atômica
quando ela é do tipo
p(t1 ,t2,...,tn)
na qual:
• p é um predicado n-ário;
• t1 , t2 , ..., tn são termos.
Como exemplos de fórmulas atômicas, podemos escrever:
Exemplos:
1. p(x).
150
2. q2 (x,y).
3. mãe(y,x).
4. q3 (x,y,z).
Podemos dizer que uma fórmula atômica é uma literal positiva.
Portanto, os exemplos dados acima, além de serem exemplos de fórmulas
atômicas, também são exemplos de literais positivas.
A negação de uma fórmula atômica é dita literal negativa. Como
exemplos de literais negativas, podemos citar:
Exemplos:
1. ¬q4 (x,y).
2. ¬tio(y,x).
3. ¬q5 (x,y,z).
4. ¬avó(x,y).
Em programação em lógica, podemos escrever uma implicação do
tipo:
A→B
de maneira inversa, ou seja,
B←A
O motivo disso é simplesmente destacar a conclusão da implicação.
Isto ficará mais claro quando estivermos utilizando a regra de resolução que
apresentaremos mais adiante. Ainda com respeito às implicações, diremos
que B é a cabeça e A é o corpo da implicação. Observemos os seguintes
exemplos:
Exemplos:
1. x y ( p(x,y) → q(x,y) ).
Escrita de maneira inversa: x y ( q(x,y) ← p(x,y) ).
Cabeça: q(x,y).
Corpo: p(x,y).
2. x y z ( ( p2 (x,y,z) ∧ q5 (x,z) ∧ q1 (z) ) → ( q3 (z) ∨ q4 (x) ) ).
Escrita de maneira inversa: ↔x≈y≈z ((q 3 (z) ∨ q 4 (x))
←(p2(x,y,z)∧q5(x,z)∧p1 (z))).
Cabeça: q3 (z) ∨ q4 (x).
Corpo: p2 (x,y,z) ∧ q5 (x,z) ∧ p1 (z).
3. x y z ( ( namorados (x, y) ∧ namorados (y, z) ) → triângulo (x, y, z )
).
Escrita de maneira inversa: x y z ( triângulo (x, y, z ) ← (
namorados (x, y) ∧ namorados (y, z))).
Cabeça: triângulo (x, y, z ).
Corpo: namorados (x, y) ∧ namorados (y, z).
151
Observação:
Os predicados acima se referem a pessoas e são definidos da
seguinte maneira:
• namorados(x,y) ≡ “x e y namoram”;
• triângulo(x,y,z) ≡ “x, y, z formam um triângulo amoroso.”.
4. x ( ( perto-da-praia(x) ∧ grande(x) )→ casa-boa(x) ).
Escrita de maneira inversa: x (casa-boa(x)←(perto-da-praia(x) ∧
grande(x) )).
Cabeça: casa-boa(x).
Corpo: perto-da-praia(x) ∧ grande(x).
Observação:
Os predicados acima se referem a casas e são definidos da seguinte
maneira:
• perto-da-praia(x) ≡ “x é uma casa localizada perto da praia.”;
• grande(x) ≡ “x é uma casa grande.”;
• casa-boa(x) ≡ “x é uma boa casa para morar.”.
5. x y z ( ( pai(x,y) ∧ irmãos(x,z) )→ tio(z,x) ).
Escrita de maneira inversa: x y z (tio(z,x) ← ( pai(x,y) ∧
irmãos(x,z) )).
Cabeça: tio(z,x).
Corpo: pai(x,y) ∧ irmãos(x,z).
Observação:
Os predicados acima se referem a pessoas e são definidos da
seguinte maneira:
• pai(x,y) ≡ “x é pai de y.”;
• irmãos(x,z) ≡ “x e z são irmãos.”;
• tio(z,x) ≡ “z é tio de x”.
No decorrer do texto, utilizaremos, basicamente, duas regras de
inferência que vimos no cálculo de predicados de primeira ordem. São elas a
regra de modus ponens e a regra de particularização. Além disso, em alguns
momentos, utilizaremos a contrapositiva de uma implicação confome vista
no cálculo proposicional e de predicados. Eis aqui alguns exemplos de
contrapositivas de implicações:
1. x ( q(x) → p(x) ) cuja contrapositiva é:
x ( ¬p(x) → ¬q(x) ).
Escrevendo a cláusula de maneira inversa, teríamos:
x ( p(x) ← q(x) ) cuja contrapositiva é:
x ( ¬q(x) ← ¬p(x) ).
2. ∃x y z ( ( p4 (x,y,z) ∧ q(x) ) → ( q4 (x,y) ∨ q3 (z) ) ) cuja contrapositiva é:
∃x y z ( ¬( q4 (x,y) ∨ q3 (z) ) → ¬( p4(x,y,z) ∧ q(x) ) ).
Escrevendo a cláusula de maneira inversa, teríamos:
152
∃x y z( (q4 (x,y) ∨ q3 (z) ) ← ( p4 (x,y,z) ∧ q(x) ) ) cuja contrapositiva é:
∃x y z ( ¬( p4 (x,y,z) ∧ q(x) ) ← ¬(q4 (x,y) ∨ q3 (z) ) ).
3. x y z ( ( pai(x,y) ∧ irmãos(x,z) )→ tio(z,x) ) cuja contrapositiva é :
x y z (¬tio(z,x) → ¬ (pai(x,y) ∧ irmãos(x,z) ) ).
Escrevendo a cláusula de maneira inversa, temos:
x y z (tio(z,x) ← ( pai(x,y) ∧ irmãos(x,z) ) ) cuja contrapositiva é :
x y z (¬ (pai(x,y) ∧ irmãos(x,z) ) ← ¬tio(z,x) ).
3.5 - Cláusula
Uma cláusula é uma fórmula (do cálculo de predicados) do seguinte
tipo:
x1 , ... , xk ( L1 ∨ ... ∨ Lm )
(1)
na qual Li é uma literal positiva ou negativa e x1 , ..., xk são as variáveis que
ocorrem em L1∨ ... ∨ Lm.
Exemplos: (Cláusulas)
1. x y z ( p(x) ∨ q(y,z) ∨ ¬p2 (x,y,z) ).
2. x p5 (x).
3. y z ( ¬p6 (y) ∨ q3 (z) ).
4. x y ( tio (x) ∨ pai (y) ).
5. x z ( maior(x,z) ∨ menor(x,z) ∨ igual(x,z) ).
6. x ( solteiro(x) ∨ casado(x) ∨ viúvo(x) ∨ divorciado(x) ).
Diremos que a cláusula, tal como escrita em (1) , está no formato
original de disjunção. Porém, para escrevermos os programas lógicos, é
conveniente escrever (1), na notação clausal. Escrever uma cláusula na
notação clausal é reescrevê-la utilizando-se o conectivo de implicação (“←”).
Para entendermos melhor, vamos reescrever a cláusula (1) na notação clausal,
explicitando cada passo:
Passo 1 : Separação das literais positivas e negativas: já que temos a lei
comutativa e associativa para o conectivo de disjunção, podemos escrever
primeiro as literais negativas seguidas das positivas. Deste modo, podemos
reescrever (1) assim:
x1 , ... , xk ( (¬B1 ∨ ... ∨ ¬Bs ) ∨ (A1 ∨ ... ∨ Ar ) ) (2)
na qual ¬B1 , ..., ¬Bs são as literais negativas e A1 , ..., Ar são as literais
positivas.
Passo 2 : Aplicação das leis de De Morgan: observemos que em (2) temos
uma disjunção de literais negativas, a saber, ¬B1 ∨ ... ∨ ¬Bs. Através das leis
de De Morgan, podemos escrever que:
(¬B1 ∨ ... ∨ ¬Bs ) ↔ ¬( B1 ∧ ... ∧ Bs ).
153
Então, podemos escrever (2) da seguinte maneira:
x1 , ... , xk (¬ ( B1 ∧ ... ∧ Bs ) ∨ (A1 ∨ ... ∨ Ar ) ) (3)
Passo 3 : Formato de implicação: Lembremos que:
( A → B ) ↔ ( ¬A ∨ B )
e, portanto, podemos escrever (3) do seguinte modo:
x1 , ... , xk ( ( B1 ∧ ... ∧ Bs ) → ( A1 ∨ ... ∨ Ar ) ) (4 )
Passo 4 : Notação Clausal: Conforme vimos na sub-seção 4.3.1 podemos
escrever (4) de maneira inversa:
x1 , ..., xk ( (A1 ∨ ... ∨ Ar ) ← ( B1 ∧ ... ∧ Bs ) ) (5)
Observação:
• Todas as variáveis que ocorrem nas literais componentes de (5) estão
quantificadas universalmente : então, se não escrevermos “ x1 ,..., x2”
não tem problema pois já saberemos que todas as variáveis que ocorrem em
(5) já estão quantificadas universalmente;
• O corpo de (5) é composta de uma conjunção de literais: então ao invés
de escrevermos o conectivo “∧” poderemos escrever uma vírgula (“,”) e não
haverá perigo de confusão;
• A cabeça de (5) é composta de uma disjunção de literais: então ao invés
de escrevermos o conectivo “∨” poderemos escrever uma vírgula (“,”) e não
haverá perigo de confusão.
Com isso em mente, podemos escrever (5) da seguinte maneira:
A1 , ..., Ar ← B1 , ..., Bs
(6)
e dizemos que (6) está escrita na notação clausal.
Dizemos que uma cláusula tem corpo vazio se não possui literais
negativas no formato original de disjunção. Dizemos que uma cláusula tem
cabeça vazia se não possui literais positivas no formato original de disjunção.
Vamos fazer alguns exemplos de escrever cláusulas nesta notação
através dos passos vistos anteriormente?
Exemplos:
1. cláusula x y ( p(x) ∨ q(x) ∨ ¬q2(x,y) ).
Passo 1 : Separação de literais: x y ( ¬q2 (x,y) ∨ (p(x) ∨ q(x)) ).
Passo 2 : Aplicação das leis de De Morgan: como só há uma literal negativa,
não precisamos aplicar.
Passo 3 : Formato de implicação: x y ( q2 (x,y) → (p(x) ∨ q(x)) ).
Passo 4 : Notação clausal: p(x), q(x) ← q2 (x,y).
Vamos examinar mais um exemplo no qual ocorra mais literais
negativas para que possamos aplicar as leis de De Morgan.
154
2. cláusula x y z ( p2 (x,y) ∨ ¬q1 (x) ∨ p3 (x,y) ∨ ¬q3 (z) ).
Passo 1: Separação de literais: x y z ( (¬q1 (x) ∨ ¬q3 (z)) ∨ (p2 (x,y) ∨ p3
(x,z)) ).
Passo 2: Aplicação das leis de De Morgan: x y z (¬( q1 (x) ∧ q3 (z) ) ∨ (p2
(x, y)∨ p3 (x, z))).
Passo 3: Formato de implicação: x y ( (q1 (x) ∧ q3 (z)) → (p2 (x,y) ∨ p3 (x,z))
).
Passo 4: Notação clausal: p2 (x,y), p3 (x,z) ← q1 (x), q3 (z).
3. cláusula x y z ( ¬pai(y,x) ∨ ¬irmão(y,z) ∨ tio(z,x) ).
Passo 1 : Separação de literais: x y z ( (¬pai(y,x) ∨ ¬irmão(y,z)) ∨ tio(z,x)
).
Passo 2 : Aplicação das leis de De Morgan: x y z ( ¬( pai(y,x) ∧ irmão(y,z)
) ∨ tio(z,x)) .
Passo 3 : Formato de implicação: x y z ( (pai(y,x) ∧ irmão(y,z)) →
tio(z,x)).
Passo 4 : Notação clausal: tio(z,x) ← pai(y,x), irmão(y,z).
Observação:
A notação clausal é compacta e muito conveniente. A seguir,
estudaremos alguns tipos especiais de cláusulas.
3.6 - Cláusula de Programa
Dizemos que uma cláusula é uma cláusula de programa se:
• Possuir apenas uma literal na cabeça: conseqüentemente, no formato
original de disjunção, a cláusula de programa possui apenas uma literal
positiva;
• O corpo pode ou não ser vazio.
O formato de uma cláusula de programa pode ser:
A ← B1 , ... , Bn (corpo não vazio)
ou
A←
(corpo vazio)
Vejamos alguns exemplos de cláusulas de programa:
Exemplos:
1. p(x)←q(x), r(x);
2. r(y)← ;
3. gripe(x) ← febre(x),mal-estar(x).
4. q(x)←q1 (x,y), q2 (x,z);
5. q3 (z)← ;
6. festa-ruim(x) ← pessoal-chato(x),comida-ruim(x);
7. aprovado(x) ← media-maior-sete(x),presença-ok(x);
155
8. r1 (x,y,z) ←r2 (x,y),r3 (y,z),r4 (z,w);
9. q3 (x,y,z,w) ← .
4.7 - Cláusula de Programa Condicional.
Dizemos que uma cláusula de programa é condicional se:
• O corpo da cláusula tiver pelo menos uma literal: conseqüentemente, no
formato original de disjunção, a cláusula de programa condicional contém
pelo menos uma literal negativa e
• A cabeça da cláusula tiver exatamente uma literal: conseqüentemente,
no formato original de disjunção, a cláusula de programa condicional contém
exatamente uma literal positiva.
O “jeitão” das cláusulas de programa condicionais é o seguinte:
A ← B1 , ..., Bn.
Podemos interpretá-la do seguinte modo:
“Para toda atribuição de valores às variáveis que ocorrem na cláusula, se B1
, B2, ... , Bn são todas verdadeiras então A é verdadeira.”
Vejamos alguns exemplos de cláusulas de programa condicionais:
Exemplos:
1.) Veja os exemplos 1, 3, 4, 6, 7 e 8 da definição 5.3.3;
2.) p2 (x)←p3 (x), q2 (y): Podemos ler esta cláusula do seguinte modo: “Para
toda atribuição de valores às variáveis x e y, se p3 (x) e q2 (y) forem ambas
verdadeiras então p2 (x) também o será”;
3. q1 (x)←r2 (x,y), r5 (y,z), p3 (x,y): Podemos ler esta cláusula do seguinte
modo: “Para toda atribuição de valores às variáveis x, y e z, se r2 (x,y), r5 (y,z)
e p3 (x,y) forem verdadeiras ao mesmo tempo, q1 (x) também o será”;
4. p3 (x)←q2 (x,y,z): Podemos ler esta cláusula do seguinte modo: “Para toda
a atribuição de valores às variáveis x, y e z, se q2 (x,y,z) for verdadeira então
p3 (x) também o será.
5. tio(z,x)←pai(y,x),irmão(y,z): Podemos ler esta cláusula do seguinte modo:
“Para toda a atribuição de valores às variáveis x, y e z, se pai(y,x) for verdadeiro
( “se y for pai de x”) e irmão(y,z) também o for (“se y for irmão de z”) então
tio(z,x) também o será (“z é tio de x”).
Agora vejamos o caso em que as cláusulas tem o corpo vazio pois
ela recebem uma denominação especial.
156
4.8 - Cláusula de Programa Incondicional
Dizemos que uma cláusula de programa é incondicional se:
• O corpo dela for vazio: conseqüentemente, no formato original de
disjunção, a cláusula de programa incondicional não contém literais negativas
e
• A cabeça dela contiver exatamente uma literal: conseqüentemente, no
formato original de disjunção, a cláusula de programa incondicional contém
exatamente uma literal positiva.
O “jeitão” das cláusulas de programa incondicionais é o seguinte:
A← .
Isso, na forma original de disjunção, é o seguinte:
x1 ,..., xk A (7)
na qual x1 ,..., xk são as variáveis que ocorrem na literal A. Podemos interpretar
(7) do seguinte modo :
“Para toda atribuição de valores às variáveis da cláusula, A é verdadeira.”
As cláusulas de programa incondicionais são também chamadas de
cláusulas unidade ou cláusulas com antecedente vazio. Alguns exemplos
nos ajudarão a entender melhor a idéia das cláusulas de programa
incondicionais.
Observações:
1. exemplos 2, 5 e 9 da definição 4.3.3;
2. q2 (x)← e podemos ler esta cláusula do seguinte modo: “Para toda a
atribuição de valores à variável x, q2 (x) é verdadeira”;
3. r2 (x,y,z)← e podemos ler esta cláusula do seguinte modo: “Para toda a
atribuição de valores às variáveis x, y e z, r2 (x,y,z) é verdadeira”;
4. p7 (x,y,z,w)← e podemos ler esta cláusula do seguinte modo: “Para toda
atribuição de valores às variáveis x, y, z e w, p7 (x,y,z,w) é verdadeira”;
5. p(x,y,z)← e podemos ler esta cláusula do seguinte modo: “Para toda
atribuição de valores às variáveis x,y,z, p(x,y,z) é verdadeira”;
6. respira(x)← e podemos ler esta cláusula do seguinte modo: “Para toda
atribuição de valores à variável x, respira(x) é verdadeira” ( todo humano
respira! );
Notemos que cláusulas de programa (tanto as condicionais quanto
as incondicionais) podem ser encaradas como axiomas. Também notemos
que as regras apresentadas na sub-seção 4.3.1 podem ser encaradas como
regras de inferência.
157
Isso parece com algo que já vimos! Se tivermos axiomas e regras de
inferência, podemos falar em teorias formais axiomáticas e podemos deduzir
(pelo menos, tentar!) fatos dessa teoria. Dada uma teoria formal axiomática T,
formada por axiomas (cláusulas de programa) e por regras de inferência (subseção 4.3.1) e dada uma fórmula F, podemos tentar demonstrar F em T.
A seguir, começaremos a ver como podemos tentar demonstrar uma
dada fórmula F a partir de T tal como descrita acima.
3.9 - Cláusula gol 4
Dizemos que uma cláusula de programa é uma cláusula gol se:
• A cabeça é vazia: conseqüentemente, no formato original de disjunção,
a cláusula gol não contém literais positivas e
• Contiver pelo menos uma literal no corpo: conseqüentemente, no formato
original de disjunção, a cláusula gol contém pelo menos uma literal negativa.
Uma cláusula gol, portanto, tem o seguinte formato:
← B1 , B2 , ..., Bn. (8)
Suponhamos que as variáveis que ocorrem em (8) são y1 , ... , yr .
Podemos escrever (8) no formato original de disjunção do seguinte modo:
y1 , ..., yr ( ¬B1 ∨ ... ∨ ¬Bn ) (9)
Pelas leis de De Morgan, sabemos que:
(¬B1 ∨ ... ∨ ¬Bn ) ↔ ¬( B1 ∧ ... ∧ Bn ).
e podemos escrever (9) da seguinte maneira:
y1 , ..., yr ¬ (B1 ∧ ... ∧ Bn ) (10).
Sabemos que:
( x ¬A ) ↔ (¬ ∃x A) (11)
e, então, podemos escrever (10) da seguinte maneira:
¬ ( ∃y1 , ..., ∃yr (B1 ∧ ... ∧ Bn ) ) (12).
Para entendermos melhor o que significa uma cláusula gol, vejamos os
seguintes exemplos:
Exemplos:
1. ← p(x) que é o mesmo que escrever : ¬ ( ∃x p(x) );
2. ← p(x), q(y) que é o mesmo que escrever : ¬ ( ∃x ∃y p(x) ∧ q(y) );
3. ← p1 (x), q2 (x,y), r3 (x,y,z) que é o mesmo que escrever: ¬ ( ∃x ∃y ∃z p1 (x) ∧
q2 (x,y) ∧ r3 (x,y,z) );
4
do inglês “goal clause” A palavra goal podde ser traduzida também como meta
porém preferimos a palavra gol por ser mais “familiar”
158
4. ← p2 (x,y,z), q5 (x,y,z,w), r6 (x) que é o mesmo que escrever: ¬ ( ∃x ∃y ∃z ∃w
p2 (x,y,z) ∧ q5 (x,y,z,w) ∧ r6 (x) ).
5. ← q3 (x,y,z) que é o mesmo que escrever: ¬ ( ∃x ∃y ∃z q3 (x,y,z) );
6. ← gripe(x) que é o mesmo que escrever: ¬∃x gripe(x);
7. ← pai(x,y) que é o mesmo que escrever: ¬(∃x ∃y pai(x,y) ).
Surge, então, a pergunta:
Será que o fato de cláusulas gol serem, no fundo, negações contribui para
alguma coisa???
A resposta é “Sim”. Ainda bem!
Geralmente, quando temos uma teoria formal axiomática T e uma
fórmula F e desejamos saber se há uma demonstração para F em T, um dos
procedimentos a tomar é admitir como hipótese que ¬F é verdadeira. A partir
daí, utilizando os axiomas e regras de inferência de T, tentamos obter alguma
fórmula que seja a negação de algum axioma de T. Se conseguirmos
demonstrar uma fórmula que seja a negação de algum axioma de T, isso quer
dizer que ¬F é falso e, portanto, F pode ser demonstrada em T. A esse tipo
de demostração damos o nome de demonstração por redução ao absurdo.
3.10 - Cláusula vazia
A cláusula vazia, denotada por, é a cláusula de programa sem
corpo e sem cabeça (isso mesmo!). Deve ser interpretada como uma contradição. Para entender melhor a cláusula vazia, consideremos o seguinte exemplo do cálculo proposicional: se tivermos A1 , A2 , ..., An , B letras do cálculo
proposicional e considerar B a disjunção A1 ∨ ... ∨ An, B assumirá valor
verdade 1 se algum dos A i assumir valor verdade 1. Em outras palavras,
basta que um Ai assuma valor verdade 1 para que B assuma valor verdade 1.
Agora imaginemos que não temos Ai algum para compor a disjunção. Logo,
B sempre assumirá valor verdade 0, ou seja, B será uma contradição.
A cláusula vazia ( ) nos ajudará a indicar quando conseguimos refutar
a negação de uma fórmula F numa teoria formal axiomática T fornecida por
um programa lógico.
3.11 - Cláusula de Horn
Uma cláusula de Horn é uma cláusula de programa ou é uma cláusula
gol.
A seguir, vejamos alguns exemplos de cláusulas de Horn:
Exemplos:
1. todos os exemplos da seção 4.3.3;
159
2. todos os exemplos da seção 4.3.4;
3. todos os exemplos da seção 4.3.5;
4. q(x) ← p(x), p2 (x,y,z), q4 (x,z,y);
5. avô(z,x) ← pai(z,y), pai(y,x).
O que temos até agora.
Após examinarmos várias definições, chegou o momento de dar
uma pausa e examinarmos, sucintamente, as ferramentas que temos até agora.
Voltando à Figura 1, podemos detalhar o conjunto das cláusulas de
Horn da seguinte maneira:
\
Figura 5: Tipos de cláusulas de Horn.
Na próxima seção, utilizaremos todos estes tipos de cláusulas de
Horn para construir alguns programas lógicos, porém antes disso, alguns
exercícios.
Exercícios
1) Escreva as seguintes implicações na notação clausal.
a) x ( p(x) ∧ s(x) → q(x) ∨ r(x) ).
b) x y ( p1 (x,y) ∧ p2 (x,y) → p3 (x,y) ∨ p4 (x,y) ).
160
c)
d)
e)
f)
g)
x y z ( q1 (x) ∧ q2 (x,y) → q3 (x,y,z) ).
x y z ( p(x,y,z) ∧ q(x,z,y) → q2 (z,x,y) ∨ p3 (z,y,x) ).
x y ( p(x) ∧ r(y,z) ∧ q(x,y,z) → q(y) ∨ p4 (x,y,z) ).
x y z ( ( pai(x,y) ∧ pai(z,x) ) → avô(z,y) ).
x ( ( febre(x) ∧ manchas-vermelhas(x) ) → sarampo(x) ).
2) Dadas as seguintes cláusulas de Horn, escreva-as na forma original de
disjunção. Considere x, y, z as variáveis envolvidas.
a) A ← B, C.
b) p(x)←.
c) q(x) ← r(x,y), s(x,y,z).
d) ← r(x,y,z), s(x,y,z).
e) q2(x,y,z) ←.
f) q1(x,z,y) ← q2(x,y,z), p3(x,y).
g) ← p2(x,y).
3) Escreva as seguintes implicações na notação clausal.
a) x ( p1(x) ∧ p2(x) ∧ p3(x) → q1(x) ∨ q2(x) ).
b) x y ( p6(x) ∧ p5(x,y) ∧ p4(x,y) → q3(y) ∨ q4(x) ).
c) x y z ( p7(x,y,z) ∧ p8(x,y) → q5(z) ∨ q7(y) ).
d) x y ( r(x,y) ∧ s(x,z) → t(y,z) ).
e) x y z ( p(x,y,z) → q(x,y,z) ∨ r(x) ∨ s(y) ).
f) x ( ( gripe(x) ∧ toma-chuva(x) ) → pneumonia(x) ).
g) x ( ( estrada(x,y) ∧ estrada(y,z) ) → estrada(x,z) ).
4) Dadas as seguintes cláusulas de Horn, escreva-as na forma original de
disjunção. Considere x,y,z e w as variáveis envolvidas. Também diga se são
cláusulas condicionais, incondicionais ou gol.
a.) C, D, E ← A, B, F.
b.) ← p(x), q(y,z), r(y,x).
c.) s(y) ←.
d.) p(x) ← q(y), r(x,y,z).
e.) q(x,y,z) ← r(x,y), s(x,z).
f.) q2(x,y,z,w), q4(y,x,w), q5(x) ← q6(x,y,w,z).
g.) ← p(x,y,z), q5(y,x,w,z).
h.) r2(x,y,z,w) ←.
i.) ← p4(x,y,w,z), q4(x,y), r4(x).
sobrinho(x,y) ← pai(z,x),irmãos(z,y)
3.12 - Programas lógicos e teorias.
Na última seção estudamos as cláusulas de Horn que constituem
uma das ferramentas básicas da programação em lógica. O objetivo principal
desta seção é introduzir programas lógicos bem como métodos para a
computação dos mesmos. Para tanto, inicialmente vamos estudar alguns
exemplos de programas lógicos de uma maneira informal. Após esses
exemplos, estudaremos alguns outros conceitos relacionados com a
computação de programas lógicos.
161
4.13 - Programa Lógico
Um programa lógico é um conjunto finito de cláusulas de programa.
Vejamos alguns exemplos de programas lógicos:
Exemplos:
1.)- Programa P1.
(1) p(a) ←.
(2) q(b) ←.
(3) q(x) ← p(x).
2.) - Programa P2.
(1) p(a,b)←.
(2) q(a,b)←.
(3) r(x,y)← p(x,y).
(4) s(x,y)← q(y,x).
3.) - Programa P3.
(1) p(a,b) ←.
(2) q(b,c) ←.
(3) r(x,z) ← p(x,y), q(y,z).
4.) - Programa P4.
(1) p(x) ← p(x).
(2) p(a) ←.
(3) q(c) ←.
(4) p(b) ←.
Daqui em diante, em nome da simplicidade, escreveremos
“programa” ao invés de “programa lógico”.
Comentamos na seção anterior que um programa é constituído por
um conjunto finito de axiomas sobre os quais podemos aplicar modus ponens
e particularização (4.3.1) como regras de inferência. Observemos o programa
P1 do exemplo 1 acima.
Podemos dizer que:
• p(a) é axioma;
• q(b) é axioma;
• Para todo x, se ¬q(x) é verdadeiro então ¬p(x) é verdadeiro.
Estranho! Ao invés de escrever “para todo x, se p(x) é verdadeiro
então q(x) é verdadeiro” conforme a linha (3) de P1, escrevemos a sua
contrapositiva. Bem, não há nenhum problema pois a cláusula de programa
escrita na linha (3) e a sua contrapositiva são logicamente equivalentes. O
motivo por havermos escrito a contrapositiva ficará mais claro adiante.
162
Juntamente com esses três axiomas, podemos considerar:
• A regra de modus ponens e
• A regra de particularização.
Notemos que com esses cinco itens, temos uma teoria formal
axiomática fornecida pelo programa P1. Então, dado qualquer programa,
podemos construir uma teoria formal axiomática a partir dele de acordo com
a Figura 6 e dizemos que essa teoria formal axiomática foi fornecida pelo
programa.
Figura 6: Construção de uma teoria formal axiomática a partir de um
programa.
Podemos demonstrar teoremas na teoria T acima. Dada uma fórmula
atômica F de T, por exemplo, podemos tentar demonstrar F em T. A fórmula
F, neste caso, é chamada de consulta ao programa P. Se F for teorema em T
dizemos que F foi deduzida a partir do programa P.
3.13 - Computação de gols
A computação de um gol consiste em tentarmos provar que uma
consulta a um programa é um teorema na teoria axiomática que o programa
fornece, tal como na Figura 6. No nosso texto, vamos só considerar as
consultas que são fórmulas atômicas ou fórmulas que são conjunções de
fórmulas atômicas. A seguir, descrevemos um método para computar gols
que utiliza a idéia da demonstração por absurdo. Dado um programa P e uma
163
consulta F, podemos executar os seguintes passos para verificar se F pode
ser deduzida a partir de P:
Método para computação de gols:
Passo 1 : construção de T: construimos T conforme a Figura 6;
Passo 2 : construção do gol F’: a partir de F, construimos o gol F’ ≡ ← F.
Notemos que F’ é a negação de F, conforme a seção 4.3.6;
Passo 3 : obtenção de contradição: assumimos F’como verdadeira em T e
tentamos demonstrar através dos axiomas e das regras de inferência de T
que a cláusula gol F’ implica em uma contradição em T (computação de gols
via demonstração por absurdo).
Passo 4 : término da computação : se conseguirmos deduzir que F’ implica
em uma contradição, conseguimos provar que F é um teorema em T que é o
mesmo que dizer que F foi deduzida a partir de P.
Caso contrário, se ao longo da tentativa de deduzir uma contradição
obtivermos uma fórmula F’’ tal que:
• F’’ não está na lista de axiomas ou
• Não podemos aplicar regras de inferência em F’’ e mais outro axioma
então dizemos que F não é um teorema de T e, portanto, F não pode ser
deduzida a partir de P.
Agora ficou mais claro porque chamamos de computação de gols o
método de tentar provar teoremas na teoria T fornecida pelo programa P:
simplesmente porque construímos uma cláusula gol com a consulta F
“candidata” à teorema em T. De acordo com o passo 2 do método acima, F’
é a negação de F. De acordo com o passo 3, tomaremos F’ como verdadeira
e utilizaremos os axiomas e regras de inferência para tentar deduzir uma
contradição. Também dizemos que a computação do gol F’ foi bem sucedida.
Sem mais discussões, vamos dar uma olhada nos exemplos da subseção anterior. Tínhamos o programa P1 do exemplo 1 que transcrevemos:
Exemplos:
Exemplo 1) - Programa P1.
p(a) ←.
q(b) ←.
q(x) ← p(x).
Seguindo o passo 1 do método descrito acima, temos a seguinte
teoria fornecida por P1:
Teoria T1.
Axiomas:
(A1). p(a) ←
(A2). q(b) ←
(A3). ( ¬q(x) → ¬p(x) )
Regras de inferência:
164
• Modus ponens;
• Particularização.
Ok! Agora, consideremos algumas consultas a P1. Para computar gols, vamos
utilizar o método descrito acima.
Consulta 1 - F ≡ p(a).
Passo 1: Teoria T1 já foi construída;
Passo 2: Podemos construir a cláusula gol F’ ≡ ←p(a). Lembremos que a
cláusula gol F’ é a negação de F e, portanto, F’ ≡ ¬ p(a);
Passo 3: Vamos assumir que F’ é verdadeira em T1. Notemos que F’ por si
mesma já contradiz (A1). Portanto, F’ implica em uma contradição em T1;
Passo 4: Então F é teorema em T1 que é o mesmo que dizer que F foi deduzida
a partir de P1.
Consulta 2 - F ≡ q(a).
Passo 1: Teoria T1 já foi construída;
Passo 2: Podemos construir a cláusula gol F’ ≡ ← q(a) que significa ¬q(a);
Passo 3: Vamos assumir que F’ é verdadeira em T1. Observamos (A1) e (A2) e
não podemos utilizá-los para q(a) (o bom seria que ou (A1) ou (A2) fosse um
axioma do tipo q(a) e aí já teríamos uma contradição!) porém podemos utilizar
o (A3) com particularização. Temos que:
¬q(a) → ¬ p(a).
Utilizando a regra de modus ponens, temos:
¬q(a).
¬q(a) → ¬ p(a).
¬ p(a).
Notemos que ¬p(a) é o mesmo que ← p(a) que é uma nova cláusula
gol. De posse da nova cláusula gol, damos uma nova olhada nos axiomas.
Ao observamos os axiomas de T1, vemos que ¬p(a) contradiz o axioma (A2).
Portanto, F’ implica em uma contradição em P 1;
Passo 4: Então, F é teorema em T1 que é o mesmo que dizer que F foi deduzida
a partir de P1.
Consulta 3 - F ≡ p(b).
Passo 1: Teoria T1 já foi construída;
Passo 2: Podemos construir a cláusula gol F’ ≡ ← p(b) que significa ¬ p(b);
Passo 3: Vamos assumir que F’ é verdadeira em T1. Olhando para os axiomas
(A1) e (A2) concluimos que não podemos utilizá-los para chegar a lugar
algum com ¬p(b). Olhando para o axioma (A3) concluímos que também não
165
podemos utilizá-lo;
Passo 4: Concluimos que F não é um teorema de T1 e, portanto, F não pode
ser deduzida de P1.
Vamos dar uma olhada no programa P2 do Exemplo 2 o qual transcreveremos:
Exemplo 2) - Programa P2.
p(a,b)←.
q(a,b)←.
r(x,y)← p(x,y).
s(x,y)← q(y,x).
Construindo a teoria T2 associada ao Programa P2 (Passo 1), temos:
Teoria T2.
Axiomas:
(A1) p(a,b) ←
(A2) q(a,b) ←
(A3) x y (¬r(x,y) → ¬p(x,y) )
(A4).↔x ↔y (¬s(x,y) → ¬q(y,x) )
Regras de inferência:
• Modus ponens;
• Particularização.
Consideremos algumas consultas a P2.
Consulta 1 - F ≡ r(a,b).
Passo 1: Teoria T2 já construída;
Passo 2: Considere a cláusula gol F’ ≡ ← r(a,b) que significa ¬ r(a,b);
Passo 3: Vamos assumir que F’ é verdadeira em T2. Ao olharmos para os
axiomas de T2 notemos que o único axioma que podemos utilizar é o (A3).
Utilizando particularização em (A3) podemos escrever:
¬ r(a,b) → ¬ p(a,b).
Utilizando a regra de modus ponens, temos:
¬r(a,b)
¬r(a,b) → ¬p(a,b)
¬p(a,b).
Notemos que ¬p(a,b) é uma nova cláusula gol pois é o mesmo que
← p(a,b). De posse da nova cláusula gol, damos uma nova olhada nos
axiomas. Podemos ver que a nova cláusula gol já contradiz o axioma (A1).
Portanto F’ implica em uma contradição em T2;
Passo 4: Portanto, F é um teorema em T 2 que é o mesmo que dizer que F foi
166
deduzida a partir de P2.
Consulta 2 - F ≡ s(a,b).
Passo 1: Teoria T2 já foi construída;
Passo 2: Considere a cláusula gol F’ ≡ ← s(a,b) que significa ¬s(a,b);
Passo 3: Vamos assumir que F’ é verdadeira em T2. Olhando para os axiomas
de T2, não podemos utilizar nenhum deles bem como não podemos utilizar
nenhuma regra de inferência;
Passo 4: Portanto, concluímos que F não é teorema de T 2 que é o mesmo que
dizer que F não pode ser deduzida a partir de P2.
Exemplo 3) - Examinemos o programa P4 o qual é o seguinte:
Programa P4.
(A1) p(x) ← p(x).
(A2) p(a) ←.
(A3) p(b) ←.
(A4) q(c) ←.
Construindo a teoria T4 associada ao P4 (através do Passo 1 do
Algoritmo 4.4.2.) , temos:
Teoria T4.
Axiomas:
(A1) p(x) ←p(x)
(A2) p(a)←.
(A3) q(c)←.
(A4) p(b)←.
Regras de inferência:
• Modus ponens;
• Particularização.
Consideremos algumas consultas a P4:
Consulta 1 - F ≡ p(a).
Passo 1: Teoria T4 já foi construída;
Passo 2: Consideremos a cláusula gol F’≡ ←p(a) que significa ¬p(a);
Passo 3: Vamos assumir que F’ é verdade em T4. Olhando para os axiomas,
podemos afirmar que ¬p(a) e o axioma (A2) já se contradizem em T4;
Passo 4: Portanto, F é teorema em T4 que é o mesmo que dizer que F pode ser
deduzida a partir de P4.
Vamos supor que, por algum motivo, não “tenhamos visto” o axioma
(A2) mas sim o axioma (A1): afinal, o axioma (A1) é o primeiro axioma da lista
de axiomas e podemos utilizá-lo. Aplicando particularização em (A1) para x =
167
a, temos:
¬p(a) → ¬p(a)
e aplicando modus ponens, temos:
¬p(a).
Ah! Obtivemos ¬p(a) que é exatamente a cláusula gol inicial. Sem
problemas! Continuemos a tentar obter uma contradição: devemos dar uma
nova olhada nos axiomas e verificar se podemos utilizar algum deles.
Suponhamos que tenhamos escolhido o axioma (A1) novamente (nem vimos
o axioma (A2)!). Vamos obter ¬p(a) novamente! Notemos que se insistirmos
em utilizar (A1), não pararemos a computação.
Note que podemos adotar certas estratégias para efetuarmos
computação de gols. Vejamos que utilizar o primeiro axioma que aparece na
lista de axiomas pode ser um mau negócio como vimos no exemplo acima:
mesmo existindo o axioma (A2) que já resolveria o problema, insistimos em
utilizar o axioma (A1) que nos levaria a uma computação sem término.
Em termos gerais, as computações de gol que fizemos aqui se
resumiram no seguinte (já supondo a teoria fornecida pelo programa):
1. começávamos com uma cláusula gol (que na verdade era uma negação
que assumíamos como verdade);
2. utilizávamos a regra de modus ponens;
3. utilizávamos a regra de particularização que no fundo era a substituição
da variável no axioma por uma constante da teoria fornecida pelo programa;
4. obtínhamos uma nova cláusula gol que geralmente era originária da
aplicação de modus ponens.
Com isso em mente, podemos dizer que para uma computação (finita
ou infinita):
• Temos uma seqüência C0,C1,... (finita ou infinita) dos axiomas da teoria
(fornecida pelo programa) que são usados. Notemos que um axioma pode
aparecer várias vezes nesta seqüência, porém, podem estar particularizados
para constantes distintas;
• Temos uma seqüência G0, G1,... (finita ou infinita) de cláusulas gol que
vão sendo obtidas a partir das regras de inferência;
• Temos uma seqüência S0, S1,... (finita ou infinita) de substituições
decorrentes das particularizações.
Na seção 4.6, apresentaremos um novo método de computação de
gols chamado SLD-derivação. Este método vai nos poupar o trabalho de
termos que escrever a teoria fornecida pelo programa e poderemos fazer
consultas a ele diretamente. Além disso, é um método mais rápido e prático.
No entanto, veremos que ao utilizarmos a SLD-derivação estaremos
implicitamente fazendo o mesmo serviço de demonstrar teoremas em uma
168
teoria fornecida por um programa. Antes disso, na seção 4.5 (a próxima
seção) veremos alguns conceitos bem importantes relacionados à SLDderivação.
Exemplo 4) Dado o programa abaixo e algumas consultas, escreva a teoria a
ele associada e faça a computação das cláusulas gol também dadas.
Programa P3.
p(a,b) ←.
q(b,c) ←.
r(x,z) ← p(x,y), q(y,z).
Construindo a teoria T3 associada a P3 (passo 1 do Algoritmo 4.4.2. acima),
temos:
Teoria T3
Axiomas:
(A1) p(a,b)←.
(A2) q(b,c)←.
(A3) x y z ( ¬r(x,z) → ¬ ( p(x,y) ∧ q(y,z) ) ).
Regras de inferência:
• modus ponens;
• particularização.
Vamos fazer algumas consultas a P3.
Consulta 1 - F ≡ r(a,c).
Passo 1: Teoria T3 já foi construída;
Passo 2: Devemos construir a cláusula gol F’≡←r(a,c). Lembremos, mais
uma vez, que podemos escrever a cláusula F’do seguinte modo: F’ ≡ ¬r(a,c);
Passo 3: Vamos assumir que F’ é verdadeira em T3. Olhando para os axiomas,
notamos que podemos utilizar o axioma (A3). Utilizando três vezes, em seguida,
particularização, respectivamente, para x = a, y = b e z = c, temos:
¬r(a,c) → ¬ (p(a,b) ∧ q(b,c).
Note que a premissa da fórmula acima poderia ser vista como uma cláusula
gol ← ( p(a,b) ∧ q(b,c) ).
Aplicando as leis de De Morgan, na fórmula acima, temos:
169
¬r(a,c) → (¬p(a,b) ∨ ¬q(b,c) ).
Utilizando modus ponens, temos:
¬r(a,c).
¬r(a,c) → (¬p(a,b) ∨ ¬q(b,c))
¬p(a,b) ∨ ¬q(b,c).
Notemos que ¬p(a,b) e ¬q(b,c) contradizem os axiomas (A1) e (A2) de P3;
Passo 4: Portanto concluímos que F é teorema de T3 que é o mesmo que dizer
que F pode ser deduzida de P3.
Consulta 2 - F ≡ r(c,a).
Passo 1: Teoria T3 já construída;
Passo 2: Considere a cláusula gol F’≡ ←r(c,a) que significa ¬r(c,a);
Passo 3: Vamos assumir que F’ é verdadeira em T3. Olhando para os axiomas
, mais uma vez, utilizaremos o axioma (A3). Utilizando particularização três
vezes respectivamente para x = c, y = b, z = a, temos:
¬r(c,a) → ¬(p(c,b) ∧ q(b,a) ).
Aplicando as leis de De Morgan na fórmula acima , temos:
¬r(c,a) → (¬p(c,b) ∨ ¬q(b,a) ).
Utilizando modus ponens, temos:
¬r(c,a).
¬r(c,a) → (¬p(c,b) ∨ ¬q(b,a) ).
¬p(c,b) ∨ ¬q(b,a).
Notemos agora que de posse de ¬p(c,b) e de ¬q(b,a) não
encontramos nenhum axioma que possamos utilizar: os axiomas (A1) e (A2)
são fórmulas base bem como ¬p(c,b) e ¬q(b,a) e estas últimas duas fórmulas
não contradizem (A1) e (A2). Não podemos aplicar o axioma (A3) pelo mesmo
motivo: pelo fato de ¬p(c,b) e ¬q(b,a) serem fórmulas base. Não obtivemos
uma contradição e não podemos aplicar nem axiomas e nem regras de
inferência;
Passo 4: Portanto, F não é um teorema de T3 o que é o mesmo que dizer que
F não pode ser deduzida a partir de T3.
170
Exercícios
5) Cada item abaixo contém um programa lógico. Para cada um deles, escreva a teoria finita associada e faça a computação das cláusulas gol dadas.
a) Programa:
p(x)←q(x).
q(a)←.
Consultas: p(a) , p(b) , p(c) , q(a) , q(b) , q(c).
b) Programa:
p(x)←q(x,y),q(y,x).
q(x,y)←r(x,y,z),r(x,z,y),q(y,z).
r(x,y,z)←s(x,y).
r(x,y,z)←r(y,x,z),s(y,z).
q(a,a)←.
q(b,b)←.
s(a,b)←.
p(b)←.
Consultas: p(b) , s(b,a) , s(a,b) , r(a,b,c) , q(a,b) , r(b,a,c).
c) Programa:
p(x)←p(y),q(x,y).
q(x,y)←q(y,x).
q(a,b)←.
p(a)←.
Consultas: p(b) , p(a) , q(b,a) , q(a,b).
d) Programa:
p(x)←p(x).
p(a)←.
q(a)←.
Consultas : p(a) , p(b) , q(a) , q(b).
e) Programa:
p(x,z)←q(x,y,z), q(y,x,z).
q(a,b,e)←.
q(a,c,e)←.
q(b,a,e)←.
Consultas: p(a,c) , p(c,a) , q(a,b,e) , p(a,e) , p(e,a).
171
f) Aplicação de programas lógicos em diagnóstico médico:
mal-estar(Pedro)←.
temp-maior-37(Maria)←.
bolhinhas(Maria)←.
mal-estar(Maria)←.
manchas-verm(Pedro)←.
gland-inflam(Pedro)←.
febre(x) ← temp-maior-37(x).
gripe(x) ← mal-estar(x), febre(x).
sarampo(x) ← manchas-verm(x),febre(x).
caxumba(x) ← gland-inflam(x),febre(x).
catapora(x) ← bolhinhas(x),febre(x),mal-estar(x).
Consultas: catapora(Pedro), catapora(Maria), sarampo(Pedro).
3.14 - Substituições e unificadores
Nesta sub-seção, veremos os conceitos de substituição, unificador
e unificador mais geral. Terminaremos esta sub-seção apresentando o
algoritmo da unificação que será uma ferramenta importante para a próxima
sub-seção na qual veremos as SLD-derivações.
A idéia de utilizar os unificadores é bem intuitiva: quando
estávamos computando alguns gols na seção passada, nós tentávamos
achar um axioma tal que, particularizado convenientemente, poderíamos
usar modus ponens para esse axioma e para a cláusula gol.
Exemplo:
Se tínhamos uma cláusula gol
¬p(a)
e tínhamos um axioma,
x ( ¬p(x) → ¬q(x) )
nós particularizávamos este axioma com a constante a para podermos
aplicar modus ponens depois:
¬p(a)
¬p(a) → ¬q(a) (axioma particularizado)
¬q(a).
O que acabamos de fazer pode ser dito da seguinte maneira
utilizando unificadores: “a fórmula ¬p(a) foi unificada com a fórmula x (
p(x) → q(x) )” .
O intuito do algoritmo de unificação é fornecer um método mecânico
172
para que alguém possa decidir se duas fórmulas podem ser unificadas ou
não. Além disso, se o algoritmo decidir que as duas fórmulas podem ser
unificadas ele também fornece o unificador mais geral, ou seja, a melhor
particularização possível para o axioma utilizado na computação.
3.15 - Substituição
Uma substituição α ?é um conjunto finito da forma
{ v1/t1, v2/t2, ..., vn/tn }
e
• cada vi é uma variável;
• cada ti é um termo distinto de vi;
• as variáveis v1,...,vn são distintas.
Cada elemento vi/ti é chamado de ligação.
α é chamada de :
• substituição base se ti são todos termos que não contêm variáveis;
• substituição pura de variáveis se os termos ti são todos variáveis;
• renomeação se os termos ti são todos variáveis distintas.
• substituição identidade quando o conjunto de ligações for vazio.
Exemplos: (Substituições)
1. α1 = { x1/a , x2/x1 }.
2. α2 = { x2/b , y/x2 , z/x1 }.
3. α3 = { x/y , z/y }.
4. α4 = { x/a , y/b , z/x2 }.
5. α5 = { x3/x2 , x4/y2 , x5/x3 }.
6. α6 = { }.
4.16 - Instância de uma substituição.
Seja β = {v1/t1, ..., vn/tn} uma substituição e E uma expressão. Então
a instância de E por β representada por Eβ
β é a expressão obtida de E
substituindo simultaneamente cada ocorrência da variável vi em E pelo termo
ti ( i = 1,2,...,n ). Se Eβ não contiver variáveis, então Eβ é chamada de instância
base de E.
Exemplos:
1. Considere a expressão E1 ≡ p(x,y) e a substituição β1 = { x/a , y/b }.
Temos que E1β1 ≡ p(a,b).
2. Considere a expressão E2 ≡ p(x,y) e a substituição β2 = { x/a }.
Temos que E2β2 ≡ p(a,y).
3. Considere a expressão E3 ≡ q2(x,y,z) ∧ q5(x,y) e a substituição β3 = { x/y , y/
173
z , z/x }.
Temos que E3β3 ≡ q2(y,z,x) ∧ q5(y,z).
4. Considere a expressão E4 ≡ p(x,y) ∨ p5(y,z,x,z2) e a substituição β4 = { x/a ,
y/x , z/b , z2/y}.
Temos que E4β4 ≡ p(a,x) ∨ p5(x,b,a,y).
3.17 - Composição de substituições
Considere duas substituições α = {u1/s1, ..., um/sm} e β={v1/t1, ...,
vn/tn}. A composição αβ de α e β é a substituição obtida pelo conjunto:
{u1/s1β, ..., um/smβ, v1/t1,..., vn/tn}
de onde devemos retirar as eventuais ligações do tipo:
• ui/siβ para as quais ui ≡ siβ e
• vj/tj para as quais vj ∈ { u1, ..., um }.
Exemplos: (Composição de substituições)
1. Considere as substituições α1 = { x/y , z/x2} e α2 = { y/c , x2/d }.
Temos que α1α 2 = { x/yα2 , z/x2α2 , y/c , x2/d } = { x/c , z/d , y/c , x2/d }.
2. Considere as substituições α3 = { x2/z2 , y2/y3 , z3/x1 } e α4 = { y3/b , z2/x2 , y3/
y2 }.
Temos que α2?α 3α4 = { x2/z2α4 , y2/y3α4 , z3/x1α4 , y3/b , z2/x2 , y3/y2 } =
= { x2/x2 , y2/b , z3/x1 , y3/b , z2/x2 , y3/y2 } =
= { y2/b , z3/x1 , y3/b , z2/x2 , y3/y2 } =
= { y2/b , z3/x1 , y3/b , z2/x2 }.
3. Considere as substituições α5 = { x/y } e α6 = { y/b , z/d }.
Temos que α3 α5α6 = { x/yα6 , y/b , z/d } = { x/b , y/b , z/d }.
3.18 - Variante
Consideremos duas expressões E e F. Dizemos que E e F são
variantes se existirem substituições α e β tais que E ≡ F α e F ≡ Eβ. Também
dizemos que E é variante de F ou F é variante de E.
Exemplos:
1. Considere as expressões E ≡ q(x,y,a) e F ≡ q(z,y2,a). E e F são variantes pois
dadas as substituições:
α= { z/x , y2/y } e β?= { x/z , y/y2 }
temos que F ≡ E α e E ≡ Fβ.
2. Considere as expressões E ≡ p(x1,x2,x3,b) e F ≡ p(x3,x1,x2,b). E e F são
variantes pois dadas as substituições:
174
γ = { x3/x1 , x1/x2 , x2/x3 } e µ = { x1/x3 , x2/x1 , x3/x2 }
temos que F ≡ E γ e E ≡ Fµ .
3. Considere as expressões E ≡ p2(x) ∧ q3(y) ∨ q5(x,z) e F ≡ q3(x) ∧ p2(z) ∨ q5(z,y).
E e F são variantes pois dadas as substituições:
α= { z/x , x/y , y/z } e β = { x/z , y/x , z/y }
temos que F ≡ E α e E ≡ Fβ .
3.19 - Proposição
Para quaisquer substituições α, β e γ e uma expressão E, temos que:
(i ) (αβ)γ ≡ αβγ
(ii) (αβ)γ ≡ α(βγ )
Demonstração : Exercício 11.4.
4.20 - Substituição mais geral
Considere duas substituições α e β. Dizemos que α é mais geral
que β se existir uma substituição γ tal que αγ = βγ.
Como exemplos de substituições mais gerais utilizaremos os
exemplos dados no tópico 4.5.4. Observemos que:
1. α3 é mais geral que α2 pois existe uma substituição α4 tal que α2 α3=α4α3.
2. α5 é mais geral que α3 pois existe uma substituição α6 tal que α3 α5 =α6α5.
3.21 - Unificador
Considere duas expressões A e B e uma substituição α. Se tivermos
que Aα ≡ Bα então dizemos que a substituição α é um unificador de A e B.
Também podemos dizer que A e B são unificáveis.
Exemplos:
Considere as expressões E ≡ q(x,y,a) e F ≡ q(z,y2,a) e a substituição α ={ x/d
, y/e , z/d , y2/e }. Aplicando a substituição em E e F, temos:
Eα≡ q(d,e,a) e Fα ≡ q(d,e,a).
Notemos que Eα ≡ Fα e, portanto, α é um unificador de E e F.
Considere as expressões E ≡ p(x,y) ∧ q(y,z) e F ≡ p(z,w) ∧ q(x2,x3) e a
substituição β = { x/z , y/w , x2/w , x3/z }. Aplicando a substituição em E e F,
175
temos:
Eβ ≡ p(x,w) ∧ q(w,z) e F? ≡ p(z,w) ∧ q(w,z).
Notemos que Eβ ≡ Fβ e, portanto, β é um unificador de E e F.
Considere as expressões E ≡ p2(x,y,z) e F ≡ p2(x2,y2,z2) e a substituição α = {
x/x2 , y2/y , z/z2}. Aplicando a substituição em E e F, temos:
Eα≡ p2(x2,y,z2) e Fα ≡ p2(x2,y,z2).
Notemos que Eα ≡ Fα e, portanto, α é um unificador de E e F.
3.22 - Unificador mais geral - u.m.g.
Considere duas expressões A e B e um unificador α de A e B.
Dizemos que α é um unificador mais geral (umg) de A e B se for (uma
substituição) mais geral do que qualquer outro unificador de A e B.
Dadas duas expressões E e F, para efetivamente encontrarmos um
umg para elas (caso exista) devemos:
• achar uma substituição α tal que Eα ≡ Fα (unificador);
• provar que para qualquer outra substituição β, α é mais geral que β
(umg).
Dependendo da substituição, o segundo item pode proporcionar
um certo trabalho! Para evitar isso, o próximo tópico apresenta o algoritmo
de unificação : é um algoritmo determina se duas fórmulas atômicas têm um
umg ou não. Em caso afirmativo, o algoritmo também fornece o umg das duas
fórmulas atômicas. Este algoritmo não unifica expressões em geral uma vez
que o que nos importará é unificar apenas pares de fórmulas atômicas.
4.23 - Algoritmo de unificação
Aqui apresentamos um algoritmo que como entrada recebe um par
de fórmulas atômicas A e B e diz se A e B têm um unificador mais geral ou não.
Se ele disser que A e B têm um umg, o algoritmo também o fornece.
Algoritmo de unificação
Entrada: par de fórmulas atômicas (A , B).
Saída: “não”, se não for possível obter um umg para A e B.
“sim”, se for possível obter um umg para A e B além do próprio umg
de A e B.
Passo 0 : se o símbolo de predicado de A for diferente do símbolo de
176
predicado de B então emitir “não” como saída e parar o algoritmo indicando
uma falha, senão criar uma coleção P constituído por pares de termos (t i, si)
(i = { 1,2, ..., n } ) tais que C ≡ p(t1, ..., tn) e D ≡ p(s1,..., sn).
Passo 1 : escolher aleatoriamente um par (C , D) de P;
Passo 2 : se C ≡ f(s1,...,sn) e D ≡ f(t1,...,tn) então remover o par (C , D) de P e
incluir os pares (s1,t1), ..., (sn, tn) em P e voltar ao Passo 1, senão
Passo 3 : se C ≡ f(s1,...,sn) e D ≡ g(t1,...,tm) então emitir “não” como saída e
parar algoritmo indicando uma falha, senão
Passo 4 : se C ≡ D ≡ x (x variável) ou C ≡ D ≡ c ( c constante ) então remover
o par (C , D) de P e voltar ao Passo 1, e se C ≡ c (constante) e D ≡ d (
constante) então emitir “não!” e parar o algoritmo indicando falha senão
Passo 5 : se C ≡ t (t termo que não é variável) e D ≡ x (x variável) remover
o par (C , D) de P e incluir o par (D , C) em P e voltar ao Passo 1, senão
Passo 6 : se C ≡ x (x variável) e D ≡ t ( t termo) e x ≠ t e x ocorre em algum
par de P
Além disso, se x ocorrer em t, emitir “não”como saída e parar o
algoritmo indicando uma falha, senão substituir cada x pelo termo t em todos
os outros pares de P e voltar ao Passo 1.
Passo 7 : se nenhum passo anterior puder ser executado então emitir “sim”
e parar o algoritmo. O umg de A e B é dado pela substituição cujas ligações
são dadas pelos pares (C , D) que pertencem ao conjunto P.
Exemplos: (Utilização do algoritmo de unificação)
Considere A ≡ p(x,y,z) e B ≡ q(x,y,z).
Passo 0 : o símbolo de predicado de A é diferente do símbolo de predicado
de B. Portanto, o algoritmo emite “não!” (pois não é possível unificar A e B)
e pára.
2. Considere A ≡ p(x,y,z) e B ≡ q(x2,y2,z5).
Passo 0 : Os símbolos de predicado de A e de B são o mesmo. Portanto,
criamos a coleção P de pares:
P = { (x , x2) ; (y , y2) ; (z , z5) }.
Passo 1 : Escolhemos o primeiro par (x , x 2).
Observemos que:
- não é possível aplicarmos o Passo 2 e o Passo 3 pois não há símbolo
funcional;
- não é possível aplicarmos o Passo 4 pois não temos que x ≡ x2;
- não é possível aplicarmos o Passo 5 pois x2 é variável;
- não é possível aplicarmos o Passo 6 pois x não ocorre em outros pares
de P.
177
Notemos que para o par ( x , x2 ) não pudemos fazer muita coisa.
Acontecerá o mesmo ao escolhermos o segundo ou o terceiro par. Notemos
que P permanecerá inalterado e aí teremos:
Passo 7 : Portanto, o algoritmo de unificação emite “sim!” e fornece o umg
para A e B é a substituição cujas ligações são x/x2 , y/y2 e z/z5.
3. Considere A ≡ p(x,g(a,y)) e B ≡ p(y,g (a,x)).
Passo 0 : Os símbolos de predicado de A e de B são o mesmo. Portanto,
criamos a coleção P de pares:
P = { (x,y) ; ( g(a,y) , g(a,x) ) }.
Passo 1 : Escolhemos o primeiro par (x,y).
Notemos que:
- não é possível aplicarmos o Passo 2 e o Passo 3 pois não há símbolo
funcional;
- não é possível aplicarmos o Passo 4 pois não temos que x ≡ y;
- não é possível aplicarmos o Passo 5 pois os dois elementos do par são
variáveis;
Passo 6 : x é variável e y é termo (pois é uma variável). Devemos substituir
x por y em outros pares em que x ocorra. Então temos que:
P = { (x,y) ; ( g(a,y) , g(a,y) ) }.
e voltamos ao Passo 1.
Passo 1 : já que trabalhamos anteriormente com o par (x,y), vamos escolher
o par ( g(a,y),g(a,y) ).
Passo 2 : os dois elementos do par têm o mesmo símbolo funcional. Portanto
P fica:
P = { (x,y) ; (a,a) ; (y;y) }
e voltamos ao Passo 1.
Passo 1 : escolhemos o par (a,a);
Notemos que não aplicamos o Passo 2 nem o Passo 3 pois não há símbolo
funcional.
Passo 4 : removemos o par (a,a) e P fica:
178
P = { (x,y) ; (y,y) }
e voltamos ao Passo 1.
Ao escolhermos o par (y,y) aplicaremos o Passo 4 novamente e
acabaremos por eliminar o par (y,y) de P. Portanto P fica:
P = { (x,y) }.
Assim, não poderemos mais aplicar nenhum dos 6 primeiros passos
e teremos o
Passo 7 : o algoritmo emite “sim!” e fornece o umg para A e B cuja única
ligação é x/y.
Exercícios Resolvidos.
10.1. Em cada item, dada a substituição ? e a expressão E, obtenha a instância
E??
a) E ≡ p(x,y,z2 ) e α = { x/y }.
b) E ≡ q(x,y) ∧ r(x,z) ∧ p(x,y,z) e α = { x/a , y/b , z/x }.
c) E ≡ q4(x,y,z2) e α = { x/c , y/d }.
d) E ≡ p(x,y,z) e α = { }.
Resolução:
a) Temos que substituir todas as ocorrências de da variável x pela variável y
e teremos Eα ≡ p(y,y,z2).
b) Substituindo todas as ocorrências da variável x pela constante a, todas as
ocorrências da variável y pela constante b e todas as ocorrências da variável
z pela variável y, teremos que: Eα ≡ q(a,b) ∧ r(a,x) ∧ p(a,b,x).
c) Substituindo todas as ocorrências da variável x pela constante c e todas
as ocorrências da variável y pela constante d termos: Eα ≡ q4 (c,d,z2).
d) Aqui temos que α não possui nenhuma ligação pois é a substituição
identidade. Temos que Eα ≡ p(x,y,z).
10.2. Em cada item serão dadas duas substituições α e β. Obtenha a
composição de α e β?
a) α = { x/a , y/b , z/x } e β = { a/c};
b) α = { y/b , z/x } e β = { y/z};
c) α = { x/y , z/y } e β = { x/a , y/b};
d) α = { x1/z , y/z } e β = { z/c }.
Resolução:
a) Temos que a composição αβ= { x/aβ , y/ bβ , z/xβ , a/c β } = { x/c , y/b , z/
c , a/c };
b) Temos que a composição αβ = { y/b z/x y/z } = { y/b , z/x , y/z };
c) Temos que a composição αβ = { x/y z/y x/a , y/b } = { x/b , z/b , y/b };
179
d) Temos que a composição αβ = { x1 /z y/ z z/c } = { x1 /c , y/c , z/c }.
10.3. Em cada item será dado um par de expressões (E,F). Decida se E e F
são variantes. Se forem, exiba também substituições α e β tais que E ≡ Fα
e F ≡ Eβ.
a) E ≡ p(x,y,z) e F ≡ p(y,z,x).
b) E ≡ q(x) e F ≡ p(y).
c) E ≡ p(x,y,z) ∧ q(x,y) e F ≡ q(y,x,z) ∧ q(z,x).
d) E ≡ q(x1 ,x2 ) ∨ p(z,w) e F ≡ q(x,y) ∨ p(w,z).
Resolução:
a) Temos que E e F são variantes pois tomando as substituições α = { x/y , y/
z , z/x } e β={ y/x , z/y , x/z } teremos que Eα ≡ Fβ.
b) Temos que E e F não são variantes pois não existem substituições α e β
tais que Eα ≡ Fβ. Na verdade, o que realmente impede que E e F sejam
variantes é que o símbolo de predicado de E é diferente do símbolo de
predicado de F.
c) Temos que E e F não são variantes pois não existem substituições α e β
tais que Eα ≡ Fβ. Além disso, temos o mesmo problema do item anterior.
d) Temos que E e F são variantes pois tomando as substituições α={ x1 /x, x2
/y , z/w , w/z } e β = { x/x1 , y/x2 , w/z , z/w } teremos que Eα ≡ Fβ.
10.4. Em cada item serão dados: uma substituição α e duas expressões A
e B. Verifique se α é um unificador de A e B.
a) A ≡ p(x,y,z) , B ≡ p(y1 ,w,x1 ) e α={ x/a , y/b , z/w , y1 /a , w/b , x1 /w};
b) A ≡ q(x,y,f(w)) , B ≡ p(w,y,f(w)) e α={ x/a , y/c };
c) A ≡ tio(x,z) ∧ pai(y,w) , B ≡ tio(w,z1 ) ∧ pai(y,w) e α={ x/b , z/c , y/x , w/y , w/
b , z1 /c , w/y};
Resolução:
a) Aα ≡ p(a,b,w) e Bα ≡ p(a,b,w). Portanto, Aα ≡ Bα e α é um unificador para
A e B;
b) Aα ≡ q(a,c,f(w)) e Bα ≡ p(w,c,f(w)). Portanto, α não é um unificador de A
e B;
c) Aα ≡ tio(b,c) ∧ pai(x,y) e Bα ≡ tio(y,c) ∧ pai(x,y). Portanto, Aα ≡ Bα e α é
um unificador para A e B;
Exercícios Propostos.
11.1. Em cada item, dada a substituição α e a expressão E, obtenha a
instância Eα.?
a) E ≡ p(x,y,z) ∧ q(y,x,z,w) ∨ r(x,y) e α = { x/c, y/x };
b) E ≡ p1 (x,y,z2 ) ∧ ¬q4(x,y) ∧ r(x,y,z) e α = { z2 /x , y/c , x/y };
180
c) E ≡ tio(x,z) ∧ mãe(x) ∨ casados(x,w) e α= { x/z , w/y};
d) E ≡ casados(x,y) ∧ irmãos(x,w) e α = { y/w , x/a };
e) E ≡ irmão(x,y) ∧ irmão(y,z) → irmão(x,z) e α = { x/y , y/z , z/x };
f) E ≡ pai(x,y) ∧ irmão(x,z) → tio(z,y) e α = { x/a , y/b , z/c };
g) E ≡ namorados(x,y) ∧ namorados(x,z) → problema(x,y,z) e α= {x/y , z/x , y/
z };
h) E ≡ p(x,y,z,w) ∧ q(x) e α = { };
i) E ≡ q(x) ∧ p(y) e α = { w/y , x2 /a };
j) E ≡ p(x,y,z) ∧ q(x,y,z) ∨ r(x,y) e α = { z/a }.
11.2. Em cada item serão dadas duas substituições α e β. Obtenha a
composição de α e β:?
a) α = { x/a , y/b , z/x, x1 / z } e β = { x/c, y/z };
b) α = { y/b , z/x , x/y} e β = { y/z, x/a};
c) α = { y/z, x/y , z/y } e β = { w/c , x/a , y/b};
d) α = { x1/z , y/z , z/x , w/x} e β = {y/a , z/c };
e) α = { x/y , y/z , z/w } e β = { y/w , x/w , z/y};
f) α = { x2 /x , y2/y , z2 /z } e β = { };
g) α = { x/y , y/w} e β = { w/x };
h) α = { } e β = { };
i) α = { y/w , x/y } e β= { y/a , z/c };
j) α = { w1 /w , x2 / x} e β= { x1 / z};
11.3. Em cada item será dado um par de expressões (E,F). Decida se E e F
são variantes. Se forem, exiba também substituições α e β tais que E ≡ Fα
e F ≡ Eβ.?
a) E ≡ p(x) ∧ q(y) e F ≡ p(z) ∧ q(w);
b) E ≡ q(x,y,z) e F ≡ p(x,y,z);
c) E ≡ p(x1 , x2 , z ) e F ≡ p(y,x,z);
d) E ≡ pai(x,z) ∧ pai(x,y) e F ≡ pai(w,y) ∧ mãe (z,w);
e) E ≡ p(x,y,z3) ∨ q(x,y) e F ≡ p(w1 ,w2 ,w3 ) ∨ q(x1 ,x2);
f) E ≡ pai(x,z) ∧ irmãos(x,y) e F ≡ pai(w1 , w2 ) ∧ irmãos(x,y);
g) E ≡ p(x,y,z1 , z2 ) e F ≡ q(x,y,z,w);
h) E ≡ filho(x,y) ∧ filho(z,y) e F ≡ filho ( x1 , y1 ) ∧ filho ( z1 , y1 );
i) E ≡ q(y,x) e F ≡ q2 (x,y,z);
j) E ≡ mãe(x,y) ∨ pai(z,y) e F ≡ mãe(y,x) ∨ pai(y,z).
11.4 Prove a Proposição 5.
11.5 Utilize o algoritmo de unificação para obter um umg para os seguintes
pares de fórmulas:
a) A ≡ p(x,y,z) e B ≡ p(f(y) ,w,x);
b) A ≡ q(x,y,z) e B ≡ p(w,y,z);
c) A ≡ q(x,g(y),z) e B ≡ q(w,g(y), x1 );
d) A ≡ p6 (x,y,g(x,y) ) e B ≡ p6 ( w,z, h(w,z) );
e) A ≡ p4 ( x,y,z,w) e B ≡ p4 (x,y,g(x),w));
f) A ≡ tio(x,y,g(x,y,z) ) e B ≡ tio (w1 , w2 , g ( w1 ,w2 , w));
g) A ≡ colineares(x,g(x,y) ) e B ≡ colineares(w,g(w,x) );
181
Programas lógicos e a SLD-derivação.
Nesta seção, apresentaremos o conceito de SLD-derivação. Conforme já havíamos adiantado anteriormente, este conceito vem a ser um
método de computação de gols tal que não temos a necessidade de escrever
a teoria associada ao programa: as cláusulas gol podem ser diretamente
submetidas ao programa.
3.24 - Resolvente
Seja P um programa lógico e G ≡ ← A1, ..., An uma cláusula gol.
Suponhamos que C ≡ A ← B1,...,Bk é uma cláusula de programa de P. Se para
algum i, 1≤ i ≤ n, podemos unificar A e Ai através de um umg α então
chamamos:
G’ ≡ ← ( A1,...,Ai-1, B1,..., Bk, Ai+1, ..., An) α
de resolvente de G e C.
Em resumo, o resolvente de G e C vem a ser o produto da unificação
do corpo da cláusula gol e da cabeça de uma cláusula de programa de P.
Podemos escrever um algoritmo para obter um resolvente de uma cláusula G
e de uma cláusula de programa C.
Algoritmo para obter resolventes.
Entrada : cláusula gol G e cláusula de programa C;
Saída : resolvente G’ de G e C.
Passo 1: selecionar Ai em G (Ai está no corpo de G);
Passo 2: unificar (se possível) A e Ai através de um umg de A e Ai (podemos
utilizar o algoritmo de unificação). Notemos que A é a cabeça de C;
Passo 3: se tivermos sucesso no Passo 2 então substituir Ai por B 1,..., Bk
em G obtendo uma cláusula gol G’’;
Passo 4: aplicar o umg obtido no Passo 2 em G’’ obtendo uma cláusula G’
que é o resolvente de G e C.
Exemplos:
1. Lembra do Programa P1 da sub-seção 4.4.1?
Programa P1.
p(a) ←.
(1)
q(b) ←.
(2)
q(x) ← p(x) . (3)
e consideremos a cláusula gol G ≡ ← q(a).
Se tentarmos unificar q(a) de G com (1) ou (2), obteremos falha, ou
182
seja, q(a) não pode ser unificada nem com (1) (símbolo de predicado é diferente) nem com (2) (símbolo de predicado é o mesmo mas o argumento que é
uma constante é diferente). A única cláusula de programa que poderá ser
unificada com q(a) é a (3).
Podemos considerar que:
• G ≡ ← p(a). e então temos que A1 ≡ p(a);
• C ≡ q(x) ← p(x) , A ≡ q(x) e B1 ≡ p(x);
• α ≡ { x/a }.
Agora, aplicando o algoritmo acima para G e C, temos que:
Passo 1 : selecionamos A1 ≡ p(a) (só temos ele!);
Passo 2 : podemos unificar A1 e A através de α ≡ { x/a } que é um umg para
A1 e A;
Passo 3 : já que achamos um umg de A1 e A, podemos substituir A1 por B1
obtendo a cláusula gol
G’’ ≡ ← p(x);
Passo 4 : aplicar α em G’’ e obtemos:
G’ ≡ ← p(a).
que é o resolvente de G ≡ ←q(a) e de C ≡ q(x) ← p(x).
2. Ainda com base no Programa P1, vamos considerar a cláusula gol G ≡ ←
p(a). Observemos que G pode ser unificada com a cláusula de programa (1)
de P1.
Podemos escrever o seguinte:
• G ≡ ← p(a) e A1 ≡ p(a);
• C ≡ p(a) ←, A ≡ p(a) e B1 ≡ pois o corpo de C é vazio;
• α= { } que é a substituição identidade.
Agora, aplicando o algoritmo para calcular resolventes, temos:
Passo 1 : selecionamos A1 ≡ p(a) (aliás, só temos ele!);
Passo 2 : podemos unificar A1 e A através de α que é um umg para A1 e A;
Passo 3 : já que achamos um umg de A 1 e A, podemos substituir A1 por B1
obtendo a cláusula gol
G’’ ≡ ;
Passo 4 : aplicar α em G’’ e obtemos:
G’ ≡ .
183
que é o resolvente de G ≡ ←p(a) e de C ≡ p(a) ← .
Depois de fazer alguns exemplos, podemos notar que obter
resolventes é um modo indireto de aplicar particularização e modus ponens
numa teoria fornecida por um programa sem ter que escrever a teoria
propriamente dita. As demonstrações de teoremas na teoria fornecida por
um programa são feitas indiretamente pelas sucessivas obtenções de
resolventes. Na verdade, a SLD-derivação é justamente isso: ela consiste,
grosso modo, de utilizarmos sucessivamente o algoritmo para obtenção de
resolventes para computar uma cláusula gol.
3.25 - SLD-derivação
Considere um programa P e uma cláusula gol G. Uma SLD-derivação
de P ∪ {G} consiste de:
• uma seqüência (finita ou infinita) G=G0, G1, G2, ... de cláusulas gol;
• uma seqüência (finita ou infinita) C0, C1, C2, ... de cláusulas de programa
de P;
• uma seqüência (finita ou infinita) ?? ?1 ?2 ??? de substituições
tais que para i = 0, 1, 2, ...
• Gi+1 é um resolvente de Gi e Ci;
• ?i é o umg mencionado no Passo 2 do algoritmo para obter resolvente;
• Ci não tem variáveis em comum com Gi.
Dizemos que uma SLD-derivação é finita quando as seqüências Gi,
Ci e αi são finitas.Podemos representar através de um esquema gráfico o
processo de SLD-derivação:
Figura 7: Esquema de uma SLD-derivação.
184
Existe um jeito muito prático e útil de representar o esquema
acima. Ao efetuarmos um SLD-derivação, podemos representar os gols,
cláusulas de programa e unificadores mais gerais do seguinte modo:
Figura 8: Modo mais prático de representar uma SLD-derivação.
Esse esquema nos permite escrever de uma maneira compacta e
clara a SLD-derivação que estamos construindo. Na primeira linha temos
que o gol G0 (à esquerda) e a cláusula C0 (à direita) são unificadas através do
umg α1 ?ao lado direito na altura do traço)e obtemos o resolvente G1 que
escrevemos na linha seguite (à esquerda). Podemos ver que uma SLDderivação é (como havíamos adiantado na sub-seção anterior) é a aplicação
sucessiva do algoritmo de obtenção de resolventes. Como na sub-seção 4.4,
o nosso objetivo na SLD-derivação é obter a cláusula vazia.
A seguir, veremos a SLD-refutação que, em poucas palavras, é a
computação bem sucedida de um gol.
3.26 - SLD-refutação
Considere um programa P e uma cláusula gol G. Uma SLD-refutação
de P ∪ {G} é uma SLD-derivação finita de P ∪ { G } que tem a cláusula vazia
como última cláusula gol da derivação. Se Gn = , dizemos que a SLD-refutação
tem tamanho n. Neste caso dizemos que o gol G foi refutado, ou que a
computação de G foi bem sucedida. Já que uma cláusula gol F’ é a negação de
uma outra fórmula F, quando refutamos F’, provamos F, ou seja, provamos
que F pode ser deduzida a partir do programa.
185
Na próxima sub-seção, veremos apenas exemplos de programas e
computaremos alguns gols a partir deles utilizando o novo conceito de SLDderivação.
Exemplos.
1. O Programa P1 ataca novamente!
Programa P1.
p(a) ←.
(1)
q(b) ←.
(2)
q(x) ← p(x). (3)
Vamos considerar as mesmas cláusulas gol vistas na sub-seção
4.4.2:
1. ← p(a). De acordo com o algoritmo de obtenção de resolventes, o objetivo
é tentar unificar o corpo da cláusula gol com a cabeça de alguma cláusula de
programa de P1. Notemos que podemos unificar ← p(a) com p(a)←. Podemos
representar isso através de um esquema parecido com a Figura 8:
← p(a)
p(a)←
C0 ≡ p(a)←;
G ≡ G0 ≡ ←p(a) e C ≡
umg α = {}
G1 ≡
Notemos que o resolvente é a cláusula vazia pois a cláusula de
programa tem o corpo vazio. Notemos também que já que obtivemos a
cláusula vazia como resolvente e então obtivemos uma SLD-refutação para
o gol ←p(a) e isto significa que p(a) pode ser deduzida a partir de P1. A partir
de agora, quando obtivermos uma SLD-refutação para um gol G, diremos
apenas que refutamos o gol G.
2. ←q(a). O objetivo é tentarmos unificar o corpo da cláusula gol com a
cabeça de alguma cláusula de programa de P1. Podemos unificar q(a) com
q(x) em (3). Então, representamos:
← q(a)
q(x) ← p(x)
C0 ≡ q(x) ← p(x)
← p(a).
G ≡ G0 ≡ ←q(a) e C ≡
umg α1 ={ x/a}
G1 ≡ ← p(a).
E temos uma nova cláusula gol ← p(a). De posse da nova cláusula
gol, damos uma nova olhada nas cláusulas de programa de P 1 e tentamos
unificar o corpo da cláusula gol com a cabeça de alguma cláusula de programa
de P1. Escolhemos a cláusula de programa (2) e temos:
← q(a)
q(x) ← p(x)
G ≡ G0 ≡ ←q(a) e C ≡ C0 ≡
186
q(x) ← p(x)
← p(a)
≡ p(a) ←
p(a)←
umg α1 ={ x/a}
umg α2 ={}
G1 ≡ ← p(a) e
C1
G2 ≡
Portanto, refutamos o gol ←q(a).
3. ← p(b). O objetivo é tentar unificar o corpo da cláusula gol com a
cabeça de alguma cláusula de programa de P1. Notemos que não há cláusula
com a qual poderíamos unificar ←p(b). Neste caso, como não conseguimos
unificar uma cláusula gol com cláusula de programa alguma, não podemos
deduzir p(b) a partir de P1 e portanto temos apenas que G ≡ G0 ≡ ←p(b) e não
conseguimos refutar G.
Agora, examinemos o não menos famoso Programa P3:
Programa P3.
p(a,b) ←.
(1)
q(b,c) ←.
(2)
r(x,z) ← p(x,y), q(y,z). (3)
Vamos considerar as mesmas cláusulas gol que estudamos em
4.4.2.
1. ← r(a,c). O objetivo é tentar unificar o corpo da cláusula com a
cabeça de alguma cláusula de programa de P3. Podemos escolher a
cláusula de programa (3) e temos:
← r(a,c) r(x,z) ← p(x,y), q(y,z). G ≡ G0 ≡ ←r(a,c) e C ≡ C0 ≡
r(x,z)←p(x,y),q(y,z)
α1={x/a, z/c }
← p(a,y), q(y,c) G1 ≡ ←p(a,y),q(y,c).
Agora temos que unificar p(a,y) e q(y,c) com duas cláusulas de P3.
Ao olharmos as cláusulas de programa de P3, podemos escrever:
← r(a,c) r(x,z) ← p(x,y), q(y,z). G ≡ G0 ≡ ←r(a,c) e C ≡ C0 ≡
r(x,z)←p(x,y),q(y,z)
α1={x/a, z/c }
← p(a,y), q(y,c) p(a,b) ← G1 ≡ ←p(a,y),q(y,c) C1 ≡ p(a,b)←.
α2={ y/b }
← q(y,c) q(b,c) ← G2 ≡ ←q(y,c) C2 ≡ q(b,c)←.
α3={ y/b }
G3 ≡.
187
Portanto, conseguimos refutar o gol ←r(a,c).
2. ← r(c,a). O objetivo é tentar unificar o corpo da cláusula com a cabeça de
alguma cláusula de programa de P3. Podemos escolher a cláusula de programa
(3) e temos:
← r(c,a) r(x,z) ← p(x,y), q(y,z). G ≡ G0 ≡ ←r(c,a) e C ≡ C0 ≡
r(x,z)←p(x,y),q(y,z)
α1={x/a, z/c }
← p(c,y), q(y,a) G1 ≡ ←p(c,y),q(y,a).
Agora temos que unificar p(c,y) e q(y,a) com duas cláusulas de P3.
Ao olharmos as cláusulas de programa de P3, observamos que não podemos
unificar nem p(c,y) nem q(y,a) com alguma cláusula de P3. Portanto, não temos
uma SLD-refutação para ←r(c,a).
Estudo de caso: relações de parentesco.
Para ilustrar toda essa teoria de programação em lógica, vamos ver
um estudo de caso onde poderemos ver uma das aplicações de programas
lógicos. Através de programas lógicos podemos armazenar informações sobre
as relações de parentesco de pessoas dentro de uma família. Consideremos,
por exemplo, a seguinte árvore de família:
José
Fábio
Marcos
Sônia
Fátima
Maria
Ana
Eduardo
Adriano
Cláudia
Através dos predicados:
• homem(x) ≡ “x é do sexo masculino” e
• mulher(y) ≡ “y é do sexo feminino”
podemos escrever:
homem(José)←.
homem(Fábio)←.
(1)
(2)
188
Carlos
Mariana
Mário
Paula
(3) homem(Eduardo)←.
4) homem(Carlos)←.
(5) homem(Marcos)←.
(6) homem(Adriano)←.
(7) homem(Mário)←.
e
(8) mulher(Maria)←.
(9) mulher(Sônia)←.
(10) mulher(Ana)←.
(11) mulher(Mariana)←.
(12) mulher(Fátima)←.
(13) mulher(Cláudia)←.
(14) mulher(Paula)←.
Podemos definir os predicados:
pai(x,y) ≡ “x é pai de y”
mãe(z,w) ≡ “z é mãe de w”
e continuar a escrever:
(15) pai(José,Fábio)←.
(16) pai(José,Ana)←.
(17) pai(José,Carlos)←.
(18) pai(Fábio,Marcos)←
(19) pai(Fábio,Fátima)←.
(20) pai(Eduardo,Adriano)←.
(21) pai(Eduardo,Cláudia)←.
22)pai(Carlos,Mário)←.
(23)pai(Carlos,Paula)←.
(24)mãe(Maria,Fábio)←.
(25)mãe(Maria,Ana)←.
(26)mãe(Maria,Carlos)←.
(27) mãe(Sônia,Marcos)←.
(28) mãe(Sônia,Fátima)←.
(29) mãe(Ana,Adriano)←
(30) mãe(Ana,Cláudia)←.
(31) mãe(Mariana, Mário)←.
(32) mãe(Mariana,Paula)←.
189
Tendo essas relações de parentesco básicas estabelecidas, podemos
construir outros predicados baseados nesses mais básicos. Um exemplo
seria o predicado “irmão” . Como poderíamos estabelecer que duas pessoas
são irmãs baseados nos predicados que temos até agora? Uma sugestão
seria o seguinte:
irmãos(x,y) ←pai(z,x),pai(z,y). (33)
Para duas pessoas x e y serem irmãs, podemos ter que existe uma
pessoa z tal que z é pai de x e z é pai de y. Dizer isto é sufuciente? Considere
o programa P formado pelas cláusulas de (1) até (33). Façamos a seguinte
consulta: irmãos(Mário,Paula). Temos, então, o seguinte gol:
G ≡ ← irmãos(Mário,Paula)
e a seguinte SLD-derivação:
←irmãos(Mário,Paula)
←pai(z,Mário), pai(z,Paula)
irmãos(x,y)←pai(z,x),pai(z,y)
umg = { x/Mário , y/Paula }
pai(Carlos,Mário)←
umg = { z/Carlos }
Como a cláusula G foi refutada (obtivemos uma SLD-refutação)
então irmãos(Mário,Paula) pode ser deduzida a partir de P. Portanto, Mário
e Paula são irmãos.
Poderíamos definir outro predicado como, por exemplo, filho(x,y) ≡
“x é filho de y”. Poderíamos definir este predicado do seguinte modo:
filho(x,y) ← pai(y,x),homem(x) (34)
que quer dizer : “para que x seja filho de y, y deve ser o pai de x e além disso
x deve ser do sexo masculino”. Também poderíamos ter definido o predicado
de filho(x,y) por:
filho(x,y) ← mãe(y,x),homem(x) (35)
que significa : “para que x seja filho de y, y deve ser a mãe de x e além disso
x deve ser do sexo masculino”. Notemos que, no nosso caso, como para
cada filho x temos uma cláusula do tipo pai(y,x) e uma cláusula do tipo
mãe(z,x) então qualquer uma das cláusulas (34) ou (35) serve. Vamos manter
as duas cláusulas. Ao colocarmos todas as possibilidades de definição de
um predicado, vamos obter informações de árvores de família que podem
não estar tão completas como no nosso exemplo.
Vamos considerar a cláusula gol G ≡ ←filho(Marcos,José). Só dando
190
uma olhada na árvore, já podemos dizer que esta cláusula gol não poderá ser
refutada pois Marcos é, na verdade, neto de José. Vejamos:
←filho(Marcos,José)
filho(x,y) ←pai(y,x),homem(x)
umg = { x/Marcos , y/José }
←pai(José,Marcos),homem(Marcos)
homem(Marcos)←.
umg = { }
←pai(José,Marcos)
E aí não conseguimos mais continuar a SLD-derivação. Notemos
que não obtivemos uma SLD-refutação da cláusula gol G. Portanto, não
podemos deduzir filho(Marcos,José) a partir de P. Portanto, Marcos não é
filho de José.
Qual seria uma maneira de definir o predicado tio(x,y) ≡ “x é tio de y”
Uma das maneiras seria:
tio(x,y) ← pai(z,y),irmãos(x,z) (36).
Considerando a cláusula gol G ≡←tio(Carlos,Marcos), vamos tentar
obter uma SLD-refutação. Pela árvore de família, sabemos que Carlos é tio de
Marcos.
←tio(Carlos, Marcos)
Carlos , y/Marcos}
←pai(z,Marcos),irmãos(Carlos,z)
←irmãos(Carlos,Fábio)
←pai(z,Carlos),pai(z,Fábio)
←pai(José,Fabio)
tio(x,y) ← pai(z,y),irmãos(x,z)
umg = { x/
pai(Fábio,Marcos)←.
umg = { z/Fábio}
irmãos(x,y)←pai(z,x),pai(z,y)
umg = { x/Carlos , y/Fábio }
pai(José,Carlos)←
umg = { z/José}
pai(José,Fábio)←
umg = { }
E portanto o gol G pode ser deduzido a partir de P. Portanto, Carlos
é tio de Marcos.
Outro modo de definir o predicado tio(x,y) é o seguinte:
tio(x,y) ← mãe(z,y),irmãos(x,z).
Exercícios Propostos.
7.1. Considere o exercício proposto 4.4.4.1. Para cada item do exercício 4.4.4.1.
faça a computação das cláusulas gol dadas diretamente a partir do programa.
191
7.2. Consideremos o problema de relações de parentesco. Cada item é um
predicado a ser definido. Para cada predicado, escreva todas as maneiras
como podemos defini-lo:
a) tia(x,y) ≡ “x é tia de y”;
b) sobrinho(x,y) ≡ “x é sobrinho de y”;
c) sobrinha(x,y) ≡ “x é sobrinha de y”;
d) avô(x,y) ≡ “x é avô de y”;
e) avó(x,y) ≡ “x é avó de y”;
f) neta(x,y) ≡ “x é neto de y”;
g) neta(x,y) ≡ “x é neta de y”;
h) primos(x,y) ≡ “x e y são primos”.
7.3. Considere a árvore da sua própria família. Primeiramente, faça um esboço
desta árvore: incluindo seus pais, tios, avós, primos, cônjuge, filhos. Escreva
cláusulas incondicionais para relações de parentesco do tipo pai, mãe,etc.,
como fizemos na sub-seção 4.6.5 e depois inclua as cláusulas condicionais
que definem os predicados vistos até gora.
3.27 - Um pouco de PROLOG
O PROLOG, grosso modo, é o “concretizador” dos programas lógicos:
Fornecemos a ele um programa lógico e depois podemos fazer várias consultas
ao programa. O PROLOG ao ler a consulta, a transforma num gol e tenta uma
SLD-refutação deste gol no programa lógico que ele tem dentro de si. Se
conseguir, ele responde “sim!” o que significa que ele conseguiu refutar o
gol que é o mesmo que dizer que a consulta pode ser deduzida a partir do
programa. Ele também pode responder “não!” quando um determinado gol
Gi da SLD-derivação não puder mais ser unificado com alguma das cláusulas
do programa. Além de “sim!” e “não!” o PROLOG pode “não responder
nada”. Isso mesmo! Parece estranho mas é verdade!
Na sub-seção 7.1 vamos mostrar como escrever programas PROLOG.
Por exemplo, não poderemos utilizar a nossa tradicional “←” para escrever
programas PROLOG. Na sub-seção 7.2 veremos um pouco mais o que
estávamos comentando no parágrafo anterior: a estratégia ingênua de
refutação do PROLOG.
4.28 - A notação do PROLOG
A única diferença entre um programa lógico e um programa PROLOG
é a notação. Vamos escrever o Programa P1 da sub-seção 4.4.1 na notação de
PROLOG.
Programa P1 (notação de programa lógico).
p(a) ←.
192
q(b) ←.
q(x) ← p(x).
Escrevendo P1 na notação de PROLOG, temos:
Programa P1 (notação de PROLOG).
p(a).
q(b).
q(X) :- p(X).
Observações:
• constantes são representadas por letras minúsculas e as variáveis, por
letras maiúsculas;
• todas as cláusulas de programa são finalizadas com “.” (ponto final);
←” no final.
• cláusulas de programa incondicionais não necessitam de “←
Apenas devemos escrever a(s) fórmula(s) seguidas do ponto final;
• o conectivo de implicação “←” das cláusulas de programa condicionais
é representado por “:-” (dois pontos seguidos de um hífen).
As consultas são representadas por ?-p(a) (por exemplo) ao invés
de ←p(a).
Escrevendo o Programa P3 da sub-seção 4.4.1 na notação de
PROLOG, temos:
p(a,b).
q(b,c).
r(X,Z) :- p(X,Y),q(Y,Z).
E o Programa P4, fica:
p(X) :- p(X).
p(a).
q(c).
p(b).
Conforme vimos na seção 4.4, o programa P4 tem uma peculiaridade:
ao considerarmos a consulta ?-p(a) ou seja, tentar refutar o gol ← p(a),
tínhamos dois caminhos: já podíamos unificar o gol ←p(a) com a cláusula
p(a)← diretamente e aí já obteríamos a cláusula vazia. Alternativamente,
poderíamos unificar o gol ←p(a) com a primeira cláusula obtendo o mesmo
gol ←p(a) e acabaríamos por ter uma computação sem término. Cabe a nós
escolher a cláusula de programa que nos leve mais facilmente à cláusula
vazia. Tendo isso em mente, não escolheríamos a primeira cláusula para o gol
←p(a) porém escolheríamos a segunda cláusula. Esse tipo de raciocínio que
fizemos se constituiu numa estratégia, ou seja, fizemos uma espécie de análise
193
antes de escolher uma cláusula de programa.
Comentamos a estratégia que nós, humanos, adotaríamos para tentar
refutar gols em um programa lógico. Vimos que o PROLOG faz esse serviço
para nós. Será que ele possui a sua própria estratégia??? A resposta está na
próxima sub-seção.
3.29 - A estratégia do PROLOG
Suponhamos que temos um programa P e as suas cláusulas de
programa são C1, C2, ..., Ck onde Ci é a cláusula de programa de P que está
escrita na i-ésima linha do programa. Dado Ci, dizemos que i é o índice da
cláusula Ci. Suponhamos também que temos um gol G que desejamos refutar
a partir de P. Como já vimos, a idéia e achar um i tal que podemos unificar a
cabeça de Ci com o corpo de G.
Caso 1. pode ser que tais cláusulas não existam;
Caso 2. pode ser que exista apenas uma cláusula e
Caso 3. pode ser que existam várias cláusulas de programa de P cujas
cabeças podem ser unificadas com o corpo de G.
No Caso 1, o PROLOG (assim como nós) diremos que G não pode
ser refutado e paramos a computação. No Caso 2, suponhamos que a cláusula
de programa de P cuja cabeça é unificável com o corpo de G é Ci. O PROLOG
(assim como nós) unificará G e Ci e obterá um resolvente. No Caso 3,
consideremos Q, o conjunto formado por mais de uma cláusula de programa
de P cuja cabeça é unificável com o corpo de G. Neste caso, nós, humanos,
vamos escolher, através de algum julgamento, a melhor cláusula de Q que
será unificada com G. Já o PROLOG sempre escolherá a cláusula de programa
de Q de índice mínimo.
Este jeito de escolher a cláusula para unificação é muito importante:
pode haver uma diferença de resposta entre nós, humanos, e o PROLOG.
Lembra do Programa P4?
Programa P4.
p(X):-p(X).
p(a).
q(c).
p(b).
(1)
(2)
(3)
(4)
Se fizermos a consulta ?-p(a), nós, humanos, escolheríamos a
cláusula (2) para a unificação e já obteríamos a cláusula vazia, refutando o
gol ←p(a) correspondente à consulta ?-p(a). Porém, o PROLOG escolherá (1)
e obterá novamente o mesmo gol como resolvente, a saber , ←p(a). De posse
do novo gol, o PROLOG lerá a lista de axiomas de P4 e escolherá (1) novamente
194
para a unificação obtendo, como resolvente, o mesmo gol ←p(a) e assim por
diante. Enquanto que nós, humanos já obtemos uma refutação para o gol
←p(a), o PROLOG prosseguirá a SLD-derivação sempre utilizando a cláusula
(1) e não parará a computação. Neste caso de computação sem término, o
PROLOG não emite resposta alguma.
Este modo através do qual o PROLOG escolhe as cláusulas para
unificação é um tipo de estratégia determinística que, grosso modo, é um
método precisamente definido de, no nosso caso, escolha de cláusulas. Já o
modo com nós, humanos, escolhemos uma cláusula a ser unificada é um tipo
de estratégia não-determinística, ou seja, não existe uma regra ou um método
precisamente definido para a escolha de cláusulas de programa.
3.30 - Interpretador PROLOG
Para fazer com que o computador faça as SLD-derviações para nós,
é necessário ter um interpretador PROLOG. Um interpretador é um programa
que é capaz de ler programas lógicos e, ao ser perguntado, consegue fazer a
SLD-derivação da cláusula gol que foi perguntada. Um interpretador PROLOG
tradicional após ser chamado, exibirá o seguinte “prompt” :
?A partir desse “prompt” podemos pedir a ele que leia programas
lógicos e uma vez que já temos o programa carregado, podemos fazer
consultas. Por exemplo, suponhamos que já temos o Programa P1 (aquele
mesmo!) carregado pelo interpretador PROLOG. Podemos fazer as seguintes
consultas:
?- p(a).
yes.
?-p(c).
no.
Como carregar programas e outros detalhes técnicos são coisas
específicas de cada interpretador PROLOG e deixamos o estudo destes
detalhes a cargo do leitor.
Estudo de caso: Alice, o Leão e o Unicórnio.
O problema que vamos estudar agora é uma passagem do livro “Alice
no país das maravilhas” de Lewis Carol. Poucas pessoas sabem que Lewis
Carol era um lógico. Se lermos o livro “Alice no país das maravilhas” mais
atentamente perceberemos um certo conteúdo de lógica por trás do texto.
A passagem do texto é a seguinte: Alice entra em uma floresta e perde
a noção dos dias da semana. O Leão e o Unicórnio eram duas das criaturas
195
que habitavam a floresta. Alice os encontra e deseja obter alguma informação sobre o dia da semana. O problema é que o Leão mente em determinados
dias da semana e o mesmo acontece com o Unicórnio. Alice sabe que eles
mentem e sabe em que dia cada um mente. Naquela época o Leão mentia às
segundas, terças e quartas e falava a verdade nos outros dias da semana. O
Unicórnio mentia às quintas, sextas e sábados e falava a verdade nos outros
dias da semana.
Quando Alice os encontra o Leão diz:
Ontem foi um dos meus dias de mentir!
e o Unicórnio diz:
Ontem foi um dos meus dias de mentir!
A partir dessas informações, Alice descobriu o dia da semana. Qual
era?
A idéia é implementar um programa lógico que dadas as informações
sobre os dias que o Leão e o Unicórnio mentem, o programa determina em
que dia Alice, o Leão e o Unicórnio se encontraram. Inicialmente, devemos
criar o predicado ontem cuja a função é fornecer a seqüência dos dias da
semana para o programa. Este predicado tem o seguinte formato:
ontem (x,y) ≡ “x é dia da semana que vem depois do y”.
Isto posto, podemos escrever:
ontem(domingo, sábado) .
ontem(segunda, domingo) .
ontem(terça, segunda) .
ontem(quarta, terça) .
ontem(quinta, quarta) .
ontem(sexta, quinta) .
ontem(sábado, sexta) .
Agora, precisamos criar um predicado que relacione o Leão e o
Unicórnio aos dias em que eles mentem. O predicado mentira faz este serviço:
mentira (x, y) ≡ “x mente no dia y”
e temos que x pode ser o Leão ou o Unicórnio. A variável y é um dos dias da
semana. Podemos, de acordo com o que foi fornecido sobre os dias em que
os dois mentem, escrever o seguinte:
mentira(leão, segunda).
mentira(leão, terça).
196
mentira(leão, sábado).
mentira(leão, domingo).
mentira(unicórnio, segunda).
mentira(unicórnio, quarta).
mentira(unicórnio, sexta).
mentira(unicórnio, domingo).
Temos que o programa completo é:
ontem(domingo, sábado) .
ontem(segunda, domingo) .
ontem(terça, segunda) .
ontem(quarta, terça) .
ontem(quinta, quarta) .
ontem(sexta, quinta) .
ontem(sábado, sexta) .
mentira(leão, segunda).
mentira(leão, terça).
mentira(leão, sábado).
mentira(leão, domingo).
mentira(unicórnio, segunda).
mentira(unicórnio, quarta).
mentira(unicórnio, sexta).
mentira(unicórnio, domingo).
Este programa é suficiente para Alice determinar o dia em que ela
conversou com o Leão e o Unicórnio porém devemos fazer as consultas
corretamente para obtermos alguma resposta. Quando o Leão (ou o Unicórnio)
diz que o dia anterior era um dos dias dele mentir ele pode estar mentindo.
Como temos o Leão e o Unicórnio, temos quatro possibilidades: os dois
podem estar mentindo no dia em que falam, um mentir, outro não e assim por
diante. Isto posto, podemos fazer as seguintes quatro consultas:
a)
ontem(X,Y), mentira(leão,Y), verdade(leão,X) : o leão está
mentindo no dia
em que ele conversa com a Alice e diz a verdade no dia anterior. Se aplicarmos
a regra de resolução para esta consulta composta de três predicados,
obteremos que X = qui e Y = qua.
a)
ontem(X,Y), mentira(unic,Y), verdade(unic,X) : mesma situação
acima só
que para o unicórnio. Se aplicarmos a regra de resolução, obteremos X =
dom e Y = sab;
197
a)
ontem(X,Y), verdade(leão, Y), mentira(leão, X) : quando o leão
falou com
Alice ele disse a verdade sobre o dia anterior. Obtemos X = seg e Y = dom;
a)
ontem(X,Y), verdade(unic, Y), mentira(unic, X) : mesma situação
acima para
o unicórnio. Obtemos X = qui e Y = qua.
Notemos que nas consultas a) e d) temos que X = qua e Y = qui e o dia
em que os três conversaram foi quinta-feira.
3.31 - Assuntos relacionados à programação em lógica
O que fizemos neste capítulo foi apenas dar uma pequena introdução
à programação em lógica e ao PROLOG. Na verdade, o PROLOG é apenas um
instrumento de concretização da teoria de programação em lógica.
A teoria de programação em lógica constitui a base para a construção
de sistemas especialistas. Estes sistemas especialistas são programas
construídos para armazenar informações sobre um determinado assunto e
ser capaz de “responder perguntas” (consultas) sobre esse assunto quando
perguntado. O programa de relações de parentesco é um pequeno exemplo
de sistema especialista.
A teoria de programação em lógica que apresentamos é a teoria de
programação em lógica clássica. Existem muitas lógicas não-clássicas, isto
é, lógicas cujos valores verdade não são apenas V ou F. Em alguns casos
também temos teorias de programação em lógicas não-clássicas.
Exercícios Propostos.
4.1. Refaça o exercício 4.6.7.2. só que desta vez utililize a notação do
PROLOG.
4.2. Refaça o exercício 4.6.7.3. utilizando a notação do PROLOG.
4.3. Refaça o exercício 4.6.7.3. e implemente o programa num interpretador
PROLOG. Para cada consulta, faça primeiro a SLD-derivação no papel e
depois submeta a consulta ao interpretador PROLOG.
4.4. Alice encontra o Leão e ele diz:
“Eu menti ontem e mentirei amanhã.” .
Aproveitando a tabela de mentiras já colocada anteriormente, faça um
programa e construa consultas convenientes para Alice poder descobrir em
que dia ela encontrou o Leão.
198
3.5. Desta vez o Unicórnio encontra Alice e diz:
“Eu menti antes de ontem e mentirei depois de amanhã.”.
Aproveitando a tabela de mentiras já colocada anteriormente, faça um
programa e construa consultas convenientes para Alice poder descobrir em
que dia ela encontrou o Leão.
199
4 CIRCUITOS LÓGICOS DE
CHAVEAMENTO
Introdução
Neste capítulo abordaremos as aplicações da Lógica em circuitos
elétricos e eletrônicos simulados por meio de chaves. A Lógica aplicada em
circuitos elétricos com chaves que impedem ou deixam passar sinais forma
os chamados circuitos de chaveamento ou circuitos lógicos. Os circuitos de
chaveamento permitem a elaboração de projetos e circuitos Lógicos para
serem utilizados em Sistemas digitais complexos aplicados em vários campos da Engenharia.
Os circuitos de Chaveamento são aqueles representados por meio
de chaves que ligam e desligam conforme o estado binário “Verdadeiro ou
Falso” da sentença Lógica. Configurações destes circuitos vão formar as
Portas Lógicas primitivas que irão representar as equações booleanas com
utilização particular a cada situação.
Os circuitos estudados serão limitados àqueles chamados
combinacionais, isto é, circuitos nos quais a saída depende apenas dos
valores das entradas, portanto não levam em consideração valores prévios
(memorizados) utilizados nos circuitos chamados de seqüenciais.
4.1. A Álgebra da Lógica
As operações sobre proposições lógicas podem ser feitas através
das chamadas funções de verdade. As funções de verdade são aquelas que
trabalham com valores-verdade das proposições, valores estes ditos: falso
ou verdadeiro. O estudo deste tipo de função que determina a veracidade
ou a falsidade das proposições é chamado de calculo proposicional ou Lógica Algébrica.
Representações das Funções
Para possibilitar a representação da função verdade por meio de
circuitos de chaveamento são utilizados alguns dispositivos dos circuitos
elétricos.
201
Entre estes dispositivos o mais importante é a Chave elétrica do
tipo liga-desliga. São estas chaves que vão representar os estados lógicos
das proposições reconhecidas como sinais das entradas (A, B, C, etc..).
Uma chave é um dispositivo ligado à um ponto do circuito elétrico
que pode assumir apenas um dos dois estados, aberto ou fechado. No estado aberto a chave permite que a corrente elétrica passe através do ponto e
no estado fechado a chave impede a passagem da corrente.
Indicaremos uma chave por meio de símbolos correspondentes às
letras A, B, C, etc., onde cada uma das letras simboliza uma sentença.
Considerando uma chave como representante de uma sentença A
temos que: a chave estará fechada quando a sentença A for verdadeira e
estará aberta quando sentença A for Falsa. Veja o símbolos na figura a seguir
onde as chaves A e B representam as proposições A e B, respectivamente.
Chave A
Desligado A=0
Ligada A=1
Quando as chaves (A ou B) estiverem ligadas estarão representando estados lógicos Verdadeiros com valores iguais a 1 e quando desligadas
representam os estados lógicos Falsos com valores iguais a 0. As chaves A
e B são completamente independentes e podem ser interligadas em diferentes configurações representando as diferentes funções verdades.
Outros dispositivos utilizados no apoio das representações são:
fontes de tensão contínua E (bateria ou pilha) que vai nos fornecer uma
diferença de Potencial ou tensão elétrica proporcionando capacidade para
fazer fluir uma corrente elétrica no circuito, Resistor R que permite a limitação
de corrente evitando curtos-circuitos e lâmpadas L que acesas ou apagadas
representarão os estados Lógicos dos sinais de saída.
Os dispositivos que servirão para representar as funções com os
modos de representação estão apresentados nas próximas figuras.
A Fonte de tensão contínua E fornece a voltagem necessária para
possibilitar passagem pelo circuito de uma corrente elétrica I que vai acender
as lâmpadas. Uma corrente elétrica é um fluxo direcionado de elétrons. Os
elétrons ao passarem no filamento da lâmpada sofrem resistência à sua
movimentação e provocam atrito resultando em aquecimento e
incandescência no material. O filamento incandescente produz a luz.
Em um circuito elétrico de chaveamento a lâmpada se acenderá
202
quando as chaves elétricas estiverem fechadas e interligadas numa configuração tal que crie um caminho que permita a passagem da corrente de elétrons
até a lâmpada.
Resistência elétrica é a propriedade que certos materiais possuem
de resistir à passagem da corrente elétrica. Por exemplo, o filamento da lâmpada
feito de tungstênio tem maior resistência à passagem dos elétrons do que os
fios condutores que são feitos de cobre.
A resistência elétrica é uma grandeza física medida em Ohms (Ω). O
Resistor é um dispositivo que apresenta esta propriedade, portanto, uma da
sua aplicação é ser inserido nos circuitos para limitar a passagem da corrente.
R
Resistor
As lâmpadas vão representar os estados lógicos da saída S. O seu
estado, acesas = 1 e apagada S= 0 são dependentes exclusivamente das
configurações das chaves que estão representando nos circuitos de
chaveamento as funções verdade.
Na notação adotada, quando a lâmpada estiver acesa é porque
existe uma corrente elétrica I fluindo pelo seu filamento. Portanto a lâmpada
acesa representa o estado lógico Verdadeiro de valor igual a 1.
Se a lâmpada estiver apagada, não existe corrente, portanto, o estado
Lógico é Falso e tem valor 0.
203
Lâmpada L
I
Tem corrente: Lâmpada acessa S=1
Não tem corrente: Lâmpada apagada S=0
4.2. Negação Lógica - circuito não
Para construção dos circuitos de chaveamento que vão simular as
funções lógicas, vamos iniciar por aquele que representa a negação lógica.
A negação lógica é o exemplo mais comum de uma operação com função de
verdade.
Como vimos no capítulo 2, a negação Lógica é enunciada da seguinte forma,:
“Se A é uma proposição, sua negação ¬A, é verdadeira quando A é falsa e
falsa quando A é verdadeira”.
A relação entre os valores verdade de A e de (¬A) pode ser representada através da seguinte tabela verdade:
A
1
0
(¬A)
0
1
Circuito Lógico
O circuito que representa uma função de negação Lógica é
conhecido como inversor lógico e sua configuração é mostrada na figura
a seguir:
I
Lâmpada L
+
E
R
A
S=1
R
204
Observação: No circuito do Inversor Lógico foi acrescido um
resistor R para limitar a corrente elétrica evitando-se o curto-circuito no
fechamento da chave A.
Funcionamento: Com a chave A aberta teremos o valor da Proposição representando Falsidade portanto, valor lógico A=0.
Considerando o sentido convencional da corrente elétrica, isto é, o
fluxo ordenado de elétrons saindo do terminal positivo da bateria passando
pelos componentes e retornando pelo terminal negativo, verificamos que a
corrente impulsionada pela fonte de tensão E, passa pela Lâmpada L e pelo
resistor R.
A passagem da corrente de elétrons pela lâmpada produz o seu
acendimento simbolizando uma saída S=1, portanto A=0 resulta em S=1.
Verifique a figura a seguir onde ocorre o fechamento da chave A:
I
+
E
R
I
A
Lâmpada L
S=0
R
A chave A ligada representa uma proposição com estado lógico
Verdadeiro, portanto, de valor lógico igual a 1. Nestas condições verifica-se
que toda a corrente elétrica passa através da chave e vai direto para o resistor
R. Como a corrente de elétrons sempre procura o caminho mais fácil, nos
terminais da Lâmpada a intensidade da corrente elétrica é nula e ela está
apagada.
Sem a corrente elétrica passando pelo seu filamento, a lâmpada L
não acenderá simbolizando uma saída S de estado lógico Falso, portanto de
valor igual a 0.
Para facilitar a representação de circuitos de chaveamento que simule
equações lógicas com várias proposições, vamos utilizar na representação
de uma negação Lógica a chave da proposição funcionando em conjunto
com uma chave especial. Esta chave especial é representada pelo símbolo de
negação ¬, conforme mostra a figura a seguir.
205
Este conjunto funcionará da seguinte forma:
A chave ¬ da negação Lógica depende exclusivamente do estado
da chave que representa a Proposição. Se a proposição A for verdadeira o
resultado do seu estado lógico é A=1 e a chave da negação Lógica estará
fechada, o que vai ocasionar o estado da Lâmpada desligada, isto é, o
estado Lógico da saída é Falso com S = 0.
Caso a chave que representa a proposição A esteja aberta, simboliza um estado Lógico Falso (A=0). Nestas condições, chave da negação
Lógica estará desligada e a Lâmpada estará acesa representando um estado
Lógico Verdadeiro com S=1.
4.3. Conjunção Lógica - Circuito E
A Conjunção Lógica também pode ser representada por meio de
configurações de chaves representativas de Proposições.
Conforme foi visto no capítulo 2, a conjunção Lógica é enunciada
da seguinte forma:
“Se A e B são sentenças quaisquer em U, a forma conjuntiva (A ∧ B)
é Falsa se, e somente se, A for Falsa ou B for Falsa ou ambas forem Falsas”.
O valor verdade de ( A ∧ B ) pode ser representada através da seguinte tabela de valores verdade:
A
B
(A ∧ B)
1
1
1
1
0
0
0
1
0
0
0
0
Na tabela podemos observar que as entradas representadas pelas
proposições A e B podem ser relacionadas à saída recebendo as seguintes
afirmativas:
“A saída S só é verdadeira se, e somente se, A e B forem verdadeiras, em qualquer outro caso a saída S é Falsa. Em outras palavras, a saída só
terá nível Lógico 1 se ambas as entradas estiverem com nível Lógico 1”.
Basta que uma das entradas apresente nível Lógico “0” para produzir um nível Lógico “0” na saída.
O circuito E que representa uma função da conjunção Lógica pode
ser configurado por meio de chaves, conforme a figura a seguir:
x
AA
B
B
+
E
-
y
S=0
S=AËB
206
Funcionamento: com as duas chaves desligadas representando as proposições A e B como Falsas, não há passagem de corrente elétrica para a Lâmpada, ficando a mesma apagada. Neste caso, o estado Lógico resultante da
saída tem nível 0. Se apenas uma das chaves for ligada permanecendo a
outra desligada, não é o suficiente para permitir a passagem da corrente
elétrica para a lâmpada. Como os elétrons vão circular por apenas um único
caminho é condição necessária que as duas chaves sejam ligadas para permitir que a corrente flua para a lâmpada, acendendo-a e representando o
estado lógico Verdadeiro com valor 1 na saída.
Conforme foi visto, no circuito de chaveamento lógico da Conjunção a corrente elétrica vai passar pelos pontos x e y se, e somente se (A ∧ B)
é verdadeira. Diz-se que as duas chaves estão em série.
Este caso pode ser generalizado para qualquer número finito de
chaves ligadas em série conforme mostra a próxima figura.
A1
A2
A3
x
An
y
Na Conjunção a condição para a corrente elétrica passar através do
circuito é a de
(A1 ∧ A2 ∧ A3 ∧ ... ∧ An ) ser Verdadeira.
O conectivo da conjunção é aquele onde, para se obter o estado
lógico da saída, liga-se as duas condições de entrada pela letra “e”. Por isto
este circuito é conhecido como “circuito Lógico E”, ou pelo termo originado
da língua inglesa, “circuito lógico AND”.
4.4. Disjunção Lógica - Circuito OU
No capítulo 2, a disjunção Lógica foi enunciada em linguagem natural da seguinte forma:
“Se A e B são sentenças quaisquer em U, a forma disjuntiva (A V B) é Falsa
se, e somente se, A for Falsa e B for Falsa”.
Como foi feito na conjunção Lógica, a disjunção pode ser representada por uma relação entre os valores verdade de A e B através da seguinte
tabela:
A
B
(A ∨ B)
1
1
1
1
0
1
0
1
1
0
0
0
É verificado nos valores da tabela que as entradas representadas
207
pelas Proposições A e B podem ser relacionadas à saída recebendo as seguintes afirmativas:
“Para a saída S ser verdadeira basta que apenas uma das entradas
A ou B sejam verdadeiras”.
“A saída S só será falsa se ambas as entradas A e B forem Falsas”.
Em outras palavras, a saída terá nível Lógico S=1 se pelo menos
uma das entradas A ou B estiver com nível Lógico 1.
O circuito OR que representa uma função da disjunção Lógica pode
ser configurado por meio de chaves, conforme mostra a figura a seguir:
A
B
+
E
-
S=0
S = (A V B)
Funcionamento: com as duas chaves desligadas representando as proposições A e B como Falsas, não há passagem de corrente elétrica para a Lâmpada ficando a mesma apagada. Neste caso, o estado Lógico resultante da
saída tem nível 0. Se pelo menos uma das chaves A ou B for ligada é suficiente para permitir a passagem da corrente elétrica para a lâmpada. Como os
elétrons podem circular através das chaves por caminhos diferentes, não é
necessário que as duas chaves estejam ligadas para permitir que a corrente
flua para a lâmpada. Basta uma única chave ligada para acende-la e assim
representar o estado lógico verdadeiro com valor 1 na saída.
Conforme foi visto, no circuito da disjunção a corrente elétrica passa
entre os pontos x e y se e somente se, (A V B) é verdadeira. Diz-se que as
chaves estão ligadas em paralelo.
Este exemplo pode ser generalizado para qualquer número finito de chaves
ligadas em paralelo. Veja a figura a seguir:
A1
A2
y
x
A3
An
208
Na Disjunção condição para a corrente elétrica passar através do
circuito é a de
(A1 ∨ A2 ∨ A3 ∨ ... ∨ An ) ser Verdadeira.
O conectivo da Disjunção é aquele onde para se obter o estado
lógico da saída, liga-se as duas condições de entrada pela letra “ou”. Por isto
este circuito é conhecido como “circuito Lógico OU”, ou pelo termo originado da língua inglesa “circuito lógico OR”.
4.5. Exemplos de aplicações
Exemplo 1 - Dada a equação lógica:
[¬ (A ∧ B )] = S
construa o circuito de chaveamento que simule a equação.
Resolução: A equação dada expressa uma negação de uma conjunção lógica entre duas proposições A e B.
Isto significa que a saída S só é verdadeira ( S =1) se e somente se,
a negação lógica da conjunção entre as proposições A e B for verdadeira.
Esta condição é descrita pela equação: [¬ (A ∧ B )] =1.
Inicialmente elaboramos uma tabela verdade onde são consideradas todas as combinações possíveis entre as duas proposições e a sua
negação.
A B (A Ë B) [¬ (A Ë B )]
Condição 1
1110
Condição 2
1001
Condição 3
0101
Condição 4
0001
Estado Lógico
da Saída S
Estados Lógicos
intermediários
Pela coluna do resultado final é visto que as situações 2,3 e 4 são
aquelas que satisfazem a condição de S=1. Pode-se notar que, basta que uma
das chaves esteja aberta para que a lâmpada seja acesa simbolizando uma
condição Verdadeira. A partir desta análise é construído o circuito.
O diagrama do circuito de chaveamento é apresentado na próxima
209
figura:
A
¬
B
+
E
-
S =[¬ (AËB )]
R
Exemplo 2 - Construa o circuito de chaveamento para a equação Lógica :
[¬ (A V B )] = S
Resolução: Esta equação expressa negação de uma disjunção lógica entre
duas proposições A e B. Neste caso a negação da disjunção se caracteriza
pela afirmação de que a saída S só é verdadeira (S =1) se e somente se, a
negação lógica da disjunção entre A e B for verdadeira, isto é: [¬ (AVB )] =1.
Usando do mesmo procedimento anterior, é elaborado primeiramente
uma tabela verdade onde são consideradas todas as combinações possíveis
entre as proposições A e B e a sua negação Lógica.
A B (A B ) [ (A B )]
C o n d ica~ o 1
11 1 0
C o n d ica~ o 2
10 01
C o n d ica~ o 3
01 01
C o n d ica~ o 4
00 01
E stad o L o g ic o s
d a S a id a S
E sta do s L o gic o s
inte rm e dia rio s
É visto pela coluna do estado lógico resultante que nesta equação
lógica somente a situação 4, onde as duas proposições têm valor lógico
igual a 0, satisfaz a condição de S=1, portanto para que a lâmpada seja acesa
simbolizando uma condição Verdadeira é necessário que as duas chaves
estejam desligadas.
Com base nestas considerações é construído o circuito de
chaveamento lógico apresentado a seguir:
A
¬
B
S = [¬ (AVB )]
+
E
-
R
210
Exemplo 3 - Construa o circuito de chaveamento que simule a equação:
[(¬ (A ∧ B ) ) ∧ (CVD)] = S
Resolução: O método utilizado para construção do circuito segue os
procedimentos anteriores:
1- Inicialmente é construído uma tabela verdade para analises das
situações entre as proposições A e B.
2- Em uma coluna, que é extensão da tabela anterior, são também
analisadas as situações entre as proposições C e D.
3- Em seguida na outra coluna são analisados logicamente e colocados
os resultados obtidos entre as duas análises das colunas anteriores.
As análises são feitas obedecendo a equação e assim, obtém-se na
última coluna o resultado final.
A B (A B ) ( (A B ))
[(
CD ( C D)
11 1 0
11 1
10 01
10 1
01 01
01 1
00 01
00 0
(A B ))
( C D )]
S aid a S
O circuito de chaveamento lógico que corresponde ao resultado da
tabela verdade, portanto que simula a equação é mostrado na próxima figura.
C
D
A
B
¬
+
E
-
S
R
Exemplo 4 - Considere um sistema de alarme residencial composto por três
211
sensores sA, sB, e sC, do tipo chave liga-desliga, instalados em três portas
de entrada de um compartimento que se deseja proteger. Com o sistema
ativo, na decorrência de um dos sensores ser ligado se acenderá uma lâmpada
acusando uma anormalidade.
Uma chave sD instalada do lado de fora do compartimento e em
local secreto conhecido apenas pelo usuário, poderá ser ligada para deixar o
sistema inativo.
Com base na descrição acima elabore a equação Lógica e o Circuito
de chaveamento Lógico do Sistema.
Resolução:
Vamos considerar os sensores como sendo as proposições de entrada tal
que:
Sensor sA = A
Sensor sB, = B
Sensor sC = C
Chave secreta sD = D
Lâmpada de alarme L = Saída S
Equação Lógica : Basta que uma das chaves A, B e C fique ligada para que a
Lâmpada acenda, portanto é uma disjunção do tipo:
(AV BVC )= S1
Conforme a descrição do funcionamento do Sistema para a equação acima
ser verdade é necessário que a chave D esteja desligada, isto é, a negação
lógica de D (¬D) tem que ser Verdadeira. Portanto esta condição é ligada à
anterior pela conjunção lógica.
Deste modo a equação final que simula o sistema fica:
[(AVBVC ) ∧ (¬ D)] = S
Tabela verdade:
A
A B CA B[(AVBVC)]
C [A B C )]
B
1 1 1100
11
C
1 1 0011
11
11 00 1111
11 00 00 11
0111
0 1 11
0101
01 01
¬
D
+
E
-
S
R
0011
0 0 11
0001
00 01
212
Exemplo 5 - Considere que a administração de uma pequena empresa decida
questões através de um comitê composto pelas seguintes pessoas:
a) O Presidente A.
b) O Vice-Presidente B.
c) O Gerente Industrial C.
Cada membro do Comitê tem em seu poder uma chave que é acionada
sinalizando aprovação quando a proposta é de sua concordância, caso
contrário, a chave permanece desligada.
Para indicar a aprovação ou não de cada proposta há uma lâmpada
que se acenderá caso a proposta tenha sido aprovada pela maioria dos
votos dos membros do comitê.
Pede-se: Elabore a equação Lógica, a tabela verdade e o circuito de
chaveamento Lógico que simule este processo.
Resolução
O processo pode ser visualizado mais facilmente através da tabela verdade
mostrada a seguir:
A saída S só é de valor Lógico 1 quando houver
duas ou mais proposições de valor igual a 1.
ABCS
1111
1101
1011
Situação 1
Situação 2
Situação 3
1000
Situação 4
0111
0100
0010
0000
Podemos verificar pela tabela verdade que as situações onde a
saída é verdadeira são aquelas cujas equações Lógicas são descritas abaixo:
Situação 1 : A saída S só é Verdadeira quando A, B e C são
213
Verdadeiras. Portanto é uma conjunção entre as três proposições: (A ∧B Ë∧
).
Situação 2 : A saída S só é Verdadeira quando A e B são Verdadeiras.
Portanto é uma conjunção entre as duas proposições: (A ∧ B ).
Situação 3 : A saída S só é Verdadeira quando A e C são Verdadeiras.
Portanto é uma conjunção entre as duas proposições: (A ∧ C ).
Situação 4 : A saída S só é Verdadeira quando B e C são Verdadeiras.
Portanto é uma Conjunção entre as duas proposições: (B ∧ C).
Da análise da tabela Verdade podemos concluir que “A Saída S é
Verdadeira S=1 quando acontece uma das quatro situações descritas
anteriormente, portanto entre estas quatro situações vai ocorrer uma
disjunção”. Com esta análise podemos obter a equação final:
[(A ∧ B ∧ C) V ( A ∧ B) V (A ∧ C) V (B∧ C)] = S
O circuito de chaveamento lógico fica:
B
A
A
A
C
B
C
B
C
S
+
E
R
No circuito é visto que as chaves A, B e C formam um grupo em
série no primeiro ramo. Este grupo está em paralelo com as chaves em série A
e B e A e C do segundo e terceiro ramo. No acionamento das chaves do
grupo do primeiro ramo (A, B e C em série) fica irrelevante para o
funcionamento do circuito, visto que ao serem acionadas estas chaves a
corrente já passa pelos ramos de baixo.
Frente a isto o circuito pode ser minimizado retirando o ramo
irrelevante.
A próxima figura apresenta o circuito minimizado
214
A
B
A
C
B
C
+
E
R
A equação minimizada fica : [( A ∧B) V (A ∧C) V (B ∧ C)] = S.
Existem processos que utilizam métodos para minimização de
circuitos que infelizmente fogem do escopo deste livro.
Exercícios
1-
Construa um circuito de chaveamento Lógico que simule a equação:
[(A ∧ B) ∧ ( C V D)] = S
2- A partir da equação lógica [(¬ (A V B))] V [(C Ë D)] = S construa
uma tabela verdade onde são mostrados os valores Lógicos
intermediários e os valores finais da equação. Através da tabela
verdade obtida construa o circuito de chaveamento Lógico.
3- Simule por meio de um circuito de chaveamento a equação lógica:
[((¬ A) ∧ B) V C ] = S
mostre a tabela Verdade e o circuito obtido.
4- Suponha um sistema de segurança que é construído com 4 sensores
normalmente fechados (chaves que ao serem acionadas abrem)
denominados com as letras A, B, C e D. O funcionamento do sistema
de alarme consiste no seguinte procedimento: caso um destes quatro
sensores seja desligado uma buzina será acionada ( S=1) acusando
anormalidade. Para que o guarda da segurança possa entrar sem
acionar o alarme existe em seu poder uma chave (E) que quando
ligada deixa sem ação apenas o sensor A instalado na porta principal
permitido que ele entre no recinto . Conforme a descrição acima,
pede-se:
a) A equação Lógica do Sistema.
b) A tabela Verdade do Sistema.
c) O Circuito de chaveamento Lógico do Sistema.
5- Considere o mesmo enunciado do exercício anterior modificando o
fato dos sensores A, B e C serem agora normalmente abertos (
Chaves que fecham ao serem acionadas).
215
6-
Considere que a administração de uma Indústria decida questões
relativa à produção através de um comitê composto por cinco
pessoas:
a) O Presidente A.
b) O Vice-Presidente B.
c) O Gerente Industrial C.
d) O Gerente de produção D.
e) O Gerente de pessoal E.
Cada membro do Comitê tem em seu poder uma chave que é acionada
sinalizando o voto de aprovação quando a proposta é de sua
concordância, caso contrário, a chave permanece desligada.
Para indicar a aprovação ou não de cada proposta há uma lâmpada
que irá se acender caso a proposta tenha sido aprovada pelo voto do
presidente ou pela maioria dos votos dos membros do comitê.
Pede-se: Elabore a equação Lógica, a tabela verdade e o circuito de
chaveamento Lógico que simule este processo.
216
5 PORTAS LÓGICAS
Introdução
Para estudarmos os modos de representação das funções lógicas por
meio de circuitos elétricos foram utilizadas no capítulo anterior as chaves do
tipo liga-desliga.
Para o emprego da lógica em computadores e Sistemas digitais diversos, os circuitos de chaveamento lógicos, devem ser miniaturizados. Este
processo de miniaturização, traz inúmeras vantagens, tanto nas propriedades construtivas, relativo ao menor espaço ocupado, menor peso etc.., como
nas propriedades físicas que traz maior rapidez nas respostas, menor perdas
por calor, etc.. Todas estas vantagens vão aumentar o rendimento do Sistema lógico quando no seu funcionamento para efetuar as suas análises lógicas.
Neste processo de diminuir as dimensões físicas dos sistemas digitais, os circuitos lógicos do Inversor e de outras funções lógicas que foram
estudados por meio de chaves no capítulo anterior agora são geralmente
construídos com transistores. Os transistores são dispositivos eletrônicos
de pequenas dimensões e que funcionam com pequenas intensidades de
tensão e corrente elétrica.
Nestes circuitos eletrônicos os transistores vão atuar como chaves
configuradas de diversas formas, conforme determinados circuitos de
chaveamento lógico. Nestes circuitos à transistor pequenos sinais de corrente aplicados nas entradas excitam os transistores que fecham e abrem
deixando ou não passar corrente elétrica comportando-se como as chaves
estudadas no capítulo anterior.
Através de tecnologia moderna empregada na construção dos chamados circuitos integrados (chips) consegue-se sistemas lógicos compostos de milhares de transistores de tamanho muito reduzido.
O funcionamento dos transistores, bem como os funcionamentos
internos destes circuitos, fogem do escopo deste livro, portanto, vamos
estudar estes circuitos como um bloco onde só nos interessa os valores
lógicos dos sinais de entrada e os de saídas.
Os sinais elétricos aplicados às entradas do Bloco representam as
proposições A, B, C, etc.. e os sinais elétricos resultantes nas saídas representam os estados lógicos das saídas S1, S2 , S3,... Sn resultantes das equações representadas pelas funções verdades.
217
5.1. As Portas Lógicas Básicas
Quando os circuitos são representados por blocos recebem a denominação de Portas Lógicas (Logic Gates). Neste capítulo estudaremos as
funções lógicas através de blocos funcionais denominados de Portas Lógicas. Inicialmente vamos estudar as chamadas portas lógicas básicas ou primitivas e a partir das combinações das portas lógicas básicas serão obtidas
as representações de funções lógicas complexas.
5.2. Porta Lógica Inversora
A porta lógica que representa o circuito Inversor é aquela que
inverte o estado lógico do sinal aplicado na sua entrada. Esta porta lógica
também é conhecida como operador da negação lógica NÃO ( ou pelo termo
inglês Operador NOT).
O símbolo da porta lógica Inversora e a sua tabela verdade é apresentado na figura a seguir:
Em alguns circuitos lógicos, para facilitar a representação simbólica
a porta lógica Inversora é representada apenas pelo símbolo simplificado
que consiste de um pequeno círculo inserido no circuito. Veja a figura a
seguir:
É comum encontrar a representação da negação de A como sendo
onde lê-se: “A barrado”.
218
5.3. Porta Lógica E
A porta Lógica E (ou utilizando o termo inglês, porta lógica AND)
é um bloco constituído de circuitos elaborados com transistores cuja finalidade é promover o chaveamento para simular eletricamente as funções da
conjunção lógica. Uma porta Lógica E tem os sinais elétricos aplicados em
suas entradas representando o estado lógico das proposições. Na sua saída
é obtido o estado Lógico resultante de uma conjunção Lógica efetuada entre
as proposições representadas pelos sinais aplicados.
O símbolo e a tabela verdade de uma porta E de duas variáveis de
entrada é apresentado na figura a seguir.
É comum na bibliografia de circuitos digitais ser utilizado um ponto
( . ) para representar a conjunção entre as proposições A e B. Por exemplo, a
expressão:
(S=A.B) é lida como, S é o resultado da expressão booleana
entre A e B.
Uma porta lógica E pode ter um número n finito de entradas onde n
é limitado pelas condições técnicas construtivas da porta.
5.4. Porta Lógica NÃO-E ( NAND)
Sabendo o comportamento da porta lógica Inversora e da porta
lógica E, pode-se a partir destas duas portas implementar a porta lógica
NÃO-E.
A porta lógica NÃO-E é obtida pela ligação em série de uma porta
lógica E com uma porta lógica Inversora NÃO. A próxima figura mostra esta
ligação, a tabela verdade e o símbolo da porta NÃO-E de duas entradas.
219
Com a configuração das duas portas, Inversora e E, é obtido como
resultado o sinal que representa a negação da conjunção entre as proposições das entradas, portanto a negação da função E.
Uma notação muito utilizada em circuitos digitais é: S=, onde lê-se
“S é igual a A e B barrados”.
5.5. Porta Lógica OU
A porta Lógica OU (ou utilizando o termo inglês OR) é um bloco
construído com transistores para simular eletricamente as funções da
disjunção lógica.
Uma porta Lógica OU possui, aplicados em suas entradas os sinais
elétricos representando os estados lógicos das proposições. Estes sinais
são tratados internamente através dos transistores e uma saída S vai apresentar o estado lógico resultante. O estado lógico resultante será uma
disjunção lógica efetuada entre as proposições representadas pelos sinais
aplicados à entrada.
O símbolo e a tabela verdade de uma porta OU de duas variáveis de
entrada é apresentado na figura a seguir.
220
É comum em bibliografia de circuitos digitais se encontrar um sinal
de adição ( + ) para representar a disjunção entre as proposições A e B. Por
exemplo a expressão:
S=A+B é lida como, S é o resultado da expressão booleana entre A ou B.
Uma porta lógica OU pode ter um número n finito de entradas onde
n é limitado pelas condições técnicas construtivas da porta.
5.6. Porta Lógica NÃO-OU ( NOR)
A porta lógica NÃO-OU é obtida pela ligação em série de uma porta
lógica OU com uma porta lógica Inversora NÃO.
A próxima figura mostra esta ligação com a tabela verdade e o símbolo da porta NÃO-OU de duas entradas.
221
Com a configuração das duas portas lógicas, a porta OU e a porta
Inversora, é obtida como resultado o sinal que representa a negação da
disjunção entre as proposições das entradas. Portanto, a porta NÃO faz a
negação da função OU.
Uma notação muito utilizada em circuitos digitais é: S= , onde lê-se
“S é igual a A ou B barrados”.
5.7. Combinação de Portas Lógicas
É possível fazer várias combinações com as portas lógicas básicas
vistas até aqui. Estas combinações servem para representar as funções lógicas estudadas nos capítulos anteriores.
Estas portas lógicas que na realidade são circuitos construídos
com transistores são inseridas em circuitos integrados CI (chip) que funcionam com tensões elétricas que representam os estados lógicos das proposições.
Os valores típicos das tensões de um CI relacionado com os estados lógicos representativos das proposições são:
+ 5 volts=1
0 volts=0
Nos controladores lógicos os CIs são convenientemente interligados e instalados em circuitos impressos compondo Sistemas Lógicos Digitais de grande porte e complexidade.
Neste capítulo vamos utilizar as portas lógicas básicas para projetar circuitos que vão simular as equações lógicas estudadas. Nestas configurações vamos utilizar as notações mais comuns dos circuitos digitais.
A figura a seguir mostra cada porta lógica básica estudada até aqui
com as suas funções representadas pelas equações lógicas e respectivas
notações.
222
5.8. Exemplos de aplicação
Exemplo 1 - Dada a equação lógica:
[¬ (A ∧ B )] V [ (C V D)] = S
a) Reescreva-a com a notação mais comumente utilizada em Circuitos
Digitais.
b) Construa o circuito com portas lógicas que simule a equação.
Resolução:
a) A equivalência das notações:
∧ = . Conjunção
V = + Disjunção
¬=
Negação
nos permite reescrever a equação da seguinte forma:
(AB )+ (C + D) = S
Para padronizar, vamos utilizar no decorrer deste capítulo todas as
equações com esta notação.
Para construir o circuito com portas lógicas que simule esta equação
devemos inicialmente relacionar as portas lógicas equivalentes as equações
dentro dos parênteses,
No primeiro parênteses (AB) temos a equação de uma porta lógica
NÃO-E.
No segundo parênteses (C + D) temos a equação de uma porta
lógica OU.
As equações dentro dos dois parênteses são relacionadas através
de uma disjunção +, portanto a representação é uma porta lógica OU.
Com estas considerações o circuito fica construído da seguinte forma:
Exemplo 2 - Um sistema de alarme residencial é composto por 4 sensores sA,
sB, sC e sD instalados em janelas. Cada sensor é instalado de modo que abra
o contato caso a janela seja aberta indevidamente. A abertura do contato
provoca o acionamento de uma lâmpada sinalizadora de alarme.
223
Uma chave sE instalada do lado de fora, e em local secreto conhecido apenas pelo usuário, deixa o sistema inativo caso seja desligada.
Com base na descrição acima elabore a equação Lógica e o Circuito
construído com portas lógicas do Sistema de alarme.
Resolução: Vamos considerar os sensores como proposições de entrada tal
que:
Sensor sA = A
Sensor sB = B
Sensor sC = C
Sensor sD = D
Chave secreta sE = E
Lâmpada de alarme L = Saída S
Utilizando a notação dos circuitos digitais, conforme visto no exemplo anterior, a equação dos sensores é a negação de uma conjunção do tipo:
ABCD = S1
Resultando em uma porta Lógica NÃO-E de 4 entradas:
Com todos os sensores ligados (A=1, B=1, C=1 e D=1) a lâmpada
deve estar apagada. Isto significa que o estado lógico resultante de S é igual
a 0. Para esta equação resultar em um estado lógico verdadeiro, isto é S=1lâmpada acesa, basta que um dos sensores vá para o estado lógico 0.
Caso algum dos sensores esteja no estado lógico 0, significa que
pelo menos uma das janelas foi aberta e o estado lógico da saída vai para o
valor 1 provocando o acendimento da lâmpada.
Como a finalidade da chave sE quando desligada (E=0) é deixar
inativo o sistema de alarme, uma solução é a proposição E ser relacionada
através de uma porta lógica de conjunção “Porta E”. Esta porta E vai ser
analisada com o sinal S1 resultante das análises dos sensores.
224
Pelo circuito, verifica-se que se a proposição E tiver valor lógico 1,
a saída S será dependente apenas do valor resultante de S1, caso a proposição E estiver com valor lógico 0, significa que a chave está desligada e a
saída S será obrigatoriamente igual a 0.
Exemplo 3 -Em uma indústria um comitê administrativo é composto por três
pessoas:
a) O Presidente A.
b) O Vice-Presidente B.
c) O Gerente Industrial C.
Este comitê decide questões relativas ao gerenciamento da fábrica com
os seguintes critérios: 1- O voto do Presidente A tem prioridade em relação
aos demais membros,
2- Os votos da maioria têm poder de aprovar as resoluções, independente do voto do Presidente.
Cada membro do Comitê tem em seu poder uma chave que é acionada
sinalizando um voto de aprovação quando a proposta é de sua concordância, caso contrário, a chave permanece desligada.
Pede-se: Elabore a equação Lógica, a tabela verdade e o circuito de
portas lógicas capaz de simular este processo.
Resolução: O circuito e a equação lógica são originados da tabela verdade.
Primeiramente veremos como fica a coluna da saída referente às
condições possíveis para as três variáveis A, B e C:
Analisando a tabela verdade verifica-se que as 5 situações com as
225
condições de A, B e C sendo satisfeitas resulta verdadeira (S=1).
Na situação 1- S é igual a 1 se, e somente se, A=1, B=1 e C=1.
Portanto, a situação 1 é representada pela equação da conjunção entre as
proposições:
A.B.C =S
Usando o mesmo raciocino para a situação 2 teremos S igual a 1
se, e somente se, A=1, B=1 e C=0. Portanto:
A.B.C=S
Para a situação 3 teremos:
A.B.C =S
Para a situação 4 teremos:
A.B.C =S
Para a situação 5 teremos:
A.B.C =S
Na tabela verdade nota-se que basta uma destas equações, que
foram elaboradas através das situações 1, 2, 3, 4 e 5, ter como resultado 1
para que a proposta em pauta seja aprovada pelo comitê.
Para ligar entre si estas cinco equações é utilizado o conectivo da
disjunção que acontece entre as três proposições ligadas através de uma
porta OU.
A Equação final e o circuito ficam conforme o exposto na próxima
figura.
O circuito completo fica conforme a figura a seguir:
226
Obs. Existem em bibliografia de circuitos digitais modos de minimização de
circuitos, que podem diminuir o número de portas utilizadas otimizando
projetos mas estes procedimentos técnicos fogem do escopo deste livro.
Exemplo 4 -Os circuitos digitais, construídos com portas lógicas só trabalham
com números binários. Os números binários são representados por apenas
dois dígitos, 0 e 1, portanto para representar e efetuar operações algébricas
utiliza-se a base 2. As portas lógicas quando convenientemente interligadas
efetuam soma e subtração com números binários. Nos sistemas digitais,
apesar de todas as operações serem feitas com números binários, os
resultados destas operações algébricas devem ser apresentados na base
dez, porque é o sistema decimal mais familiar ao homem.
Um dispositivo eletrônico utilizado para receber informações em
binário e mostrar o resultado em decimal é o conhecido Decodificador ou
Display de 7 segmentos. O Display de 7 segmentos é utilizado largamente
em vários aparelhos eletrônicos como, computadores, maquinas de calcular,
radio, etc.. Este dispositivo é composto de 7 Diodos emissores de luz (LEDS)
dispostos de uma forma particular.
227
Estes diodos têm a propriedade de, ao serem excitados por uma
corrente elétrica apresentar emissão de luz. Dependendo dos diodos que
serão ligados e dada a sua disposição no conjunto será formado visualmente
no decodificador de 7 segmentos um número ou uma letra. Veja os exemplos
de visualização dos números 0 à 9 a seguir:
a)
Com base no exposto acima elabore um circuito com portas lógicas
que quando aplicado o equivalente binário 0000 apareça o número
zero no decodificador de 7 segmentos.
228
Resolução: Conforme é visto pela tabela, para aparecer o número decimal 0
no Decodificador de 7 segmentos é necessário que os diodos a, b, c, d, e, f
estejam ativados com nível lógico 1.
Para o diodo a estar ativado, isto é a=1 devemos ter a condição
A=0, B=0, C=0, D=0. Se uma destas entradas estiver em nível lógico 1 a saída
a será igual a 0 e não haverá visualização. Isto nos dá para o diodo a uma
função verdade que é uma característica de uma porta lógica NÃO-OU.
Para isto basta relembrar a tabela verdade da porta NÃO-OU.
Para representar visualmente o número zero as mesmas condições
deverão ser encontradas para as outras saídas de diodos (a, b, c, d, e, f ). A
única exceção no conjunto dos diodos é o diodo g que deverá estar
necessariamente desligado. Isto significa que serão necessários 6 circuitos
implementados com portas lógicas NÃO- OU, iguais ao obtido acima, para
visualizar o número zero.
A saída para o diodo g não poderá estar no estado lógico igual a 1,
portanto para a saída g, uma das entradas deverá ser invertida através de um
229
operador de negação.
A figura a seguir mostra a porta lógica para a saída g.
b) Deseja-se implementar um circuito para um Display de 7
segmentos que ao ser aplicado os valores binários 0000 até 1001 serão
visualizados seus números decimais correspondentes, isto é, do número 0
ao número 9 decimal.
Resolução: Deve-se interpretar cada situação através das 4 variáveis
de entrada A, B, C, e D e fazer uma análise detalhada para implementar cada
porta lógica e as suas implicações nos resultados. Depois de ser encontrada
todas as equações é então feita uma configuração conveniente para acender
os diodos no display de 7 segmentos na seqüência correta.
Uma tabela onde mostra o nível lógico dos diodos para cada situação
possível de existir numa variação binária de 0000 à 1001, é mostrado a seguir.
Situações
1
2
3
4
5
6
7
8
9
10
Binário Decimal
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
a
1
0
1
0
0
0
1
0
1
0
b
1
0
0
0
1
1
1
0
1
1
c
1
0
1
1
0
1
0
1
1
1
d
1
1
1
1
1
0
0
1
1
1
e
1
1
0
1
1
1
1
1
1
1
f
1
0
1
1
0
1
1
0
1
0
g
0
0
1
1
1
1
1
0
1
1
Cada diodo vai ser analisado independentemente. Neste exemplo
vamos construir o circuito apenas para o diodo a deixando os circuitos
230
restantes como exercício.
Verificando por exemplo a coluna do diodo a.
As situações onde ele vai ficar ativo, isto é a=1, são:
Situação 1 Situação 3 Situação 7 Situação 9 -
0000 - A.B.C.D.
0010 - A.B.C.D.
0110 - A.B.C.D.
1000 - A.B.C.D.
O diodo a será 1 quando uma destas (isto é, uma ou outra) quatro
situações ocorrerem, portanto vai ocorrer uma disjunção entre elas e a
equação fica:
a= A.B.C.D.+ A.B.C.D. + A.B.C.D. + A.B.C.D.
Determinada a equação é então implementado o circuito com a configuração
das portas lógicas.
A próxima figura mostra o circuito correspondente a esta equação.
231
Para obter o circuito completo a análise deve ser feita para cada
coluna da tabela.
Usando o processo da análise de cada situação para determinar a
equação lógica e as configurações das portas, o circuito final vai ser composto
por um número muito grande de portas.
Existem vários métodos utilizados em projetos de circuitos digitais
para obtenção da minimização dos circuitos como, os teoremas de De Morgan,
utilizando princípios de Identidade, ou os diagramas de Karnaugt.
Estes procedimentos não serão vistos aqui, mas são facilmente
encontrados nas bibliografias que tratam de projetos de circuitos digitais.
Exercícios
1- Utilizando os mesmos procedimentos do exemplo anterior (Exemplo 4.b)
complete o circuito final implementando com configurações de portas lógicas
todo o circuito que permita o display de 7 segmentos apresentar os números
decimais de 0 a 9. Faça a análises na tabela das colunas dos diodos b,c,d,e,f
e g.
2- Dada a equação lógica:
[(A ∧ B )] ∧ [¬ (C V D)] = S
a)
Rescreva-a com a notação mais comumente utilizada em Circuitos
Digitais.
b) Construa o circuito com portas lógicas que simule a equação.
3- Dada a equação lógica: S= A.B+CD
a) Elabore a tabela verdade.
b) Construa o Circuito com portas lógicas para simular esta equação.
4- A equação Lógica A.B + A.B. = S representa uma função lógica muito
importante em circuitos digitais chamada de OU-Exclusivo.
Elabore a tabela verdade desta equação e construa o circuito com portas
lógicas.
232
5)
Dada a equação lógica: S=(A.B) . (C+D)
a) Elabore a tabela verdade.
b) Construa o Circuito com portas lógicas para simular esta equação.
6-Em uma fabrica um comitê administrativo é composto por quatro pessoas:
1234-
O Presidente A.
O Vice-Presidente B.
O Gerente Industrial C.
O Gerente admistrativo D.
Este comitê decide questões relativas ao gerenciamento da fábrica com
os seguintes critérios:
1- Os votos da maioria têm poder de aprovar as resoluções.
2- No caso de empate vence o voto do presidente.
Cada membro do Comitê tem em seu poder uma chave que é acionada
sinalizando um voto de aprovação quando a proposta é de sua concordância,
caso contrário, a chave permanece desligada.
Elabore a equação Lógica, a tabela verdade e o circuito de portas
lógicas capaz de simular este processo.
7- Utilizando os procedimentos de análise do exemplo 4.b elabore um circuito
que permita a partir de uma palavra com 4 dígitos (A, B, C, D) escrever no
Display de 7 segmentos em seqüência as letras “A L O”.
233
APÊNDICE
1. ALGUMAS ESTRUTURAS ALGÉBRICAS
O objetivo deste apêndice é apresentar algumas estruturas algébricas
fundamentais subjacentes a este trabalho.
Operação binária
Se G é um conjunto não vazio, uma operação binária sobre G é uma função
ϕ : G × G → G.
Exemplos:
1. A operação de adição sobre números naturais é uma operação binária: a
um par de números (a, b) está associado um único número que é a soma de
a com b;
2. A operação de multiplicação sobre números naturais também é uma operação binária: a um par de números (a, b) está associado um único número que
é o produto de a e b.
Por comodidade, indiquemos por ⋅ uma operação binária sobre G.
Operação associativa
Uma operação binária ⋅ sobre G diz-se associativa se (a ⋅ b) ⋅ c = a ⋅ (b
⋅ c) para quaisquer elementos a, b, c de G.
Exemplos:
1. a operação de adição sobre os números naturais é associativa;
2. a operação de multiplicação sobre os números naturais é associativa;
3. a operação de subtração sobre os números naturais não é associativa;
4. a operação de adição sobre o conjunto das matrizes quadradas de ordem
2 é associativa.
Operação Comutativa
Uma operação binária ⋅ diz-se comutativa se a ⋅ b = b ⋅ a para quaisquer
elementos a e b de G.
235
Exemplos:
1. A operação de adição e de multiplicação sobre os números naturais é
comutativa;
2. A operação de subtração sobre os números naturais não é comutativa;
3. A operação de adição sobre as matrizes quadradas e ordem 2 é
comutativa.
Semigrupo
1)
2)
Um semigrupo é um par ordenado (G, ⋅) tal que:
G é um conjunto não vazio e
⋅ é uma operação binária associativa em G.
Exemplo:
1. (N, +) é um semigrupo;
2. (N, .) é um semigrupo;
3. (Z, +) é um semigrupo;
4. (Q, .) é um semigrupo.
Monóide
Um monóide é uma tripla ordenada (G, ⋅, e) tal que:
1) G é um conjunto não vazio
2) é uma operação binária sobre G
3) e é o elemento neutro de G isto é, um elemento de G tal que e . a = a . e
= a para todo elemento a de G.
Exemplos:
1. (N, +, 0) é um monóide;
2. (N, ., 1) é um monóide;
3. (Q, ., 1) é um monóide;
4. (Q, +, 0) é um monóide.
Observação:
Um monóide é dito comutativo se a operação binária . for comutativa.
Grupo
Um grupo é um semigrupo (G, ⋅) tal que:
1) possui um elemento neutro e e
2) para todo elemento a de G, existe um elemento b de G tal que a ⋅ b = e.
Exemplos:
1. (Q, .) é um grupo e o seu elemento neutro é o 1;
2. (Q, +) é um grupo e o seu elemento neutro é o 0;
3. (M, +) é um grupo. M é o conjunto das matrizes quadradas de ordem n.
O elemento neutro de M é a matriz identicamente nula.
Observação:
Um grupo (G, .) é dito abeliano se a operação . for uma operação
comutativa.
236
Semi-anel
1)
2)
3)
4)
5)
6)
Um semi-anel é uma quíntupla ordenada (A, +, . ,0, 1) tal que:
A é um conjunto não vazio;
+ e . sao duas operações binárias em A;
(A, +, 0) é um monóide comutativo;
(A, . , 1) é um monóide;
valem as seguintes leis distributivas:
a . (b + c) = a . b + a . c quaisquer a, b, c em A.
(a + b) . c = a . c + b . c quaisquer a, b, c em A.
0 . a = a . 0 = 0 qualquer a em A.
Exemplos:
1. (Q, +, ., 0, 1) é um semi-anel;
2. (R, +, ., 0, 1) é um semi-anel.
Observação:
Um semi-anel é dito comutativo se a operação . for comutativa.
Anel
1)
2)
3)
Um anel é uma quíntupla ordenada (A, +, ., 0, 1) tal que:
(A, +) é um grupo Abeliano;
. é uma operação associativa;
valem as leis distributivas do semi-anel.
Exemplos:
a.) (Q, +, ., 0, 1) é um anel;
b.) (R, +, .,0, 1) é um anel.
Observação:
1) dizemos que um anel é comutativo se a operação . é comutativa;
2) dizemos que um anel é um anel com unidade se 1 é elemento neutro para
a operação . .
2. LÓGICA PROPOSICIONAL E ÁLGEBRA DE BOOLE
Damos uma visão da estrutura algébrica subjacente à lógica
proposicional. Veremos que tal estrutura consiste de uma álgebra de Boole
conhecida com o nome de álgebra de Lindembaum.
Seja F o conjunto das fórmulas do cálculo proposicional. Definamos a
seguinte relação sobre F:
A ≡ B def se for teorema A ↔ B.
Pode-se provar que tal relação se constitui numa relação de
equivalência (isto é , reflexiva, simétrica e transitiva). Podemos portanto
passar ao quociente obtendo o conjunto quociente. Neste conjunto,
definamos as seguintes operações e elementos distingüidos:
Sejam A e B fórmulas. Temos:
237
1. [A] ∧ [B] = def [A ∧ B];
2. [A] ∨ [B] = def[A ∨ B];
3. [A] ’ = def [¬A];
4. 1 = def [tautologia];
5. 0 = def [contradição].
Observação:
Pode-se mostrar que as operações acima definidas independe dos
elementos escolhidos, ou seja, essas operações estão bem definidas.
Teorema: (F, ∧, ∨, ’, 1 , 0) constitui uma álgebra de Boole.
Demonstração: (Exercício).
Vemos assim um aspecto muito importante em lógica: ela pode
receber diversas abordagens. Uma pessoa que esteja estudando lógica está
estudando uma estrutura basilar da matemática (anéis). Também, o aluno
que estuda teoria dos anéis, sem saber está estudando lógica. Isto nos
mostra uma faceta mágica da matemática e da lógica: a unidade que subjaz
essas disciplinas.
3. MODELOS DE HERBRAND
O objetivo deste apêndice é apresentar os modelos de Herbrand
por serem de grande utilidade na área de programação em lógica. Dado um
programa lógico P e uma consulta C, devemos provar C em P com base nos
axiomas que P fornece e além destes axiomas podemos utilizar modus ponens
e particularização. Podemos enxergar este processo que acabamos de
descrever através de uma outra visão: queremos saber se o programa P
fornece um “modelo” para a consulta C.
Os modelos de Herbrand são muito úteis por serem construtíveis e
além disso existem dois resultados importantes relacionando modelos
quaisquer com os modelos de Herbrand. Inicialmente, na seção 2 deste
apêndice damos algumas definições relacionadas com interpretações e
modelos quaiquer, na seção 3, falamos sobre os objetos de Herbrand (base,
universo, interpretação e modelo) e na seção 4 apresentamos dois resultados
importantes sobre os modelos de Herbrand.
Interpretações e modelos
Pré-interpretação
Uma pré-interpretação de uma linguagem de primeira ordem L
consiste do seguinte:
a.) Um conjunto não-vazio D, chamado de domínio da pré-interpretação;
b.) Para cada constante em L está associado um elemento de D;
c.) Para cada símbolo de função n-ária em L está associada uma aplicação
de Dn em D.
238
Exemplo: Lembremos a definição de grupo vista no Apêndice 1.
Um grupo é um conjunto G não vazio munido de uma operação
binária * tal que:
1.) x,y,z , (x * y ) * z = x * ( y * z );
2.) ∃ e ∈ G tal que x ∈ G, x * e = x;
3.) para x ∈ G, ∃y ∈ G tal que x * y = e.
Notemos que os axiomas que definem um grupo formam uma
linguagem de primeira ordem. O conjunto dos números inteiros Z munido da
operação de adição (+) é uma pré-interpretação para a definição de grupo.
Notemos que a constante e é o zero de Z e a operação * é a operação de
adição (+).
Interpretação
Uma interpretação I de uma linguagem de primeira ordem L consiste
de uma préinterpretação J com domínio D de L e além disso para cada símbolo de
predicado em L está associada uma relação em Dn. Dizemos que I está baseada
em J.
Exemplo:
Consideremos um grupo G qualquer. Seja o seguinte predicado em
G:
p(x,y) ≡ “x * y = y * x”.
Consideremos agora seguinte relação R em Z:
R = { (x,y) ∈ Z X Z : x + y = y + x }
A pré-interpretação do item anterior (o grupo (Z,+) ) mais a relação R
definida acima forma uma interpretação para a definição de grupo.
Associação de variáveis, termos e instâncias
Seja J uma pré-interpretação de uma linguagem de primeira ordem L. Uma
associação de variáveis é uma associação de cada variável de L a um elemento
do domínio de J.
Seja uma pré-interpretação J com domínio D de uma linguagem de primeira
ordem L e seja V uma associação de variáveis. A associação de termos dos
termos de L é definida a seguir:
a.)
cada variável é associada de acordo com V;
b.)
cada constante é associada de acordo com J;
c.)
se t1´, ..., tn´ são associações de termos de t1 ,..., tn e f ´ é a
associação do símbolo função f, então f ´ ( t1´ , ... , tn´ ) ∈ D é a associação
de termos para f ( t1 , ..., tn ).
Seja J uma pré-interpretação de uma linguagem de primeira ordem L, V uma
239
associação de variáveis e A uma fórmula atômica. Suponha que A é p(t1, ...,
tn ) e d1, ..., dn ∈ D são as associações de termos de t 1, ..., tn . Dizemos que AJ,
= p (d1, ..., dn ) é a J-instância de A.
V
Exemplos:
Consideremos a seguinte fórmula atômica da linguagem de primeira ordem
dos grupos:
q(x,y, f(x,y) ) (1)
Consideremos a pré-interpretação (Z,+) com f sendo a operação de
multiplicação (.). Seja também a seguinte associação de variáveis: x por 2, y
por 3. Temos que a (Z,+)-instância de (1) é p(2,3, 2 . 3).
Modelo para uma fórmula, para uma teoria e para um conjunto de fórmulas
Seja I uma interpretação de uma linguagem de primeira ordem L e
seja F uma sentença de L. Dizemos que I é um modelo para F se F for
verdadeira em I.
Seja T uma teoria de primeira ordem e seja L uma linguagem de TT.
Um modelo para T é uma interpretação para L que é um modelo para cada
axioma de T. Se T tem um modelo dizemos que T é consistente.
Seja S um conjunto de sentenças de uma linguagem de primeira ordem L e
seja I uma interpretação de L. Dizemos que I é um modelo para S se I é um
modelo para cada fórmula de S. Notemos que se S = { F1, ..., Fn } é um
conjunto finito de sentenças então I é um modelo para S se e somente se é
um modelo para F1∧ ... ∧ Fn.
Exemplo:
Retomemos o exemplo da teoria dos grupos. Temos que (Z,+ ) é um
modelo para a teoria de primeira ordem dos grupos pois cada axioma da
teoria dos grupos é verdadeira em (Z,+). Notemos que (Q, .) também é um
modelo para a teoria dos grupos de primeira ordem.
Satisfatibilidade e Validade
Seja S um conjunto de sentenças de uma linguagem de primeira ordem L.
a.) S é dita satisfatível se L tem uma interpretação que é modelo para S;
b.) S é válida se toda interpretação de L é modelo para S;
c.) S é insatisfatível se nenhuma interpretação de L é modelo para S;
d.) S é inválida se L tem uma interpretação que não é um modelo para S.
Conseqüência Lógica
Seja S um conjunto de sentenças e F uma sentença de uma linguagem
de primeira ordem L. Dizemos que F é uma conseqüência lógica de S se para
toda interpretação I de L tivermos que I é um modelo para S implica que I é um
modelo para F.
240
Interpretações e Modelos de Herbrand
Universo de Herbrand
Seja L uma linguagem de primeira ordem. O universo de Herbrand
UL para L é o
conjunto de todos os termos que são formados das constantes e dos
símbolos de função que aparecem em L.
Consideremos o seguinte programa lógico P1:
p(a).
p(b).
q(X) :- p(X).
A nossa linguagem de primeira ordem são as cláusulas de programa
de P1. Temos que o universo de Herbrand de P1 é UL = { a, b }.
Base de Herbrand
Seja L uma linguagem de primeira ordem. A base de Herbrand BL
para L é o conjunto de todos os átomos que podem ser formados utilizando
os símbolos de predicados de L com os termos do universo de Herbrand
como argumentos.
Temos para o programa P1 acima que a base de Herbrand é BL =
{p(a), p(b), q(a),q(b)}.
Pré-interpretação de Herbrand
Seja L uma linguagem de primeira ordem. A pré-interpretação de
Herbrand para L é a pré-interpretação dada como segue:
a.) O domínio para pré-interpretação é o universo de Herbrand
UL;
b.) Constantes em L são associadas a elas mesmas em UL;
c.) Se f é um símbolo de função n-ária em L, então a aplicação
(UL)n em UL
definida por (t1, ..., tn ) → f(t1, ..., tn) está associada a f.
Temos para o programa P1 a pré-interpretação dada como segue:
Domínio = { a, b }.
Constantes de P1 são associadas a elas mesmas.
Função f de P1 associada a ela mesma.
Interpretação de Herbrand
Uma interpretação de Herbrand para L é uma interpretação baseada na
pré-interpretação de Herbrand para L.
241
Modelo de Herbrand para um conjunto de fórmulas
Seja L uma linguagem de primeira ordem e S um conjunto de fórmulas de L. Um
modelo de Herbrand para S é uma interpretação de Herbrand para L que é um
modelo de S.
Consideremos novamente o programa P1 e seja S o conjunto
formado pelas suas cláusulas de programa. Vamos reescrever o programa:
p(a).
q(b).
q(X) :- p(X).
O domínio da pré-interpretação de Herbrand para este programa é { a,
b }. Não temos funções. Consideremos os predicados p e q como predicados
da interpretação de Herbrand. A interpretação de Herbrand que acabamos
de construir é um modelo de Herbrand para o programa acima pois todas as
cláusulas de programa são verdadeiras nesta interpretação.
Dois resultados envolvendo os modelos de Herbrand
Os seguintes dois resultados são muito importantes para a
programação em lógica: relacionam a satisfatibilidade de sentenças em
modelos quaisquer com os modelos de Herbrand que são construtíveis.
Proposição 1. Seja S um conjunto de cláusulas e suponha que S tem
um modelo. Então S tem um modelo de Herbrand.
Proposição 2. Seja S um conjunto de cláusulas. Então S é
insatisfatível se e somente se não tem modelos de Herbrand (ou
equivalentemente, S é satisfatível se e somente se tem modelo de Herbrand).
Um programa lógico P é um conjunto de cláusulas. Se este programa
tiver um modelo então ele terá um modelo de Herbrand. Como os modelos de
Herbrand podem ser construídos sem muitas dificuldades podemos verificar
se as consultas a P são interpretações do modelo de Herbrand associado a P.
4. A LÓGICA CLÁSSICA.
Introdução.
Neste parágrafo apresentamos, ainda que toscamente, uma visão
panorâmica, de como se encontra a Ciência instituída por Aristóteles.
Restringir-nos-emos á Lógica Clássica, deixando para uma próxima
oportunidade as considerações sobre os outros tipos de lógica.
Desde já advertimos o leitor incauto e os especialistas que a
classificação ou subdivisão que apresentamos é uma das muitas possíveis,
quiçá até apresente incongruências; também não tencionamos sermos
242
completos, nem entraremos em detalhes, de modo óbvio num texto como
este.
Lógica Dedutiva Clássica.
A Lógica Dedutiva Clássica se ocupa do que hoje conhecemos por
Cálculo de Predicados de Primeira Ordem com ou sem igualdade. Ela tem se
estabelecido como sendo a parte nuclear da Lógica Clássica. Naturalmente
ela engloba alguns sub-sistemas importantes como o cálculo proposicional
clássico, o cálculo implicativo clássico e outros.
A Lógica Dedutiva Clássica se subdivide nas seguintes teorias
principais:
•
•
•
•
•
•
Teoria dos Conjuntos.
Teoria dos Tipos.
Lógicas de Ordem Superior.
Teoria das Categorias.
Teoria dos Topos.
Teoria das Alegorias.
1. A Teoria dos Conjuntos.
A Teoria dos Conjuntos é uma das teorias mais importantes de toda a
Lógica, descoberta por G. Cantor no final do século passado. Porém, sendo
uma teoria recém descoberta, inúmeras dificuldades começaram a serem
descobertas. A mais importante, devida a B. Russell, leva seu nome: o
Paradoxo de Russell (vide na Introdução detalhes deste paradoxo). Sua
restauração foi efetuada com o emprego do método axiomático. Um dos
resultados surpreendentes que se constatou é que as diversas axiomáticas
que resultaram não se mostraram equivalentes entre si, surgindo, pois, a
indagação: qual a teoria axiomática que se aproxima mais da teoria intuitiva
de Cantor? Uma definição que podemos dar para a Teoria dos Conjuntos é
que ela se constitui na disciplina que investiga matematicamente o símbolo
de pertença ∈.
A Teoria dos Conjuntos se subdivide em dois grandes tipos;
•
•
Teoria dos Conjuntos Cantorianas.
Teoria dos Conjuntos Não-Cantorianas.
1.1 Teoria dos Conjuntos Cantorianas.
A Teoria dos Conjuntos Cantorianas, também cognominada “Teoria
Clássica de Conjuntos” é a teoria em que valem certos princípios tais como
a Hipótese do Contínuo, o Axioma da Escolha, a Hipótese do Diamante ou a
Hipótese de Suslin.
Os principais sistemas Cantorianos são os seguintes
243
• Teoria de Zermelo-Fraenkel.
• Esta teoria foi introduzida por E. Zermelo (1871-1953), melhorada
posteriormente por A. Fraenkel (1929- ) e chegou à uma teoria sensacional
com T. Skolem (1887-1963). Talvez, a teoria ZF seja a teoria que mais se
aproxime da teoria intuitiva de Cantor. É nesta teoria que se desenvolve a
Matemática usual (espaços vetoriais, cálculo diferencial e integral,
topologia, álgebra, etc.) ensinada de modo regular.
• Teoria de von-Neumann-Bernays-Gödel.
• Sistema NF de Quine.
• Sistema ML de Quine.
• Sistema de Kelley-Morse.
1.2 Teoria dos Conjuntos Não-Cantorianas.
Nestas não valem alguns dos princípios que citamos no caso
anterior. Podemos ter, então teorias de conjuntos em que não valem o Axioma
da Escolha na sua forma geral, ou a Hipótese do Contínuo, ou outros. Hoje
são célebres os trabalhos devidos a:
• Sistemas de Solovay.
Neste modelo de teoria dos conjuntos não vale o Axioma da Escolha
na sua forma geral, mas uma forma particular conhecida como forma
enumerável do Axioma da Escolha. Um resultado interessante num modelo
dessa teoria dos conjuntos é que todo subconjunto da reta real é Lebesgue
mensurável. Outra diferença, em relação à teoria cantoriana, é que todo
operador num espaço de Hilbert é limitado e, por conseguinte, contínuo.
Muitas teorias da Física Quântica estão estruturadas através do conceito
de espaço de Hilbert e conceitos associados. Logo, advém uma indagação
assaz delicada: como fica uma mesma teoria física acomodada em modelos
de teorias de conjuntos distintas? Qual é a “verdadeira” teoria dos
conjuntos para a Física?
• Sistemas de Cohen
Os resultados de independência em Teoria dos Conjuntos
obtidos por Cohen permitiu que tomássemos conhecimento de modelos da
teoria em que não são válidos certos princípios como, por exemplo, a
Hipótese do Contínuo que afirma que não há número cardinal entre o
enumerável e o contínuo dos números reais. Tais considerações, também,
deram origem a Matemáticas Não-cantorianas.
•
2 A Teoria dos Tipos.
A Teoria dos Tipos inicialmente foi proposta pelo próprio B.
Russell para se superar a antinomia de Russell. Grosso modo, a Teoria dos
Tipos põe uma “tipificação” nos objetos que se referem na linguagem,
evitando-se, assim a formação de conjuntos muito grandes na teoria de
Cantor, conjuntos esses, causadores dos paradoxos.
A Teoria dos Tipos se subdivide em:
244
•
•
•
•
•
2.1 Teoria dos Tipos Russellianas
Teoria Ramificada dos Tipos de Russell-Whitehead
Teoria Simples dos Tipos de Ramsey-Chwistek
Teoria Suplementar de Gödel
Teoria de Quine
Teorias Cumulativas
2.2 Teoria dos Tipos Não-Russellianas.
Assim como existem as Teorias Russellianas podemos cultivar as
Não-Russellianas, teorias estas em que não valham certos princípios básicos
da primeira.
3 Linguagens de Ordem Superior.
As Linguagens de Ordem Superior predicam não somente os objetos
em si, porém, predicam predicados da linguagem em apreço; neste exemplo,
dão origem a linguagens de segunda ordem. Muitos lógicos são de opinião
que a verdadeira Matemática só é expressável nestas linguagens (de segunda
ordem). Quando se predica predicados de predicados, temos as linguagens
de terceira ordem, e assim por diante.
4 Teoria das Categorias.
A Teoria das Categorias surgiu da necessidade de se sistematizar
teoria de teorias. Ela foi introduzida por S. McLane no início da década de
trinta. Como se discutiu anteriormente, se considerarmos a totalidade de
uma certa teoria, por exemplo, a teoria dos grupos, esta não forma conjunto,
e, por conseguinte, não é conveniente que se faça ali. Para a questão da
fundamentação da Teoria das Categorias foram investigados por matemáticos
como C. Ehressmann, Grothendieck, Houdebine, e outros, propondo sistemas
fortes de teorias dos conjuntos.
5 Teoria dos Topos.
6 Teoria das Alegorias.
Esquema da sub-divisão
245
246
REFERÊNCIA BIBLIOGÁFICA
[Abe & Papavero 92] ABE, J.M. & N. PAPAVERO, Teoria Intuitiva dos
Conjuntos. Makron Books, 1992.
[Iséki & Abe 01] ISÉKI, K., & J.M. ABE, Lógica Matemática e Aplicações,
2001, em preparo.
[Da Costa 80] DA COSTA, N. C. A., Introdução aos Fundamentos da Lógica. Hucitec, 1980.
[Halmos 62] HALMOS, P., Algebraic Logic, Chelsea, 1962.
[Kleene 52] KLEENE, S. C., Introduction to Metamathematics. Van Nostrand,
1952.
[Kneale & Kneale 68] KNEALE, W & M. KNEALE, O Desenvolvimento da
Lógica. Fundação Calouste Gulbenkian, 3a edição, 1968.
[Lloyd 84] LLOYD, J. W., Foundations of Logic Programming. SpringerVerlag, 1984.
[Mendelson 87] MENDELSON, E., Introduction to Mathematical Logic.
Wadsworth &
Brooks, 3a edição, 1987.
[Mendelson 77] MENDELSON, E., Álgebra Booleana e Circuitos de
Chaveamento. McGraw-Hill do Brasil Ltda, 1977.
[Shoenfield 67] SHOENFIELD, J. R., Mathematical Logic. Addison-Wesley,
1967.
[Suppes 57] SUPPES, P., Introduction to Logic. Van Nostrand, 1957.
247
Download