Академический Документы
Профессиональный Документы
Культура Документы
n:
1. b
2
n < (b + 1)
2
2. (b 1)
2
< n b
2
La primera eleccin de b consiste en calcular el mayor entero que es a lo sumo
n, y la
segunda corresponde a calcular el menor entero que es al menos
n.
Observemos que en lenguaje espaol nos referimos simplemente a una aproximacin de
n, mientras que cuando usamos formulaciones matemticas nos vemos forzados a ser preci-
sos especicando con exactitud qu aproximacin es considerada aceptable, el rigor nos condu-
ce a un anlisis ms exhaustivo.
Otra importante ventaja en el uso de modelos matemticos es la posibilidad que ofrecen de
contestar preguntas sobre los objetos o fenmenos que se modelan.
El descubrimiento del planeta Neptuno ilustra esta ventaja. En el siglo XVII, Kepler, New-
ton y otros formularon modelos matemticos que describan el movimiento planetario basados
en la observacin de los planetas y las estrellas. En el siglo XVIII los cientcos descubrieron
que el movimiento de Urano no acordaba con la descripcin formulada por los modelos, estas
discrepancias produjeron que la Real Sociedad de Ciencias de Gttingen, en Alemania, ofre-
ciera un premio a quien estableciera una teora aceptable sobre el movimiento de Urano. Los
cientcos de la poca conjeturaron que la rbita de Urano era afectada por la presencia de un
planeta desconocido. Luego de dos o tres aos de clculos (todos hechos a mano) obtuvieron la
posicin probable del planeta desconocido y rastreando el rea con telescopios descubrieron el
planeta Neptuno en 1846.
0. PRELIMINARES 3
Por otra parte, es importante destacar que la matemtica provee mtodos de razonamiento: a
travs de la manipulacin de expresiones se pueden demostrar propiedades de las expresiones y
obtener nuevos resultados desde otros ya conocidos. Este razonamiento puede realizarse sin el
conocimiento sobre el signicado de los smbolos que son manipulados. Es decir, la matemtica
ofrece reglas que permiten aprender cuestiones sobre el objeto o el fenmeno que se describe
mediante el modelo, slo la formulacin inicial y nal necesitan ser interpretadas en trminos
del problema original. Esto es lo que se conoce como manipulacin sintctica.
Aqu presentamos un ejemplo sencillo de manipulacin sintctica. Supongamos que que-
remos una expresin equivalente a la ecuacin e = m c
2
que permita calcular el valor de m
suponiendo e dado. Sin necesidad de pensarlo demasiado podemos escribir m = e/c
2
. En la es-
cuela secundaria se ensean reglas para la manipulacin de expresiones aritmtica y la prctica
hace que se apliquen automticamente utilizando una o ms de estas reglas simultneamente. A
continuacin daremos un detalle de las reglas que aplicadas a la expresin e = m c
2
permiten
obtener m = e/c
2
:
e = m c
2
= dividimos ambos miembros por c
2
,= 0)
e/c
2
= (m c
2
) /c
2
= asociatividad de la multiplicacin)
e/c
2
= m (c
2
/c
2
)
= c
2
/c
2
= 1)
e/c
2
= m 1
= m 1 = m)
m = e/c
2
En los clculos realizados arriba, existe un formato especial que adoptaremos en este curso:
entre dos expresiones existe un signo igual seguido de una breve frase encerrada entre los sig-
nos ). El signo igual indica que las dos expresiones son iguales mientras que la frase es una
explicacin que sostiene esa igualdad. Por otra parte, como la relacin de igualdad es transitiva
( es decir si a = b y b = c podemos concluir que a = c), podemos concluir que e = m c
2
es
equivalente a m = e/c
2
.
Observemos que pudimos entender cada una de las manipulaciones anteriores sin entender
el signicado de e, m y c, es decir, sin conocer que las ecuaciones que fueron manipuladas
corresponden a un modelo de la relacin entre la masa y la energa; fuimos capaces de razonar
sintcticamente.
Utilizando lgica
Qu es la lgica?. La lgica es el estudio de los mtodos y principios usados para distinguir
el buen (correcto) razonamiento del malo (incorrecto). No debe interpretarse esta denicin en
el sentido de que slo el estudioso de la lgica puede razonar correctamente, pero la persona que
ha estudiado lgica tiene mayor posibilidad de razonar correctamente que aquella que nunca ha
pensado en los principios generales implicados en esta actividad.
4 0. PRELIMINARES
La lgica ha sido denida a menudo como la ciencia de las leyes del pensamiento. Pero esta
denicin no es exacta. En primer lugar, el pensamiento es uno de los procesos estudiados por
los psiclogos, y la lgica no es una rama de la psicologa; es un campo de estudio separado y
distinto.
En segundo lugar, si pensamiento es cualquier proceso mental que se produce en la mente de
las personas, no todo pensamiento es un objeto de estudio para el lgico. Todo razonamiento es
pensamiento, pero no todo pensamiento es razonamiento. Por ejemplo, es posible pensar en un
nmero entre 1 y 10, sin elaborar ningn razonamiento acerca de l. Es posible recordar algo,
imaginarlo o lamentarlo sin razonar sobre ello.
Otra denicin comn de la lgica es aquella que la considera como la ciencia del razona-
miento. Esta denicin es mejor, pero an no es adecuada. El razonamiento es un tipo especial
de pensamiento en el que se realizan inferencias, o sea en el que se realizan conclusiones que
derivan de premisas. Pero los oscuros caminos por los cuales la mente llega a sus conclusiones
durante los procesos reales de razonamiento, no son en absoluto de la incumbencia del lgico.
Slo le interesa la correccin del proceso, una vez terminado. Su problema es siempre el si-
guiente: la conclusin a la que se ha llegado deriva de las premisas usadas o armadas?. Si las
premisas brindan adecuados fundamentos para aceptar la conclusin, si armar que las premisas
son verdaderas garantas de que la conclusin tambin ser verdadera, entonces el razonamiento
es correcto. De lo contrario es incorrecto.
La distincin entre el razonamiento correcto y el incorrecto es el problema central de la
lgica. Los mtodos y las tcnicas de la lgica han sido desarrollados esencialmente con el pro-
psito de aclarar esta distincin. La lgica se interesa por todos los razonamientos sin tomar en
cuenta su contenido. Es decir, la lgica nos permitir la manipulacin sintctica de expresiones
ms generales que las expresiones aritmticas que ya hemos mencionado.
Vamos a presentar ahora cierta terminologa que se utilizar en lgica.
Una proposicin es una frase o expresin que slo puede ser verdadera o falsa. En esto
las proposiciones se diferencian de otras frases o expresiones como las exclamaciones, las pre-
guntas o las rdenes. Tambin es necesario diferenciarlas de las oraciones aunque stas bien
pueden ser verdaderas o falsas. Dos oraciones pueden ser diferentes por estar compuestas de di-
ferentes palabras o stas pueden estar dispuestas de formas distintas, pero si expresan el mismo
signicado, constituyen la misma proposicin, por ejemplo:
Juan ama a Mara.
Ama Juan a Mara.
Es claro, que se trata de dos oraciones diferentes, pero ambas tienen el mismo signicado, por
lo tanto lo que ellas arman es considerado una proposicin.
Otro ejemplo de oraciones diferentes que representan la misma proposicin es el siguiente:
Llueve.
It rains.
Il pleut.
0. PRELIMINARES 5
La primera est en castellano, la segunda en ingls y la tercera en francs, pero cualquiera
de ellas expresa una misma idea.
Por otra parte, en contextos distintos, la misma oracin puede ser usada para expresar enun-
ciados diferentes:
El actual presidente de Argentina es un ex gobernador.
En 1998 expresara un enunciado acerca de Carlos Menem, mientras que en 2004 correspon-
de a Nstor Kirchner. En estos contextos temporales diferentes, la oracin anterior sera usada
para armar proposiciones diferentes.
En el desarrollo de esta materia volveremos sobre el concepto de proposicin a la que tam-
bin llamaremos expresin booleana.
La inferencia es un proceso por el cual se llega a una proposicin y se la arma sobre la
base de otra u otras proposiciones aceptadas como punto de partida del proceso. Al lgico no
le interesa el proceso de inferencia, sino las proposiciones que constituyen los puntos inicial y
nal de este proceso, as como las relaciones existentes entre ellas.
Aunque el proceso de inferencia no concierne a los lgicos, para cada inferencia posible
hay un razonamiento correspondiente y son esos razonamientos los que caen en el mbito de
la lgica. En este sentido un razonamiento es cualquier grupo de proposiciones tal que de una
de ellas se arma que deriva de las otras, las cuales son consideradas como elementos de juicio
a favor de la verdad de la primera. La palabra razonamiento se usa a menudo para indicar el
proceso mismo, pero en lgica tiene el sentido tcnico recin explicado.
Al describir esta estructura se emplean comnmente los trminos premisa y conclusin.
La conclusin de un razonamiento es la proposicin que se arma sobre la base de las otras
proposiciones del mismo, y a la vez estas proposiciones de las que se arma que brindan los
elementos de juicio o las razones para aceptar la conclusin son las premisas del razonamiento.
Debemos observar que premisa y conclusin son trminos relativos; la misma proposicin
puede ser premisa en un razonamiento y conclusin en otro. Por ejemplo:
Todo lo que est predeterminado es necesario.
Todo suceso est predeterminado.
Por lo tanto, todo suceso es necesario.
Aqu, la proposicin todo suceso es necesario es la conclusin, y las otras dos son premisas.
Pero la proposicin Todo suceso est predeterminado es la conclusin del siguiente razona-
miento:
Todo suceso causado por otros sucesos est predeterminado.
Todo suceso est causado por otro suceso.
Por lo tanto, todo suceso est predeterminado.
6 0. PRELIMINARES
Tomada aisladamente ninguna proposicin es una premisa o una conclusin. Es una premisa
cuando aparece como supuesto de un razonamiento. Es una conclusin slo cuando aparece en
un razonamiento en el que se arma que se desprende de las proposiciones armadas en ese
razonamiento.
En algunos razonamientos, como los dos anteriores, las premisas se enuncian primero y la
conclusin al nal. Pero no todos los razonamientos presentan ese orden, como por ejemplo:
En una democracia, los pobres tienen ms poder que los ricos, porque son ms, y
la voluntad de la mayora es suprema.
Sobre este curso de Introduccin a la Informtica
La breve introduccin sobre el uso de la matemtica y la lgica que abordaremos con ms
detalles en los siguientes captulos, pretende iniciar a los estudiantes en el objetivo de este curso.
La meta es ensear lgica como una herramienta. No pretendemos que los alumnos sean
profundos conocedores de la lgica sino que sepan como aplicarla. La lgica brinda todos los
mtodos de razonamiento posibles, mientras que la matemtica aporta los modelos dotados del
rigor necesario para las estructuras de estos razonamientos. Ambas disciplinas proveen un sos-
tn fundamental para la derivacin de programas, tcnica que abordaremos en el prximo curso
y que bsicamente consiste en la construccin de programas correctos. A esta altura podemos
decir que un programa es una secuencia lgica de proposiciones descriptas en un lenguaje for-
mal (riguroso) que tiene por objeto la consecucin de una tarea especca. Los alumnos de
ciencias de la computacin no sern lgicos ni matemticos sino serios estudiosos de los mto-
dos de programacin para lo cual es necesario contar tanto con teora de demostraciones como
con modelos de esas teoras. Por esta razn es que haremos nfasis en la manipulacin sintctica
de frmulas como herramienta poderosa para poder descubrir y armar verdades.
CAPTULO 1
Sustitucin, Igualdad y Asignacin
ndice del Captulo
1.1. Nociones bsicas, deniciones y notacin . . . . . . . . . . . . . . . . . . 7
1.2. Sustitucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3. Sustitucin y variables ocultas . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4. La sustitucin como regla de inferencia . . . . . . . . . . . . . . . . . . . 11
1.5. Igualdad y sustitucin. Regla de Leibniz . . . . . . . . . . . . . . . . . . . 12
1.6. La regla de Leibniz y la evaluacin de funciones . . . . . . . . . . . . . . 13
1.7. Razonando con la Regla de Leibniz . . . . . . . . . . . . . . . . . . . . . 14
1.8. La sentencia de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
V
amos a introducir el concepto de sustitucin e ilustrar su aplicacin en el razonamiento
con igualdades y asignaciones en los lenguajes de programacin. Tambin introducimos
la denicin de Leibniz de igualdad y la formalizaremos en trminos de la sustitucin, adems
damos un formato de demostracin que nos permitir probar la igualdad entre dos expresiones.
1.1. Nociones bsicas, deniciones y notacin
En la vida cotidiana es corriente considerar colecciones de objetos o conjunto de objetos,
como por ejemplo el conjunto de alumnos que estn inscriptos en el primer ao de esta facultad,
el conjunto de lneas de colectivo que cubren el tramo RosarioSan Lorenzo, etc. En Informtica
llamaremos conjunto a cualquier coleccin de objetos que compartan ciertas caractersticas, y
un elemento de un conjunto es cualquiera de sus objetos. En particular consideraremos ciertos
conjuntos de nmeros que tienen una importancia especial.
El conjunto N =0, 1, 2, 3, . . . al que llamaremos conjunto de los nmeros naturales.
7
8 1. SUSTITUCIN, IGUALDAD Y ASIGNACIN
El conjunto Z =. . . , 3, 2, 1, 0, 1, 2, 3, . . . es el conjunto de los nmeros enteros.
El conjunto Z
+
=1, 2, 3, . . . es el conjunto de los nmeros enteros positivos.
El conjunto Z
b
2
4 a c
2 a
para luego escribir la expresin x = Q
Sin embargo, la expresin x = Q tiene tres variables ocultas, a, b y c que deben tenerse en
cuenta cuando se realice una sustitucin. Por ejemplo, la sustitucin
(x = Q) [b := 5]
conduce a la expresin (x = Q
) donde
Q
=
5 +
5
2
4 a c
2 a
1.4. La sustitucin como regla de inferencia
El primer uso que le daremos a la sustitucin es la sustitucin como regla de inferencia,
es decir la utilizaremos como un mecanismo sintctico para derivar verdades, o teoremas.
Veremos ms adelante la denicin de teorema pero por ahora diremos que un teorema es una
proposicin verdadera.
Recordemos que una regla de inferencia consiste en un mecanismo por el cual bajo el su-
puesto de verdad de expresiones llamadas premisas se deriva la veracidad de otra expresin
llamada conclusin. Es decir, una regla de inferencia asegura que si las premisas son teoremas,
la conclusin tambin ser un teorema. Aqu adoptaremos un formato especial para las reglas
de inferencia en general: las premisas se describirn mediante una lista, una bajo la otra y luego
de trazar una lnea se escribir la conclusin.
La regla de inferencia de la sustitucin utiliza una expresin E, una lista de variables v, y la
correspondiente lista de expresiones F, as tenemos
Sustituci on :
E
E [v := F] ,
(1.1)
esta regla asegura que si E es un teorema, entonces tambin E es un teorema despus de haber
reemplazado todas las ocurrencias de v por las correspondientes expresiones de F.
(1.14) Ejemplo. Supongamos que la expresin E que corresponde a x + y = y + x, es un
teorema, la regla (1.1) nos permite concluir que b + 3 = 3 + b es tambin un teorema.
Esta ltima expresin no es ms que E [x, y := b, 3].
12 1. SUSTITUCIN, IGUALDAD Y ASIGNACIN
(1.15) Ejemplo. Supongamos que la expresin 2 x/2 = x es un teorema, de acuerdo a (1.1)
podemos concluir que (2 x/2 = x) [x := j] es un teorema o bien 2 j/2 = j es un
teorema
Observemos que una regla de inferencia como la sustitucin (1.1), es un esquema que repre-
senta una innidad de reglas, una para cada combinacin de la expresin E, la lista de variables
v, y la lista de expresiones F, podramos considerar a E y x del ejemplo anterior y F : j + 5 y
tendramos:
2 x/2 = x
(2 x/2 = x) [x := j + 5]
o bien
2 x/2 = x
2 (j + 5) /2 = j + 5
1.5. Igualdad y sustitucin. Regla de Leibniz
Hasta ahora hemos hablado del signicado de evaluar una expresin aritmtica E en un
estado. Supongamos que consideramos una expresin un poco ms compleja en donde participa
la igualdad, como por ejemplo E = F, en este caso evaluar la expresin en un estado arroja
como resultado verdadero (true) si las expresiones E y F tienen el mismo valor y falso (false)
si tienen distintos valores
Vamos a ver algunos ejemplos, en donde utilizaremos la relacin de igualdad entre expre-
siones aritmticas.
(1.16) Ejemplo. Si E = 3 x 1 y G = x +1, entonces la expresin E = G devuelve true si
el estado de x es 1 y devuelve false en cualquier otro estado de la variable x.
(1.17) Ejemplo. Si E = x x 1 y G = (x + 1) (x 1) la expresin E = G devuelve el
valor true en cualquier estado de la variable x.
Tambin es posible construir expresiones utilizando otros operadores relacionales entre ex-
presiones aritmticas, como por ejemplo
(1.18) Ejemplo. Si E = x 2 y G = x 1 la expresin E < G devuelve el valor true en
cualquier estado de sus variables.
Una expresin es verdadera si su evaluacin en cualquier estado posible de sus variables
produce el valor true.
Las expresiones de los ejemplos (1.17) y (1.18) son verdaderas, mientras que la del ejemplo
(1.16) es falsa.
Ahora, supongamos que queremos determinar si dos expresiones aritmticas E y F son
iguales. De acuerdo con lo visto, sto equivale a determinar si la expresin E = F es verdadera,
lo cual puede realizarse evaluando el valor de verdad de la expresin E = F en todos sus estados
posibles, tarea que puede resultar tediosa y hasta imposible en casos en que las variables puedan
asumir innitos estados. Una forma alternativa de determinar la igualdad entre dos expresiones
es utilizar un conjunto de reglas para la relacin de igualdad (estrategia ampliamente utilizada
1.6. LA REGLA DE LEIBNIZ Y LA EVALUACIN DE FUNCIONES 13
en los cursos de lgebra y Anlisis). Por ejemplo, sabemos que x = y es lo mismo que y = x,
sin importar el valor de las variables x e y. Es ms, una adecuada coleccin de esta reglas puede
pensarse como una denicin de igualdad, suponiendo vlido que dos expresiones son iguales
en cualquier estado si y slo si una de ellas puede ser transformada en la otra mediante estas
leyes.
Vamos a dar ahora cuatro leyes que caracterizan a la relacin de igualdad. Las dos primeras
son expresiones que postulamos como teoremas, es decir son verdaderas en cualquier estado.
Reflexividad : x = x (1.2)
Simetra : (x = y) = (y = x) (1.3)
La tercera regla, transitividad, est dada como regla de inferencia
Transitividad :
X = Y, Y = Z
X = Z
(1.4)
Utilizaremos la regla (1.4) del siguiente modo: de X = Y e Y = Z concluimos que X = Z.
Por ejemplo de x + y = w + 1 y w + 1 = 7 conclumos por la regla (1.4) que x + y = 7.
En el Captulo 0, fue esta regla la que nos permiti armar que las expresiones e = m c
2
y
m = e/c
2
son iguales.
Una cuarta regla para la relacin de igualdad fue establecida por Gottfried Leibniz hace unos
350 aos. En trminos actuales la Regla de Leibniz puede expresarse as:
Dos expresiones son iguales en todos los estados si y slo si al reemplazar una de ellas por
la otra en cualquier expresin E, el valor de sta no cambia.
Una consecuencia de esta ley puede formularse como regla de inferencia del siguiente modo:
Leibniz :
X = Y
E [z := X] = E [z := Y ]
(1.5)
Observemos que se utiliz la variable z en la formulacin de la regla anterior, pues la susti-
tucin est denida para el reemplazo de variables y no para el reemplazo de una expresin. En
el lado izquierdo de la igualdad que aparece en la conclusin, z es reemplazada por X mientras
que en lado derecho z es reemplazada por Y , as este uso de la variable z permite el reemplazo
de una instancia de X en la expresin E [z := X] por Y .
Veamos un ejemplo de la aplicacin de la regla de Leibniz, supongamos que b + 3 = c + 5
es un teorema, podemos concluir que d +b +3 = d +c +5 es un teorema usando la regla (1.5),
si llamamos X : b + 3, Y : c + 5, E : d + z y z : z.
1.6. La regla de Leibniz y la evaluacin de funciones
La denicin de funcin se ver en detalle en los cursos de Anlisis, por esta razn no nos
detendremos demasiado en ella, pero podemos decir que una funcin provee una regla que a un
14 1. SUSTITUCIN, IGUALDAD Y ASIGNACIN
dado valor w le asocia otro valor v, w es llamado argumento de la funcin y v es el valor de la
funcin, por ejemplo consideremos la funcin denida como:
g (z) = 3 z + 3 (1.6)
entonces la funcin g asume el valor 3 w + 3 para cualquier argumento w. El argumento est
designado en la aplicacin de la funcin que es una forma de expresin. La notacin conven-
cional para la aplicacin de la funcin g al argumento 5 es g (5), que resulta 3 5 + 3. A n
de reducir el uso de parntesis en la notacin usaremos la notacin g.5 en vez de g (5) cuando
el argumento sea una constante o una variable. Por ejemplo la funcin (1.6) puede denirse
mediante esta notacin as:
g.z : 3 z + 3
A continuacin daremos algunos ejemplos de evaluacin de aplicacin de funciones:
g.5
= aplicacin de funcin)
3 5 + 3
= clculo aritmtico)
18
g (y + 2)
= aplicacin de funcin)
3 (y + 2) + 3
La aplicacin de funcin puede denirse a travs de la sustitucin, es decir si la funcin g
se dene como:
g.z : E
entonces la aplicacin de la funcin g.X para cualquier argumento X se dene mediante g.X =
E [z := X] . De este modo reescribiremos la regla de Leibniz en trminos de aplicacin de
funcin y sustitucin del siguiente modo:
Leibniz :
X = Y
g.X = g.Y
Esta regla asegura que de la igualdad entre las expresiones X e Y , podemos deducir la igual-
dad de la aplicacin de funciones g.X y g.Y . Esta regla fundamental es vlida para cualquier
funcin g y expresiones X e Y .
1.7. Razonando con la Regla de Leibniz
La regla de Leibniz nos permite sustituir iguales por iguales en una expresin sin cambiar
el valor de la expresin. Esto nos provee un mtodo para demostrar que dos expresiones son
iguales. En este mtodo, el formato que utilizaremos ser el siguiente:
1.7. RAZONANDO CON LA REGLA DE LEIBNIZ 15
E [z := X]
= X = Y )
E [z := Y ]
La primera y la ltima lnea corresponden a la expresin de igualdad de la conclusin en la
regla de Leibniz, la explicacin entre los signos ) corresponde a la premisa X = Y .
Aqu ilustramos la regla de Leibniz para el problema enunciado en el Captulo 0 sobre las
manzanas de Juan y Mara. Recordemos el modelo asociado al problema:
m = 2j y m/2 = 2 (j 1) ,
entonces
m/2 = 2 (j 1)
= m = 2 j)
2 j/2 = 2 (j 1)
En este caso E es la expresin z/2 = 2 (j 1), X es m e Y es 2 j.
Veamos otro ejemplo de aplicacin de (1.5). Supongamos que sabemos que la siguiente
expresin es un teorema:
2 x/2 = x (1.7)
el siguiente clculo utiliza las reglas (1.5) y (1.1):
2 j/2 = 2 (j 1)
= (1.7) con x := j)
j = 2 (j 1)
Estamos usando Leibniz con la premisa 2 j/2 = j. Podemos usar esta premisa slo en el
caso de que se trate de un teorema, pero suponemos que (1.7) lo es y entonces por (1.1), resulta
que (2 x/2 = x) [x := j] es tambin un teorema.
Si el uso de la sustitucin es sucientemente obvio, como en este caso, podemos abreviar la
explicacin entre ), del siguiente modo:
2 j/2 = 2 (j 1)
= 2 x/2 = x)
j = 2 (j 1)
Tambin podemos agregar un comentario aclaratorio despus de un guin as:
= 2 x/2 = x el smbolo / signica divide a)
Cualquier demostracin que involucre una sucesin de aplicaciones de la regla de Leibniz,
tendr la siguiente forma:
16 1. SUSTITUCIN, IGUALDAD Y ASIGNACIN
E
0
= argumento a favor de E
0
= E
1
, usando Leibniz)
E
1
= argumento a favor de E
1
= E
2
, usando Leibniz)
E
2
= argumento a favor de E
2
= E
3
, usando Leibniz)
E
3
Los pasos individuales E
0
= E
1
, E
1
= E
2
y E
2
= E
3
y la transitividad (regla (1.4)),
demuestran que E
0
= E
3
.
1.8. La sentencia de asignacin
En la seccin previa vimos como la sustitucin interacta con la igualdad, ahora veremos
una correspondencia entre la sustitucin y la sentencia de asignacin que permitir a los pro-
gramadores razonar con asignaciones.
Supongamos E una expresin y un estado de sus variables, ejecutar la sentencia de asigna-
cin
x := E (1.8)
signica evaluar la expresin E en ese estado y guardar el resultado en x. La asignacin x := E
se lee el valor de E se asigna a x.
La ejecucin de la asignacin (1.8) en un estado, guarda en x el valor de E en ese estado,
alterando entonces el estado de x. Por ejemplo, supongamos que un estado consiste en la lista
(v, 5), (w, 4), (x, 8) y consideremos la asignacin v := v + w, el valor de la expresin v + w
en ese estado es 9 y la ejecucin de v := v + w guarda 9 en v, con lo cual el estado cambia a
(v, 9), (w, 4), (x, 8).
La manera de ejecutar una asignacin es tan importante como la manera de razonar sobre sus
efectos. Por ejemplo, a partir de la precondicin de una asignacin, cmo podemos determinar
la correspondiente poscondicin? O tambin, desde la poscondicin, podramos determinar una
adecuada precondicin? Recordemos que en el Captulo 0, introducimos los conceptos de pre y
poscondicin para un proceso en general, ahora diremos que la precondicin de una sentencia
o instruccin es una armacin sobre el estado de las variables de un programa para el cual la
sentencia puede ser ejecutada, mientras que la poscondicin es una armacin sobre el estado
de las variables una vez ejecutada la asignacin. El modo usual de indicar la precondicin y la
poscondicin de una sentencia S es
P S Q
donde P es la precondicin y Q es la poscondicin correspondientes a S. Esta notacin es
conocida como tripleta de Hoare, debido a que fue C.A.R. Hoare quien introdujo la notacin
que permitira a los lenguajes de programacin denir los trminos bajo los cuales puede de-
terminarse que un programa es correcto respecto de sus especicaciones en lugar de probar su
efectividad mediante ejecuciones sucesivas.
1.8. LA SENTENCIA DE ASIGNACIN 17
Por ejemplo,
x = 0 x := x + 1 x > 0
es una tripleta de Hoare que resultar vlida si y slo si la ejecucin de la asignacin x := x+1
en cualquier estado en que x es 0 termina en un estado en el que x > 0.
Aqu mostramos otros dos ejemplos de tripletas de Hoare vlidas para la asignacin x :=
x + 1:
x > 5 x := x + 1 x > 0
x + 1 > 0 x := x + 1 x > 0
La tripleta de Hoare
x = 5 x := x + 1 x = 7
no es vlida, porque la ejecucin de x := x + 1 en un estado en el cual x = 5 no termina en un
estado en el cual x = 7.
La siguiente es una denicin esquemtica de tripleta de Hoare vlida para una asignacin
x := E en trminos de sustitucin:
(1.19) Denicin. Dada una asignacin x := E, para cualquier poscondicin R, una adecuada
precondicin es R[x := E], es decir
R[x := E] x := E R
Es decir, la precondicin se calcula a partir de la asignacin y la poscondicin. Como ejem-
plo consideremos la asignacin x := x + 1 y la poscondicin x > 4. De acuerdo a la denicin
anterior la expresin E es x +1 y R es x > 4. Concluimos entonces que una precondicin para
una tripleta de Hoare vlida es (x > 4) [x := x + 1] que resulta x + 1 > 4.
Aqu damos ms ejemplos de la aplicacin de la denicin 1.19 para obtener tripletas de
Hoare vlidas:
x + 1 > 5 x := x + 1 x > 5
_
x
2
> x
2
y
_
x := x
2
x > x y
La propia denicin de la pre y poscondicin que ya vimos podra hacernos suponer que
la poscondicin debera calcularse desde la precondicin y de ese modo considerar como una
denicin de tripleta de Hoare vlida R x := E R[x := E]. Sin embargo, podramos
obtener usando esta regla incorrecta la tripleta x = 0 x := 2 (x = 0) [x := 2], que es
invlida porque una vez nalizada la asignacin, el estado no satisface la poscondicin. Ahora
vamos a ver porqu la denicin (1.19) es consistente con la ejecucin de la asignacin x := E.
Supongamos un programa con un estado inicial s y un estado nal s
. Vamos a demostrar
que R[x := E] tiene el mismo valor en el estado s que el que tiene R en el estado s
.
Observemos que R[x := E] y R son exactamente lo mismo salvo que, cada ocurrencia de x
en R fue reemplazada por E en R[x := E]. Ahora, la ejecucin de x := E guarda en x el valor
de la expresin E evaluada en el estado s, luego de la asignacin el valor de E en el estado s es
18 1. SUSTITUCIN, IGUALDAD Y ASIGNACIN
igual al valor de x en el estado s
_
equivalencia
disyuncin
conjuncin
discrepancia ,
implicacin
consecuencia
signos de puntuacin: parntesis ( y ).
Frmulas: Las expresiones bien formadas o frmulas del clculo proposicional sern las que
se obtienen a partir de las siguientes reglas:
i) Las variables proposicionales y las constantes son frmulas.
ii) Si E es una frmula, entonces (E) es tambin una frmula.
iii) Si E y F son frmulas y es un operador binario, entonces (E F) es una
frmula.
iv) Slo son frmulas las construdas con las reglas precedentes.
3.3. SISTEMAS FORMALES 53
Ya vimos en los captulos anteriores la denicin de expresin booleana, y tambin mencio-
namos el rol fundamental que stas cumplen en la denicin de un lenguaje articial libre de las
ambigedades y contradicciones usuales del lenguaje corriente. Observemos que el conjunto de
frmulas o expresiones bien formadas que tenemos en cuenta en este sistema formal, coincide
con el concepto de expresin booleana que hemos estado manejando. Podemos armar enton-
ces que las expresiones booleanas o frmulas se construirn usando los smbolos y las reglas
anteriores y formarn la sintaxis de nuestro clculo proposicional.
Reglas de
Inferencia:
Las reglas de inferencia usadas sern las que ya presentamos para la relacin de
igualdad en el Captulo 1. Adems, la equivalencia entre expresiones booleanas
satisfacer las siguientes propiedades:
Transitividad Si P, Q, y R son expresiones booleanas, entonces
P = Q, Q = R
P = R
Regla de
Leibniz
Si P y Q son expresiones booleanas, y E es una expresin que
involucra a la variable proposicional r, entonces:
P = Q
E [r := P] = E [r := Q]
Sustitucin Si P y R son expresiones booleanas, y P involucra a la variable
proposicional r, entonces:
P
P [r := R]
Axiomas: Los axiomas sern introducidos gradualmente. El clculo proposicional tal como se
presenta aqu no pretende la minimalidad en el nmero de reglas de inferencia y
axiomas, dado que su principal objetivo es su utilizacin para realizar demostracio-
nes que apuntan a la derivacin y vericacin de programas.
Utilizaremos el formato de demostracin que presentamos en el Captulo 1, pero antes re-
cordaremos los distintos casos en los que una frmula ser considerada un teorema dentro de
nuestro Clculo Proposicional.
Un axioma es un teorema.
La conclusin de una regla de inferencia cuyas premisas son teoremas (ya demostrados) es un
teorema.
Una expresin booleana que se demuestra equivalente a un teorema es un teorema.
A continuacin presentaremos los axiomas y los teoremas que de stos se deducen.
54 3. CLCULO PROPOSICIONAL
3.3.1. La equivalencia
La equivalencia es asociativa, esta propiedad se establece mediante el siguiente axioma:
(3.1) Axioma. Asociatividad de : ((p q) r) (p (q r))
Este axioma nos permite borrar parntesis, es decir podemos escribir
p q r en vez de p (q r) o (p q) r
(3.2) Axioma. Conmutatividad (o simetra) de : p q q p
Podemos entender porqu este axioma se lo asocia a la simetra, pues si agregamos parnte-
sis:
(p q) (q p)
Ahora daremos la prueba de nuestro primer teorema:
p p q q
Recordemos que el Axioma 3.1 nos permite agregar parntesis de diferentes maneras, con
lo cual usaremos en la demostracin este axioma como (p q q) p, de modo que usando
Leibniz, podamos reemplazar la expresin p q q por p.
p p q q
= Axioma 3.2 reemp. p q q por p )
p p
= Axioma 3.2 reemp. la primer p por p q q)
p q q p
Como la expresin nal p q q p es un axioma, y de acuerdo a la denicin de
teorema dada en el Caso 3.3, cualquier expresin booleana que se pruebe equivalente a un
axioma es un teorema, la primera expresin resulta tambin un teorema.
El siguiente axioma sobre la equivalencia introduce el smbolo constante true como abre-
viatura de p p, (usar una constante como abreviatura es razonable ya que el valor de p p
no depende de p).
(3.3) Axioma. Neutro de : true p p
En general, una constante C se dice que es el elemento neutro de una operacin , si para
cualquier valor b se tiene que b = b C = C b. Llamamos al Axioma 3.3, Neutro de la
equivalencia, debido a que de acuerdo los axiomas 3.1 y 3.2, puede reescribirse tambin como
(p true) p o p (true p).
El siguiente teorema es de esperar, podra haberse agregado como un axioma.
(3.4) Teorema. true
3.3. SISTEMAS FORMALES 55
true
= Axioma 3.3 reemp. p := true)
true true
= Axioma 3.3 reemp. el segundo true)
true p p
Como la ltima expresin es un axioma, el teorema queda demostrado.
Una generalizacin usada habitualmente en lgica e indispensable para cualquier clculo,
es que los pasos de demostracin puedan justicarse no slo por las reglas ya mencionadas sino
tambin por teoremas previamente demostrados. Podemos ahora probar el siguiente teorema
usando el anterior:
(3.5) Teorema. Reexividad de : p p
p p
= Axioma 3.3)
true
Los Axiomas 3.2 y 3.3, implican que la ocurrencia de true (o true ) en una expre-
sin es redundante. Por lo tanto Q true puede ser reemplazada por Q en cualquier expresin
sin cambiar el valor de sta. De aqu que, en general eliminaremos tales ocurrencias, a menos
que necesitemos especcamente hacer referencia de ellas.
Nuestro formato de demostracin consistir en general de una serie de pasos de equivalencia
desde la expresin a demostrar hasta llegar a un axioma. Cada paso de demostracin estar
justicado por una aplicacin de la Regla de Leibniz, y el teorema nal seguir por aplicacin
de la regla de transitividad.
Cuando se quiere demostrar que, dadas dos expresiones lgicas E y F, es vlida la expresin
E F, en lugar de partir de la equivalencia que pretendemos probar y terminar en el valor true
(o en algn otro teorema ya demostrado o axioma), podemos tambin comenzar con la expresin
booleana E y a travs de equivalencias llegar a F, es decir :
E
o
= justicacin de E
o
E
1
)
E
1
.
.
.
E
n1
= justicacin de E
n1
F)
F
El esquema de demostracin presentado arriba es correcto debido a que puede transformarse
inmediatamente en el siguiente:
56 3. CLCULO PROPOSICIONAL
true
= Axioma 3.3, true p p)
E
o
E
o
= justicacin de E
o
E
1
)
E
o
E
1
.
.
.
E
o
E
n1
= justicacin de E
n1
F)
E
o
F
(3.6) Mtodo de prueba. Para probar que P Q es un teorema, transformamos P en Q o
Q en P usando Leibniz.
Estos resultados acerca del clculo proposicional se llaman metateoremas, para distinguirlos
de los teoremas que son frmulas de clculo. Un metateorema es en general, una armacin que
se hace sobre el sistema formal que se demuestra verdadera (true). El objetivo de los metateo-
remas es proveer herramientas para poder usar el clculo de manera efectiva en la construccin
de demostraciones.
La metademostracin del siguiente metateorema se deja como ejercicio, ntese que hay que
describir cmo se construye una demostracin a partir de otra u otras.
(3.7) Metateorema. Dos teoremas cualesquiera son equivalentes.
3.3.2. La negacin, discrepancia, y false
Introducimos tres axiomas. El primero dene a false; el primero y el segundo de manera
conjunta denen la negacin, , y el tercero dene a la discrepancia, ,.
(3.8) Axioma. Denicin de false: false true
(3.9) Axioma. Negacin y equivalencia: (p q) p q
Adems se dene el signicado de la constante false con el siguiente axioma:
(3.10) Axioma. Denicin de ,: p , q (p q)
Los siguientes teoremas se dejan como ejercicio:
(3.11) Teorema. p q p q
(3.12) Teorema. Doble negacin: p p
(3.13) Teorema. Negacin de false: false true
(3.14) Teorema. (p , q) p q
3.3. SISTEMAS FORMALES 57
(3.15) Teorema. p p false
(3.16) Teorema. Conmutatividad de ,: (p , q) (q , p)
(3.17) Teorema. Asociatividad de ,: ((p , q) , r) (p , (q , r))
(3.18) Teorema. Asociatividad mutua: ((p , q) r) (p , (q r))
(3.19) Teorema. Intercambiabilidad: p , q r p q , r
Ahora, podemos notar una interesante y til propiedad sobre secuencias de equivalencias.
La expresin booleana
P
0
P
1
P
n
es verdadera (true) cuando exactamente un nmero par de P
i
es falso (false). En efecto, de
acuerdo al axioma 3.3, cada subexpresin false false en la secuencia puede ser reemplazada
por true, hasta que se consiga o bien una expresin falsa o ninguna, en cuyo caso la secuencia
es falsa o verdadera. Por ejemplo, podemos determinar sin ninguna manipulacin formal que
false false false true es falsa, porque tres de sus expresiones son falsas.
Podemos utilizar este hecho sobre secuencias de equivalencias para formalizar frases en
lenguaje corriente, como se indican a continuacin:
Ninguno o los dos, entre p y q son verdaderos: p q
Exactamente uno entre p y q es verdadero: (p q), o p , q
Cero, dos o cuatro entre p, q, r y s son verdaderos: p q r s
Uno o tres entre p, q, r y s son verdaderos: (p q r s)
Tcnicas de demostracin y principios
Ilustraremos distintas tcnicas para desarrollar demostraciones de frmulas, a travs de
ejemplos. El primer mtodo que presentamos, lo usaremos para probar el teorema 3.11
p q p q
y trataremos de demostrar que esta frmula es equivalente a true. Solamente podemos usar
los axiomas y los teoremas hasta ahora demostrados. Para ello, los analizamos uno a uno para
encontrar un parecido con la estructura de (3.11). Observamos que el Axioma 3.9 parecera ser el
ms apropiado. Obviamente, a mayor cantidad de teoremas que se recuerden, y mayor prctica
en encontrar similitudes con las expresiones y subexpresiones de la frmula en cuestin, ms
fcil ser desarrollar una prueba.
(3.20) Tcnica de prueba. Analizar qu teoremas pueden identicarse con la estructuras o
subestructuras en las expresiones. Los operadores que aparecen en las expresiones boo-
leanas junto con la forma de sus subexpresiones son la clave para elegir los teoremas
que puedan aplicarse.
58 3. CLCULO PROPOSICIONAL
Comenzaremos con la demostracin:
p q p q
= (3.9), (p q) p q)
(p q) p q
= (3.9), con p, q := q, p i.e. (q p) q p)
(p q) (p q)
La ltima expresin obtenida es verdadera, pues es la Reexividad de (3.5), con la sus-
titucin p := (p q). Adems hemos hecho algunas simplicaciones en la demostracin,
los axiomas de asociatividad y conmutatividad de la equivalencia fueron utilizados sin hacer
mencin de ellos.
El teorema 3.11, puede demostrarse tambin transformando p q en p q, o tambin
transformando p p en q q. Otra opcin es comenzar con p y transformarlo en q p
q.
Ahora consideremos dos pruebas de p p false (teorema 3.15)
p p false
= (3.9), (p q) p q con q := p)
(p p) false
= (3.3) con q := p)
(true) false
La ltima expresin corresponde al Axioma 3.8. Ahora veamos otra demostracin
p p
= (3.9), (p q) p q con q := p)
(p p)
= (3.3) con q := p)
(true)
= (3.8) Denicin de false)
false
La diferencia entre las pruebas es que la primera contiene menos pasos, pero en todas las
lneas se requiere la expresin false, y esto, cuando las expresiones que se repitan sean ms
complejas tiende a la propagacin de errores de transcripcin. Para evitar estos inconvenientes
es preferible evitar la repeticin de expresiones en cada lnea de demostracin.
(3.21) Principio. Evitar en los formatos de prueba la repeticin de subexpresiones en cada
lnea de la demostracin.
Por ltimo demostraremos el teorema:
(3.22) Teorema. p , false p
3.3. SISTEMAS FORMALES 59
p , false
= (3.10) y sustitucin de q := false)
(p false)
= (3.8) Denicin de false)
(p true)
= (3.9) Negacin y equivalencia, con p, q := true, p)
(true) p
= (3.12) Doble negacin y (3.3) true como neutro de )
p
(3.23) Tcnica de prueba. Para demostrar propiedades de un nuevo operador, un mtodo
frecuentemente exitoso es reemplazar ste operador por su denicin en trminos de
otros y manipular las propiedades ya vistas de los otros operadores. Luego, introducir
si es posible, el nuevo operador usando su denicin.
3.3.3. La disyuncin
El operador de disyuncin , se dene de acuerdo a los siguientes axiomas:
(3.24) Axioma. Asociatividad de : (p q) r p (q r)
(3.25) Axioma. Conmutatividad de : p q q p
Antes del siguiente axioma, diremos que un operador binario es idempotente si x x = x
para cualquier x. Por ejemplo, la multiplicacin y la suma no son operadores idempotentes.
(3.26) Axioma. Idempotencia: p p p
(3.27) Axioma. Distributividad de respecto de : p (q r) (p q) (p r)
(3.28) Axioma. Tercero excludo: p p true
Este ltimo axioma signica que en cualquier estado de p, o bien p es verdadero o p es
verdadero, no existiendo situaciones intermedias.
Con estos axiomas podemos demostrar los siguientes teoremas.
(3.29) Teorema. Elemento neutro de : p false p
(3.30) Teorema. Distributividad de respecto de : p (q r) (p q) (p r)
(3.31) Teorema. p q p q p
(3.32) Teorema. Elemento absorbente de : p true true
60 3. CLCULO PROPOSICIONAL
En general, diremos que Z es elemento absorbente del operador binario , si para cualquier
x vale x Z = Z x = Z. Por ejemplo 0 es el elemento absorbente de la multiplicacin.
En la prueba del teorema 3.32, vamos a repasar un mtodo de demostracin ya visto (3.6),
que consiste en probar que P Q, transformando o bien P en Q, o bien Q en P.
p true
= Axioma 3.3 (p p) true)
p (p p)
= Axioma 3.27 Distributividad de con respecto a )
(p p) (p p)
= Axioma 3.3 con p := p p)
true
Es claro que aplicando la tcnica de demostracin, hemos transformado p true en true,
hubiera sido ms complicado si hubiramos optado por lo recproco, pues true no nos da su-
cientes pistas para comenzar una prueba. La expresin ptrue ofrece ms estructura, es decir
nos permite la posibilidad de aplicar axiomas que conocemos sobre el operador disyuncin.
(3.33) Tcnica de prueba. En general, conviene comenzar a demostrar una equivalencia P
Q a partir de la expresin ms compleja, o de mayor estructura (sea sta P o Q) y
transformarla en la otra expresin.
Por otra parte, la demostracin anterior puede reescribirse de modo de transformar true en
p true, as:
true
= Axioma 3.3 con p := p p)
(p p) (p p)
= (3.27), Distributividad de con respecto a )
p (p p)
= Axioma 3.3 (p p) true)
p true
Esta prueba es tan vlida como la anterior, pero en su presentacin, no queda para nada claro
cul fue su motivacin, y de ah que no sea sencillo visualizar el desarrollo mismo de la prueba.
(3.34) Principio. En general, conviene que la estructura de demostracin sea lo menos arti-
ciosa posible, haciendo que cada paso de la prueba sea fcil de comprender, y que no
pierda de vista el objetivo de la manipulacin.
3.3.4. La conjuncin
Denimos la conjuncin con un nico axioma, conocido como Regla dorada.
(3.35) Axioma. Regla dorada: p q p q p q
3.3. SISTEMAS FORMALES 61
La regla dorada aprovecha fuertemente la asociatividad y la conmutatividad de la equivalen-
cia. En principio la interpretamos 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), etctera.
La regla dorada ser de gran utilidad para demostrar propiedades de la conjuncin y la
disyuncin, dado que provee una relacin entre ambas.
A continuacin presentamos algunos teoremas relacionados con el operador .
(3.36) Teorema. Asociatividad de : p (q r) (p q) r
(3.37) Teorema. Conmutatividad de : p q q p
(3.38) Teorema. Idempotencia de : p p p
(3.39) Teorema. Neutro de : p true p
(3.40) Teorema. Elemento absorbente de : p false false
(3.41) Teorema. Distributividad de sobre : p (q r) (p q) (p r)
(3.42) Teorema. Contradiccin: p p false
Los siguientes teoremas relacionan la conjuncin con la disyuncin:
(3.43) Teorema. Absorcin:
a) p (p q) p
b) p (p q) p
(3.44) Teorema. Absorcin:
a) p (p q) p q
b) p (p q) p q
Los teoremas anteriores son llamados de absorcin, pues la expresin q es absorbida por p
en el primero y la expresin p es absorbida por q en el segundo.
(3.45) Teorema. Distributividad de con respecto a : p (q r) (p q) (p r)
(3.46) Teorema. Distributividad de con respecto a : p (q r) (p q) (p r)
62 3. CLCULO PROPOSICIONAL
El siguiente teorema es conocido como Leyes de De Morgan.
(3.47) Teorema. Leyes de De Morgan
a) (p q) p q
b) (p q) p q
El siguiente grupo de teoremas relaciona la conjuncin con la equivalencia.
(3.48) Teorema. p q p q p
(3.49) Teorema. p (q r) p q p r p
El teorema anterior muestra como la conjuncin distribuye respecto de la equivalencia, en
la utilizacin de esta regla, es un error comn olvidar la ltima equivalencia con p.
(3.50) Teorema. p (q p) p q
(3.51) Teorema. Reemplazo: (p q) (r p) (p q) (r q)
En otros sistemas de clculo proposicional, es comn usar los siguientes teoremas para de-
nir a la equivalencia y a la discrepancia. El primer teorema indica que se da p q exactamente
cuando p y q son ambos true o ambos false. El segundo teorema indica que p , q es cierta
cuando exactamente una entre p y q es true y la otra es false.
(3.52) Teorema. Denicin alternativa de : p q (p q) (p q)
(3.53) Teorema. O exclusivo: p , q (p q) (p q)
Usando la Regla dorada
Como la denicin de viene dada mediante la Regla Dorada, sta es utilizada con frecuen-
cia en la eliminacin de la conjuncin en el primer paso de la demostracin de la mayora de los
teoremas listados en la seccin correspondiente a este operador. Como ejemplo, probaremos el
teorema 3.44(a), p (p q) p q
p (p q)
= (3.35), Regla dorada con q := p q)
p p q p p q
= (3.28), Tercero excluido)
p p q true q
= Axioma 3.32, true q true)
p p q true
= Axioma 3.3, con p := p p q)
p p q
= (3.31), p q p q p, con p, q := q, p)
p p q q
= (3.35) Regla dorada )
p q
3.3. SISTEMAS FORMALES 63
La Regla Dorada tiene cuatro operadores equivalencia. Por lo tanto, puede usarse para reem-
plazar una equivalencia por tres, dos equivalencias por otras dos, o tres equivalencias por una.
Vamos a ver ahora como utilizar estas diferentes opciones. Primero, probemos p true p
(teorema 3.39) demostrando que ste equivale a otro teorema ya probado.
p true p
= (3.35) Regla dorada, reemp. dos )
p true true
Y este ltimo es el teorema 3.32.
Ahora probemos (3.49), p (q r) p q p r p. Debido a que la equivalencia
es asociativa y conmutativa vamos realizar la demostracin transformando p (q r) p en
p q p r.
p (q r) p
= (3.35) Regla dorada, con q := q r, reemp. dos )
p (q r) q r
= (3.27) Distributividad de con respecto a )
p q p r q r
= (3.2) Conmutatividad de )
p q q p r r
= (3.35) Regla dorada dos veces, reemp. p q q y p r r)
p q p p r p
= (3.2) Conmutatividad de con q := p q p r)
p q p r
Usando lemas
Cuando una prueba se torna larga y complicada, es a veces til implementar una estructura
que la divida en lemas. Un lema es un teorema auxiliar que se utiliza en la prueba de un teorema.
La diferencia entre el lema y el teorema est en el punto de vista del objetivo de prueba. El
teorema apunta a aquello que se quiere demostrar, mientras que el lema es un teorema menor
que se necesita en la prueba.
(3.54) Principio. Los lemas pueden proveer nuevas estructuras, esclarecer hechos relevantes,
y acortar pruebas de otros teoremas.
Vamos a ilustrar la necesidad de lemas en la demostracin del teorema de la asociatividad de
la conjuncin (3.36). Comenzaremos con la expresin (p q) r que pretendemos transformar
en p (q r). Usaremos la Regla dorada para interpretar el operador conjuncin.
64 3. CLCULO PROPOSICIONAL
(p q) r
= (3.35) Regla Dorada interpretada como p q (p q p q))
(p q p q) r
= (3.35) Regla Dorada con p, q := (p q p q) , r)
(p q p q) r (p q p q) r
= (3.27)Distributividad de respecto de )
(p q p q) r (p r q r (p q) r)
= asociatividad y conmutatividad de y )
p q r p q q r r p p q r
Hemos mostrado que (p q) r es equivalente a la equivalencia entre todas las posibles
disjunciones entre p, q y r.
(p q) r p q r p q q r r p p q r (3.3)
que es una equivalencia lo sucientemente interesante como para considerarla un lema. Ms
an, como la equivalencia y la disyuncin son asociativas y conmutativas podemos esperar que
tambin resulte equivalente a la expresin p (q r), que era nuestro objetivo inicial.
Por lo tanto ahora presentamos nuestra demostracin del teorema 3.36, utilizando (3.3) co-
mo lema:
p (q r)
= (3.37) Conmutatividad de )
(q r) p
= lema 3.3, con p, q, r := q, r, p)
q r p q r r p p q q r p
= Asociatividad y Conmutatividad de y )
p q r p q q r r p p q r
= lema 3.3 )
(p q) r
(3.55) Tcnica de prueba. Explotar la habilidad de descomponer teoremas como la Regla
Dorada en varias formas distintas.
3.3.5. La implicacin
Ahora denimos los dos ltimos operadores, la implicacin y la consecuencia .
(3.56) Axioma. Denicin de implicacin: p q p q q
(3.57) Axioma. Denicin de consecuencia: p q p q p
Debido a la similitud entre estos dos operadores, daremos solamente teoremas que involu-
cren al operador implicacin, los correspondientes a la consecuencia siguen inmediatamente del
Axioma 3.57.
Lo primero que podemos observar sobre la implicacin es que puede reescribirse de distintas
formas. Los siguientes teoremas describen esta situacin:
3.3. SISTEMAS FORMALES 65
(3.58) Teorema. Denicin alternativa de implicacin: p q p q
(3.59) Teorema. Denicin alternativa de implicacin: p q p q p
(3.60) Teorema. Contrarrecproco: p q q p
Tanto el teorema 3.58, como el teorema 3.59 se utilizan frecuentemente como denicin de
implicacin. A continuacin presentamos una lista de teoremas relativos a este operador.
(3.61) Teorema. p (q r) p q p r
(3.62) Teorema. Distributividad de respecto de : p (q r) p q p r
Los dos teoremas anteriores muestran cmo eliminar la equivalencia en el consecuente.
(3.63) Teorema. p (q r) (p q) (p r)
(3.64) Teorema. Traslacin: p q r p (q r)
El teorema anterior indica cmo trasladar una conjuncin del antecedente al consecuente.
(3.65) Teorema. p (p q) p q
(3.66) Teorema. p (q p) p
(3.67) Teorema. p (p q) true
(3.68) Teorema. p (q p) q p
(3.69) Teorema. p q p q p q
Los siguientes teoremas relacionan la implicacin con las constantes booleanas. El primero
establece que la implicacin es reexiva.
(3.70) Teorema. Reexividad de : p p true
(3.71) Teorema. Elemento absorbente a derecha de : p true true
(3.72) Teorema. Elemento neutro a izquierda de : true p p
(3.73) Teorema. p false p
(3.74) Teorema. false p true
Los siguientes teoremas son llamados teoremas de debilitamiento o fortalecimiento, depen-
diendo de si se usan para transformar el antecedente en el consecuente (debilitndolo) o para
transformar el consecuente en el antecedente (fortalecindolo).
66 3. CLCULO PROPOSICIONAL
(3.75) Teorema. de Debilitamiento o fortalecimiento
a) p p q
b) p q p
c) p q p q
d) p (q r) p q
e) p q p (q r)
(3.76) Teorema. Modus Ponens: p (p q) q
Modus Ponens es el trmino en latn correspondiente a Mtodo del puente, en algunos sis-
temas de clculo proposicional, ste teorema constituye la ms importante de las reglas de infe-
rencia, si bien en el nuestro no ocupa un papel tan importante, es de suma utilidad en demostra-
ciones.
Los siguientes teoremas involucran anlisis de casos. El primero indica que la prueba de
p q r puede hacerse mediante las pruebas de p r y q r por separado. El segundo
asegura que la prueba de r puede partirse en dos casos.
(3.77) Teorema. (p r) (q r) (p q r)
(3.78) Teorema. (p r) (p r) r
En la mayora de los sistemas de clculo proposicional, la equivalencia se dene como
ltimo operador, y se hace a travs de la mutua implicacin, con lo cual el teorema que sigue,
resulta un axioma en estos sistemas.
(3.79) Teorema. Implicacin mutua: (p q) (q p) p q
Antes de establecer el siguiente teorema diremos que una operacin binaria , es antisim-
trica si xyyx x = y es cierta para cualquier par x, y. Por ejemplo y son operadores
antisimtricos.
(3.80) Teorema. Antisimetra: (p q) (q p) (p q)
Los siguientes teoremas estn relacionados con la transitividad y se usarn en el prximo
captulo para abreviar el formato de demostracin:
(3.81) Teorema. Transitividad:
a) (p q) (q r) (p r)
b) (p q) (q r) (p r)
c) (p q) (q r) (p r)
3.3. SISTEMAS FORMALES 67
Prueba de teoremas en donde participa la implicacin
Haremos aqu una serie de consideraciones generales sobre los teoremas en donde aparece la
implicacin. En estos casos, la tcnica de prueba 3.23 ser de gran utilidad, para esto es necesa-
rio recordar no slo la denicin de implicacin (Axioma 3.56) sino tambin los teoremas 3.58,
3.59 y 3.60 de acuerdo a la estructura de la expresin que debemos manipular. Para ilustrar esto
ltimo, probaremos (3.61), p (q r) pq pr. Como esta expresin contiene conjun-
ciones, la denicin alternativa de implicacin (3.59) parecera la ms apropiada para utilizar,
ya que muestra como reemplazar una implicacin introduciendo una conjuncin:
p (q r)
= (3.59) Denicin de implicacin )
p (q r) p
= (3.49), p (q r) p q p r p)
p q p r
Veamos ahora cmo probar la implicacin mutua (3.79), (p q) (q p) p q:
(p q) (q p)
= (3.58) Denicin alternativa en cada implicacin)
(p q) (q p)
= 3.45 Distributividad de con respecto a )
(p q) (p p) (q q) (q p)
= (3.42) Contradiccin y (3.29) Elemento neutro de )
(p q) (q p)
= (3.52) Denicin alternativa de )
p q
Aqu presentamos una prueba corta de la Transitividad de la implicacin (3.81a), en donde
usaremos la Traslacin (3.64), para trasladar p desde el consecuente al antecedente.
(p q) (q r) (p r)
= (3.64) Traslacin, con p, q := (p q) (q r) , p)
p (p q) (q r) r
= (3.65), p (p q) p q)
p q (q r) r
= (3.65), otra vez con p, q := q, r)
p q r r
Esta ltima expresin no es ms que el teorema de Fortalecimiento (3.75b), con p, q :=
p q, r.
68 3. CLCULO PROPOSICIONAL
La Regla de leibniz como axioma
Ya hemos hablado y utilizado en varias oportunidades la Regla de Leibniz:
Leibniz :
X = Y
E [z := X] = E [z := Y ]
(3.4)
ahora que hemos introducido el operador , podemos dar la siguiente versin de Leibniz como
un esquema de axioma:
(3.82) Axioma. Si e y f son expresiones booleanas idnticas en un estado dado, es decir e = f
entonces al sustituir en una expresin E se obtiene E [z := e] = E [z := f]. Es decir
(e = f) E [z := e] = E [z := f]
La forma de este axioma es diferente a los anteriores, ya que se trata de un esquema de
axioma, es decir para cada expresin E se consigue una axioma diferente.
Si bien este axioma est inspirado en la regla de Leibniz su signicado es distinto. La regla
de Leibniz dice que: si X = Y es vlida, es decir es true para cualquier estado, entonces
E [z := X] = E [z := Y ] tambin es vlida. El axioma de Leibniz (3.82), en cambio, establece
que si e = f es true en un estado, entonces E [z := e] = E [z := f] es true en ese estado.
Una diferencia importante con la regla de Leibniz, es que la recproca del axioma no es cierta,
mientras que la regla de Leibniz tiene una recproca verdadera. Veamos esta diferencia reejada
en el siguiente ejemplo:
(3.83) Ejemplo. Sean E la expresin true z, e el valor true y f el valor false, luego es
cierto que
E [z := true] = E [z := false]
dado que ambas expresiones son verdaderas, pero obviamente true ,= false
Las siguientes reglas de sustitucin siguen del Axioma 3.82:
(3.84) Teorema. Reglas de Sustitucin:
a) (e = f) E [z := e] (e = f) E [z := f]
b) (e = f) E [z := e] (e = f) E [z := f]
c) q (e = f) E [z := e] q (e = f) E [z := f]
Los teoremas que siguen establecen propiedades cuando se reemplazan variables por cons-
tantes booleanas.
(3.85) Teorema. Reemplazo por true :
a) p E [z := p] p E [z := true]
b) q p E [z := p] q p E [z := true]
3.4. EJERCICIOS 69
(3.86) Teorema. Reemplazo por false
a) E [z := p] p E [z := false] p
b) E [z := p] q p E [z := false] q p
(3.87) Teorema. Reemplazo por true : p E [z := p] p E [z := true]
(3.88) Teorema. Reemplazo por false : p E [z := p] p E [z := false]
(3.89) Teorema. Shannon: E [z := p] (p E [z := true]) (p E [z := false])
Vamos a ilustrar el uso de estos teoremas demostrando p q (p q):
p q (p q)
= (3.85b) Reemplazo por true)
p q (true q)
= (3.85b) Reemplazo por true)
p q (true true)
= (3.3) Neutro de )
p q true
= teorema 3.71 con p := p q)
true
3.4. Ejercicios
Ejercicios de Equivalencia
3.1 Utilizar las tablas de verdad para demostrar que los axiomas (3.1), (3.2) y (3.3) son vlidos,
es decir, true en todo estado.
3.2 Probar la Reexividad de (3.5), p p.
Ejercicios de negacin, discrepancia y false
3.3 Probar el teorema (3.11) de tres maneras diferentes: comenzar con p q y transformarlo
en p q, comenzar con p p y transformarlo en q q, y nalmente comenzar con
p y transformarlo en q p q. Comparar las tres pruebas con la brindada en la
pgina 58, Cul es ms simple o ms corta?.
3.4 Probar la Doble negacin (3.12), p p.
3.5 Probar la Negacin de false (3.13), false true.
70 3. CLCULO PROPOSICIONAL
3.6 Probar el teorema (3.14), (p , q) p q.
3.7 Probar el teorema (3.15) transformando p p false en true utilizando (3.11). La
prueba puede requerir solo dos usos de Leibniz.
3.8 Probar la Intercambiabilidad mutua (3.19), p , q r p q , r, utilizando la tcnica
de eliminacin de la denicin (3.23) eliminando ,, utilizando una propiedad de y
reintroduciendo ,.
Ejercicios de disyuncin
3.9 Probar que el elemento neutro de un operador binario es nico. (Un objeto es nico si,
cuando se supone que dos de ellos B y C existen, podemos probar que B = C)
3.10 Probar la Identidad de (3.29), p false p, transformando el lado ms complejo o
estructurado en el lado ms simple. El teorema (3.15) puede ser til para introducir una
equivalencia.
3.11 Probar la Distributividad de sobre (3.30), p (q r) (p q) (p r). La prueba
requiere slo la simetra, asociatividad y la idempotencia de .
Ejercicios sobre conjuncin
3.12 Mostrar la validez de la Regla Dorada (3.35), construyendo su tabla de verdad.
3.13 Probar la Conmutatividad del (3.37), p q q p, usando la tcnica de eliminacin
de la denicin (3.23) eliminar el (usando la denicin dada por la Regla Dorada),
manipular la expresin y luego reintroducir el .
3.14 Probar la Idempotencia del (3.38), p p p , usando la tcnica de eliminacin de
la denicin (3.23) eliminar el (usando la denicin dada por la Regla Dorada), y
manipular la expresin.
3.15 Probar el Elemento absorbente de (3.40), p false false, usando la tcnica de
eliminacin de la denicin (3.23) eliminar el (usando la denicin dada por la Regla
Dorada), y manipular la expresin.
3.16 Probar la Contradiccin del (3.42), p p false, usando la tcnica de la denicin
de la eliminacin (3.23) eliminar el (usando la denicin dada por la Regla Dorada),
y manipular la expresin.
3.17 Probar la Absorcin (3.43a), p(p q) p usando la tcnica de eliminacin de la deni-
cin (3.23) eliminar el (usando la denicin dada por la Regla Dorada), y manipular
la expresin.
3.4. EJERCICIOS 71
3.18 Probar la Absorcin (3.43b), p (p q) p. Usar la Regla Dorada.
3.19 Probar la Absorcin (3.44b), p (p q) p q. Usar la Regla Dorada y manipular la
expresin.
3.20 Probar la Distribucin del sobre el (3.46), p (q r) (p q) (p r), usando la
tcnica de eliminacin de la denicin (3.23) eliminar el (usando la denicin dada
por la Regla Dorada), manipular la expresin y reintroducir usando la Regla Dorada
nuevamente.
3.21 Probar el teorema de la Distribucin del sobre el (3.45). Atencin: no puede probarse
de la misma forma que la Distribucin del sobre el (3.46), porque no se distribuye
sobre tan elegantemente. En su lugar prubelo usando (3.46) y Absorcin.
3.22 Probar la Ley De Morgan (3.47a), (p q) p q. Comenzar usando la Regla
Dorada; (3.31) debera resultar til.
3.23 Probar (3.48), p q p q p. El teorema (3.31) debera resultar til.
3.24 Probar el Reemplazo (3.51), (p q) (r p) (p q) (r q), probando que el
lado derecho y el lado izquierdo de la expresin son equivalentes a p q r p q
q r r p. La transformacin del lado izquierdo (o el lado derecho) a sta expresin
puede realizarse aplicando (3.27) tres veces.
3.25 Probar el teorema del O Exclusivo (3.53), p , q (p q) (p q). Ayuda: Tratar
de aplicar la Denicin de (3.52).
Ejercicios sobre implicacin
3.26 Probar Implicacin (3.58), p q p q .
3.27 Probar Implicacin (3.59), p q p q p .
3.28 Probar Contrarrecproco (3.60), p q q p .
3.29 Probar p q p q p .
3.30 Probar Distributividad de respecto de (3.62),
p (q r) p q p r.
3.31 Probar Traslacin (3.64), p q r p (q r).
3.32 Probar el teorema (3.67), p (p q) true.
3.33 Probar el teorema (3.68), p (q p) q p.
72 3. CLCULO PROPOSICIONAL
3.34 Probar el teorema (3.69), p q p q p q.
3.35 Probar Reexividad de (3.70), p p true.
3.36 Probar Elemento neutro a izquierda de (3.72), true p p.
3.37 Probar el teorema (3.73), p false p.
3.38 Probar Debilitamiento/fortalecimiento (3.75a), p p q
3.39 Probar Debilitamiento/fortalecimiento (3.75b), p q p.
3.40 Probar Debilitamiento/fortalecimiento (3.75c), p q p q.
3.41 Probar Debilitamiento/fortalecimiento (3.75d), p (q r) p q.
3.42 Probar Debilitamiento/fortalecimiento (3.75e), p q p (q r) .
3.43 Probar Modus Ponens (3.76), p (p q) q .
3.44 Probar el teorema (3.77), (p r) (q r) (p q r).
3.45 Demostrar el teorema (3.78), (p r) (p r) r.
3.46 Demostrar Antisimetra (3.80) en dos pasos. Usar el teorema de Implicacin mutua (3.79).
3.47 Demostrar Transitividad (3.81c). Hacer uso de los teoremas de Implicacin mutua (3.79),
Transitividad (3.81a) y Traslacin (3.64).
Ejercicios sobre la Regla de Leibniz como axioma
3.48 a) Probar la sustitucin (3.84a), (e = f) E [z := e] (e = f) E [z := f]. Comenzar
con Leibniz (3.82), y reemplazar la implicancia.
b) Probar la sustitucin (3.84b), (e = f) E [z := e] (e = f) E [z := f].
c) Probar el reemplazo por true (3.85a), p E [z := p] p E [z := true]. Para
poder utilizar (3.84b), introducir el equivalente true en el antecedente.
d) Probar el reemplazo por true (3.85b), q p E [z := p] q p E [z := true].
e) Probar el reemplazo por falser (3.86b), E [z := p] pq E [z := false] pq.
f) Probar Shannon (3.89) E [z := p] (p E [z := true]) (p E [z := false]).
g) Probar Debilitamiento/fortalecimiento (3.75a), p q p (q r), usando el Rem-
plazo por true.
3.49 Sea P una expresin de la forma true, q r, q r, o q r, y su dual P
D
. Demostrar
que la proposicin P P
D
es vlida para cualquier expresin P de la forma dada,
asumiendo que es vlida para cada una de sus subexpresiones. Ayuda: Por la denicin de
dualidad, para un operador como por ejemplo , se cumple que (q r)
D
q
D
r
D
.
3.4. EJERCICIOS 73
Ejercicios sobre Formas Normales
3.50 Una expresin booleana est en su forma normal conjuntiva si es de la forma:
E
0
E
1
... E
n
donde cada E
i
es una disjuncin de variables y variables negadas. Por ejemplo, la siguiente
expresin est en su forma normal conjuntiva:
(a b) (a b c) (a)
Una expresin est en forma normal disyuntiva si es de la forma:
E
0
E
1
... E
n
donde cada E
i
es una conjuncin de variables y variables negadas. Por ejemplo, la si-
guiente expresin est en su forma normal disyuntiva:
(a b) (a b c) (a)
En Ingeniera elctrica, donde las formas normales son usadas cuando se trabaja con cir-
cuitos, una expresin de la forma V
0
V
1
... V
n
, donde cada V
i
es una variable, es
llamada maxtrmino, por la siguiente razn. Si consideramos false < true, luego x y
es el mximo entre x e y, por lo que el maxtrmino representa al mximo de sus operandos.
De la misma manera, una expresin de la forma V
0
V
1
... V
n
es llamada mintrmino.
a) La siguiente tabla de verdad dene un conjunto de estados de las variables a, b, c y
d. Dar una expresin booleanda en forma normal disyuntiva que sea verdadera exac-
tamente en los estados denidos por la tabla de verdad. Basndose en este ejemplo
describir un procedimiento para convertir una tabla de verdad en una expresin boo-
leana equivalente en su forma normal disyuntiva.
a b c d
true true true false
true false true false
false true true false
Dado a que cada expresin booleana puede ser descripta por una tabla de verdad,
podemos decir entonces que cada expresin booleana puede ser transformada a la
forma normal disyuntiva.
b) Resolver el item a) dando ahora la forma normal conjuntiva. Describir tambin un
procedimiento para transformar una tabla a una expresin booleana en su forma nor-
mal conjuntiva.
74 3. CLCULO PROPOSICIONAL
CAPTULO 4
Aplicaciones del Clculo Proposicional
ndice del Captulo
4.1. Forma abreviada en la prueba de implicaciones . . . . . . . . . . . . . . 76
4.2. Suponiendo el antecedente . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.3. Analizando razonamientos en lenguaje corriente . . . . . . . . . . . . . . 78
4.4. Construyendo contraejemplos . . . . . . . . . . . . . . . . . . . . . . . . 79
4.5. Resolucin de acertijos lgicos . . . . . . . . . . . . . . . . . . . . . . . . 80
4.5.1. El dilema del pretendiente de Portia . . . . . . . . . . . . . . . . . . 80
4.5.2. Caballeros y pcaros . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.5.3. Existe Superman? . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.5.4. El dilema de la lgica clsica . . . . . . . . . . . . . . . . . . . . . . 85
4.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Forma abreviada en la prueba de implicaciones . . . . . . . . . . . . 86
Suponiendo el antecedente . . . . . . . . . . . . . . . . . . . . . . . 86
Acertijos y razonamientos en lenguaje corriente . . . . . . . . . . . . 87
E
n el captulo anterior, denimos el clculo proposicional, y discutimos diferentes estrategias
de demostraciones, adems de probar numerosos teoremas. En este captulo damos cier-
ta exibilidad al uso del clculo proposicional. Primero, introducimos una extensin a nuestro
formato de prueba de modo de abreviar demostraciones en donde se presenten implicaciones y
mostramos cmo presentar pruebas en un formato menos riguroso. Luego, veremos una aplica-
cin del clculo proposicional: formalizaremos razonamientos realizados en lenguaje corriente
mediante expresiones booleanas, para luego determinar si stas resultan teoremas.
75
76 4. APLICACIONES DEL CLCULO PROPOSICIONAL
4.1. Forma abreviada en la prueba de implicaciones
Dejemos por un momento nuestro clculo proposicional y consideremos relaciones aritm-
ticas. Supongamos que sabemos cierta la siguiente igualdad b = d 1. Como sabemos que
d 1 < d, podemos asegurar que b < d. Es decir, hemos probado que b < d utilizando la ley
de transitividad: x = y y < z x < z.
Podemos extender el formato de prueba utilizado para igualdades entre expresiones, del
siguiente modo:
b
= razn por la cual b = d 1)
d 1
< denicin de <)
d
Aqu estamos haciendo uso implcito de la ley de transitividad: x = y y < z x < z,
con x, y, z := b, d 1, d.
Un formato similar de prueba es tambin vlido siempre que tengamos una relacin que
satisfaga leyes de transitividad. Es decir, si se tiene una relacin que satisface reglas como:
x = y y z x z y x y y z x z. En particular, podemos extender el formato de
prueba en nuestro clculo proposicional al formato indicado arriba, debido a que contamos con
los teoremas 3.81. Entonces, supongamos cierto que p q y que q r, podemos demostrar
que p r a travs de la siguiente demostracin:
p
= razn por la cual p q)
q
razn por la cual q r)
r
Para aceptar este nuevo formato de prueba, debemos probar que podemos transformar esta
prueba en una que no utilice la extensin que permitimos arriba, aqu presentamos la prueba
que parte del teorema 3.81b
(p q) (q r) (p r)
= razn por la cual p q true)
true (q r) (p r)
= razn por la cual q r true)
true true (p r)
= (3.38) y (3.72), p p p y true p p)
(p r)
Los siguiente teoremas pueden probarse utilizando el nuevo formato de prueba.
(4.1) Teorema. p (q p)
4.2. SUPONIENDO EL ANTECEDENTE 77
Antes de enunciar los teoremas que siguen, diremos que una funcin booleana se dice mo-
ntona si (x y) (f.x f.y).
(4.2) Teorema. Monotona de : (p q) (p r q r)
(4.3) Teorema. Monotona de : (p q) (p r q r)
Vamos a ilustrar la prueba del teorema 4.2, utilizando el formato abreviado de pruebas para
implicaciones. Comenzaremos por el consecuente, pues tiene ms estructura, y lo transforma-
remos en el antecedente (p q).
p r q r
= (3.56), p q p q q, con p, q := p r, q r)
p r q r q r
= (3.26), r r r)
p q r q r
= (3.27), p (q r) p q p r, con p, q, r := r, p q, q)
(p q q) r
(3.75a), p p q)
p q q
= (3.56), p q p q q)
p q
Observemos que si comenzamos con el consecuente, estamos forzados a utilizar la con-
secuencia , mientras que si empezamos con el antecedente como en el ejemplo que sigue,
usamos la implicacin :
p q
= (3.56), p q p q q)
p q q
(3.75a), p p q)
(p q q) r
= (3.27), p (q r) p q p r, con p, q, r := r, p q, q)
p q r q r
= (3.26), r r r)
p r q r q r
= (3.56), p q p q q, con p, q := p r, q r)
p r q r
En esta ltima prueba, aparecen pasos intermedios bastante articiosos, por ejemplo, en el
segundo paso aparece el operando r en la disyuncin sin ningn motivo aparente. Este ejemplo
muestra que la direccin que se toma en una prueba puede determinar que resulte simple o no,
la obtencin de la expresin buscada.
78 4. APLICACIONES DEL CLCULO PROPOSICIONAL
4.2. Suponiendo el antecedente
En matemtica, una prctica comn de prueba de una implicacin P Q, consiste en
suponer cierto el antecedente P, y luego demostrar el consecuente Q. Cuando decimos que
suponemos cierto el antecedente, nos estamos reriendo a l, momentneamente, como un
axioma y por lo tanto, equivalente a true. En la prueba del consecuente Q, cada variable del
nuevo axioma P es considerada como constante, con lo cual la regla de Sustitucin 1.6 no puede
ser usada para reemplazar variables.
Para justicar este mtodo presentamos el siguiente metateorema
(4.4) Metateorema. Teorema de deduccin: Supongamos que si agregamos P
1
, . . . , P
n
co-
mo axiomas a nuestro clculo proposicional, con las variables involucradas en cada P
i
como constantes, podemos demostrar Q, entonces P
1
. . . P
n
Q es un teorema.
La prueba de este metateorema consiste en demostrar cmo una prueba de Qusando como axio-
mas adicionales P
1
, . . . , P
n
puede transformarse mecnicamente en la prueba de P
1
. . .P
n
Q. No se probar este metateorema porque su demostracin, si bien no es difcil, es bastante
larga y engorrosa. Se ilustrar con un ejemplo cmo puede realizarse esta transformacin.
(4.5) Ejemplo. Se quiere demostrar la siguiente proposicin: p q (p q)
El formato abreviado de demostracin ser el siguiente:
p
= suponiendo cierto p)
true
= suponiendo cierto q)
q
Si una prueba es larga, puede resultar complicado recordar los supuestos, en este caso situa-
mos las suposiciones al comienzo de la prueba como en el siguiente ejemplo.
Suponiendo p, q
p
= Suponiendo p)
true
= Suponiendo q)
q
4.3. Analizando razonamientos en lenguaje corriente
Podemos determinar si un razonamiento en lenguaje corriente es correcto, formalizndolo
primero mediante expresiones booleanas y probando luego que esta formalizacin resulta un
teorema. Consideremos el siguiente razonamiento que comienza con dos frases en espaol,
4.4. CONSTRUYENDO CONTRAEJEMPLOS 79
cada una de las cuales se establece como verdadera. stas son seguidas por una conclusin que
se supone, sigue de las dos frases anteriores:
Si Juan no termina el trabajo nal correspondiente a la materia T-504, entonces
no aprobar la materia T-504. Si Juan no aprueba la materia T-504, entonces no
puede graduarse. Entonces, si Juan logra graduarse, deber haber terminado su
trabajo nal.
Llamemos P
0
y P
1
a las primeras dos frases de este razonamiento, y llamemos C a la con-
clusin. Entonces de la veracidad de P
0
y P
1
debe derivarse C. Es decir, debemos probar que
P
0
P
1
C.
Ahora traducimos las frases y la conclusin al clculo proposicional, asociamos primero
variables proposicionales a las proposiciones elementales:
s : Juan termina el trabajo nal correspondiente a la materia T-504.
f : Juan no aprueba la materia T-504.
g : Juan logra graduarse.
Podemos ahora formalizar las frases as:
P
0
: s f
P
1
: f g
C : g s
Para determinar si el razonamiento anterior es correcto, debemos probar que P
0
P
1
C,
es decir:
(s f) (f g) (g s)
Vamos a probar este teorema transformando el antecedente en el consecuente:
(s f) (f g)
(3.81a), (p q) (q r) (p r))
s g
= (3.60), p q q p)
g s
4.4. Construyendo contraejemplos
Cuando un razonamiento es incorrecto, una forma de probar su invalidez es a travs de un
contraejemplo, es decir, una asignacin de valores a sus variables o proposiciones elementales
que haga que el razonamiento completo sea falso. Por ejemplo:
Si X es mayor que cero, entonces si Y es cero, entonces Z es cero. El valor de Y
es cero. Entonces, o bien X es mayor que cero o bien Z es cero.
80 4. APLICACIONES DEL CLCULO PROPOSICIONAL
El razonamiento consiste de dos premisas y una conclusin. Consideraremos ahora variables
para representar a sus proposiciones elementales.
x : X es mayor que cero.
y : Y es cero.
z : Z es cero.
Podemos formalizar el razonamiento anterior as:
(x (y z)) y x z (4.1)
El antecedente tiene la mayor estructura, entonces planteamos:
(x (y z)) y
= (3.64) Traslacin, dos veces)
(y (x z)) y
= (3.65) p (p q) p q)
(x z) y
Comparemos la ltima forma de escribir el antecedente con el consecuente xz. La variable
y no aparece en el consecuente y adems x z que equivale a x z, no implica x z.
Podemos sospechar que (4.1) no es vlida, y entonces el razonamiento propuesto no es correcto.
Entonces, buscamos un contraejemplo, es decir, basndonos en la forma de la expresin (4.1),
determinamos valores de sus variables de modo que la expresin resulte false. Observemos
que (4.1), es una implicacin, entonces debemos elegir el consecuente falso, es decir x = z =
false y por otra parte el antecedente verdadero, lo cual exige que y = true. Entonces, el
contraejemplo que se obtuvo es x = z = false e y = true.
4.5. Resolucin de acertijos lgicos
En esta seccin usaremos el clculo proposicional para la resolucin de acertijos lgicos.
La ventaja que ofrece el clculo proposicional es la de encontrar soluciones ms elegantes a
problemas como los planteados en el Captulo 2.
4.5.1. El dilema del pretendiente de Portia
Consideremos el siguiente acertijo, que es una simplicacin de una situacin planteada en
El Mercader de Venecia de W. Shakespeare.
Portia tiene dos cofres, uno de oro y otro de plata y ha colocado un retrato de ella en uno de
estos cofres. En cada cofre, adems ha escrito las siguiente leyendas:
Oro: El retrato no est aqu.
Plata: Exactamente una de estas leyendas es verdadera.
4.5. RESOLUCIN DE ACERTIJOS LGICOS 81
Portia le explica a su pretendiente que cada leyenda puede ser verdadera o falsa, pero que
ella ha ubicado su retrato en uno de los cofres de modo que resulte consistente con la verdad o
falsedad de las inscripciones. Si su pretendiente es capaz de elegir el cofre donde est guardado
el retrato, Portia se casar con l. El problema para el pretendiente, es el de usar las leyendas
(an cuando puedan ser ciertas o no) de modo de determinar cul cofre contiene el retrato.
Para comenzar a resolver el problema, lo formalizaremos introduciendo cuatro variables
proposicionales:
co: El retrato est en el cofre de oro.
cp : El retrato est en el cofre de plata.
o : El retrato no est en el cofre de oro.
p : Exactamente una entre o y p es true.
Observemos que o es la leyenda en el cofre de oro y p es la del cofre de plata. Para modelizar
el problema, procedemos as:
Primero, debemos reejar el hecho de que el retrato est en exactamente un cofre, lo cual lo
diremos del siguiente modo:
P
0
: co cp
Ahora, notemos que la leyenda o en el cofre de oro es la negacin de co:
P
1
: o co
Del mismo modo que vimos para el caso de P
0
, tenemos que la leyenda p en el cofre de
plata es equivalente a p o. No estamos asegurando con esto que p o es un hecho, dado
que no sabemos que la leyenda sea verdadera, lo nico que podemos asegurar es que la leyenda
p equivale a p o. Es decir,
P
2
: p (p o)
Las expresiones P
0
, P
1
y P
2
formalizan el problema. Ahora determinaremos si es posible
derivar co o cp de ellas. Tomamos P
2
para comenzar, porque es la que ofrece la mayor estructura:
p p o
= (3.2) Conmutatividad de , o p p o)
o
= P
1
; (3.12) Doble negacin)
co
Es decir, de P
1
y P
2
(no precisamos P
0
), conclumos co. El retrato est en el cofre de oro.
4.5.2. Caballeros y pcaros
Haremos nuevamente una visita a la isla de los caballeros y los pcaros. Recordemos que
esta isla est habitada solamente por estos dos tipos de personas. Los caballeros tienen la parti-
cularidad de que slo dicen la verdad, mientras que los pcaros siempre mienten.
82 4. APLICACIONES DEL CLCULO PROPOSICIONAL
Tenemos dos personas, A y B habitantes de la isla. A hace la siguiente armacin:
Al menos uno de nosotros es pcaro. Qu son A y B?
Si tomamos las proposiciones elementales
a : A es un caballero.
b : B es un caballero.
podemos simbolizar la armacin que hace A como a b. Si sumamos a esto, que esa
armacin es verdadera si y slo si A es un caballero, nos queda como dato del problema que
a a b
Aplicando las tcnicas correspondientes al Clculo proposicional:
a a b
= (3.47a), p q (p q))
a (a b)
= (3.9), (p q) p q, con p, q := a b, a)
(a (a b))
= (3.59), p q p q p, con p, q := a, b)
(a b)
= (3.58), p q p q, con p, q := a, b)
(a b)
= (3.47b), (p q) p q, con p, q := a, b)
a b
= (3.12), p p, con p := a)
a b
Podemos concluir entonces que A es un caballero y B es un pcaro.
Veamos ahora otra situacin tambin analizada anteriormente:
Nuevamente tenemos dos personas, A y B habitantes de la isla. A dice: Soy un
pcaro pero B no lo es. Qu son A y B?
Si tomamos las proposiciones elementales
a : A es un caballero
b : B es un caballero
podemos simbolizar la armacin que hace A como a b. Si sumamos a esto que esa
armacin es verdadera si y slo si A es un caballero, nos queda como dato del problema que
a a b
Comenzamos con esta expresin:
4.5. RESOLUCIN DE ACERTIJOS LGICOS 83
a a b
= (3.35), p q p q p q, con p, q := a, b)
a a b a b
= (3.15), p p false, con p := a)
false b a b
= (3.15), p p false, con p := b)
b a b
= (3.9), (p q) p q, con p, q := b, a b)
(b a b)
= (3.56), p q p q q, con p, q := a, b)
(a b)
= (3.58), p q p q, con p, q := a, b)
(a b)
= (3.47b), (p q) p q, con p, q := a, b)
a b
Se concluye entonces que ambos son pcaros.
4.5.3. Existe Superman?
Consideremos el siguiente razonamiento acerca de la existencia de Superman.
Si Superman fuera capaz de evitar el mal y quisiera hacerlo, lo hara. Si Superman
fuera incapaz de evitar el mal, no sera omnipotente; si no quisiera evitar el mal
sera malvolo. Superman no evita el mal. Si Superman existe, es omnipotente y no
es malvolo. Luego, Superman no existe.
Para representar este razonamiento mediante el clculo proposicional, identicamos pri-
mero las proposiciones elementales mediante variables proposicionales, luego encontramos las
frmulas que simbolizarn las proposiciones ms complejas y demostraremos que la frmu-
la asociada a la conclusin, efectivamente se deduce de las asociadas a las premisas. Lo cual
indica que, expresando la argumentacin anterior en lenguaje proposicional, el razonamiento
involucrado en l se traduce en la demostracin de un teorema.
Sean entonces las siguientes variables proposicionales:
c : Superman es capaz de evitar el mal.
q : Superman quiere evitar el mal.
i : Superman no es omnipotente.
m : Superman es malvolo.
p : Superman evita el mal.
e : Superman existe.
Las premisas se expresan de la siguiente manera:
84 4. APLICACIONES DEL CLCULO PROPOSICIONAL
P
0
: c q p (Si Superman fuera capaz de evitar el mal y quisiera hacerlo, lo hara).
P
1
: (c i) (q m) (Si Superman fuera incapaz de evitar el mal, no sera omnipo-
tente; si no quisiera evitar el mal sera malvolo).
P
2
: p (Superman no evita el mal).
P
3
: e i m (Si Superman existe, es omnipotente y no es malvolo).
La conclusin es:
e (Superman no existe).
El razonamiento acerca de la existencia de Superman equivale a la expresin booleana
P
0
P
1
P
2
P
3
e
Una forma de probar esta expresin es suponer el antecedente y demostrar el consecuente.
Entonces comenzaremos manipulando el consecuente e. Comenzando con e, la nica su-
posicin donde e aparece es P
3
, si transformamos P
3
en su correspondiente contrarrecproco
(3.60), (i m) e , aparece e. En la prueba que sigue consideraremos con frecuencia
cada trmino de la conjuncin de P
1
como verdadero, ya que nuestro supuesto es que P
1
es un
axioma. Tambin usaremos el teorema 4.2, (p q) (p r q r), en el siguiente sentido:
(c i) (c r i r)
= de P
0
sigue que c i true)
true (c r i r)
= true es neutro a izquierda de )
(c r i r)
Comenzamos la demostracin:
e
(3.60) Contrarrecproco (i m) e)
(i m)
= (3.47a) De Morgan y (3.12) Doble negacin, dos veces)
m i
primera conjuncin de P
1
y (4.2) Monotona)
c m
segunda conjuncin de P
1
y (4.2) Monotona)
c q
= (3.47a) De Morgan )
(c q)
(3.60) Contrarrecproco de P
0
p (c q))
p
= P
2
)
true
Esto ltimo es P
2
que es verdadero, segn nuestro supuesto.
4.6. EJERCICIOS 85
4.5.4. El dilema de la lgica clsica
Consideremos ahora el siguiente razonamiento conocido como el dilema de la lgica clsica.
Si el general era leal, hubiera obedecido las rdenes, y si era inteligente las hubiera
comprendido. O el general desobedeci las rdenes o no las comprendi. Luego, el
general era desleal o no era inteligente.
Identicamos las siguientes proposiciones elementales:
l : El general es leal.
o : El general obedece las rdenes.
i : El general es inteligente.
c : El general comprende las rdenes.
Las premisas se expresan de la siguiente manera:
P
0
: l o (Si el general era leal, hubiera obedecido las rdenes).
P
1
: i c (Si el general era inteligente hubiera comprendido las rdenes).
P
2
: o c (O el general desobedeci las rdenes o no las comprendi).
Y la conclusin es:
l i (El general era desleal o no era inteligente).
Observemos primero que usando el contrarrecproco, P
0
puede expresarse tambin como
o l y P
1
como c i.
Probaremos la expresin booleana
P
0
P
1
P
2
l i,
suponiendo vlido el antecedente, es decir cada una de las premisas sern consideradas
axiomas. Comenzamos entonces por el consecuente:
i l
contrarrecproco de P
1
y (4.2) Monotona)
c l
contrarrecproco de P
0
y (4.2) Monotona)
o c
= P
2
)
true
Y esto ltimo es P
2
que es verdadera de acuerdo a nuestro supuesto.
86 4. APLICACIONES DEL CLCULO PROPOSICIONAL
4.6. Ejercicios
Forma abreviada en la prueba de implicaciones
En los siguientes ejercicios, utilizar el formato abreviado de prueba de implicaciones.
4.1 Probar el teorema 4.1, p (q p).
4.2 Probar la Monotona de (4.3), (p q) (p r q r).
Sugerencia: Comenzar con el consecuente, pues tiene la mayor estructura.
4.3 Probar Fortalecimiento y debilitamiento (3.75d), p (q r) p q.
Sugerencia: Comenzar con el antecedente, pues tiene mayor estructura y luego distribuir.
4.4 Probar (p q) (r s) (p r q s).
Sugerencia: reemplazar la implicacin en el antecedente por alguna denicin alterna-
tiva, distribuir tanto como sea posible, luego usar el teorema 3.75d y algn teorema de
absorcin.
4.5 Probar (p q) (r s) (p r q s).
Sugerencia: Antes de la prueba, usar el teorema 3.64 para trasladar p r al antecedente.
Suponiendo el antecedente
En los siguientes ejercicios, utilizar el mtodo de prueba que, suponiendo verdadero el an-
tecedente, demuestra el consecuente:
4.6 Probar p (q p).
4.7 Probar (p q) ((p q) q).
4.8 Probar p q (p q).
4.9 Probar (p p
) (q q
) (p q p
).
4.10 Probar Modus ponens (3.76), p (p q) q.
4.6. EJERCICIOS 87
Acertijos y razonamientos en lenguaje corriente
4.11 Analizar los razonamientos presentados en el ejercicio 2.9 del Captulo 2, usando las he-
rramientas introducidas en esta seccin.
4.12 Considrese la siguiente argumentacin:
Si Dios quisiera evitar el mal pero fuera incapaz de hacerlo no sera omnipo-
tente, si fuera capaz de evitar el mal pero no quisiera hacerlo sera malvolo.
El mal slo puede existir si Dios no puede o no quiere impedirlo. El mal existe.
Si Dios existe, es omnipotente y no es malvolo. Luego, Dios no existe.
Determinar si es correcta y demostrarla.
4.13 Formalizar los siguientes razonamientos y, o bien probar que son vlidos o bien encontrar
un contraejemplo:
a) O bien el programa no termina o bien n toma eventualmente el valor 0. Si n toma
el valor 0, m tomar eventualmente el valor 0. El programa termina. Entonces, m
eventualmente tomar el valor 0.
b) Si la inicializacin es correcta y el bucle termina, entonces P es true en su estado
nal. P es true en su estado nal. Entonces, si la inicializacin es correcta, el bucle
termina.
c) Si hay un hombre en la luna, la luna es de queso, y si la luna es de queso, yo soy un
mono. O bien no hay ningn hombre en la luna o bien la luna no es de queso. Entonces
o bien la luna no es de queso, o bien yo soy un mono.
d) Si Juan ama a Mara, entonces o bien mam est loca o bien pap est triste. Pap est
triste. Entonces, si mam est loca entonces Juan no ama a Mara.
4.14 Probar que el siguiente razonamiento es vlido si el conector o es considerado inclusivo,
e invlido si es considerado exclusivo.
Si un algoritmo es conable, entonces es correcto. Entonces, o bien el algorit-
mo es correcto o bien no es conable.
4.15 Supongamos que Portia puso una daga en uno de los siguientes tres cofres y adems coloc
las inscripciones:
cofre de oro La daga est en este cofre.
cofre de plata La daga no est en este cofre.
cofre de plomo A lo sumo uno de estos cofres tiene una inscripcin verdadera.
Portia le pide a su pretendiente que elija un cofre que no contenga la daga. Cul cofre
debe elegir el pretendiente? Formalizar y obtener una respuesta.
88 4. APLICACIONES DEL CLCULO PROPOSICIONAL
4.16 Estamos en la isla de los caballeros y los pcaros. Los caballeros siempre dicen la ver-
dad y los pcaros siempre mienten. Para formalizar los siguientes problemas, utilizar las
variables booleanas que se indican:
b : B es un caballero.
c : C es un caballero.
d : D es un caballero.
Si B hace la armacin X, esto da origen a la expresin b X, ya que si b, entonces
B es un caballero y dice la verdad, y si b, B es un pcaro y miente.
a) Alguien pregunta a B: Es usted un caballero?, B responde Si soy un caballero,
me comer el sombrero. Probar que B deber comerse el sombrero.
b) El habitante B dice del habitante C:Si C es un caballero, yo soy un pcaro. Qu
son B y C?
c) Se rumorea que hay oro enterrado en la isla. Usted pregunta a B si hay oro en la isla.
B responde: Hay oro en la isla si y slo si yo soy un caballero. Puede determinarse
si B es un caballero o un pcaro?. Puede determinarse si hay oro en la isla?
d) Tres habitantes de la isla estn parados en el jardn. Un visitante de la isla que pasaba
por el lugar, pregunta a B, Es usted un caballero o un pcaro?. B responde, pero
el visitante no puede entender la respuesta, entonces pregunta a C, Qu dijo B? C
contesta, B dice que es un caballero. En eso, el tercer habitante, D, dice No le crea
a C, est mintiendo!. Qu son C y D?
Sugerencia: Slo las armaciones de C y D son relevantes, adems, la observacin
de D sobre la mentira que dijo C es equivalente a decir que C es un pcaro.
e) B, C y D estn los tres sentados, C dice: Hay un caballero entre nosotros. D con-
testa: Ests mintiendo. Qu se puede decir acerca de la caballerosidad o picarda
de los tres?.
Sugerencia: Puede describirse el hecho de que uno o tres entre ellos es un caballero
mediante la expresin b c d, ya que esta expresin es verdadera cuando el
nmero de operandos falsos es par.
f) Un visitante de la isla se encuentra con B, C y D, y les hace una pregunta, B responde
pero el visitante no comprende, entonces le pregunta a C, Qu dijo B? C responde,
B dijo que hay un caballero entre nosotros. Entonces, D agrega, No le crea a C,
est mintiendo. Qu son C y D?
Sugerencia: considerar la sugerencia del problema anterior.
g) En el grupo de tres habitantes, B dice que los tres son pcaros y C dice que exacta-
mente uno de los tres es un caballero. Qu son B, C y D?
Sugerencia: considerar la sugerencia del problema anterior.
4.6. EJERCICIOS 89
h) Dos personas se dicen del mismo tipo si son ambas caballeros o ambas pcaros. Te-
nemos tres personas, B, C y D. B dice: C es un pcaro y C dice: B y D son del
mismo tipo. Qu es D?
i) B realiza por separado las siguientes armaciones: Amo a Mara y Si amo a Mara
entonces amo a Yolanda. Qu es B?
90 4. APLICACIONES DEL CLCULO PROPOSICIONAL
CAPTULO 5
Clculo de Predicados
ndice del Captulo
5.1. Predicados y Clculo de Predicados . . . . . . . . . . . . . . . . . . . . . 92
5.2. El cuanticador universal . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.2.1. Traslacin con el operador universal . . . . . . . . . . . . . . . . . . 94
5.2.2. Distributividad con el cuanticador universal . . . . . . . . . . . . . 95
5.2.3. Manipulacin de rango y trmino con el cuanticador universal . . . 95
5.2.4. Instanciacin con el cuanticador universal . . . . . . . . . . . . . . 96
5.2.5. Teoremas y el cuanticador universal . . . . . . . . . . . . . . . . . 97
5.3. El cuanticador existencial . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.3.1. Traslacin en la cuanticacin existencial . . . . . . . . . . . . . . . 100
5.3.2. Distributividad en la cuanticacin existencial . . . . . . . . . . . . 100
5.3.3. Manipulacin de rango y trmino con el cuanticador existencial . . 101
5.3.4. Introduccin del operador existencial e intercambio . . . . . . . . . . 101
5.3.5. Testigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.4. Del lenguaje corriente al clculo de predicados . . . . . . . . . . . . . . . 103
5.4.1. Razonamientos en matemtica . . . . . . . . . . . . . . . . . . . . . 105
5.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.5.1. Ejercicios sobre cuanticacin existencial . . . . . . . . . . . . . . . 108
5.5.2. Ejercicios sobre traduccin entre clculo de predicados y lenguaje co-
rriente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
I
ntroduciremos los conceptos referentes al Clculo de Predicados, lo cual no es ms que una
extensin del Clculo Proposicional que ya vimos en el Captulo 3. Esta extensin nos per-
mitir trabajar con expresiones que usen variables de otro tipo adems del tipo booleano y nos
91
92 5. CLCULO DE PREDICADOS
conducir a un sistema formal que abarque una mayor cantidad de expresiones y poder deduc-
tivo.
5.1. Predicados y Clculo de Predicados
El Clculo Proposicional nos permiti razonar con frmulas construdas con variables y
operadores booleanos, con lo cual nos fue posible expresar armaciones o frases que pueden
modelizarse utilizando expresiones de tipo booleano. El Clculo de Predicados nos permitir
ampliar el espectro, trabajando con frmulas de diversos tipos adems del booleano. La cons-
truccin de frmulas que veremos en este clculo nos obliga a denir nuevas expresiones lla-
madas predicados. Un predicado es una aplicacin de una funcin booleana cuyos argumentos
pueden ser de diferentes tipos, es decir un predicado puede ser una funcin de tipo Z B
como la funcin par.i o Z Z B como la funcin igual(x, x z + z) o menor(x, y + z).
Los nombres de las funciones (igual, menor) son llamados smbolos de predicados. Tambin
utilizamos la notacin x < y para expresar el predicado menor(x, y). Por ejemplo, la siguiente
expresin x < y x = z q(x, z + x) contiene tres predicados, x < y, x = z y q(x, x + z).
Vemos que los argumentos de los predicados son en este caso, variables de tipo distinto de B
o tambin expresiones de stos tipos. Los argumentos de un predicado son llamados trminos,
por ejemplo en la frmula anterior los trminos en los predicados son x, y, z y z + x.
Diremos que una frmula del clculo de predicados es una expresin booleana en la cual
alguna de las variables booleanas ha sido reemplazada por:
predicados.
cuanticaciones existenciales o universales.
Por ejemplo, la expresin x < y x = z q(x, z + x) es una frmula del clculo de
predicados.
El clculo de predicados incluye los axiomas del clculo proposicional y los axiomas co-
rrespondientes a las expresiones cuanticadas ( : R : P) y ( : R : P) que vimos en el
captulo 5. Las reglas de inferencia del clculo de predicados son la Sustitucin, Transitividad
de la igualdad, Leibniz y la extensin de esta regla para cuanticaciones que tambin vimos en
el captulo anterior.
5.2. El cuanticador universal
La conjuncin es asociativa, conmutativa y tiene elemento neutro true. Por lo tanto puede
considerarse una operacin vlida para denir la expresin cuanticada
(x : R : P) (5.1)
como ya vimos en el captulo 5. El smbolo , que se lee para todo, se conoce como cuan-
ticador universal y la expresin anterior se denomina cuanticacin universal y se lee para
5.2. EL CUANTIFICADOR UNIVERSAL 93
todo x que satisfaga R se satisface P. Vamos a repasar ahora los axiomas vistos en el captulo
anterior para el caso particular del cuanticador universal.
Rango vaco
( i : false : T.i) true
Rango unitario Si i no es una variable libre en la expresin N, entonces
( i : i = N : T.i) T.N
Distributividad Como el operador es distributivo a derecha e izquierda con respecto al ope-
rador , y true es absorbente para , vale
( i : R.i : x T.i) x ( i : R.i : T.i) (5.2)
( i : R.i : T.i x) ( i : R.i : T.i) x (5.3)
En este axioma la expresin x que es trasladada fuera del alcance (o dentro del alcance,
dependiendo del lado derecho o izquierdo) no puede contener a i como variable libre.
Esta restriccin asegura que el lado izquierdo y el derecho en el axioma referencian a las
mismas variables libres, de otro modo no se podra asegurar la equivalencia en general.
Particin de rango Como el operador es idempotente, entonces cuando el rango de especi-
cacin es de la forma R S vale
( i : R.i S.i : T.i) ( i : R.i : T.i) ( i : S.i : T.i)
Particin 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 trmino
( i : R.i : T.i G.i) (i : R.i : T.i) (i : R.i : G.i)
Regla del trmino constante Si el trmino de la cuanticacin es igual a una constante C, es
decir, la variable cuanticada i no aparece en C y el rango de especicacin es no vaco,
entonces
( i : R : C) C
Regla de anidado
( i, j : R.i S.i.j : Ti.j) ( i : R.i : ( j : S.i.j : T.i.j))
94 5. CLCULO DE PREDICADOS
Regla de intercambio de variables dummy Si V.j (FV.R FV.T) = entonces
( i : R : T) ( j : R[i := j] : T[i := j])
Regla de cambio de variable dummy Para toda funcin f biyectiva y para toda variable j que
no aparezca en R ni en T, vale
( i : R.i : T.i) ( j : R.f.j : T.f.j)
A continuacin presentaremos axiomas adicionales y teoremas para el cuanticador univer-
sal.
5.2.1. Traslacin con el operador universal
El axioma que sigue nos permitir trasladar el rango de especicacin hacia el trmino de
cuanticacin:
(5.1) Axioma. Traslacin
( i : R.i : T.i) ( i : : R.i T.i)
Este axioma permite demostrar tambin los siguientes teoremas:
(5.2) Teorema. Traslacin
a) ( x : R : P) ( x :: R P)
b) ( x : R : P) ( x :: R P R)
c) ( x : R : P) ( x :: R P P)
(5.3) Teorema. Traslacin
a) ( x : Q R : P) ( x : Q : R P)
b) ( x : Q R : P) ( x : Q : R P)
c) ( x : Q R : P) ( x : Q : R P R)
d) ( x : Q R : P) ( x : Q : R P P)
Probaremos (5.3a))
( x : Q R : P)
= Traslacin 5.1)
( x :: Q R P)
= Teorema 3.64)
( x :: Q (R P))
= Traslacin 5.1)
( x : Q : R P)
5.2. EL CUANTIFICADOR UNIVERSAL 95
5.2.2. Distributividad con el cuanticador universal
Ya vimos en 5.2 cmo distribuye respecto de
Suponiendo que x no es una variable libre en P, vale
P ( x : R : Q) ( x : R : P Q)
El axioma 5.2 nos permite demostrar los siguientes teoremas:
(5.4) Teorema. Suponiendo que x no es variable libre en P, se tiene que
( x : R : P) P ( x :: R)
(5.5) Teorema. Distributividad de respecto de : Suponiendo que x no es una variable
libre en P, vale
( x :: R) (( x : R : P Q) P ( x : R : Q))
(5.6) Teorema.
( x : R : true) true
(5.7) Teorema.
( x : R : P Q) (( x : R : P) ( x : R : Q))
Vamos a probar el teorema 5.5. Este teorema asegura que una conjuncin puede trasladarse
fuera del alcance de la cuanticacin si el rango R no es siempre falso como lo indica el antece-
dente ( x :: R). La prueba se har suponiendo el antecedente ( x :: R) y demostrando
el consecuente:
( x : R : P Q)
= (6.12) Distributividad de sobre )
( x : R : P) ( x : R : Q)
= (5.4) ya que x no es variable libre en P)
(P ( x :: R)) ( x : R : Q)
= Suposicin de ( x :: R) o bien ( x :: R) false)
(P false) ( x : R : Q)
= (3.29) Elemento neutro de )
P ( x : R : Q)
5.2.3. Manipulacin de rango y trmino con el cuanticador universal
Los teoremas que siguen tienen sus anlogos en el Clculo Proposicional, con nombres
similares (teoremas 3.75a y 3.75b) que adems sern utilizados en la demostracin:
(5.8) Teorema. Debilitamiento y fortalecimiento de rango
( x : Q R : P) ( x : Q : P)
96 5. CLCULO DE PREDICADOS
(5.9) Teorema. Debilitamiento y fortalecimiento de trmino
( x : R : P Q) ( x : R : P)
(5.10) Teorema. Monotona de
( x : R : Q P) (( x : R : Q) ( x : R : P))
5.2.4. Instanciacin con el cuanticador universal
A continuacin daremos una regla que ser de utilidad en demostraciones con el cuantica-
dor universal.
(5.11) Teorema. Instanciacin
( x :: P) P[x := E]
Observemos que esta regla es una consecuencia inmediata de la regla Rango Unitario, es
decir:
( x : x = E : P) P[x := E]
Veamos situaciones donde esta regla 5.11 es de gran ayuda. Por ejemplo, supongamos que
queremos probar
B par(x + y) B par((x + y)
2
)
cuando la expresin x + y es entera. Supongamos que vale
( i : Z :: par.i par(i)
2
) (5.4)
Usaremos Instanciacin 5.11 para dar la siguiente prueba:
B par(x + y)
= par.i par(i)
2
(5.4) con la instancia i := x + y)
B par((x + y)
2
)
Sin embargo, usualmente simplicaremos la escritura as:
B par(x + y)
= (5.4))
B par((x + y)
2
)
El uso implcito de la regla de Instanciacin tambin se sobreentiende del contexto an
cuando el cuanticador universal sea omitido, por ejemplo:
( a, b : Z :: a + b = b + a) (5.5)
puede escribirse tambin:
5.2. EL CUANTIFICADOR UNIVERSAL 97
a + b = b + a (donde a, b son enteros)
Aqu el cuanticador universal es un comentario y no es parte de la frmula, con lo cual es
fcil olvidar que
x y + z = z + x y
es consecuencia de 5.5 utilizando Instanciacin, y no Sustitucin.
5.2.5. Teoremas y el cuanticador universal
Una expresin booleana constituda nicamente por variables libres se llama abierta. Por
ejemplo la expresin bx < y es una expresin abierta y su valor cambiar de acuerdo al estado
de las variables x, y y b. La misma expresin se transforma en cerrada si se aplica una cuantica-
cin sobre el conjunto de sus variables libres. En el ejemplo, la expresin ( b, x, y :: b x < y)
ahora es cerrada. El valor de una expresin cerrada no depende del estado de sus variables, pues
no tiene variables libres. Por lo tanto una expresin cerrada es equivalente a true o false. El
siguiente metateorema caracteriza (al menos parcialmente) cundo una cuanticacin sobre las
variables no altera el valor de una expresin booleana.
(5.12) Metateorema. P es un teorema si y slo si ( x :: P) es un teorema.
Realizaremos la prueba mediante implicacin mutua.
P ( x :: P).
Supongamos que P es un teorema, entonces existe una prueba que transforma P en true,
utilizando Leibniz, Transitividad de la igualdad y Sustitucin:
P
= Justicacin 1)
. . .
. . .
. . .
= Justicacin n)
true
Leibniz 6.6, nos permite transformar esta prueba en una en donde aparezca ( x :: P).
( x :: P)
= Justicacin 1)
. . .
. . .
. . .
= Justicacin n)
( x :: true)
= (5.6), ( x : R : true) true)
true
98 5. CLCULO DE PREDICADOS
( x :: P) P.
Supongamos que ( x :: P) es un teorema. Utilizando Instanciacin 5.11 con x por E,
conclumos que P es un teorema.
Veamos algunas aplicaciones del Metateorema 5.12. Sabemos que p q q p es un
teorema, por lo tanto tambin son teoremas ( p :: p q q p), ( q :: p q q p) y
( p, q :: p q q p).
Se utiliza con frecuencia una terminologa standard para probar una cuanticacin universal
a travs del Metateorema 5.12:
Para probar ( x : R : P), probamos P para un valor x arbitrario en el rango R.
Observacin: De este modo, ( x : R : P) puede probarse demostrando R P; y a su vez
R P puede demostrarse asumiendo el antecedente R y probando el consecuente P. Este
mtodo de prueba es habitual en matemtica.
5.3. El cuanticador existencial
La disyuncin es simtrica, asociativa y su elemento neutro es false. Por lo tanto puede
considerarse una operacin vlida para denir la expresin cuanticada
(x : R : P) (5.6)
como ya vimos en el captulo 5. Esta expresin se escribe usualmente as:
(x : R : P) (5.7)
El smbolo , que se lee existe, se conoce como cuanticador existencial y la expresin
anterior se denomina cuanticacin existencial y se lee existe x en el rango R que satisface
P. Un valor x para el cual (R P)[x := x] es vlido se llama testigo de x en (x : R : P).
Vamos a repasar ahora los axiomas vistos en el captulo anterior con el cuanticador exis-
tencial.
Rango vaco
( i : false : T.i) false
Rango unitario Si i no es una variable libre en la expresin N, entonces
( i : i = N : T.i) T.N
Distributividad Como el operador es distributivo a derecha e izquierda con respecto al ope-
rador , y false es absorbente para , vale
( i : R.i : x T.i) x ( i : R.i : T.i) (5.8)
( i : R.i : T.i x) ( i : R.i : T.i) x (5.9)
Suponiendo que i no es una variable libre en x
5.3. EL CUANTIFICADOR EXISTENCIAL 99
Particin de rango Como el operador es idempotente, entonces cuando el rango de especi-
cacin es de la forma R S vale
( i : R S : T) ( i : R : T) ( i : S : T)
Particin 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 trmino
( i : R.i : T.i G.i) (i : R.i : T.i) (i : R.i : G.i)
Regla del trmino constante Si el trmino de la cuanticacin es igual a una constante C, es
decir, la variable cuanticada i no aparece en C y el rango de especicacin es no vaco,
entonces
( i : R : C) C
Regla de anidado
( i, j : R.i S.i.j : Ti.j) ( i : R.i : ( j : S.i.j : T.i.j))
Regla de intercambio de variables dummy Si V.j (FV.R FV.T) = entonces
( i : R : T) ( i : R[i := j] : T[i := j])
Regla de cambio de variable dummy Para toda funcin f biyectiva y para toda variable j que
no aparezca en R ni en T, vale
( i : R.i : T.i) ( j : R.f.j : T.f.j)
A continuacin presentaremos axiomas adicionales y teoremas para el cuanticador uni-
versal. Comenzaremos con el siguiente axioma que relaciona los cuanticadores universal y
existencial. Llamaremos a este axioma De Morgan generalizado, pues es una generalizacin de
las leyes de De Morgan (3.47a), (p q) p q. Veamos a continuacin un ejemplo que
ilustra la idea de esta generalizacin:
(i : 0 i < 4 : P)
= eliminacin de cuanticador)
P
0
P
1
P
2
P
3
= Doble negacin 3.12; De Morgan 3.47a)
(P
0
P
1
P
2
P
3
)
= introduccin de cuanticador)
(i : 0 i < 4 : P)
100 5. CLCULO DE PREDICADOS
(5.13) Axioma. De Morgan Generalizado ( x : R : P) ( x : R : P)
Utilizando Doble Negacin y las leyes de De Morgan, pueden obtenerse en forma inmediata
los siguientes teoremas que son formas alternativas del axioma de De Morgan Generalizado:
(5.14) Teorema. Formas alternativas de De Morgan Generalizado
a) ( x : R : P) ( x : R : P)
b) ( x : R : P) ( x : R : P)
c) ( x : R : P) ( x : R : P)
En el Captulo 2 denimos el concepto de expresin dual de una expresin booleana, para
completar esta denicin diremos que el dual de la expresin booleana ( x : R : P) es ( x :
R : P), del mismo modo el dual de ( x : R : P) ser ( x : R : P).
5.3.1. Traslacin en la cuanticacin existencial
Los teoremas de traslacin para las cuanticaciones existenciales son sorprendentemente
diferentes de aquellos vistos para las cuanticaciones universales, en el lado derecho aparecer
una conjuncin en lugar de una implicacin.
(5.15) Teorema. Traslacin para : ( x : R : P) ( x :: R P)
(5.16) Teorema. Traslacin para : ( x : Q R : P) ( x : Q : R P)
Para entender 5.15, recordemos el signicado de . El lado izquierdo de (5.15) establece
que existe un valor de x en el rango R para el cual P es true. Esto signica que existe un
valor de x para el cual ambos R y P son true. Y esto ltimo es exactamente lo que expresa el
lado derecho de (5.15).
5.3.2. Distributividad en la cuanticacin existencial
Los siguientes teoremas referentes a son anlogos a aquellos vistos para .
En primer lugar recordemos la propiedad de distributividad de respecto de : Suponiendo
que x no es una variable libre en P, vale
P ( x : R : Q) ( x : R : P Q)
(5.17) Teorema. Suponiendo que x no es variable libre en P, se tiene que
( x : R : P) P ( x :: R)
(5.18) Teorema. Distributividad de respecto de : Suponiendo que x no es una variable
libre en P, vale
( x :: R) (( x : R : P Q) P ( x : R : Q))
(5.19) Teorema.
( x : R : false) false
5.3. EL CUANTIFICADOR EXISTENCIAL 101
5.3.3. Manipulacin de rango y trmino con el cuanticador existencial
Los teoremas que siguen tienen sus anlogos con los ya vistos para el cuanticador univer-
sal.
(5.20) Teorema. Debilitamiento y fortalecimiento de rango
( x : R : P) ( x : Q R : P)
(5.21) Teorema. Debilitamiento y fortalecimiento de trmino
( x : R : P) ( x : R : P Q)
(5.22) Teorema. Monotona de
( x : R : Q P) (( x : R : Q) ( x : R : P))
5.3.4. Introduccin del operador existencial e intercambio
Finalmente daremos dos teoremas para manipular el cuanticador existencial.
(5.23) Teorema. Introduccin de : P[x := E] ( x :: P)
(5.24) Teorema. Intercambio de cuanticadores: Suponiendo que y no es variable libre en R
y x no es variable libre en Q vale:
( x : R : ( y : Q : P)) ( y : Q : ( x : R : P))
El teorema 5.23 muestra cmo introducir una cuanticacin existencial utilizando una im-
plicacin mientras que la Regla del Rango Unitario 6.10 es una regla muy puntual que permite
eliminar o introducir la cuanticacin existencial. El teorema 5.24 permite intercambiar con
. La recproca del teorema no es cierta. Para que el antecedente de 5.24 sea true debe existir
un valor de x para el cual P sea vlido para todo y, sin embargo para que el consecuente sea
true no es necesario la existencia de tal valor x, pues para cada y un valor distinto de x puede
satisfacer P.
Daremos ahora la prueba de 5.24
( x : R : ( y : Q : P)) ( y : Q : ( x : R : P))
= Implicacin 3.56, p q p q q)
( x : R : ( y : Q : P)) ( y : Q : ( x : R : P)) ( y : Q : ( x : R : P))
= Distributividad de respecto de (5.2))
( y : Q : ( x : R : ( y : Q : P)) ( x : R : P)) ( y : Q : ( x : R : P))
= Distributividad 6.12 )
( y : Q : ( x : R : ( y : Q : P) P)) ( y : Q : ( x : R : P))
= Instanciacin (5.11), ( y :: P) P, junto con (3.56) ( y : Q : P) P P)
( y : Q : ( x : R : P)) ( y : Q : ( x : R : P))
= Neutro de )
true
102 5. CLCULO DE PREDICADOS
5.3.5. Testigo
En secciones anteriores observamos que las variables libres en un teorema estn implcita-
mente cuanticadas por el operador universal. Por ejemplo, b c c b es un teorema si y
slo si ( b, c :: b c c b) es un teorema. Esto nos permite manipular frmulas simples
no cuanticadas, en lugar de cuanticaciones complejas. Una tcnica similar se emplea con el
cuanticador existencial y la veremos en el siguiente metateorema:
(5.25) Metateorema. Metateorema del testigo. Suponiendo que x no es variable libre en P,
Q y R, entonces :
( x : R : P) Q es un teorema si y slo si (R P)[x := x] Q es un teorema.
El identicador x se llama testigo de la cuanticacin existencial.
Veamos ahora la prueba de este metateorema:
( x : R : P) Q
= Traslacin (5.15))
( x :: R P) Q
= Implicacin (3.58); de Morgan (5.14b))
( x :: (R P)) Q
= Cambio de dummy (6.21); suponiendo que x no es variable libre en P, R)
( x :: (R P)[x := x]) Q
= Distrib. de respecto de (5.2); suponiendo que x no es variable libre en Q)
( x :: (R P)[x := x] Q)
= Implicacin (3.58))
( x :: (R P)[x := x] Q)
Por el Metateorema 5.12, la ltima lnea de la prueba de arriba es un teorema si y slo si
(R P)[x := x] Q es un teorema.
El Metateorema del testigo es usado a menudo cuando la expresin cuanticada ( x : R :
P) es un axioma o un teorema conocido y es necesario probar Q. En estos casos, la prueba
consiste por lo general en suponer cierto (R P)[x := x] y probar Q. Ilustraremos esta tcnica
en la prueba de a+b = a+c b = c. En la demostracin haremos uso del axioma de existencia
de opuesto para la suma:
( x : Z :: x + a = 0) (5.10)
donde a es un nmero entero. Este axioma dice que dado cualquier entero a, existe otro nmero
entero x tal que x + a = 0. Nosotros haremos el supuesto (x + a = 0)[x := a] con el testigo a,
es decir supondremos que a + a = 0.
Para probar a + b = a + c b = c, utilizaremos la tcnica de suponer el antecedente
a+b = a+c, adems de aceptar como vlido (x+a = 0)[x := a], y probaremos el consecuente:
5.4. DEL LENGUAJE CORRIENTE AL CLCULO DE PREDICADOS 103
b
= Neutro de la suma 0 + b = b)
0 + b
= (5.10) ( x : Z :: x + a = 0), con testigo a)
a + a + b
= Suponiendo el antecedente a + b = a + c)
a + a + c
= (5.10) otra vez a + a = 0)
0 + c
= Neutro de la suma otra vez)
c
Por ltimo observemos que, cuando se utilizan dos o ms testigos en una prueba, stos deben
ser diferentes. Supongamos que debemos probar ( x :: P) ( y :: R) Q. Si utilizamos el
Teorema 3.64, podremos escribir la expresin as:
( x :: P) (( y :: R) Q)
Dos aplicaciones consecutivas del Metateorema del testigo, nos da la siguiente equivalencia:
P[x := x] (R[x := x] Q)
Aqu x y x deben ser distintas debido a que es necesario que x no sea variable libre en el
consecuente de (R[x := x] Q).
Veamos que ocurrira si no tuviramos en cuenta esto ltimo con un ejemplo:
Consideremos nuevamente (5.10), y usemos sustitucin para reemplazar a por a +5, consi-
guiendo entonces el siguiente teorema:
( x : Z :: x + a + 5 = 0)
De este teorema podemos derivar usando Metateorema Testigo 5.25, a + a + 5 = 0 donde
a es el testigo. Por otra parte el teorema 5.10, nos permite concluir a + a = 0, utilizando el
mismo testigo a, lo cual conduce a la contradiccin 5 = 0. Por este absurdo concluimos que x
y x deben ser distintas.
5.4. Del lenguaje corriente al clculo de predicados
Formalizar una armacin en trminos de la lgica proposicional, no siempre provee la
posibilidad de razonar formalmente sobre las proposiciones elementales de la armacin. Por
ejemplo, la frase: algn entero entre 80 y n es mltiplo de x. Podramos asignarle una va-
riable proposicional S a esta armacin, y utilizar S cuando sta aparezca, y sin embargo la
formalizacin que se conseguira no nos dara la posibilidad de razonar con la armacin.
Usando el clculo de predicados, podemos expresar una formalizacin que ofrezca mayores
chances de manipulacin:
104 5. CLCULO DE PREDICADOS
( i : Z : 80 i n : mult(i, x))
donde mult(i, x) indica i es mltiplo de x. Tambin podemos formalizar mult(i, x):
( m : Z :: i = m x)
Con los axiomas sobre nmeros enteros, podemos probar distintos teoremas, por ejemplo:
par.x ( m : Z :: n = m x) ( m : Z :: n = m x/2)
Formalizar el lenguaje corriente mediante el clculo de predicados puede ser til al menos
en dos sentidos. Por un lado, pone de maniesto ambigedades en el lenguaje lo cual fuerza
a la precisin. Por ejemplo, la frase entre 80 y n, no expresa si 80 y n estn o no inclu-
dos. Una formulacin en clculo de predicados contempla estas situaciones. Por otra parte, una
vez obtenida la formalizacin conveniente, el uso de las reglas de inferencia permite razonar
adecuadamente sobre las cuestiones en consideracin.
En el captulo 2, realizamos traducciones entre los operadores booleanos y el lenguaje co-
rriente, referidas a expresiones booleanas. Debemos agregar ahora la correspondencia entre los
cuanticadores y su referencia en espaol. Leemos el cuanticador universal como para to-
do, pero tambin puede entenderse que se trata del cuanticador universal cuando leamos en
una frase cada, todo, para todo, para cada, cualquier. Por ejemplo:
Todo nmero entero par es mltiplo de 2, se traduce en:
( x : Z : par.x : mult(x, 2))
Cada captulo tiene al menos 3 pginas, se escribe:
( c : c Cap : cant.c 3),
donde cant.x indica la cantidad de pginas que tiene el captulo x. No siempre las cuanti-
caciones universales se descubren mediante frases explcitas, a veces, estn implcitas.
Los enteros pares son mltiplos de 2, tambin se escribe:
( x : Z : par.x : mult(x, 2))
Un entero par es mltiplo de 2, se escribe:
( x : Z : par.x : mult(x, 2))
Esto es lo que ya observamos anteriormente acerca de las variables libres en un teorema,
siempre estn cuanticadas universalmente. Por ejemplo, cuando escribimos x
2
> 0, si no
existe ningn estado particular en discusin, el signicado es que cada estado de x satisface
x
2
> 0, con lo cual estamos armando que ( x :: x
2
> 0).
Las cuanticaciones existenciales se detectan cuando aparece alguna de las siguientes pala-
bras: existe, algn, hay, al menos un, para algn.
Veamos algunos ejemplos:
5.4. DEL LENGUAJE CORRIENTE AL CLCULO DE PREDICADOS 105
Algn entero par es divisible por 3:
( x : Z : par.x : divisible(x, 3))
Hay un captulo con un nmero par de pginas:
( c : c Cap : par(cant.c))
Veamos ahora, la negacin junto con los cuanticadores en el lenguaje corriente. Suponga-
mos que debemos negar la frase Todos los enteros son pares, la respuesta Todos los enteros
no son pares es incorrecta, la negacin de la frase es No todos los enteros son pares, que
leemos No (todos los enteros son pares). Esta frase es equivalente a Algn entero no es par,
como demostraremos a continuacin:
No (todos los enteros son pares)
= formalizacin con clculo de predicados)
( x : Z :: par.z)
= De Morgan (5.14c))
( x : Z :: par.z)
= traduccin a lenguaje corriente)
Algn entero no es par
Formalizar armaciones en lenguaje corriente mediante el clculo proposicional requiere
asociar variables booleanas a las expresiones elementales de la armacin, pero formalizar ar-
maciones en lenguaje corriente mediante el clculo de predicados exige adems denir funcio-
nes y smbolos que permitan capturar la relacin entre las variables booleanas. Por ejemplo,
mult(x, 2), par.x y cant.c hicieron posible las formulaciones de las armaciones anteriores.
5.4.1. Razonamientos en matemtica
Tanto en Anlisis como en lgebra se han visto pruebas de diversos teoremas. Podemos
observar ahora que stas no fueron formales en realidad, pues fueron realizadas en lenguaje es-
paol y nunca se citaron explcitamente las reglas de inferencia utilizadas. Pero toda descripcin
informal de una prueba correcta puede traducirse en formal y ahora que conocemos lo suciente
acerca del clculo de predicados, estamos en condiciones de construir tales formalizaciones de
pruebas.
Por ejemplo, supongamos que debemos determinar si existe algn nmero x para el cual
1/(x
2
+ 1) > 1.
Formalizaremos esta cuestin en trminos del clculo de predicados:
( x : R :: 1/(x
2
+ 1) > 1)
Veremos si se trata de una armacin vlida de la siguiente manera:
106 5. CLCULO DE PREDICADOS
( x : R :: 1/(x
2
+ 1) > 1)
= aritmtica)
( x : R :: 1 > (x
2
+ 1))
= aritmtica)
( x : R :: 0 > x
2
)
= x
2
0)
( x : R :: false)
= (5.19))
false
Aqu hemos formalizado todo lo que corresponde a la manipulacin con cuanticadores,
aquello concerniente a la manipulacin algebraica ha sido tratado informalmente, debido a que
no hemos hecho un anlisis formal sobre los axiomas de la aritmtica.
Veamos otro ejemplo: el concepto de continuidad de una funcin f en un punto c. Decimos
que una funcin real es continua en c perteneciente a su dominio si vale:
( : > 0 : ( : > 0 : ( x :: [x c[ < [f.x f.c[ < ))) (5.11)
Con la denicin anterior podemos demostrar el siguiente teorema:
(5.26) Teorema. f(x) = 3 x + 15 es continua en R.
Comenzaremos manipulando el consecuente de [x c[ < [f.x f.c[ < con un valor
de c arbitrario, para la funcin f dada:
[3 x + 15 (3 c + 15)[ <
= aritmtica)
[3 (x c)[ <
= propiedad del valor absoluto)
3 [(x c)[ <
= aritmtica)
[(x c)[ < /3
Hemos probado que [xc[ < /3 [f.xf.c[ < para un valor de c arbitrario. Entonces,
tenemos a /3 como testigo para de (5.11). Podemos ahora construir la frmula cuanticada
que queramos:
5.5. EJERCICIOS 107
[x c[ < /3 [f.x f.c[ <
= la lnea de arriba es un teorema, usando Metateorema 5.12)
( x :: [x c[ < /3 [f.x f.c[ < )
= Rango unitario 6.10)
( : = /3 : ( x :: [x c[ < /3 [f.x f.c[ < ))
Debilitamiento de rango 5.20, usando > 0)
( : > 0 : ( x :: [x c[ < /3 [f.x f.c[ < ))
= la lnea de arriba es un teorema, usando Metateorema 5.12 dos veces)
( c :: ( : > 0 : ( : > 0 : ( x :: [x c[ < /3 [f.x f.c[ < ))))
= denicin de continuidad (5.11))
( c :: f es continua en c)
Por ltimo, formalizaremos otras armaciones relacionadas con funciones.
Una funcin es inyectiva si
( x, y : x ,= y : f.x ,= f.y)
o tambin
( x, y : f.x = f.y : x = y)
La funcin g es la inversa a izquierda de la funcin f si:
( x :: x = g(f.x))
5.5. Ejercicios
5.1 Suponiendo que x no es variable libre en P, probar que la Distributividad de respecto de
(5.2): P ( x : R : Q) ( x : R : P Q) sigue directamente de la misma expresin
con R true, es decir P ( x :: Q) ( x :: P Q). Lo cual signica que podramos
haber denido un axioma ms simple.
5.2 Probar que ( x : R : P) ( x : R : Q) ( x : R : P Q) sigue de la misma expresin
con R true, es decir de ( x :: P) ( x :: Q) ( x : R : P Q).
5.3 Suponiendo que x no es libre en P, probar el teorema 5.4: ( x : R : P) P ( x ::
R). Sugerencia: Comenzar con el lado izquierdo aplicando Traslacin, ya que en el lado
derecho R true.
5.4 Probar el teorema 5.6: ( x : R : true) true. Sugerencia: Aplicando Traslacin al lado
izquierdo se obtiene una frmula a la que luego puede aplicarse distributividad, o tambin
(5.4).
108 5. CLCULO DE PREDICADOS
5.5 Probar el teorema 5.7: ( x : R : P Q) (( x : R : P) ( x : R : Q)). Sugerencia:
Reemplazar la expresin completa usando el teorema (3.61) y a continuacin la Regla del
Trmino.
5.6 Probar el teorema 5.8: Debilitamiento y fortalecimiento de rango: ( x : Q R : P)
( x : Q : P). Sugerencia: Ser de utilidad el axioma de Particin de Rango.
5.7 Probar el teorema 5.9: Debilitamiento y fortalecimiento de trmino: ( x : R : P Q)
( x : R : P). Sugerencia: Usar la Regla del Trmino.
5.8 Probar el teorema 5.10: Monotona de : ( x : R : Q P) (( x : R : Q) ( x :
R : P)). Usar (3.64) Traslacin y luego la Regla del Trmino
5.9 Probar el teorema 5.11: Instanciacin: ( x :: P) P[x := E]. Sugerencia: La clave es
renombrar la variable dummy usando Cambio de Dummy 6.21, de modo que la dummy
no aparezca ni en P ni en E.
5.5.1. Ejercicios sobre cuanticacin existencial
5.10 Probar el teorema 5.14: Formas alternativas de De Morgan Generalizado:
a) ( x : R : P) ( x : R : P)
b) ( x : R : P) ( x : R : P)
c) ( x : R : P) ( x : R : P)
5.11 Probar el teorema 5.15: Traslacin para : ( x : R : P) ( x :: R P).
5.12 Probar el teorema 5.16: Traslacin para : ( x : Q R : P) ( x : Q : R P).
5.13 Suponiendo que x no es libre en P, probar el teorema 5.8: Distributividad de respecto
de : P ( x : R : Q) ( x : R : P Q).
5.14 Suponiendo que x no es libre en P, probar el teorema 5.17: ( x : R : P) P ( x :: R).
5.15 Suponiendo que x no es libre en P, probar el teorema 5.18: Distributividad de respecto
de : ( x :: R) (( x : R : P Q) P ( x : R : Q)).
5.16 Probar el teorema 5.19: ( x : R : false) false.
5.17 Probar el teorema 5.20: Debilitamiento y fortalecimiento de rango: ( x : R : P) ( x :
Q R : P).
5.18 Probar el teorema 5.21: Debilitamiento y fortalecimiento de trmino: ( x : R : P)
( x : R : P Q).
5.19 Probar el teorema 5.22: Monotona de : ( x : R : Q P) (( x : R : Q) ( x :
R : P)).
5.20 Probar el teorema 5.23: Introduccin de : P[x := E] ( x :: P).
5.5. EJERCICIOS 109
5.5.2. Ejercicios sobre traduccin entre clculo de predicados y lenguaje
corriente
5.21 Traducir las siguientes frases al lenguaje del clculo de predicados:
a) El nmero 1 es el nico nmero natural que es menor que el entero positivo p y que
divide a q.
b) Algn entero es mayor que 23.
c) La suma de dos nmeros impares es par.
d) Un nmero entero positivo no es negativo.
e) Cada nmero entero positivo es menor que el valor absoluto de algn entero negativo.
f) Los cubos de enteros nunca son pares.
g) El nmero real i es la mayor solucin real de la ecuacin f.i = i + 1.
h) Para ningn entero i, f.i es a la vez mayor y menor que i.
i) Ningn entero es mayor que todos los dems enteros.
5.22 Traducir las siguientes frmulas del clculo de predicados a lenguaje corriente.
a) ( k : R : ( i : Z :: f.i = k))
b) ( z : R : ( i : Z :: f.j = f(j + i z)))
c) ( x : x ,= m : f.x > f.m)
d) ( x, y : R :: f.x < 0 0 < f.y ( z : R :: f.z = 0))
e) ( x : Z : ( z : R :: f.x = z))
f) ( z : R : ( z : Z :: f.x = z))
5.23 Formalizar las siguientes frases:
a) Cada uno ama a alguien.
b) Alguien ama a alguien.
c) Cada uno ama a cada uno.
d) Nadie ama a todos.
e) Alguien ama a nadie.
5.24 Formalizar las siguientes frases:
a) Puedes engaar a alguien por algn tiempo.
b) Puedes engaar a todos por algn tiempo.
c) No puedes engaar a todos todo el tiempo.
110 5. CLCULO DE PREDICADOS
d) No puedes engaar a alguien todo el tiempo.
5.25 Demostrar que el siguiente razonamiento es correcto, formalizndolo mediante clculo de
predicados y demostrndolo como teorema.
Todos los hombres son mortales. Scrates es hombre, entonces Scrates es mor-
tal.
5.26 Demostrar que los siguientes razonamientos son correctos formalizndolos mediante clcu-
lo de predicados y demostrndolos como teoremas.
a) Los brujos son considerados individuos con poderes ocultos. Algn brujo es mago.
Luego, algn mago es considerado como individuo con poderes ocultos.
b) Ningn fotgrafo pinta. Todos los que no son fotgrafos son escultores. Por lo tanto,
todos los pintores son escultores.
c) Ningn feo despierta pasiones. Todos los atletas despiertan pasiones. Por lo tanto,
ningn atleta es feo.
CAPTULO 6
Expresiones cuanticadas
ndice del Captulo
6.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.2. Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.3. Sintaxis e interpretacin de la cuanticacin . . . . . . . . . . . . . . . . 115
6.4. Variables libres y ligadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.5. Revisin de la sustitucin en expresiones cuanticadas . . . . . . . . . . . 117
6.6. La regla de Leibniz para expresiones cuanticadas . . . . . . . . . . . . . 118
6.7. Reglas generales para expresiones cuanticadas . . . . . . . . . . . . . . 119
6.8. Cuanticadores aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.8.1. Mximos y mnimos . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.8.2. Operador de conteo . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.1. Introduccin
Las expresiones cuanticadas o cuanticaciones, nos permiten expresar una secuencia de
expresiones, las cuales dependen de una variable, unidas mediante una operacin. Antes de
presentar la denicin formal de expresin cuanticada que utilizaremos en el captulo, veremos
algunos ejemplos de estas expresiones.
Una cuanticacin, muy utilizada en las matemticas, es la sumatoria. El siguiente es un
ejemplo de una expresin que denota la suma de los primeros n nmeros impares, mediante una
sumatoria:
n1
i=0
2 i + 1
111
112 6. EXPRESIONES CUANTIFICADAS
En esta expresin pueden distiguirse varias componentes. Por un lado el operador sumatoria, el
cual se corresponde con el operador binario +, por otro lado la variable i junto con un rango de
variacin (i puede tomar los valores entre 0 y n 1), y por ltimo una expresin (2 n + 1)
que indica cuales van a ser los trminos de la sumatoria.
Utilizando la notacin para cuanticaciones que veremos en la prxima seccin, la expresin
anterior se expresara como:
(+i : 0 i < n : 2 i + 1)
Esta notacin tiene varias ventajas respecto a la notacin anterior (sumatoria). Algunas de
ellas son:
Los parntesis hacen explcito el alcance de la variable i, es decir el mbito en donde i
est referenciada. Este alcance comprende la expresin entre parntesis.
Las expresiones cuanticadas presentadas con esta notacin admiten cualquier expresin
booleana como rango de variacin de i, mientras que la anterior solo admite intervalos de
nmeros naturales. Esto facilita la escritura de las cuanticaciones. Por ejemplo, podra-
mos escribir la cuanticacin 6.1 como:
(+i : 1 i n impar.i : i)
La nueva notacin permite con mayor facilidad la participacin de ms de una variable
cuanticada. Por ejemplo,
_
+i, j : 1 i 2 3 j 4 : i
j
_
denota la suma 1
3
+1
4
+2
3
+2
4
(para determinar qu combinaciones de i
j
deben sumarse,
elegimos todas la combinaciones de i y j que satisfagan 1 i 2 3 j 4).
Otros ejemplos de expresiones cuanticadas son las cuanticaciones universal y existen-
cial, vistas en el captulo anterior. stas son llamadas cuanticaciones lgicas. Tambin existen
cuanticaciones para denir conjuntos por comprensin y para otros operadores matemticos,
como ser el producto.
Antes de denir la sintaxis de expresiones cuanticadas generales se introducir con mayor
detalle el concepto de tipo de las expresiones, el cual es de gran de importancia para comprender
las cuanticaciones.
6.2. Tipos
En los lenguajes de programacin, se dene tipo como el conjunto no vaco de valores que
pueden asociarse a una variable. Recordemos que este concepto fue introducido en el Captulo 1
6.2. TIPOS 113
cuando denimos variable. Luego, en el Captulo 2, trabajamos con expresiones booleanas y
observamos que stas slo asumen los valores true y false, de ahora en ms notaremos con B, al
conjunto de stos valores. Comenzaremos ahora a trabajar con otros tipos que describimos en
la siguiente tabla:
Nombre Smbolo Tipo (conjunto de valores)
enteros Z enteros:. . . , 3, 2, 1, 0, 1, 2, 3, . . .
naturales N nmeros naturales: 0, 1, 2, . . .
positivos Z
+
enteros positivos: 1, 2, 3, . . .
negativos Z
enteros negativos: 1, 2, 3, . . .
racionales Q nmeros racionales: i/j con i, j enteros y j ,= 0
reales R nmeros reales
reales positivos R
+
nmeros reales positivos
booleanos B true y false
El concepto de tipos nos obliga a observar en detalle nuestra nocin de expresin. Una expre-
sin, no slo debe ser una secuencia de smbolos que satisfacen reglas sintcticas predenidas
sino que a partir de ahora, debe tener tambin el tipo correcto. Por lo tanto algunas expresiones
que antes parecan correctas, a partir de ahora no lo sern si no satisfacen las reglas de tipado.
En general, toda expresin E tendr asociado un tipo t, el cual puede declararse escribiendo
E : t. La constante 1 tiene tipo Z y la constante true tiene tipo B, podemos escribir entonces
1 : Z y true : B. Similarmente cada variable tiene un tipo. A veces el tipo de una variable se
menciona en el texto que acompaa a la expresin que usa la variable, y otras veces est dado
en alguna forma de declaracin, como ocurre en la declaracin de un lenguaje de programacin
var x : integer. Sin embargo cuando el tipo de una variable no es importante o queda claro
del contexto puede omitirse. A veces es til, declarar el tipo de una subexpresin dentro de
una expresin dada, de modo de hacer lo ms clara posible la expresin al lector. Por ejemplo,
podemos escribir 1
n
tambin as
(1 : Z)
n:N
para indicar que 1 es un entero y adems n es natural. Esta notacin es necesaria cuando 1 puede
simbolizar tambin una matriz identidad adems de un nmero entero, y sea importante dejar
en claro que n es no negativo. Cualquier subexpresin de una expresin debe escribirse con su
correspondiente tipo. Por ejemplo aqu presentamos una expresin con su tipo completamente
descripto:
((x : N + y : N) x : N) : N
Adems de las constantes y variables, otras clases de expresiones que debemos tomar en cuenta
en la denicin de tipos es la aplicacin de funciones. Cada funcin tiene asociado un tipo, el
cual a su vez describe los tipos de sus parmetros y el tipo de su resultado. Si los parmetros
p
1
, p
2
, . . . , p
n
de una funcin f tienen los tipos t
1
, t
2
, . . . , t
n
y el resultado de la funcin tiene
tipo r, entonces f tiene tipo t
1
. . . t
n
r. Indicamos esto ltimo as:
f : t
1
. . . t
n
r (6.1)
114 6. EXPRESIONES CUANTIFICADAS
En la siguiente tabla presentamos algunos ejemplos de funciones y sus tipos.
funcin tipo ejemplo de aplicacin de funcin
mas Z Z Z mas (1, 3) o 1 + 3
no B B no.true o true
menor Z Z B menor (5, 3) o 5 < 3
Para funciones f con tipos como los vistos en (6.1), denimos la aplicacin de funcin
f (a
1
, . . . , a
n
) como una expresin si y slo si sus argumentos a
i
son de tipo t
i
. El tipo de
resultado de una aplicacin de funcin es entonces r. En este sentido, el tipo de una expresin
se determina a travs de los tipos de sus operandos. Los tipos correctos dependen solamente
de la secuencia de smbolos en la expresin dada, y no de la evaluacin de la expresin en un
estado dado. Por ejemplo, (1/ (x : Z)) : R es una expresin, an cuando su evaluacin no est
denida en el estado x = 0.
Para cualquier tipo (o conjunto) t y cualquier expresin E, denimos la expresin E t
como el resultado de E est en t. Por ejemplo, podemos escribir:
i N i 0.
Por lo tanto, E t es una expresin, tanto como x < y, que es evaluada en la medida que
la expresin E es evaluada, mientras que E : t es simplemente la expresin E descripta junto
con su tipo. Para observar la relacin entre la descripcin sintctica E : t y la expresin E t
veamos la siguiente conexin entre ellas:
Si E tiene tipo t, es decir E : t, entonces E t es evaluada en el valor true en todo
los estados en los cuales E est bien denida.
Un lenguaje con reglas sintcticas que asigna un tipo a cada expresin se llama fuertemente
tipado. Pascal, Ada y ML son lenguajes de programacin fuertemente tipados. Esta caractersti-
ca en los lenguajes provee una medida de control sintctico en dos sentidos. Primero, nos libera
de ubicar expresiones E t en diversos lugares dentro de expresiones. Si la sintaxis indica
E : t, entonces necesariamente debe darse E t (siempre que E est denida). Por otra parte,
cuando el lenguaje se implementa, el tipado fuerte permite la deteccin de errores en forma
temprana por parte del editor de texto, el compilador o alguna otra herramienta de software.
Un lenguaje sin reglas sintcticas de tipo se llama no tipado. Lisp, Scheme y Prolog son
lenguajes de esta clase. En un lenguaje no tipado, true es una expresin y el error en sta
es considerado un error semntico, que se detecta (si es el caso) slo cuando la expresin es
evaluada.
Con la nocin de tipo, son necesarias ciertas restricciones para asegurar la correccin de
tipos en la manipulacin de expresiones:
a) En una sustitucin E[x := F], x y F deben ser del mismo tipo.
b) La igualdad b = c se dene slo si b y c tienen el mismo tipo. Esto es, la igualdad = tiene
tipo t t B para cualquier tipo t.
6.4. SINTAXIS E INTERPRETACIN DE LA CUANTIFICACIN 115
La restriccin (a) asegura que la sustitucin no produce no-expresiones. La restriccin (b)
asegura que la aplicacin de la Regla de Leibniz o la Sustitucin como Regla de inferencia no
viole la restriccin (a).
6.3. Sintaxis e interpretacin de la cuanticacin
Una expresin cuanticada o cuanticacin tendr la siguiente forma:
(x : R : T)
donde
designa un operador asociativo, conmutativo y con elemento neutro.
x denota una secuencia variables, llamadas variables cuanticadas. Cuando exista ms de
una variable cuanticada, se separarn las variables entre comas. Denotaremos con V.x al
conjunto de variables cuanticadas que hay en x.
R es un predicado que se denomina rango de especicacin.
T es una expresin llamada trmino de cuanticacin.
La variable cuanticada x solo tiene sentido dentro de los smbolos ( y ). Cuando necesite-
mos hacer referencia explcita a la variable cuanticada escribiremos R.x y T.x para el rango y
el trmino respectivamente.
Hasta aqu hemos presentado la sintaxis de una expresin cuanticada. Veremos ahora su
semntica o interpretacin:
La expresin (x : R : T) denota la aplicacin del operador a los valores de T eva-
luada en los estados en que la variable x satisface el rango R, es decir los estados para los
cuales R es true.
Aqu vemos algunos ejemplos de cuanticaciones junto con las expresiones que stas deno-
tan.
(+i : 0 i < 4 : i,8) = 0,8 + 1,8 + 2,8 + 3,8
(i : 0 i < 3 : i + (i + 1)) = (0 + 1) (1 + 2) (2 + 3)
(i : 0 i < 2 : b[i] ,= 6) = b[0] ,= 6 b[1] ,= 6
(i : 0 i < 21 : b[i] = 0) = b[0] = 0 . . . b[20] = 0
La cuanticacin que tiene como operador es la cuanticacin universal, mientras que
la existencial tambin se denota con la cuanticacin que tiene como operador . Tambin se
utilizan smbolos en lugar de un operador en algunas cuanticaciones matemticas, como la
116 6. EXPRESIONES CUANTIFICADAS
sumatoria y la productoria. En lo que sigue utilizaremos indistintamente en las cuanticaciones
los smbolos , ,
i : R : P)
(i : R : P) como (
i : R : P)
(i : R : P) como ( i : R : P)
(i : R : P) como ( i : R : P)
6.4. Variables libres y ligadas
Uno de los conceptos bsicos para comprender y manejar las expresiones cuanticadas es
el de variable libre. Asociados a este concepto estn tambin los conceptos de variable ligada
y alcance. Vamos a considerar primero algunos ejemplos antes de dar una denicin formal de
estos conceptos.
Consideremos otra vez el ejemplo de la sumatoria (
j : 0 j < n : 2j +1).
Diremos que las ocurrencias de la variable i estn ligadas (a la variable que aparece luego del
operador +), mientras que la ocurrencia de n est libre.
En general, la ocurrencia de una variable es ligada en una expresin E si se encuentra bajo
el alcance de un cuanticador, o si es la variable de un cuanticador. Si la ocurrencia de una
variable no es ligada en E diremos que es libre.
Una variable x es ligada en una expresin E si tiene alguna ocurrencia ligada en E y es libre
en E si tiene alguna ocurrencia libre.
A continuacin veremos la denicin formal de variable libre y ligada.
(6.1) Denicin. Variable Libre
Una variable i est libre en la expresin i.
Si la variable i est libre en E entonces estar libre en (E).
Si la variable i est libre en E y f es una funcin que toma a E como parmetro,
entonces i est libre en f (. . . , E, . . .).
Si la variable i est libre en R, donde R es un rango de especicacin, e i no
aparece en la secuencia de variables de x (i / V.x), entonces i tambin est libre
en (x : R : T) para cualquier trmino T.
Si la variable i est libre en T, donde T es un trmino de cuanticacin, e i no
aparece en la secuencia de variables de x (i / V.x), entonces i tambin est libre
en (x : R : T) para cualquier rango de especicacin R.
6.5. REVISIN DE LA SUSTITUCIN EN EXPRESIONES CUANTIFICADAS 117
(6.2) Notacin. Dada una expresin E, el conjunto de todas las variables libres de E se
denotar FV.E.
(6.3) Denicin. Variable Ligada
Sea i una variable libre en la expresin E y i una variable de la secuencia de variables
x, luego la variable i est ligada en las expresiones (x : E : F) y en (x : F : E).
Adems, si i est ligada en E, tambin lo est (a la misma variable de cuanticacin)
en (E), (x : R : T), (y : E : T) y (y : R : E).
(6.4) Notacin. Dada una expresin E, el conjunto de todas las variables ligadas de E se
denotar BV.E.
(6.5) Ejemplo. Consideremos la expresin
E = k + (
i : 0 i < n : 2 i + 1)
luego, las variables libres y ligadas en E son dadas en los conjuntos FV.E = k, n y
BV.E = i.
(6.6) Ejemplo. Dada la expresin
E = (i > n) ( i, j : j < i < n : i
2
+ j
2
< n)
se denen los siguientes conjuntos de variables FV.E = i, n y BV.E = i, j.
Notamos que la variable i aparece libre y ligada en E, dado que la primer ocurrencia es
libre y las dems ocurrencias son ligadas. Una variable puede ser libre y ligada en una
misma frmula pero una ocurrencia de variable en una frmula es o bien libre o bien
ligada, no ambas.
6.5. Revisin de la sustitucin en expresiones cuanticadas
Las variables ligadas tienen su alcance delimitado de manera explcita y estn ligadas a una
variable de cuanticacin. Si se cambian ambas por un nuevo nombre (que no aparece dentro
del alcance), el signicado de la expresin cuanticada no cambiar, como ya lo habamos
mencionado:
_
i : 0 i < n : 2 i + 1
_
=
_
j : 0 j < n : 2 j + 1
_
Debe tenerse cuidado sin embargo con las duplicaciones de nombres, dado que si por ejem-
plo se reemplaza i por n se obtiene una expresin diferente a las anteriores:
_
n : 0 n < n : 2 n + 1
_
118 6. EXPRESIONES CUANTIFICADAS
Veremos ms adelante que esta expresin es igual a 0, independientemente del estado de la
variable n.
A continuacin extenderemos la nocin de sustitucin en expresiones cuanticadas a travs
del siguiente axioma:
(6.7) Axioma. Sustitucin para expresiones cuanticadas
V.y (V.x FV.E) = (y : R : T) [x := E] = (y : R[x := E] : T [x := E])
(6.8) Observacin. La condicin V.y (V.x FV.E) = es necesaria para evitar duplica-
ciones de nombres, si la condicin no se cumple es necesario renombrar la variable de
cuanticacin. En seccin 6.7 veremos como hacer sto mediante un axioma.
6.6. La regla de Leibniz para expresiones cuanticadas
La regla de Leibniz nos permite reemplazar una expresin por otra expresin igual a sta.
En expresiones cuanticadas, sta regla, que fue introducida en el captulo 3,
X = Y
E [x := X] = E [x := Y ]
no siempre nos permite realizar tales reemplados.
Por ejemplo, dado que 2 i + 1 = 2 (i + 1) 1 es de esperar que aplicando la regla de
Leibniz pueda deducirse que
_
i : 0 i < n : 2 i + 1
_
=
_
i : 0 i < n : 2 (i + 1) 1
_
La forma en que podra usarse esta regla para obtener la expresin anterior 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]
Pero dado que i es la variable de cuanticacin, para aplicar el Axioma 6.7, es necesario
renombrar i antes de aplicar la sustitucin, con lo cual el resultado de
_
i : 0 i < n : y
_
[y := 2 i + 1]
ser
_
j : 0 j < n : 2 i + 1
_
y no el esperado.
La regla de Leibniz puede generalizarse para ser utilizada en expresiones cuanticadas agre-
gando las siguientes reglas para el rango y el trmino:
6.7. REGLAS GENERALES PARA EXPRESIONES CUANTIFICADAS 119
Regla de Leibniz para expresiones cuanticadas:
X = Y
(i : R[z := X] : T) = (i : R[z := Y ] : T)
X = Y
(i : R : T [z := X]) = (i : R : T [z := Y ])
6.7. Reglas generales para expresiones cuanticadas
A continuacin enunciaremos axiomas y teoremas que nos permitirn manipular expresio-
nes cuanticadas generales (sobre un operador binario ). En los casos en que el axioma o
teorema sea una generalizacin de alguno del captulo 5, se conservar el nombre de ste, ya
que quedar claro a partir del contexto qu versin del axioma o teorema est siendo utilizada.
En lo que sigue asumiremos que es un operador conmutativo, asociativo y con elemento
neutro u.
(6.9) Axioma. Rango vaco. Cuando el rango de especicacin es vaco (es false), la expre-
sin cuanticada es igual al elemento neutro u del operador .
(i : false : T) = u
(6.10) Axioma. Rango unitario. Si el rango de especicacin consiste en un solo elemento, e i
no es una variable libre en la expresin N, la expresin cuanticada es igual al trmino
evaluado en ese elemento.
(i : i = N : T) = T [i := N]
otra forma de expresar esta regla es hacer explcita la dependencia de T a la variable i
(lo cual no signica que i deba aparecer en T)
(i : i = N : T.i) = T.N
(6.11) Observacin. Observemos que para poder aplicar el axioma, la variable i no debe estar
libre en la expresin N. Esta restriccin es necesaria por la siguiente razn: la expresin
del lado izquierdo del axioma no depende de i, debido a que todas las variables i son
ligadas en la expresin; para que la igualdad se cumpla, la expresin del lado derecho
tampoco debe depender de i, sto requiere que i no est libre en N.
(6.12) Axioma. Distributividad. Si el operador es distributivo a izquierda con respecto a ,
i / FV.E y se cumple al menos una de las siguientes condiciones:
el rango de especicacin es no vaco,
120 6. EXPRESIONES CUANTIFICADAS
el elemento neutro del operador existe y es absorbente para ,
entonces:
(i : R : E T) = E (i : R : T)
anlogamente si es distributivo a derecha con respecto a y se cumple al menos una
de las condiciones anteriores, entonces:
(i : R : T E) = (i : R : T) E
Veamos por qu en caso que la primera condicin no se cumpla es necesario que se cumpla
la segunda para que el axioma sea vlido. Supongamos que R = false, aplicando el axioma
Rango vaco en ambos lados de la igualdad obtenemos:
u = x u
Deducimos entonces, que para que se cumpla esta igualdad es necesario que el nuetro ope-
rador del operador (u) sea absorbente para .
Veamos un ejemplo,
(+i : 0 i < 10 : (x + 4) 2)
= es asociativo respecto a + , 0 es absorvente para , Distributividad (6.12))
(x + 4) (+i : 0 i < 10 : 2)
Antes de enunciar el siguiente axioma, recordemos que un operador es idempotente si
cumple la siguiente condicin:
P P = P
donde P es una variable del tipo sobre el cual est denido el operador. Ejemplos de operadores
idempotentes son: y .
(6.13) Axioma. Particin de rango. Cuando el rango de especicacin es de la forma RS y
adems se cumple al menos una de las siguientes condiciones:
el operador es idempotente
R S = false, es decir no existe un elemento que satisfaga R y S.
la expresin cuanticada puede reescribirse como sigue
(i : R S : T) = (i : R : T) (i : S : T)
(6.14) Observacin. La restriccin R S = false en el axioma anterior asegura que los
trminos no son acumulados dos veces en el lado derecho cuando el operador no es
idempotente, el axioma que sigue contempla la situacin de la doble acumulacin agre-
gando en el lugar indicado la expresin (i : R S : P), que involucra los trminos
de P para los valores de las variables cuanticadas que satisfacen tanto R como S.
6.7. REGLAS GENERALES PARA EXPRESIONES CUANTIFICADAS 121
(6.15) Axioma. Particin de Rango.
(i : R S : P) (i : R S : P) = (i : R : P) (i : S : P) .
(6.16) Axioma. Particin de Rango generalizada.
Si el operador operador es idempotente y el rango de especicacin es una cuanti-
cacin existencial, entonces
(i : ( j : S.i.j : R.i.j) : T.i) = (i, j : S.i.j R.i.j : T.i)
(6.17) Axioma. Regla del trmino. Cuando el operador aparece en el trmino de la cuanti-
cacin, la expresin cuanticada puede reescribirse de la siguiente manera:
(i : R : T G) = (i : R : T) (i : R : G)
(6.18) Axioma. Regla del trmino constante. Si el trmino de la cuanticacin es igual a una
constante C (es decir, la variable cuanticada i no aparece en C), el operador es
idempotente y el rango de especicacin es no vaco, entonces
(i : R : C) = C
A partir de este teorema se pueden demostrar las siguientes propiedades para la cuantica-
cin universal y existencial.
(i :: true) = true
(i :: false) = false
(6.19) Axioma. Regla de anidado. Cuando hay ms de una variable cuanticada y el rango de
especicacin es una conjuncin de predicados, uno de los cuales es independiente de
alguna de las variables de cuanticacin, la expresin 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.20) Axioma. Regla de intercambio de variables. Si V.j FV.R = y V.i FV.Q = ,
entonces
(i : R : (j : Q : T)) = (j : Q : (i : R : T))
(6.21) Axioma. Regla de cambio de variable. Si V.j (FV.R FV.T) = pueden renom-
brarse las variables
(i : R : T) = (j : R[i := j] : T [i := j])
puede tambin escribirse usando una referencia explcita a i
(i : R.i : T.i) = (j : R.j : T.j)
122 6. EXPRESIONES CUANTIFICADAS
(6.22) Observacin. La restriccin del axioma nos asegura que j es una variable nueva, o
dicho de otra forma que j no aparece libre en R y T.
A continuacin veremos una generalizacin de este ltimo axioma. Para comprender la uti-
lidad del mismo introduciremos un ejemplo.
Consideremos la siguiente expresin
_
+i : 2 i 10 : i
2
_
Si reescribimos esta expresin de modo que el rango de variacin de i comience en 0 en vez de
2 conseguimos la expresin
_
+k : 0 k 8 : (k + 2)
2
_
Observemos que la relacin entre i y k es i = k + 2 o tambin k = i 2. La igualdad entre las
expresiones anteriores es una instancia particular del siguiente teorema. Recordemos que una
funcin biyectiva f admite inversa f
1
y la funcin inversa se dene de acuerdo a:
x = f.y y = f
1
.x
(6.23) Teorema. Regla del cambio de variable.
Sea (i : R : T) una expresin cuanticada, y sea f una funcin biyectiva denida
sobre R y j una variable que no aparece libre en R ni en T (es decir V.j (FV.R
FV.T) = ) entonces,
(i : R.i : T.i) = (j : R.(f.j) : T.(f.j))
Probaremos este teorema comenzando por la expresin ms compleja.
(j : R.(f.j) : T.(f.j))
= Rango Unitario (Introduccin de la cuanticacin sobre i))
(j : R.(f.j) : (i : i = f.j : T.i))
= Anidado 6.19)
(i, j : R.(f.j) i = f.j : T.i)
= Sustitucin 3.84a))
(i, j : R.i i = f.j : T.i)
= Anidado 6.19)
(i : R.i : (j : i = f.j : T.i))
= Denicin de inversa)
(i : R.i : (j : j = f
1
.i : T.i))
= Rango Unitario 6.10, j / FV.T)
(i : R.i : T.i)
Veremos ahora dos teorema que nos permitirn sacar el primer y ltimo trmino de una
cuanticacin fuera de la misma.
6.8. CUANTIFICADORES ARITMTICOS 123
(6.24) Teorema. Separacin de un trmino.
Sea n < m,
a) (i : n i < m : T.i) = T.n (i : n < i < m : T.i)
b) (i : n < i m : T.i) = (i : n < i < m : T.i) T.m
Demostraremos 6.24a comenzando por el lado izquierdo de la igualdad:
(i : n i < m : T.i)
= n i < m i = n n < i < m)
(i : i = n n < i < m : T.i)
= Particin de rango 6.13, i = n n < i < m = false)
(i : i = n : T.i) (i : n < i < m : T.i)
= Rango unitario 6.10)
T.n (i : n i < m : T.i)
6.8. Cuanticadores aritmticos
6.8.1. Mximos y mnimos
Los operadores matemticos max y min, que calculan el mximo y el mnimo valor entre
dos nmeros, tambin pueden cuanticarse.
Una denicin formal de estos operadores es la siguiente:
(6.25) Axioma. Denicin de max y min:
max.(a, b) = c (c = a c = b) a c b c
min.(a, b) = c (c = a c = b) a c b c
La denicin anterior no es constructiva en el sentido que no muestra como calcular tanto
el mximo como el mnimo entre dos elementos, pero s provee una herramienta que permite
manipular expresiones donde aparecen los operadores max y min.
Los operadores max y min son simtricos y asociativos sobre el conjunto de los nmeros
enteros, pero no poseen elemento neutro. Extenderemos el conjunto de los nmeros enteros
agregando dos smbolos: y , los cuales por denicin sern los neutros de min y max
respectivamente. De esta manera podremos denir las cuanticaciones asociadas a estos opera-
dores:
(min i : R : E) y (max i : R : E) (6.2)
Cuyos signicados son el mnimo y el mximo de los valores obtenidos al evaluar la expre-
sin E sobre el conjunto de valores de i que satisfacen el rango R. Por ejemplo:
(min i : 0 i 10 : b [i])
124 6. EXPRESIONES CUANTIFICADAS
es el mnimo de los valores de la lista b [0],. . . , b [10].
Las frmulas (7.2) satisfacen las leyes generales dadas para los cuanticadores en el captulo
6. A continuacin instanciaremos algunas de estas leyes para el operador max.
(6.26) Teorema. Rango vaco
(max i : false : T.i) =
Dado que el operador min es distributivo respecto max, y que es absorvente para min,
el teorema de Distributividad 6.12 para los operadores max y min puede expresarse como:
(6.27) Teorema. Distributividad de min sobre max.
Suponiendo que i no es variable libre en E:
min.(E, (max i : R : T)) = (max i : R : min.(E, T))
La suma tambin se distribuyen sobre max. Al instanciar el teorema de Distributividad con
el operador + se obtiene el siguiente teorema.
(6.28) Teorema. Distributividad de + sobre max.
Suponiendo que i no es variable libre en E y que R ,= false:
E + (max i : R : T) = (max i : R : E + T)
La restriccin R ,= false es necesaria dado que no es absorvente para la suma
(adems de que la suma no est denida para las constantes y ).
El hecho de que max sea idempotente hace que el teorema Particin de rango (6.15) para
este operador pueda expresarse como:
(6.29) Teorema. Particin de rango.
(max i : R S : F) = max.((max i : R : F), (max i : S : F))
Se deja como ejercicio para el lector instanciar las restantes leyes para max y las correspon-
dientes al operador min.
A continuacin veremos dos propiedades que relacionan las cuanticaciones para los ope-
radores max y min con la cuanticacin universal.
(6.30) Teorema.
T.x = (max i : R.i : T.i) R.x ( i : R.i : T.i T.x)
T.x = (min i : R.i : T.i) R.x ( i : R.i : T.i T.x)
6.9. EJERCICIOS 125
6.8.2. Operador de conteo
Hasta aqu hemos denido cuanticadores que provienen de operadores binarios, conmuta-
tivos, asociativos y con elementos neutros. Tambin es posible denir cuanticadores a partir
de otros. ste es el caso del cuanticador N, denido como:
(N i : R : T) = (
i : R T : 1) (6.3)
Esta cuanticador cuenta la cantidad de elementos en el rango de especicacin R que
satisfacen el trmino de cuanticacin T.
Los siguientes son algunos ejemplos:
(N i : 0 i n : par.i)
(N i : 0 i n : ( j :: i = 2
j
))
El primero cuenta la cantidad de elementos pares que hay en el interbalo [0, . . . , n] y el segundo
la cantidad de potencias de 2 que hay en el mismo interbalo.
6.9. Ejercicios
6.1 Dadas las siguientes funciones con sus correspondientes tipos:
a : A B
b : B C
c : C A
d : A C D
e : B B E
Decidir cules de las siguientes expresiones es correcta, justicando la respuesta. Suponer
que u : A, w : B, x : C, y : D y z : E.
(a) e (a.u, w)
(b) b.x
(c) e (a (c.x) , a.u)
(d) a (c (b (a.y)))
(e) d (c.x, c.x)
6.2 Vericar si es posible dar una expresin cuanticada sobre los siguientes operadores: ,
, y /. En cada caso, ya sea armativo o negativo, justicar su respuesta.
6.3 Dar la expresin cuanticada asociada a las siguientes expresiones:
a) 0, 3
1
+ 0, 3
2
+ . . . + 0, 3
100
126 6. EXPRESIONES CUANTIFICADAS
b) 1 2 3 . . . 25
c) b[0] b[1] . . . b[n]
d) b[0] > 0 b[1] > 0 . . . b[n] > 0
e) b[0] > 1 b[1] > 3 . . . b[n] > 2 n + 1
f) ((p + 0) = 0) ((p + 1) = 1) ((p + 2) = 2) . . . ((p + k) = k)
g) (3 b[0])
1
+ (4 b[0])
1/2
+ (5 b[0])
1/3
+ . . . + (27 b[0])
1/25
6.4 Cul es el valor de (k : k
2
= 4 : k
2
) en el caso que el tipo de la variable k sea:
a) un nmero natural,
b) un nmero entero?
6.5 Determinar todas las ocurrencias de variables libres y ligadas en las siguientes expresiones
haciendo explcito los conjuntos FV y BV respectivamente en cada una de ellas.
a) E
1
: 4 i
b) E
2
: (j : 1 j 3 : 4 i)
c) E
3
: (j : 1 j 3 : 4 j)
d) E
4
: (j : 1 j 3 : mj) + (j : 1 j 3 : n j)
e) E
5
: (j : 1 j 3 : mj) + (k : 1 k 3 : n j)
f) E
6
: x + n + (+x : 0 x < n : x + i)
g) E
7
: (i : 0 i j : (j : 1 j < m : j i k))
h) E
8
: true
_
k : 0 k a : k
2
= z
_
6.6 Realizar las siguientes sustituciones, en caso de ser necesario aplicar la Regla 6.21 corres-
pondiente a cambio de variable dummy.
(a) (x : 0 x + r < n : x + v) [v := 3]
(b) (x : 0 x + r < n : x + v) [x := 3]
(c) (x : 0 x + r < n : x + v) [n := n + x]
(d) (x : 0 x : (y : 0 y : x + y + n)) [n := x + y]
(e) (x : 0 x < r : (y : 0 y : x + y + n)) [r := y]
6.7 Probar los siguientes teoremas, suponiendo que n 0,
(a) (+i : 0 i < n + 1 : b[i]) = b[0] + (+i : 1 i < n + 1 : b[i])
(b) (+i : 0 i n : b[i]) = (+i : 0 i < n : b[i]) + b[n]
(c) (+i : 0 i n : b[i]) = b[0] + (+i : 0 i < n : b[i]) + b[n]
6.9. EJERCICIOS 127
6.8 Probar los siguientes teoremas, suponiendo que n 0,
(a) (i : 0 i < n + 1 : b[i] = 0) (i : 0 i < n : b[i] = 0) b[n] = 0
(b) (i : 0 i < n + 1 : b[i] = 0) (i : 0 i < n : b[i] = 0) b[n] = 0
(c) (i : 0 i < n + 1 : b[i] = 0) b[0] = 0 (i : 0 < i < n + 1 : b[i] = 0)
(d) (i : 0 i < n + 1 : b[i] = 0) b[0] = 0 (i : 0 < i < n + 1 : b[i] = 0)
6.9 Probar los siguientes teoremas:
a) (+i : 0 i n : i) = (+i : 0 i n par.i : i) +(+i : 0 i n impar.i : i)
b) (+i : 0 i 10 : 0) = 0
c) (m : m = false : m m) (n : n = true : n n) (k : k = 5 : 2 k < k
2
)
d) (i : 0 < i n : t[i] > 4) = t[1] > 4 (j : 0 < j n 1 : t[j] 3), donde
n 1
e) ( i : i > 2 i < 1 : i 2 + 3) > (+j : j > j + 1 : j
3
)
f)
(+i : 0 i n : i
2
2) =
(+j : par.j 0 j n : 2 j
2
) + 2 (+k : impar.k 0 k n : k
2
)
g) ( i, j : i 0 i + j < 4 : (i + j) (i j)) = ( i : i 0 : ( j : j < 4 i : i + j))
( i : i 0 : ( j : i 3 j : i j))
6.10 Demostrar que para cualquier elemento z que satisfaga R.i, T.z es menor al mximo de
los valores obtenidos al evaluar T.i sobre el conjunto de valores que satisfacen R.i.
Nota: Esta propiedad puede probarse demostrando:
F.x = (max i : R.i : T.i) (R.z F.z F.x)
6.11 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 expresin libre de cuanticadores que sea equivalente a
(max i, j : r.i.j j N + 1 : f.i.j)
6.12 Enunciar y demostrar la regla particin de rango para el cuanticador N.
6.13 En lo que sigue b [ 0 , . . . , n 1] es una lista de n 0 nmeros enteros. Traducir las
siguientes frases en expresiones cuanticadas.
a) El mnimo valor de la lista b es positivo.
128 6. EXPRESIONES CUANTIFICADAS
b) El mximo valor de la lista b no es cero.
c) Si b [0] ,= 0 entonces b [0] es el mximo valor de la lista.
d) La lista b contiene tantos nmeros positivos como negativos.
e) La lista b contiene exactamente dos ceros.
f) El nmero de valores pares en la lista b es mayor que el nmero de valores impares.
g) El promedio de los valores de b no supera al nmero de elementos no nulos en la lista.
6.14 En lo que sigue b [ 0 , . . . , n 1] es una lista de n 0 nmeros enteros. Traducir las
siguientes expresiones cuanticadas en expresiones dadas en lenguaje corriente.
a) (max i : 1 i n : i + 1) = n + 1
b) (N i : 0 i 3 : i
2
> i) = 2
c) (min i : 0 i 3 : i
2
> i) = 2
d) (max i : 0 i < n 1 : b [i]) = b [n 1]
e) (N i : 0 i n 1 : par. b [i] = (N i : 0 i n 1 : impar. b [i])
CAPTULO 7
Ms cuanticadores
ndice del Captulo
7.1. Los axiomas de la aritmtica . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.2. Axiomas de orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.3. Mximos y mnimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
7.4. Cuanticaciones para max y min . . . . . . . . . . . . . . . . . . . . . . 137
7.5. Cuanticaciones sobre conjuntos . . . . . . . . . . . . . . . . . . . . . . . 138
7.5.1. Conjunto universal, pertenencia e igualdad . . . . . . . . . . . . . . 139
7.5.2. Conjuntos versus Predicados . . . . . . . . . . . . . . . . . . . . . . 141
7.5.3. Cardinalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.5.4. Unin e interseccin . . . . . . . . . . . . . . . . . . . . . . . . . . 142
7.5.5. Unin e interseccin de familias de conjuntos . . . . . . . . . . . . . 142
7.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
7.6.1. Ejercicios sobre los axiomas de la aritmtica y los axiomas de orden . 143
7.6.2. Ejercicios sobre mximo y mnimo . . . . . . . . . . . . . . . . . . 144
7.6.3. Ejercicios sobre conjuntos . . . . . . . . . . . . . . . . . . . . . . . 145
7.6.4. Ejercicios sobre cuanticaciones . . . . . . . . . . . . . . . . . . . . 146
P
resentaremos aqu otros cuanticadores relacionados con los nmeros reales que sern de
utilidad y las correspondientes reglas necesarias para su manipulacin. Para esto, ser ne-
cesario introducir el sistema de los nmeros reales. Hay varias formas de hacer esto ltimo,
una de ellas es considerar el conjunto de los nmeros reales como conceptos primitivos que
satisfacen un nmero de axiomas. Todas las propiedades de los nmeros reales estn entre los
axiomas o pueden deducirse de ellos. Los axiomas que denen el sistema de los nmeros reales,
se dividen en tres grandes gupos:
129
130 7. MS CUANTIFICADORES
Axiomas de la aritmtica.
Axiomas de orden.
Axioma del supremo.
Nosotros enunciaremos y demostraremos propiedades que se deducen de los dos primeros
grupos.
7.1. Los axiomas de la aritmtica
Consideremos ahora nmeros de tipo R, junto con stos se supone la existencia de dos
operaciones binarias, suma (+) y producto (), cerradas en R. Esto ltimo signica que si
x, y R, entonces x + y R y tambin x y R. En los siguientes enunciados x, y R:
(7.1) Axioma. Propiedad conmutativa de la suma y el producto:
x + y = y + x x y = y x
(7.2) Axioma. Propiedad asociativa de la suma y el producto:
x + (y + z) = (x + y) + z x (y z) = (x y) z
(7.3) Axioma. Existencia de elementos neutros: Existen dos nmeros reales diferentes 0 y 1,
tales que:
x + 0 = 0 + x = 0 x 1 = 1 x = x
(7.4) Axioma. Existencia del opuesto: para cada nmero real x existe un nmero real a y
que denominamos opuesto de x, tal que x + a = a + x = 0, o equivalentemente:
( x : R :: ( a : R :: a + x = x + a = 0)).
(7.5) Axioma. Existencia del recproco: para cada nmero real x tal que x ,= 0, existe un
nmero real b y que denominamos recproco de x, tal que x b = b x = 1, o equiva-
lentemente:
( x : R : x ,= 0 : ( b : R :: b x = x b = 1)).
(7.6) Axioma. Propiedad distributiva:
x (y + z) = x y + x z
De los axiomas anteriores se pueden deducir todas las leyes de la aritmtica. A continuacin
enunciaremos algunas de ellas:
(7.7) Teorema. Ley cancelativa de la suma:
a + b = a + c b = c
7.1. LOS AXIOMAS DE LA ARITMTICA 131
Haremos la demostracin de este teorema, por doble implicacin; es decir probaremos pri-
mero que a + b = a + c b = c y luego la recproca.
Veamos entonces a + b = a + c b = c, para esto, supondremos cierto el antecedente y
probaremos el consecuente:
b
= Axioma 7.3)
0 + b
= Axioma 7.4 correspondiente a a)
(x + a) + b
= Axioma 7.2)
x + (a + b)
= Suponiendo el antecedente a + b = a + c)
x + (a + c)
= Axioma 7.2)
(x + a) + c
= Axioma 7.4)
0 + c
= Axioma 7.3)
c
Ahora veremos que b = c a+b = a+c, utilizaremos tambin la modalidad de suposicin
del antecedente.
a + b
= suponemos que b = c)
a + c
En particular, el teorema anterior permite demostrar que el elemento neutro de la suma 0 es
nico.
(7.8) Teorema.
a + z = a z = 0
La demostracin es una aplicacin directa de la propiedad cancelativa:
a + z = a
= Axioma 7.3b = c)
a + z = a + 0
= Teorema 7.7)
z = 0
La demostracin del siguiente teorema tambin utiliza a la propiedad cancelativa:
(7.9) Teorema. a 0 = 0
132 7. MS CUANTIFICADORES
a 0 = 0
= Teorema 7.7, con a, b, c := a a, a 0, 0)
a a + a 0 = a a + 0
= Axioma 7.6)
a (a + 0) = a a + 0
= Axioma 7.3)
a a = a a
Con lo cual se ha demostrado que a 0 = 0 es equivalente a la propiedad reexiva de la
igualdad X = X con X := a a.
El siguiente teorema demuestra que para cualquier nmero real a el opuesto que menciona
el Axioma 7.4 es nico:
(7.10) Teorema. x + a = 0 y + a = 0 x = y.
x + a = 0 y + a = 0
= Simetra de =)
x + a = 0 0 = y + a
Transitividad de =)
x + a = y + a
= Teorema 7.7)
x = y
Como sabemos que dado un nmero cualquiera a su opuesto es nico, denotaremos a ste
como a y lo llamaremos el opuesto de a. Es decir
a + (a) = (a) + a = 0 (7.1)
Ahora bien, supongamos dos nmeros a y b y consideremos el opuesto de a, es decir a,
podemos realizar la operacin b + (a) y obtener as otro nmero al que llammos y. Es fcil
ver que a + y = b
(7.11) Teorema. Posibilidad de sustraccin: Dados a y b existe uno y slo un y tal que a+y =
b. Este y se designa como b a.
(7.12) Teorema. b a = b + (a)
(7.13) Teorema. Ley de simplicacin para la multiplicacin:
c ,= 0 (c a = c b a = b)
c ,= 0 (a c = b c a = b)
En particular, este teorema demuestra que el elemento neutro de la multiplicacin 1 es nico.
(7.14) Teorema. a ,= 0 (a z = a z = 1)
7.2. AXIOMAS DE ORDEN 133
Enunciamos ahora algunos teoremas quese dejan como ejercicio:
(7.15) Teorema. a (b c) = a b a c
(7.16) Teorema. x + a = 0 x = a
(7.17) Teorema. a = b a = b
(7.18) Teorema. (a) = a
(7.19) Teorema. 0 = 0
(7.20) Teorema. (a + b) = (a) + (b)
(7.21) Teorema. a = (1) a
(7.22) Teorema. (a) b = a (b)
(7.23) Teorema. a (b) = (a b)
(7.24) Teorema. (a) (b) = a b
(7.25) Teorema. a 0 = a
(7.26) Teorema. (a b) + (c d) = (a + c) (b + d)
(7.27) Teorema. a b = 0 a = 0 b = 0
7.2. Axiomas de orden
Este grupo de axiomas se reere a un concepto por el cual se establece una ordenacin
entre los nmeros reales. Segn esta ordenacin se puede decidir si un nmero real es mayor o
menor que otro. Se introducen aqu las propiedaades de orden, como un conjunto de axiomas
referentes al nuevo concepto primitivo de positivo, para denir despus los conceptos de mayor
que y menor que a partir del concepto de positivo.
Supondremos que existe un cierto subconjunto R
+
R, llamado subconjunto de nmeros
positivos, que satisfacen los siguientes axiomas:
(7.28) Axioma. x R
+
y R
+
x + y R
+
(7.29) Axioma. x R
+
y R
+
x y R
+
(7.30) Axioma. 0 / R
+
(7.31) Axioma. x ,= 0 (x R
+
((x) R
+
)
134 7. MS CUANTIFICADORES
Ahora se pueden denir los mbolos <, >, , de la siguiente forma:
(7.32) Axioma. (<) x < y y x R
+
(7.33) Axioma. (>) x > y x y R
+
(7.34) Axioma. () x y x = y x < y
(7.35) Axioma. () x y x = y x > y
Con estas deniciones podremos probar que los elementos positivos son mayores que cero
y una serie de teoremas que se enuncian a continuacin:
(7.36) Teorema. x R
+
0 < x
(7.37) Teorema. Transitividad:
(a) a < b b < c a < c
(b) a b b < c a < c
(c) a < b b c a < c
(d) a b b c a c
(7.38) Teorema. Monotona: a < b a + c < b + c
(7.39) Teorema. Monotona: 0 < c (a < b a c < b c
(7.40) Teorema. Tricotoma: (a < b a = b a > b) (a < b a = b a > b)
(7.41) Teorema. Antisimetra: a b b a a = b
(7.42) Teorema. Reexividad: a a
(7.43) Teorema. a = b ( z :: z a z b)
7.3. Mximos y mnimos
El concepto de mximo y mnimo entre dos nmeros, es conocido. El mnimo entre los
nmeros x e y es el menor entre los dos y el mximo es el mayor. Por ejemplo, 5 es el mximo
entre 3 y 5, mientras que 3 es el mnimo. As diremos que max(5, 3) = 5 y min(5, 3) = 3.
A continuacin daremos una denicin formal a travs de los operadores max y min,
(7.44) Axioma. Denicin de max y min:
( z :: z min(x, y) z x z y)
( z :: z max(x, y) z x z y)
7.3. MXIMOS Y MNIMOS 135
La denicin anterior no es constructiva en el sentido que no muestra como calcular tanto
el mximo como el mnimo entre dos elementos, pero s provee una herramienta que permite
manipular expresiones con max y min.
Investigaremos ahora sus propiedades:
(7.45) Teorema. Simetra:
max(x, y) = max(y, x)
min(x, y) = min(y, x)
(7.46) Teorema. Asociatividad:
max(max(x, y), z) = max(x, max(y, z))
min(min(x, y), z) = min(x, min(y, z))
(7.47) Teorema. Idempotencia:
max(x, x) = x
min(x, x) = x
(7.48) Teorema.
max(x, y) x max(x, y) y
min(x, y) x min(x, y) y
(7.49) Teorema.
x y max(x, y) = x
x y min(x, y) = x
(7.50) Teorema.
max(x, y) = x max(x, y) = y
min(x, y) = x min(x, y) = y
Los siguientes teoremas describen la interaccin de max y min con las operaciones de suma
y producto:
136 7. MS CUANTIFICADORES
(7.51) Teorema. Distributividad de + respecto de max y min:
c + max(x, y) = max(c + x, c + y)
c + min(x, y) = min(c + x, c + y)
(7.52) Teorema. Distributividad de respecto de max y min:
c 0 c max(x, y) = max(c x, c y)
c 0 c min(x, y) = min(c x, c y)
(7.53) Teorema. Distributividad de respecto de max y min:
c 0 c max(x, y) = min(c x, c y)
c 0 c min(x, y) = max(c x, c y)
Probaremos los teoremas referidos al operador min, por la similitud existente, los referentes
a max se obtienen en forma anloga.
Para probar Simetra (7.45), necesitamos manipular ecuaciones de la forma z = min(x, y),
para esto utilizaremos ciertas propiedades relativas a las relaciones y :
a = b ( z :: z a z b)
a = b ( z :: z a z b)
Si reemplazamos a y b en la primera de las ecuaciones por min(x, y) y min(y, x), entonces:
min(x, y) = min(y, x) ( z :: z min(x, y) z min(y, x))
Por lo tanto Simetra (7.45), puede probarse demostrando que el lado derecho de la expresin
de arriba es un teorema, para esto probaremos que el trmino de la cuanticacin es vlido para
un valor arbitrario z:
z min(x, y)
= Denicin 7.44)
z x z y
= Simetra de 3.37)
z y z x
= Denicin 7.44 con x, y := y, x)
z min(y, x)
Con lo cual hemos probado que min es simtrico.
Ahora probaremos el teorema 7.48, para esto observemos que min(x, y) xmin(x, y)
y es el lado derecho del trmino de (7.44), denicin de min, con la sustitucin z := min(x, y),
procederemos as:
min(x, y) x min(x, y) y
= (7.44), con la sustitucin z := min(x, y))
min(x, y) min(x, y)
La ltima lnea corresponde a una de las propiedades de : a a para cualquier valor de a.
7.4. CUANTIFICACIONES PARA max Y min 137
7.4. Cuanticaciones para max y min
Los operadores max y min son simtricos y asociativos sobre el conjunto de los nmeros
enteros, por lo tanto son instancias posibles de operaciones vistas en el captulo 5, sobre las
cuales podemos denir expresiones cuanticadas :
(min i : R : E) y (max i : R : E) (7.2)
Cuyos signicados son el mnimo y el mximo de los valores obtenidos al evaluar la expre-
sin E sobre el conjunto de valores de i que satisfacen el rango R. Por ejemplo:
(min i : 0 i 10 : b [i])
es el mnimo de los valores de la lista b [0],. . . , b [10].
Las frmulas (7.2) satisfacen las leyes generales dadas para los cuanticadores en el captulo
5, con ciertas observaciones. Los operadores max y min no tienen elemento neutro en general.
Si el tipo de la variable i es N entonces max tiene elemento neutro y es 0, pero min no lo tiene.
Por conveniencia, extenderemos el conjunto de los nmeros enteros agregando dos smbolos:
y , los cuales por denicin sern los neutros de min y max respectivamente.
Se deja como ejercicio para el lector enunciar todas las reglas para las cuanticaciones
asociadas a los operadores max y min.
A continuacin daremos las leyes distributivas para las expresiones cuanticadas:
(7.54) Teorema. Distributividad de + sobre min: Suponiendo que x no es variable libre en E:
( x :: R) E + (min x : R : P) = (min x : R : E + P)
(7.55) Teorema. Distributividad de + sobre max: Suponiendo que x no es variable libre en E:
( x :: R) E + (max x : R : P) = (max x : R : E + P)
(7.56) Teorema. Distributividad de sobre min: Suponiendo que x no es variable libre en E:
( x :: R) E 0 E (min x : R : P) = (min x : R : E P)
(7.57) Teorema. Distributividad de sobre max: Suponiendo que x no es variable libre en E:
( x :: R) E 0 E (max x : R : P) = (max x : R : E P)
(7.58) Teorema. Distributividad de min sobre max: Suponiendo que x no es variable libre
en E:
min(E, (max x : R : P)) = (max x : R : min(E, P))
(7.59) Teorema. Distributividad de max sobre min: Suponiendo que x no es variable libre
en E:
max(E, (min x : R : P)) = (min x : R : max(E, P))
138 7. MS CUANTIFICADORES
(7.60) Teorema. Suponiendo que x no es variable libre en E:
R[x := E] E = max(E, (min x : R : x))
R[x := E] E = min(E, (max x : R : x))
El teorema 7.60 dice que el mnimo de un conjunto de valores no es ms grande que ninguno
de sus elementos y el mximo no es ms chico que estos elementos.
7.5. Cuanticaciones sobre conjuntos
Una forma de describir un conjunto es enumerar sus elementos, encerrados entre llaves y
separados mediante comas. Esta manera de expresar conjuntos tiene ciertas desventajas, por
ejemplo si queremos describir el conjunto de nmeros enteros pares entre 0 y 9900, la enume-
racin sera larga y tediosa. Una manera ms concisa de describir conjuntos es a travs de las
propiedades que deben satisfacer sus elementos. Por ejemplo:
x : Z : 0 x < 5 : 2 x
denota el conjunto 0, 2, 4, 6, 8.
Daremos un formato general para expresar conjuntos por comprensin, es decir a travs de
la descripcin precisa de las propiedades que cumplen sus elementos:
Sea R un predicado, E una expresin, x una lista de dummies y t un tipo, la evaluacin de
x : t : R : E
en un estado, conduce al conjunto de valores que resultan de evaluar E[x := v] en cada estado
v t para el cual R[x := v] se satisface.
Cuando sea claro del contexto, puede omitirse el tipo t de las dummies x. Si E tiene tipo t1,
entonces la expresin por comprensin tiene tipo set(t1).
La notacin dada para expresar conjuntos por comprensin es similar a la que ya hemos
visto para cuanticadores:
( x : t
1
, y : t
2
: R : P)
Y del mismo modo, R es el rango de especicacin, y la expresin E es el trmino. Las
nociones de alcance, variables libres y ligadas se aplican tambin a la expresin de conjuntos
por comprensin. Por ltimo, las variables dummies pueden tener distinto tipo.
Podemos expresar un conjunto por enumeracin e
0
, . . . , e
n
1 como abreviatura de:
e
0
, . . . , e
n
1 = x : x = e
0
. . . x = e
n
1 : x (7.3)
En los siguientes ejemplos, la variable dummy es de tipo Z:
7.5. CUANTIFICACIONES SOBRE CONJUNTOS 139
i : 0 < i < 4 : i El conjunto 1, 2, 3
i : 0 < i < 50 even.i : i Enteros positivos pares menores que 50
i : 0 < 2 i < 50 : 2 i Enteros positivos pares menores que 50
x, y : 1 x 2 y 3 : x
y
El conjunto 1
2
, 1
3
, 2
2
, 2
3
x : 0 x < 3 : x y El conjunto 0 y, 1 y, 2 y
x : 0 x < 0 : x y El conjunto vaco
El segundo y tercer ejemplo describen el mismo conjunto. El cuarto muestra dos dummies
en una misma expresin por comprensin, el quinto ilustra el uso de variables libres, el valor de
la expresin nal, depender del estado en que la variable y sea evaluada.
7.5.1. Conjunto universal, pertenencia e igualdad
Los conjuntos que hemos considerado hasta ahora fueron conjuntos de nmeros enteros,
pero bien podran haber sido conjuntos de caracteres, conjuntos de nmeros reales, o tambin
conjunto de conjuntos. Llamaremos con U a la coleccin de elementos que denen el dominio
de valores sobre el cual se determinan los conjuntos. Al conjunto U se lo conoce como conjunto
universal y puede pensarse como el tipo asociado a cada variable que represente un conjunto.
Por ejemplo, si el universo es set(Z), y v es un conjunto denido sobre este universo, entonces
v : set(Z).
Veamos ahora, la pertenencia en conjuntos. Dada una expresin E de tipo t, y consideremos
F : t, entonces tenemos los siguientes axiomas:
(7.61) Axioma. Pertenencia entre conjuntos: Suponiendo que x no es libre en E,
F x : R : E = ( x : R : F = E)
Dos conjuntos son iguales si contienen los mismos elementos. Por lo tanto para los conjuntos
S y T, tenemos:
(7.62) Axioma. Extensionalidad:
S = T ( x :: x S x T)
Veamos algunas consecuencias de estos axiomas:
x : false : E y denotan el conjunto vaco, es decir el conjunto sin ningn elemento.
El conjunto vaco tambin se denota con .
Suponiendo que x no es libre en e, y e es un conjunto formado por un nico elemento,
la expresin x : x = e : x da como resultado el conjunto e. Observemos que e es
siempre un valor, mientras que e es un conjunto que contiene ese valor. La expresin
e e es siempre true, y e = e no es ni siquiera una expresin, pues si e es de tipo t,
el lado derecho no tiene el mismo tipo que el lado izquierdo (set(t)).
140 7. MS CUANTIFICADORES
Como es simtrico, el orden en que los elementos aparecen en la expresin por enume-
racin de un conjunto es irrelevante, por ejemplo: 1, 3 = x : x = 1 x = 3 : x =
x : x = 3 x = 1 : x = 3, 1.
Como es idempotente, la repeticin de elementos en una expresin por enumeracin no
tiene importancia. Por ejemplo, 1, 3 = 1, 1, 3.
Los conjuntos pueden ser elementos de otros conjuntos.
Los conjuntos pueden ser heterogneos, es decir pueden contener elementos de distinto
tipo. Por ejemplo 1,B, 2, 3,A. El universo correspondiente a este conjunto es el
conjunto de los enteros con el conjunto de los caracteres.
Aunque Leibniz(1.5) nos puede ayudar para demostrar la igualdad entre conjuntos, a veces
el axioma de Extensionalidad (7.62) funciona mucho mejor. Si podemos demostrar que un ele-
mento arbitrario est en el conjunto S exactamente cuando se encuentra en el conjunto T, (7.62)
nos permite armar que S = T.
Vamos a usar esto para demostrar el obvio resultado que sigue:
S = x : x S : x (7.4)
De acuerdo al axioma de extensionalidad (7.62), es suciente con probar que v S v
x : x S : x, para un v arbitrario:
v x : x S : x
= denicin de pertenencia (7.61))
( x : x S : v = x)
= Traslacin (5.15) dos veces)
( x : x = v : x S)
= Rango unitario (6.10))
v S
Repasemos ahora, la forma tradicional para expresar conjuntos por comprensin:
x : R
Aqu, x es una variable simple, y la expresin anterior resulta una abreviatura de x : R : x.
Nosotros no utilizaremos siempre esta clase de expresiones, porque a veces no es posible
determinar cul de las variables es variable dummy. Por ejemplo, la expresin:
x + y : x = y + 1
depende fuertemente de cul es variable dummy:
Si x es dummy, entonces el conjunto es 2 y + 1.
7.5. CUANTIFICACIONES SOBRE CONJUNTOS 141
Si y es dummy, entonces el conjunto es 2 x 1.
Si x e y son dummies, entonces se trata del conjunto de los enteros impares.
De todos modos, la forma tradicional de expresar conjuntos por comprensin es suciente
para expresar cualquier conjunto que pueda describirse mediante nuestra forma general (7.5),
como lo establece el siguiente teorema:
(7.63) Teorema. Suponiendo que y no es libre en R, ni en E,
x : R : E = y : ( x : R : y = E)
Hemos introducido una notacin nueva para expresar conjuntos por comprensin, porque
sta no es ambigua, es ms adecuada para expresar ciertos conjuntos y adems ofrece una es-
tructura que permite ms fcilmente la manipulacin formal, sin embargo utilizaremos la forma
convencional cuando resulte ms conveniente.
7.5.2. Conjuntos versus Predicados
El teorema que sigue establece una conexin entre conjuntos y predicados, si R es un pre-
dicado, entonces:
x x : R R (7.5)
Observemos que x fue utilizada con dos signicados diferentes en x x : R, la primera
ocurrencia de x es libre, mientras que la segunda es ligada, como (7.5) es vlida, cualquier
instancia de la variable libre x por una expresin y nos da como resultado y x : R
R[x := y] para cualquier expresin y. El teorema anterior puede establecerse como el siguiente
principio:
(7.64) Principio. Principio de comprensin: A cada predicado R le corresponde un conjunto
expresado por comprensin x : t : R que contiene los elementos de tipo t que
satisfacen R, R es llamado el predicado caracterstico del conjunto.
7.5.3. Cardinalidad
La cardinalidad de un conjunto nito S es el nmero de elementos en S, que denotaremos
con # y puede denirse del siguiente modo:
(7.65) Axioma. Cardinalidad: #S = (
i : x S : 1)
La idea de cardinalidad se puede extender al operador de conteo, operador N, y una expre-
sin cuanticada:
142 7. MS CUANTIFICADORES
( i : R : T)
El operador de conteo N, cuenta la cantidad de elementos en el rango de especicacin R
que satisfacen el trmino de cuanticacin T, es decir:
(N i : R : T) = (
i : R T : 1) (7.6)
7.5.4. Unin e interseccin
Las operaciones de unin e interseccin de conjuntos se utilizan con frecuencia para obtener
nuevos conjuntos a partir de conjuntos dados. La unin entre S y T se denota S T y la
interseccin ST. Formalmente denimos estas operaciones a travs de los siguientes axiomas:
(7.66) Axioma. Unin: v S T v S v T
(7.67) Axioma. Interseccin: v S T v S v T
Las operaciones denidas tienen las siguientes propiedades:
(7.68) Teorema. Simetra: S T = T S y S T = T S
(7.69) Teorema. Asociatividad: (S T) V = S (T V ) y (S T) V = S (T V )
(7.70) Teorema. Idempotencia: S S = S y S S = S
(7.71) Teorema. Elemento absorbente: S U = U y S =
(7.72) Teorema. Elemento neutro: S = S y S U = S
Adems, existen propiedades relativas a la distributividad entre los operadores y :
(7.73) Teorema. Distributividad de respecto de : S (T U) = (S T) (S U)
(7.74) Teorema. Distributividad de respecto de : S (T U) = (S T) (S U)
7.5.5. Unin e interseccin de familias de conjuntos
Tanto la unin como la interseccin son operaciones simtricas, asociativas, con elemen-
to neutro y adems idempotentes. Por lo tanto cada una de ellas cumple con las propiedades
presentadas sobre la operacin en el captulo 5, para la cual fue posible denir la expresin
( x : R : E), con lo cual podemos utilizar las expresiones:
(x : R : E) (7.7)
7.6. EJERCICIOS 143
(x : R : E) (7.8)
para denotar la unin y la interseccin, respectivamente de conjuntos E[x := v] para valores de
v que satisfagan R[x := v].
Por ejemplo,
(x : 0 i < n : 5
i
, 6
i
, 7
i
)
es el conjunto formado por los valores 5
i
, 6
i
, 7
i
para todos los valores de i que satisfacen 0
i < n.
Es un ejercicio para el lector enunciar las reglas de cuanticacin dadas en el captulo 5 que
(7.7) y (7.8) satisfacen.
7.6. Ejercicios
7.6.1. Ejercicios sobre los axiomas de la aritmtica y los axiomas de orden
7.1 Demostrar la Ley de simplicacin para la multiplicacin 7.13
c ,= 0 (c a = c b a = b)
c ,= 0 (a c = b c a = b)
7.2 Demostrar (7.14) a ,= 0 (a z = a z = 1)
7.3 Demostrar (7.15) a (b c) = a b a c
7.4 Demostrar (7.16) x + a = 0 x = a
7.5 Demostrar (7.17) a = b a = b
7.6 Demostrar (7.18) (a) = a
7.7 Demostrar (7.19) 0 = 0
7.8 Demostrar (7.20) (a + b) = (a) + (b)
7.9 Demsotrar (7.21) a = (1) a
7.10 Demostrar (7.22) (a) b = a (b)
7.11 Demostrara (7.23) a (b) = (a b)
7.12 Demostrar (7.24) (a) (b) = a b
144 7. MS CUANTIFICADORES
7.13 Demostrara (7.25) a 0 = a
7.14 Demostrar (7.26) (a b) + (c d) = (a + c) (b + d)
7.15 Demostrar (7.27) a b = 0 a = 0 b = 0
7.16 Demostrar (7.36) x R
+
0 < x
7.17 Demostrar Transitividad (7.37):
(a) a < b b < c a < c
(b) a b b < c a < c
(c) a < b b c a < c
(d) a b b c a c
7.18 Demostrar Monotona (7.38): a < b a + c < b + c
7.19 Demostrar Monotona (7.39) 0 < c (a < b a c < b c
7.20 Demostrar Tricotoma (7.40): (a < b a = b a > b) (a < b a = b a > b)
7.21 Demostrar Antisimetra (7.41): a b b a a = b
7.22 Demostrar Reexividad (7.42) a a
7.23 Demostrar (7.43) a = b ( z :: z a z b)
7.6.2. Ejercicios sobre mximo y mnimo
7.24 Probar la asociatividad de min (7.46): min(min(x, y), z) = min(x, min(y, z)).
7.25 Probar Idempotencia de min (7.47): min(x, x) = x.
7.26 Probar x y min(x, y) = x (7.49). Para esto, un posible primer paso es utilizar la
siguiente propiedad: b = c b c c b.
7.27 Probar min(x, y) = xmin(x, y) = y, (7.50). La prueba se simplica si se utiliza (7.49).
7.28 Probar la dsitributividad de + sobre min, c + min(x, y) = min(c + x, c + y), (7.51),
usando la siguiente propiedad de la igualdad: a = b ( z :: z a z b)
7.29 Probar la dsitributividad de sobre min, c 0 c min(x, y) = min(c x, c y), (7.52),
usando la siguiente propiedad de la igualdad: a = b (z :: z a z b)
7.30 Probar (7.60), suponiendo que x no es variable libre en E: R[x := E] E = min(E, (max x :
R : x)).
7.31 Repetir los ejercicios anteriores para el caso del operador max.
7.32 Enunciar todas las reglas para las cuanticaciones asociadas a los operadores max y min.
7.6. EJERCICIOS 145
7.6.3. Ejercicios sobre conjuntos
7.33 Dar una descripcin en lenguaje corriente de los siguientes conjuntos. Todas las variables
dummy que aparecen son de tipo Z.
(a) x : 0 < x par.x
(b) x : 0 x : 2 x
(c) x : 0 < x : 3 x
(d) x : 0 < x ( y :: x = 3 y)
(e) z :: ( x, y : 0 x 2 y 3 : z = x
y
)
(f) x, y : 0 x 2 y 3 : x
y
#(xs n) = ( n #xs n
n > #xs #xs
)
min.(x, y) = ( x y x
x > y y
)
158 8. EL FORMALISMO BSICO
Las funciones min y
min estn ntimamente relacionadas, pero existe una diferencia sutil
entre ellas, tienen distinto tipo. La funcin
min toma un argumento estructurado, es decir toma
un argumento constitudo por dos nmeros, su tipo es:
(sqrt.x)
2
x
<
es claro que la especicacin del primer intento implica sta.
Cambios en la especicacin:
Como se vio en el ejemplo anterior, es frecuente la necesidad de modicar las especica-
ciones. En el ejemplo, la especicacin fue debilitada, es decir se opt por una especicacin
que requera menos del programa. La forma de debilitarla fue a travs de la postcondicin.
Otra forma de debilitar la especicacin es fortalecer la precondicin, es decir exigiendo que
el programa pueda funcionar slo con un conjunto ms restringido de valores. Por ejemplo, po-
dramos exigir como requisito que los argumentos para sqrt sean cuadrados perfectos (con lo
cual siempre ser posible encontrar valores exactos para las races). La especicacin entonces,
resulta:
pre : ( y : y N : y
2
= x)
post : (sqrt.x)
2
= x
Otra situacin comn es la necesidad de fortalecer la especicacin. Esto ocurre cuando el
usuario observa que necesita un programa con mejores propiedades que el que tiene, o tambin
10.4. MS EJEMPLOS 177
cuando es necesario utilizar el programa para un conjunto de datos ms amplio del que consi-
deraba inicialmente. En el ejemplo anterior, puede requerirse que el resultado sea siempre no
negativo, con lo cual se est fortaleciendo la postcondicin y la especicacin completa:
0 x
(sqrt.x)
2
x
< 0 sqrt.x
(10.2) Ejemplo.
Consideremos ahora la especicacin de una funcin que calcula la segunda mejor nota
de un curso. Supondremos que las notas de los alumnos estn almacenadas en una lista,
con lo cual el tipo de la funcin sera [Nat] Nat. Una manera simple de construir
esta especicacin es usando una especicacin auxiliar que exprese la mayor nota del
curso:
pre : true
post : maxNota.xs = (max i : 0 i < #xs : xs.i)
La especicacin de la funcin requerida es entonces:
pre : ( i, j : 0 i < j < #xs : (xs.i = xs.j))
post : segNota.xs = (max i : 0 i < #xs (xs.i = maxNota.xs) : xs.i)
La funcin maxNota es una funcin auxiliar usada para especicar la funcin segNota,
y no es en principio necesario construir un programa para ella. Durante el proceso de
construccin del programa para segNota se ver si es tambin necesario construir un
programa para la funcin auxiliar.
No deben confundirse las igualdades que aparecen en una especicacin, denotadas
con el signo =, con las deniciones del formalismo bsico, para las cuales denimos
y utilizamos el signo =.
Notemos que la precondicin de esta funcin, determina que la funcin no est denida
para listas que no contienen al menos dos elementos distintos. Es necesaria esta restric-
cin para estar seguros de que la segunda mejor nota de un curso existe y podamos
calcularla.
10.4. Ms ejemplos
Dado que no existen reglas generales para determinar las especicaciones de problemas,
inclumos a continuacin algunos ejemplos. La clave est en saber expresar los problemas plan-
teados en lenguaje corriente de manera concisa, usando el lenguaje formal.
Escribiremos el problema entre comillas. Cabe aclarar que con frecuencia, los problemas
pueden especicarse de diferentes formas, con lo cual no deben tomarse las especicaciones
que aparezcan a continuacin como las nicas posibles.
178 10. EL PROCESO DE CONSTRUCCIN DE PROGRAMAS
(10.3) Ejemplo. Dados x 0 e y > 0 enteros, calcular el cociente y el resto de la divisin
entera de x por y.
El algoritmo de la divisin entera nos asegura la existencia de un nico entero q cociente
de la divisin entera de x por y y un nico entero r resto de esta divisin. Estos nmeros
estn caracterizados por las propiedades x = q y + r y 0 r < y. Por lo tanto, una
funcin divMod : Int Int (Int, Int), que calcule la divisin entera y el resto
de la divisin entera, puede especicarse como:
pre : x 0 y > 0
post : divMod.x.y = (q, r) x = q y + r 0 r < y
(10.4) Ejemplo. Dado un nmero entero x 0, sqrtInt.x es la raz cuadrada de x.
La raz cuadrada entera de un nmero est denida como el mayor entero positivo cuyo
cuadrado es menor o igual que el nmero en cuestin. La funcin sqrtInt : Int Int
puede expresarse en lenguaje formal de la siguiente manera:
pre : 0 x
post : sqrtInt.x = (max z : 0 z z
2
x)
alternativamente, puede evitarse el cuanticador mximo de la siguiente manera:
pre : 0 x
post : 0 sqrtInt.x (sqrInt.x)
2
x x < (sqrtInt.x + 1)
2
(10.5) Ejemplo.
Sea xs una lista no vaca de enteros, m.xs es el mnimo de xs.
Usando el cuanticador min, la especicacin de m : [Int] Int es inmediata:
pre : #xs > 0
post : m.xs = (mini : 0 i < #xs : xs.i)
Otra especicacin posible se obtiene describiendo con ms detalles el mnimo:
pre : #xs > 0
post : ( i : 0 i < #xs : xs.i m.xs) ( i : 0 i < #xs : xs.i = m.xs)
(10.6) Ejemplo.
Sea xs una lista no vaca de enteros, iguales.xs determina si todos los elementos son
iguales.
Una manera de especicar la funcin iguales : [Int] Bool se obtiene al considerar
que todos los elementos de la lista son iguales si cada elemento es igual al de su derecha.
10.4. MS EJEMPLOS 179
pre : #xs > 0
post : iguales.xs = ( i : 0 i < #xs 1 : xs.i = xs.(i + 1))
Pero tambin podramos expresar que todos son iguales diciendo que cada uno de ellos
es igual a uno jo, por ejemplo, el primero (sabemos que existe, pues suponemos que
la lista es no vaca).
pre : #xs > 0
post : iguales.xs = ( i : 0 < i < #xs : xs.i = xs. 0)
(10.7) Ejemplo.
La funcin creciente : [Int] Bool toma una lista no vaca de enteros y determina
si la lista est ordenada en forma creciente..
Si una lista est ordenada en forma creciente, cada elemento de sta debe ser mayor
que el anterior.
pre : #xs > 0
post : creciente.xs = ( i : 0 < i < #xs : xs.i > xs.(i 1))
Observemos que fue necesario excluir al cero del rango de especicacin, para que el
trmino est siempre denido.
Tambin puede especicarse esta funcin expresando la relacin de desigualdad co-
rrespondiente entre cualquier par de ndices:
pre : #xs > 0
post : creciente.xs = ( i : 0 i #xs : ( j : i < j < #xs : xs.i < xs.j))
(10.8) Ejemplo. La funcin f : Int [Int] Bool determina si el k-simo elemento de
la lista xs aloja el mnimo valor de xs.
Notemos que la funcin f debe aplicarse a dos argumentos, un entero que indica una
posicin de la lista y una lista. Para que la evaluacin tenga sentido, el entero debe estar
comprendido en el rango que corresponde al tamao de la lista. Entonces, podemos
escribir:
pre : 0 k < #xs
post : f.k.xs = (xs.k = (mini : 0 i < #xs : xs.i))
o bien
pre : 0 k < #xs
post : f.k.xs = ( i : 0 i < #xs : xs.k xs.i)
180 10. EL PROCESO DE CONSTRUCCIN DE PROGRAMAS
(10.9) Ejemplo. La funcin minout : [Nat] Nat selecciona el menor natural que no est
en xs.
La funcin minout extrae el mnimo de un conjunto, ste deber especicarse dentro
del rango, por ejemplo:
pre : true
post : minout.xs = (mini : 0 i ( j : 0 j < #xs : xs.j ,= i) : i)
(10.10) Ejemplo. La funcin lmax toma una lista xs de enteros y calcula la longitud del
mximo intervalo de la forma [xs. 0, . . . , xs.k], que verica xs.i = 0 para todo 0
i < k.
Analicemos primero la funcin lmax. Si el primer elemento de la lista xs no es igual a
0, entonces no existe un intervalo de la forma [xs. 0, . . . , xs.k] con elementos nulos, con
lo cual la funcin debe devolver 0. En caso contrario, la lista xs contiene un intervalo
nulo y debemos calcular su longitud. Una especicacin posible para la funcin lmax
es la siguiente:
pre : true
post : lmax.xs = max(0, (max k : 0 k < #xs ( i : 0 i < k : xs.i = 0) : k))
Esto tambin puede escribirse usando listas en lugar del entero k:
pre : true
post : lmax.xs = max(0, (max as, bs : xs = as ++bs
( i : 0 i < #as : xs.i = 0) : #as))
(10.11) Ejemplo. Dada una lista de enteros, la funcin P determina si algn elemento de la
lista es igual a la suma de todos los anteriores a l.
La funcin P : [Int] Bool se puede especicar como:
pre : true
post : P.xs = ( i : 0 < i < #xs : xs.i = (
j : 0 j < i : xs.j))
(10.12) Ejemplo. Dado un polinomio p(x) = a
n
x
n
+a
n1
x
n1
+. . . +a
1
x+a
0
, la funcin ev
realiza la evaluacin del polinomio para un valor determinado de la variable x. Para es-
pecicar esta funcin, debemos elegir una forma adecuada de representar el polinomio.
Como un polinomio queda unvocamente determinado por sus coecientes, una posibi-
lidad es formar con stos una lista: xs = [a
0
, a
1
, . . . , a
n1
, a
n
]. Ms aun, cada lista de
reales puede pensarse como lista de coecientes de un polinomio. El polinomio nulo
se representar con la lista [0] o con una lista cuyos elementos sean todos nulos, con
esta convencin la lista vaca no representa a ningn polinomio. Podemos especicar
ev : [Real] Real Real de la siguiente manera:
10.4. MS EJEMPLOS 181
pre : #xs > 0
post : ev.xs.y = (
i : 1 i n : 2 i 1) = n
2
(11.1)
Por ejemplo, para n igual a 2 y 3 respectivamente, 11.1 establece que 1+3 = 2
2
y 1+3+5 =
3
2
, lo cual indica que P. 2 y P. 3 resultan true. Ser P.n cierto siempre?, o bien es verdera la
cuanticacin ( n : N : 0 n : P.n)?
Una forma de probar que P es cierta para todo nmero natural es demostrar que P. 0 es
cierta y que suponiendo que P es cierta para todos los naturales menores o iguales a un natural
n dado, entonces tambin es cierta P.(n + 1). Esta ltima armacin puede escribirse como:
( n : N : 0 < n : P. 0 P. 1 . . . P(n 1) P.n) (11.2)
Ahora, si ambas cosas son ciertas, podemos ver cmo construir una demostracin de P para
un nmero N dado:
La demostracin de P. 0 ya est hecha.
De la veracidad de P. 0 y P. 0 P. 1 (que no es ms que (11.2) en la instancia n := 1),
y usando Modus Ponens (3.76) conclumos que P. 1 es verdadera.
De la veracidad de P. 0 P. 1 y P. 0 P. 1 P. 2 (que no es ms que (11.2) en la
instancia n := 2), y usando Modus Ponens (3.76) conclumos que P. 2 es verdadera.
. . .
De la veracidad de P. 0 . . . P.(N 1) y P. 0 . . . P.(N 1) P.N (que no es
ms que (11.2) en la instancia n := N), y usando Modus Ponens (3.76) conclumos que
P.N es verdadera.
Por supuesto, no necesitamos hacer todo esto para demostrar que P.N es verdadera, es
suciente saber que en principio, podemos hacer esto para probarlo.
El principio de induccin matemtica, permite inferir a partir de las pruebas de P. 0 y (11.2)
que P.n es verdadera para cualquier natural n.
Consideremos de nuevo el ejemplo. Demostraremos primero P. 0 (llamado caso base).
Caso base
(
i : 1 i 0 : 2 i 1)
= neutro de + (debido a que el rango es vaco) 6.9)
0
= aritmtica)
0
2
11.2. INDUCCIN MATEMTICA 187
Demostraremos ahora el paso inductivo, suponiendo que P. 0, P. 1, .. y P.n son ciertas
demostraremos que P.(n + 1) es cierta.
Paso inductivo
(
i : 1 i n + 1 : 2 i 1)
= Separacin de trmino (6.24))
(
i : 1 i n : 2 i 1) + 2 (n + 1) 1
= Hiptesis inductiva P.n)
n
2
+ 2 (n + 1) 1
= Aritmtica )
(n + 1)
2
La prueba anterior, emplea una tcnica que se utiliza a menudo: el lado izquierdo de P(n+1)
es manipulado de forma tal de exponer P.n, es decir, hacer posible el uso de la hiptesis de
induccin P.n. Aqu, con la separacin de trmino, se puso en evidencia a P.n.
El principio de induccin se formaliza en un axioma de nuestro clculo de predicados como
sigue, donde P : N B:
(11.1) Axioma. Induccin Matemtica sobre N:
( n : N :: ( i : 0 i < n : P.i) P.n) ( n : N :: P.n).
El consecuente en el axioma 11.1 trivialmente implica el antecedente, con lo cual podemos
reescribir el axioma anterior utilizando Implicacin mutua (3.79) de la siguiente manera:
(11.2) Teorema. Induccin Matemtica sobre N:
( n : N :: ( i : 0 i < n : P.i) P.n) ( n : N :: P.n).
En general utilizaremos el axioma 11.2 en lugar del 11.1 para probar propiedades por induc-
cin, dado que este axioma es ms fcil de usar por ser el operador simtrico, mientras que
el operador no lo es.
El caso P. 0 est incluido en el axioma 11.1. Veremos ahora que al manipular el antecedente
el caso P. 0 aparece.
( n : 0 n : ( i : 0 i < n : P.i) P.n)
= Separacin de trmino 6.24)
(( i : 0 i < 0 : P.i) P. 0) ( n : 1 n : ( i : 0 i < n : P.i) P.n)
= Rango vaco 6.9)
(true P. 0) ( n : 1 n : ( i : 0 i < n : P.i) P.n)
= Neutro a izquierda de 3.72; Cambio de dummy 6.23; artimtica)
P. 0 ( n : 0 n : ( i : 0 i < n + 1 : P.i) P.(n + 1)
Entonces, podemos reescribir el axioma 11.1 de la siguiente forma, que es la forma que
generalmente se usa cuando es necesario probar propiedades mediante induccin:
188 11. INDUCCIN Y RECURSIN
(11.3) Teorema. Induccin Matemtica sobre N:
P. 0 ( n : N : ( i : 0 i n : P.i) P(n + 1)) ( n : N :: P.n).
La primera conjuncin en el axioma 11.3 es el caso base de la induccin matemtica, la
segunda conjuncin del antecedente:
( n : N : ( i : 0 i n : P.i) P(n + 1)) (11.3)
es el paso inductivo, y ( i : 0 i n : P.i) se llama hiptesis de induccin.
Para probar ( n : N :: P.n) por induccin, probamos el caso base y el paso inductivo
por separado, y luego aseguramos en lenguaje corriente, que P.n se satisface para todo nmero
natural n. La prueba del paso inductivo, se hace probando ( i : 0 i n : P.i) P(n + 1)
para un n 0 arbitrario. Ms an, ( i : 0 i n : P.i) P(n + 1) se prueba usualmente
suponiendo ( i : 0 i n : P.i) y luego probando P(n + 1).
El axioma (11.1) y los teoremas (11.2) y (11.3), describen la tcnica de induccin sobre
todos los nmeros naturales, sin embargo, la induccin puede realizarse sobre cualquier sub-
conjunto n
0
, n
0
+ 1, n
0
+ 2, . . . de N. La nica diferencia es el punto de partida, el caso base
ser P.n
0
. Reformulamos entonces el principio de induccin matemtica para estos casos del
siguiente modo:
(11.4) Teorema. Induccin matemtica sobre n
0
, n
0
+ 1, . . .:
P.n
0
( n : n
0
n : ( i : n
0
i n : P.i) P(n + 1)) ( n : n
0
n : P.n).
Veamos un ejemplo,
(11.5) Ejemplo. En este caso, queremos probar ( n : 3 n : P.n) donde
P.n : 2 n + 1 < 2
n
.
Caso base
P. 3 es 2 3 + 1 < 2
3
, lo cual es cierto.
Paso inductivo
Para un valor arbitrario n 3, probaremos P.(n + 1) usando la hiptesis de induccin P.n.
2
n+1
= aritmtica)
2 2
n
> hiptesis de induccin P.n)
2 (2 n + 1)
= aritmtica)
2 (n + 1) + 1 + 2 n 1
> aritmtica 2 n 1 > 0, ya que 3 n)
2 (n + 1) + 1
11.3. INDUCCIN MATEMTICA 189
Aqu, para probar el paso inductivo, transformamos el lado derecho de P.(n + 1) en el lado
izquierdo. En vez de esto, podramos haber transformado el lado izquierdo en el derecho o
tambin P.(n + 1) en true.
Nuestro siguiente ejemplo, concierne a los nmeros de Fibonacci. Estos nmeros son intere-
santes cuando trabajamos con induccin matemtica, pero son muy interesantes tambin por s
solos. Fueron introducidos por Leonardo Fibonacci (1202) a quien se le debe el nombre.
Los primeros 8 nmeros de Fibonacci son 0, 1, 1, 2, 3, 5, 8, 13, y a excepcin de los primeros
dos, los siguientes nmeros se consiguen sumando los dos anteriores. Los nmeros de Fibonac-
ci, se denen recursivamente del siguiente modo:
fib. 0 = 0
fib. 1 = 1
fib.(n + 2) = fib.(n + 1) + fib.n
Como ya dijimos, esta sucesin de nmeros tiene propiedades muy interesantes, algunas de
las cuales se presentan en los ejercicios. Vamos a demostrar ahora, una muy simple:
( n : 0 n : fib.n < 2
n
)
Dada la denicin de fib, parece conveniente considerar dos casos base, cuando n = 0 y
cuando n = 1. El paso inductivo podr considerarase entonces para n 2.
Caso base
fib. 0
= denicin de fib)
0
< 0 < 1)
1
= 2
0
= 1)
2
0
El caso base cuando n = 1 es similar al anterior.
Paso inductivo
Sea P.n : fib.n < 2
n
, vamos a partir de fib.(n + 2) y probaremos que es menor que 2
(n+2)
190 11. INDUCCIN Y RECURSIN
fib.(n + 2)
= denicin de fib)
fib.n + fib.(n + 1)
< hiptesis inductiva P.n)
2
n
+ fib.(n + 1)
< hiptesis inductiva P.(n + 1))
2
n
+ 2
(n+1)
< la funcin 2
x
es creciente)
2
(n+1)
+ 2
(n+1)
= propiedad de la funcin exponencial)
2
(n+2)
11.3. Ayudas para pruebas por induccin
El primer paso para probar una cuanticacin universal por induccin es escribir la frmula
de la forma
( n : n
0
n : P.n)
Esto signica identicar n
0
y tambin la propiedad a probar: P.n, la cual tiene que ser de
tipo booleano.
Por lo general, el paso inductivo
( n : n
0
n : ( i : n
0
i n : P.i) P.(n + 1))
se realiza probando ( i : n
0
i n : P.i) P.(n + 1) para un arbitrario n n
0
. Y esto
ltimo, se hace suponiendo P.n
0
, . . . , P.n y probando P.(n+1). Esta clase de prueba, a menudo
exige la manipulacin de P.(n + 1) de alguna manera.
El objetivo de manipular P.(n+1) es hacer posible el uso de las conjunciones P. 0, . . . , P.n
en la hiptesis inductiva, es decir poner en evidencia la hiptesis inductiva. Por ejemplo, en
(11.5) reescribimos 2
(n+1)
como 2 2
n
, de modo de poder usar P.n : 2 n +1 < 2
n
. Mientras
que en (11.1), obtuvimos P.n mediante separacin de trmino. En estos ejemplos pudimos
probar P.(n + 1) usando solo la hiptesis P.n, pero en otros casos necesitaremos ms de una
hiptesis inductiva para probar P.(n + 1).
11.4. Vericacin de programas
Utilizaremos el principio de induccin para comprobar que un programa (que en la progra-
macin funcional sera una denicin de funcin) satisface su especicacin. A sto se lo llama
vericacin de programas.
Tambin utilizaremos induccin para construir una denicin de funcin a partir de su es-
pecicacin. A esta tcnica se la llama derivacin de programas, y la veremos en el captulo
siguiente.
11.4. VERIFICACIN DE PROGRAMAS 191
Si bien la tcnica de vericacin de programas es muy til, ya que nos permite probar que
un programa es correcto segn su especicacin, por lo general no es una tarea trivial, por lo
que es conveniente realizarla, al menos en parte, a medida que se construye el programa. Esta
construccin conjunta de programa y demostracin tiene la ventaja adicional de que la misma
nos va guiando en la construccin del programa.
Veamos un ejemplo en el que vericamos que la funcin f : Nat Nat denida recursi-
vamente como:
f. 0 = 0
f.(i + 1) = f.i + 2 i + 1
satisface la siguiente especicacin:
pre : true
post : f.i = i
2
Primero denimos la propiedad a probar (P.n) a partir de las expresiones booleanas pre y
post. Dado que la precondicin es true, P.n resulta:
P.n : f.n = n
2
Caso base
f. 0
= denicin de f)
0
= aritmtica)
0
2
Paso inductivo
Probaremos P.(n + 1) suponiendo la hiptesis de induccin P.n:
f.(n + 1)
= denicin de f)
f.n + 2 n + 1
= hiptesis inductiva )
n
2
+ 2 n + 1
= aritmtica)
(n + 1)
2
De esta demostracin conclumos que f satisface ( n : N :: f.n = n
2
).
Veamos otro ejemplo de vericacin de programas: sea fac la funcin que calcula el facto-
rial de un nmero, que denimos recursivamente como:
fac. 0 = 1
fac.(n + 1) = (n + 1) fact.n
192 11. INDUCCIN Y RECURSIN
Vamos a probar que fact satisface la siguiente especicacin:
pre : true
post : fact.n = (
i : 1 i n : i)
A partir de esta especicacin, la propiedad a probar P.n resulta:
P.n : fact.n = (
i : 1 i n : i)
Caso base
Podemos reducirlo asi:
fact. 0 = (
i : 1 i 0 : i) = (
i : false : i) = 1
Paso inductivo
Probaremos P.(n + 1) suponiendo la hiptesis de induccin P.n:
fact.(n + 1)
= denicin de factorial)
(n + 1) fact.n
= hiptesis inductiva)
(n + 1) (
i : 1 i n : i)
= Separacin de trmino (6.24))
(
i : 1 i n + 1 : i)
Por lo tanto hemos probado que la denicin dada de fact satisface la especicacin dada.
11.5. Induccin sobre listas
El principio de induccin puede tambin aplicarse a listas. Cuando aplicamos induccin
sobre los nmeros naturales, discriminamos dos casos: cuando el nmero es 0 y cuando es de
la forma n + 1 para algn natural n. De modo similar la induccin sobre listas se basa en dos
casos: o bien la lista es vaca o bien es de la forma x xs, para algn valor x y lista xs.
Por lo tanto, para demostrar por induccin que una propiedad P.xs se cumple para cualquier
lista xs, es suciente demostrar que:
Caso base: P.[ ] se satisface, y
Paso inductivo: Si P.xs se satisface, entonces P.(x xs) vale para cualquier x.
Esto es vlido por el mismo argumento que ya hemos utilizado para induccin sobre n-
meros naturales. Sabemos por el caso base que P.[ ] se satisface, y entonces aplicando el paso
inductivo P.[x] tambin vale para cualquier x, (ya que [x] = x [ ]), nuevamente, aplicando
11.5. INDUCCIN SOBRE LISTAS 193
el paso inductivo P.[y, x] vale para cualquier x e y, (ya que [y, x] = y [x]), y as sucesiva-
mente. Entonces P.xs vale para cualquier lista nita xs. Es fcil formalizar esta prueba por
induccin sobre el tamao de la lista xs, con lo cual el principio de induccin sobre listas, es
una consecuencia directa del principio de induccin sobre los nmeros naturales.
Al igual que en la induccin sobre naturales, en la induccin sobre listas el caso base puede
ser una lista con n
0
elementos. En tal caso la hiptesis inductiva es P.xs, donde #xs n
0
. Por
ejemplo, el principio de induccin puede ser reformulado para listas con al menos un elemento
como:
Caso base: P.[x] se satisface para cualquier x, y
Paso inductivo: Si P.(x xs) se satisface, entonces P.(x
.
Aqu cuncluimos que P.xs vale para cualquier lista nita con al menos un elemento.
En el Captulo 8, enunciamos diversas propiedades sobre los operadores denidos sobre
listas sin dar una demostracin explcita. Vamos a probar ahora algunas de las propiedades
citadas.
Por ejemplo, vamos a demostrar que la concatenacin es asociativa:
xs ++(ys ++zs) = (xs ++ys) ++zs
para cada lista nita xs, ys y zs.
Si bien aparecen tres listas en esta propiedad, la demostracin se hace por induccin sobre
una de ellas: xs. Llamaremos P.xs a la propiedad a probar:
P.xs : xs ++(ys ++zs) = (xs ++ys) ++zs
Caso base:
[ ] ++(ys ++zs)
= denicin recursiva de ++)
ys ++zs
= denicin recursiva de ++)
([ ] ++ys) ++zs
Paso inductivo
Suponemos que P.xs es cierta para cualquier lista xs con #xs = n, entonces probamos
P.(x xs):
194 11. INDUCCIN Y RECURSIN
(x xs) ++(ys ++zs)
= denicin recursiva de ++)
x (xs ++(ys ++zs))
= hiptesis inductiva, pues #xs = n)
x ((xs ++ys) ++zs)
= denicin recursiva de ++)
x (xs ++ys) ++zs
= denicin recursiva de ++)
((x xs) ++ys) ++zs
Otra de las propiedades que vimos relaciona la longitud con la concatenacin:
#(xs ++ys) = #xs + #ys
para cualquier par de listas nitas xs y ys.
Haremos la prueba por induccin sobre xs, con lo cual:
P.xs : #(xs ++ys) = #xs + #ys
Caso base:
#([ ] ++ys)
= denicin recursiva de ++)
#ys
= elemento neutro de la suma)
0 + (#ys)
= denicin recursiva de #)
(#[ ]) + (#ys)
Paso inductivo
Suponemos que P.xs es cierta para cualquier lista xs con #(xs) = n, entonces probamos
P.(x xs):
#((x xs) ++ys)
= denicin recursiva de ++)
#(x (xs ++ys))
= denicin recursiva de #)
1 + (#(xs ++ys))
= hiptesis de induccin, pues #xs = n)
1 + (#xs) + (#ys)
= asociatividad de la suma y denicin recursiva de #)
(#(x xs)) + (#ys)
11.6. VERIFICACIN DE PROGRAMAS CON LISTAS 195
11.6. Vericacin de programas con listas
Utilizaremos induccin sobre listas tambin para la vericacin de programas, es decir,
probaremos que una funcin satisface cierta especicacin por induccin.
Veamos un ejemplo, la funcin map : (A B) [A] [B], la cual aplica una funcin
a cada elemento de una lista (por ejemplo, map.cuadrado.[3, 5] = [9, 25]), puede denirse
recursivamente de la siguiente manera:
map.f.[] = []
map.f.(x xs) = f.x map.f.xs
Probaremos que esta denicin satisface la siguiente especicacin:
pre : 0 i < #xs
post : (map.f.xs).i = f.(xs.i)
Primero derivamos la propiedad a probar, a partir de la especicacin dada,
P.xs : 0 i < #xs (map.f.xs).i = f.(xs.i)
Ahora, probamos que P.xs es cierta para cualquier xs por induccin sobre listas.
Caso base:
0 i < #[] (map.f.[]).i = f.([].i)
= denicin recursiva de #)
0 i < 0 (map.f.[]).i = f.([].i)
= aritmtica )
false (map.f.[]).i = f.([].i)
= 3.73 )
true
Paso inductivo
Suponemos que P.xs es cierta para cualquier lista xs con #(xs) = n, y probamos P.(xxs):
0 i < #(x xs) (map.f.(x xs)).i = f.((x xs).i)
= denicin de map)
0 i < #(x xs) (f.x map.f.xs).i = f.((x xs).i)
= aritmtica y denicin de #)
i = 0 1 i < #xs + 1 (f.x map.f.xs).i = f.((x xs).i)
= 3.76 )
(i = 0 (f.x map.f.xs).i = f.((x xs).i))
(1 i < #xs + 1 (map.f.(x xs)).i = f.((x xs).i))
Hasta ac lo que hicimos fue dividir la prueba en dos, de manera que podamos probar cada
parte de forma independiente. Tuvimos que hacer sto para poder usar la denicin recursiva
196 11. INDUCCIN Y RECURSIN
de indexar (.), la cual devuelve resultados diferentes cuando se aplica sobre 0 y sobre cualquier
natural mayor que 0.
Comenzaremos probando que el primer elemento de la conjuncin es igual a true. Para ello
supondremos que el antecedente i = 0 es cierto y probaremos el consecuente.
(f.x map.f.xs).i
= antecedente )
(f.x map.f.xs). 0
= denicin de indexar )
f.x
= denicin de indexar)
f.((x xs). 0)
= antecedente )
f.((x xs).i)
Ahora probaremos que 1 i < #xs+1 (f.xmap.f.xs).i = f.((xxs).i). Suponemos
el antedecente 1 i < #xs + 1, o equivalentemente 1 i e i < #xs + 1.
(f.x map.f.xs).i = f.((x xs).i)
= denicin de indexar, antecedente 1 i)
(map.f.xs).(i 1) = f.(xs.(i 1))
hiptesis inductiva, pues #xs = n)
0 i 1 < #xs
= aritmtica )
1 i < #xs + 1
= antecedente)
true
Hemos probado que true (f.x map.f.xs).i = f.((x xs).i), aplicamos el teorema
elemento neutro a izquierda de (3.71) para concluir (f.x map.f.xs).i = f.((x xs).i).
11.7. Ejercicios
11.1 Probar las siguientes expresiones aritmticas por induccin sobre n
a) Para n 0, (
i : 1 i n : i) = n (n + 1)/2.
b) Para n 0, (
i : 0 i < n : 2 i + 1) = n
2
.
c) Para n 0, (
i : 0 i < n : 3
i
) = (3
n
1)/2.
d) Para n 0, (
i : 0 i n : i
2
) = n (n + 1) (2 n + 1)/6.
11.2 Probar por induccin sobre n que 4
n
1 es divisible por 3 cuando n 0.
11.3 Probar por induccin sobre n que n
2
2
n
cuando n 4.
11.7. EJERCICIOS 197
11.4 Denimos la funcin f recursivamente as:
f. 0 = 0
f.(n + 1) = 2 f.n + 1
Probar por induccin que f.n = 2
n
1 cuando n 0.
11.5 Demostrar cual es el error en el siguiente razonamiento, que demuestra que un grupo
cualquiera de gatos est compuesto slo por gatos negros.
La demostracin es por induccin en el nmero de gatos de un grupo dado.
Para el caso de 0 gatos el resultado es inmediato, dado que todo gato del gru-
po es negro. Consideremos ahora un grupo de n + 1 gatos. Tomemos un gato
cualquiera del grupo. El grupo de gatos restantes tiene n gatos, y por hiptesis
inductiva son todos negros. Luego, tenemos n gatos negros y uno que no sabe-
mos an de que color es. Intercambiamos ahora el gato que sacamos con uno
del grupo y un grupo de n gatos. Por hiptesis inductiva los n gatos son negros,
pero como el que tenemos aparte tambin es negro, entonces tenemos que los
n + 1 gatos son negros.
11.6 Probar las siguientes propiedades de las operaciones sobre listas
a) (xs n) ++(xs n) = xs
b) (xs n) m = (xs (m + n)) n
c) (xs n) m = xs (m + n)
11.7 Probar las siguientes propiedades:
(xs ++ys) i = xs i si 0 i < #xs
(xs ++ys) i = ys (i #xs) si i #xs
11.8 Consideremos las deniciones de las funciones vistas en el Captulo 8:
i) hd.(x xs) = x
ii) tl.(x xs) = xs
iii)
init.[x] = [ ]
init.(x x
xs) = x (init.(x
xs))
iv)
last.[x] = x
last.(x x
xs) = last.(x
xs)
Demostrar las siguientes propiedades:
a) init.xs = xs (#xs 1)
b) init.(xs ++[x]) = xs
198 11. INDUCCIN Y RECURSIN
c) last.(xs ++[x]) = x
11.9 Probar que la siguiente denicin de la funcin split : Nat [A] ([A], [A]):
split. 0.xs = ([ ], xs)
split.(n + 1).[ ] = ([ ], [ ])
split.(n + 1).(x xs) = (x ys, zs)
[[ (ys, zs) = split.n.xs ][
satisface la especicacin:
pre : true
post : split.n.xs = (xs n, xs n)
11.10 Probar que la siguiente denicin recursiva de la funcin sum : [Int] Int:
sum.[ ] = 0
sum.(x xs) = x + sum.xs
satisface la especicacin encontrada en el captulo 10.
CAPTULO 12
Derivacin de programas
ndice del Captulo
12.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
12.2. Derivacin de funciones recursivas . . . . . . . . . . . . . . . . . . . . . . 199
12.3. Generalizacin por abstraccin . . . . . . . . . . . . . . . . . . . . . . . . 203
12.4. Modularizacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
12.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.1. Introduccin
Si bien un paso importante en la solucin de un problema es escribir una especicacin co-
rrecta que describa el problema, una vez hallada sta, es necesario manipularla adecuadamente
de modo de transformarla en la implementacin de un programa. Veremos a continuacin tc-
nicas que nos permitirn llevar a cabo este objetivo.
12.2. Derivacin de funciones recursivas
Veremos cmo obtener una denicin recursiva de una funcin a partir de especicacin
aplicando induccin.
Este tipo de derivacin de programas consiste en denir una funcin pudiendo usar para ello
los valores de la funcin aplicada a elementos con menor estructura. Por ejemplo, en el caso
de los nmeros, la funcin utilizar valores de la funcin sobre nmeros ms pequeos, y en el
caso de listas utilizar valores de la funcin sobre listas de longitud menor.
(12.1) Ejemplo. Veamos un ejemplo sencillo de derivacin. Dado un nmero natural se desea
obtener una funcin que calcule su factorial. Primero daremos la especicacin de esta
funcin (fac : Nat Nat):
199
200 12. DERIVACIN DE PROGRAMAS
pre : true
post : fac.n = (
i : 0 < i n : i)
Para hallar una denicin recursiva que satisfaga esta especicacin podemos pensar
que la especicacin de fac es una ecuacin a resolver con incgnita fac . Luego el
proceso de derivacin consistir en despejar fac. El proceso de despejar nos asegura
que si ahora reemplazamos el valor obtenido en la ecuacin original (la especicacin)
obtenemos un enunciado verdadero. Veamos cmo sera esto.
Caso base
fac. 0
= especicacin de f)
(
i : 0 < i 0 : i)
= rango vaco)
1
Paso inductivo
fac.(n + 1)
= especicacin de f)
(
i : 0 < i n + 1 : i)
= separacin de un trmino)
(
i : 0 < i n : i) (n + 1)
= hiptesis inductiva)
fac.n (n + 1)
Por lo tanto deniendo recursivamente fac como:
fac. 0 = 1
fac.(n + 1) = (n + 1) fac.n
se satisface la especicacin dada.
Adems de haber construdo un programa que satisface una especicacin hemos ob-
tenido una demostracin de que lo hace. Esta demostracin no es ms que la anterior
invirtiendo los pasos de atrs para adelante, a partir del segundo paso de la derivacin
y cambiando la justicacin especicacin de fac por denicin de fac. Veamos
otro ejemplo.
(12.2) Ejemplo. Dada una lista de enteros se desea obtener una funcin que calcule la suma
de sus elementos. Primero especicamos formalmente esta funcin y denimos su tipo:
[Int] Int.
12.2. DERIVACIN DE FUNCIONES RECURSIVAS 201
pre : true
post : sum.xs = (
i : 0 i #xs : xs.i)
A partir de esta especicacin calcularemos una denicin recursiva haciendo induc-
cin sobre la lista.
Caso base xs = [ ]
sum.[ ]
= especicacin sum)
(
i : 0 i #[ ] : [ ].i)
= denicin de#; rango vaco)
0
En esta prueba podemos ver la diferencia entre una derivacin y una vericacin. El
objetivo de la vericacin es llegar a la frmula (para el caso que se est probando),
mientras que el objetivo de la derivacin es simplicar esta frmula hasta obtener una
expresin del formalismo bsico que pueda tomarse como denicin, en este caso la
constante 0.
Consideremos ahora el paso inductivo,
Paso inductivo
sum.(x xs))
= especicacin de sum)
(
i : 0 i 1 + #xs : (x xs).i)
= separacin de un trmino)
(x xs). 0 + (
i : 1 i 1 + #xs : (x xs).i)
= cambio de variable dummy (f.i=i+1); denicin de .)
x + (
j : 0 j #xs : xs.j)
= hiptesis inductiva)
x + sum.xs
Por lo tanto, sum puede denirse recursivamente como:
sum.[ ] = 0
sum.(x xs) = x + sum.xs
202 12. DERIVACIN DE PROGRAMAS
(12.3) Ejemplo. En el captulo 10 dimos una especicacin de la funcin ev que evala un
polinomio en un valor dado. Para ello, decidimos representar a los polinomios como
listas de nmeros [a
0
, . . . , a
n
], donde cada a
i
representa un coeciente del polinomio
a
n
x
n
+ a
n1
x
n1
+ . . . + a
1
x + a
0
.
Derivaremos una denicin de esta funcin a partir de la especicacin dada:
pre : #xs > 0
post : ev.xs.y = (
i : 0 i n : 2
i
+ 1)
12.5. EJERCICIOS 209
12.2 Derivar una denicin recursiva para cada una de las especicaciones dadas de la funcin
iguales : [A] Bool, la cual determina si los elementos de una lista dada son todos
iguales entre s. Comparar los resultados obtenidos en cada caso.
a)
pre : #xs > 0
post : iguales.xs = ( i : 0 i < #xs 1 : xs.i = xs.(i + 1))
b)
pre : #xs > 0
post : iguales.xs = ( i : 0 i < #xs : xs.i = xs. 0)
c)
pre : #xs > 0
post : iguales.xs = ( i : 0 i < #xs : xs.i = last.xs)
12.3 Derivar una denicin recursiva de la funcin creciente : [Int] Bool, que dada una
lista no vaca de enteros, determina si los elementos de la lista estn ordenados en forma
creciente.
12.4 Derivar una denicin recursiva de la funcin p : [Nat] Bool, que dada una lista no
vaca de naturales, determina si algn elemento de la lista es igual a la suma de los dems
elementos de la misma.
12.5 Derivar una denicin recursiva de la funcin f : Int [Int] Bool, que determina
si el k-simo elemento de una lista dada de enteros aloja el mnimo valor de la misma.
12.6 Derivar una denicin recursiva para la funcin consec_dif : [Int] Bool, la cual
recibe una lista con al menos dos elementos y determina si para todo par de elementos
consecutivos de la lista se cumple que la diferencia entre ambos valores es igual al n-
dice de la primera posicin considerada. Por ejemplo, consec_dif.[1, 1, 2, 4, 7] = True,
mientras que consec_dif.[1, 1000, 1001] = False.
12.7 Derivar una funcin recursiva para la funcin g : [Int] Int, que toma una lista de ente-
ros y devuelve el producto de la diferencia de cada uno de sus elementos con la longitud
de la lista, satisfaciendo la siguiente especicacin:
pre : #xs > 0
post : g.xs = (
i : 0 < i < N : i)
][
(13.3) Ejemplo. Los arreglos (arrays en ingls) son estructuras de datos que proveen la ma-
yora de los lenguajes de programacin imperativos. Un arreglo puede pensarse como
una lista de tamao jo. Utilizaremos la siguiente notacin para describir un arreglo de
n+1 elementos: b[0, . . . , n]. El acceso a los elementos es similar al de listas, se realiza
mediante ndices. Por ejemplo, b[0] corresponde al primer elemento del arreglo b.
Especicaremos un programa que dado un entero no negativo n y un arreglo b[0, . . . , n],
calcula el producto de los primeros n + 1 elementos del arreglo.
[[ const n : Int;
var b : array [0 . . . n] of Int;
n 0
z :=?
z = (
i : 0 i n : b[i])
][
(13.4) Ejemplo. Por ltimo daremos la especicacin de un programa que dados una variable
entera n y un arreglo b[0, . . . , n] de enteros, ordena el arreglo de forma creciente.
[[ const n : Int;
var b : array [0 . . . n] of Int;
n 0 b = B
b :=?
perm(b, B) ( i : 0 i < n : b[i] b[i + 1])
][
donde perm es un predicado que toma dos arreglos y determina si uno es una permu-
tacin del otro. Dejamos como ejercicio la denicin de este predicado.
Antes de continuar con el desarrollo de programas, veremos algunas reglas para la correcta
interpretacin y utilizacin de tripletas de Hoare.
13.4. EL TRANSFORMADOR DE PREDICADOS WP 215
13.3. Leyes sobre tripletas
El primer teorema, conocido como ley de exclusin de milagros, expresa:
(13.5) Teorema.
P S false P false
Esta ley establece que para cualquier programa S, si se requiere que termine y que los
estados nales satisfagan false, entonces ese programa no puede ejecutarse exitosamente para
ningn estado inicial. O bien, ledo de otra manera, no existe ningn estado tal que si se ejecuta
un programa S comenzando en l se puede terminar en un estado que satisfaga false.
La expresin
P S true
indica que, cada vez que comienza en un estado que satisface P, la ejecucin de S concluye
en un estado que satisface el predicado true. Esto se interpreta diciendo que la ejecucin de S
termina cada vez que se comienza en un estado que satisface P.
Las leyes que siguen a continuacin expresan el hecho de que una precondicin puede ser
fortalecida y una postcondicin puede ser debilitada, lo cual formulamos de la siguiente manera:
(13.6) Teorema.
P S Q (P
o
P) P
o
S Q
(13.7) Teorema.
P S Q (Q Q
o
) P S Q
o
implican
P
0
P
1
S Q
0
Q
1
y P
0
P
1
S Q
0
Q
1
k : 0 k i : b [k])
usando como asignacin i, x := i + 1, e donde e es un valor desconocido.
Veremos cmo podemos obtener e a travs de un clculo, en vez de obtenerlo por tanteo.
Queremos resolver e en:
P1 i, x := i + 1, e P1
Esta tripleta de Hoare es vlida exactamente cuando P1 P1 [i, x := i + 1, e], de modo
que debemos resolver esta expresin booleana para e. Supondremos para esto el antecedente y
probaremos el consecuente:
P1 [i, x := i + 1, e]
= Denicin de P1 y Sustitucin)
e = (
k : 0 k i + 1 : b [k])
= Separacin de trmino (6.24))
e = (
k : 0 k i : b [k]) + b [i + 1]
= Suposicin de P1)
e = x + b [i + 1]
Por lo tanto, podemos usar la expresin x + b [i + 1] por e.
Veamos otro ejemplo, queremos resolver e en
_
P2 : x = (
k : i k n : b [k])
_
i, x := i 1, e P2
Para ello debemos resolver e en P2 P2 [i, x := i 1, e].
P2 [i, x := i 1, e]
= Denicin de P2 Sustitucin)
e = (
k : i 1 k n : b [k])
= Separacin de trmino (6.24))
e = b [i 1] + (
k : i k n : b [k])
= Suposicin de P2)
e = b [i 1] + x
Con lo cual podemos usar la expresin b [i 1] + x por e.
Existe otra forma de resolver e en
13.7. SENTENCIAS Y EXPRESIONES CONDICIONALES 219
P P [i, x := f, e]
donde f es una expresin en i. Observemos que el consecuente tiene la misma estructura que
el antecedente, salvo que, mientras el antecedente tiene variables como i y x el consecuente tiene
expresiones. Por lo tanto, si podemos manipular el antecedente P hasta que tenga la estructura
necesaria que contenga expresiones en donde se encontraban i y x, habremos identicado e.
Veamos un ejemplo, consideremos la funcin F denida como:
F. 0 = 0
F. 1 = 1
F(2 n) = F.n para n par y mayor que 0
F(2 n + 1) = F.n + F(n + 1) para n impar y mayor que 0
Consideremos el predicado
P : C = a F.n + b F(n + 1)
y supongamos que queremos encontrar d y e de modo que satisfagan
P n > 0 even.n n, a, b := n 2, d, e P
Lo cual exige resolver d y e en P n > 0even.n P [n, a, b := n 2, d, e]. Esto ltimo
puede reescribirse de acuerdo al teorema 3.64 (p q r p (q r)) de la siguiente
manera:
n > 0 even.n (P P [n, a, b := n 2, d, e])
Supondremos el antecedente n > 0 even.n. Para simplicar los clculos, llamemos k =
n 2. Trabajaremos sobre P con el objeto de llegar a una expresin con la misma estructura
pero con n 2 en vez de n.
P
= Denicin de P)
C = a F.n + b F(n + 1)
= Suposicin de even.n por lo tanto n = 2 k)
C = a F(2 k) + b F(2 k + 1)
= Denicin de F dos veces)
C = a F.k + b (F.k + F.(k + 1))
= Aritmtica)
C = (a + b) F.k + b F.(k + 1)
= Denicin de k; Sustitucin)
P [n, a, b := n 2, a + b, b]
Por lo tanto, hemos resuelto d y e, y la asignacin deseada es n, a, b := n 2, a + b, b que
puede escribirse como n, a := n 2, a + b.
220 13. LA PROGRAMACIN IMPERATIVA
13.7. Sentencias y expresiones condicionales
La sentencia condicional, llamada IF, tiene la siguiente forma en muchos lenguajes de
programacin imperativos:
IF : if B then S1 else S2 (13.2)
donde B es una expresin booleana y S1 y S2 son sentencias.
La sentencia condicional se ejecuta de la siguiente forma:
Si B es true entonces se ejecuta S1, de lo contrario se ejecuta S2.
Supongamos que queremos ejecutar una sentencia condicional que comenz en un estado
que satisface el predicado Q para luego satisfacer el predicado R, es decir : Q IF R.
Qu debe ocurrir para poder garantizar que Q IF R es vlida? Si B es true, entonces
debe ejecutarse S1, y por lo tanto la ejecucin de S1 debe vericar R. Por otra parte si B es
false debe ejecutarse S2, y la ejecucin de S2 debe vericar R.
Escribiremos esto de modo de ilustrar la sentencia condicional IF y adems indicar que B
y B pueden ser supuestos antes de S1 y S2 respectivamente:
Q
if B then Q B S1 R
else Q B S2 R
R
Por lo tanto, tenemos el siguiente:
(13.11) Mtodo de prueba. Mtodo de Prueba para IF: Para probar Q IF R, es su-
ciente con probar Q B S1 R y Q B S2 R.
(13.12) Ejemplo. Queremos probar:
true
if B then skip else x, y := y, x
x y
Usamos el mtodo de prueba 13.11, es decir debemos probar:
true x y skip x y
true (x y) x, y := y, x x y
cuya demostracin es inmediata.
13.7. SENTENCIAS Y EXPRESIONES CONDICIONALES 221
13.7.1. La sentencia alternativa
La sentencia if B then S1 else S2 puede escribirse en la notacin de guardas como la
sentencia alternativa siguiente:
if B S1
[] B S2
z es el mximo entre x e y
Otro ejemplo, aqu presentamos un algoritmo que ordena las variables w, x, y, z intercam-
biando repetidamente sus valores, sera mucho ms engorroso escribir este programa sin no-
determinismo:
222 13. LA PROGRAMACIN IMPERATIVA
while (w x y z) do
if w > x w, x := x, w
[] x > y x, y := y, x
[] y > x y, z := z, y
w x y z
Para probar Q IFG R es suciente probar que: (i) cuando comienza la ejecucin, al
menos una guarda es true y (ii) cada comando verica R.
(13.13) Mtodo de prueba. Mtodo de prueba para IFG: Pra probar Q IFG R es
suciente probar que:
(a) Q B1 B2 B3,
(b) Q B1 S1 R,
(c) Q B2 S2 R y
(d) Q B3 S3 R.
Este mtodo se extiende obviamente a comandos alternativos con ms de tres o con menos
de tres comandos guarda.
Veamos ahora algunos ejemplos. Supongamos que queremos demostrar la correccin del
siguiente programa:
x = 0
if true x := 1
[] true x := 1
x = 1 x = 1
Utilizando el mtodo de prueba 13.13, debemos probar:
(a) x = 0 true true,
(b) x = 0 true x := 1 x = 1 x = 1,
(c) x = 0 true x := 1 x = 1 x = 1.
El apartado (a) sigue inmediatamente del teorema P true true.
Para demostrar (b), tenemos que demostrar que
x = 0 true (x = 1 x = 1)[x := 1]
Comenzaremos con el consecuente:
13.7. SENTENCIAS Y EXPRESIONES CONDICIONALES 223
(x = 1 x = 1)[x := 1]
= Sustitucin)
1 = 1 1 = 1
= (1 = 1) true y adems true es absorbente para )
true
Por apartado (a) x = 0 true)
x = 0
= true neutro de )
x = 0 true
El apartado (c) se resuelve en forma similar.
Veamos otra situacin. Queremos determinar S de modo que se satisfaga:
true S z = max(x, y)
Vamos a expresar el mximo entre x e y en una forma que sea ms fcil de manipular:
z = max(x, y) (z = x z = y) z x z y
Esto signica que una candidato posible para el mximo es el valor de x, por tanto una
instruccin posible a ejecutar es z := x, veamos entonces cul es la precondicin ms dbil
para la sentencia de asignacin z := x respecto del predicado z = max(x, y):
((z = x z = y) z x z y)[z := x]
= Sustitucin)
(x = x x = y) x x x y)
= (x = x) true y adems (x x) true)
(true x = y) true x y)
= true neutro de y absorbente de )
x y
Lo cual demuestra que si elegimos el predicado x y, la tripleta x y z := x z = max(x, y)
es vlida.
Por simetra tambin ser vlida y x z := y z = max(x, y).
Adems, observando que
x y y x
aritmtica)
x y y > x)
= tercero excluido p p true)
true
es fcil ver que true x y y x
Por lo tanto y utilizando el mtodo de prueba 13.13, podemos armar que la sentencia S
puede ser:
224 13. LA PROGRAMACIN IMPERATIVA
if x y z := x
[] y x z := y
Ahora presentamos otra situacin, supongamos que debemos demostrar la correccin del
siguiente programa:
[[var x, y : Int
true
x, y := y y, x x
if x y x := x y
[] y x y := y x
x 0 y 0
Observemos que aparecen dos sentencias concatenadas, la primera es una asignacin y la
segunda es una sentencia alternativa, por lo tanto, debemos encontra un predicado intermedio Q
que sea la poscondicin de la asignacin y a su vez la precondicin de la alternativa. Comenza-
mos buscando entonces la precondicin ms dbil respecto de la poscondicin x 0 y 0.
Utilizando el mtodo de prueba 13.13, debemos encontar Q tal que:
(a) Q x y y x,
(b) Q x y x := x y x 0 y 0,
(c) Q y x y := y x x 0 y 0.
El apartado (a) sigue inmediatamente del teorema Q true true. Los apartados (b) y
(c) imponen condiciones sobre el predicado Q. Comencemos con (b): el mtodo de prueba para
asiganciones, exige que Q satisfaga:
Q x y (x 0 y 0)[x := x y],
lo cual equivale a calcular primero la precondicin ms dbil respecto de la asignacin
x := x y
(x 0 y 0)[x := x y]
= sustitucin)
x y 0 y 0
= aritmtica)
x y y 0
Observemos que si suponemos el antecedente Q x y, en la ltima lnea, obtenemos
13.8. EXPRESIONES CONDICIONALES 225
x y y 0
= suponiendo el antecedente x y true)
true y 0
= true neutro de )
y 0
As conseguimos que Q y 0.
En forma similar y de acuerdo al apartado (c), Q debe satisfacer Q x 0. Resumiendo,
hemos obtenido que Q es cualquier expresin booleana que implique x 0 y 0. Podemos
considerar obviamente a sta como Q.
Ahora falta ver que true Q[y, x := x x, y y].
Para esto recordemos que true p p.
Probemos entonces Q[y, x := x x, y y]:
(x 0 y 0)[y, x := x x, y y]
= sustitucin)
x x 0 y y 0
= teoremas de orden )
true
13.8. Expresiones condicionales
As como tenemos sentencias condicionales if B then S1 else S2, tambin tenemos las
expresiones condicionales:
if B then E1 else E2 (13.3)
donde B es una expresin booleana, y E1 y E2 son expresiones del mismo tipo. Evaluar
una expresin como sta da como resultado el valor de E1 si B es true y el valor de E2 en otro
caso.
Veamos ejemplos de expresiones condicionales: aqu consideramos un estado en el cual
x = 5, y = 4, b = true y c = false, en ese estado tenemos:
(a) (if x = y then x else x + 2) = 7
(b) (if x ,= y then x else x + 2) = 5
(c) (if b c then x y else x + 2) = 20
(d) (if b c then x y else x + 2) = 7
(e) (if b then c b else b c) = true
(f) (if c then c b else b c) = false
226 13. LA PROGRAMACIN IMPERATIVA
Existen dos reglas para manipular expresiones if-then-else:
(13.14) Axioma. Condicional: B ((if B then E1 else E2) = E1)
(13.15) Axioma. Condicional: B ((if B then E1 else E2) = E2)
13.9. Ejercicios
13.6 Dar el signicado operativo de las tripletas: true S true y false S true
13.7 Deducir a partir de las reglas dadas en la Seccin 13.2 que
P
0
S Q
0
y P
1
S Q
1
implican
P
0
P
1
S Q
0
Q
1
y P
0
P
1
S Q
0
Q
1
x ,= 1
b)
true
if x y skip
[] x y x, y := y, x
x y
c)
[[var a, b : bool
true
if a b a := a
[] a b b := b
a b
13.21 Encontrar el predicado P ms dbil que haga correcto el siguiente programa:
[[var x : Int
P
x := x + 1
if x > 0 x := x 1
[] x < 0 x := x + 2
[] x = 1 skip
x 1
13.22 Probar que
P
if B
0
S
0
; S
[] B
1
S
1
; S
Q
230 13. LA PROGRAMACIN IMPERATIVA
equivale a
P
if B
0
S
0
[] B
1
S
1
S
Q
CAPTULO 14
Denicin de un lenguaje de programacin
imperativo
ndice del Captulo
14.1. La sentencia skip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
14.2. La sentencia abort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
14.3. La sentencia de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . 232
14.4. Concatenacin o composicin . . . . . . . . . . . . . . . . . . . . . . . . . 234
14.5. La sentencia alternativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
14.6. Repeticin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
14.6.1. Terminacin de ciclos . . . . . . . . . . . . . . . . . . . . . . . . . 241
14.7. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
14.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
En este captulo veremos una serie de sentencias o comandos que denen un lenguaje de
programacin imperativo bsico. Las sentencias sern denidas utilizando tripletas de Hoare.
Para cada sentencia S y predicado Q, describiremos primero el resultado deseado de la ejecucin
de S, mediante el predicado wp.S.Q(el cual representa el conjunto de todos los estados, tal que,
si S se ejecuta en alguno de ellos su ejecucin termina en un estado que satisface Q).
14.1. La sentencia skip
La primera sentencia que veremos es la sentencia skip. La ejecucin de skip no produ-
ce cambios sobre los estados de las variables. La utilidad de este comando se entender ms
adelante, pero podemos adelantar que ser como una sentencia neutra para los programas.
231
232 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
Queremos caracterizar la sentencia skip usando tripletas de Hoare. Comencemos estudiando
wp.skip.Q. Claramente el predicado ms dbil P tal que P skip Q es vlida es Q, pues
lo mnimo necesario para asegurar el estado nal Q cuando no se hace nada es tener Q como
estado inicial. Por lo tanto,
wp.skip.Q Q
Esto podra inducirnos a caracterizar skip usando la tripleta Q skip Q como axioma,
pero como ya hemos visto que es posible fortalecer la precondicin, daremos una caracteriza-
cin ms general de este comando:
(14.1) Axioma.
P skip Q P Q
Por ejemplo, la tripleta x 1 skip x 0 es vlida pues x 1 x 0.
14.2. La sentencia abort
La sentencia abort est especicada por:
(14.2) Axioma.
P abort Q P false
Despus de esta regla, cmo se ejecuta abort?. La expresin de arriba establece que este
comando nunca debe ejecutarse, ya que solo puede hacerse en un estado que satisface false, y
no existe tal estado. Si la ejecucin de un programa alcanza alguna vez un punto en el que abort
deba ejecutarse, entonces el programa completo es un error, y termina prematuramente.
En trminos de la precondicin ms dbil, tenemos que
wp.abort.Q false
14.3. La sentencia de asignacin
Cualquier cambio de estado que ocurra durante la ejecucin de un programa se debe a la
sentencia de asignacin. Una sentencia de asignacin tiene la forma x := E, donde x denota
una variable o varias variables del programa separadas con coma y E denota una de expresin
o varias expresiones, tambin separadas con coma (donde la cantidad de variables es igual a la
de expresiones).
Dado un predicado Q, lo mnimo que se requiere para que Qsea verdadera luego de ejecutar
x := E es el predicado Q[x := E]. Es decir,
wp.(x := E).Q Q[x := E]
Entonces, para que la terna P x := E Q sea correcta, el predicado P debe ser ms
fuerte que Q[x := E]. De esta manera, la asignacin est especicada por:
14.3. LA SENTENCIA DE ASIGNACIN 233
(14.3) Axioma.
P x := E Q P Q[x := E]
Asumiremos que en E solo se admitirn expresiones bien denidas, sino habra que agregar
un predicado def.E (que sea verdadero solo si E est bien denida) en el consecuente de la
implicacin: P x := E Q P def.E Q[x := E].
Notemos que el smobolo := utilizado en el programa x := E no es el mismo que el usado
en el predicado Q[x := E], la primera expresin es una sentencia vlida del lenguaje de pro-
gramacin que estamos deniendo, mientras que en la segunda expresin, := es una operacin
sintctica que se aplica a expresiones lgicas, que llamamos sustitucin.
(14.4) Ejemplo. Probaremos que la tripleta x 3 x := x + 1 x 0 es vlida.
utilizando el axioma 14.3.
x 3 x := x + 1 x 0
= axioma 14.3 )
x 3 (x 0)[x := x + 1]
= aplicacin de sustitucin )
x 3 x + 1 0
= aritmtica)
x 3 x 1
= aritmtica)
x 3 1 x < 3 x 3
= deb/fort a))
true
Por lo tanto, hemos probado que el programa x := x + 1 satisface la especicacin
dada.
(14.5) Ejemplo. Tambin utilizaremos el axioma 14.3 para obtener programas correctos segn
la especicacin. Por ejemplo, encontraremos e tal que se satisfaga true x, y :=
x + 1, e y = x + 1
Segn el axioma 14.3, para que el programa sea correcto E debe cumplir:
true (y = x + 1) [x, y := x + 1, e]
= Elemento neutro a izquierda de )
(y = x + 1) [x, y := x + 1, e]
= aplicacin de sustitucin)
e = x + 1 + 1
= aritmtica)
e = x + 2
Es decir, cualquier expresin e que sea equivalente a x + 2 es vlida; en particular,
podemos tomar e = x + 2.
234 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
(14.6) Ejemplo. Por ltimo, hallaremos un programa que satisfaga x = A y = B x, y :=
e, f x = 2 B y = 2 A.
Segn 14.3, las expresiones e y f deben cumplir:
x = A y = B (x = 2 B y = 2 A) [x, y := e, f]
Suponemos cierto el antedecente x = A y = B y partimos del consecuente,
(x = 2 B y = 2 A) [x, y := e, f]
= aplicacin de sustitucin)
e = 2 B f = 2 A
= antecedente)
e = 2 y f = 2 x
14.4. Concatenacin o composicin
La concatenacin permite escribir secuencias de sentencias. La ejecucin de dos sentencias
S y T, una a continuacin de la otra se indicar separando las mismas con punto y coma (S; T),
o una debajo de la otra, siendo la de la izquierda (o la de arriba) la primera que se ejecuta.
Para demostrar P S; T Q, hay que encontrar un predicado intermedio R que sirva como
poscondicin de S y precondicin de T, es decir:
(14.7) Axioma.
P S; T Q (R :: P S R R T Q)
La precondicin ms dbil de la concatenacin S; T con respecto al predicado Q, se obtiene
tomando primero la precondicin ms dbil de T con respecto a Q y luego la precondicin ms
dbil de S con respecto a este ltimo predicado. Es decir,
wp.(S; T).Q wp.S.(wp.T.Q)
(14.8) Ejemplo. Como ejemplo probaremos que el programa dado a continuacin es correcto,
probando la siguiente tripleta:
[[ var a, b : Boolean;
(a A) (b B)
a := a b
b := a b
a := a b
(a B) (b A)
][
Para ello anotaremos el programa con los siguientes predicados intermedios:
14.4. CONCATENACIN O COMPOSICIN 235
[[ var a, b : Boolean;
P : (a A) (b B)
a := a b
R
2
: wp.(b := a b).R
1
b := a b
R
1
: wp.(a := a b).Q
a := a b
Q : (a B) (b A)
][
y probaremos que las tripletas:
P a := a b R
2
R
2
b := a b R
1
R
1
a := a b Q
son vlidas. Las letras P, Q, R
1
y R
2
fueron agregadas para hacer ms legible la nota-
cin.
Por el axioma de asignacin 14.3 podemos concluir que las dos ltimas tripletas son
ciertas. Con lo cual, solo debemos probar la primera tripleta. Hallamos primero R
1
y
R
2
:
((a B) (b A))[a := a b]
= aplicacin de sustitucin)
(a b B) (b A)
((a b B) (b A))[b := a b]
= aplicacin de sustitucin)
(a a b B) (a b A)
= elemento neutro de )
(b B) (a b A)
La primera tripleta es cierta si:
(a A) (b B) ((b B) (a b A))[a := a b]
= aplicacin de sustitucin)
(a A) (b B) (b B) (a b b A)
= elemento neutro de )
(a A) (b B) (b B) (a A)
= reexividad de )
true
236 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
14.5. La sentencia alternativa
Los lenguajes de programacin imperativos usualmente proveen una notacin para el co-
mando llamado condicional o sentencia if, el cual permite la ejecucin de sentencias depen-
diendo del estado de las variables del programa. Un ejemplo del comando condicional es el
siguiente, escrito es Pascal:
if x 0 then z := x else z := x (14.1)
La ejecucin de este comando almacena el valor absoluto de x en z. Si x 0 entonces se
ejecuta la primer sentencia z := x, sino se ejecuta la segunda sentencia z := x.
En la notacin que utilizaremos en nuestro lenguaje de programacin, este comando se
escribe como:
if x 0 z := x
[] (x 0) z := x
x y
debemos probar:
238 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
i) true x y x > y
ii) true x y skip x y true x > y x, y := y, x x y
La demostracin de i) es inmediata, dado que (x y x > y) true. Para demostrar
ii) probaremos cada una de las tripletas:
true x y skip x y
= axioma 14.1)
true x y x y
= elemento neutro de ; reexividad de )
true
true x > y x, y := y, x x y
= axioma 14.3)
true x > y (x y)[x, y := y, x]
= elemento neutro de ; aplicacin de sustitucin )
x > y y x
= aritmtica)
x > y x > y x = y
= deb/fort a))
true
(14.11) Ejemplo. Veamos otra situacin, donde queremos determinar un programa que satisfa-
ga la siguiente especicacin:
true z :=? z = max(x, y)
Vamos a utilizar la siguiente denicin de mximo entre dos nmeros:
z = max(x, y) (z = x z = y) z x z y
Esto signica que un posible valor para el mximo es el valor de x, por tanto una
sentencia posible a ejecutar es z := x. Veamos entonces cul es la precondicin ms
dbil para la sentencia de asignacin z := x respecto del predicado z = max(x, y):
((z = x z = y) z x z y)[z := x]
= Sustitucin)
(x = x x = y) x x x y)
= def. de igualdad; (x x) true)
(true x = y) true x y)
= elemento neutro de ; absorbente de )
x y
14.6. REPETICIN 239
Lo cual demuestra que si elegimos el predicado x y, la tripleta x y z :=
x z = max(x, y) es vlida.
Con el mismo razonamiento tambin ser vlida y x z := y z = max(x, y).
Adems, observando que
x y y x
= aritmtica)
x = y x > y (x > y)
= tercero excluido; elemento absorvente de )
true
es fcil ver que true x y y x
Hasta aqu hemos probado:
i) true x y y x
ii) x y z := x z = max(x, y) y x z := y z = max(x, y)
Por lo tanto hemos encontrado un programa que es correcto respecto a la especicacin
dada:
if x y z := x
[] y x z := y
14.6. Repeticin
La lista de comandos se completa con una sentencia que permitir la ejecucin repetida de
una accin (ciclo o bucle). La sintaxis es :
DO : do B
0
S
0
[] B
1
S
1
.
.
.
[] B
n
S
n
od
donde para todo 0 i n, B
i
es una expresin booleana (tambin llamada guarda) y S
i
una
sentencia.
El ciclo funciona de la siguinete manera: mientras exista alguna guarda equivalente a true,
se elige alguna (de alguna manera) y se ejecuta la sentencia correspondiente; luego vuelven a
evaluarse las guardas. Esto se repite hasta que ninguna guarda sea true. Si desde el comienzo
del ciclo, ninguna guarda es true, el ciclo completo equivale a un skip.
240 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
Luego de ejecutarse el ciclo todas las guardas son falsas. Llamaremos iteracin de un ciclo
al proceso que consiste en elegir una guarda y ejecutar su sentencia correspondiente.
Esta sentencia tambin puede ser no-determinista; si ms de una guarda es verdadera solo
se elige una por iteracin.
La especicacin de esta sentencia es la siguiente:
(14.12) Axioma.
P do B
0
S
0
Q (P B
0
B
1
. . . B
n
Q)
[] B
1
S
1
P B
0
S
0
P
.
.
. P B
1
S
1
P
[] B
n
S
n
.
.
.
od P B
n
S
n
P
el ciclo termina
Es decir que para probar que P DO Q es correcta, es suciente con probar:
i) P B
0
B
1
. . . B
n
Q
ii) P B
i
S
i
P para 0 i n
iii) el ciclo termina
La implicacin P B
0
B
1
. . . B
n
Q asegura el cumplimiento de la post-
condicin cuando el ciclo termina, es decir cuando ninguna guarda es verdadera; mientras que
P B
i
S
i
P asegura que ejecutar S
i
cuando se satisface P B
i
conduce a un estado
que satisface P, lo cual es necesario para que tenga sentido volver a evaluar las guardas. La
condicin el ciclo termina es necesaria porque de otra manera el programa podra ejecutarse
indenidamente. Ms adelante formalizaremos esta condicin.
Asumiremos que las expresiones B
i
estn todas bien denidas.
Un predicado P que satisface P B
i
S
i
P se llama invariante. Encontrar invarian-
tes es la dicultad mayor a la hora de escribir bucles. Existen varias tcnicas para determinar
invariantes, por ahora solo veremos el funcionamiento de los ciclos suponiendo que ya se ha
determinado el invariante.
(14.13) Ejemplo. Utilizaremos el axioma 14.12 para probar la siguiente tripleta de Hoare.
P : 0 i n z = i x
do i ,= n i, z := i + 1, z + x od
P i = n
14.6. REPETICIN 241
Este programa calcula el producto de valores de las variables x y n y lo guarda en z. El
invariante propuesto para el bucle es el predicado P.
Probaremos primero el punto i),
P (i ,= n) P i = n
= denicin de ,= ; doble negacin)
P i = n P i = n
= reexividad de )
true
Ahora probamos el punto ii),
P i ,= n i, z := i + 1, z + x P
= axioma 14.3 )
P i ,= n P[i, z := i + 1, z + x]
= denicin de P; aplicacin de sistitucin)
0 i n z = i x i ,= n 0 i + 1 n z + x = (i + 1) x
= aritmtica )
0 i n 1 z = i x 1 i n 1 z = i x
= aritmtica )
0 i n 1 z = i x (i = 1 0 i n 1) z = i x
= deb/fort e) )
true
La demostracin formal de que el ciclo termina la veremos a continuacin, antes po-
demos ver fcilmente que esta condicin se cumple observando los valores que va
tomando la variable i, sta toma un valor no negativo antes de la ejecucin del ciclo y
aumenta uno en cada iteracin, hasta alcanzar el valor n, con lo cual la guarda se evala
falsa.
14.6.1. Terminacin de ciclos
Para probar que un ciclo termina se debe encontrar una funcin t : Estados Int que dado
un estado de las variables del programa provea una cota superior del nmero de iteraciones que
falten realizarse. Llameremos a t funcin cota. Podemos asegurarnos que t es una funcin cota si
t decrece en una unidad en cada iteracin y si a medida que se realiza una iteracin la condicin
t > 0 se mantiene. Escribimos sto formalmente de la siguiente manera:
Un ciclo termina si existe una funcin cota t tal que:
i) P (B
0
B
1
. . . B
n
) t 0
ii) P B
i
t = T S
i
t < T para 0 i n.
242 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
La condicin i) asegura que mientras alguna guarda es verdadera, la funcin cota es no
negativa; o bien, ledo al revs, si la funcin cota se hace negativa, entonces ninguna guarda es
verdadera (puesto que P es el invariante y es siempre verdadero).
La condicin ii) asegura que la funcin cota decrece luego de la ejecucin de cualquier S
i
.
De esta manera, en algn momento la cota ser negativa y por lo explicado ms arriba el ciclo
habr terminado.
En el ejemplo anterior una posible eleccin para la funcin cota es t = n i. Para hallar
esta funcin tuvimos en cuenta que el programa termina cuando i alcanza el valor n y que
inicialmente i n y aumenta uno en cada iteracin.
La prueba formal de que el ciclo termina es la siguiente:
Prueba de i):
0 i n z = i x i ,= n
= aritmtica)
0 i i n z = i x i ,= n
deb/fort b) )
i n
= aritmtica)
n i 0
Prueba de ii):
P i ,= n t = T i, z := i + 1, z + x t < T
= axioma 14.3)
P i ,= n t = T (t < T)[i, z := i + 1, z + x]
= denicin de t; sustitucin)
P i ,= n n i = T n (i + 1) < T
Para continuar la prueba suponemos cierto el antecedente y demostramos el consecuente:
n (i + 1) < T
= aritmtica; antecedente n i = T)
n i 1 < n i
= aritmtica)
true
14.7. Ejemplos
En esta seccin veremos algunos ejemplos de correccin de ciclos en contextos ms gene-
rales, por ejemplo donde se inicializan las variables antes de comenzar el ciclo.
Las derivaciones de programas que contienen ciclos se basan en el clculo invariantes. Por
simplicidad solo haremos vericaciones de programas que contienen ciclos, en lugar de deriva-
ciones.
14.7. EJEMPLOS 243
(14.14) Ejemplo. Probaremos que el siguiente programa es correcto respecto a la especica-
cin dada.
[[ const n : Integer;
var s : Integer;
b : array[0 . . . n] of Integer;
n 0
i, s := 1, b[0]
do i n i, s := i + 1, s + b[i] od
s = (
i : 0 k n : b[k])
][
Comenzaremos proponiendo un invariante P, es decir, un predicado que sea cierto lue-
go de cada iteracin del ciclo. Utilizaremos este predicado para anotar el programa con
un predicado intermedio que sirva como postcondicin de la sentencia i, s := 1, b[0] y
precondicin del ciclo.
[[ const n : Integer;
var s : Integer;
b : array[0 . . . n] of Integer;
n 0
i, s := 1, b[0]
P
do i n i, s := i + 1, s + b[i] od
s = (+i : 0 k < n + 1 : b[k])
][
Las variables que cambian de estado en cada iteracin son i y s, la primera toma valores
dentro del rango 1, . . . , n+1 y la variables s acumula siempre la suma de los primeros
i elementos del arreglo. Por lo tanto, proponemos el invariante: 1 i n + 1 s =
(+k : 0 k < i : b[k]).
Para probar que la tripleta es cierta utilizaremos el axioma 14.7 y probaremos que:
1) n 0 i, s := 1, b[0] P
2) P do i n i, s := i + 1, s + b[i] ods = (+i : 0 k < n + 1 : b[k])
El punto 1) es muy sencillo y lo dejamos como ejercicio. Para probar el punto 2) debe-
mos demostrar los siguientes items:
i) P (i n) s = (+i : 0 k n : b[k])
ii) P i n i, s := i + 1, s + b[i] P
iii) Existe una funcin t tal que:
244 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
a) P i n t 0
b) P i n t = T i, s := i + 1, s + b[i] t < T
Prueba de i):
1 i n + 1 s = (+k : 0 k < i : b[k]) (i n)
= aritmtica )
1 i n + 1 s = (+k : 0 k < i : b[k]) i > n
= aritmtica)
i = n + 1 s = (+k : 0 k < i : b[k])
regla de sustitucin; deb/fort b) )
s = (+k : 0 k < n + 1 : b[k])
Prueba de ii):
P i n i, s := i + 1, s + b[i] P
= axioma 14.3 )
P i n P[i, s := i + 1, s + b[i]]
= denicin de P; sustitucin)
1 i n + 1 s = (+k : 0 k < i : b[k]) i n
1 i + 1 n + 1 s + b[i] = (+k : 0 k < i + 1 : b[k])
= aritmtica; separacin de un trmino)
1 i n s = (+k : 0 k < i : b[k])
0 i n s + b[i] = b[i] + (+k : 0 k < i : b[k])
= aritmtica; separacin de un trmino)
1 i n s = (+k : 0 k < i : b[k])
(i = 0 1 i n) s = (+k : 0 k < i : b[k])
= deb/fort e))
true
Para la prueba de iii) proponemos la funcin cota t = n i, la demostracin es similar a la
del ejemplo anterior y la dejamos como ejercicio.
(14.15) Ejemplo. Por ltimo veremos la correccin del siguiente ciclo que calcula el mximo
comn divisor entre dos nmeros enteros positivos:
[[ var x, y : Integer
P : x > 0 y > 0 mcd.x.y = mcd.X.Y
do x > y x := x y
[] y > x y := y x
od
x = mcd.X.Y
][
Recordemos las siguientes propiedades de mcd:
14.7. EJEMPLOS 245
1) mcd.x.x = x
2) x > y mcd.x.y = mcd.(x y).y
3) y > x mcd.x.y = mcd.x.(y x)
Primero probaremos que la postcondicin se satisface al terminar el ciclo y que P es
un invariante, es decir:
i) P (x > y) (y > x) x = mcd.X.Y
ii) P x > y x := x y P
iii) P y > x y := y x P
Prueba de i):
P (x > y) (y > x)
= aritmtica)
P x = y
= denicin de P; regla de sustitucin)
x > 0 x > 0 mcd.x.x = mcd.X.Y
deb/fort b))
mcd.x.x = mcd.X.Y
= Propiedad 1))
x = mcd.X.Y
Prueba de ii):
P x > y x := x y P
= axioma 14.3)
P x > y P[x := x y]
= denicin de P; sustitucin)
x > 0 y > 0 mcd.x.y = mcd.X.Y x > y
x y > 0 y > 0 mcd.(x y).y = mcd.X.Y
= aritmtica; propiedad 2))
x > 0 x > 0 mcd.(x y).y = mcd.X.Y x > y
x > y y > 0 mcd.(x y).y = mcd.X.Y
= deb/fort b))
true
La prueba de iii) es similar a ii).
Tomaremos como funcin cota t = x + y, entonces debemos probar que t decrece en
cada iteracin y que mientras se ejecuta el ciclo t > 0, es decir:
iv) P x > y t = T x := x y t < T
246 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
v) P y > x t = T y := y x t < T
vi) P x > y t > 0
vii) P y > x t > 0
La prueba de que el ciclo termina se deja como ejercicio.
14.8. Ejercicios
14.1 Demostrar que las siguientes tripletas son vlidas:
a)
[[var x, y : Integer
x > 0 y > 0
skip
x > 0
][
b)
[[var x, y : Integer
x > 0 y > 0
skip
y 0
][
c)
[[var x, y : Boolean;
x y
skip
x y
][
14.2 Demostrar que las siguientes tripletas no son vlidas:
a)
[[var x, y : Integer;
x > 0 y > 0
skip
x = 1
][
b)
[[var x, y : Integer;
x > 0 y > 0
skip
y x
][
14.8. EJERCICIOS 247
c)
[[var x, y : Boolean;
x y
skip
x y
][
14.3 Determinar la precondicin ms dbil P en cada caso:
a) P x := x + 1 x > 0
b) P x := x x x > 0
c) P x := x + 1 x = x + 1
d) P x := E x = E
e) P x, y := x + 1, y 1 x + y > 0
f) P x, y := y + 1, x 1 x > 0
g) P a := a b a b
h) P x := x + 1; x := x + 1 x > 0.
i) P x := x , y; y := x , y; x := x , y (x X) (y Y).
j) P x := x + 1; skip x
2
1 = 0.
14.4 Determinar el predicado Q ms fuerte para que el programa sea correcto en cada caso:
a) x = 10 x := x + 1 Q
b) x 10 x := x 10 Q
c) x
2
> 45 x := x + 1 Q
d) 0 x < 10 x := x
2
Q
14.5 Demostrar que la siguiente tripleta es vlida: x = A y = B x := x y; y := x +
y; x := x y x = B y = A
14.6 Calcular la expresin e que haga vlida la tripleta en cada caso:
a) A = q b + r q := e; r := r b A = q b + r.
b) true y := e; x := x div 2 2 x = y.
c) x y + p q = N x := x p; q := e x y + p q = N.
14.7 Recordemos que los nmeros de Fibonacci F.i estn dados por F. 0 = 0, F. 1 = 1 y
F.n = F.(n 1) + F.(n 2) para n 2. Sea P : n > 0 a = F.n b = F.(n 1),
calcular las expresiones e y f que hagan vlida la tripleta:
P n, a, b := n + 1, e, f P
248 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
14.8 Demostrar que los siguientes programas son correctos, donde x, y : Integer y a, b :
Boolean.
a)
true
if x 1 x := x + 1
[] x 1 x := x 1
x ,= 1
b)
true
if x y skip
[] x y x, y := y, x
x y
c)
true
if a b a := a
[] a b b := b
a b
14.9 Encontrar el predicado P ms dbil que haga correcto el siguiente programa:
P
x := x + 1
if x > 0 x := x 1
[] x < 0 x := x + 2
[] x = 1 skip
x 1
14.10 Probar que las siguientes tripletas son equivalentes:
P P
if B
0
S
0
; S if B
0
S
0
[] B
1
S
1
; S [] B
1
S
1
Q S
Q
14.8. EJERCICIOS 249
14.11 Suponiendo que el programa de la izquierda es correcto, demostrar que el de la derecha
tambin lo es. Esto signica que se puede lograr que el if sea determinstico (solo una
guarda verdadera).
P P
if B
0
S
0
if B
0
B
1
S
0
[] B
1
S
1
[] B
1
S
1
Q Q
14.12 Demostrar que todo ciclo con ms de una guarda puede reescribirse como un ciclo con
una sola guarda:
Probar que el bucle
do B
0
S
0
[] B
1
S
1
od
puede reescribirse como
do B
0
B
1
if B
0
S
0
[] B
1
S
1
od
Este resultado es til, pues no todos los lenguajes de programacin admiten ciclos con
varias guardas.
14.13 Tomando como invariante P : x n y = 2
x
y como funcin cota t : n x probar que
el siguiente programa es correcto:
[[ var x, y, n : Integer
n 0
x, y := 0, 1
do x ,= n x, y := x + 1, y + y od
y = 2
n
][
14.14 Probar que el siguiente programa es correcto tomando como invariante P : x 0y n
y como funcin cota t : x + 2 (n y).
250 14. DEFINICIN DE UN LENGUAJE DE PROGRAMACIN IMPERATIVO
[[ var x, y, n : Integer
n 0
x, y := 0, 0
do x ,= 0 x := x 1
[] y ,= n x, y := x + 1, y + 1
od
x = 0 y = n
][
14.15 Probar la correccin del siguiente bucle, tomando P : 1 k nb = fib.(k 1) c =
fib.k y t : n k.
[[ var k, b, c : Integer;
n > 0
k, b, c := 1, 0, 1
do k ,= n k, b, c := k + 1, c, b + c od
c = fib.n
][
donde fib es la funcin de Fibonacci. Explicar el propsito del programa.
14.16 Probar la correccin del siguiente bucle, tomando P : 0 i n + 1 ( j : 0 j <
i : x = b[j]) y funcin cota t : n i.
[[ const n : Integer;
var i, x : Integer;
b : array[0 . . . n] of Integer;
n 0
i := 0
do i n x ,= b[i] i := i + 1 od
(0 i n x = b[i]) (i = n + 1 ( j : 0 j n : x = b[j]))
][
Explicar el propsito del programa.
APNDICE A
Axiomas y Teoremas
ndice del Captulo
A.1. Teoremas del Clculo Proposicional . . . . . . . . . . . . . . . . . . . . . 251
A.2. Leyes Generales de la Cuanticacin . . . . . . . . . . . . . . . . . . . . 254
A.3. Teoremas del Clculo de Predicados . . . . . . . . . . . . . . . . . . . . . 255
A.4. Ms cuanticadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
A.1. Teoremas del Clculo Proposicional
La equivalencia
(3.1) Asociatividad de : ((p q) r) (p (q r))
(3.2) Conmutatividad (o simetra) de : p q q p
(3.3) Neutro de : true p p
(3.4) true
(3.5) Reexividad de : p p
La negacin, discrepancia, y false
(3.8) Denicin de false: false true
(3.9) Negacin y equivalencia: (p q) p q
(3.10) Denicin de ,: p , q (p q)
(3.11) p q p q
(3.12) Doble negacin: p p
(3.13) Negacin de false: false true
(3.14) (p , q) p q
(3.15) p p false
(3.16) Conmutatividad de ,: (p , q) (q , p)
251
252 A. AXIOMAS Y TEOREMAS
(3.17) Asociatividad de ,: ((p , q) , r) (p , (q , r))
(3.18) Asociatividad mutua: ((p , q) r) (p , (q r))
(3.19) Intercambiabilidad: p , q r p q , r
La disyuncin
(3.24) Asociatividad de : (p q) r p (q r)
(3.25) Conmutatividad de : p q q p
(3.26) Idempotencia: p p p
(3.27) Distributividad de respecto de : p (q r) (p q) (p r)
(3.28) Tercero excludo: p p true
(3.29) Elemento neutro de : p false p
(3.30) Distributividad de respecto de : p (q r) (p q) (p r)
(3.31) p q p q p
(3.32) Elemento absorbente de : p true true
La conjuncin
(3.35) Regla dorada: p q p q p q
(3.36) Asociatividad de : p (q r) (p q) r
(3.37) Conmutatividad de : p q q p
(3.38) Idempotencia de : p p p
(3.39) Neutro de : p true p
(3.40) Elemento absorbente de : p false false
(3.41) Distributividad de sobre : p (q r) (p q) (p r)
(3.42) Contradiccin: p p false
(3.43) Absorcin: a) p (p q) p
b) p (p q) p
(3.44) Absorcin: a) p (p q) p q
b) p (p q) p q
(3.45) Distributividad de con respecto a : p (q r) (p q) (p r)
(3.46) Distributividad de con respecto a : p (q r) (p q) (p r)
(3.47) Leyes de Morgan a) (p q) p q
b) (p q) p q
(3.48) p q p q p
(3.49) p (q r) p q p r p
(3.50) p (q p) p q
(3.51) Reemplazo: (p q) (r p) (p q) (r q)
A.1. TEOREMAS DEL CLCULO PROPOSICIONAL 253
(3.52) Denicin alternativa de : p q (p q) (p q)
(3.53) O exclusivo: p , q (p q) (p q)
La implicacin
(3.56) Denicin de implicacin: p q p q q
(3.57) Denicin de consecuencia: p q p q p
(3.58) Denicin alternativa de implicacin: p q p q
(3.59) Denicin alternativa de implicacin: p q p q p
(3.60) Contrarrecproco: p q q p
(3.61) p (q r) p q p r
(3.62) Distributividad de respecto de : p (q r) p q p r
(3.63) p (q r) (p q) (p r)
(3.64) Traslacin: p q r p (q r)
(3.65) p (p q) p q
(3.66) p (q p) p
(3.67) p (p q) true
(3.68) p (q p) q p
(3.69) p q p q p q
(3.70) Reexividad de : p p true
(3.71) Elemento absorbente a derecha de : p true true
(3.72) Elemento neutro a izquierda de : true p p
(3.73) p false p
(3.74) false p true
(3.75) Debilitamiento o fortalecimiento a) p p q
b) p q p
c) p q p q
d) p (q r) p q
e) p q p (q r)
(3.76) Modus Ponens: p (p q) q
(3.77) (p r) (q r) (p q r)
(3.78) (p r) (p r) r
(3.79) Implicacin mutua: (p q) (q p) p q
(3.80) Antisimetra: (p q) (q p) (p q)
(3.81) Transitividad: a) (p q) (q r) (p r)
b) (p q) (q r) (p r)
c) (p q) (q r) (p r)
254 A. AXIOMAS Y TEOREMAS
La Regla de leibniz como axioma
(3.82) (e = f) E [z := e] = E [z := f]
(3.84) Reglas de Sustitucin: a) (e = f) E [z := e] (e = f) E [z := f]
b) (e = f) E [z := e] (e = f) E [z := f]
c) q (e = f) E [z := e] q (e = f) E [z := f]
(3.85) Reemplazo por true : a) p E [z := p] p E [z := true]
b) q p E [z := p] q p E [z := true]
(3.86) Reemplazo por false a) E [z := p] p E [z := false] p
b) E [z := p] q p E [z := false] q p
(3.87) Reemplazo por true: p E [z := p] p E [z := true]
(3.88) Reemplazo por false: p E [z := p] p E [z := false]
(3.89) Shannon: E [z := p] (p E [z := true]) (p E [z := false])
(4.1) p (q p)
(4.2) Monotona del : (p q) (p r q r)
(4.3) Monotona del : (p q) (p r q r)
A.2. Leyes Generales de la Cuanticacin
Para un operador simtrico y asociativo, con elemento neutro u.
(6.9) Rango vaco: (i : false : T) = u
(6.10) Rango unitario: Si i no es una variable libre en la expresin N, entonces (i : i = N : T) =
T [i := N]
(6.12) Distributividad: Si el operador es distributivo a izquierda con respecto a y se cumple
que el rango de especicacin es no vaco o el elemento neutro del operador existe y es
absorbente para , entonces (i : R : x T) = x (i : R : T).
Anlogamente 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
(6.13) Particin de rango: Si p p = p o R S = false,
(i : R S : T) = (i : R : T) (i : S : T)
(6.15) Particin de rango: (i : R S : P) (i : R S : P) = (i : R : P) (i : S : P) .
(??) Particin de rango generalizada: Si el operador es idempotente:
(i : (j : S.i.j : R.i.j) : T.i) = (i, j : S.i.j R.i.j : T.i)
(6.17) Regla del trmino: (i : R : T G) = (i : R : T) (i : R : G)
(6.18) Regla del trmino constante: Si el trmino de la cuanticacin es constantemente igual a
C, la variable cuanticada i no aparece en C, es idempotente y R ,= , entonces
(i : R : C) = C
(6.19) Regla de anidado: Si R es independiente de j,
(i, j : R.i S.i.j : T.i.j) = (i : R.i : (j : S.i.j : T.i.j))
A.3. TEOREMAS DEL CLCULO DE PREDICADOS 255
(6.20) Regla de intercambio de variables dummy: Si V.j FV.R = y V.i FV.Q = ,
entonces (i : R : (j : Q : T)) = (j : Q(i : R : T))
(6.21) Regla de cambio de variable dummy: Si V.j (FV.R FV.T) = , entonces pueden
renombrarse las variables. (i : R : T) = (j : R[i := j] : T [i := j])
(6.23) Regla del cambio de variable dummy:
Si f es una funcin biyectiva denida sobre R y V.j (V F.R V F.T) =
(i : R : T) = (j : R[i := f.j] : T [i := f.j])
(6.24) Separacin de un trmino:
a) (i : 0 i < n + 1 : T.i) = (i : 0 i < n : T.i) T [i := n]
b) (i : 0 i < n + 1 : T.i) = T [i := 0] (i : 0 < i < n + 1 : T.i)
A.3. Teoremas del Clculo de Predicados
Cuanticacin Universal
(5.1) Traslacin: ( i : R.i : T.i) ( i : : R.i T.i)
(5.2) Traslacin: a) ( x : R : P) ( x :: R P)
b) ( x : R : P) ( x :: R P R)
c) ( x : R : P) ( x :: R P P)
(5.3) Traslacin: a) ( x : Q R : P) ( x : Q : R P)
b) ( x : Q R : P) ( x : Q : R P)
c) ( x : Q R : P) ( x : Q : R P R)
d) ( x : Q R : P) ( x : Q : R P P)
(5.4) Suponiendo que x no es variable libre en P, se tiene que
( x : R : P) P ( x :: R)
(5.5) Distributividad de respecto de : Suponiendo que x no es una variable libre en P, vale
( x :: R) (( x : R : P Q) P ( x : R : Q))
(5.6) ( x : R : true) true
(5.7) ( x : R : P Q) (( x : R : P) ( x : R : Q))
(5.8) Debilitamiento y fortalecimiento de rango: ( x : Q R : P) ( x : Q : P)
(5.9) Debilitamiento y fortalecimiento de trmino: ( x : R : P Q) ( x : R : P)
(5.10) Monotona de : ( x : R : Q P) (( x : R : Q) ( x : R : P))
(5.11) Instanciacin: ( x :: P) P[x := E]
(5.12) P es un teorema si y slo si ( x :: P) es un teorema.
Cuanticacin Existencial
(5.13) De Morgan Generalizado: ( x : R : P) ( x : R : P)
256 A. AXIOMAS Y TEOREMAS
(5.14) Formas alternativas de De Morgan Generalizado: a) ( x : R : P) ( x : R : P)
b) ( x : R : P) ( x : R : P)
c) ( x : R : P) ( x : R : P)
(5.15) Traslacin para : ( x : R : P) ( x :: R P)
(5.16) Traslacin para : ( x : Q R : P) ( x : Q : R P)
(5.17) Suponiendo que x no es variable libre en P, se tiene que ( x : R : P) P ( x :: R)
(5.18) Distributividad de respecto de : Suponiendo que x no es una variable libre en P, vale
( x :: R) (( x : R : P Q) P ( x : R : Q))
(5.19) ( x : R : false) false
(5.20) Debilitamiento y fortalecimiento de rango: ( x : R : P) ( x : Q R : P)
(5.21) Debilitamiento y fortalecimiento de trmino: ( x : R : P) ( x : R : P Q)
(5.22) Monotona de : ( x : R : Q P) (( x : R : Q) ( x : R : P))
(5.23) Introduccin de : P[x := E] ( x :: P)
(5.24) Intercambio de cuanticadores: Suponiendo que y no es variable libre en R y x no es
variable libre en Q vale: ( x : R : ( y : Q : P)) ( y : Q : ( x : R : P))
(5.25) Metateorema del testigo: Suponiendo que x no es variable libre en P, Q y R, entonces:
( x : R : P) Q es un teorema si y slo si (R P)[x := x] Q es un teorema.
A.4. Ms cuanticadores
(7.1) Propiedad conmutativa de la suma y el producto:
x + y = y + x x y = y x
(7.2) Propiedad asociativa de la suma y el producto:
x + (y + z) = (x + y) + z x (y z) = (x y) z
(7.3) Existencia de elementos neutros: Existen dos nmeros reales diferentes 0 y 1, tales que:
x + 0 = 0 + x = 0 x 1 = 1 x = x
(7.4) Existencia del opuesto: para cada nmero real x existe un nmero real a y que denomina-
mos opuesto de x, tal que x + a = a + x = 0, o equivalentemente:
( x : R :: ( a : R :: a + x = x + a = 0)).
(7.5) Existencia del recproco: para cada nmero real x tal que x ,= 0, existe un nmero real b y
que denominamos recproco de x, tal que x b = b x = 1, o equivalentemente:
( x : R : x ,= 0 : ( b : R :: b x = x b = 1)).
(7.6) Propiedad distributiva:
x (y + z) = x y + x z
(7.7) Ley cancelativa de la suma:
a + b = a + c b = c
(7.9) a 0 = 0
A.4. MS CUANTIFICADORES 257
(7.11) Posibilidad de sustraccin: Dados a y b existe uno y slo un y tal que a + y = b. Este y
se designa como b a.:
(7.12) b a = b + (a)
(7.13) Ley de simplicacin para la multiplicacin:
c ,= 0 (c a = c b a = b)
c ,= 0 (a c = b c a = b)
(7.14) a ,= 0 (a z = a z = 1)
(7.16) x + a = 0 x = a
(7.17) a = b a = b
(7.18) (a) = a
(7.19) 0 = 0
(7.20) (a + b) = (a) + (b)
(7.21) a = (1) a
(7.22) (a) b = a (b)
(7.23) a (b) = (a b)
(7.24) (a) (b) = a b
(7.25) a 0 = a
(7.26) (a b) + (c d) = (a + c) (b + d)
(7.27) a b = 0 a = 0 b = 0
(7.15) a (b c) = a b a c
(7.28) x R
+
y R
+
x + y R
+
(7.29) x R
+
y R
+
x y R
+
(7.30) 0 / R
+
(7.31) x ,= 0 (x R
+
((x) R
+
)
(7.32) (<) x < y y x R
+
(7.33) (>) x > y x y R
+
(7.34) () x y x = y x < y
(7.35) () x y x = y x > y
(7.36) x R
+
0 < x
(7.37) Transitividad:
a < b b < c a < c
a b b < c a < c
a < b b c a < c
a b b c a c
(7.38) Monotona: a < b a + c < b + c
(7.39) Monotona: 0 < c (a < b a c < b c)
258 A. AXIOMAS Y TEOREMAS
(7.40) Tricotoma: (a < b a = b a > b) (a < b a = b a > b)
(7.41) Antisimetra: a b b a a = b
(7.42) Reexividad: a a
(7.43) a = b ( z :: z a z b)
(7.45) Simetra:
max(x, y) = max(y, x)
min(x, y) = min(y, x)
(7.46) Asociatividad:
max(max(x, y), z) = max(x, max(y, z))
min(min(x, y), z) = min(x, min(y, z))
(7.47) Idempotencia:
max(x, x) = x
min(x, x) = x
(7.48)
max(x, y) x max(x, y) y
min(x, y) x min(x, y) y
(7.49)
x y max(x, y) = x
x y min(x, y) = x
(7.50)
max(x, y) = x max(x, y) = y
min(x, y) = x min(x, y) = y
(7.51) Distributividad de + respecto de max y min:
c + max(x, y) = max(c + x, c + y)
c + min(x, y) = min(c + x, c + y)
(7.52) Distributividad de respecto de max y min:
c 0 c max(x, y) = max(c x, c y)
c 0 c min(x, y) = min(c x, c y)
(7.53) Distributividad de respecto de max y min:
c 0 c max(x, y) = min(c x, c y)
c 0 c min(x, y) = max(c x, c y)
(7.54) Distributividad de + sobre min: Suponiendo que x no es variable libre en E:
( x :: R) E + (minx : R : P) = (minx : R : E + P)
(7.55) Distributividad de + sobre max: Suponiendo que x no es variable libre en E:
( x :: R) E + (max x : R : P) = (max x : R : E + P)
(7.56) Distributividad de sobre min: Suponiendo que x no es variable libre en E:
( x :: R) E 0 E (minx : R : P) = (minx : R : E P)
(7.57) Distributividad de sobre max: Suponiendo que x no es variable libre en E:
A.4. MS CUANTIFICADORES 259
( x :: R) E 0 E (max x : R : P) = (max x : R : E P)
(7.58) Distributividad de min sobre max: Suponiendo que x no es variable libre en E:
min(E, (max x : R : P)) = (max x : R : min(E, P))
(7.59) Distributividad de max sobre min: Suponiendo que x no es variable libre en E:
max(E, (minx : R : P)) = (minx : R : max(E, P))
(7.60) Suponiendo que x no es variable libre en E:
R[x := E] E = max(E, (minx : R : x))
R[x := E] E = min(E, (max x : R : x))
(7.61) Pertenencia entre conjuntos, suponiendo que x no es libre en E:
F x : R : E = ( x : R : F = E)
(7.62) Extensionalidad:
S = T ( x :: x S x T)
(7.63) Suponiendo que y no es libre en R, ni en E:
x : R : E = y : ( x : R : y = E)
(7.65) Cardinalidad:
#S = (
i : x S : 1)
(7.66) Unin:
v S T v S v T
(7.67) Interseccin:
v S T v S v T
(7.68) Simetra:
S T = T S y S T = T S
(7.69) Asociatividad:
(S T) V = S (T V )
(S T) V = S (T V )
(7.70) Idempotencia:
S S = S y S S = S
(7.71) Elemento absorbente:
S U = U y S =
(7.72) Elemento neutro:
S = S y S U = S
(7.73) Distributividad de respecto de :
S (T U) = (S T) (S U)
(7.74) Distributividad de respecto de :
S (T U) = (S T) (S U)
260 A. AXIOMAS Y TEOREMAS