You are on page 1of 97

C alculo de Programas

Javier Blanco

Silvina Smith

Dami an Barsotti

Facultad de Matem atica, Astronom a y F sica Universidad Nacional de C ordoba

e-mail: {blanco|smith}@mate.uncor.edu damian@famaf.unc.edu.ar

20 de marzo de 2006

Indice general
1. Introducci on 1.1. Qu e se puede aprender de una torta? . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Breve descripci on de lo que sigue . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Preliminares 2.1. Expresiones aritm eticas . . 2.2. Sustituci on . . . . . . . . . 2.3. Igualdad y regla de Leibniz 2.4. Funciones . . . . . . . . . . 2.5. Ejercicios . . . . . . . . . . 1 2 5 6 7 7 8 9 12 13 15 16 18 20 20 21 22 25 26 27 28 31 31 34 35 37 37 39 40 42

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

3. C alculo Proposicional 3.1. Sistemas formales . . . . . . . 3.2. La equivalencia . . . . . . . . 3.3. La negaci on . . . . . . . . . . 3.4. La discrepancia . . . . . . . . 3.5. La disyunci on . . . . . . . . . 3.6. La conjunci on . . . . . . . . . 3.7. La implicaci on . . . . . . . . 3.8. La consecuencia . . . . . . . . 3.9. Generalizaci on del formato de 3.10. Ejercicios . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . demostraci on . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

4. Aplicaciones del c alculo proposicional 4.1. An alisis de argumentaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Resoluci on de acertijos l ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Aplicaciones del c alculo proposicional 2: 5.1. La funci on piso . . . . . . . . . . . . . . 5.2. Igualdad indirecta . . . . . . . . . . . . 5.3. La funci on techo . . . . . . . . . . . . . 5.4. Ejercicios . . . . . . . . . . . . . . . . . i Piso y Techo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

ii 6. Expresiones cuanticadas 6.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . 6.2. Revisi on de la sustituci on y la regla de Leibniz . . 6.3. Reglas generales para las expresiones cuanticadas 6.4. Cuanticadores aritm eticos . . . . . . . . . . . . . 6.5. Expresiones cuanticadas para conjuntos . . . . . . 6.6. El cuanticador universal . . . . . . . . . . . . . . 6.7. El cuanticador existencial . . . . . . . . . . . . . 6.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . .

INDICE GENERAL 45 46 48 49 52 53 54 55 56 59 59 60 62 62 63 65 67 67 69 70 71 71 73 74 74 75 76 76 77 78 79 81 81 82 83 85 88 90 90 91

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7. C alculo de predicados 7.1. Predicados . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2. Propiedades de las cuanticaciones universal y existencial 7.3. Aplicaciones del c alculo de predicados . . . . . . . . . . . 7.4. Algunas conclusiones . . . . . . . . . . . . . . . . . . . . . 7.5. Dios y la l ogica* . . . . . . . . . . . . . . . . . . . . . . . 7.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. El formalismo b asico 8.1. Funciones . . . . . . . . . . . . . . . . 8.2. Deniciones y expresiones . . . . . . . 8.3. Reglas para el c alculo con deniciones 8.4. Deniciones locales . . . . . . . . . . . 8.5. An alisis por casos . . . . . . . . . . . . 8.6. Pattern Matching . . . . . . . . . . . . 8.7. Tipos . . . . . . . . . . . . . . . . . . 8.8. Tipos b asicos . . . . . . . . . . . . . . 8.9. Tuplas . . . . . . . . . . . . . . . . . . 8.10. Listas . . . . . . . . . . . . . . . . . . 8.10.1. Constructores de listas . . . . . 8.10.2. Operaciones sobre listas . . . . 8.10.3. Propiedades de las operaciones 8.11. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9. Modelo Computacional 9.1. Introducci on . . . . . . . . . . . . . . . . . . . . 9.2. Valores . . . . . . . . . . . . . . . . . . . . . . . 9.3. Forma Can onica . . . . . . . . . . . . . . . . . 9.4. Evaluaci on . . . . . . . . . . . . . . . . . . . . 9.5. Un modelos computacional m as eciente . . . . 9.6. Nociones de eciencia de programas funcionales 9.7. Problema de la forma normal . . . . . . . . . . 9.8. Ejercicios . . . . . . . . . . . . . . . . . . . . .

Cap tulo 1

Introducci on
History, Stephen said, is a nightmare from which I am trying to awake. James Joyce:Ulysses

La programaci on es una actividad que ofrece desaf os intelectuales interesantes, en la cual se combinan arm onicamente la creatividad y el razonamiento riguroso. Lamentablemente no siempre es ense nada de esta manera. Muchos cursos de introducci on a la programaci on se basan en el m etodo de ensayo y error. Las construcciones de los lenguajes de programaci on son presentadas s olo operacionalmente, se estudia un conjunto de ejemplos y se espera resolver problemas nuevos por analog a, a un cuando estos problemas sean radicalmente diferentes de los presentados. Se asume a priori que los programas desarrollados con este m etodo tendr an errores y se dedica una buena parte del tiempo de programaci on a encontrarlos y corregirlos. Es as que esta ingrata tarea se denomina eufem sticamente debugging, es decir eliminaci on de los bichos del progama, como si estos bichos hubieran entrado al programa involuntariamente infectando al programa sano. En este libro hablaremos simplemente de errores introducidos en el proceso de programaci on. En los libros de ingenier a del software se suele dedicar un considerable tiempo a explicar la actividad de correcci on de errores, y se le asigna un peso muy relevante en el proceso de desarrollo de programas. Sin embargo, pese a todos los esfuerzos que se hagan, nunca se puede tener una razonable seguridad de que todos los errores hayan sido encontrados o de que alguna de las reparaciones de errores viejos no haya introducido otros nuevos (el llamado efecto Hydra en [BEKV94]). Este estado de cosas puede entenderse si se analiza la historia de la disciplina. En el inicio de la computaci on, la funci on de un programa era dar las instrucciones para que una m aquina ejecutara una cierta tarea. Hoy resulta m as provechoso pensar, inversamente, que es la funci on de las m aquinas ejecutar nuestros programas, poniendo el enfasis en los programas como construcciones fundamentales. De la misma manera, los lenguajes de programaci on fueron cambiando su formulaci on y forma de dise no. Inicialmente, el dise no de los lenguajes de programaci on y de su sem antica era una tarea esencialmente descriptiva, la cual intentaba modelar las operaciones que ocurr an en una m aquina durante la ejecuci on de un programa. Esto es lo que daba lugar a deniciones operacionales de los lenguajes y a la imposibilidad de razonar con ellos, excepto a trav es de la ejecuci on a mano de los programas, lo cual es una herramienta de probada ineciencia. 1

CAP ITULO 1. INTRODUCCION

Existe, afortunadamente, otra forma de aproximarse a la programaci on. Los programas pueden ser desarrollados de manera met odica a partir de especicaciones, de tal manera que la correcci on del programa obtenido respecto de la especicaci on original pueda asegurarse por la forma en que el programa fue construido. Adem as de la utilidad pr actica de dicha forma de programar, el ejercicio intelectual que esta presenta es altamente instructivo acerca de las sutilezas de la resoluci on de problemas mediante algoritmos. Por u ltimo, vista de esta forma, la programaci on es una tarea divertida. No estamos armando que el proceso de debugging pueda evitarse completamente, pero si se dispone de una notaci on adecuada para expresar los problemas a resolver y de herramientas simples y poderosas para asegurar la adecuaci on de un programa a su especicaci on, los errores ser an en general m as f aciles de corregir, dado que es mucho menos probable que dichos errores provengan de una mala comprensi on del problema a resolver. En este punto la l ogica matem atica es una herramienta indispensable como ayuda para la especicaci on y desarrollo de programas. La idea subyacente es deducir los programas a partir de una especicaci on formal del problema, entendi endose esto como un predicado sobre alg un universo de valores. De esta manera, al terminar de escribir el programa, no se tendr a solamente un programa, sino tambi en la demostraci on de que el mismo es correcto respecto de la especicaci on dada, es decir, resuelve el problema planteado. Veamos un ejemplo para aclarar estos conceptos. El mismo est a tomado E.W.Dijkstra [Dij89] donde la soluci on se atribuye a A.Blokhuis. La idea de presentar los inconvenientes del razonamiento por ensayo y error usando este ejemplo est a tomada de [Coh90].

1.1.

Qu e se puede aprender de una torta?

Problema: En una torta circular se marcan N puntos sobre el contorno y luego se trazan todas las cuerdas posibles entre ellos. Se supone que nunca se cortan m as de dos cuerdas en un mismo punto interno. Cu antas porciones de torta se obtienen? Antes de seguir leyendo, resuelva el problema de la torta.

Analizaremos los casos N=1, N=2, N=3, etc., tratando de inferir una formulaci on v alida para N arbitrario: Si N=1, obtenemos 1 pedazo. Si N=2, obtenemos 2 pedazos. N umero de puntos 1 2 N umero de porciones 1 2 Avancemos un poco m as. Si N=3, obtenemos 4 pedazos. Para tratar de tener m as informaci on tomamos N=4 y obtenemos 8 pedazos. N umero de puntos 1 2 3 4 N umero de porciones 1 2 4 8

SE PUEDE APRENDER DE UNA TORTA? 1.1. QUE

Parecer a que est a apareciendo un patr on, dado que las cantidades de porciones son las sucesivas potencias de 2. Proponemos entonces como posible soluci on que la cantidad de pedazos es 2N 1 . Probemos con N=5. Efectivamente, se obtienen 16 pedazos (parece que 2N 1 es correcto!). N umero de puntos 1 2 3 4 5 N umero de porciones 1 2 4 8 16 Para estar m as seguros probemos con el caso N=6, para el cual deber amos hallar N=32. N umero de puntos 1 2 3 4 5 6 N umero de porciones 1 2 4 8 16 31 Si N=6, obtenemos 31 pedazos (2N 1 no sirve!). Podemos probar con N = 7, a ver si reaparece alg un patr on u til. N umero de puntos 1 2 3 4 5 6 7 N umero de porciones 1 2 4 8 16 31 57 Probablemente ya estamos bastante cansados de contar. Claramente, el procedimiento seguido no es el m as indicado, pues no conduce a la soluci on del problema. Peor a un, puede conducir a un resultado err oneo (por ejemplo, si hubi esemos analizado s olo hasta N=5). Podr a resumirse el m etodo usado como: adivine y asuma que adivin o bien hasta que se demuestre lo contrario. Lamentablemente el m etodo de ensayo y error, el cual fracas o para este ejemplo, es usado frecuentemente en programaci on. El problema principal de este m etodo es que a trav es de adivinaciones err oneas se aprende muy poco acerca de la naturaleza del problema. En nuestro ejemplo, lo u nico que aprendimos es que el problema es m as dif cil de lo que podr a esperarse, pero no descubrimos ninguna propiedad interesante que nos indique alg un camino para encontrar una soluci on. Por otro lado, en general no es simple saber si se ha adivinado correctamente. En nuestro caso, la soluci on fall o para N = 6, pero podr a haber fallado para N = 30. Otro problema metodol ogico es la tendencia, demasiado frecuente en programaci on, a corregir adivinaciones err oneas a trav es de adaptaciones superciales que hagan que la soluci on (el programa) funcione, ensayando algunos casos para comprobarlo. Este m etodo de ensayo y error no es adecuado para la construcci on de programas correctos, adem as, como ya lo enunciara Dijkstra en [Dij76] convirti endose luego en un slogan: Los ensayos (tests) pueden revelar la presencia de errores, pero nunca demostrar su ausencia. Pensemos en una soluci on adecuada para el problema anterior. En cu anto se incrementa la cantidad de porciones al agregar una cuerda? Como cada cuerda divide cada porci on que atraviesa en dos partes, una cuerda agrega una porci on por cada porci on que atraviesa. A este razonamiento lo escribiremos de la siguiente manera:

4 n umero de porciones agregadas al agregar una cuerda = { cuerdas dividen porciones en dos } n umero de porciones cortadas por la cuerda

CAP ITULO 1. INTRODUCCION

Entre llaves se coloca la explicaci on del v nculo entre las dos armaciones (en este caso el v nculo es el signo =). Completemos el razonamiento: n umero de porciones agregadas al agregar una cuerda = { cuerdas dividen porciones en dos } n umero de porciones cortadas por la cuerda n umero de segmentos de la cuerda agregada

= { una porci on se divide por un segmento de cuerda } = { los segmentos est an determinados por puntos de intersecci on internos } 1 + n umero de puntos de intersecci on internos sobre la cuerda Una vez que tenemos este resultado podemos calcular en cu anto se incrementa el n umero de porciones si se agregan c cuerdas. n umero de porciones agregadas al agregar c cuerdas = { resultado anterior y el hecho que cada punto de intersecci on interno es compartido por exactamente dos cuerdas } c + total de puntos de intersecci on internos en las c cuerdas. Dado que si comenzamos con 0 puntos tenemos una porci on (toda la torta) y agregar c cuerdas nos incrementa el n umero en c + (total de puntos de intersecci on internos), si denimos f = n umero de porciones c = n umero de cuerdas p = n umero de puntos de intersecci on internos hemos deducido que f =1+c+p En este punto hemos podido expresar el problema original en t eminos de la cantidad de cuerdas y de puntos de intersecci on internos. Falta expresar ahora estas cantidades en t erminos de la cantidad de puntos sobre la circunferencia. Esto puede lograrse con relativa facilidad usando principios geom etricos y combinatorios elementales. Para terminar, entonces, tenemos que expresar f en t erminos de N. f = { f=n umero de porciones, c=n umero de cuerdas agregadas, p=n umero de puntos de intersecci on internos } 1+c+p = { una cuerda cada dos puntos } 1+ N 2 +p

DE LO QUE SIGUE 1.2. BREVE DESCRIPCION = { un punto de intersecci on interna cada 4 puntos en la circunferencia } 1+ = { N 2 + N 4

algebra }

1+

N 4 6N 3 + 23N 2 18N 24

Observemos que adem as de haber obtenido un resultado, tambi en tenemos una demostraci on de que el mismo es correcto. N otese que si alguien nos hubiera propuesto el resultado nal como soluci on al problema no habr amos estado del todo convencidos de que es el resultado correcto. La convicci on de la correcci on del resultado est a dada por el desarrollo que acompa na al mismo. Algo an alogo ocurre con los programas. Cu ales fueron las razones que hicieron al desarrollo convincente? Por un lado, los pasos del desarrollo fueron expl citos, no fue necesario descomponerlos en componentes m as elementales. Estos tuvieron adem as un tama no adecuado. Otro factor importante fue la precisi on; cada paso puede verse como una manipulaci on de f ormulas, en este caso aritm eticas.

1.2.

Breve descripci on de lo que sigue

El estilo de demostraci on presentado en la secci on precedente tiene la ventaja de ser bastante autocontenido y de ser expl cito cuando se usan resultados de otras areas (en este caso del an alisis combinatorio y la geometr a). Esto hace a las demostraciones muy f aciles de leer. Puede parecer exagerado poner tanto enfasis en cuestiones de estilo, pero dada la cantidad de manipulaciones formales que es necesario realizar cuando se programa, estas cuestiones pueden signicar el exito o no de un cierto m etodo de construcci on de programas. Las manipulaciones formales de s mbolos son inevitables en la programaci on, dado que un programa es un objeto formal construido usando reglas muy precisas. Cuando se usa el m etodo de ensayo y error no se evitan las manipulaciones formales, simplemente se realizan usando como u nica gu a cierta intuici on operacional. Esto no s olo vuelve m as dif cil la construcci on de dichos programas, sino que atenta contra la comprensi on y comunicaci on de los mismos, a un en el caso en que estos sean correctos. La misma noci on de correcci on es dif cil de expresar si no se tiene alguna manera formal de expresar las especicaciones. En lo que sigue del libro se presentar a un formalismo que permite escribir especicaciones y programas y demostrar que un programa es correcro respecto de una especicaci on dada. Este formalismo estar a basado en un estilo ecuacional de presentar la l ogica matem atica usual. Se dispondr a de un repertorio de reglas expl citas para manipular expresiones, las cuales pueden representar tanto especicaciones como programas. El hecho de limitarse a un conjunto predeterminado de reglas para razonar con los programas no ser a necesariamente una limitaci on para construirlos. Lo que se consigue con esto es acotar las opciones en las derivaciones, lo cual permite que sea la misma forma de las especicaciones la que nos gu e en la construcci on de los programas. Por otro lado, al explicitar el lenguaje que se usar a para construir y por lo tanto para expresar los programas y las demostraciones, se reduce el ancho de banda de la comunicaci on, haciendo que sea m as f acil comprender lo realizado por otro programador y convencerse de la correcci on de un programa dado.

6 Concluimos esta secci on con una cita pertinente.

CAP ITULO 1. INTRODUCCION

It is an error to believe that rigor in the proof is an enemy of simplicity. On the contrary, we nd conrmed in numerous examples that the rigorous method is at the same time the simpler and the more easily comprehended. The very eort of rigor forces us to discover simpler methods of proof. It also frequently leads the way to methods which are more capable of development than the old methods of less rigor. David Hilbert

1.3.

Ejercicios

Ejercicio 1.1 Resolver a trav es de un c alculo an alogo al usado para el problema de la torta el siguiente problema (mucho m as simple) extra do de [Coh90]. El objetivo del ejercicio es construir una demostraci on al estilo de la usada para la torta, con pasos cortos y justicados. Un tren que avanza a 70 Km/h se cruza con otro tren que avanza en sentido contrario a 50 Km/h. Un pasajero que viaja en el segundo tren ve pasar al primero durante un lapso de 6 segundos. Cu antos metros mide el primer tren?

Cap tulo 2

Preliminares
We must not, however, overlook the fact that human calculation is also an operation of nature, but just as trees do not represent or symbolize rocks our thoughts even if intended to do so do not necesarily represent trees and rocks (. . . ) Any correspondence between them is abstract. Alan Watts:Tao, the watercourse way

2.1.

Expresiones aritm eticas

A n de contar con las herramientas b asicas para poder manipular expresiones, introduciremos algunos conceptos b asicos, como los de estado, evaluaci on y sustituci on. Estos conceptos tienen sentido para diferentes conjuntos de expresiones, por ejemplo expresiones aritm eticas, booleanas, de conjuntos, etc. A modo de ejemplo consideremos las expresiones aritm eticas. Una sintaxis posible para estas puede ser la presentada en la siguiente denici on: Una constante es una expresi on aritm etica (e.g. 42) Una variable es una expresi on aritm etica (e.g. x) Si E es una expresi on aritm etica, entonces (E ) tambi en lo es. Si E es una expresi on aritm etica, entonces E tambi en lo es. Si E y F son expresiones aritm eticas, tambi en lo ser an (E + F ), (E F ), (E F ) y (E/F ). S olo son expresiones las construidas usando las reglas precedentes. La reglas enunciadas permiten la construcci on de expresiones aritm eticas. Por ejemplo la expresi on ((3 + x) 2) pudo haber sido construida usando la siguiente secuencia de pasos: se construyen las expresiones 3 por la primera regla y x por la segunda. Se aplica luego la regla del + para construir (3 + x). Por u ltimo se construye la expresi on 2 y se juntan ambas con la regla que permite introducir el operador de producto, obteniendo nalmente la expresi on ((3 + x) 2). 7

CAP ITULO 2. PRELIMINARES

Precedencia. Para abreviar las expresiones usando menos par entesis se suelen usar reglas de precedencia. Estas reglas establecen c omo leer una expresi on en los casos en los que pueda resultar ambigua. Por ejemplo, en la aritm etica se entiende que la expresi on 7 5 + 7 debe leerse como (7 5) + 7 y no como 7 (5 + 7). En este caso se dice que el operador tiene precedencia sobre el +, es decir que liga de manera m as fuerte las expresiones que une. La precedencia que asumiremos para los operadores aritm eticos es la usual. La expresi on construida anteriormente puede abreviarse como (3 + x) 2. Denici on 2.1 Una asignaci on de valores a las variables de una expresi on es una funci on del conjunto de variables en el conjunto de n umeros pertinente. Otra expresi on usada frecuentemente para este concepto es estado, sobre todo en inform atica. Denici on 2.2 Dada una asignaci on de valores a las variables de una expresi on, puede realizarse la evaluaci on de esta, es decir, calcular el valor asociado a dicha expresi on a trav es de la asignaci on de valores a las variables. Por ejemplo, la expresi on x 5 + y evaluada en el estado {(x, 8), (y, 2)} da como resultado el n umero 42, el cual se obtiene de multiplicar por cinco el valor de x y luego sumarle el valor de y .

2.2.

Sustituci on

Sean E y F dos expresiones y sea x una variable. Usaremos la notaci on E (x := F ) para denotar la expresi on que es igual a E donde todas las ocurrencias de x han sido reemplazadas por (F ). Cuando los par entesis agregados a F sean innecesarios nos tomaremos la libertad de borrarlos sin avisar. Por ejemplo, (x + y )(y := 2 z ) = (x + (2 z )) = x + 2 z

Es posible sustituir simult aneamente una lista de variables por una lista de expresiones de igual longitud. Esto no siempre es equivalente a realizar ambas sustituciones en secuencia. Por ejemplo: (x + z )(x, z := z + 1, 4) = z + 1 + 4 mientras que (x + z )(x := z + 1)(z := 4) = (z + 1 + z )(z := 4) = 4 + 1 + 4 Tomaremos como convenci on que la sustituci on tiene precedencia sobre cualquier otra operaci on, por ejemplo x + z (x, z := z + 1, 4) = x + (z (x, z := z + 1, 4)) = x + 4 N otese que sustituir una variable que no aparece en la expresi on es posible y no tiene ning un efecto. Cuando se den las reglas de inferencia, frecuentemente se usar a el s mbolo x para denotar una secuencia no vac a de variables distintas. Si entonces F denota una secuencia de expresiones de la misma longitud que x, la expresi on E (x := F ) denotar a la expresi on E donde se han sustituido simult aneamente las ocurrencias de cada elemento de x por su correpondiente expresi on en F .

2.3. IGUALDAD Y REGLA DE LEIBNIZ

Sustituci on y evaluaci on. Es importante no confundir una sustituci on, la cual consiste en el reemplazo de variables por expresiones (obteniendo as nuevas expresiones) con una evaluaci on, la cual consiste en dar un valor a una expresi on a partir de un estado dado (es decir, de asumir un valor dado para cada una de las variables de la expresi on).

2.3.

Igualdad y regla de Leibniz

Deniremos ahora el operador de igualdad, el cual nos permitir a construir expresiones booleanas a partir de dos expresiones de cualquier otro tipo. Las expresiones booleanas son aquellas cuya evaluaci on en un estado dado devolver a s olo los valores de verdad True (verdadero) o False (falso). La expresi on E = F evaluada en un estado ser a igual al valor True si la evaluaci on de ambas expresiones E y F en ese estado producen el mismo valor. La expresi on E = F se considerar a verdadera si su evaluaci on en cualquier estado posible produce el valor True . En caso contrario la expresi on ser a igual a False . Una forma alternativa de demostrar que dos expresiones son iguales sin tener que recurrir a su evaluaci on en cualquier estado posible es aplicar leyes conocidas para ese tipo de expresiones y las leyes de la igualdad. Esta manera es m as u til cuando se quiere razonar con expresiones. Si las leyes caracterizan la igualdad (es decir que dos expresiones son iguales si y s olo si pueden demostrarse iguales usando las leyes), puede pensarse a estas como la denici on de la igualdad. La igualdad es una relaci on de equivalencia, o sea que satisface las leyes de reexividad, simetr a y transitividad. La reexividad nos da un axioma del cual partir (o al cual llegar) en una demostraci on de igualdad, la simetr a permite razonar hacia adelante o hacia atr as indistintamente, mientras que la transitividad permite descomponer una demostraci on en una secuencia de igualdades m as simples. Otra propiedad caracter stica de la igualdad es la de reemplazo de iguales por iguales. Una posible formulaci on de dicha regla es la siguiente: Leibniz: X=Y E (x := X ) = E (x := Y )

En la siguiente tabla se resumen las leyes que satisface la igualdad. reexividad: simetr a: transitividad: Leibniz: X=X (X = Y ) = (Y = X )
X =Y,Y =Z X =Z X =Y E (x:=X )=E (x:=Y )

Fue Leibniz quien introdujo la propiedad de que es posible sustituir en una expresi on (l ogica en su denici on) elementos por otros que satisfacen el predicado de igualdad con ellos sin que esto altere el signicado de la expresi on. En realidad, Leibniz fue m as all a y asumi o tambi en la conversa, es decir que si dos elementos pueden sustituirse en cualquier expresi on sin cambiar

10

CAP ITULO 2. PRELIMINARES

el signicado, entonces estos elementos son iguales. Esta u ltima propiedad aparecer a recurrentemente en varios conceptos (por ejemplo en el de extensionalidad), pero no la asumiremos a priori. Ejemplo 2.1 (M aximo entre dos n umeros [Coh90]) Consideremos el operador binario max , el cual aplicado a dos n umeros devuelve el mayor. El operador max tendr a m as precedencia que el +, o sea que P + Q max R = P + (Q max R). Satisfar a adem as los siguientes axiomas: Axioma 2.1 (Conmutatividad) P max Q = Q max P Axioma 2.2 (Asociatividad) P max (Q max R) = (P max Q) max R Axioma 2.3 (Idempotencia) P max P = P Axioma 2.4 (Distributividad de + con respecto a max ) P + (Q max R) = (P + Q) max (P + R) Axioma 2.5 (Conexi on entre max y ) P max Q P La forma axiom atica de trabajar es asumir que los axiomas son ciertos y demostrar las propiedades requeridas a partir de ellos y de las reglas de inferencia, las cuales nos permiten inferir proposiciones v alidas a partir de otras. Para el caso del m aximo, asumiremos las reglas de inferencia de la igualdad, las de orden del , y la siguiente regla de sustituci on, la cual dice que si tenemos una proposici on que sabemos verdadera (e.g. un axioma o un teorema previamente demostrado), podemos sustituir sus variables por cualquier expresi on y seguiremos teniendo una expresi on verdadera. Sustituci on: P P (x := X )

Dado que el operador max es asociativo y conmutativo, evitaremos el uso de par entesis cuando sea posible, por ejemplo en la propiedad a demostrar. Usando estas reglas se demostrar a la siguiente propiedad: Teorema 2.6 W max X + Y max Z = (W + Y ) max (W + Z ) max (X + Y ) max (X + Z )

2.3. IGUALDAD Y REGLA DE LEIBNIZ

11

Demostraci on: La demostraci on se realiza paso a paso aplicando Leibniz combinado a veces con la regla de sustituci on. Un paso de demostraci on de una igualdad tendr a en general la forma E (x := X ) = {X=Y } E (x := Y ) Trataremos de transformar la expresi on m as compleja en la m as simple. Puede justicarse el formato de demostraci on mostrando que en realidad es simplemente una forma estilizada de aplicar las reglas de inferencia denidas antes. Por ejemplo, la primera igualdad del teorema a demostrar puede justicarse como sigue:
P +(Q max R)=(P +Q) max (P +R) (W +Y max Z )=(W +Y ) max (W +Z ) (W +Y max Z ) max (X +Y ) max (X +Z )=(W +Y ) max (W +Z ) max (X +Y ) max (X +Z ) (W +Y ) max (W +Z ) max (X +Y ) max (X +Z )=(W +Y max Z ) max (X +Y ) max (X +Z )

Donde el primer paso es una aplicaci on de la regla de sustituci on, el segundo de Leibniz y el u ltimo de simetr a de la igualdad. (W + Y ) max (W + Z ) max (X + Y ) max (X + Z ) = { Distributividad del + respecto del max , con P := W, Q := Y, R := Z } (W + Y max Z ) max (X + Y ) max (X + Z ) (W + Y max Z ) max (X + Y max Z ) = { Distributividad del + respecto del max , con P := X, Q := Y, R := Z } = { Conmutatividad del max , con P := W, Q := Y max Z } (Y max Z + W ) max (X + Y max Z ) = { Conmutatividad del max , con P := X, Q := Y max Z } (Y max Z + W ) max (Y max Z + X ) = { Distributividad del + respecto del max , con P := Y max Z, Q := W, R := X } Y max Z + W max X = { Conmutatividad del + } W max X + Y max Z El formato de la demostraci on anterior es el siguiente: E0 = { Ley aplicada o justicaci on de E0 = E1 } E1 . . .

En1

12 = { Ley aplicada o justicaci on de En1 = En } En luego, usando transitividad, se concluye que E0 = En .

CAP ITULO 2. PRELIMINARES

Debido a que (casi) todos los pasos de la demostraci on son expl citos, esta es quiz as m as larga de lo esperado. Dado que en inform atica es necesario usar la l ogica para calcular programas, es importante que las demostraciones no sean demasiado voluminosas y menos a un tediosas. Afortunadamente, esto puede conseguirse sin sacricar formalidad, adoptando algunas convenciones y demostrando algunos metateoremas, es decir, teoremas acerca del sistema formal de la l ogica. Este u ltimo punto ser a tratado en el cap tulo 3. Hemos ya adoptado la convenci on de no escribir los par entesis cuando un operador es asociativo con el consiguiente ahorro de pasos de demostraci on. De la misma manera, cuando un operador sea conmutativo, intercambiaremos libremente los t erminos sin hacer referencia expl cita a la regla. Adem as, cuando no se preste a confusi on juntaremos pasos similares en uno y no escribiremos la sustituci on aplicada cuando esta pueda deducirse del contexto. As , por ejemplo, la demostraci on anterior quedar a como sigue: (W + Y ) max (W + Z ) max (X + Y ) max (X + Z ) = { Distributividad del + respecto del max } (W + Y max Z ) max (X + Y max Z ) = { Distributividad del + respecto del max } Y max Z + W max X

2.4.

Funciones

Una funci on es una regla para computar un valor a partir de otro u otros. Por ejemplo, la funci on que dado un n umero lo eleva al cubo se escribe usualemte en matem atica como f (x) = x3 Para economizar par entesis (y por otras razones que quedar an claras m as adelante) usaremos un punto para denotar la aplicaci on de una funci on a un argumento; as la aplicaci on de la funci on f al argumento x se escribir a f.x. Por otro lado, para evitar confundir el predicado de . la igualdad (=) con la denici on de funciones, usaremos un s mbolo ligeramente diferente: =. Con estos cambios notacionales la funci on que eleva al cubo se escribir a como f.x = x3 Si ahora quiere evaluarse esta funci on en un valor dado, por ejemplo en (el valor) 2 obtenemos f.2 = { aplicaci on de f } 23 = { aritm etica } 8
.

2.5. EJERCICIOS

13

Puede notarse que el primer paso justicado como aplicaci on de f es simplemente una sustituci on de la variable x por la constante 2 en la expersi on que dene a f . Esto puede hacerse para cualquier expresi on, no necesariamente para constantes. Por ejemplo f.(z + 1) = { aplicaci on de f } (z + 1)3 = { aritm etica }

z3 + 3 z2 + 3 z + 1

La aplicaci on de funciones a argumentos puede denirse entonces usando sustituci on. Si se tiene una funci on f denida como . f.x = E para alguna expresi on E , entonces la aplicaci on de f a una expresi on cualquiera X estar a dada por f.X = E (x := X ) La idea de sustituci on de iguales por iguales (regla de Leibniz) y la de funci on est an ntimamente ligadas, por lo cual puede postularse la siguiente regla (derivada de la regla usual de Leibniz y la denici on de aplicaci on de funciones), la cual llamaremos, para evitar la proliferaci on de nombres, regla de Leibniz: X=Y f.X = f.Y Las funciones ser an uno de los conceptos esenciales de este libro. Volveremos sobre ellas en el cap tulo 8.

2.5.

Ejercicios

Ejercicio 2.1 Realizar las siguientes sustituciones eliminando los par entesis innecesarios. 1. (x + 2)(x := 6) 2. (x + 2)(x := x + 6) 3. (x x)(x := z + 1) 4. (x + z )(y := z ) 5. (x (z + 1))(x := z + 1) Ejercicio 2.2 Realizar las siguientes sustituciones simult aneas eliminando los par entesis innecesarios. 1. (x + y )(x, y := 6, 3 z ) 2. (x + 2)(x, y := y + 5, x + 6)

14 3. (x (y z ))(x, y := z + 1, z ) 4. (x + y )(y, x := 6, 3 z ) 5. (x (z + 1))(x, y, z := z, y, x)

CAP ITULO 2. PRELIMINARES

Ejercicio 2.3 Realizar las siguientes sustituciones eliminando los par entesis innecesarios. 1. (x + 2)(x := 6)(y := x) 2. (x + 2)(x := y + 6)(y := x 6) 3. (x + y )(x := y )(y := 3 z ) 4. (x + y )(y := 3 z )(x := y ) 5. (x (z + 1))(x, y, z := z, y, x)(z := y ) 6. (4 x x + 4 y x + y y )(x, y := y, x)(y := 3) Ejercicio 2.4 M as arriba mencionamos que Leibniz hab a propuesto como parte de la denici on de igualdad la conversa de la que nosotros llamamos regla de Leibniz, es decir que si para todo estado y expresi on E vale que E (x := X ) = E (x := Y ), entonces X = Y . Demostrar que la conversa vale para las expresiones aritm eticas. Ejercicio 2.5 Demostrar las siguientes desigualdades. 1. X max X + Y max Y (X + Y ) max (X + Y ) 2. (X + Z ) max (Y + Z ) + (X Z ) max (Y Z ) X + Y Ejercicio 2.6 Denir el valor absoluto en t erminos del m aximo y demostrar la desigualdad triangular: |X | + |Y | |X + Y |

Cap tulo 3

C alculo Proposicional
One philosopher was shocked when Bertrand Russell told him that a false proposition implies any proposition. He said you mean that from the statement that two plus two equals ve it follows that you are the Pope? Russell replied yes. The philosopher asked, Can you prove this? Russell replied Certainly, and contrieved the following proof on the spot: 1. Suppose 2 + 2 = 5. 2. Substracting two from both sides of the equation, we get 2 = 3. 3. Transposing, we get 3 = 2. 4. Substracting one from both sides, we get 2 = 1 Now, the Pope and I are two. Since two equals one, then the Pope and I are one. Hence I am the Pope. Raymond Smullyan:What Is the Name of This Book? En este cap tulo se presenta una alternativa a las evaluaciones (tablas de verdad) para razonar con expresiones booleanas. En los cap tulos precedentes se determinaba si una f ormula era una tautolog a construyendo su tabla de verdad; ahora en cambio se usar an m etodos algebraicos para demostrar que una expresi on dada es un teorema. Esta manera de trabajar presenta una buena alternativa a las tablas de verdad, dado que estas pueden ser extremadamente largas si el n umero de variables es grande, en cambio una demostraci on puede ser mucho m as corta. La tabla de verdad se construye de manera mec anica, a diferencia de la demostraci on para la cual es necesario desarrollar cierta habilidad en la manipulaci on sint actica de f ormulas (y a un as no puede garantizarse que se encontrar a una demostraci on). Por otro lado, la manipulaci on sint actica de f ormulas suele tener m as aplicaciones y es una de las habilidades requeridas m as importantes a la hora de construir programas de computadora. Con este n introduciremos un sistema para construir demostraciones que involucren expresiones de la l ogica proposicional. El estilo utilizado se conoce como c alculo proposicional . Este c alculo est a orientado a la programaci on, por lo cual provee herramientas para el manejo efectivo de f ormulas l ogicas de tama no considerable. La necesidad de este c alculo se fue haciendo cada vez m as notoria a medida que se desarrollaba el c alculo de programas. Pueden encontrarse ya sus primeros elementos en el trabajo de 15

16

CAP ITULO 3. CALCULO PROPOSICIONAL

E.W. Dijkstra y W.H.J. Feijen [DF88]. Una exposici on completa gura en [DS90] y en [GS93]. Puede consultarse tambi en [Coh90], donde la exposici on es m as elemental.

3.1.

Sistemas formales

El c alculo proposicional se presentar a como un sistema formal. El objetivo de un sistema formal es explicitar un lenguaje en el cual se realizar an demostraciones y las reglas para realizarlas. Esto permite tener una noci on muy precisa de lo que es una demostraci on, as tambi en como la posibilidad de hablar con precisi on de la sintaxis y la sem antica. En este libro no estudiaremos estos temas en profundidad. Un sistema formal consta de cuatro elelmentos: Un conjunto de s mbolos llamado alfabeto, a partir del cual las expresiones son construidas. Un conjunto de expresiones bien formadas, es decir aquellas palabras construidas usando los s mbolos del alfabeto que ser an consideradas correctas. Una expresi on bien formada no necesariamente es verdadera. Un conjunto de axiomas, los cuales son las f ormulas b asicas a partir de las cuales todos los teoremas se derivan. Un conjunto de reglas de inferencia, las cuales indican c omo derivar f ormulas a partir de otras ya derivadas. Como todo sistema formal, nuestro c alculo consistir a de un conjunto de expresiones construidas a partir de elementos de un alfabeto dado siguiendo reglas expl citas de buena formaci on. Si bien en este cap tulo se vuelve a denir el lenguaje de las expresiones booleanas, este coincidir a con el denido en los cap tulos precedentes, s olo que aqu es presentado de manera m as formal. Por otro lado, el c alculo estar a constituido por un conjunto de axiomas, los cuales ir an introduci endose paulatinamente, y un conjunto de reglas de inferencia. A diferencia de otros sistemas formales para la l ogica proposicional, nuestro c alculo da un lugar fundamental al conectivo de equivalencia l ogica, por lo cual las reglas de inferencia usadas ser an esencialmente las de Leibniz, transitividad y sustituci on. El sistema formal bajo consideraci on consta de los siguientes elementos: alfabeto: Las expresiones booleanas las cuales constituir an la sintaxis de nuestro c alculo se construir an usando el siguiente alfabeto: constantes: Las constantes True y False que se usar an para denotar los valores verdadero y falso respectivamente. variables: Un conjunto innito. Se usar an t picamente las letras p, q, r como variables proposicionales. operadores unarios: negaci on .

3.1. SISTEMAS FORMALES equivalencia disyunci on conjunci on operadores binarios: discrepancia implicaci o n consecuencia .

17

signos de puntuaci on: Par entesis ( y ).

f ormulas: Las expresiones bien formadas o f ormulas del c alculo proposicional ser an las que se puedan construir de acuerdo a las siguientes prescripciones: 1. Las variables proposicionales y las constantes son f ormulas. 2. Si E es una f ormula, entonces (E ) tambi en lo es. 3. Si E y F son f ormulas y es un operador binario (, , etc.), entonces (E F ) tambi en es una f ormula. 4. S olo son f ormulas las construidas con las tres reglas precedentes. reglas de inferencia: Las reglas de inferencia usadas ser an las ya presentadas para la igualdad. En este caso, la equivalencia l ogica entre expresiones booleanas satisfar a las propiedades de la igualdad: Transitividad: P Q, Q R P R

Leibniz:

P Q E (r := P ) = E (r := Q) P P (q := R)

Sustituci on:

axiomas: Los axiomas del c alculo se introducir an gradualmente. El c alculo proposicional tal como se presenta aqu no aspira a la minimalidad en el n umero de reglas de inferencia y axiomas, dado que uno de los principales objetivos de dicho c alculo es su uso para realizar demostraciones reales y no ser meramente un objeto de estudio en s mismo, como generalmente ocurre. Si se usan un m nimo de axiomas y de reglas de inferencia, las demostraciones de teoremas elementales resultan en general demasiado largas. En el cap tulo siguiente se ver an algunas aplicaciones b asicas del c alculo proposicional. Su principal aplicaci on es la derivaci on y vericaci on de programas, lo cual se desarrollar a en los cap tulos subsiguientes. Un formato c omodo para demostraciones (usando las reglas de inferencia ya presentadas) es el que usamos en el cap tulo 2 para demostrar igualdades. Primero denimos un teorema como generado por las siguientes reglas: 1. un axioma es un teorema,

18

CAP ITULO 3. CALCULO PROPOSICIONAL

2. la conclusi on de una regla de inferencia cuyas premisas son teoremas (ya demostrados) es un teorema, 3. una expresi on booleana que se demuestra equivalente (ver m as adelante) a un teorema es tambi en un teorema. Nuestro formato de demostraci on consistir a en general de una serie de pasos de equivalencia desde la expresi on a demostrar hasta llegar a un axioma. Cada paso de demostraci on estar a justicado por una aplicaci on de la regla de Leibniz, y el teorema nal se seguir a por aplicaci on de la regla de transitividad. Una generalizaci on usada usualmente en l ogica e indispensable para cualquier c alculo que pretenda ser u til, es que los pasos de demostraci on puedan ser, adem as de las reglas elegidas para el c alculo, teoremas previamente demostrados. M as adelante se introducir an otras generalizaciones. La justicaci on de esta generalizaci on (y de otras luego) es que de manera elemental se puede reconstruir una demostraci on pura a partir de la generalizada. En este caso, la demostraci on del nuevo teorema se obtiene simplemente pegando la demostraci on hasta el teorema viejo con la demostraci on (ya realizada) de este u ltimo. Veremos a continuaci on una serie de leyes o axiomas y de teoremas que se demuestran a partir de estos. A veces se omiten las demostraciones, sobreentendi endose que estas quedan como ejercicios para el lector. Se recomienda hacer estos ejercicios para desarrollar la habilidad de manipular formalmente el c alculo de predicados, habilidad que ser a indispensable para realizar exitosamente derivaciones de programas.

3.2.

La equivalencia

La equivalencia, que denotaremos con el s mbolo , se dene como el operador binario que satisface las siguientes condiciones: Axioma 3.1 (Asociatividad) ((p q ) r ) (p (q r )) Axioma 3.2 (Conmutatividad) pqqp Axioma 3.3 (Neutro) p True p La asociatividad permite la omisi on de par entesis. Por ejemplo: la tercera condici on deber a haberse escrito como (p True ) p. La asociatividad permite interpretarla en cada caso particular de la forma m as conveniente. Como adem as es conmutativa, consideraremos tambi en irrelevante el orden de los t erminos en una equivalencia. Por ejemplo, podemos usar el u ltimo axioma para reemplazar p p por True . La reexividad de la equivalencia puede demostrarse como sigue: Teorema 3.4 (Reexividad) pp Demostraci on:

3.2. LA EQUIVALENCIA pp

19

{ 3.3 aplicado a la primera p } (p True ) p Ponemos los par entesis en la u ltima expresi on para remarcar cu al fue la sustituci on realizada. Al ser la u ltima expresi on un axioma, el teorema queda demostrado. El siguiente teorema es de esperar (podr a haberse agregado como un axioma). Teorema 3.5 True Cuando se quiere demostrar que dadas dos expresiones l ogicas E y F vale que E F , en lugar de hacer una demostraci on que comience con la equivalencia y termine en True (o en alg un otro teorema o axioma), podemos tambi en comenzar con E y llegar a trav es de equivalencias a F . Una justicaci on de esta generalizaci on es la siguiente. Dada una demostraci on de la forma E0 { justicaci on de E0 E1 } E1 . . .

En1 { justicaci on de En1 En } En la misma puede transformarse mecanicamente en una demostraci on pura de la forma True { reexividad de la equivalencia } { justicaci on de E0 E1 } E0 E1 . . . E0 E0

{ justicaci on de En1 En } E0 En Estos resultados acerca del c alculo se llamar an metateoremas, para distinguirlos de los teoremas que son f ormulas del c alculo. El objetivo de los metateoremas es proveer herramientas para poder usar el c alculo de manera efectiva para la construcci on de demostraciones en la vida real. La (meta)demostraci on del siguiente metateorema se deja como ejercicio (n otese que hay que decir c omo se construye una demostraci on a partir de otra u otras). Metateorema 3.6 Dos teoremas cualesquiera son equivalentes.

E0 En1

20

CAP ITULO 3. CALCULO PROPOSICIONAL

3.3.

La negaci on

La negaci on, que denotaremos con el s mbolo , se dene como el operador unario de m as precedencia que cualquier otro operador del c alculo. Axioma 3.7 (Negaci on y equivalencia) (p q ) p q Adem as, denimos la constante False con el siguiente axioma Axioma 3.8 False True Teorema 3.9 (Doble negaci on) p p Teorema 3.10 p False p

3.4.

La discrepancia

La discrepancia, que denotaremos con el s mbolo , se dene como un operador binario con precedencia igual a la equivalencia, lo cual implica que habr a que poner par entesis si aparecen ambos conectivos al mismo nivel en una expresi on. Sin embargo, el teorema 3.14 nos permite sacarlos. Axioma 3.11 (Denici on de ) p q (p q ) Teorema 3.12 (Asociatividad) ((p q ) r ) (p (q r )) Teorema 3.13 (Conmutatividad) (p q ) (q p) Teorema 3.14 (Asociatividad mutua) p (q r ) (p q ) r Teorema 3.15 p False p Demostraci on: Para demostrar propiedades de un operador nuevo denido en t erminos de otros (como en este caso la discrepancia en t erminos de la negaci on y la equivalencia) un m etodo frecuentemente exitoso es reemplazar al operador por su denici on y manipular los operadores viejos, volviendo a obtener el operador nuevo si es necesario (no es el caso en esta demostraci on). p False

{ 3.11 con q := f alse) } (p False )

3.5. LA DISYUNCION { 3.8 }

21

{ 3.7 }

(p True ) (p True ) p

{ doble negaci on, True neutro para } Teorema 3.16 (Intercambiabilidad) pqrpqr

3.5.

La disyunci on

La disyunci on, que denotaremos con el s mbolo , se dene como un operador binario de mayor precedencia que la equivalencia, es decir que p q r debe entenderse como (p q ) r . Axioma 3.17 (Asociatividad) (p q ) r p (q r ) Axioma 3.18 (Conmutatividad) pq qp Axioma 3.19 (Idempotencia) ppp Axioma 3.20 (Distributividad con la equivalencia) p (q r ) (p q ) (p r ) Axioma 3.21 (Tercero excluido) p p Demostraremos algunas propiedades de la disyunci on. Teorema 3.22 p (q r ) (p q ) (p r ) En general, conviene comenzar a demostrar una equivalencia a partir de la expresi on m as compleja, dado que las posibilidades de simplicar una expresi on suelen estar m as acotadas que las de complejizarla, lo cual hace que la demostraci on sea m as f acil de encontrar. Demostraci on: (p q ) (p r ) pqpr

{ asociatividad de } { conmutatividad de } ppqr

22 { idempotencia de } { asociatividad de } p (q r ) Teorema 3.23 (Elemento absorbente) p True True Demostraci on: p True pqr

CAP ITULO 3. CALCULO PROPOSICIONAL

{ p True p, interpretada como (p p) True } { distributividad de con respecto a } {pp} True (p q ) (p q ) p (q q )

Teorema 3.24 (Elemento neutro) p False p

3.6.

La conjunci on

La conjunci on, que denotaremos con el s mbolo , se dene como un operador binario con la misma precedencia que la disyunci on. Esto hace necesario el uso de par entesis en las expresiones que involucran a ambos operadores. Por ejemplo: no es lo mismo (p q ) r que p (q r ). Esto nos dice que no podemos escribir p q r , pues esta expresi on no est a asociada de manera natural a ninguna de las dos anteriores. Se introducir a un u nico axioma para la conjunci on. Axioma 3.25 (Regla dorada) pq pq pq La regla dorada aprovecha fuertemente la asociatividad de la equivalencia. En principio, la interpretar amos como p q (p q p q ), pero nada nos impide hacer otras interpretaciones, por ejemplo (p q p) (q p q ), o bien (p q p q ) p q , o bien, usando la conmutatividad de la equivalencia, (p q ) (p q p q ), etc etera. La regla dorada ser a de gran utilidad para demostrar propiedades de la conjunci on y la disyunci on, dado que provee una relaci on entre ambas.

3.6. LA CONJUNCION Teorema 3.26 (Asociatividad) p (q r ) (p q ) r Demostraci on: p (q r )

23

{ regla dorada, interpretada como p q (p q p q ) } { regla dorada, dos veces1 } { 3.20 } p (q r ) p (q r )

p q r q r p (q r q r ) p q r qr pq pr pqr (p q p q ) r (p r q r p q r ) (p q p q ) r (p q p q ) r (p q ) r (p q ) r

{ 3.2, 3.1 } { 3.20 }

{ regla dorada } { regla dorada } (p q ) r

Teorema 3.27 (Conmutatividad) pq qp Teorema 3.28 (Idempotencia) ppp Teorema 3.29 (Neutro) p True p Demostraci on: p True

{ regla dorada } { 3.23 }

p True p True

{ p p; True es neutro de } p

p True True

La disyunci on es distributiva con respecto a la equivalencia por denici on. La conjunci on no lo es. Veamos:

24 (p q ) (p r ) { regla dorada en cada miembro } p q pq p r pr { conmutatividad de } pq r pq pr p

CAP ITULO 3. CALCULO PROPOSICIONAL

{ distributividad de con respecto a } p q r p (q r ) p { asociatividad de } (p (q r ) p (q r )) p { regla dorada } (p (q r )) p y esto no es equivalente a p (q r ); ejemplo: p := False . Teorema 3.30 p q p q p Teorema 3.31 (de Morgan) (i) (p q ) p q (ii) (p q ) p q Demostraci on de (i): p q { regla dorada } p q p q { 3.30 } p p q { negaci on de } (p p q ) { 3.30 } (p q ) Teorema 3.32 (Distributividad de con respecto a ) p (q r ) p q p r

3.7. LA IMPLICACION

25

3.7.

La implicaci on

La implicaci on, que denotaremos con el s mbolo , se dene como el operador binario que precede a la equivalencia, pero es precedido por la disyunci on (y por lo tanto tambi en por la conjunci on). Para denirlo alcanza con el siguiente axioma: Axioma 3.33 pq pq q Teorema 3.34 pp Demostraci on: pp

{ 3.33 }

{ 3.19; p p } True Teorema 3.35 p q p q Demostraci on: pq

ppp

{ denici on de } { p False p } { 3.20 } p q False q (p False ) q p q pq q

{ p False p } Teorema 3.36 (p q ) p q Teorema 3.37 p True Teorema 3.38 pq p Teorema 3.39 ppq

26 Teorema 3.40 (Transitividad) (p q ) (q r ) (p r )

CAP ITULO 3. CALCULO PROPOSICIONAL

Un axioma que ser au til es la siguiente versi on axiom atica de la regla de Leibniz: Axioma 3.41 (Leibniz) e = f E (z := e) = E (z := f ) La forma de este axioma es diferente a la de los anteriores, ya que no es estrictamente hablando una expresi on booleana sino un esquema, dado que para cada E diferente ser a un axioma diferente. Alternativamente, podr a demostrarse el axioma de Leibniz como un metateorema de nuestro c alculo de predicados. La demostraci on puede hacerse por inducci on en la estructura de E. Si bien este axioma est a inspirado en la regla de Leibniz su signicado es diferente, dado que la regla de Leibniz dice que si dos expresiones son iguales en cualquier estado entonces sustituir esas expresiones en una expresi on dada tambi en producir a expresiones iguales en cualquier estado. El axioma de Leibniz dice, en cambio, que si dos expresiones son iguales en un estado dado, entonces sustituirlas en una expresi on dada producir a expresiones iguales en ese estado. Una diferencia importante con la regla de Leibniz es que la rec proca del axioma no es cierta (mientras que para la regla vimos que para nuestro lenguaje de expresiones booleanas y aritm eticas es v alida). El siguiente contraejemplo muestra que para el axioma no es este el caso. Ejemplo 3.1 Tomemos como E a la expresi on True z . Luego se da que E (z := True ) = E (z := False ) dado que ambos son verdaderos, pero obviamente True = False . En el caso de la regla de inferencia de Leibniz, se puede pensar que la rec proca es v alida dado que se supone una cuanticaci on sobre todas las expresiones posibles.

3.8.

La consecuencia

La consecuencia es el operador dual de la implicaci on. La denotaremos con el s mbolo y puede denirse como un operador binario que tiene la misma precedencia que la implicaci on y que satisface Axioma 3.42 pq pq p Puede ahora demostrarse f acilmente que Teorema 3.43 pqqp A partir de este teorema pueden dualizarse las propiedades de la implicaci on. En las secciones siguientes permitiremos usar la implicaci on o la consecuencia como nexo en las demostraciones (pero no ambas en la misma demostraci on). Esto se justica con la transitividad de estos operadores.

DEL FORMATO DE DEMOSTRACION 3.9. GENERALIZACION

27

Cada vez que hemos introducido un operador, hemos mencionado su nivel de precedencia. La existencia de estas convenciones permite eliminar el uso de par entesis, facilitando de esta manera la escritura y lectura de expresiones booleanas. Pero no debemos olvidar que cuando se involucran operadores con la misma precedencia los par entesis s son necesarios. La tabla que sigue resume los niveles de precedencia que hemos establecido, de mayor a menor: negaci on disyunci on y conjunci on implicaci on y consecuencia equivalencia y discrepancia

3.9.

Generalizaci on del formato de demostraci on

Se desea tener en el c alculo de predicados una herramienta poderosa para resolver problemas concretos. Los principales problemas a resolver provienen del c alculo formal de programas. Tanto para estos problemas como para los tratados en el pr oximo cap tulo, es c omodo disponer de un formato de demostraci on m as laxo. La principal generalizaci on que realizaremos es permitir que en las demostraciones dos pasos se conecten no s olo con una equivalencia sino tambi en con una implicaci on. Por otro lado, se usar an premisas para modularizar las demostraciones. Obviamente, para poder realizar esta generalizaci on es necesario demostrar un metateorema que muestre como transformar una demostraci on generalizada en una pura. No se probar a este metateorema dado que su demostraci on, si bien no es dicil, es bastante larga y engorrosa. Se ilustrar a con un ejemplo como puede realizarse dicha transformaci on. Ejemplo 3.2 (tomado de [GS93]) Se quiere demostrar la siguiente proposici on: dado que p q y q r obtener como conlusi on p r. La demostraci on generalizada tendr a la siguiente forma: p { raz on por la cual p q } q { raz on por la cual q r } r La demostraci on pura asociada ser a la siguiente (n otese que las razones de los pasos de demostraci on de las premisas son las mismas que en la generalizada): True { transitividad } (p q ) (q r ) (p r )

{ raz on por la cual p q } True (q r ) (p r )

28 { raz on por la cual q r }

CAP ITULO 3. CALCULO PROPOSICIONAL

{ idempotencia, True es neutro a izquierda de } (p r )

True True (p r )

3.10.

Ejercicios

Ejercicio 3.1 (Largo) Construir las tablas de verdad para todos los axiomas introducidos en este cap tulo. Ejercicio 3.2 (Muy largo) Demostrar todos los teoremas enunciados en est e cap tulo. Ejercicio 3.3 Demostrar que False es neutro para la disyunci on: p False p Ejercicio 3.4 Demostrar que False es absorbente para la conjunci on: p False False Ejercicio 3.5 Demostrar las leyes de absorci on: p (p q ) p p (p q ) p Ejercicio 3.6 Demostrar las leyes de absorci on: p (p q ) p q p (p q ) p q Ejercicio 3.7 Demostrar: p (q p) p q Ejercicio 3.8 Demostrar: 1. La conjunci on distribuye con respecto a la conjunci on: p (q r ) (p q ) (p r ). 2. La conjunci on distribuye con respecto a la disyunci on: p (q r ) (p q ) (p r ). 3. La disyunci on es distributiva con respecto a la conjunci on: p (q r ) (p q ) (p r )

3.10. EJERCICIOS

29

4. En general, la conjunci on no es distributiva con respecto a la equivalencia, pero cuando la cantidad de signos es par, s lo es: s (p q r ) s p s q s r Ejercicio 3.9 Demostrar: 1. p q p. 2. p (q r ) p q r . 3. La implicaci on distribuye con respecto a la equivalencia. p (q r ) p q p r . 4. Doble implicaci on. (p q ) (q p) p q 5. Contrarec proca. p q q p 6. p q p q p 7. (p q r ) (p q r ) 8. Modus ponens. p (p q ) q 9. Transitividad. (p q ) (q r ) (p r ) 10. 11. Monoton a. (p q ) (p r q r ) Monoton a. (p q ) (p r q r )

Ejercicio 3.10 Demostrar: p (p q ) p q p (q p) p p (p q ) True p (q p) q p True p p p False p False p True

30

CAP ITULO 3. CALCULO PROPOSICIONAL

Cap tulo 4

Aplicaciones del c alculo proposicional


Mi unicornio azul por n te encontr e. . . Leo Masliah. La recuperaci on del unicornio

La l ogica es una herramienta fundamental para resolver problemas. En ciencias de la computaci on es la herramienta fundamental para construir especicaciones y programas. Si bien esta disciplina ha dado un gran impulso para el desarrollo de la l ogica, sobre todo en su uso de la como herramienta concreta, la l ogica se sigue usando para decidir acerca de la validez de los razonamientos y para proveer soluciones a problemas diversos, como por ejemplo la construcci on de circuitos digitales combinatorios. En este cap tulo se presentar an algunas aplicaciones elementales del c alculo proposicional: an alisis de argumentos l ogicos y resoluci on de problemas de ingenio.

4.1.

An alisis de argumentaciones

En el cap tulo ?? se usaron las tablas de verdad para comprobar la validez de ciertas formas de razonamiento. Si bien ese m etodo es efectivo, cuando crece el n umero de variables proposicionales su costo se vuelve prohibitivo, dado que el tama no de las tablas de verdad crece exponencialemente. Para el caso de los silogismos el m etodo es factible dado que por su forma el n umero de proposiciones involucradas es jo. Sin embargo, cuando se quieren analizar razonamientos de la vida real es conveniente recurrir a m etodos sint acticos, es decir a la manipulaci on de f ormulas sin interpretaci on sem antica. En el primer ejemplo consieraremos un razonamiento con seis variables proposicionales, lo cual hubiera dado lugar a una tabla de verdad con 64 las. Ejemplo 4.1 Consid erese por ejemplo la siguiente argumentaci on (adaptada del libro [Cop73]): Si Dios fuera incapaz de evitar el mal no ser a omnipotente; si no quisiera hacerlo ser a mal evolo. El mal s olo puede existir si Dios no puede o no quiere impedirlo. El mal existe. Si Dios existe, es omnipotente y no es mal evolo. Luego, Dios no existe. 31

32

CAP ITULO 4. APLICACIONES DEL CALCULO PROPOSICIONAL

Para representarlo en el c alculo proposicional elegimos letras proposicionales para cada una de las proposiciones elementales en el razonamiento, luego encontramos las f ormulas que representan las proposiciones m as complejas y mostramos que efectivamente la f ormula asociada a la conclusi on se deduce formalmente de las f ormulas asociadas a las premisas. Se ve que si uno se expresa con precisi on, la argumentaci on precedente no es en si misma un razonamiento sino un teorema a ser demostrado. Elegimos las siguientes letras proposicionales: q: Dios quiere evitar el mal. c: Dios es capaz de evitar el mal. o: Dios es omnipotente. m: Dios es mal evolo. e: El mal existe. d: Dios existe. Las premisas se expresan de la siguiente manera: 1. c o 2. q m 3. e q c 4. e 5. d o m Y la conclusi on obviamente es: d Una demostraci on de la correcci on de este razonamiento es la siguiente: d

{ premisa 5, contrapositivo } { de Morgan } { premisa 1, 2, monoton a dos veces } { premisa 3 } e q c m o (m o)

4.1. ANALISIS DE ARGUMENTACIONES { premisa 4 } True

33

Ejemplo 4.2 Consid erese el siguiente argumento cuya forma se denomina dilema en la l ogica cl asica ([Cop73]). Si bien en este caso la tabla de verdad podr a haber sido constru da (tiene s olo 16 las), la demostraci on sint actica es m as corta y elegante. Si el general era leal, habr a obedecido las ordenes, y si era inteligente las habr a comprendido. O el general desobedeci o las ordenes o no las comprendi o. Luego, el general era desleal o no era inteligente. Elegimos las siguientes letras proposicionales: l: El general es leal. o: El general obedece las ordenes. i: El general es inteligente. c: El general comprende las ordenes. Las premisas se expresan de la siguiente manera: 1. l o 2. i c 3. o c Y la conclusi on es: l i Una demostracion posible es: l i { premisa 2, contrapositiva, monoton a } l c { premisa 1, contrapositiva, monoton a } o c { premisa 3 } True

34

CAP ITULO 4. APLICACIONES DEL CALCULO PROPOSICIONAL

4.2.

Resoluci on de acertijos l ogicos

En esta secci on usaremos el c alculo de predicados para la resoluci on de acertijos l ogicos. La mayor econom a de este c alculo nos permite encontrar soluciones m as elegantes a problemas como los planteados en ??. Veremos primero soluciones sint acticas a dichos problemas los cuales fueron resueltos usando (impl citamente) tablas de verdad. Ejemplo 4.3 Tenemos dos personas, A y B, habitantes de la isla. A hace la siguiente armaci on: Al menos uno de nosotros es un p caro. Qu e son A y B? Si tomamos las proposiciones elementales a: A es un caballero b: B es un caballero podemos simbolizar la armaci on que hace A como a b. Si sumamos a esto que esa armaci on es verdadera si y s olo si A es un caballero, nos queda como dato del problema que a (a b) Aplicando las t ecnicas desarrolladas en los cap tulos anteriores podemos obtener a (a b) { de Morgan } a (a b) { def. de } (a (a b)) { def. de } (a b) { negaci on de una implicaci on } a b

Se concluye entonces que A es un caballero y B un p caro Ejemplo 4.4 Otra vez nos cruzamos con dos personas, A y B, (no necesariamente los mismos del ejercicio anterior). A dice Soy un p caro pero B no lo es. Qu e son A y B? Si tomamos las proposiciones elementales a: A es un caballero b: B es un caballero

4.3. EJERCICIOS

35

podemos simbolizar la armaci on que hace A como a b. Si sumamos a esto que esa armaci on es verdadera si y s olo si A es un caballero, nos queda como dato del problema que a a b Manipulando esta expresi on obtenemos a a b

{ regla dorada }

{ negaci on y equivalencia } { False y equivalencia } { def } (b a b) (a b) False b a b

a a b a b

{ negaci on de la implicaci on } a b Se concluye entonces que ambos son p caros.

4.3.

Ejercicios

Ejercicio 4.1 Analizar los razonamientos del ejercicio ?? usando las herramientas introducidas en esta secci on. Ejercicio 4.2 Consid erese la siguiente argumentaci on : Si Dios quisiera evitar el mal pero fuera incapaz de hacerlo no ser a omnipotente; si fuera capaz de evitar el mal pero no quisiera hacerlo ser a mal evolo. El mal s olo puede existir si Dios no puede o no quiere impedirlo. El mal existe. Si Dios existe, es omnipotente y no es mal evolo. Luego, Dios no existe. Determinar si es correcta y demostrarla. Ejercicio 4.3 De la isla de los caballeros y los p caros. 1. Nos enocntramos con dos personas, A y B. A dice Al menos uno de nosotros es un p caro Que son A y B? 2. A dice Yo soy un p caro o B es un caballero Qu e son A y B? 3. A dice Yo soy un p caro pero B no Que son A y B?

36

CAP ITULO 4. APLICACIONES DEL CALCULO PROPOSICIONAL

4. Dos perrsonas se dicen del mismo tipo si son ambas caballeros o ambas p caros. Tenemos tres personas, A, B y C. A y B dicen lo siguiente A: B es un p caro. B: A y C son del mismo tipo. Que es C? 5. A dice Si soy un caballero entonces B tambi en lo es Que son A y B? 6. Le preguntan a A si es un caballero. A responde Si soy un caballero entonces me comer e el sombrero. Demostrar que A tiene que comerse el sombrero. 7. A realiza (por separado) las siguientes dos armaciones. a ) Amo a Mar a. b ) Si amo a Mar a, entonces amo a Yolanda. Que es A?

Cap tulo 5

Aplicaciones del c alculo proposicional 2: Piso y Techo


Mi unicornio azul por n te encontr e. . . Leo Masliah. La recuperaci on del unicornio

El estilo de c alculo proposicional con el cual estamos trabajando es particularmente c omodo para trabajar con problemas matem aticos. En este cap tulo trabajaremos con propiedades de algunas funciones matem aticas que aparecen en varios problemas de programaci on.

5.1.

La funci on piso

En esta secci on trabajaremos con una funci on cuyas propiedades no han sido demasiado estudiadas. Denici on 5.1 Dado un n umero real x se dene la funci on piso aplicada a x como el entero que satisface para todo entero m la siguiente propiedad: :

Int

n x n x Habr a que mostrar que esta propiedad es suciente para denir una funci on, es decir que x est a denida de manera u nica para cada x. Esto quedar a demostrado por la proiedad 5.1 demostrada m as abajo. Propiedad 5.1 Instanciando n en la denici on de piso con el entero x, obtenemos la siguiente propiedad: x x 37

38 CAP ITULO 5. APLICACIONES DEL CALCULO PROPOSICIONAL 2: PISO Y TECHO Propiedad 5.2 Instanciando ahora x en la denici on de piso con n (que es tambi en un real), obtenemos la siguiente propiedad: n n Propiedad 5.3 De las dos propiedades anteriores se sigue que para todo entero n n = n Propiedad 5.4 Podemos usar tambi en la propiedad contrapositiva de la equivalencia ??, y usando el hecho que p q q < p obtenemos la siguiente propiedad, que puede pensarse como una denici on alternativa de la funci on piso, para todo n entero: x < n x < n Propiedad 5.5 Instanciando n en la propiedad anterior con el entero x + 1, obtenemos la siguiente propiedad: x < x + 1 Propiedad 5.6 De las propiedades anteriores puede deducirse que para todo x real x x < x + 1 y por lo tanto puede verse que la funci on piso es efectivamente una funci on cuya denici on alternativa podr a ser: :

Int

n = x n x < n + 1 La existencia y unicidad de un tal n es una propiedad conocida de los enteros. Lema 5.1 La funci on piso es mon otona, esto es, para todo par de reales x, y x y x y Para demostrar el lema partimos del consecuente y mostramos que es consecuencia del antecedente x y x y

{ deniici on de piso } { transitividad } { 5.1 } xy x x x y

5.2. IGUALDAD INDIRECTA

39

5.2.

Igualdad indirecta

Una de las maneras usuales de demostrar una igualdad entre dos n umeros m y n cuando se conocen s olo desigualdades entre ellos es demostrar que tanto m n como n m. Sin embargo, en el caso de la funci on piso este m etodo a veces no funciona, dado que la funci on aparece en su denici on s olo del lado derecho de la desigualdad. Otro m etodo que introduciremos aqu como un teorema es el m etodo de la igualdad indirecta Teorema 5.2 Dos n umeros p y q son iguales si y s olo si para cualquier otro n umero n del mismo tipo que p y q vale que npnq Observaci on 5.3 Si bien este teorema es tambi en una equivalencia l ogica, uno de los miembros de dicha equivalencia no puede expresarse con los medios estudiados hasta ahora como una f ormula l ogica. Hace falta usar cuanticaci on para poder expresar el teorema como una equivalencia simple, lo cual se har a en el cap tulo 6. Demostraci on: Si p = q entonces la equivalencia vale por regla de Leibniz. Supongamos ahora que la equivalencia es v alida para todo n. En particular es v alida cuando n = p. De aqu se deduce que p p p q , o, usando la reexividad del , que p q . Sim etricamente, se demuestra que q p, instanciando a n en este caso con q . Observaci on 5.4 La condici on del teorema de que n es del mismo tipo que p y q es indispensable para poder realizar las instanciaciones en la demostraci on. Si este requisito no fuera necesario podr a deducirse a partir de la denici on de piso que x = x por igualdad indirecta, lo cual claramente no es cierto. Ejemplo 5.1 Como aplicaci on de la regla de igualdad indirecta resolveremos una propiedad secilla de la funci on piso. Demostraremos que para todo entero n vale que x + n = x + n Tomamos un entero k arbitrario k x + n

{ denici on de piso } { aritm etica } { denici on de piso } { aritm etica } k x + n k n x knx k x+n

40 CAP ITULO 5. APLICACIONES DEL CALCULO PROPOSICIONAL 2: PISO Y TECHO

5.3.

La funci on techo

De manera dual puede denirse la funci on techo, la cual dado un n umero real devuelve el entero m as chico mayor o igual que el. Denici on 5.2 Dado un n umero real x se dene la funci on techo aplicada a x como el entero que satisface para todo entero m la siguiente propiedad: :

Int

x n x n Ejemplo 5.2 (M aximo entre dos n umeros [Coh90]) Consideremos el operador binario max , el cual aplicado a dos n umeros devuelve el mayor. El operador max tendr a m as precedencia que el +, o sea que P + Q max R = P + (Q max R). Satisfar a adem as los siguientes axiomas: Axioma 5.5 Conmutatividad. P max Q = Q max P Axioma 5.6 Asociatividad. P max (Q max R) = (P max Q) max R Axioma 5.7 Idempotencia. P max P = P Axioma 5.8 Distributividad de + con respecto a max . P + (Q max R) = (P + Q) max (P + R) Axioma 5.9 Conexi on entre max y . P max Q P La forma axiom atica de trabajar es asumir que los axiomas son ciertos y demostrar las propiedades requeridas a partir de ellos y de las reglas de inferencia, las cuales nos permiten inferir proposiciones v alidas a partir de otras. Para el caso del m aximo, asumiremos las reglas de inferencia de la igualdad, las de orden del , y la siguiente regla de sustituci on, la cual dice que si tenemos una proposici on que sabemos verdadera (e.g. un axioma o un teorema previamente demostrado), podemos sustituir sus variables por cualquier expresi on y seguiremos teniendo una expresi on verdadera. Sustituci on: P P (x := X )

Dado que el operador max es asociativo y conmutativo, evitaremos el uso de par entesis cuando sea posible, por ejemplo en la propiedad a demostrar. Usando estas reglas se demostrar a la siguiente propiedad:

TECHO 5.3. LA FUNCION Teorema 5.10 W max X + Y max Z = (W + Y ) max (W + Z ) max (X + Y ) max (X + Z )

41

La demostraci on se realiza paso a paso aplicando Leibniz combinado a veces con la regla de sustituci on. Un paso de demostraci on de una igualdad tendr a en general la forma E (x := X ) = {X=Y } E (x := Y ) Trataremos de transformar la expresi on m as compleja en la m as simple. Puede justicarse el formato de demostraci on mostrando que en realidad es simplemente una forma estilizada de aplicar las reglas de inferencia denidas antes. Por ejemplo, la primera igualdad del teorema a demostrar puede justicarse como sigue:
P +(Q max R)=(P +Q) max (P +R) (W +Y max Z )=(W +Y ) max (W +Z ) (W +Y max Z ) max (X +Y ) max (X +Z )=(W +Y ) max (W +Z ) max (X +Y ) max (X +Z ) (W +Y ) max (W +Z ) max (X +Y ) max (X +Z )=(W +Y max Z ) max (X +Y ) max (X +Z )

Donde el primer paso es una aplicaci on de la regla de sustituci on, el segundo de Leibniz y el u ltimo de simetr a de la igualdad. (W + Y ) max (W + Z ) max (X + Y ) max (X + Z ) = { Distributividad del + respecto del max , con P := W, Q := Y, R := Z } (W + Y max Z ) max (X + Y ) max (X + Z ) (W + Y max Z ) max (X + Y max Z ) = { Distributividad del + respecto del max , con P := X, Q := Y, R := Z } = { Conmutatividad del max , con P := W, Q := Y max Z } (Y max Z + W ) max (X + Y max Z ) = { Conmutatividad del max , con P := X, Q := Y max Z } (Y max Z + W ) max (Y max Z + X ) = { Distributividad del + respecto del max , con P := Y max Z, Q := W, R := X } Y max Z + W max X = { Conmutatividad del + } W max X + Y max Z El formato de la demostraci on anterior es el siguiente: E0 = { Ley aplicada o justicaci on de E0 = E1 } E1 . . .

En1

42 CAP ITULO 5. APLICACIONES DEL CALCULO PROPOSICIONAL 2: PISO Y TECHO = { Ley aplicada o justicaci on de En1 = En } En luego, usando transitividad, se inere que E0 = En . Debido a que (casi) todos los pasos de la demostraci on son expl citos, esta es quiz a m as larga de lo esperado. Dado que en inform atica es necesario usar la l ogica para calcular programas, es importante que las demostraciones no sean demasiado voluminosas y menos a un tediosas. Afortunadamente, esto puede conseguirse sin sacricar formalidad, adoptando algunas convenciones y demostrando algunos metateoremas, es decir, teoremas acerca del sistema formal de la l ogica. Este u ltimo punto ser a tratado en el cap tulo 3. Hemos adoptado ya la convenci on de no escribir los par entesis cuando un operador es asociativo, con el consiguiente ahorro de pasos de demostraci on. De la misma manera, cuando un operador sea conmutativo, intercambiaremos libremente los t erminos sin hacer referencia expl cita a la regla. Adem as, cuando no se preste a confusi on juntaremos pasos similares en uno y no escribiremos la sustituci on aplicada cuando esta pueda deducirse del contexto. As , por ejemplo, la demostraci on anterior quedar a como sigue: (W + Y ) max (W + Z ) max (X + Y ) max (X + Z ) = { Distributividad del + respecto del max } (W + Y max Z ) max (X + Y max Z ) = { Distributividad del + respecto del max } Y max Z + W max X

5.4.

Ejercicios

Ejercicio 5.1 Demostrar. 1. x/m = x/m 2. x = x 3. x = x 4. x = x Ejercicio 5.2 Qu e est a mal con la siguiente demostraci on (n, k enteros, 0 < n y x real) ? k n x k nx
k n

{ denici on de piso } { aritm etica } x

5.4. EJERCICIOS { denici on de piso }


k n

43

{ aritm etica } k n x Por lo tanto, por igualdad indirecta vale que n x = n x Encontrar un contraejemplo a esta u ltima ecuaci on Ejercicio 5.3 Qu e est a mal con la siguiente demostraci on (m, n, k enteros, n = 0) ? m nk
m n

{ denici on de techo } { aritm etica }


m n

<k+1

{ denici on de piso, contrapositiva } { aritm etica } m nk


m Por lo tanto, por igualdad indirecta vale que m n = n

m n<k+1

Ejercicio 5.4 Denir una regla de desigualdad indirecta an aloga a la de igualdad indirecta. Demostrarla. Usarla para demostrar que para cualquier par de reales a y b, vale que a + b a + b

44 CAP ITULO 5. APLICACIONES DEL CALCULO PROPOSICIONAL 2: PISO Y TECHO

Cap tulo 6

Expresiones cuanticadas
CHEREA: . . . Jai le go ut et la besoin de la s ecurit e. La plupart des hommes sont comme moi. Ils sont incapables de vivre dans un univers o` u la pens ee la plus bizarre peut en une seconde entrer dans la r ealit e. . . CALIGULA: La s ecurit e et la logique ne vont pas ensemble Albert Camus:Caligula

Una notaci on muy u til usada en matem atica es la que nos permite aplicar operaciones una secuencia de expresiones las cuales dependen de alguna variable. Ejemplos paradigm aticos de esta notaci on son la sumatoria y la productoria, as tambi en como la denici on de conjuntos por comprensi on o las cuanticaciones en l ogica. Por ejemplo, es usual escribir expresiones como
n1 i=0

2i+1

la cual puede leerse como la suma de los primeros n numeros impares. En esta expresi on pueden distinguirse varias componentes. Por un lado es operador usado (la sumatoria), correspondiente a un operador binario (la suma), por otro est an las variables (en este caso s olo i) las cuales tienen asociado un rango de variaci on (i puede tomar valores entre 0 y n 1), y por u ltimo tenemos la expresi on que indica cuales van a ser los t erminos de la sumatoria (2 i + 1 en el ejemplo). Para un n dado, la sumatoria puede reducirse a una expresi on aritm etica de la forma 1 + 3 + + 2 (n 1) + 2 n N otese sin embargo la ventaja de usar la sumatoria respecto de la expresi on con los puntos suspensivos, dado que esta u ltima no estar a bien denida si por ejemplo n es 0 o 1. Usualmente en matem atica se asume que el lector puede discernir estos casos sin inconvenientes. Sin embargo estas ambig uedades son mas perniciosas en el desarrollo formal de programas dado que las expresiones son m as complejas y es por lo tanto importante tener m as cuidado con los casos l mite. Por otro lado, como se ver a en este cap tulo, pueden proverse reglas expl citas para el manejo de expresiones del estilo de la sumatoria, las cuales nos asguran la correcci on de las 45

46

CAP ITULO 6. EXPRESIONES CUANTIFICADAS

operaciones realizadas con ellas y, m as importante a un, nos ayudar an a encontrar programas a partir de especicaciones escritas usando estas expresiones. Por otro lado, vamos a generalizar este mecanismo de denici on de expresiones a cualquier operador binario asociativo y conmutativo. Esto permite que las reglas provistas se apliquen a un conjunto grande de expresiones, las cuales ser an sucientes para especicar casi todos los problemas presentados en este libro. Lo esencial de este mecanismo para nuestros nes es que provee reglas para realizar c alculos de manera sucientemente simple. Sumado esto a que la mayor parte de las reglas son generales para cualquier operador binario (por supuesto que tambi en hay algunas reglas espec cas), hace que el c alculo presentado en este libro pueda aspirar a ser un m etodo eciente para el desarrollo de programas. Los lectores podr an juzgar por si mismos acerca de la validez de esta armaci on. Diferentes versiones de c alculos que usan expresiones cuanticadas pueden encontrarse en [GS93, DF88, DS90, Kal90, Coh90].

6.1.

Introducci on

En diversos contextos -aritm etica, l ogica, teor a de conjuntos, lenguajes de programaci on, etc.- aparece cierta noci on de cuanticaci on, entendi endos por esto al uso de variables formales con un alcance delimitado expl citamente las cuales pueden usarse para construir expresiones dependientes de estas pero s olo dentro de ese alcance. Se propondr a una notaci on unicada para estas expresiones. Esta notaci on debe tener en cuenta al operador con el cual se cuantica (en nuestro ejemplo la suma), las variables que van a usarse para crear las expresiones (i en el ejemplo), el rango de variaci on de estas variables (0 i < n) y la expresi on dependiente de las variables que dene los t erminos de la cuanticaci on (en nuestro ejemplo 2 i + 1). Una expresi on cuanticada ser a entonces de la siguiente forma: i : R : T , donde designa un operador asociativo y conmutativo (por ejemplo, +, , , Max, Min, etc.), R es un predicado que se denomina rango de especicaci on y T es una funci on de i denominada t ermino de la cuanticaci on. Usaremos i para denotar una secuencia de variables en la cual no importa el orden, usando la expresi on V.i para denotar al conjunto de todas las variables de i. La ocurrencia de i junto al operador suele llamarse variable de cuanticaci on o dummy. La variable cuanticada i (en las expresiones R o T ) s olo tiene sentido dentro de los par entesis cuando necesitemos hacer referencia expl cita a la variable cuanticada escribiremos R.i y T.i para el rango y el t ermino respectivamente. Con esta notaci on la sumatoria del ejemplo se escribir a como sigue i : 0i <n: 2i+1 , o tambi en como +i : 0 i < n : 2 i + 1 , Esta notaci on tiene varias ventajas sobre la usual de matem atica las cuales son esenciales para el uso sistem atico de las expresiones cuanticadas en el desarrollo de programas. Por un lado los par entesis determinan exactamente el alcance de la variable. Por otro lado, en matem atica es bastante engorroso escribir rangos que no sean intervalos de n umero naturales. Las expresiones cuanticadas presentadas aqu admiten cualquier expresi on booleana como rango, permitiendo

6.1. INTRODUCCION

47

adem as usar m as de una variable cuanticada de manera natural, lo cual es casi imposible de escribir con la notaci on tradicional. El tipo de la variable puede en general inferirse del contexto, en caso contrario se lo denir a expl citamente. Para los nes de la cuanticaci on la propiedad de que una variable sea de un tipo dado es equivalente a la de pertenecer al conjunto de valores de ese tipo. En este sentido, vamos a considerar a los tipos como un predicado m as. En algunas ocasiones no se desea restringir el rango de especicaci on al conjunto de variables que satisfacen un predicado R, como hemos escrito m as arriba. En estos casos escribiremos i : : T.i , entendi endose que el rango abarca a todos los elementos del tipo de i. Existe una serie de reglas que sirven para manipular expresiones cuanticadas. Las enunciaremos para un operador general y luego las ejemplicaremos aplic andolas a una serie de operadores usuales. En lo que sigue, usaremos True y False para indicar los predicados constantemente iguales a verdadero y falso respectivamente. Por lo dicho anteriormente, i : : T.i i : True : T.i . Uno de los conceptos esenciales para comprender y manejar a las expresiones cuanticadas es el de variable ligada. Asociados a este concepto estan el complementario de variable libre y el de alcance. Consideremos otra vez el ejemplo de la sumatoria i : 0 i < n : 2 i + 1 . Es claro que el valor de esta sumatoria depende de n y para diferentes estados va a tomar diferentes valores. Sin embargo su valor no depende del valor de i en un estado dado, y puede cambiarse este nombre por otro sin que su valor cambie, por ejemplo j : 0 j < n : 2 j + 1 . Vamos a decir que las ocurrencias de la variable i (o j en la segunda versi on) en el rango y el t ermino est an ligadas (a la variable que aparece junto a la sumatoria). Ahora, en una expresi on m as complicada de la forma i+ i :0 i<n: 2i+1 la ocurrencia de i de antes de la suma no tiene nada que ver con las ocurrencias dentro del alcance de la expresi on cuanticada. S olo esa primera ocurrencia de i tomar a su valor de alg un estado dado. Las ocurrencias internas a la sumatoria tienen ya su rango especicado. Por ejemplo, en un estado en el cual ambas i y n tomen el valor 6, el valor de la sumatoria va a ser 6+ o sea 6 + 1 + 3 + 5 + 7 + 9 + 11 Denici on 6.1 ((variable libre)) Se dene inductivamente cuando una variable est a libre en una expresi on. Una variable i est a libre en la expresi on i. Si la variable i est a libre en E entonces lo est a tambi en en (E ). Si la variable i est a libre en E y f es una operaci on v alida en el tipo de E , entonces i tambi en est a libre en f.(. . . , E, . . .). Si la variable i est a libre en E y i no aparece en la secuencia de variables x (i V.x), entonces lo est a tambi en en x : F : E y en x : E : F . i : 0i <6 : 2i+1

48

CAP ITULO 6. EXPRESIONES CUANTIFICADAS Dada una expresi on E , el conjunto de las variables libres de E se denotar a con F V.E .

Denici on 6.2 ((variable ligada)) Sea i una variable libre en la expresi on E y i V.x, luego la variable i est a ligada (a la variable de cuaticaci on correspondiente) en las expresiones x : E : F y en x : F : E Se extiende la denici on inductivamente. Si i est a ligada en E , tambi en lo estar a (a la misma variable de cuanticaci on) en (E ), f.(. . . , E, . . .), x : F : E y en x : E : F . Dada una expresi on E , el conjunto de las variables ligadas de E se denotar a con BV.E . Ejemplo 6.1 Consideremos la expresi on E =ik+ luego, F V.E = {i, k, n} y BV.E = {i}. i : 0 i<n : 2i+1

6.2.

Revisi on de la sustituci on y la regla de Leibniz

Las variables ligadas tienen su alcance delimitado de manera expl cita y ligadas a una variable de cuanticaci on. Si se cambian ambas por un nombre fresco (que no aparezca dentro del alcance), el signicado de la expresi on no cambiar a, como lo ejemplica la siguiente igualdad: i : 0i <n: 2i+1 = j :0 j <n : 2j +1

Debe tenerse cuidado sin embargo con las colisiones de nombres, dado que si por ejemplo se reemplaza a i por n nos da una expresi on la cual es obviamente diferente de las anteriores (en particular ser a siempre igual a 0, sin importar el valor de n en el estado). n :0 n < n : 2n+1 para extender la sustituci on a expresiones cuanticadas a trav es del siguiente axioma: Axioma 6.1 (Sustituci on para expresiones cuanticadas) V.y (V.x F V.E ) = y : R : T (x := E ) = y : R(x := E ) : T (x := E ) La condici on sobre las variables es necesaria para evitar las colisiones de nombres. Si la condici on no se cumple, es necesario renombrar la variable de cuanticaci on. Esto se ver a en la secci on siguiente, axioma 6.10.

Regla de Leibniz.
El objetivo de la regla de Leibniz es permitir el reemplazo de iguales por iguales. Sin embargo, con su formulaci on actual, esto no siempre es posible cuando aparecen expresiones cuanticadas. Por ejemplo, es esperable que aplicando la regla de Leibniz pueda deducirse que i : 0 i<n : 2i+1 = i : 0 i < n : 2 (i + 1) 1

Recordemos rapidamente la versi on actual de la regla de Leibniz Leibniz: X=Y E (x := X ) = E (x := Y )

6.3. REGLAS GENERALES PARA LAS EXPRESIONES CUANTIFICADAS La forma en que podr a usarse para demostrar la igualdad deseada es la siguiente 2 i + 1 = 2 (i + 1) 1 i : 0 i < n : y (y := 2 i + 1) = i : 0 i < n : y (y := 2 (i + 1) 1)

49

Pero, dado que la variable i aparece necesariamente en la lista de variables de cuanticaci on, el resultado de i : 0 i < n : y (y := 2 i + 1) ser a j : 0 j < n : 2 i + 1 y no el esperado. Proponemos entonces generalizar la regla de Leibniz para las expresiones cuanticadas, agregando las siguentes dos reglas (para el rango y para el t ermino). X=Y i : R(i := X ) : T = i : R(i := Y ) : T X=Y i : R : T (i := X ) = i : R : T (i := X )

6.3.

Reglas generales para las expresiones cuanticadas

En esta secci on se enunciar an axiomas y demostrar an algunas propiedades que van a ser u tiles en el desarrollo de programas. Se le dar an nombres a estos axiomas y propiedades para poder mencionarlos luego en las demostraciones o derivaciones pertinentes. En los casos en que una propiedad sea una generalizaci on de un axioma, conservaremos en general el nombre del axioma ya que quedar a claro a partir del contexto que versi on de la regla estar a siendo usada. Axioma 6.2 (Rango vac o) Cuando el rango de especicaci on es vac o, la expresi on cuanticada es igual al elemento neutro e del operador : i : False : T = e Si no posee elemento neutro, la expresi on no est a bien denida. Axioma 6.3 (Rango unitario) Si el rango de especicaci on consiste en un solo elemento, la expresi on cuanticada es igual al t ermino evaluado en dicho elemento: i : i = N : T = T (i := N )

Otra forma de escribir esta regla es hacer expl cita la dependencia de T de la variable i (lo cual obviamente no signica que i puede no aparecer en T ). i : i = N : T.i = T.N Axioma 6.4 (Partici on de rango) Cuando el rango de especicaci on es de la forma R S y adem as se cumple al menos una de las siguientes condiciones: el operador es idempotente, los predicados R y S son disjuntos,

50

CAP ITULO 6. EXPRESIONES CUANTIFICADAS

la expresi on cuanticada puede reescribirse como sigue: i : R S : T = i : R : T i : S : T

El hecho que la igualdad sea una relaci on sim etrica, permite indistintamente reemplazar cualquiera de los dos miembros por el otro, vale decir que la regla de partici on de rango puede leerse tambi en de derecha a izquierda. Lo mismo ocurre con todas las reglas que siguen. Axioma 6.5 (Partici on de rango generalizada) Si el operador es idempotente y el rango de especicaci on es una cuanticaci on existencial (ver 6.7), entonces: i : j : S.i.j : R.i.j : T.i = i, j : S.i.j R.i.j : T.i Axioma 6.6 (Regla del t ermino) Cuando el operador aparece en el t ermino de la cuanticaci on, la expresi on cuanticada puede reescribirse de la siguiente manera: i : R : T G = i : R : T i : R : G Axioma 6.7 (Regla del t ermino constante) Si el t ermino de la cuanticaci on es constantemente igual a C , la variable cuanticada i no aparece en C, el operador es idempotente y el rango de especicaci on es no vac o, entonces: i : R : C = C Axioma 6.8 (Distributividad) Si es distributivo a izquierda con respecto a y se cumple al menos una de las siguientes condiciones: el rango de especicaci on es no vac o, el elemento neutro del operador existe y es absorvente para , entonces: i : R : x T = x i : R : T An alogamente, si es distributivo a derecha con respecto a y se cumple al menos una de las condiciones anteriores, entonces: i : R : T x = i : R : T x Axioma 6.9 (Regla de anidado) Cuando hay m as de una variable cuanticada y el rango de especicaci on es una conjunci on de predicados, uno de los cuales es independiente de alguna de las variables de cuanticaci on, la expresi on cuanticada puede reescribirse de la siguiente manera: i, j : R.i S.i.j : T.i.j = i : R.i : j : S.i.j : T.i.j

6.3. REGLAS GENERALES PARA LAS EXPRESIONES CUANTIFICADAS Axioma 6.10 (Regla de cambio de variable) Si V.j (F V.R F V.T ) = pueden renombrarse las variables i : R : T = j : R(i := j ) : T (i := j )

51

Puede tambi en escribirse usando una referencia expl cita a i i : R.i : T.i = j : R.j : T.j Todas estas reglas pueden particularizarse, reri endose a operadores concretos. Es lo que haremos en adelante, con los operadores m as usuales. Teorema 6.11 (Regla de cambio de variable) Si f es una funci on que tenga inversa (sea biyectiva) en el rango de especicaci on y j es una variable que no aparece en R ni en T , las variables cuanticadas pueden renombrarse como sigue: i : R.i : T.i = j : R.(f.j ) : T.(f.j ) La inversa en el rango considerado se denotar a con f 1 . La propiedad de ser ineversa puede escribirse como i, j : R.i R.(f.j ) : f.i = j i = f 1 .j Comenzamos la demostraci on con la expresi on m as complicada j : R.(f.j ) : T.(f.j )

= { Rango unitario (introducci on de la cuanticaci on sobre i) } = { Anidado } = { Leibniz } j : R.(f.j ) : i : i = f.j : T.i i, j : R.(f.j ) i = f.j : T.i i, j : R.i i = f.j : T.i

= { Anidado } = { Inversa } i : R.i :

i : R.i : j : i = f.j : T.i j : j = f 1 : T.i

= { Rango unitario, j F V.T } i : R.i : T.i

Teorema 6.12 (Separaci on de un t ermino) i : 0 i < n : T.i = T.0 i : 0 i < n : T.(i + 1) Teorema 6.13 (Separaci on de un t ermino) i : 0 i < n : T.i = i : 0 i < n : T.i T.n

52

CAP ITULO 6. EXPRESIONES CUANTIFICADAS

6.4.

Cuanticadores aritm eticos

Sumatoria y productoria.
Dos cuanticadores aritm eticos usuales son los que provienen de los operadores suma y producto, denotados y respectivamente. Enunciaremos las reglas para la sumatoria, dejando las de la productoria como ejercicio. El operador + tiene por elemento neutro al cero y no es idempotente. Teniendo esto en cuenta, obtenemos las siguientes reglas: Rango vac o: Rango unitario: i : False : T.i = 0. i : i = N : T.i = T.N .

Partici on de rango: si R y S son disjuntos, i : R.i S.i : T.i = Ejemplo: i :0<i2n: i i : R.i : T.i + i : S.i : T.i .

= { reescritura del rango para lograr una disyunci on de predicados disjuntos } = { partici on de rango } Regla del t ermino: i :0<inn<i2n: i

i :0<in: i +

i : n <i2n : i i : R.i : T.i + i : R.i : G.i .

i : R.i : T.i + G.i =

Distributividad: como es distributivo con respecto a + a derecha y a izquierda, si R es no vac o, i : R.i : x T.i = x i : R.i : T.i y i : R.i : T.i x = i : R.i : T.i x. Regla de anidado: i, j : R.i S.i.j : T.i.j = i : R.i : j : S.i.j : T.i.j .

Regla de cambio de variable: para toda f biyectiva y para cualquier j que no aparezca en R ni en T , i : R.i : T.i = j : R.(f.j ) : T.(f.j ) .

Las reglas de partici on de rango generalizada y del t ermino constante no se aplican porque + no es idempotente.

6.5. EXPRESIONES CUANTIFICADAS PARA CONJUNTOS

53

M aximo y m nimo.
Otros operadores aritm eticos que resultan de gran utilidad para especicar programas son Max y Min (ver la denici on en la secci on 2.3, ejercicio 5.2). Pueden tomarse las siguientes propiedades como deniciones de las versiones cuanticadas del m aximo y del m nimo: z = Max i : R.i : F.i i : R.i : z = F.i i : R.i : F.i z z = Min i : R.i : F.i i : R.i : z = F.i i : R.i : z F.i Una consecuencia de estas propiedades es la siguiente: F.x = Max i : R.i : F.i R.x i : R.i : F.i F.x F.x = Min i : R.i : F.i R.x i : R.i : F.x F.i Ninguno de los dos operadores tiene un neutro en los enteros. Por conveniencia, extenderemos los enteros con dos constantes que denotaremos con y , las cuales ser an, por denici on, neutros para el m nimo y el m aximo respectivamente. Las operaciones aritm eticas usuales no estar an denidas para estas constantes. En determinados casos es posible elegir otros elementos neutros. Por ejemplo, cuando se usa el operador de m aximo para n umeros naturales es posible tomar al 0 como neutro. Se deja como ejercicio para el lector el enunciado de todas las reglas para la cuanticaci on de los operadores Max y Min.

Operador de conteo.
Hasta aqu hemos mencionado u nicamente cuanticadores que provienen de un operador conmutativo y asociativo. Pero tambi en es posible denir nuevos cuanticadores a partir de otros ya denidos. Este es el caso del cuanticador N , el cual cuenta la cantidad de elementos en el rango de especicaci on que satisfacen el t ermino de la cuanticaci on: N i : R.i : T.i =
.

i : R.i T.i : 1

Por ejemplo, N x : x S : par.x cuenta la cantidad de elementos pares que hay en el conjunto S . N otese que T es una funci on booleana. Las propiedades del cuanticador N pueden calcularse a partir de las de la suma (ver ejercicio 6.10 y secci on 8.5).

6.5.

Expresiones cuanticadas para conjuntos

La uni on de conjuntos es un operador conmutativo y asociativo, por lo tanto podemos cuanticarlo: i : R.i : C.i , donde para todo i la expresi on C.i denota un conjunto.

54

CAP ITULO 6. EXPRESIONES CUANTIFICADAS

El operador es idempotente y posee elemento neutro. Queda como ejercicio para el lector escribir las reglas correspondientes a la expresi on cuanticada de la uni on de conjuntos. Los conjuntos denidos por comprensi on pueden verse tambi en como una cuanticaci on a trav es de la siguiente denici on (usando la notaci on usual de matem atica para los conjuntos denidos por comrensi on): . {e.i | R.i} = i : R.i : {e.i} Las variables de cuanticaci on quedan impl citas (no se escriben), y en matem atica pueden en general deducirse a partir del contexto. Para evitar confusiones y no tener que usar expresiones con la uni on (las cuales son ligeramente m as engorrosas), usaremos una notaci on coherente con los otros cuanticadores. {i : R.i : e.i} = i : R.i : {e.i} La ventaja de pensar a los conjuntos denidos por comprensi on como se indica m as arriba es que al hacerlo, estos heredan algunas propiedades de la expresi on cuanticada de la uni on. Ejercicio 6.1 Dar las reglas que satisfacen los conjuntos denidos por comprensi on. Una regla particular para expresiones cuanticadas para conjuntos es la siguiente: x i : R.i : T.i i : R.i : x T.i Una consecuencia de esta regla es: x {i : R.i : e.i} i : R.i : x = e.i y un caso particular de esta es: x {y : R.y : y } R.x Ejercicio 6.2 Demostrar que las dos u ltimas reglas se derivan a partir de la primera.
.

6.6.

El cuanticador universal

Uno de ellos es el asociado a la conjunci on, que es un operador booleano asociativo y conmutativo: i : R.i : T.i Esta operaci on es muy conocida en l ogica, por lo que usaremos una notaci on particular: i : R.i : T.i = i : R.i : T.i , la cual recibe el nombre de cuanticaci on universal . N otese que la expresi on T.i es un predicado. El operador es idempotente y posee elemento neutro True . As , al aplicar las reglas enunciadas anteriormente, obtenemos:
.

6.7. EL CUANTIFICADOR EXISTENCIAL Rango vac o: i : False : T.i True . i : i = N : T.i T.N . i : R.i S.i : T.i i : R.i : T.i i : S.i : T.i .

55

Rango unitario:

Partici on de rango:

Partici on de rango generalizada: i : j : S.i.j : R.i.j : T.i i, j : S.i.j R.i.j : T.i Regla del t ermino: i : R.i : T.i G.i i : R.i : T.i i : R.i : G.i .

Regla del t ermino constante: si el rango es no vac o, i : R.i : C C . Distributividad: como es distributivo con respecto a a izquierda y a derecha, y i : R.i : x T.i x i : R.i : T.i i : R.i : T.i x i : R.i : T.i x. Regla de anidado: i, j : R.i S.i.j : T.i.j i : R.i : j : S.i.j : T.i.j .

Regla de cambio de variable: para toda f biyectiva y para cualquier j que no aparezca en R ni en T , i : R.i : T.i j : R.(f.j ) : T.(f.j ) . Para el cuanticador universal hay una regla extra, cuya importancia radica en el hecho que provee un modo de pasar del rango al t ermino y viceversa: Regla de intercambio : i : R.i : T.i i : True : R.i T.i i : : R.i T.i

En el caso particular del cuanticador universal, muchas de las reglas son derivables a partir de las otras, en general usando la regla de intercambio y el c alculo de predicados (ver por ejemplo [DS90] y ejercicio 6.7).

6.7.

El cuanticador existencial

Otro de los cuanticadores que aparece con frecuencia es el asociado a la disyunci on, que tambi en es un operador booleano asociativo y conmutativo. La expresi on cuanticada que se obtiene a partir del operador es: i : R.i : T.i = i : R.i : T.i y recibe el nombre de cuanticaci on existencial . El operador es idempotente y tiene elemento neutro False , por lo cual al aplicar las reglas generales al cuanticador existencial obtenemos:
.

56 Rango vac o:

CAP ITULO 6. EXPRESIONES CUANTIFICADAS i : False : T.i False . i : i = N : T.i T.N . i : R.i S.i : T.i i : R.i : T.i i : S.i : T.i .

Rango unitario:

Partici on de rango:

Partici on de rango generalizada: i : j : S.i.j : R.i.j : T.i i, j : S.i.j R.i.j : T.i Regla del t ermino: i : R.i : T.i G.i i : R.i : T.i i : R.i : G.i .

Regla del t ermino constante: si el rango es no vac o, i : R.i : C C . Distributividad: como es distributivo con respecto a a izquierda y a derecha, y i : R.i : x T.i x i : R.i : T.i i : R.i : T.i x i : R.i : T.i x. Regla de anidado: i, j : R.i S.i.j : T.i.j i : R.i : j : S.i.j : T.i.j .

Regla de cambio de variable: para toda f biyectiva y para cualquier j que no aparezca en R ni en T , i : R.i : T.i j : R.(f.j ) : T.(f.j ) . Tambi en en este caso hay una regla extra, que relaciona el t ermino de la cuanticaci on con el rango de especicaci on: Regla de intercambio : i : R.i : T.i i : : R.i T.i

Las cuanticaciones universal y existencial est an vinculadas a trav es de dos reglas importantes, que son una generalizaci on de las leyes de De Morgan: i : R.i : T.i i : R.i : T.i

i : R.i : T.i

i : R.i : T.i

6.8.

Ejercicios

Ejercicio 6.3 Sea un cuanticador asociado a un operador conmutativo y asociativo. Probar la siguiente regla de eliminaci on de una dummy (Z no depende de i ni de j ): i, j : i = Z R.i.j : T.i.j j : R.Z.j : T.Z.j Ejercicio 6.4 Demostrar: x, y : x = y : P.x.y x : : P.x.x

6.8. EJERCICIOS Ejercicio 6.5 Probar que la implicaci on es distributiva con respecto al cuanticador universal: i : R.i : Z T.i Z i : R.i : T.i Ejercicio 6.6 Probar las reglas de instanciaci on para la cuanticaci on universal y existencial: 1. i : : f.i f.x

57

2. f.x i : : f.i Ejercicio 6.7 1. Probar la siguiente versi on de la regla de intercambio para el cuanticador universal: i : R.i S.i : T.i i : R.i : S.i T.i 2. Suponiendo v alidas las reglas del t ermino, de intercambio, anidado, distributividad, De Morgan e instanciaci on, demostrar: (i) i : R.i : True True

(ii) Partici on de rango.

(iii) Partici on de rango generalizada. (iv) Cambio de variables. Sugerencia: demostrar las siguientes implicaciones: i : R.i : T.i j : R.(f.j ) : T.(f.j ) para cualquier funci on f . Usando lo anterior demostrar i : R.i : T.i j : R.(f.j ) : T.(f.j ) para f invertible. Ejercicio 6.8 Probar la regla de intercambio para el cuanticador existencial usando la del cuanticador universal y De Morgan: i : R.i : T.i i : : R.i T.i Ejercicio 6.9 Demostrar la siguiente relaci on entre el m aximo y el m nimo: Min i : R.i : F.i = Max i : R.i : F.i Ejercicio 6.10 El cuanticador aritm etico N no est a denido en base a un operador subyacente sino a trav es de la cuanticaci on de la suma: N i : R.i : T.i =
.

i : R.i T.i : 1

1. Enunciar y demostrar la regla de partici on de rango para N . 2. Idem con la regla del rango vac o. 3. Probar: i : R.i T.i : k = k N i : R.i : T.i

58 Ejercicio 6.11 [Kal90] Suponiendo que: (i) x = i : R.i : f.i

CAP ITULO 6. EXPRESIONES CUANTIFICADAS

(ii) R.i i = N para cualquier i calcular una expresi on libre de cuanticadores que sea equivalente a i : R.i i = N : f.i Ejercicio 6.12 [Kal90] Suponiendo que: (i) x = Max i, j : R.i.j j < N + 1 : f.i.j (ii) y = Max i : R.i.(N + 1) : f.i.(N + 1) calcular una expresi on libre de cuanticadores que sea equivalente a (Max i, j : R.i.j (j < N + 1 j = N + 1) : f.i.j ) Ejercicio 6.13 [Kal90] Suponiendo que: (i) x = Max i : R.i.N : f.i.N (ii) R.y.(z + 1) = R.y.z y = z + 1 para cualquier y , z (iii) f.y.y = 0 para cualquier y (iv) f.y.(z + 1) = f.y.z + g.z para cualquier y , z (v) R.y.z False para cualquier y , z calcular una expresi on libre de cuanticadores que sea equivalente a Max i : R.i.(N + 1) : f.i.(N + 1) Ejercicio 6.14 [Kal90] Suponiendo que: (i) x i, j : R.i.j j < N : f.i f.j (ii) y i : R.i.N : f.i calcular una expresi on libre de cuanticadores que sea equivalente a: i, j : R.i.j (j < N j = N ) : f.i f.j Ejercicio 6.15 Demostrar que para cualquier , R, S y T se cumple: i : R : T i : S : T i : R S : T i : R S : T

Cap tulo 7

C alculo de predicados
Si bien el c alculo proposicional nos permiti o analizar cierto tipo de razonamientos y resolver acertijos l ogicos, su poder expresivo no es suciente para comprobar la validez de algunos razonamientos muy simples. Un caso paradigm atico es el de los silogismos, tratados en la secci on ??. Uno de los ejemplos considerados fue el siguiente. Las ara nas son mam feros. Los mam feros tienen seis patas. Las ara nas tienen seis patas. Si quisi eramos analizar este razonamiento usando el c alculo proposicional nos quedar a claramente una forma invalida, dado que cada premisa, - as tambi en como la conclusi on - es una proposici on elemental distinta. Para poder demostrar la validez de este tipo de razonamientos va a ser necesario disponer de herramientas que permitan analizar la estructura interna de las proposiciones elementales.

7.1.

Predicados

Un predicado es una funci on con codominio en los booleanos, es decir, que toma valores verdadero o falso. Por ejemplo el predicado menor o igual toma dos n umeros como argumentos; el predicado es mujer toma personas como argumentos. Cuando se estudia formalmente el sistema de la l ogica, es necesario especicar el lenguaje que se usa. Para ello se introducen de manera expl cita los nombres o s mbolos de predicados as tambi en como los nombres o s mbolos de funci on pertinentes. Por ejemplo, si se quiere trabajar con un sistema formal para la aritm etica, se tendr an s mbolos de predicado para la igualdad, las desigualdades, etc, y s mbolos de funci on para el cero, el sucesor de un n umero, la suma, etc. Los s mbolos de predicado nos permitir an construir nuevas proposiciones elementales, extendiendo de esta manera el c alculo proposicional presentado en el cap tulo 3. Por otro lado, se usar a la cuanticaci on universal y existencial introducida en el cap tulo precedente. Dado un conjunto de s mbolos de predicado y otro de s mbolos de funci on, el c alculo puro de predicados tendr a como axiomas y reglas de inferencia a las del c alculo proposicional y las de las cuanticaciones. Por otro lado, cuando se quiera trabajar en una teor a determinada (por ejemplo la aritm etica) se introducir an axiomas que expresen las propiedades que deben satisfacer las operaciones y predicados que aparecen en el lenguaje. 59

60

CAP ITULO 7. CALCULO DE PREDICADOS

7.2.

Propiedades de las cuanticaciones universal y existencial

Muchas de las propiedades de las cuanticaciones fueron enunciads en el cap tulo 6, especialente en las secciones 6.6 y 6.7 y en algunos ejercicios. Por otro lado, en el ejercicio 6.7 se ve que pueden axiomatizarse los cuanticadores l ogicos con menos axiomas que otros (debido esencialmente a la regla de intercambio). En esta secci on enunciaremos algunas otras propiedades y metateoremas que van a ser u tiles a la hora de derivar programas. Las demostraciones se omitir an casi siempre quedando como ejercicio para el lector. Teorema 7.1 Siempre que i F V.P y que el rango no sea vac o (es decir que i : : R ) entonce vale la siguiente ley distributiva i : R : P Q P i : R : Q N otese que es necesario pedir que el rango no sea vac o, a diferencia de la distributividad de la disyunci on, dado que el neutro de la conjunci on (True ) es absorbente para la disyunci on. Teorema 7.2 i : R : P Q i : R : P Teorema 7.3 (Fortalecimiento por t ermino) i : R : P Q i : R : P Teorema 7.4 (Fortalecimiento por rango) i : R Q : P Teorema 7.5 (Monoton a) i : R : P Q ( i : R : P Metateorema 7.6 P es un teorema si y solo si i : : P es un teorema i : R : Q ) i : R : P i : R : Q

La demostraci on puede hacerse por doble implicaci on. Una de ellas es inmediata por la propiedad de instanciaci on. Para ver la otra mostraremos como transformar una demostraci on de P en una de i : : P . Supongamos que tenemos una demostraci on de P de la siguiente forma. P { Raz on 1 } P0 . . .

Pn

7.2. PROPIEDADES DE LAS CUANTIFICACIONES UNIVERSAL Y EXISTENCIAL { Raz on n } True Podemos construir entonces de manera mec anica la siguiente demostraci on de i : : P { Raz on 1 } i : : P0 . . . i : : P

61

{ Raz on n }

i : : Pn

{ T ermino constante } True Teorema 7.7 Siempre que i F V.P y que el rango no sea vac o (es decir que i : : R ) entonce vale la siguiente ley distributiva i : R : P Q P i : R : Q N otese que es necesario pedir que el rango no sea vac o, a diferencia de la distributividad de la disyunci on, dado que el neutro de la conjunci on (True ) es absorbente para la disyunci on. Teorema 7.8 (Debilitamiento. T ermino) i : R : P Teorema 7.9 Debilitamiento. i : R : P Teorema 7.10 Monoton a. i : R : P Q ( i : R : P i : R : Q ) Teorema 7.11 Intercambio de cuanticadores. Si i F V.R y j F V.Q, entonces j : R : i : Q : P i : Q : i : R : P i : R Q : P i : R : P Q

i : : True

El siguiente metateorema nos permite usar un nombre de constante nuevo (el testigo ) para referirse a un elemento cuya existencia es postulada por el cuanticador. Metateorema 7.12 (testigo). Si k (F V.P F V.Q) entonces i : : P teorema. Q si y solo si P (i := k) Q es un

62 i : : P Q

CAP ITULO 7. CALCULO DE PREDICADOS

{ implicai on }

{ de Morgan }

i :: P Q i : : P Q

{ cambio de variables, k F V.P } { distributividad, k F V.Q } { implicaci on } k : : P (i := k) Q k : : P (i := k) Q k : : P (i := k) Q

Podemos aplicar ahora el metateorema 7.6 de la cuanticaci on universal y vemos que la u ltima l nea es un teorema si y solo si P (i := k) Q lo es.

7.3. 7.4.

Aplicaciones del c alculo de predicados Algunas conclusiones

En el cap tulo ?? nos propusimos algunas preguntas que una teor a del razonamiento deductivo deber a intentar responder. Estamos ya en condiciones de responderlas, al menos parcialmente. C omo puede determinarse si un razonamiento es v alido? Podemos escribir todos los pasos de un razonamiento en notaci on formal y determinar si cada paso es un paso v alido de acuerdo con las reglas denidas de manera expl cita para el c alculo de predicados. C omo puede determinarse si una conclusi on es consecuencia de un conjunto de premisas, y de ser as c omo puede demostrarse que lo es? Para el caso de la l ogica proposicional, esta pregunta puede resolverse con relativa facilidad. Se construye la tabla de verdad para la f ormula asociada el razonamiento pertinente y puede armarse usando el teorema de completitud que es una tautolog a si y s olo si la conclusi on es consecuencia de las premisas. Para el caso de la l ogica de predicados en cambio no existe ning un m etodo mec anico para decidir si una conclusi on puede deducirse de un conjunto de premisas. La teor a de la computaci on o computabilidad demuestra que un tal algoritmo no puede existir. Qu e caracter sticas de las estrucuturas del mundo y del lenguaje y de las relaciones entre palabras, cosas y pensamientos hacen posible el razonamiento deductivo? Esta pregunta no est a a un resuelta de manera satisfactoria y existen numerosas teor as que proponen posibles respuestas. Los ejemplos que hemos considerado en este libro sugieren

7.5. DIOS Y LA LOGICA*

63

que la relaci on entre lenguaje y mundo no es arbitraria en su totalidad y que cierta estructura del lenguaje reeja cierta estructura del mundo. Las constantes de nuestra l ogica puede pensarse que denotan objetos, los predicados relaciones o propiedades. Sin embargo como se establece esta relaci on de denotaci on es a un un misterio.

7.5.

Dios y la l ogica*

En la historia de la losof a se registra una cantidad considerable de intentos de demostraciones de la existencia de Dios. Si bien hoy son consideradas por los l ogicos como meras falacias, algunas de ellas a un son ense nadas en las escuelas religiosas. Una de estas demostraciones tiene a un cierto inter es desde el punto de vista de la l ogica, pese a haber sido quiz a el argumento m as veces refutado en la historia. Es el llamado Argumento Ontol ogico de San Anselmo de Canterbury (1033-1109). La primera refutaci on fue realizada por un monje llamado Gaunilo quien fue contemporaneo con San Anselmo (aunque no canonizado). La demostraci on es presentada de varias formas. En los siguientes dos p arrafos, hay dos demostraciones diferentes; Y entonces, O Se nor, dado que has dado entendimiento a la fe, dame el entendimento - siempre que tu sepas que es bueno para mi - de que tu existes, tal como nosotros creemos, y que tu eres lo que nosotros creemos que eres. Creemos que eres un ser del cual nada mayor puede ser pensado. O podr a ser que no haya tal ser, dado que el insensato ha dicho en su coraz on No hay Dios (Psalmo 14.1; 53:1). Pero cuando el mismo insensato oye lo que digo - Un ser del cual nada mayor puede ser pensado el entiende lo que escucha, y lo que entiende est a en su entendimiento a un si no entiende que esto exista. Porque una cosa es que un objeto est e en el entendimiento y otra cosa entender que este exista. Cuando un pintor considera de antemano lo que va a pintar ya lo tiene en su entendimiento, pero el no supone que lo que a un no ha pintado ya existe. Pero una vez que lo ha pintado ambas cosas ocurren: est a en su entendimiento y tambi en entiende que lo que ha producido existe. A un el insensato, entonces, debe estar convencido de que un ser del cual nada mayor puede ser pensado existe al menos en su entendimiento, dado que cuando oye esto lo entiende y aquello que se entiende est a en el entendimiento. Sin embargo es claro que aquello de lo cual nada mayor puede ser pensado no puede existir s olo en el entendimiento. Porque si realmente est a s olo en el entendimiento, puede ser pensado que existe en realidad y esto ser a a un mayor. Por lo tanto, si aquello de lo cual nada mayor puede ser pensado est a s olo en el entendimiento, esa misma cosa de la cual nada mayor puede ser pensado es una cosa de la cual algo mayor puede ser pensado. Pero obviamente esto es imposible. Sin ninguna duda, por lo tanto, existe tanto en el entendimiento como en la realidad, algo de lo cual nada mayor puede ser pensado. Dios no puede ser pensado como inexistente. Y ciertamente el existe de manera tan verdadera que no puede ser pensado como inexistente. Dado que puede ser pensado algo que existe lo cual no puede ser pensado como inexistente, y esto es mayor que aquello que puede ser pensado como no existente. Entonces si aquello de lo cual nada mayor puede ser pensado, puede ser pensado como inexistente, esa misma cosa de la cual nada mayor puede ser pensado no es algo de lo cual nada mayor pueda ser pensado. Pero esto es contradictorio. Luego, hay verdaderamente un ser del cual

64

CAP ITULO 7. CALCULO DE PREDICADOS nada mayor puede ser pensado - luego ciertamente no puede ni siquiera pensarse que no exista.

Podemos analizar primero el argumento del segundo p arrafo el cual es m as sencillo. Las premisas consideradas y conclusiones obtenidas son las siguientes: Premisa 1: Un ser que no puede pensarse como inexistente es mayor que un ser que puede pensarse como inexistente. Por lo tanto si Dios puede ser pensado como inexistente, entonces puede pensarse un ser mayor el cual no puede ser pensado como inexistente. Premisa 2: Dios es un ser del cual nada mayor puede ser pensado. Conclusi on: No puede pensarse que dios no exista. La conclusi on sacada de la primer premisa necesita una suposici on adicional de que es efectivamente posible pensar un ser el cual no puede ser pensado como inexistente. El argumento enunciado en el primer p arrafo puede ser parafraseado como sigue: Premisa 1: Podemos concebir un ser del cual nada mayor puede ser concebido. Premisa 2: Aquello que es concebido esta en el entendimiento de quien lo concibe. Premisa 3: Aquello que existe en el entendimiento de alguien y tambi en en la realidad es mayor que algo que s olo existe en el entendimiento. Por lo tanto Un ser concebido tal que ninguno mayor puede ser pensado debe existir tanto en la realidad como en el entendimiento. Premisa 4: Dios es un ser del cual nada mayor puede ser pensado. Conclusi on: Dios existe en la realidad. Quinientos a nos despu es, una versi on del mismo argumento fue propuesta por Descartes. Puede resumirse la esencia de esta nueva versi on y de algunas de las anteriores en lo siguiente. Descartes dene a dios como un ser que tiene todas las propiedades (al menos las propiedades buenas). Luego, tiene entre ellas la propiedad de la existencia. Luego, dios existe. Las objeciones a estos argumentos son variadas. Basicamente la de Gaunilo y posteriormente de Kant se basan en la idea de que la existencia no es una propiedad. Otra objeci on que puede hacerse al argumento de San Anselmo (que Descartes se esmera en rechazar en la Meditaciones Metaf sicas) es que en ning un lado se prueba la unicidad de Dios, y puede claramente haber m as de un ser con esas propiedades. Siguiendo esta l nea de argumentaci on puede tambi en probarse la existencia de otras cosas, por ejemplo de una isla perfecta (muchos pueden imaginarse una isla de la cual ninguna mejor pueda ser pensada). Vamos a presentar ahora una demostraci on de que existe un unicornio la cual se basa en la misma idea y ver una de las objeciones m as contundentes al argumento ontol ogico hecha por Raymond Smullyan en [Smu78]. En lugar de demostrar que existe un unicornio, vamos a demostrar la proposici on posiblemente m as fuerte de que existe un unicornio existente (la cual obviamente implica que existe un unicornio). Por la ley del tercero exclu do, tenemos solamente dos posibilidades:

7.6. EJERCICIOS 1. Un unicornio existente existe. 2. Un unicornio existente no existe.

65

La segunda posibilidad es obviamente contradictoria, dado que ningun ser existente puede no existir. De la misma manera que un unicornio azul tiene que ser necesariamente azul (aunque se haya perdido), un unicornio existente necesariamente tiene que existir. Luego, la primera proposici on es verdadera. La objeci on de Kant es aplicable a esta demostraci on, pero tambi en puede verse una confusi on m as elemental en el uso de la palabra un. En algunos contextos un signica todos y en otros signica al menos uno. Por ejemplo, en un gato es un felino estamos diciendo que cualquier gato es un felino, mientras que en un gato se comi o el pescado nos estamos reriendo a un gato en particular, el cual existe y adem as se comi o nuestra cena. En la demostraci on de la existencia de un unicornio, estamos confundiendo ambos usos de la palabra un. En la demostraci on usamos un en el primer sentido. En este caso la conclusi on es verdadera, dado que obviamente todo unicornio existente existe, pero la confusi on viene de leer la conlusi on usando la palabra un en el segundo sentido. Si interpret aramos as a la palabra un la demostraci on no ser a correcta, dado que en ese caso la primera proposici on ser a falsa (como por ejemplo decir un unicornio azul se me perdi o) y la segunda verdadera (no existe ningun unicornio, existente o no). Esta misma objeci on puede aplicarse al argumento ontol ogico de San Anselmo y Descartes. Lo u nico que est an demostrando es que todo dios que satisciera las propiedades de la denici on de Descartes obviamente existir a. Para nalizar, presentamos una objeci on de Borges en un cuento llamado sugerentemente Argumentum Ornithologicum. Cierro los ojos y veo una bandada de p ajaros. La visi on dura un segundo o acaso menos; no s e cuantos p ajaros vi. Era denido o indenido su n umero? El problema involucra es de la existencia de Dios. Si Dios existe, el n umero es denido, porque Dios sabe cuantos p ajaros vi. Si Dios no existe, el n umero es indenido, porque nadie pudo llevar la cuenta. En tal caso, vi menos de diez p ajaros (digamos) y m as de uno, pero no vi nueve, ocho, siete, seis, cinco, cuatro, tres o dos p ajaros, Vi un n umero entre diez y uno que no es nueve, ocho, siete, seis, cinco, etc etera. Ese n umero entero es inconcebible; ergo, Dios existe.

7.6.

Ejercicios

Ejercicio 7.1 Demostrar la siguiente versi on generalizada del metateorema del testigo. Si k (F V.P F V.Q F V.R) entonces i : R : P Q si y solo si P (i := k) Q es un teorema.

66

CAP ITULO 7. CALCULO DE PREDICADOS

Cap tulo 8

El formalismo b asico
41. Nada se edica sobre la piedra, todo sobre la arena, pero nuestro deber es edicar como si fuera piedra la arena. Jorge Luis Borges: Fragmentos de un evangelio ap ocrifo

En esta secci on denimos una notaci on simple y abstracta que nos permitir a escribir y manipular programas. Esta notaci on, que llamaremos el formalismo b asico, se basa en la programaci on funcional (ver por ej. [Bir98, Tho96]), y puede pensarse como que representa la esencia de esta. Al mismo tiempo, esta notaci on es mucho m as simple que la mayor a de los lenguajes de programaci on y es sucientemente rica para expresar de manera sencilla programas funcionales. Por otro lado, las reglas que nos permiten manipularlas son expl citas y mantienen el estilo del c alculo de predicados y de las expresiones cuanticadas, lo cual permite integrarlas arm onicamente en el proceso de construcci on de programas. Varias de estas ideas est an inspiradas en la tesis de doctorado [Hoo89].

8.1.

Funciones

Las funciones van a ser uno de los conceptos esenciales en los cuales se basa el formalismo b asico. Como ya indicamos en el cap tulo 2, la notaci on usual para la aplicaci on de funciones en matem atica, f (x) no ser a adecuada, por lo cual usaremos un operador expl cito para la aplicaci on de funciones, el cual escribiremos como un punto. En matem atica es usual hablar de la funci on f.x tal que . . . , para referirse a la funci on f (en cuya denici on se usa probablemente la variable x). En matem atica esto no suele traer problemas dado que las funciones son raramente usadas como valores ellas mismas, pero en nuestro caso debemos distinguir claramente entre la funci on f y la aplicaci on de esta al valor x escrito como f.x. La regla b asica para la aplicaci on de funciones es la regla de sustituci on de iguales por iguales, que llamaremos regla de Leibniz, la cual ya fue presentada en el cap tulo 2. Usando expresiones cuanticadas podemos expersar esta regla como sigue. f, x, y : : x = y f.x = f.y 67

68

CAP ITULO 8. EL FORMALISMO BASICO

El operador de aplicaci on de funciones tiene la m axima precedencia, es decir que para cualquier otro operador vale f.x y = (f.x) y El valor de f.x puede ser a su vez otra funci on, la cual puede ser aplicada a otro valor, por ejemplo, (f.x).y . Supondremos que el operador de aplicaci on asocia a izquierda, esto es f.x.y = (f.x).y y para todos los nes puede pensarse a una tal f como una funci on de dos argumentos. Veamos ahora un ejemplo de aplicaci on de la regla de Leibniz. Ejemplo 8.1 Supongamos que existe una funci on f : N at N at con la siguiente propiedad: p primo x, y N at, f.p = 1 f.(x y ) = f.x + f.y

Se pide demostrar que p primo, p no es racional. Una tal f es la funci on que cuenta la cantidad de factores primos de un n umero. Para la demostraci on que haremos cualquier otra funci on que satisiciera esta propiedad tambi en servir a. Razonemos por el absurdo, es decir, supongamos que p es racional, con p primo y veamos que se deduce una contradicci on (False ). Omitimos los rangos, pero se asume que x, y , y = 0.

p racional

{ denici on de racional } x, y : : p = x y { algebra }

{ regla de Leibniz } { propiedad de f } {

x, y : : p y 2 = x2 x, y : : f.(p y 2 ) = f.x2

x, y : : f.p + f.y + f.y = f.x + f.x algebra, f.p = 1 }

{ n umeros pares e impares son diferentes } False Por lo tanto, p es irracional.

x, y : : 1 + 2 f.y = 2 f.x

8.2. DEFINICIONES Y EXPRESIONES

69

8.2.

Deniciones y expresiones

Uno de los elementos que constituir an nuestro formalismo b asico es el conjunto de expresiones. Al igual que en la matem atica las expresiones son usadas s olo para denotar valores. Estos valores pertenecer an a conjuntos que resulten u tiles para expresar programas, por ejemplo, n umeros, valores l ogicos, caracteres, tuplas, funciones y listas. Las expresiones v alidas de cada uno de dichos conjuntos se describir an al nal de este cap tulo. Es importante distinguir claramente entre las expresiones y el valor que estas denotan. Por ejemplo, la expresi on 6 7 denota el n umero abstracto cuarenta y dos, al igual que la expresi on 42. En este sentido la igualdad 6 7 = 42 signica que ambas expresiones denotan el mismo valor, pero no hay que confundir el n umero denotado por la expresi on decimal 42 con la expresi on misma. En matem atica es usual identicar la expresi on con el valor cuando esto no da lugar a confusi on. En el contexto de la programaci on es necesario ser un poco m as cuidadosos, dado que tambi en nos interesar a hablar de expresiones y hacer transformaciones sint acticas con estas. En el ejemplo anterior, la expresi on 42 suele preferirse a la expresi on 6 7, debido a que es una expresi on m as directa del valor que ambas denotan (el n umero cuarenta y dos). En nuestro formalismo la u nica forma de referirse a un valor ser a a trav es de expresiones. Cuando sea posible (como en el caso de los n umeros) elegiremos un conjunto de expresiones representantes, las cuales denominaremos expresiones can onicas. El proceso de c omputo consistir a, en general, en reducir una expresi on dada a su forma can onica cuando esta exista (ver el cap tulo 9). Algunos ejemplos de expresiones en dominios matem aticos conocidos son: booleanas: False , True , (3 = 2) num ericas: 42, 3*5, 3.14159 de caracteres: 8, z, ,

El otro elemento que constiuir a nuestro formalismo b asico ser a el conjunto de deniciones, las cuales nos permitir an introducir nuevos valores al formalismo y denir operaciones para manejarlos. En general, aunque no necesariamente, se usar an las deniciones para introducir valores del tipo funci on. Una denici on es una asociaci on de una expresi on a un nombre. La forma de una denici on ser a . f.x = E donde las variables en x pueden ocurrir en E . Si la secuencia de variables x es vac a (es decir si . la denici on es de la forma f = E ) se dir a que f es una constante. Si f ocurre en E se dice que la denici on es recursiva . Es esencial notar aqu que usamos un signo ligeramente diferente al signo igual para las deniciones. Esto nos va a permitir distinguir una denici on (las cuales van a ser nuestros programas) de una propiedad. Las reglas de plegado/desplegado de la secci on 8.3 muestran que el signo de denici on y el signo igual est an int mamente relacionados. Dado un conjunto de deniciones, es posible usar los nombres denidos para formar expresiones. Por ejemplo: . Son deniciones: pi = 3.1416 . cuadrado.x = x x . area.r = pi cuadrado.r Son expresiones: pi pi cuadrado.(3 5) area.15

70

CAP ITULO 8. EL FORMALISMO BASICO

Un programa funcional ser a un conjunto de deniciones. La ejecuci on de un programa funcional consistir a en la evaluaci on de una expresi on y reducci on a su forma can onica, donde los nombres denidos en el programa pueden ocurrir en esta (ver cap tulo 9).

8.3.

Reglas para el c alculo con deniciones

El formalismo b asico nos permitir a no s olo escribir programas sino tambi en razonar con ellos (tambi en nos permitir a escribir cosas que no son, estrictamente hablando, programas). Para poder razonar dentro del formalismo b asico contaremos con todas las reglas asociadas a cada dominio matem atico que usemos (n umeros, funciones, listas, etc.) y algunas reglas espec cas para el manejo de deniciones. La reglas b asicas para manejar expresiones en un contexto de deniciones dado son las reglas de plegado y desplegado (en ingl es, folding y unfolding). Estas dos reglas son una la inversa de la otra. . Si se tiene la denici on f.x = E , entonces para cualquier expresi on A, f.A = E (x := A) donde la expresi on E (x := A) denota a la expresi on E en la que toda aparici on del nombre x es reemplazado sint acticamente por la expresi on A. Si x es una secuencia de variables, entonces A tambi en debe serlo y debe tener la misma longitud. En tal caso, la sustituci on se realiza de manera simult anea. Por ejemplo: (x + y )(x, y := cuadrado.y, 3) = cuadrado.y + 3 La regla de desplegado consiste en reemplazar f.A por E (x := A), mientras que la de plegado consiste en reemplazar E (x := A) por f.A. En los c alculos que realizaremos, frecuentemente diremos s olo denici on de f entendi endose si es plegado o desplegado a partir del contexto. Es importante no confundir una funci on con su denici on. Una funci on es un valor abstracto, . mientras que una denici on es una entidad sint actica. Es as que las deniciones f.x = 2 x y . g.x = x + x denen la misma funci on, por lo cual es verdadero que f = g. La regla que nos permite mostrar esto es la de extensionalidad (la cual no debe ser confundida con la regla de Leibniz). f, g : : x : : f.x = g.x f = g

Como ejemplo consideremos la composici on de funciones (para la cual usaremos el s mbolo ), cuya denici on es: () : (B C ) (A B ) (A C ) (f g).x = f.(g.x) N otese que estamos usando notaci on inja para el operador de composici on. vamos a usar la convenci on de que dado un operador injo la fuunci on de dos variables asociada se escribir a con el operador entre par entesis. En este sentido vale la igualdad ().f.g = f g y por lo tanto la denici on del operador de composici on podr a escribirse en la notaci on introducida incialmente como sigue:
.

8.4. DEFINICIONES LOCALES

71

() : (B C ) (A B ) (A C ) ().f.g.x = f.(g.x) En esta denci on es m as claro que tanto f y g como x son s olo par ametros en la denici on de . Demostraremos que el operador de composici on de funciones es asociativo. Para ello, por extensionalidad, alcanza con demostrarlo para la aplicaci on a un valor arbitrario: ((f g) h).x = { denici on de } (f g).(h.x) = { denici on de } f.(g.(h.x)) = { denici on de } f.((g h).x) = { denici on de } (f (g h)).x
.

8.4.

Deniciones locales

Es posible tambi en incluir en una denici on una o varias deniciones locales. Estas deniciones s olo tienen sentido en la expresi on a la cual est an asociadas, por ejemplo: raiz 1.a.b.c = (b sqrt.disc)/(2 a) . |[disc = b2 4 a c]| En la denici on de raiz 1, que calcula la menor ra z de la ecuaci on ax2 + bx + c = 0, se incluye la variable disc, la cual est a localmente denida, es decir, disc s olo tiene sentido dentro de la denici on de raiz 1. En particular, en este caso la denici on de disc hace referenecia a nombres (b, a, c) que s olo tienen sentido dentro de la denici on de raiz 1. Las deniciones locales pueden servir para mejorar la legibilidad de un programa pero tambi en para mejorar la eciencia, como veremos mas adelante.
.

8.5.

An alisis por casos

Un mecanismo muy u til para construir expresiones y por lo tanto para denir funciones es el an alisis por casos. Cuando se usa esta construcci on, el valor de la expresi on puede depender de los valores de verdad de ciertas expresiones booleanas que la componen. En general, una expresi on E puede tomar la siguiente forma

72

CAP ITULO 8. EL FORMALISMO BASICO E = ( B0 E0 . . . ) Bn E1

donde las Bi son expresiones boolenas y las Ei son expresiones del mismo tipo que E . Se entiende que el valor de E va a ser el valor de alguna Ei tal que Bi es cierta. Esta construcci on es indispensable en la denici on de algunas funciones, por ejemplo: max.a.b = ( )
.

ab b ba a

Las condiciones booleanas reciben el nombre de guardas o protecciones (preferimos conservar la palabra guarda usada como un neologismo, del ingl es guard). Esta expresi on tomar a valores de acuerdo al valor de a y b. Si bien las guardas no son disjuntas, esto no signica que la funci on pueda comportarse de manera diferente en dos evaluaciones, sino que no es relevante para demostrar que el programa satisface alguna especicaci on dada, cual de las dos guardas se elige en el caso que ambas sean verdaderas. Esto puede dar cierta libertad a la hora de implementar un programa escrito en nuestro formalismo en un lenguaje de programaci on. Ejemplo 8.2 La funci on factorial puede denirse por casos como sigue f ac.n = ( )
.

n=0 1 n = 0 n f ac.(n 1)

Existe una regla que permite manipular expresiones que incluyen an alisis por casos. Sea por ejemplo una expresi on con dos alternativas E = ( B0 E0 B1 E1 ) y supongamos que queremos demostrar que E satisface la propiedad P , esto es P.E . Para ello es suciente con demostrar la conjunci on de las siguientes B0 B 1 B0 P.E0 B1 P.E1 El primer punto requiere que al menos una de la guardas sea verdadera, mientras que el segundo y el tercero nos piden que, suponiendo la guarda verdadera, podamos probar el caso correspondiente. Esto nos da un m etodo de demostraci on (y por lo tanto de derivaci on de programas) que ser a explotado m as adelante.

8.6. PATTERN MATCHING

73

Ejemplo 8.3 Para denir la regla de rango unitario para el cuanticador num erico N es necesario introducir una funci on n denida por casos: n : Bool Int n.b = ( )
.

b 1 b 0

Ahora puede denirse la regla de rango unitario para el cuanticador N como sigue: N i : i = C : T.i = n.(T.C ) Ejercicio 8.1 Demostrar la regla usando la denici on de N y an alisis por casos. i : i = C R.i : T.i ( ) donde e es el neutro de . R.C T.C R.C e

8.6.

Pattern Matching

Vamos a introducir una abreviatura c omoda para escribir ciertos an alisis por casos que ocurren frecuentemente. Muchas veces las guardas se usan para discernir la forma del argumento y hacer referencia a sus componentes. Por ejemplo, en el caso del factorial las guardas se usan para ver si el argumento es igual a 0 o no. Una forma alternativa de escribir esa funci on es usar en los argumentos de la denici on de la funci on un patr on o pattern, el cual permite distinguir si el n umero es 0 o no. Para ello se usa la idea de que un n umero natural es o bien 0 o bien de la forma (n + 1), con n cualquier natural (incu do el 0). Luego la funci on factorial podr a escribirse como f ac.0 = 1 . f ac.(n + 1) = (n + 1) f ac.n Es importante notar que el pattern sirve no s olo para distinguir los casos sino tambi en para tener un nombre en el cuerpo de la denici on (en este caso n) el cual reera a la componente del pattern (en este caso el n umero anterior). Otros patterns posibles para los naturales podr an ser por ejemplo 0, 1 y n + 2, lo cual estar a asociado a tres guardas, dos que consideran los casos en que el argumento es 0 o 1 y uno para el caso en que el n umero considerado es 2 o m as. As una deninici on de la forma f.0 = E0 . f.1 = E1 . f.(n + 2) = E2 se traduce a an alisis por casos como
. .

74
.

CAP ITULO 8. EL FORMALISMO BASICO

f.n = (

n = 0 E0 n = 1 E1 n 2 E2 (n := n 2)

Otro posible patr on para los naturales podr a ser separar pares e impares, es decir que una funci on f.(2 n) = E0 . f.(2 n + 1) = E1 se traduce a an alisis por casos, asumiendo un predicado par de signicado obvio, como f.n = ( )
. .

par.n E0 (n := n 2) 1 par.n E1 n := n 2

8.7.

Tipos

Toda expresi on tiene un tipo asociado. Hay tres tipos b asicos, que son: N um, que incluye todos los n umeros; Bool, para los valores de verdad True y False ; y Char , para los caracteres. A toda expresi on correcta se le puede asignar un tipo, ya sea un tipo b asico o un tipo compuesto, obtenido a partir de los tipos b asicos. Si a una expresi on no se le puede asignar un tipo, la misma ser a considerada incorrecta. Ejemplos: 5 es de tipo N um h es de tipo Char cuadrado es de tipo N um N um En ocasiones no se desea especicar un tipo en particular. En estos casos, el tipo se indicar a con una letra may uscula. Ejemplo: la funci on id.x = x tiene sentido como id : N um N um, pero tambi en como id : Char Char o id : Bool Bool. Entonces, si no nos interesa especicar un tipo en particular, escribiremos id : A A. La variable A se denomina variable de tipo. Cuando el tipo de una expresi on incluye variables, diremos que es un tipo polim orco. La funci on max que denimos en la secci on anterior tiene tipo N um N um N um, que no es exactamente lo mismo que N um N um N um. El tipo que hemos indicado es m as general. En ausencia de par entesis, debe entenderse como N um (N um N um). Para (casi) todos los temas desarrollados en este libro, no se pierde nada con pensar que N um N um N um es una notaci on estilizada para N um N um N um.

8.8.

Tipos b asicos

Los tipos b asicos de nuestra notaci on de programas ser an descriptos por las expresiones can onicas y las operaciones posibles entre elementos de ese tipo. Tipo N um: Las expresiones can onicas son las constantes (n umeros). Las operaciones usadas para procesar los elementos de este tipo son: +, , , /, , con las propiedades usuales, y las funciones div y mod, que devuelven, respectivamente, el cociente y el resto de la divisi on entera de dos n umeros enteros.

8.9. TUPLAS Ejercicio 8.2 Determinar las propiedades que tienen las funciones div y mod.

75

Tipo Bool: Hay dos expresiones can onicas para denotar los valores de verdad, que son True y False . Una funci on que retorna un valor de verdad se denomina predicado. Los booleanos son importantes porque son el resultado de los operadores de comparaci on: =, =, >, <, , . Estos operadores se aplican no s olo a n umeros, sino tambi en a otros tipos b asicos (Char , String, etc.), siempre y cuando los dos argumentos a comparar tengan el mismo tipo. Es decir, cada operador de comparaci on es una funci on polim orca de tipo A A Bool. Los booleanos se pueden combinar usando los operadores l ogicos , , , etc. con las propiedades usuales. Tipo Char : Constituido por todos los caracteres, que se denotan encerrados entre comillas simples, por ejemplo: a, B, 7. Tambi en incluye los caracteres de control no visibles, como el espacio en blanco, el return, etc.. Una secuencia de caracteres se denomina String y se denota encerrada entre comillas dobles, por ejemplo: hola.

8.9.

Tuplas

Una manera de formar un nuevo tipo combinando los tipos b asicos es tomar estos de a pares. Por ejemplo: el tipo (N um, Char ) consiste de todos los pares en los que la primera componente es de tipo N um y la segunda de tipo Char . De la misma manera, se pueden construir ternas, cuaternas, etc.. En general, hablaremos de tuplas. Los elementos can onicos de una tupla son de la forma ( , , . . . , ), donde cada una de las coordenadas es un elemento can onico del tipo correspondiente. Ejemplo: podemos denir la funci on raices, que devuelve las ra ces de un polinomio de segundo grado, de manera tal que el resultado sea un par, es decir, raices : N um N um N um (N um, N um). La noci on de pattern matching puede extenderse al caso de tuplas de manera natural. Por ejemplo, para denir una funci on f sobre ternas puede darse una denici on de la siguiente forma: f.(x, y, z ) = . . . es m as, hasta el momento es la u nica manera de denir una funci on sobre tuplas. Otra manera quiz a menos elegante es tomar alg un elemento de la tupla usando la funci on de indexaci on que se dene a continuaci on. Dada una n-upla, se supone denida la funci on .i : (A0 . . . An ) Ai la cual satisface la propiedad (a0 , . . . , an ).i = ai esta u ltima ecuaci on puede ser considerada su denici on (usando pattern matching). Ejemplo 8.4 Los n umeros racionales pueden ser representados por pares de numeros enteros. La funci on que suma dos racionales puede ser denida como: SumN at : (N um, N um) (N um, N um) SumRat.(a, b).(c, d) = (a d + b c, b d)

76

CAP ITULO 8. EL FORMALISMO BASICO

8.10.

Listas

Una lista (o secuencia) es una colecci on de valores ordenados, los cuales deben ser todos del mismo tipo. Las listas pueden ser nitas o innitas (en este curso s olo consideraremos listas nitas). Cuando son nitas, se las denota entre corchetes, con sus elementos separados por comas. Ejemplos: [0,1,2,3] [(Juan, True ), (Jorge, False )] [a] (lista con un elemento) [ ] (lista vac a). El tipo de una lista es [A], donde A es el tipo de sus elementos. Ejemplos: [0,1,2,3] es de tipo [N um] [(Juan, True ), (Jorge, False )] es de tipo [(String, Bool)] [[1,2],[3,4]] es de tipo [[N um]] (lista de listas de n umeros). La lista vac a podr a considerarse de cualquier tipo, por eso se le asigna el tipo polim orco [A], a menos que quede claro que tiene un tipo en particular. Ejemplo: en [[1, 2], [ ]] el tipo de [ ] es [N um], pues es un elemento de una lista cuyos elementos son de tipo [N um]. A diferencia de los conjuntos, una lista puede contener elementos repetidos. Ejemplo: [1,1] es una lista de dos elementos. Dos listas son iguales s olo si tienen los mismos elementos en el mismo orden. Ejemplos: [0, 1, 2, 3] = [3, 2, 1, 0], [1, 1] = [1]. Notaci on: convencionalmente, se usa el s mbolo x para indicar un elemento de una lista, xs para una lista, xss para una lista de listas, etc etera. Si bien esto no tiene sentido sem antico, es decir, no es necesario usar esta nomenclatura, adoptaremos la convenci on.

8.10.1.

Constructores de listas

Una lista se puede generar con los siguientes constructores: 1. [ ] 2. lista vac a. agrega un elemento a una lista por la izquierda.

Si x es de tipo A y xs es de tipo [A], entonces x xs es una nueva lista de tipo [A], cuyo primer elemento es x y el resto es xs. Ejemplo: [0, 1, 2, 3] = 0 [1, 2, 3] = 0 (1 (2 (3 [ ]))). 3. agrega un elemento a una lista por la derecha.

Ejemplo: [0, 1, 2, 3] = [0, 1, 2] 3 = ((([ ] 0) 1) 2) 3 En general, los programas funcionales usan s olo los dos primeros constructores. Los tipos de estos constructores son: [ ] : [A] Las operaciones sobre listas pueden denirse por pattern matching en estos dos constructores, o equivalentemente dando su denici on para el caso vac o y no vac o (considerado como agregar un elemento por la izquierda). : A [A] [A]

8.10. LISTAS Proposicion 8.1 Sean x, y de tipo A y xs, ys de tipo [A]. Entonces (x xs) = (y ys) x = y xs = ys.

77

8.10.2.

Operaciones sobre listas

Hay cinco operaciones fundamentales sobre listas, que son las siguientes: concatenar : + + : [A] [A] [A]

El operador + + toma dos listas del mismo tipo y devuelve una lista del mismo tipo, que consiste en las dos anteriores, puestas una inmediatamente despu es de la otra. Si xs e ys son listas del mismo tipo, la concatenaci on de ambas se denota xs + + ys. Ejemplos: [0, 1] + + [2, 3] = [0, 1, 2, 3] [0, 1, 2] + +[]+ + [3] = [0, 1, 2, 3] [0, 1] + + [1, 2] = [0, 1, 1, 2] longitud : # : [A] A

El operador # devuelve la longitud de una lista, es decir, la cantidad de elementos que la misma contiene. Si xs es una lista, su longitud se denota #xs. Ejemplos: #[0, 1, 2, 3] = 4 #[ ] = 0 tomar n : : [A] N um [A]

El operador toma una lista y un n umero natural n, y devuelve la lista de los primeros n elementos de la lista original. Cuando n es mayor que la longitud de la lista, devuelve la lista completa. Si xs es una lista, la lista de sus primeros n elementos se denota xsn. Ejemplos: [0, 1, 2, 3]5 = [0, 1, 2, 3] [0, 1, 2, 3]2 = [0, 1]

[ ]n = [ ] tirar n :

El operador toma una lista y un n umero natural n, y devuelve la lista que resulta al eliminar de la lista original los primeros n elementos. Si xs es una lista, la lista sin sus primeros n elementos se denota xsn. Ejemplos: [0, 1, 2, 3]5 = [ ] [0, 1, 2, 3]2 = [2, 3]

: [A] N um [A]

[ ]n = [ ] indexar :

El operador toma una lista y un n umero natural, y devuelve el elemento de la lista que se encuentra en la posici on indicada por el n umero natural. Si xs es una lista, el elemento que ocupa el lugar i se denota xs.i. Tener en cuenta que el primer elemento de la lista ocupa la posici on 0 y que xs.i no est a denido cuando i > #xs 1.

: [A] N um A

78 Ejemplos: [0, 1, 2, 3].2 = 2 [4, 5, 6].0 = 4 [4, 5, 6].3 indenido

CAP ITULO 8. EL FORMALISMO BASICO

8.10.3.

Propiedades de las operaciones

A continuaci on enumeramos algunas de las propiedades m as importantes que poseen los operadores denidos en la secci on anterior. Algunas propiedades usan el s mbolo de denici on . (=) en vez de la igualdad. Por la regla de fold/unfold, estas deniciones son tambi en igualdades. N otese que todas las operaciones pueden denirse por pattern matching sobre los constructores de listas. concatenar []+ + ys = ys (x xs) + + ys = x (xs + + ys) (xs + + ys) + + zs = xs + + (ys + + zs) (xs + + ys).i = ( i < #xs xs.i ) 2 i #xs ys.(i #xs)
. .

(xs + + ys) = [ ] xs = [ ] ys = [ ] longitud #[ ] = 0 #(xs + + ys) = #xs + #ys #(xsn) = n min #xs tomar n xs0 = [ ] (x xs)(n + 1) = x (xsn) tirar n xs0 = xs (x xs)(n + 1) = xsn indexar (x xs).0 = x (x xs).(n + 1) = xs.n
. . . . . . . .

#(xsn) = (#xs n) max 0

[ ]n = [ ]
.

[ ]n = [ ]
.

8.11. EJERCICIOS

79

8.11.

Ejercicios

Ejercicio 8.3 Denir la funci on sgn : Int Int que dado un n umero devuelve 1, 0, o 1 en caso que el n umero sea positivo, cero o negativo respectivamente. Ejercicio 8.4 Denir una funci on abs : Int Int que calcule el valor absoluto de un n umero Ejercicio 8.5 Denir el predicado bisiesto : N at Bool que determina si un a no es bisiesto, Recordar que los a nos bisiestos son aquellos que son divisibles por 4 pero no por 100 a menos que tambi en lo sean por 400. Por ejemplo 1900 no es bisiseto pero 2000 si lo es. Ejercicio 8.6 Denir los predicados equi y isoc que toman tres n umeros los cuales representan las longitudes de los lados de un tri angulo y determinan respectivamente si dicho tri angulo es equil atero o is oceles. Ejercicio 8.7 Denir la funci on edad : (N at, N at, N at) (N at, N at, N at) Int que dadas dos fechas indica los a nos transcurridos entre ellas. Por ejemplo edad.(20, 10, 1968).(30, 4, 1987) = 18 Ejercicio 8.8 En un prisma rectangular, llamemos h a la altura, b al ancho y d a la profundidad. Completar la siguiente denici on del area del prisma: area.h.b.d = 2 f rente + 2 lado + 2 arriba |[ ]| donde frente, lado y arriba son las caras frontal, lateral y superior del prisma respectivamente. Ejercicio 8.9 Denir la funci on raices, que devuelve las ra ces de un polinomio de segundo grado. Ejercicio 8.10 Suponer el siguiente juego: m jugadores en ronda comienzan a decir los n umeros naturales consecutivamente. Cuando toca un m ultiplo de 7 o un n umero con alg un d gito igual a 7, el jugador debe decir pip en lugar del n umero. Se pide: encontrar un predicado que sea True cuando el jugador debe decir pip y False en caso contrario. Resolver el problema para 0 n 9999.
Ayuda: denir una funci on unidad, que devuelva la cifra de las unidades de un n umero. Idem con las decenas, etc.; para ello usar las funciones div y mod.

Ejercicio 8.11 Reescribir las siguiente denici on usando an alisis por casos: f.0 = 1 . f.(n + 1) = f.n + 2 n + 1
.

80

CAP ITULO 8. EL FORMALISMO BASICO

Ejercicio 8.12 Reescribir las siguiente denici on usando an alisis por casos: g.x.0 = 1 . g.x.(2 n + 1) = x g.x.(2 n) . g.x.(2 n + 2) = g.(x x).(n + 1) Ejercicio 8.13 Denir las siguientes funciones: 1. hd : [A] A devuelve el primer elemento de una lista. (hd es la abreviatura de head). 2. tl : [A] [A] devuelve toda la lista menos el primer elemento. (tl es la abreviatura de tail). 3. last : [A] A devuelve el u ltimo elemento de una lista. 4. init : [A] [A] devuelve toda la lista menos el u ltimo elemento.
.

Cap tulo 9

Modelo Computacional

9.1.

Introducci on

En el cap tulo anterior denimos una notaci on abstracta para razonar sobre programas llamada formalismo b asico. Como se pudo ver, este lenguaje hace referencia a los mismos y sirve para escribirlos y manipularlos. Es as que se estableci o una relaci on entre lenguaje y programas pero tratando de ocultar deliberadamente algunas de las caracter sticas de estos u ltimos con la nalidad de simplicar la noci on que tenemos de ellos y poder as razonar con entidades m as simples de tipo matem atico. Esto facilita el proceso de desarrollo de programas a partir de especicaciones (como se ver a en cap tulos siguientes), abstrayendo nociones que podr an perjudicar el correcto desarrollo de esta labor. Entre estas nociones est an las que posibilitan una interpretaci on de las expresiones como programas ejecutables. Este tipo de interpretaci on es denominada interpretaci on operacional o modelo computacional asociado al formalismo y consiste en denir formalmente los pasos elementales de ejecuci on de un programa hasta llegar al resultado nal. Se describe, de esta forma, como los programas se ejecutan, en vez de analizar simplemente el resultado de esta ejecuci on. Este tipo de interpretaciones se utiliza mayormente como gu a para implementar el lenguaje en la computadora y para probar que esta implementaci on es correcta. Adem as, sirve para analizar la complejidad de funciones denidas en el formalismo b asico (esto se ver a en cap tulos siguientes) y para obtener algunos resultados te oricos referentes al mismo (en la secci on 9.7 pag. 90 se ver a un ejemplo de estos resultados). Estas interpretaciones no son u tiles para demostrar la correcci on total de los programas ya que habr a que analizar todos los pasos elementales de ejecuci on para cada uno de los elementos del dominio de la funci on. De todas formas, como se vio en el cap tulo anterior es posible entender y utilizar el formalismo sin tener que recurrir a este tipo de interpretaciones. Es decir que, para el desarrollo de programas, no hace falta conocer el modelo computacional asociado al formalismo. Esto no signica que el formalismo no permita una interpretaci on operacional. Podr a suceder que nuestro lenguaje sea tan abstracto que no permita ser implementado en una computadora. Al contrario, el formalismo desarrollado permite este tipo de interpretaciones y sobre este t opico tratar a este cap tulo. De todas formas, es posible y conveniente utilizar el formalismo libre de estas connotaciones al momento de desarrollar programas. 81

82

CAP ITULO 9. MODELO COMPUTACIONAL

9.2.

Valores

En el formalismo b asico, como en matem atica, una expresi on es utilizada para representar (denotar ) un valor. Una expresi on puede denotar distintos tipos de valores, como ser n umeros, listas, pares, funciones, etc. Es importante distinguir entre un valor y su representaci on por medio de expresiones. Sea la funci on cuadrado : N um N um denida como: . cuadrado.x = x x Las expresiones cuadrado.(3 5), cuadrado.15 y 225 denotan (todas) el n umero doscientos veinticinco pero ninguna (inclusive la expresi on 225) es este valor. Todas ellas son representaciones concretas del valor abstracto doscientos veinticinco. Lo mismo sucede con otros tipos de valores. booleanos: Las expresiones - False True - False False - True - False , denotan el valor booleano falso. pares: Las expresiones - (cuadrado.3 5, 4) - ((225, 2 + 2), True ).0 - (225, 4) denotan el par cuya primera coordenada es el n umero doscientos veinticinco y su segunda coordenada es el n umero cuatro. listas: Las expresiones - [cuadrado.1, 4 2, 44 + 47] - [[], [1, 2, 3]].1 - [1, 2, 3] denotan la lista con los elementos uno, dos y tres en este orden. n umeros: Las expresiones - (2, 3).1 - #[0, 1, 2] - 3 denotan el n umero tres. funci on: Dadas las funciones . f.x.y = ( x >= y x 2 x <= y y ) , . g.x.y = ( x > y x 2 x<y y 2 x=y x ) , las expresiones

9.3. FORMA CANONICA f g id f id g

83

denotan todas la funci on m nimo de dos n umeros. Las computadoras no manipulan valores, solo pueden manejar representaciones concretas de los mismos. As , por ejemplo, las computadoras utilizan la representaci on binaria de n umeros enteros para denotar este tipo de valores. Con los otros tipos de valores (n umeros, listas, pares, funciones, etc.) sucede lo mismo; las computadoras solo manejan sus representaciones.

9.3.

Forma Can onica

Volvamos a las expresiones cuadrado.(3 5), cuadrado.15 y 225. Cuando uno ejecuta alguno de estos programas desea conocer, como resultado de esta ejecuci on (o evaluaci on), el valor denotado por la expresi on. Pero como ya dijimos, las computadoras no manejan valores. La u nica forma que tenemos para reconocer el valor abstracto que se obtiene como resultado de la ejecuci on, es por medio de alguna representaci on del mismo que nos devuelva la computadora. Es as que la computadora deber a elegir una representaci on para mostrar un resultado que nos haga reconocer el valor de la expresi on. Pero, cual de todas?. La computadora podr a elegir como resultado de la ejecuci on la expresi on misma. Por ejemplo si ejecutamos el programa cuadrado.(3 5) la computadora podr a mostrar como resultados la misma expresi on cuadrado.(3 5) haciendo de la evaluaci on una operaci on trivial. Pero esto no nos ayuda a reconocer el valor de la expresi on de manera inmediata. Pidamos que la representaci on del valor resultado de la evaluaci on sea u nica. De esta forma, seleccionemos de cada conjunto de expresiones que denoten el mismo valor como m aximo una que llamaremos expresi on can onica de ese valor. Adem as, llamaremos a la expresi on can onica que representa el valor de una expresi on la forma can onica de esa expresi on. Con esta restricci on pueden quedar expresiones sin forma can onica. Aparte del requerimiento mencionado al principio del p arrafo anterior, no hay ninguna otra restricci on objetiva para elegir la forma can onica de una expresi on. Una forma de comenzar a resolver esta cuesti on es deniendo el conjunto de expresiones can onicas como un subconjunto propio del de todas las expresiones posibles. Al construirlo se deber an tener en cuenta algunas cuestiones de ndole mas bien pr actica. En este sentido ser a conveniente que sus elementos sean expresiones simples ya que de esta forma es m as f acil identicar el valor que representan; por ejemplo, para identicar el valor doscientos veinticinco elijamos la expresi on 225 y no a 15 15. Otra cuesti on importante es que, aunque se dena este conjunto de forma tal que existan expresiones sin forma can onica, el conjunto de expresiones que si la tienen sea lo sucientemente abarcativo como para que se pueda reconocer el valor abstracto de la mayor parte de las mismas. Este punto ser a analizado con m as detenimiento despu es que denamos el conjunto. Denamos entonces el conjunto de expresiones can onicas para las expresiones de distintos tipos: booleanas: True y False . n umeros: 1, 0, 1, 2, 3,15 (n umero 3,15), etc., o sea la representaci on decimal del n umero.

84

CAP ITULO 9. MODELO COMPUTACIONAL pares: (E0 , E1 ) donde E0 y E1 son expresiones can onicas. listas: [E0 , , En1 ], donde n 0 y E0 , , En1 son expresiones can onicas. Notar que aqu tambi en denimos a la lista vac a ([ ]) como una expresi on can onica cuando n = 0.

Notemos que no hemos incluido en el ejemplo expresiones can onicas que representen funciones. Matem aticamente hablando, los valores de tipo funci on pueden ser vistas como reglas que asocian cada elemento de un conjuntos de valores con un u nico elemento de otro conjunto. Uno puede encontrar varias expresiones que representan esta relaci on, pero no vamos a elegir a una expresi on como la forma can onica de estos valores. Otros valores tampoco tienen expresi on can onica. Por ejemplo, el n umero no tiene una representaci on decimal nita. Uno puede escribir la expresi on que denota este valor mediante la expansi on decimal de , d gito por d gito, pero en el formalismo b asico todas las expresiones son nitas. Por lo tanto no se puede elegir la forma can onica. Hasta ahora hemos visto valores que no tienen expresi on can onica (funciones, n umero ). Tambi en puede suceder que una expresi on no tenga forma can onica. Por ejemplo dada la denici on de funci on: . inf = inf + 1 (9.1) La expresi on inf (de tipo n umero) no tiene forma can onica dado que puede demostrarse que su valor es diferente al de cualquier forma can onica. Sea n la forma can onica que representa el mismo valor que la expresi on inf (n es la forma can onica de inf ). Esta relaci on implica que la expresi on n = inf es cierta. Adem as, como n es la representaci on decimal de un n umero (ya que es una forma can onica) se cumple n . Suponiendo esto (ser a nuestra hip otesis) podemos demostrar:

n = { hip otesis } inf = { denici on de inf } inf + 1 n+1 = { hip otesis } Con esto concluimos que n = n + 1 lo cual es falso si n . En consecuencia, razonando por el absurdo, nuestra hip otesis era falsa, o sea inf no tiene forma can onica. 1 Lo mismo sucede con la expresi on 0 que cumple con la propiedad: 1 0 = 1 (inverso multiplicativo de 0) 0
1 . Esta relaci on implica que Sea n la forma can onica que representa el mismo n umero que 0 1 la expresi on n = 0 es cierta. Adem as, como n es una forma can onica, n . Suponiendo esto:

9.4. EVALUACION 0 = { elemento neutro de la multiplicaci on en 0n n0

85

yn} }

= { conmutabilidad de la multiplicaci on en R y n = { hip otesis } 1 0 0 = { inverso multiplicativo de 0 } 1

En consecuencia concluimos que 0 = 1. Razonando por el absurdo n no puede ser la forma 1 can onica de 0 y por lo tanto esta expresi on no tiene forma can onica.

9.4.

Evaluaci on

A partir de todo lo dicho, la ejecuci on de un programa ser a el proceso de encontrar su forma can onica. Veamos entonces m as detenidamente el proceso de b usqueda de expresiones can onicas que hacen las computadoras. Una computadora eval ua una expresi on (o ejecuta un programa) buscando su forma can onica y mostrando este resultado. Con los lenguajes funcionales las computadoras alcanzan este objetivo a trav es de m ultiples pasos de reducci on de las expresiones para obtener otra equivalente m as simple. El sistema de evaluaci on dentro de una computadora esta hecho de forma tal que cuando ya no es posible reducir la expresi on es que se ha llegado a la forma can onica (ver gura 9.1).

expresin

posible reducir?

si

Aplicar una reduccin

no

forma cannica

Figura 9.1: sistema de evaluaci on Podemos ver el proceso que ejecuta este sistema como una forma particular del c alculo de nuestro formalismo b asico en la cual siempre se usa la regla de desplegado en las deniciones. Consideremos la reducci on de la expresi on cuadrado.(3 5):

86 cuadrado.(3 5) cuadrado.15 15 15

CAP ITULO 9. MODELO COMPUTACIONAL

= {}

= { denici on de cuadrado } = {} 225

La u ltima expresi on no puede seguir siendo reducida y es la expresi on can onica del valor buscado. Notemos que no hay una u nica forma de reducir una expresi on; la expresi on anterior podr a haberse evaluado de la siguiente manera: cuadrado.(3 5) (3 5) (3 5) 15 (3 5) 15 15

= { denici on de cuadrado } = { aplicada al primer t ermino } = { aplicada al segundo t ermino } = {} 225

En el primer paso de reducci on hemos elegido la subexpresi on de mas afuera, decisi on que no fue tomada en el proceso de evaluaci on anterior. Puede suceder que el proceso de evaluaci on nunca termine. Por ejemplo tratemos de evaluar la expresi on inf denida en la secci on anterior: inf = { denici on de inf } inf + 1 = { denici on de inf } (inf + 1) + 1 inf + (1 + 1) = { asociatividad de la suma } = {+}

inf + 2 (inf + 1) + 2 inf + (1 + 2)

= { denici on de inf } = { asociatividad de la suma }

9.4. EVALUACION = {+}

87

inf + 3 (inf + 1) + 3

= { denici on de inf }

Obviamente se puede seguir aplicando pasos de reducci on indenidamente. Esto no es necesariamente un problema ya que la expresi on inf no tiene forma can onica. . Consideremos ahora la funci on denida por K.x.y = x. Qu e sucede con la expresi on K.3.inf ? Claramente denota el valor tres, luego se esperar a que reduzca a la forma can onica 3. Veamos que sucede si apliquemos pasos de reducci on a esta expresi on eligiendo siempre la subexpresi on de m as adentro: K.3.inf = { denici on de inf } K.3.(inf + 1) = { denici on de inf } K.3.((inf + 1) + 1) K.3.(inf + (1 + 1)) K.3.(inf + 2) K.3.((inf + 1) + 2) Obviamente este proceso no termina. Pero ahora elijamos las subexpresi on de m as afuera: K.3.inf = { denici on de K } 3 Y con esta estrategia de reducci on el proceso s termina. Afortunadamente existe un resultado te orico (demostrado para el c alculo lambda, un c alculo te orico de funciones en el cual el formalismo b asico esta basado) que avala estas pruebas. Teorema 9.1 Si la forma can onica existe, la estrategia de reducci on que siempre elige la subexpresi on de m as afuera y m as a la izquierda, conduce a la misma. En otras palabras, si nuestro modelo computacional usa esta estrategia (denominada estrategia de reducci on normal ), va a llegar a encontrar la forma can onica, siempre que ella exista. = { asociatividad de la suma } = {+}

= { denici on de inf }

88

CAP ITULO 9. MODELO COMPUTACIONAL

9.5.

Un modelos computacional m as eciente

Seg un el teorema de la secci on anterior nuestro modelo computacional deber a usar una estrategia de reducci on normal si se desea encontrar la forma can onica, siempre que exista. Pero esta estrategia es, en algunos casos, menos eciente. Veamos como se eval ua la expresi on cuadrado.(cuadrado.3) utilizando la misma. cuadrado.(cuadrado.3) = { denici on de cuadrado } (cuadrado.3) (cuadrado.3) (3 3) (cuadrado.3) 9 (cuadrado.3) 9 (3 3)

= { denici on de cuadrado } = {}

= { denici on de cuadrado } = {} = {} 81 En seis pasos de reducci on logramos encontrar la forma normal. Pero ahora no utilicemos esta estrategia. cuadrado.(cuadrado.3) = { denici on de cuadrado } = {} cuadrado.(3 3) cuadrado.9 99 99

= { denici on de cuadrado } = {} 81 y solo se realizaron cuatro pasos de reducci on. Analicemos m as detenidamente lo que sucedi o. Notemos que en la expresi on inicial cuadrado.(cuadrado.3) la funci on cuadrado aparece solo dos veces. En los ejemplos se puede ver que en el primero se copi o la subexpresi on cuadrado.3 al ejecutar el primer paso de reducci on y en el segundo esto no sucedi o. Esto produjo tres desplegados de la funci on cuadrado en el primer ejemplo, contra los dos esperados en el segundo. Adem as la subexpresi on 3 3 fue reducida una vez m as en el primero.

EFICIENTE 9.5. UN MODELOS COMPUTACIONAL MAS

89

A primera vista esta ineciencia del modelo computacional puede no ser importante para la funci on que se esta analizando, pero si se trata de funciones m as complejas se puede llegar a un desperdicio de recursos computacionales muy alto. Este fen omeno de copiado de subexpresiones se debe a la forma en que fue denida la funci on cuadrado: . cuadrado.x = x x donde el par ametro x fue repetido dos veces en la denici on. Una forma de solucionar este problema es cambiando nuestro modelo computacional para que cuando el sistema deba desplegar funciones que tengan este tipo de denici on se utilicen deniciones locales. As , por ejemplo, manteniendo la estrategia de reducci on normal, la expresi on cuadrado.(cuadrado.3) se podr a haber evaluado de esta forma: cuadrado.(cuadrado.3) = { denici on de cuadrado } xx x = cuadrado.3 xx x=33 xx x=9

= { denici on de cuadrado }

= {}

= { denici on local } = {} 81 y de esta forma solo desplegamos dos veces la funci on cuadrado. Este modelo computacional, que se basa en la estrategia de reducci on normal agregando los mecanismos necesarios para que se pueden compartir subexpreciones, se denomina generalmente en la literatura modelo computacional lazy. Como ya dijimos en la introducci on (pag. 81) la denici on formal del modelo computacional sirve, entre otras cosas, para calcular la complejidad de las funciones denidas en nuestro formalismo. Es as que, si nuestra implementaci on del lenguaje est a realizada en base al modelo lazy, puede suceder que funciones denidas con variables repetidas, sean m as ecientes. En nuestro . ejemplo la denici on de cuadrado = x x tiene la variable x repetida con lo cual las expresiones que instancien las mismas, ser an reducidas solo una vez en este modelo, como ya se ha visto. Este modelo es el que se utiliza en la mayor a de las implementaciones de los lenguajes funcionales puros. Por lo general es implementado representado las expresiones como un grafo, denominado grafo de reducci on. Para m as informaci on sobre implementaci on de lenguajes funcionales ver [JL91]. En la pr oxima secci on veremos una forma anal tica de obtener una medida de la eciencia de las funciones recursivas denidas en el formalismo b asico. 99

90

CAP ITULO 9. MODELO COMPUTACIONAL

9.6.

Nociones de eciencia de programas funcionales

En esta secci on veremos una forma de calcular la complejidad de las funciones denidas en el formalismo b asico para asi poder comparar la eciencia de programas funcionales. La misma se medir a contando la cantidad de reducciones ejecutadas. En general, nos interesar au nicamente el comportamiento asint otico, por eso en muchos casos no tendremos en cuenta las constantes. . Supongamos que para una funci on cualquiera f podemos denir T f = costo de ejecutar f . Entonces el costo de reducir f.E , donde E es una expresi on, ser a T (f.E ) = T f + costo de reducir E La cuesti on ser a, pues, denir T f . No veremos ning un m etodo para resolver esto sistem aticamente, sino que procederemos a trav es de ejemplos. Ejemplo 9.1 (Calcular T f ac) . f ac.0 = 1 T f ac.0 = 1 . f ac.(n + 1) = (n + 1) f ac.n T f ac.(n + 1) = 1 + T f ac.n . Ahora hay que resolver estas ecuaciones. Si tomamos T f ac.n = n + 1, tenemos una soluci on de las u ltimas ecuaciones; por lo tanto esta denici on de T f ac es apropiada. As , el costo de calcular f ac es lineal (depende de n). Ejemplo 9.2 (Calcular T f , donde f est a dada por ) . f.0 = 0 . f.(n + 1) = f.n + g.n |[g.i = X i ]| Para el costo de g tenemos T g.0 = 1 T g.(n + 1) = 1 + T g.n Entonces, para f tenemos T f.0 = 1 T f.(n + 1) = 1 + T f.n + T g.n = 2 + n + T f.n A partir de estas ecuaciones se puede demostrar que si se dene . n (n + 3) T f.n = 2 n T g.n = n + 1 n

se satisfacen las ecuaciones. Por lo tanto el costo de evaluar f es cuadr atico.

9.7.

Problema de la forma normal

Como se mencion o en la introducci on (pag. 81) el desarrollo formal del modelo computacional se puede utilizar para obtener algunos resultados referentes a nuestro formalismo. Supongamos que existe un predicado nf : N um Bool en nuestro formalismo b asico el cual determina si una expresi on entera tiene forma normal. Su especicaci on es nf.e e tiene forma normal Construyamos ahora la denici on (9.2)

9.8. EJERCICIOS . P = ( nf.P 2 nf.P )

91

P 0

Usando el modelo computacional es obvio que P tiene forma normal (igual a 0) si y s olo si nf.P . Luego P tiene forma normal { modelo computacional } { especicaci on de nf } nf.P

(P tiene forma normal)

absurdo. Luego, no puede existir un predicado nf que satisfaga la especicaci on 9.2.

9.8.

Ejercicios

Ejercicio 9.1 Mostrar los pasos de reducci on hasta llegar a la forma can onica de la expresi on: 2 cuadrado.(head.[2, 4, 5, 6, 7, 8]) Ejercicio 9.2 Dada la denici on: . linf = 1 linf mostrar los pasos de reducci on hasta llegar a la forma can onica de la expresi on: head.linf 1. reduciendo primero las subexpresiones m as internas. 2. utilizando la estrategia de reducci on normal. Comparar ambos resultados. Ejercicio 9.3 Dada la denici on: . f.x.0 = x . f.x.(n + 1) = cuadrado.(f.x.n) mostrar los pasos de reducci on hasta llegar a la forma can onica de la expresi on: f.2.3 1. utilizando la estrategia de reducci on normal, sin utilizar deniciones locales. 2. utilizando el modelo computacional lazy. Comparar ambos resultados.

92

CAP ITULO 9. MODELO COMPUTACIONAL

Bibliograf a
[BEKV94] K. Broda, S. Eisenbach, H. Khoshnevisan, and S. Vickers. Reason programming. Prentice Hall, 1994. [Bir98] [Coh90] [Cop73] [DF88] [Dij76] [Dij89] [DS90] [Fok96] [Gri81] [GS93] [Hoa69] [Hoo89] [JL91] R. Bird. Introduction to Functional Programming using Haskell. Prentice Hall, 1998. E. Cohen. Programming in the 1990s. An Introduction to the Calculation of Programs. Texts and Monographs in Computer Science. Springer Verlag, 1990. Irving M. Copi. Introducci on a la L ogica. Texts and Monographs in Computer Science. Eudeba, Buenos Aires, 1973. E.W. Dijkstra and W.H.J. Feijen. A Method of Programming. Addison Wesley, 1988. E.W. Dijkstra. A Discipline of Programming. Prentice Hall, 1976. E.W. Dijkstra. Formal Development of Programs and Proofs. Addison Wesley, 1989. E.W. Dijkstra and C.S. Scholten. Predicate Calculus and Program Semantics. Texts and Monographs in Computer Science. Springer Verlag, 1990. M. Fokkinga. Werkcollege Functioneel Programmeren. Universidad de Enschede, 1996. D. Gries. The Science of Programming. Springer Verlag, 1981. D. Gries and F.B. Schneider. A Logical Approach to Discrete Math. Texts and Monographs in Computer Science. Springer-Verlag, 1993. C.A.R. Hoare. An axiomatic basis for computer programming. Comm. of the ACM, 12:576580, 1969. R. Hoogerwoord. The Design of Functional Programs: a Calculational Approach. PhD thesis, Eindhoven University of Technology, Pa ses Bajos, 1989. Simon L. Peyton Jones and Davis R. Lester. Implementing functional languages: a tutorial, February 1991. Este libro puede encontrarse en Internet ftp://ftp.dcs. glasgow.ac.uk/pub/pj-lester-book. A. Kaldeweij. Programming: the Derivation of Algorithms. Prentice Hall, 1990. H.A. Partsch. Specication and Transformation of Programs: a Formal Approach to Software Development. Texts and Monographs in Computer Science. Springer Verlag, 1990. 93

[Kal90] [Par90]

94 [Smu78] [Tho96]

BIBLIOGRAF IA R. Smullyan. What is the Name of This Book? Prentice Hall, New Jersey, 1978. S. Thompson. Haskell: The Craft of Functional Programming. Addison Wesley, 1996.

You might also like