Documente Academic
Documente Profesional
Documente Cultură
^
^
Outras Obras
Flvio Soares Corra da Silva professor do
Departamento de Cincia da Computao da
LGICA PARA
Algoritmos e Lgica de Programao
USP campus Butant. graduado (1984) e
mestre (1989) em Engenharia pela USP, doutor
COMPUTAO Marco Antonio Furlan de Souza, Marcelo Marques
Gomes, Marcio Vieira Soares e Ricardo Concilio
|
(1992) em Inteligncia Artificial pela Univer-
sidade de Edinburgh (Esccia) e livre-docente
Finger
Compiladores: Princpios e Prticas
(1999) tambm pela USP. Kenneth C. Louden
|
Cincia da Computao da USP campus Butan- O livro apresenta um texto original em portugus que, sem Tecnologias de Rede
^
LGICA PARA
Melo
t. graduado (1988) em Engenharia pela Esco- perder a abordagem introdutria, expe rigor matemtico e profun- Michael A. Gallo e William M. Hancock
la Politcnica da USP, mestre (1990) e doutor didade adequados para o pblico-alvo. A obra apresenta os funda-
(1994) em Cincia da Computao pela Univer- mentos e mtodos da lgica matemtica para estudantes de Cincia Introduo aos Sistemas Operacionais
sidade de Londres (Inglaterra) e livre-docente da Computao, permitindo-lhes apreciar os benefcios e as dificul- Ida M. Flynn e Ann McIver McHoes
(2001) em Cincia da Computao pela USP. Tra-
balha h 16 anos na rea de Lgica Computacio-
dades advindos da aplicao de mtodos matemticos rigorosos para
a resoluo de problemas e, acima de tudo, a enorme importncia COMPUTAO Lgica de Programao
^ Marcelo Finger
Ana Cristina Vieira de Melo
i i
i i
Dados Internacionais de Catalogao na Publicao (CIP)
(Cmara Brasileira do Livro, SP, Brasil)
Bibliografia
ISBN 978-85-221-0851-0
06-5095 CDD-004.01
Austrlia Brasil Canad Cingapura Espanha Estados Unidos Mxico Reino Unido
Coleo Ideias em Ao 2006 Cengage Learning Edies Ltda.
Ensino de Matemtica na escola de
Todos os direitos reservados. Nenhuma parte deste
nove anos dvidas, dvidas e desafios
livro poder ser reproduzida, sejam quais forem os
Flvio Soares Corra da Sliva meios empregados, sem a permisso, por escrito,
Marcelo Finger da Editora. Aos infratores aplicam-se as sanes
Cristina Vieira de Melo previstas nos artigos 102, 104, 106 e 107 da Lei
n 9.610, de 19 de fevereiro de 1998.
Impresso no Brasil
Printed in Brazil
1234 08 07 06
i i
Lgica para Computao PROVA 4 4/7/2006 #5
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #6
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #7
i i
Sumrio
Introduo , 1
Parte 1
Lgica Proposicional
2 Sistemas Dedutivos , 33
2.1 O Que um Sistema Dedutivo?, 33
2.2 Axiomatizao, 34
2.2.1 Substituies, 35
2.2.2 Axiomatizao, Deduo e Teoremas, 36
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #8
i i
2.2.3 Exemplos, 37
2.2.4 O Teorema da Deduo, 39
2.3 Deduo Natural, 41
2.3.1 Princpios da Deduo Natural, 41
2.3.2 Regras de Deduo Natural para Todos os Conectivos, 43
2.3.3 Definio Formal de Deduo Natural, 46
2.4 O Mtodo dos Tableaux Analticos, 48
2.4.1 Frmulas Marcadas, 49
2.4.2 Regras de Expanso e , 50
2.4.3 Exemplos, 52
2.5 Correo e Completude, 57
2.5.1 Conjuntos Descendentemente Saturados, 58
2.5.2 Correo do Mtodo dos Tableaux Analticos, 60
2.5.3 A Completude do Mtodo dos Tableaux Analticos, 61
2.5.4 Decidibilidade, 61
2.6 Notas Bibliogrficas, 63
3 Aspectos Computacionais , 65
3.1 Introduo, 65
3.2 Implementao de um Provador de Teoremas pelo Mtodo dos
Tableaux Analticos, 66
3.2.1 Estratgias Computacionais, 66
3.2.2 Estruturas de Dados, 70
3.2.3 Famlias de Frmulas Notveis, 74
3.3 Formas Normais, 77
3.3.1 A Forma Normal Conjuntiva ou Forma Clausal, 78
3.3.2 Forma Normal Disjuntiva, 86
3.4 Resoluo, 88
3.5 O Problema SAT, 93
3.5.1 O Mtodo DPLL, 93
3.5.2 Aprendizado de Novas Clusulas, 97
3.5.3 O Mtodo Chaff, 100
3.5.4 O Mtodo Incompleto GSAT, 106
3.5.5 O Fenmeno de Mudana de Fase, 108
3.6 Notas Bibliogrficas, 109
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #9
i i
Sumrio ix
Parte 2
Lgica de Predicados
Parte 3
Verificao de Programas
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #10
i i
Concluso , 227
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #11
i i
Introduo
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #12
i i
Salvo raras excees, os livros que encontrvamos para indicar aos nossos
alunos se enquadravam em duas categorias:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #13
i i
Introduo 3
Agradecimentos
Os autores agradecem coletivamente aos estudantes do curso de bacharelado
em Cincia da Computao da Universidade de So Paulo, que inspiraram
este livro e ajudaram sobremaneira no refinamento e nas correes do texto.
Agradecemos tambm Thomson Learning pelo apoio editorial.
Flvio agradece sua esposa Renata e sua filha Maria Clara pelo estmulo
para construir coisas que devam trazer benefcios para outras pessoas de
alguma maneira o que inclui escrever este livro.
Marcelo agradece sua esposa Diana e ao filho Michel pelo total apoio e
pela fora recebida nas pequenas e nas grandes dificuldades.
Ana Cristina agradece ao seu marido Roger pelo apoio durante a prepara-
o deste livro.
N.A. Embora devamos ressaltar que todas as imperfeies ainda presentes no texto so de total
responsabilidade dos autores.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #14
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #15
i i
Parte 1
Lgica
Proposicional
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #16
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #17
i i
1 Lgica Proposicional:
Linguagem e Semntica
1.1 Introduo
A linguagem natural, com a qual nos expressamos diariamente, muito
suscetvel a ambigidades e imprecises. Existem frases no-gramaticais que
possuem sentido (por exemplo, anncios de classificados no jornal) e frases
perfeitamente gramaticais sem sentido ou com sentido mltiplo. Isso faz com
que a linguagem no seja apropriada para o estudo das relaes lgicas entre
suas sentenas.
Portanto, no estudo da lgica matemtica e computacional, utilizamo-nos
de uma linguagem formal. Linguagens formais so objetos matemticos, cujas
regras de formao so precisamente definidas e s quais podemos atribuir
um nico sentido, sem ambigidade.
Linguagens formais podem ter diversos nveis de expressividade. Em geral,
quanto maior a expressividade, maior tambm a complexidade de se mani-
pular essas linguagens. Iniciaremos nosso estudo da lgica a partir de uma
linguagem proposicional, que tem uma expressividade limitada, mas j nos
permite expressar uma srie de relaes lgicas interessantes.
Nesse contexto, uma proposio um enunciado ao qual podemos atribuir
um valor verdade (verdadeiro ou falso). preciso lembrar que nem toda
sentena pode possuir um valor verdade. Por exemplo, no podemos atribuir
valor verdade a sentenas que se referem ao seu prprio valor verdade,
com a sentena esta sentena falsa. Esse tipo de sentena chamado
de auto-referente e deve ser excludo da linguagem em questo, pois, se a
sentena verdadeira, ento ela falsa; por outro lado, se ela for falsa, ento
verdadeira. A linguagem proposicional exclui sentenas auto-referentes.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #18
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #19
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #20
i i
p q representa (p q) [e no (p q)].
p q r representa p (q r).
p q r representa (p q) r.
1.2.2 Subfrmulas
Definimos a seguir, por induo sobre estrutura das frmulas (tambm cha-
mada de induo estrutural), a noo do conjunto de subfrmulas de uma
frmula A, Subf (A). Na induo estrutural, o caso bsico analisa as frmulas
de estrutura mais simples, ou seja, o caso bsico trata das frmulas atmicas.
Os casos indutivos tratam das frmulas de estrutura composta, ou seja,
de frmulas que contm conectivos unrios e binrios. Assim, o conjunto
Subf (A) de subfrmulas de uma frmula A definido da seguinte maneira:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #21
i i
2. |A| = 1 + |A|
|(p q) (r q)| = 1 + |p q| + |r q|
= 3 + |p| + |q| + |r| + |q|
= 5 + |p| + |q| + |r| + |q|
=9
Note que se uma subfrmula ocorre mais de uma vez em A, sua complexi-
dade contabilizada cada vez que ela ocorre. No exemplo, a subfrmula q
foi contabilizada duas vezes.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #22
i i
(criana aposentado)
Iremos ver mais adiante que esta apenas uma das formas de expressar
essa idia, que pode ser expressa de diversas formas equivalentes.
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #23
i i
(c) p q r p q r
(d) p q r s
(e) p (p q) q
1.3 Semntica
O estudo da semntica da lgica proposicional clssica consiste em atribuir
valores verdade s frmulas da linguagem. Na lgica clssica, h apenas dois
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #24
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #25
i i
AB B=0 B=1 A
A=0 1 1 A=0 1
A=1 0 1 A=1 0
V1 (q) = 1
V1 (p q) = 1
V1 (r q) = 1
V1 ((p q) (r q)) = 1
Por outro lado, considere agora uma valorao V2 tal que V2 (p) = 1,
V2 (q) = 1 e V2 (r) = 1 e vamos calcular V2 (A), para A como anteriormente.
Ento:
V1 (q) = 0
V1 (p q) = 1
V1 (r q) = 0
V1 ((p q) (r q)) = 0
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #26
i i
Exerccios
1.8 Dar uma valorao para os tomos das frmulas (b) e (c), no exerccio
anterior, de forma que a valorao da frmula seja 1.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #27
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #28
i i
p q p q p q p q (p q) (p q)
0 0
0 1
1 0
1 1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #29
i i
p q p q p q p q (p q) (p q)
0 0 1 1 0 1 0
0 1 1 0 1 1 1
1 0 0 1 1 1 1
1 1 0 0 1 0 0
Nesse caso, vemos que A2 uma tautologia (ou uma frmula vlida), pois
todas as valoraes para A2 geram 1 em todas as linhas.
Considere agora a Tabela da Verdade para a frmula A3 = p p:
p p p p
0 1 0
1 0 0
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #30
i i
1 2 1 2 3 A
z}|{ z}|{ z}|{ z}|{ z }|3 { z }| { z }|4 {
p q r s pq rs pr qs 1 2 1 2 3 3
0 0 0 0 1 1 0 0 1 1 1
0 0 0 1 1 1 0 1 1 1 1
0 0 1 0 1 0 1 0 0 0 1
0 0 1 1 1 1 1 1 1 1 1
0 1 0 0 1 1 0 1 1 1 1
0 1 0 1 1 1 0 1 1 1 1
0 1 1 0 1 0 1 1 0 1 1
0 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 1 1 0 0 0 1
1 0 0 1 0 1 1 1 0 1 1
1 0 1 0 0 0 1 0 0 0 1
1 0 1 1 0 1 1 1 0 1 1
1 1 0 0 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1 1
1 1 1 0 1 0 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1 1
Por meio dessa Tabela da Verdade, podemos ver que A4 uma frmula
vlida, pois todas as linhas contm 1 na ltima coluna.
Nota-se tambm que, com o aumento de tomos, o mtodo fica, no
mnimo, desajeitado para a verificao manual e, na prtica, 4 tomos o
limite de realizao manual de uma Tabela da Verdade.
A automao da Tabela da Verdade tambm possvel, mas, por causa do
crescimento exponencial, existe um limite no muito alto para o nmero de
tomos a partir do qual mesmo a construo das Tabelas da Verdade por
computador acaba levando muito tempo e as torna tambm inviveis.
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #31
i i
(c) p q p q
(d) p
(e) p p
(f) (p q p)
(g) (p p q)
(h) ((p q) (r q)) (p r q)
(a) p p
(b) q p p
(c) (p q) p
(d) (p q q)
(e) (p q) (p q)
(f) (p q) (q p)
I pp
B (p q) (r p) (r p)
C (p q r) (q p r)
W (p p q) (p q)
S (p q r) (p q) (p r)
K pqp
Peirce ((p q) p) p
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #32
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #33
i i
Note que essa definio permite que B seja satisfeito por valoraes que no
satisfazem A. Nesse caso, tambm dizemos que A implica logicamente B.
Podemos usar as Tabelas da Verdade para verificar a conseqncia lgica.
Por exemplo, considere a afirmao p q r |= p r. Para verificar se essa
afirmao verdadeira, construmos simultaneamente as Tabelas da Verdade
de p q r e p r:
Linha p q r pq pq r p r
1 0 0 0 0 1 1
2 0 0 1 0 1 1
3 0 1 0 1 0 1
4 0 1 1 1 1 1
5 1 0 0 1 0 0
6 1 0 1 1 1 1
7 1 1 0 1 0 0
8 1 1 1 1 1 1
Linha p q r pq pq r p r
1 0 0 0 0 1 1
2 0 0 1 0 1 1
3 0 1 0 0 1 1
4 0 1 1 0 1 1
5 1 0 0 0 1 0
6 1 0 1 0 1 1
7 1 1 0 1 0 0
8 1 1 1 1 1 1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #34
i i
p q pq
0 0 1
0 1 1
1 0 0
1 1 1
, A |= B sse |= A B.
N.A. usual representar o conjunto de frmulas antes do smbolo |= apenas como uma lista de
frmulas; alm disso, em vez de escrevermos {A} |= B, abreviamos para , A |= B.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #35
i i
p q p q p q q p
0 0 1 1 1 1
0 1 1 0 1 1
1 0 0 1 0 0
1 1 0 0 1 1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #36
i i
p q pq
0 0 1
0 1 0
1 0 0
1 1 1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #37
i i
Exerccios
1.15 Provar ou refutar a validade das seguintes regras lgicas, usando Tabe-
las da Verdade:
(a) p q, q |= p (modus tolens)
(b) p q, q |= p (abduo)
(c) p q, q |= p
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #38
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #39
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #40
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #41
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #42
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #43
i i
2 Sistemas Dedutivos
N.A. Na sua formulao mais genrica, um seqente uma relao entre duas seqncias de
frmulas, B1 , . . . , Bn ` A1 , . . . , Am , com a leitura de que a seqncia de hipteses B1 , . . . , Bn
prova pelo menos uma das concluses A1 , . . . , Am ; ou seja, no antecedente a vrgula lida como
conjuno, enquanto no conseqente ela lida como disjuno.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #44
i i
2.2 Axiomatizao
Axiomatizao o sistema formal de deduo mais antigo que se conhece,
tendo sido usado desde a apresentao da geometria euclidiana pelos gregos.
S que, naquele caso, tratava-se de axiomatizar uma teoria no caso, a
teoria geomtrica. Mais modernamente, no final do sculo XIX, com os
trabalhos de Frege, as axiomatizaes foram usadas em tentativas de prover
um fundamento seguro para a matemtica.
Quando falamos em axiomatizao, porm, estamos nos referindo a
uma forma de inferncia lgica. Portanto, estamos nos referindo aqui a uma
axiomatizao da lgica clssica. Falaremos sobre axiomatizao de teorias
mais adiante.
A apresentao da axiomatizao segue o estilo utilizado por Hilbert, tanto
que as axiomatizaes de lgicas so muitas vezes chamadas de sistemas
de Hilbert. De acordo com essa forma de apresentao, uma axiomatizao
possui dois tipos de elementos:
N.A. importante deixar bem claro que existem vrias lgicas, e no apenas a lgica. Na
realidade, existe um nmero infinito de possveis lgicas.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #45
i i
2 Sistemas Dedutivos 35
2.2.1 Substituies
A substituio de um tomo p por uma frmula B em uma frmula A
representada por A[p := B]. Intuitivamente, se temos uma frmula A =
p (p q) e queremos substituir p por (r s), o resultado da substituio
ser A[p := (r s)] = (r s) ((r s) q). A definio formal de
substituio se d por induo estrutural sobre a frmula A sobre a qual se
processa a substituio, da seguinte maneira:
1. p[p := B] = B
2. q[p := B] = q, para q 6= p
N.A. Note que foi dito uma axiomatizao, pois podem existir vrias axiomatizaes
equivalentes.
N.A. Existem inmeras notaes alternativas para substituio na literatura que causam uma
certa confuso; por exemplo, para a mesma noo, podem-se encontrar na literatura as seguintes
notaes: A(B/p), A(p/B), A(p/B) etc. No nosso caso, escolhemos uma notao que fosse a
mais clara possvel.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #46
i i
(1 ) p (q p)
(2 ) (p (q r)) ((p q) (p r))
(1 ) p (q (p q))
(2 ) (p q) p
(3 ) (p q) q
(1 ) p (p q)
(2 ) q (p q)
(3 ) (p r) ((q r) ((p q) r))
(1 ) (p q) ((p q) p)
(2 ) p p
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #47
i i
2 Sistemas Dedutivos 37
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #48
i i
Exemplo 2.2.1
Vamos inicialmente mostrar a deduo do teorema I = A A.
1. (A ((A A) A)) de (2 ), onde p := A, q := A A,
((A (A A)) (A A)) r := A.
2. A ((A A) A) de (1 ), onde p := A, q := A A,
3. ((A (A A)) (A A)) por modus ponens 1, 2.
4. A (A A) de (1 ), onde p := A, q := A.
5. AA por modus ponens 3, 4.
Exemplo 2.2.2
Como um segundo exemplo, vamos mostrar que a deduo de duas frmulas
pode ser composta, conforme expressa a frmula B = (A B) ((C
A) (C B)).
1. ((C (A B)) ((C A) de (2 ), onde
(C B))) ((A B) p := (C (A B))
((C (A B)) ((C A) ((C A) (C B)),
(C B)))) q := A B.
2. (C (A B)) ((C A) de (1 ), onde p := C,
(C B)) q := A, r := B.
3. (A B) por modus ponens 1, 2.
((C (A B))
((C A) (C B)))
4. (((A B) ((C (A B)) de (1 ), onde p := A B,
((C A) (C B)))) q := C (A B),
(((A B) (C (A B))) r := (C A) (C B).
((A B) ((C A)
(C B))))
5. ((A B) (C (A B))) por modus ponens 4, 3.
(A B) ((C A) (C B))
6. (A B) (C (A B)) de (2 ), onde
p := A B, q := C.
7. (A B) ((C A) (C B)) por modus ponens 5, 6.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #49
i i
2 Sistemas Dedutivos 39
Exemplo 2.2.3
Desejamos demonstrar que p q, p r ` p q r. Em vez de fazer
uma deduo direta, vamos usar o Teorema da Deduo e provar a condio
equivalente p q, p r, p ` q r. Dessa forma:
1. pq hiptese
2. pr hiptese
3. p hiptese
4. q modus ponens 1, 3
5. r modus ponens 2, 3
6. q (r (q r)) instncia de (1 )
7. r (q r) modus ponens 6, 4
8. qr modus ponens 7, 5
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #50
i i
Exemplo 2.2.4
Usando o Teorema da Deduo, vamos deduzir novamente a frmula B =
(A B) ((C A) (C B)), ou seja, vamos deduzir que A
B, C A, C ` B.
1. AB hiptese
2. CA hiptese
3. C hiptese
4. A modus ponens 2, 3
5. B modus ponens 1, 4
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #51
i i
2 Sistemas Dedutivos 41
Gentzen props um mtodo de inferncia que se aproximasse mais da forma
como as pessoas raciocinam, dando a esse mtodo o nome de deduo
natural.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #52
i i
Para cada conectivo lgico, duas regras de inferncia devem ser provi-
das, uma para a insero do conectivo na prova e outra para a remoo
do conectivo.
[A]i
AB A ..
( E) .
B B
( I)i
AB
[A]1
A
( I)1
AA
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #53
i i
2 Sistemas Dedutivos 43
[A]1 [B]2
A
( I)2
BA
( I)2
A (B A)
Nesse exemplo, a hiptese [A]3 foi usada duas vezes, mas descartada uma s
vez. O exemplo apresenta o uso de vrias inseres e eliminaes do conectivo
. Note que esses dois ltimos exemplos mostram a deduo pelo mtodo da
deduo natural de dois axiomas, (1 ) e (2 ), do mtodo da axiomatizao.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #54
i i
A B AB AB
(I) (E1 ) (E2 )
AB A B
[A]i
.. AB A
. ( E)
B i B
( I)
AB
[A]i [B]j
A B .. ..
(I1 ) (I2 ) . .
AB AB AB C C
(E)i,j
C
A A
(I) (E)
A
[A]i [A]i
.. ..
. .
( I)i ( E)i
A A
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #55
i i
2 Sistemas Dedutivos 45
Note que esses dois exemplos mostram a deduo pelo mtodo da Dedu-
o Natural dos axiomas, (1 ) e (3 ), do mtodo da axiomatizao.
O conectivo (negao) est intimamente ligado com a constante
(falsidade). De fato, comparando a regra da insero da implicao, ( I),
e a regra da insero da negao, (I), percebemos a semelhana entre A
e A . Isso no coincidncia, pois, se fizermos a Tabela da Verdade,
verificaremos que A A .
A regra de introduo de indica que equivale a uma contradio; se
encararmos A A , veremos que essa regra nada mais que uma
instanciao do modus ponens. A regra de eliminao de o princpio da
trivializao da lgica clssica em que, a partir de uma contradio, qualquer
frmula dedutvel.
A regra de introduo da negao (I), como mencionado, se assemelha
introduo da implicao, expressando que, se assumimos uma frmula
como verdadeira e isso levar contradio, ento a frmula deve ser falsa. Por
outro lado, se assumimos que uma frmula A falsa (ou seja, sua negao A
verdadeira) e chegamos a uma contradio, a regra da insero da negao
nos daria uma dupla negao, A. No entanto, a regra de eliminao da
negao, (E), nos permite inferir que a frmula A verdadeira, e portanto
a regra (E) corresponde inferncia A ` A. Para ilustrar o uso dessas
regras, mostramos a seguir a deduo de ` (A B) ((A B) A)
e ` A A.
[A B]1 [A]3 [A B]2 [A]3
( E) ( E) [A]1 [A]2
B B (I)
(I)
(E)2
(I)3 A
A ( I)1
( I) 2 A A
(A B) ((A B) A)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #56
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #57
i i
2 Sistemas Dedutivos 47
A [A]1
(I)
(I)1
A
[A]1
(I)
A A [(A A)]2
(I)
(I)1
A
(I)
A A [(A A)]2
(I)
(E)2
A A
Note que a hiptese [(A A)] foi utilizada duas vezes e foi descartada
no ltimo passo da deduo.
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #58
i i
2.9 Provar que toda deduo pelo sistema de axiomatizao pode ser
simulada pelo mtodo da Deduo Natural.
Dica: Notar que j demonstramos todos os axiomas em exemplos
anteriores. Notar tambm que a substituio e modus ponens fazem
parte da Deduo Natural. Resta apenas mostrar, dada uma deduo
axiomtica, como compor uma Deduo Natural.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #59
i i
2 Sistemas Dedutivos 49
N.A. Tanto no singular, tableau, quanto no plural, tableaux, a palavra pronunciada tabl;
iremos usar a grafia tradicional em francs sem, no entanto, grafar a palavra em itlico.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #60
i i
TB1
..
.
TBn
FA1
..
.
FAm
1 2
TA B TA TB
FA B FA FB
FA B TA FB
TA FA FA
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #61
i i
2 Sistemas Dedutivos 51
1 2
FA B FA FB
TA B TA TB
TA B FA TB
FA TA TA
1
2
1 2
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #62
i i
2.4.3 Exemplos
Como primeiro exemplo, vamos provar o teorema ` p p:
1. Fp p
2. Fp , 1
3. Fp , 1
4. Tp , 3
2, 4
Nesse primeiro exemplo, no h bifurcaes. Iniciamos aplicando uma
expanso em uma frmula do formato (F), gerando as linhas 2 e 3.
Em seguida, expandimos a frmula (F) da linha 3, que, apesar de ser
nominalmente do tipo , no provoca bifurcao. As linhas 2 e 4 fecham o
ramo e, como esse tableau tem apenas um ramo, o tableau est fechado, e
o teorema foi demonstrado. Note que o nico ramo est saturado.
Como segundo exemplo, vamos provar que p q, q r ` p r:
Tp q
Tq r
Fp r
Tp
Fr
Fp Tq
Fq Tr
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #63
i i
2 Sistemas Dedutivos 53
Tp
Tp q r
Fr
Fp q Tr
Tp F q
Nesse tableau, o ramo mais direita e o ramo mais esquerda esto fecha-
dos. No entanto, o ramo central est saturado e aberto. Nesse ramo, temos
as seguintes frmulas atmicas marcadas: Tp, Fq, Fr. Esse ramo fornece a
valorao v tal que v(p) = 1, v(q) = v(r) = 0. Note que essa valorao
demonstra que p, p q r 2 r pois satisfaz p e p q r, e falsifica r. Ou
seja, o ramo saturado e aberto nos deu um contra-exemplo do seqente.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #64
i i
Tp q
Tp r
Tq r s
Fr
Tp Tq
Fp Tr Fq Tr s
Tr Ts
Tr Fp
Tp q
Tp r
Tq r
Fr
Tp Tq
Fp Tr Fp Tr
Fq Tr
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #65
i i
2 Sistemas Dedutivos 55
Tp q
Tp r
Tq r
Fr
Fq Tr
Fp Tr
Tp Tq
Exerccios
(a) q p ` p q
(b) p q ` p q
(c) p q ` p q r
(d) p q ` p q r
(e) (p q) ` p q
(f) (p q) ` p q
(g) p q, q ` p (modus tolens)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #66
i i
I pp
B (p q) (r p) (r p)
C (p q r) (q p r)
W (p p q) (p q)
S (p q r) (p q) (p r)
K pqp
Peirce ((p q) p) p
AB B=0 B=1
A=0 1 0
A=1 0 1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #67
i i
2 Sistemas Dedutivos 57
`TA A = |= A.
`TA A = |= A.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #68
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #69
i i
2 Sistemas Dedutivos 59
Demonstrao:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #70
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #71
i i
2 Sistemas Dedutivos 61
2.5.4 Decidibilidade
Para provar que o mtodo dos tableaux decidvel, basta mostrar que um
desenvolvimento qualquer de um tableau para a lgica proposicional clssica,
independentemente da ordem em que as expanses so feitas, sempre gera
tableaux finitos.
N.A. Note que essa propriedade deixar de ser verdade quando abordarmos a lgica de primeira
ordem, na Parte 2 do livro.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #72
i i
Exerccios
2.14 Mostrar, examinando cada um dos casos, que v() = 1 se, e somente
se, v(1 ) = v(2 ) = 1.
2.15 Mostrar, examinando cada um dos casos, que v() = 1 se, e somente
se, v(1 ) = 1 ou v(2 ) = 1.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #73
i i
2 Sistemas Dedutivos 63
H1 = p p
H2 = (p q) (p q) (p q) (p q)
H3 = (p q r) (p q r) (p q r) (p q r)
(p q r) (p q r) (p q r) (p q r)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #74
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #75
i i
3 Aspectos Computacionais
3.1 Introduo
Neste captulo, apresentaremos diversos mtodos que visam implementa-
o eficiente de provadores de teoremas automticos em computador para a
lgica clssica proposicional.
Inicialmente, na Seo 3.2, vamos apresentar uma forma de implementar
um provador de teoremas pelo mtodo dos tableaux analticos. Apresen-
taremos tambm diversas famlias de teoremas de complexidade de prova
crescente, que podem ser usadas para testar a eficincia do provador imple-
mentado.
Os provadores de teoremas usados na prtica so baseados em tableaux
analticos. Isso se deve a uma caracterstica intrnseca de ineficincia desse
mtodo. Na segunda parte do captulo, exploraremos os mtodos mais
usados na prtica para prova de teoremas. Inicialmente nos concentraremos
na representao de frmulas usadas na prtica, e para isso descreveremos na
Seo 3.3 as formas normais conjuntiva (ou clausal) e disjuntiva. Os mtodos
mais difundidos na prtica so todos baseados na forma clausal. Em especial,
o importante mtodo de prova de teoremas por resoluo, apresentado na
Seo 3.4, capaz de detectar a inconsistncia de teorias no formato clausal.
N.A. O mtodo dos tableaux analticos baseado em um clculo lgico no qual a regra do corte
foi eliminada, o que causa essa ineficincia; infelizmente, uma discusso mais profunda sobre isso
est fora do escopo deste texto introdutrio.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #76
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #77
i i
3 Aspectos Computacionais 67
7: fim se
8: Escolher R, uma das regras aplicveis em .
9: Expandir o tableau, aplicando R sobre .
10 : Verificar se ou seus sub-ramos fecharam.
11 : fim enquanto
12 : retorne verdadeiro
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #78
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #79
i i
3 Aspectos Computacionais 69
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #80
i i
ramo:
Tp q Tq r F p r
1 2 3 4 5 6 7 8 9
betas:
X X
1 2 3 4 5 6 7 8 9
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #81
i i
3 Aspectos Computacionais 71
ramo:
Tp q Tq r F p r Tp Fr
1 2 3 4 5 6 7 8 9
betas:
X
1 2 3 4 5 6 7 8 9
O ramo ser expandido com a frmula 1 = Fq. Porm, antes disso preci-
samos armazenar o ponto em que o ramo estava antes da bifurcao, de onde
reiniciaremos a expanso, caso o ramo atual seja fechado. Para isso, utiliza-
mos uma pilha de entradas, chamada de PilhaDeRamos. A entrada dessa pi-
lha uma tripla composta dos seguintes elementos: h2 , TamAtual, betasi.
Esses dados sero desempilhados da PilhaDeRamos, caso o ramo atual
ramo:
Tp q Tq r Tp Fr
1 2 3 4 5 6 7 8 9
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #82
i i
PilhaDeRamos
D E
Tr, 5, X
1 2 3 4 5 6 7 8 9
Antes de expandir o ramo, necessrio empilhar uma nova entrada na
PilhaDeRamos, cuja configurao se torna:
PilhaDeRamos
D E
Tq, 6,
D E
Tr, 5, X
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #83
i i
3 Aspectos Computacionais 73
PilhaDeRamos
D E
Tr, 5, X
betas:
1 2 3 4 5 6 7 8 9
ramo:
Tp q Tq r F p r Tp Fr Fq Tq
1 2 3 4 5 6 7 8 9
PilhaDeRamos
betas:
X
1 2 3 4 5 6 7 8 9
ramo:
Tp q Tq r Fp r Tp Fr Tr
1 2 3 4 5 6 7 8 9
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #84
i i
p q r
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #85
i i
3 Aspectos Computacionais 75
A Famlia n
a1 b1 ,
a1 (a2 b2 ), ` a2 b2 ,
b1 (a2 b2 ).
a1 b1 ,
a1 (a2 b2 ),
b1 (a2 b2 ), ` a3 b3 ,
a2 (a3 b3 ),
b2 (a3 b3 ).
Frmulas de Statman
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #86
i i
A1 = p1
B1 = q1
Ai+1 = (p1 q1 ) (p2 q2 ) . . . (pi qi ) pi+1
Bi+1 = (p1 q1 ) (p2 q2 ) . . . (pi qi ) qi+1
A1 B1, A2 B2 , . . . , An Bn ` pn qn
FA B TA B TA B
FA FB TA TB FA TB
TA FA TA
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #87
i i
3 Aspectos Computacionais 77
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #88
i i
L1 L2 . . . Ln ,
q1 . . . qk p1 . . . pl ,
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #89
i i
3 Aspectos Computacionais 79
(X Y) 7 (X Y)
(X Y) 7 X Y
(X Y) 7 X Y
X 7 X
5: Distributividade de sobre :
X (Y Z) 7 (X Y) (X Z)
6: fim para
7: A frmula A obtida quando no h mais substituies possveis.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #90
i i
Algoritmo 3.3 Transformao Linear para FNC com Adio de Novos tomos
Entrada: Uma frmula B.
Sada: Uma frmula A na FNC, B A.
1 : para todas as subfrmulas X, Y , Z de B faa
2: Redefinir em termos de e :
(X Y) 7 (X Y)
(X Y) 7 X Y
(X Y) 7 X Y
6: fim para
7: A frmula A obtida quando no h mais substituies possveis.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #91
i i
3 Aspectos Computacionais 81
Note que a nica diferena entre o algoritmo 3.3 e o algoritmo 3.2 est
na linha 5. Na segunda verso, introduzimos um novo smbolo atmico p,
ou seja, um smbolo atmico p que no ocorre na frmula, de forma que
p (Y Z). A frmula p (Y Z), segundo o exemplo a seguir, quando
posta na forma clausal, gera (p Y) (p Z) (Y Z p). Se essa
substituio for feita apenas quando X, Y e Z j estiverem no formato clausal,
ela no gerar duplicao de frmulas, mas somente apenas um aumento
linear no tamanho da frmula.
Como exemplo, iremos decompor a frmula p (Y Z) no formato
clausal. Inicialmente, desmembramos o conectivo em dois, gerando a
frmula
(p (Y Z)) (Y Z p).
(p (Y Z)) (Y Z p).
(p Y) (p Z) (Y Z p).
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #92
i i
p1 . . . pn q
ou, equivalentemente,
p1 . . . pn q.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #93
i i
3 Aspectos Computacionais 83
Lema 3.3.1 Seja C um conjunto de clusulas de Horn sem nenhum fato (ou
seja, sem nenhuma clusula unitria positiva). Ento, C satisfazvel.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #94
i i
Seja p C um fato.
Seja C 0 obtida de C removendo p de suas clusulas.
/* Note que se houver uma clusula p C, ela se transformar na
clusula vazia C 0 . */
retorne HornSAT (C 0 )
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #95
i i
3 Aspectos Computacionais 85
retorne falso
seno
retorne verdadeiro
fim se
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #96
i i
N
_
L1 L2 . . . Lni .
i=1
(X Y) 7 (X Y)
(X Y) 7 X Y
(X Y) 7 X Y
X 7 X
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #97
i i
3 Aspectos Computacionais 87
5: Distributividade de sobre :
X (Y Z) 7 (X Y) (X Z)
6: fim para
7: A frmula A obtida quando no h mais substituies possveis.
Note que a nica diferena entre o algoritmo 3.7 e o algoritmo 3.2 utilizado
para transformar frmulas no formato clausal est no passo 5, em que a
distributividade de sobre aplicada para obter a FND. Esse algoritmo
no introduz novos tomos e, devido distributividade, possui o mesmo
problema do algoritmo 3.2, ou seja, o tamanho da frmula produzida na
FND ser exponencialmente maior que o tamanho da frmula original. Para
evitar esse problema, pode-se utilizar a mesma tcnica do algoritmo 3.3 de
introduo de novos tomos, a qual ser deixada como exerccio.
Exerccios
(a) ((p q) p) p
(b) (p p)
(c) (p q) (q r)
3.7 Apresentar uma frmula cuja forma clausal sem adio de novos
tomos seja exponencialmente maior no tamanho. Apresentar, em
seguida, a mesma frmula no formato clausal com adio de novos
tomos.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #98
i i
(a) p1 p2 p3
p2 p4
p3 p4
p4 p5 p6
p5 p7
p6 p7
(b) p1 p2 p3
p2 p4
p3 p4
p4 p5 p6
p5 p7
p6 p7
p7 p1
p7 p4
p0 p1 p2 p3 p4 p5 .
3.4 Resoluo
Resoluo uma regra de inferncia que requer que as frmulas estejam
no formato clausal. Nesse caso, consideramos uma teoria um conjunto de
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #99
i i
3 Aspectos Computacionais 89
Ap p B
(Resoluo)
AB
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #100
i i
p p
.
psr p
sr s r
rr
r r
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #101
i i
3 Aspectos Computacionais 91
psr p
sr r
s s r
r r
Note que a clusula unitria r foi utilizada duas vezes, o que corresponde
utilizao da regra da contrao sobre r r na prova anterior. Infelizmente,
nem toda inferncia por resoluo pode ser feita apenas com resolues
unitrias. Ver exerccios a seguir sobre isso.
Em algumas referncias na literatura, a resoluo unitria descrita como
uma resoluo em que a clusula unitria deve ser negativa. O mtodo
apresentado tambm conhecido na literatura como propagao unitria ou
BCP (boolean constraint propagation).
Outra estratgia possvel o uso de resolues lineares. Em uma resoluo
linear, a frmula resoluta em um passo deve ser usada como resolvente no
passo seguinte, de forma que a rvore de prova degenerada em uma linha,
de forma que os ramos direita so sempre constitudos de uma nica
frmula. O exemplo anterior de resoluo unitria tambm consiste em uma
resoluo linear.
O segundo desafio computacional a diminuio do espao de busca. O
fato de uma frmula ter sido usada como resolvente em um determinado
passo de resoluo no descarta a possibilidade de essa frmula ser utili-
zada como resolvente em algum outro passo de resoluo. Como a prpria
frmula resoluta tambm uma candidata a resolvente, o espao de busca
de resolventes pode aumentar muito aps vrios passos de resoluo. Alm
disso, muitos possveis resolventes geram frmulas que no sero nunca
utilizadas na derivao final da contradio, tornando-se frmulas inteis.
Faz-se necessrio uma estratgia de restrio desse espao de busca para
aumentar a eficincia da resoluo.
A principal estratgia utilizada o descarte de frmulas por englobamento
(traduzido do ingls, subsumption). Dadas duas clusulas C1 e C2 , dizemos
que C1 engloba C2 se todos os literais que ocorrem em C1 tambm ocorrerem
em C2 , o que representado por C1 C2 .
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #102
i i
Exerccios
3.12 Mostrar que o passo de resoluo correto, ou seja, mostrar para toda
valorao v que, se v(A p) = v(B p) = 1, ento necessariamente
v(A B) = 1.
Analogamente, provar a correo da regra de contrao.
3.15 Verificar quais dos seqentes a seguir podem ser resolvidos por resolu-
o linear. Dos restantes, identificar quais podem ser resolvidos ou no
por resoluo.
(a) p q, q s ` p s
(b) s p, s p, s r, s r, r t p ` t
(c) p q, q s ` s
(d) s p, s p, p t r, p t r ` t
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #103
i i
3 Aspectos Computacionais 93
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #104
i i
/* Escolha no-determinstica */
Escolha um literal L com v(L) = *
/* Chamadas recursivas */
se DPLL(F 0 {L}) = verdadeiro ento
retorne verdadeiro
seno se DPLL(F 0 {L}) = verdadeiro ento
retorne verdadeiro
seno
retorne falso
fim se
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #105
i i
3 Aspectos Computacionais 95
feita pela propagao do literal instanciado, o que pode ser visto como
uma resoluo unitria com o literal recm-instanciado, tambm chamada
de BCP (boolean constraint satisfaction). Esse algoritmo de simplificao
apresentado no algoritmo 3.9.
x1
x1 x2
x1 x3
x2 x3 x4 x5
x1 x4
x2
x3
x2 x3 x4 x5
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #106
i i
x3
x3 x4 x5
x4 x5 .
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #107
i i
3 Aspectos Computacionais 97
Toda vez que derivamos uma contradio, ou seja, que um ramo da busca
DPLL leva falsificao de uma clusula, pode-se lamentar a escolha dos
literais que nos levaram a esse beco sem sada.
Alternativamente, podemos aprender com nossos erros. Em particular,
aprendemos que os literais escolhidos levam contradio e que as clusulas
envolvidas contm informao relevante para evitar a repetio das ms
escolhas.
Podemos adicionar essa informao aprendida ao problema. No contexto
do algoritmo DPLL, aprender significa adicionar novas clusulas ao problema,
sem aumentar o nmero de tomos.
O objetivo do aprendizado melhorar a eficincia da prova, encolhendo
o espao de busca. Esse encolhimento decorrente da adio de clusulas
novas que probem a repetio de ms escolhas. Cada vez que derivamos uma
contradio, podemos aprender uma ou mais clusulas. Veremos a seguir
dois mtodos complementares de aprendizado de novas clusulas.
Aprendendo das Ms Escolhas
O mtodo DPLL pode ser visto como a tentativa de construir uma valorao
que satisfaa um conjunto de clusulas. Nesse processo, a cada momento te-
mos uma valorao parcial, V , que inicialmente vazia. Essa valorao parcial
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #108
i i
V = .
V = {a1 }
V = {a1 , a2 , . . . , aka }.
Supondo agora que V , nesse ponto, falsifica uma clusula o que equi-
valente a termos em V dois literais opostos, x e x , desfazemos todos os
efeitos da propagao e invertemos a ltima escolha no caso, a escolha do
literal b1
V = {a1 , a2 , . . . , aka , b1 };
a1 b1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #109
i i
3 Aspectos Computacionais 99
pq
p q
p t s
p t s
p s
V = {t, p, s, s}
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #110
i i
Para cada literal obtido por propagao unitria, qual a clusula que
deu origem ao literal.
p t
Literais vigiados.
Retrossaltos (backjumping).
Reincios aleatrios.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #111
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #112
i i
Ambos so indefinidos; ou
Ao menos, um deles 1.
clusula c 1 c 2
pqr p= q=
p q s p = q =
p r s p = r =
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #113
i i
clusula c 1 c 2
pqr r= q=
p q s s = q =
p r s s = r =
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #114
i i
clusula c 1 c 2
pqr r=1 q=
p q s s = q =
p r s s = r = 1
V = {(p, >), (r, >), (a, >), (q, pqr), (s, p r s), (s, p q s)}.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #115
i i
Reincios Aleatrios
Considere o seguinte cenrio, de alta probabilidade durante a execuo do
DPLL. A frmula satisfazvel, porm as escolhas iniciais foram malfeitas.
Suponha que temos 1.000 variveis na frmula, e as valoraes que satisfazem
essa frmula requerem todas que V(p1 ) = 0. No entanto, uma das primeiras
escolhas da valorao parcial foi p1 verdadeiro.
Nesse caso, s acharemos uma valorao que satisfaz a frmula depois de
esgotar todas as possibilidades da m escolha inicial, o que pode equivaler
construo de uma rvore com 2999 ramos.
Para evitar tais casos, surgiu a idia de reiniciar periodicamente a busca da
valorao. O mecanismo o seguinte. Com o passar do processamento DPLL
de uma dada frmula, vamos aprendendo diversas clusulas, que no estavam
disponveis quando a m escolha inicial foi feita. Se fosse dado realizar a
escolha inicial nesse novo contexto, o literal escolhido seria outro, ou seria
o mesmo, s que com polaridade oposta.
Para implementar esse reincio, o sistema contm como parmetro uma
probabilidade de reincio bem pequena (digamos, = 0, 5%). Cada vez que
uma contradio encontrada, uma ou mais clusulas so aprendidas. Em
seguida, com probabilidade (1 ), ocorre o processo normal de retrocesso.
Porm, com probabilidade , a busca pode ser reiniciada com V = .
Esse reincio aleatrio pode trazer problemas de eficincia se a frmula
for insatisfazvel. Tal problema, porm, no ocorre se as frmulas aprendidas
forem mantidas ao se reiniciar. Ou seja, medidas empricas garantem que os
reincios aleatrios tragam ganho de eficincia.
Heurstica VSIDS
A heurstica de seleo de literais do Chaff chamada de VSIDS (do ingls
variable state independent decaying sum). Esse mtodo leva em considerao
que novas clusulas so aprendidas ao longo do processo e usa essa informa-
o para privilegiar a escolha de literais em clusulas recm-aprendidas:
Para cada varivel proposicional e para cada uma de suas polaridades,
atribudo um contador, inicializado com zero.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #116
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #117
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #118
i i
Nunca se provou que o ponto de mudana de fase deva existir e ter essas
propriedades. Essas observaes so todas de carter emprico. Pode ser que
surja um novo algoritmo SAT que viole essas propriedades.
No caso de problemas 3-SAT, a experincia mostra que o ponto de mu-
dana de fase ocorre para L/N = 4, 3. Esse nmero obtenvel com mais
estabilidade para n > 100.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #119
i i
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #120
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #121
i i
Parte 2
Lgica de
Predicados
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #122
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #123
i i
4 Lgica de Predicados
Mondicos
4.1 Introduo
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #124
i i
(a) e1 s1
(b) e2 s2
(c) e3 s3
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #125
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #126
i i
1 = [R1 , C, F1 , F2 , . . . , FN ], N < .
Se xi V , ento xi T (1 ).
Se ci C, ento ci T (1 ).
Se t1 , t2 T (1 ), ento t1 = t2 F(1 ).
Esses dois tipos de frmulas so denominados frmulas elementares ou
atmicas:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #127
i i
Exerccios
4.3 Semntica
1
Um par A(1 ) = [A, A( ) ] um sistema algbrico da assinatura 1 se as
seguintes condies forem observadas:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #128
i i
1
A( ) mapeia os elementos dos conjuntos de 1 em subconjuntos e
funes sobre o conjunto A e denominada interpretao de 1 em A.
1
Se ri R1 , ento A( ) (ri ) A.
1
Se ci C, ento A( ) (ci ) A.
1
Se fji Fj , ento existe uma funo A( ) (fji ) : Aj A.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #129
i i
1
Se = r(t) F(1 ), ento A(1 ) |= [] equivalente a tA( ) []
1
A( ) (r).
Um caso que merece destaque que: se for uma sentena, ento L() =
. Nesse caso, por definio, nos dois ltimos casos, i L() = L(),
independentemente de qual seja a funo . Se for uma sentena, portanto,
podemos simplificar um pouco a notao e indicar que verdadeira em
A(1 ) (denotado como A(1 ) |= ).
Quando uma sentena no for verdadeira em um sistema algbrico A(1 ),
dizemos que ela falsa em A(1 ).
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #130
i i
F1 = {f1 }.
F2 = {f2 }.
Considerar tambm os seguintes sistemas algbricos:
1
A1 (1 ) = [A1 , A1 ( ) ].
A1 = {1}
1 1
A1 ( ) (r1 ) = A1 ( ) (r2 ) = {1}
1 1 1
A1 ( ) (a) = A1 ( ) (b) = A1 ( ) (c) = 1
1
A1 ( ) (f1 ) = f : A1 A1 , f(x) = 1
1
A1 ( ) (f2 ) = g : A1 A1 A1 , g(x, y) = x
1
A2 (1 ) = [A2 , A2 ( ) ].
A2 = {1, 2, 3, . . .}
1
A2 ( ) (r1 ) = {1, 3, 5, . . .}
1
A2 ( ) (r2 ) = {2, 4, 6, . . .}
1
A2 ( ) (a) = 1
1
A2 ( ) (b) = 2
1
A2 ( ) (c) = 3
1
A2 ( ) (f1 ) = f : A2 A2 , f(x) = x + 1
1
A2 ( ) (f2 ) = g : A2 A2 A2 , g(x, y) = x + y
Verificar, para as sentenas i a seguir, se A1 (1 ) |= i e se
A2 (1 ) |= i :
x1 (x2 (x3 (r2 (x1 ) (r1 (x2 ) r1 (x3 ) (x1 = f2 (x2 , x3 )))))).
x1 (x2 (r2 (x1 ) (r1 (x2 ) (x1 = f2 (x2 , a))))).
x1 (x2 (r2 (x1 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x1 (x2 (r2 (x1 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x(r1 (x)).
x(r1 (x) r1 (x)).
x(r2 (f1 (x)) r1 (x)).
x(r2 (f1 (x)) r1 (x)).
x((r2 (f1 (x)) r1 (x))).
x(r2 (f1 (x)) r1 (x)).
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #131
i i
4.5 Para cada uma das sentenas do exerccio anterior, construir (se poss-
vel) um sistema algbrico Aj (1 ) tal que no seja verdade que Aj (1 )
|= i .
Seja 1 uma assinatura e F(1 ). Definimos a assinatura 1 restrita a
denotada como 1 () como a assinatura composta unicamente pelos
predicados, constantes e funes de 1 que ocorrerem em .
1
Seja um sistema algbrico A(1 ) = [A, A( ) ]. Definimos como a cardina-
lidade de A(1 ) a quantidade de elementos de A. Denotamos a cardinalidade
de A(1 ) como |A(1 )|.
Uma sentena n-verdadeira, n < , se A(1 ()) |= para qualquer
sistema algbrico de assinatura () cuja cardinalidade seja menor ou igual
a n. Denotamos esse conceito como |=n .
Uma sentena denominada simplesmente verdadeira se A(1 ()) |=
para qualquer sistema algbrico de assinatura (), independentemente da
cardinalidade. Denotamos esse conceito como |= .
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #132
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #133
i i
Exerccio
1 , . . . , n ` .
1 , . . . , n `.
` .
`.
` , F(1 ).
` (x = x), x V .
1. ``; `
2. `
`
3. `
`
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #134
i i
`
4. `
`
5. `
6. , ` ; , ` ; `
`
7. `, `
8. ` ; ``
9. ,
`
`
10. ` ; ``
11. ,, , , `
, , `
12. ,``
Cada uma das regras desse sistema de deduo prescreve uma forma de
construo de novos seqentes a partir de seqentes anteriores. A demons-
trao de um seqente C uma rvore de seqentes em que as folhas so
axiomas, a raiz o seqente C e os seqentes intermedirios so construdos
utilizando as regras anteriores.
Se existir uma demonstrao de um seqente C, ento esse seqente recebe
o nome de teorema. Mais adiante, veremos a relao entre os teoremas e os
sistemas algbricos da assinatura de .
Intuitivamente, podemos observar que as regras anteriores de 1 a 10
servem para acrescentar ou para eliminar um conectivo (, , , ). As
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #135
i i
Exerccios
N.A. Essa demonstrao no nica. O leitor pode tentar, como exerccio, construir uma
demonstrao diferente.
i i
i i
i
i
i
i
126
, r1 (a) ` r1 (a) , r1 (a) ` r1 (a) r1 (b) , r1 (a) ` r1 (a) ` r1 (a), r1 (a) r1 (c)
, r1 (a) ` r1 (b) , r1 (a) ` r1 (c)
, r1 (a) ` r1 (b) r1 (c)
(r1 (a) r1 (b)) (r1 (a) r1 (c)) ` r1 (a) (r1 (b) r1 (c))
x3 ((r1 (a) r1 (b)) (r1 (a) r1 (x3 ))) ` r1 (a) (r1 (b) r1 (c))
x2 (x3 ((r1 (a) r1 (x2 )) (r1 (a) r1 (x3 )))) ` r1 (a) (r1 (b) r1 (c))
x1 (x2 (x3 ((r1 (x1 ) r1 (x2 )) (r1 (x1 ) r1 (x3 ))))) ` x3 (r1 (a) (r1 (b) r1 (x3 )))
x1 (x2 (x3 ((r1 (x1 ) r1 (x2 )) (r1 (x1 ) r1 (x3 ))))) ` x2 (x3 (r1 (a) (r1 (x2 ) r1 (x3 )))
x1 (x2 (x3 ((r1 (x1 ) r1 (x2 )) (r1 (x1 ) r1 (x3 ))))) `x1 (x2 (x3 (r1 (x1 ) (r1 (x2 ) r1 (x3 )))))
Lgica para Computao PROVA 4 4/7/2006 #136
i
i
i
i
i i
Lgica para Computao PROVA 4 4/7/2006 #137
i i
` (t = t), t T (1 ).
(t1 = t2 ) ` (t2 = t1 ), t1 , t2 T (1 ).
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #138
i i
4.5 Axiomatizao
O sistema dedutivo da seo anterior tem uma estratgia de construo, que
fazer uso de uma pequena quantidade de axiomas bastante simples e cons-
truir as propriedades desejadas para os elementos da linguagem (conectivos
e quantificadores) por meio das regras de deduo. Com isso, temos poucos
esquemas de axiomas e uma maior quantidade de regras.
A possibilidade inversa fazer uso de uma pequena quantidade de regras,
que sejam mantidas to simples quanto possvel, com a natural contrapartida
de precisar de axiomas mais sofisticados e em maior quantidade, que levem
s mesmas propriedades para os elementos da linguagem.
Consideremos, por exemplo, o seguinte seqente:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #139
i i
Exerccio
` ( ) .
` ( ) .
` ( ) (( ) ( ( ))).
` 1 (. . . (n ) . . .).
` 1 . . . n .
` .
`.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #140
i i
Exerccio
1. ` ( ), , F(1 )
2. ` ( ) (( ( )) ( )), , , F(1 )
3. ` ( ) , , F(1 )
4. ` ( ) , , F(1 )
5. ` ( ) (( ) ( ( ))), , , F(1 )
6. ` ( ), , F(1 )
7. ` ( ), , F(1 )
8. ` ( ) (( ) (( ) )), , , F(1 )
9. ` ( ) (( ) ), , F(1 )
10. ` , F(1 )
13. ` (x = x), x V
1. ` `
`
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #141
i i
2.
x()
3.
x()
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #142
i i
Exerccio
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #143
i i
`
.
`
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #144
i i
Exerccio
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #145
i i
A = {d : d D}.
1
A( ) (d) = d, d D.
1
d A( ) (r), r R1 se, e somente se, r(d) .
1
Se fj Fj , ento A( ) (fj )(d1 , . . . , dj ) = d se, e somente se,
(fj (d1 , . . . , dn ) = d) .
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #146
i i
Exerccio
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #147
i i
1P = [R1 , C, F1 , F2 , . . . , FN ], N <
em que C = F1 = . . . = FN = .
Nesse caso, o conjunto de termos T (1P ) coincide com o conjunto de
variveis V = {x1 , x2 , . . .}.
Uma sentena F(1P ) necessariamente se enquadra em uma das
seguintes categorias:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #148
i i
sistemas algbricos.
Conforme prometido, obtivemos, dessa forma, que o problema da sa-
tisfazibilidade para a lgica de predicados mondicos com assinatura pura
decidvel. Entretanto, conforme tambm previsto, a sua complexidade
computacional alta. Para ilustrar o quanto mais de trabalho pode ser
necessrio para verificar a satisfazibilidade de uma sentena nessa lgica, em
comparao com a lgica proposicional, consideremos a seguinte sentena
proposicional
((p1 p2 ) p3 ) (p4 p5 )
(x1 (x2 (x3 ((p1 (x1 )p2 (x2 ))p3 (x3 ))))) (x4 (x5 (p4 (x4 )p5 (x5 ))))
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #149
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #150
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #151
i i
5 Lgica de Predicados
Polidicos
5.1 Introduo
Vamos retomar um dos exemplos de motivao apresentados no captulo
anterior, na Seo 4.1. Consideremos a sentena o filho de qualquer pessoa
que pratica esportes tem boa sade. J utilizando a notao da lgica de
predicados mondicos, se a funo unria f1 : T (1 ) T (1 ) denotar a
relao filho de, o predicado r11 denotar pratica esportes e o predicado r12
denotar tem boa sade, podemos escrever
Est implcito nessa sentena que ningum pode ter mais de um filho, caso
contrrio a relao f1 deixaria de ser uma funo. Para que admitamos a
condio de algum ter vrios filhos, poderamos transformar a funo f1
em uma relao r2 T (1 )2 , para ento escrever
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #152
i i
= [R1 , R2 , . . . , RM , C, F1 , F2 , . . . , FN ], M, N <
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #153
i i
5.3 Semntica
Um par A() = [A, A()] um sistema algbrico da assinatura se as
seguintes condies forem observadas:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #154
i i
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #155
i i
A1 () (f1 ) = f : A1 A1 , f(x) = 1
A1 () (f2 ) = g : A1 A1 A1 , g(x, y) = y
A2 () = [A2 , A2 () ].
A2 = {1, 2, 3, . . .}
A2 () (r1 ) = {1, 3, 5, . . .}
A2 () (r2 ) = {[1, 2], [3, 4], [5, 6], . . .}
A2 () (a) = 1
A2 () (b) = 2
A2 () (c) = 3
A2 () (f1 ) = f : A2 A2 , f(x) = x + 1
A2 () (f2 ) = g : A2 A2 A2 , g(x, y) = x + y
Verificar, para as sentenas i a seguir, se A1 () |= i e se A2 () |= i :
x1 (x2 (x3 (r2 (x1 , x2 ) (r1 (x2 ) r1 (x3 ) (x1 = f2 (x2 , x3 )))))).
x1 (x2 (r2 (x1 , x2 ) (r1 (x2 ) (x1 = f2 (x2 , a))))).
x1 (x2 (r2 (x1 , x2 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x1 (x2 (r2 (x1 , x2 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x(r1 (x)).
x(r2 (x, x) r2 (x, x)).
x(r2 (f1 (x), f2 (x, x)) r2 (x, x)).
x(r2 (f1 (x), x) r1 (x)).
x((r2 (f1 (x), x) r1 (x))).
x(r2 (f1 (x), x) r1 (x)).
5.2 Para cada uma das sentenas do exerccio anterior, construir (se poss-
vel) um sistema algbrico Aj () tal que no seja verdade que
Aj () |= i .
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #156
i i
O conceito de seqente.
5.5 Axiomatizao
Da mesma forma, continuam tambm valendo para o sistema axiomtico de
deduo:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #157
i i
1
Tx(A) TA[x := a]
Fx(A) FA[x := a]
1
Fx(A) FA[x := a]
Tx(A) TA[x := a]
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #158
i i
Exemplo 5.6.1
Vamos provar, usando um tableau analtico, que
F r1 (a) T r2 (a)
Exerccio
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #159
i i
` (x1 (r1 (x1 ) r2 (x1 ))) (x2 (r1 (x2 ))) (x3 (r2 (x3 ))).
` (x1 (x2 (r1 (x2 ) r2 (x1 )))) (x3 (r1 (x3 )))
(x4 (r2 (x4 ))).
` (x1 (r1 (x1 ) r2 (x1 ))) (x2 (r1 (x2 ) r2 (x2 ))).
` r(c) x((x = c) r(x)).
` (x1 (x2 (r1 (x1 ) r2 (x2 )))) (x3 (x4 (r1 (x4 ) r2 (x3 )))).
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #160
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #161
i i
Exerccio
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #162
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #163
i i
Parte 3
Verificao de
Programas
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #164
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #165
i i
6 Especificao de Programas
6.1 Introduo
Uma das principais tarefas dos profissionais de computao o entendi-
mento e modelagem de um problema real em um problema computacional.
Para o entendimento do problema real a ser resolvido, vrias pesquisas
tm sido desenvolvidas na chamada engenharia de requisitos (Sommerville
e Sawyer, 1997; Kotonya e Sommerville, 1998). Ao final do processo de
entendimento, o problema precisa ser representado e futuramente desen-
volvido computacionalmente e, para isso, necessitamos de uma forma de
representao clara e precisa.
comum encontrarmos problemas a serem computacionalmente resolvi-
dos representados em linguagem natural, como, por exemplo:
Exemplo 6.1.1
O proprietrio de uma loja de CDs precisa que seja emitida, toda semana,
uma lista de seus clientes ordenados do maior ao menor valor de compras.
A partir de uma descrio inicial, o analista do sistema deve descrever o
problema a ser implementado para os respectivos programadores do sistema.
Algo como:
Dada uma lista de clientes da loja e os seus respectivos valores
de compras efetuadas naquela loja, o programa dever produzir
uma lista desses clientes em ordem decrescente dos seus respec-
tivos valores de compras.
A partir dessa especificao, o programador ir produzir um programa de
ordenao considerando o valor de compra de cada cliente.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #166
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #167
i i
Por outro lado, como visto no estudo da lgica clssica (Partes I e II), esta
pode expressar propriedades sobre o nosso cotidiano a partir dos predicados
definidos sobre o domnio em questo. Com a lgica clssica, podemos, en-
to, formular sentenas sobre sistemas com interpretao nica, j que todos
os seus operadores tm um significado nico. Alm disso, podemos ainda
verificar inconsistncias quando definimos propriedades contraditrias sobre
um mesmo requisito.
Neste captulo, temos como objetivo mostrar o uso da lgica clssica na
especificao de propriedades sobre programas. Para isso, definimos inicial-
mente quais tipos de propriedades so relevantes aos programas seqenciais
(determinsticos), para ento mostrar como elas podem ser definidas usando
a lgica clssica.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #168
i i
1 2 n
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #169
i i
Estado inicial:
Estado final:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #170
i i
Exemplo 6.2.1
Dados dois valores de entrada sobre o domnio dos nmeros inteiros maiores
ou iguais a 10 (dez), o programa dever calcular a soma desses dois valores.
Especificao:
Para especificarmos esse problema, podemos inicialmente dar nomes s
variveis de entrada do programa: x representa o primeiro dado de entrada
e y, o segundo dado de entrada. Podemos agora definir a restrio sobre os
dados de entrada (estado inicial) do programa:
x > 10 y > 10
z= x+y
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #171
i i
Exemplo 6.2.2
Considere o mesmo problema definido no Exemplo 6.2.1.
Especificao:
Sobre o estado inicial:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #172
i i
Anlise:
Nas propriedades especificadas, tanto sobre o estado inicial quanto sobre o
estado final acrescentamos novos predicados. Sobre o estado inicial, (x+y) >
0 um predicado desnecessrio porque pode ser deduzido pelos dois outros
iniciais. Da mesma forma, sobre o estado final, o predicado z > 20 pode
ser omitido por ser uma conseqncia dos dois primeiros predicados sobre
o estado inicial, juntamente com z = x + y. Essa uma caracterstica
indesejvel nas especificaes, a qual chamamos de superespecificao (do
ingls overspecification).
Exemplo 6.2.3
Considere o mesmo problema definido no Exemplo 6.2.1.
Especificao:
Sobre o estado inicial:
Anlise:
Nas propriedades especificadas sobre o estado inicial, temos o predicado
(x + y) > (10 + x). Este, juntamente com x > 10, especifica que y deve ser
maior ou igual a 10 (dez), como requerido pelo problema. Contudo, essa
uma forma pouco clara, ou indireta, de explicitar tal propriedade. ideal que
tenhamos especificaes com propriedades explcitas sobre o problema e da
maneira mais concisa possvel.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #173
i i
Exemplo 6.2.4
Considere o mesmo problema definido no Exemplo 6.2.1.
Especificao:
Sobre o estado inicial:
x > 10
Anlise:
Na propriedade especificada sobre o estado inicial, temos apenas o pre-
dicado x > 10. Nesse caso, y poderia assumir qualquer valor, o que torna
a especificao incompatvel com a definio do problema. Com essa es-
pecificao incompleta do problema, um programa poderia ser construdo
resultando em uma soluo errada para o problema poderamos, inclusive,
obter nmeros negativos como resultado do problema.
Vrios cuidados devem ser observados para que obtenhamos uma espe-
cificao clara, concisa e precisa de um programa. O especificador precisa
definir, inicialmente, quais restries so necessrias sobre os dados de um
programa para que ele funcione, assim como propriedades sobre os dados
a serem produzidos pelo programa. Nos exemplos anteriores, definimos
as propriedades sobre os dados dos programas utilizando uma linguagem
matemtica comparaes sobre nmeros inteiros e conectivos lgicos.
Poderamos ter tais especificaes escritas em linguagem natural, mas as van-
tagens de termos especificaes de programas definidas em uma linguagem
matemtica so:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #174
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #175
i i
t ::= x | c | f(t, . . . , t)
x uma varivel x V .
c uma constante c C.
Se t1 , . . . , tn so termos e f uma funo (f F) de paridade n,
ento f(t1 , . . . , tn ) um termo.
::= P(t1 , . . . , tn ) | | | | | x | x
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #176
i i
Exemplo 6.3.1
Para comparar se um dado nmero inteiro maior ou igual a outro, uti-
lizamos
5>4
em vez de usarmos o predicado na forma
x = y, x 6 y, x 6 y, x > y, x > y
Exemplo 6.3.2
Dadas x e y variveis que representam nmeros inteiros, as seguintes expres-
ses so frmulas aceitas como asseres de programas:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #177
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #178
i i
IntXInt Int
x + y.
x y.
x y.
x/y diviso de inteiros.
max(x, y) o valor mximo entre dois nmeros.
min(x, y) o valor mnimo entre dois nmeros.
mod(x, y) resto da diviso de x por y.
IntXInt Bool
Essa uma definio incomum para os nmeros inteiros, mas usada aqui
apenas para facilitar a escrita/leitura das especificaes.
Vetores
Da mesma forma que os nmeros inteiros, comum termos vetores (arrays)
de valores, os quais formam um tipo composto. Em particular, podemos ter
vetores de nmeros inteiros:
V1 , . . . , Vn
Int Int
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #179
i i
Exemplo 6.3.3
Os elementos do vetor V , que no contm elementos repetidos, esto em
ordem decrescente:
i, j(i < j Vi > Vj )
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #180
i i
Exemplo 6.3.4
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #181
i i
Exemplo 6.3.5
Considere o problema do Exemplo 6.3.4 sobre fatorial. Alm de definir
as precondies para o funcionamento do programa, devemos tambm
denotar o resultado a ser produzido pelo programa por meio de suas
ps-condies. Seja n o valor de entrada, como definido anterior-
mente, e denotamos por fat o valor resultado da funo. Temos, para
o problema, as ps-condies:
Pos:fat = n!
em que
1, se n = 0
n! = 1, se n = 1
n (n 1)!, se n > 1
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #182
i i
Exemplo 6.3.6
Consideremos ainda o problema do Exemplo 6.3.4 sobre fatorial e
acrescentemos a assero de que a varivel sobre o valor resultado
no assume valores negativos no decorrer da execuo do programa.
Podemos, ento, definir o invariante:
Inv:fat > 0
Note que tal assero , ao mesmo tempo, uma pr e ps-condio na
especificao do problema e poderia eventualmente ser acrescentada
a tais condies. Lembre-se de que ter a mesma condio como inva-
riante, precondio e ps-condio constitui uma superespecificao
do problema, a qual aceita apenas quando se quer enfatizar aspectos
especficos do problema.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #183
i i
Exemplo 6.3.7
Consideremos o problema do Exemplo 6.3.6 sobre fatorial com a assero
de que a varivel sobre o valor resultado no assume valores negativos no
decorrer da execuo do programa. Para o valor de entrada n e o valor de
sada fat, a especificao do problema pode ser definida por:
Especificao:
Pre:n > 0 fat > 0
Pos:fat = n! fat > 0
Note que a propriedade fat > 0 redundante na ps-condio, mas foi
mantida aqui apenas para deixar explcito o invariante sugerido anterior-
mente.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #184
i i
Exemplo 6.3.8
Consideremos novamente o problema do Exemplo 6.3.4 sobre fatorial.
Programas iterativos que resolvem o problema do clculo de fatorial usam
a prpria varivel de entrada, n, para esse clculo. Dessa forma, o valor da
varivel n destrudo ao longo do clculo no programa. Para designarmos
que o valor da varivel fat contm o clculo do fatorial do valor de entrada,
criamos a varivel de especificao n0 :
Especificao:
Pre:n > 0 n0 = n
Pos:fat = n0 !
Dessa forma, independentemente do valor final de n, se preservado ou
destrudo, a ps-condio denota explicitamente a noo da especificao de
fatorial sobre o valor inicial.
Na maioria das linguagens formais (Seo 6.5) que lidam com especifi-
caes baseadas nos estados inicial e final, existem notaes explcitas sobre
cada um deles. Aqui, especificamos as propriedades sobre programas porque
temos como objetivo a verificao dessas propriedades sobre os progra-
mas. Por essa razo, usamos variveis que fazem parte dos prprios pro-
gramas, como veremos no Captulo 7, nas especificaes e, por isso, a neces-
sidade da criao das variveis de especificao. No caso do exemplo anterior,
precisaramos provar que a propriedade fat = n! satisfeita ao trmino do
programa. Contudo, o valor da varivel usado para a prova ser aquele ao
trmino do programa, mesmo que tenha sido modificado.
Portanto, apesar de a ps-condio no Exemplo 6.3.5 estar correta sob
o ponto de vista de especificao, pode ser problemtica na verificao do
programa por conta do uso concomitante das variveis nos programas e nas
especificaes.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #185
i i
6.4 Exemplo
Descrevemos aqui o problema apresentado inicialmente, com a sua respectiva
especificao.
Exemplo 6.4.1
Voltando ao nosso problema inicial sobre a loja que quer ordenar seus
clientes pelo valor de compra (Exemplo 6.1.1), vamos agora especific-lo
formalmente.
Consideramos dois vetores: C para clientes e V para os valores de com-
pra dos clientes. Para cada cliente Ci temos o valor correspondente da
compra Vi maior ou igual a zero. Alm disso, cada cliente aparece apenas
uma vez na lista.
Especificao:
Pre:i, j.(i 6= j Ci 6= Cj ) Vi > 0 C0i = Ci V 0i = Vi
Pos:i, j(i < j Vi > Vj ) (Ci = C0j Vi = V 0j )
Na precondio, temos a restrio sobre o domnio de entrada para que
os clientes sejam distintos e cada valor de compra seja no-negativo. Como
cada Vi est relacionado ao Ci correspondente, e tal correspondncia deve
permanecer nos vetores resultado, criamos as variveis de especificao V 0
e C0 para que tal relao possa ser denotada na ps-condio. Assim, na
ps-condio, temos que o vetor de valores V deve estar ordenado e que a
relao entre os valores e os clientes preservada como nos valores de entrada
(usando as variveis de especificao Ci = C0j Vi = V 0j ).
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #186
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #187
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #188
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #189
i i
7 Verificao de Programas
7.1 Introduo
comum encontrarmos erros quando testamos programas. Em geral, desco-
brimos os erros e rearrumamos os programas, de forma a reparar
tais erros. Em certas ocasies, conseguimos reparar tais erros sem que novos
erros sejam introduzidos. Mas, infelizmente, reparar um erro aqui gera um
outro erro l, e assim temos de fazer reparos sucessivos nos programas at
que eles possam ser executados para uma malha de testes sem produzir
resultados errados. Ser que um programa executado para aquela malha de
testes no produzir resultados errneos para outros dados? Na realidade,
os testes s garantem que o programa produzir dados corretos para o
conjunto de dados que foi testado, mas tal garantia no extrapolada para
outros testes. No so poucos os sistemas que, depois de tempos de uso,
descobrimos que produzem resultados absurdos ou mesmo param mediante
um dado diferente. Alguns programas esto aparentemente corretos, mas
no funcionam adequadamente para dados especficos. O mais grave que
alguns erros de programas, no entanto, nem so percebidos ao longo de seu
funcionamento porque no foram submetidos a dados que os revelassem.
Exemplo 7.1.1
Faa um programa que, dadas duas seqncias de nmeros inteiros em or-
dem crescente, produz uma terceira seqncia em ordem crescente contendo
todos os elementos das duas primeiras seqncias.
Uma das solues para esse problema o entrelaamento das duas seqn-
cias respeitando a ordem:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #190
i i
Programa:
void merge1(int V1[], int V2[], int V3[], int tam1, int tam2)
{int pos1, pos2, pos3;
pos1 = pos2 = pos3 = 0;
while (tam1 + tam2 > 0)
{if (V1[pos1] > V2[pos2])
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;}
else
{V3[pos3] = V1[pos1];
pos1 = pos1 + 1;
tam1 = tam1 - 1;}
pos3++;
}
}
Anlise:
De uma anlise descuidada desse programa podemos supor que ele fun-
ciona corretamente para o problema proposto. Contudo, fcil notar que,
se uma das seqncias dadas for vazia, faremos uma comparao indevida:
if (V1[pos1] > V2[pos2]). Estaramos comparando um valor com um
outro valor indefinido. Tal situao ocorre quando uma das seqncias
vazia ou ainda quando todos os elementos de uma das seqncias so
menores que o da outra etc.
Exemplo 7.1.2
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #191
i i
Programa:
void merge2(int V1[], int V2[], int V3[], int tam1, int tam2)
{int pos1, pos2, pos3;
pos1 = pos2 = pos3 = 0;
while (tam1 > 0 && tam2 > 0)
{if (V1[pos1] > V2[pos2])
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;}
else
{V3[pos3] = V1[pos1];
pos1 = pos1 + 1;
tam1 = tam1 - 1;}
pos3++;
}
}
Anlise:
Agora s faremos a comparao do comando if-else se tivermos, de fato,
elementos nas duas seqncias. Mas, nesse caso, paramos de produzir a nova
seqncia quando j usamos todos os elementos de uma das seqncias origi-
nais; os elementos restantes da outra seqncia no apareceriam na seqncia
produzida. Assim, tentando corrigir um erro do programa, acabamos de
introduzir outro.
Exemplo 7.1.3
Dado o erro detectado, vamos corrigir o problema:
Programa:
void merge2(int V1[], int V2[], int V3[], int tam1, int tam2)
{int pos1, pos2, pos3;
pos1 = pos2 = pos3 = 0;
while (tam1 > 0 && tam2 > 0)
{if (V1[pos1] > V2[pos2])
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;}
else
{V3[pos3] = V1[pos1];
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #192
i i
pos1 = pos1 + 1;
tam1 = tam1 - 1;}
pos3++;
}
/* preenche com vetor V1 */
while (tam1 > 0)
{V3[pos3] = V1[pos1];
pos1 = pos1 + 1;
tam1 = tam1 - 1;
pos3++;
}
/* preenche com vetor V2 */
while (tam2 > 0)
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;
pos3++;
}
}
Aqui, corrigimos os pequenos erros do programa original.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #193
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #194
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #195
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #196
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #197
i i
E ::= n | x | (E) | (E + E) | (E E) | (E E)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #198
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #199
i i
Exemplo 7.2.1
No comando de atribuio x := E, por exemplo, temos a avaliao da
expresso E no estado atual
< E, > m
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #200
i i
Vale salientar que, para que obtenhamos tal efeito do comando de atribui-
o, precisamos ter definido tambm a semntica das expresses aritmticas
(como avaliar E no estado ?). Da mesma forma, as expresses lgicas e todos
os outros comandos tambm devem ter suas semnticas definidas.
Exemplo 7.2.2
Para exemplificar o uso da semntica do comando de atribuio definido no
Exemplo 7.2.1, considere o programa:
a := 5 ;
O programa tem uma varivel, que no possui valor associado inicial-
mente. O estado inicial do programa , portanto, denotado pelo estado
= {(a, ?)}
< 5, > 5
temos que
< a := 5, > [5/a]
< 5, > 5
< a := 5, > [5/a]
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #201
i i
hi Prog hi (7.1)
A assero 7.1 chamada de tripla de Hoare por ter sido proposta por
Hoare com o objetivo de provar a correo de programas. Na prtica, quere-
mos um sistema (clculo) de provas para provar a validade da assero 7.1:
` hi Prog hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #202
i i
` dProgc `
hi Prog hi
satisfeita sob correo parcial se, para todos os estados que satis-
fazem , o estado resultante da execuo do programa Prog satisfaz
a ps-condio , se Prog termina. Nesse caso, `par a relao de
satisfazibilidade para a correo parcial:
`par hi Prog hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #203
i i
hi Prog hi
satisfeita sob correo total se, para todos os estados que satisfazem
, o estado resultante da execuo do programa Prog satisfaz a ps-
condio e Prog termina. Nesse caso, `tot a relao de satisfazibili-
dade para a correo total:
`tot hi Prog hi
Exemplo 7.3.1
Suponha um programa Fat que calcula o fatorial de um nmero inteiro n:
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Considere a especificao do problema do clculo de fatorial (j apresen-
tada nos Exemplos 6.3.4 e 6.3.5).
Especificao:
Pre:n > 0
Pos:fat = n!
Reescrevendo o problema usando as triplas de Hoare, temos:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #204
i i
Para provar a correo parcial (`par ), dado que o programa Fat termina,
precisamos verificar se a varivel fat contm o resultado da funo fatorial
para o dado n, quando n um nmero natural. Para esse programa, fcil
averiguar que, para nmeros naturais, o programa calcular o fatorial de n
como requisitado.
Para provar a correo total (`tot ), precisamos verificar que a varivel fat
contm o resultado da funo fatorial para o dado n, quando n um nmero
natural, e que o programa Fat termina. A argumentao sobre o resultado
produzido pelo programa a mesma que a anterior. Contudo, para a correo
total, precisamos ainda provar que o programa termina: como a condio de
parada do comando de repetio depende da varivel i que incrementada
de 0 at n, e n um nmero positivo, podemos argumentar que o programa
ter um nmero finito de passos de execuo (termina). Por isso, o pro-
grama Fat satisfaz a especificao dada.
Exemplo 7.3.2
Consideremos novamente o programa Fat para calcular o fatorial de um
nmero inteiro n:
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Com a descrio informal desse problema, se o especificador no tiver co-
nhecimento do domnio da funo fatorial, pode produzir uma especificao
que no restringe o domnio de dados de entrada do programa:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #205
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #206
i i
hi C1 hi hi C2 hi
Composio
hi C1; C2 hi
Atribuio
h[E/x]i x := E hi
h Bi C1 hi h Bi C2 hi
IfElse
hi if B {C1} else {C2} hi
h Bi C hi
WhileParcial
hi while B {C} h Bi
` 0 hi C hi ` 0
Implicao
h0i {C} h0i
hi C1; C2 hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #207
i i
h Bi C1 hi
e
h Bi C2 hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #208
i i
Uma das idias centrais dessa regra ter uma propriedade () preser-
vada ao longo das iteraes do comando de repetio, a qual chamamos
de invariante do comando de repetio. No comando, temos a condi-
o B que depende de algumas variveis e uma seqncia de comandos
({C}) a serem executados quando a condio verdadeira. As variveis
relacionadas condio B so, em geral, modificadas ao longo da
execuo do comando C mas o invariante deve ser satisfeito. Assim,
no interessa quantas vezes temos as iteraes no dado comando de
repetio, o invariante deve ser satisfeito antes e depois de o comando
C ser executado ( assumido que o comando C termina)
h Bi C hi ,
h Bi .
O que distingue quando mais uma iterao deve ser realizada, ou no,
a condio B.
` 0
e
` 0
hi C hi
Essa regra faz a conexo entre as provas que podemos ter na lgica
de predicados, usada na especificao dos problemas, com a lgica de
programas aqui apresentada. Isso nos permite considerar as provas
na lgica de predicados como parte das provas de programas. Essa
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #209
i i
satisfaz a especificao
Pre:
Pos:
`par hi P hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #210
i i
O que corresponde a:
`par hi C0 h1 i
`par h1 i C1 h2 i
..
.
`par hn i Cn hi
Qual regra deve ser aplicada para provar cada comando detectada pela
prpria sintaxe do comando; se uma Atribuio, um IfElse etc. Mas, aqui,
foram introduzidas asseres intermedirias entre os comandos: como en-
contrar tais asseres quando temos apenas a especificao das pr () e
ps-condies () do problema?
Em princpio, queremos provar que o programa produz um resultado
que satisfaz a ps-condio se tivermos como premissa sobre o estado
inicial do programa. Com esse objetivo, podemos, por exemplo, argumentar
a aplicao da regra Atribuio:
Atribuio
h[E/x]i x = E hi
Exemplo 7.4.1
Suponha que queiramos provar:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #211
i i
true (5 > 0)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #212
i i
Atribuio
Exemplo 7.4.2
Programa:
suc := x + 1
Verificao:
Note que, no passo 1, aplicamos a regra Atribuio e assim geramos uma nova
assero, em que suc substituda por x + 1. Assim, a assero x + 1 = x + 1
gerada a partir da ps-condio suc = x + 1 e a aplicao da regra Atribuio.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #213
i i
Composio
Da mesma forma que no comando de atribuio, a regra sobre composio
tambm pode ser aplicada diretamente quando o comando sintaticamente
reconhecido. importante salientar que, se temos a pr e a ps-condio
para o programa e iniciamos a prova pela ps-condio, podemos descobrir
a assero necessria antes do ltimo comando, e assim sucessivamente
at chegarmos ao topo do programa no qual encontramos a precondio.
Essa regra da composio permite que as provas sejam realizadas de forma
composicional, na qual provamos apenas um comando por vez.
Exemplo 7.4.3
Seja SucPred um programa que deve calcular o sucessor e o predecessor de
um nmero no domnio dos inteiros. A especificao do problema dada
por:
Especificao:
Pre:true
Pos:pred = x 1 suc = x + 1
Programa:
suc := x + 1;
pred := x - 1;
Verificao:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #214
i i
IfElse
h Bi C1 hi h Bi C2 hi
IfElse
hi if B {C1} else {C2} hi
h Bi C1 hi h Bi C2 hi
B 1 B 2
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #215
i i
hi
if(B)
{C1}
else
{C2}
hi
hi
if(B)
{C1
hi }
else
{C2
hi }
hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #216
i i
Nesse ltimo passo, devemos provar a nova assero, tendo como premissa
a precondio , concluindo assim a prova de todo o comando. A seguir,
ilustramos a aplicao da regra com um programa simples.
Exemplo 7.4.4
Programa:
a := x + 1;
if (a < 0)
{num := 0;}
else
{num := a;}
Verificao:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #217
i i
WhileParcial
Todas as regras mostradas anteriormente so aplicadas diretamente aos pro-
gramas sem que seja necessria a criao de novos elementos. Elas podem ser,
portanto, aplicadas automaticamente. Para a aplicao da regra WhileParcial, no
entanto, temos um novo elemento introduzido, o invariante.
Nos programas, queremos provar:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #218
i i
1. `
2. ` ( B)
porque
hi hi while B {C} h Bi hi
( B) 0
1. ` ( B)
2. ` ( B) 0
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #219
i i
Exemplo 7.4.5
Consideremos novamente o programa para calcular o fatorial com a sua
respectiva especificao (j apresentado no Exemplo 7.3.1).
Especificao:
Pre:n > 0
Pos:fat = n!
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Para encontrar o invariante para o comando while, devemos considerar
um exemplo de computao do comando, para dados reais, e ento comparar
a relao entre as variveis. Podemos ter, por exemplo, n = 4:
iterao i fat i 6= n
0 0 1 true
1 1 1 true
2 2 2 true
3 3 6 true
4 4 24 false
mantida tanto antes (iterao 0) quanto aps cada iterao. Essa assero ,
portanto, uma candidata a invariante do comando. Resta-nos provar que
, de fato, um invariante:
1. ` ( B)
2. ` ( B) 0
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #220
i i
fat = i!
B i = n
B i 6= n
0 fat (i + 1) = (i + 1)!
fat = n!
ento,
hi
while(B)
{C}
hi
hi
while (B)
{C}
B
hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #221
i i
hi
while (B)
{C
hi }
B
hi
hi
while (B)
{ h0i
C
hi}
B
hi
( B) 0
hi
while (B)
( B) 0
{h0i
C
hi}
B
hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #222
i i
hi
hi
while (B)
( B) 0
{h0i
C
hi}
B
hi
Exemplo 7.4.6
Consideremos novamente o programa do Exemplo 7.4.5:
Especificao:
Pre:n > 0
Pos:fat = n!
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Verificao:
`par hn > 0i Fat hfat = n!i
Invariante : fat = i!
` ( B) : (fat = i! (i 6= n)) fat = n!
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #223
i i
Note que, nesse ltimo exemplo, assim como em todos os outros an-
teriores, todas as provas relativas lgica de predicados foram omitidas.
A rigor, para que provemos os programas, precisamos de um sistema de
provas para a lgica de predicados, assim como para os nmeros inteiros, e
tais provas deveriam ser mostradas aqui. Como queremos priorizar os passos
de prova para os programas j que as provas para a lgica de predicados
foram vistas na Parte II, optamos por no introduzir, aqui, essas provas (o
leitor pode recorrer aos sistemas de provas da Parte II do livro). Da mesma
forma, apelamos para o conhecimento intuitivo do leitor em relao aos
nmeros inteiros para no introduzir mais a teoria e sistemas de provas
para nmeros inteiros. Isso sobrecarregaria a leitura do livro, e a teoria de
nmeros inteiros, ou quaisquer outros tipos aqui utilizados, est fora do
escopo deste livro.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #224
i i
par hi P hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #225
i i
Exerccios
7.1 Verificar a correo parcial para cada uma das triplas a seguir (pode ser
verdadeira ou falsa), usando apenas a regra Atribuio:
1. htruei x := 5 htruei
2. htruei x := 10 hx = 10i
3. hx = 20i x := 5 hx > 20i
4. hx = 20i x := 5 hfalsei
5. hfalsei x := 5 hx > 20i
6. htruei x := 5 hfalsei
7.2 Verificar a correo parcial para cada uma das triplas a seguir usando
as regras Atribuio e Composio:
1. hx > 0i y := x + 5 hy > 5i
2. htruei y := x; y := 2 x + y hy = 3 xi
3. hz > 1i x := 1; y := z; y := y x hz > yi
4. hx = x0 y = y0 i z := x; x := y; y := z hx = y0 y = x0 i
Programa:
if (x>y)
{z:= x;}
else
{z:= y;}
Mostrar:
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #226
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #227
i i
n > 0 (1 = 0!)
porque
true (1 = 0!)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #228
i i
hi C1 hi hi C2 hi
Composio
hi C1; C2 hi
Atribuio
h[E/x]i x := E hi
h Bi C1 hi h Bi C2 hi
IfElse
hi ifB {C1} else {C2} hi
h B 0 6 E = E0 i C h 0 6 E 6 E0 i
WhileTotal
h 0 6 Ei while B {C} h Bi
` 0 hi C hi ` 0
Implicao
h0i {C} h0i
h B 0 6 E = E0 i C h 0 6 E 6 E0 i
WhileTotal
h 0 6 Ei while B {C} h Bi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #229
i i
` B
hi
while (B)
{C}
B
hi
hi
while (B)
{C
h 0 6 E 6 E0 i }
B
hi
hi
while (B)
{ h0 0 6 E0 6 E0 i
C
h 0 6 E 6 E0 i}
B
hi
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #230
i i
( B 0 6 E = E0 ) (0 0 6 E0 6 E0 )
hi
while (B)
( B 0 6 E = E0 ) (0 0 6 E0 6 E0 )
{h0 0 6 E0 6 E0 i
C
h 0 6 E 6 E0 i}
B
hi
hi
h 0 6 Ei
while (B)
( B 0 6 E = E0 ) (0 0 6 E0 6 E0 )
{h0 0 6 E0 6 E0 i
C
h 0 6 E 6 E0 i}
B
hi
Exemplo 7.5.1
Consideremos novamente o programa do Exemplo 7.4.5:
Especificao:
Pre:n > 0
Pos:fat = n!
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #231
i i
Verificao:
`tot hn > 0i Fat hfat = n!i
Invariante : fat = i!
Variante E: ni
n > 0 (1 = 0! 0 6 n)
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #232
i i
tot hi P hi
`tot hi P hi tot hi P hi
tot hi P hi `tot hi P hi
Exerccios
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #233
i i
Programa:
fat := 1;
while (n != 0)
{fat := fat * n ;
n := n - 1;
}
Mostrar:
1. `tot hn > 0i P hfat = n!i
2. `tot hn = n0 n > 0i P hfat = n0 !i
fib0 = 0,
fib1 = 1,
fibn = fibn1 + fibn2 , n > 2
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #234
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #235
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #236
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #237
i i
Concluso
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #238
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #239
i i
Referncias Bibliogrficas
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #240
i i
EVEN, S.; ITAI, A.; SHAMIR, A. On the complexity of timetable and multi-
commodity flow problems. SIAM Journal of Computing, n.5, v.4, p. 691-703,
1976.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #241
i i
GENT, Ian; WALSH, Toby. The SAT phase transition. In: COHN, A. G. (ed.)
Proceedings of ECAI-94. Chichester: John Wiley & Sons, p. 105-109, 1994.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #242
i i
MACHALE, Desmond. George Boole His life and work. Dublin: Boole Press,
1985.
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #243
i i
i i
i i
i i
Lgica para Computao PROVA 4 4/7/2006 #244
i i
STERLING, Leon; SHAPIRO, Ehud. The art of Prolog. 2. ed. Cambridge: MIT
Press, 1994.
STILLWELL, John. Emil Post and his anticipation of Goedel and Turing.
Mathematics Magazine, n. 77, v.1, p. 3-14, 2004.
i i
i i
Corra da Silva
^
^
Outras Obras
Flvio Soares Corra da Silva professor do
Departamento de Cincia da Computao da
LGICA PARA
Algoritmos e Lgica de Programao
USP campus Butant. graduado (1984) e
mestre (1989) em Engenharia pela USP, doutor
COMPUTAO Marco Antonio Furlan de Souza, Marcelo Marques
Gomes, Marcio Vieira Soares e Ricardo Concilio
|
(1992) em Inteligncia Artificial pela Univer-
sidade de Edinburgh (Esccia) e livre-docente
Finger
Compiladores: Princpios e Prticas
(1999) tambm pela USP. Kenneth C. Louden
|
Cincia da Computao da USP campus Butan- O livro apresenta um texto original em portugus que, sem Tecnologias de Rede
^
LGICA PARA
Melo
t. graduado (1988) em Engenharia pela Esco- perder a abordagem introdutria, expe rigor matemtico e profun- Michael A. Gallo e William M. Hancock
la Politcnica da USP, mestre (1990) e doutor didade adequados para o pblico-alvo. A obra apresenta os funda-
(1994) em Cincia da Computao pela Univer- mentos e mtodos da lgica matemtica para estudantes de Cincia Introduo aos Sistemas Operacionais
sidade de Londres (Inglaterra) e livre-docente da Computao, permitindo-lhes apreciar os benefcios e as dificul- Ida M. Flynn e Ann McIver McHoes
(2001) em Cincia da Computao pela USP. Tra-
balha h 16 anos na rea de Lgica Computacio-
dades advindos da aplicao de mtodos matemticos rigorosos para
a resoluo de problemas e, acima de tudo, a enorme importncia COMPUTAO Lgica de Programao
^ ISBN 13 978-85-221-0851-0
ISBN 10 85-221-0851-X
Marcelo Finger
Ana Cristina Vieira de Melo