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