Lectura Semana 1
Lectura Semana 1
Lectura Semana 1
Introducción 5
1
Cartilla Herramientas de Lógica Computacional
3.2. Sustitución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3. Sustitución y variables ocultas . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.4. La sustitución como regla de inferencia . . . . . . . . . . . . . . . . . . . . 43
3.5. Igualdad y sustitución. Regla de Leibniz . . . . . . . . . . . . . . . . . . . 44
3.6. Sistemas deductivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.6.1. El sistema deductivo que usaremos en nuestro curso . . . . . . . . . 47
3.7. Propiedades a evaluar en los conectivos lógicos . . . . . . . . . . . . . . . . 49
3.7.1. Asociatividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.7.2. Conmutatividad (Simetrı́a) . . . . . . . . . . . . . . . . . . . . . . . 49
3.7.3. Reflexividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.7.4. Distributividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.7.5. Identidad (o elemento neutro) . . . . . . . . . . . . . . . . . . . . . 51
3.7.6. Elemento absorvente (cero) . . . . . . . . . . . . . . . . . . . . . . 52
3.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5. Métodos de Demostración 85
5.1. Forma abreviada en la prueba de implicaciones . . . . . . . . . . . . . . . . 85
2
Cartilla Herramientas de Lógica Computacional
3
Cartilla Herramientas de Lógica Computacional
Bibliografı́a 159
4
Introducción
Este libro constituye una introducción a los conceptos formales que cimientan la ela-
boración de demostraciones matemáticas. Con una frase tan corta como la anterior, se
pretende indicar que se describen técnicas y conceptos fundamentales que facilitarán la
formalización de argumentos y el entrenamiento en razonamiento deductivo.
La segunda mitad del siglo XX significó entre otras cosas, un periodo de tiempo donde
la computación y las tecnologı́as de información ocuparon un papel preponderante, que
muy seguramente no tendrá marcha atrás. Con ello, se estableció la Ciencia de la Compu-
tación como disciplina académica, entendiendo por esta el conjunto de bases teóricas de la
computación y los sistemas computacionales. Y en esta área, el papel principal lo han ocu-
pado ciertas ramas de las matemáticas donde no tienen cabida nociones de “cercanı́a”,
“suavidad” o “continuidad” que son claves en el estudio del Cálculo Infinitesimal y el
Análisis Matemático. Estas ramas constituyen lo que hoy en dı́a se agrupa bajo el nombre
de Matemáticas Discretas y en la actualidad se considera que una formación adecuada
en matemáticas discretas es indispensable para cualquier matemático y para cualquier
estudioso de las ciencias de la computación.
Entre estos tres aspectos mencionados en el párrafo anterior, los dos primeros consti-
tuyen la mayor parte de la formación matemática en la enseñanza primaria y secun-
daria. El tercero constituye el aspecto menos explorado y en el cual la formación de
muchos estudiantes es bastante . Debido a esto, las instituciones de enseñanza supe-
rior han diseñado cursos para suplir llenar estas carencias, de acuerdo a la carrera o
especialidad escogida por el estudiante. El común denominador de los mismos reside
en estudiar fundamentos de lógica formal (como bibliografı́a, podemos citar los libros
[Fer90, Góm98, Bal00, Ari09, Gri94, Gri98]).
5
Cartilla Herramientas de Lógica Computacional
6
Capı́tulo 1: Introducción a la lógica simbólica: Expresiones booleanas
La lógica simbólica surgió como una manera de analizar los razonamientos escritos en
lenguaje natural. Los operadores que se describirán en este capı́tulo fueron pensados
como contrapartidas formales de operadores del lenguaje. Si se tiene cierto cuidado puede
traducirse una proposición escrita en lenguaje natural en una expresión booleana.
Esta traducción nos permitirá dos cosas: por un lado resolver ambiguedades del lenguaje
natural, por otro manipular y analizar las expresiones booleanas ası́ obtenidas usando
reglas que serán introducidas en el próximo capı́tulo. Como veremos luego, las reglas
lógicas ofrecen una alternativa efectiva para razonamientos expresados en el lenguaje
corriente.
En este capı́tulo trabajaremos sobre las expresiones booleanas, cuyo nombre se debe a
George Boole (1815–1864), quien describió gran parte del material que veremos en los
primeros dos capı́tulos en su clásico libro The laws of thought (“Las leyes del pensamien-
to”) escrito en el siglo XIX. Podrı́amos considerar dicho libro como la primera referencia
escrita de la lógica simbólica y la aproximación de usar reglas de cálculo para determinar
la validez de argumentos lógicos. Es de mencionar que no hacemos mención histórica de la
aproximación a la lógica y el razonamiento usados en la Edad Antigua y la Edad Media;
el lector interesado en datos históricos adicionales y diversos enfoques puede consultar
textos como [Ari09] y [EJF03].
Las expresiones booleanas son utilizadas con frecuencia en distintos lenguajes de progra-
mación, por lo tanto el material de éste capı́tulo será familiar para aquellos que tengan
alguna noción de Pascal, C, Java o algún otro lenguaje. Veremos cómo expresar frases en
español a través de expresiones booleanas.
7
Cartilla Herramientas de Lógica Computacional Sintaxis y evaluación de expresiones booleanas
Comenzaremos describiendo los operadores unarios, es decir aquellos que actúan sobre
un operando solamente. Una forma de hacer esto es enumerando todas las funciones del
conjunto {True, False} en el conjunto {True, False}. Aquellas funciones que asumen
valores en el conjunto {True, False} se conocen como funciones booleanas.
Si consideramos las funciones booleanas de un argumento definidas sobre el conjunto
{True, False}, entonces tenemos un total de cuatro funciones como aparecen en la si-
guiente tabla. Hay dos que aparecen “sin nombre”; aunque estas podrán expresarse en
términos de las que si tienen nombre (¿ Cómo?).
La tabla anterior es conocida como Tabla de verdad. Las entradas en la tabla de verdad
tienen el significado siguiente: si p es una variable booleana, la primer columna se reserva
para p y sus distintos estados, mientras que en cada una de las siguientes aparece el
resultado de la aplicación de cada función sobre cada uno de los estados. Por ejemplo, en
la segunda columna de la derecha vemos que id(True) = True y id(False) = False, esta
función recibe el nombre de función idéntica o también identidad. También observamos
en la primera y la última columna dos funciones constantes que no tienen asignado un
nombre especı́fico. La función simbolizada con ¬ se llama negación y corresponde al
operador unario not, por ejemplo notaremos ¬False = True.
Si ahora consideramos todas las funciones booleanas de dos argumentos, es decir definidas
sobre el conjunto
se obtienen dieciseis posibles funciones. Para representarlas en una tabla, se puede abreviar
True con el número 1 y False con el número 0. Dependiendo del texto que se use, a veces
se usa esta convención o simplemente se escriben las letras V,F (o T,F según el idioma).
A continuación mostramos las tablas de los 16 operadores booleanos. Las dos primeras
columnas representan las combinaciones de valores que pueden tomar dos variables boo-
leanas. Por ejemplo, la primera fila, al indicar un 1 1, se está contemplando el caso donde
la primera variable vale 1 (True) y la segunda variable vale 0 (False). En las columnas
donde el nombre de los operadores es conocido, colocamos el sı́mbolo que corresponde;
8
Cartilla Herramientas de Lógica Computacional Sintaxis y evaluación de expresiones booleanas
cuando hay mas de una alternativa de sı́mbolo para un operador particular, se indica
arriba una alternativa.
A nivel de escritura por ejemplo, si se tuviera una variable booleana b y otra c que
representan las dos primeras columnas, la aplicación de las funciones correspondientes a
la segunda y tercer columna a la derecha (después de la división) se denota b ∨ c y b ⇐ c,
respectivamente.
En el siguiente apartado se describen esas funciones y en próximas secciones se indicará su
significado, se mostrarán textos de la vida cotideana donde dichos operadores aparecen y
se hablará de sus propiedades a nivel sintáctico.
⇔ xor
= 6=
∨ ⇐ ⇒ ≡ ∧ nand 6≡ nor
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
A continuación daremos un detalle de cada uno de los conectivos binarios más conocidos.
9
Cartilla Herramientas de Lógica Computacional Proposiciones y traducción de textos en lenguaje nat
Es claro, que se trata de dos oraciones diferentes, pero ambas tienen el mismo significado,
por lo tanto lo que ellas afirman es considerado una proposición.
10
Cartilla Herramientas de Lógica Computacional Proposiciones y traducción de textos en lenguaje nat
1.1 Observación. La palabra “pero” se traduce como una conjunción, puesto que afir-
ma ambas componentes. Por otro lado la disyunción usada es inclusiva, ya que podrı́a
haber defendido la felicidad de su madre la propia o ambas.
11
Cartilla Herramientas de Lógica Computacional Proposiciones y traducción de textos en lenguaje nat
Es importante notar que no siempre la palabra “y” representa una conjunción, como es
el caso de la siguiente frase:
aquı́ la palabra “y” se usa para expresar una relación entre Joyce y Picasso.
La palabra usual que corresponde a la disyunción es “o”, también la variante “o bien”.
El caso de la disyunción es más complejo que los anteriores, dado que existen en el
lenguaje dos tipos de disyunciones, la llamada inclusiva y la exclusiva. Básicamente ambos
tipos difieren cuando las proposiciones intervinientes son ambas verdaderas. La disyunción
inclusiva considera a este caso como verdadero. Por ejemplo:
Para ser emperador hay que tener el apoyo de la nobleza o del pueblo
donde se interpreta que el consejero no puede pertenecer simultáneamente a las dos clase
sociales. Utilizaremos para este caso el operador discrepancia que simbolizamos como 6≡,
por tanto si llamamos
12
Cartilla Herramientas de Lógica Computacional Proposiciones y traducción de textos en lenguaje nat
Para la lógica clásica que presentamos aquı́, la frase anterior es verdadera (mirando la
tabla de verdad del operador ⇒), pues ambos antecedente y consecuente son falsos, lo
cual hace verdadera a la proposición.
Normalmente se usa una implicación con un consecuente falso como una manera de negar
el antecedente. Por ejemplo, decir
es una manera sarcástica de decir que la economı́a no mejoró con los ajustes.
Veamos este ejemplo:
13
Cartilla Herramientas de Lógica Computacional Proposiciones y traducción de textos en lenguaje nat
p : Vacuno a mi hijo
q : Mi hijo contrae el sarampión
La proposición (1.4) asegura que vacunar es condición suficiente para no contraer el sa-
rampión, nada dice acerca de aquellos niños que no son vacunados
Otro ejemplo donde aparece la idea de necesidad lógica es:
Para que Juan crezca sano, es necesario que tome la sopa (1.5)
La proposición (1.5) establece que tomar la sopa es condición necesaria para que Juan
crezca sano, pero no garantiza que si Juan se toma la sopa crecerá sano. Si formulamos
esta proposición en términos de si . . . entonces. . . , resulta
p : f es biyectiva
q : f es inyectiva
r : f es sobreyectiva
14
Cartilla Herramientas de Lógica Computacional Proposiciones y traducción de textos en lenguaje nat
tener un lugar secundario en los libros de lógica. Nosotros no seguiremos esa tradición,
dado que el uso de la lógica en el desarrollo de programas, la equivalencia tiene un rol
fundamental. Como último ejemplo de la inadecuación del lenguaje para parafrasear la
equivalencia, presentamos la frase (verdadera en lenguaje corriente) acerca de las capaci-
dades de Juan.
Una vez presentados todos los operadores lógicos, se tienen unas reglas de precedencia en-
tre ellos, lo cual permitirá eliminar algunos paréntesis en expresiones booleanas y abreviar
ası́ la escritura:
1.2 Definición. Los operadores lógicos tendrán la precedencia que se indica a conti-
nuación, los números señalan la jerarquı́a entre ellos, el primero corresponde a la más
alta, y los siguientes siguen en orden. Cuando dos operadores aparezcan con el mismo
orden de jerarquı́a significa que tienen la misma precedencia respecto de los demás:
1. operador =
2. operador ¬
3. operadores ∧ y ∨
15
Cartilla Herramientas de Lógica Computacional Uso de Tablas de verdad
4. operadores ⇒y ⇐
5. operadores ≡ y 6≡
Las tablas de verdad serán útiles entre otras cosas para evaluar expresiones booleanas en
cualquier estado. Por ejemplo, la evaluación de la expresión
p ∧ ¬q ⇒ ¬p
en el estado {(p, True) , (q, True)} se calcula ası́: si q es verdadera, de acuerdo a la tabla
del operador ¬, ¬q es falsa, admás cuando uno de los argumentos es falso (en este caso ¬q),
el resultado de la aplicación del operador ∧, es falso. Por último, la columna de la tabla
correspondiente al operador ⇒, nos dice que si el primer argumento es falso, el resultado
es verdadero independientemente del valor del segundo argumento. Observemos que las
operaciones fueron realizadas de acuerdo a las reglas de precedencia citadas anteriormente.
Veamos ahora como evaluar una expresión booleana cualquiera utilizando tablas de ver-
dad. Los posibles valores de las variables booleanas involucradas en la expresión se dis-
ponen en las primeras columnas de la tabla, mientras que en las siguientes columnas se
colocan los valores parciales de los operadores lógicos intervinientes, en orden y de acuerdo
a las reglas de precedencia, hasta colocar en la última columna de la tabla los valores de
verdad asociados a la expresión. Cada fila describe un estado particular de las variables
y la correspondiente evaluación de acuerdo a cada operador en la expresión.
Por ejemplo, queremos evaluar la expresión p∧¬q ⇒ r en todas las combinaciones posibles
de valores de las variables p, q y r, entonces construimos:
p q r ¬q p ∧ ¬q p ∧ ¬q ⇒ r
1 1 1 0 0 1
1 1 0 0 0 1
1 0 1 1 1 1
1 0 0 1 1 0
0 1 1 0 0 1
0 1 0 0 0 1
0 0 1 1 0 1
0 0 0 1 0 1
16
Cartilla Herramientas de Lógica Computacional Diferencias entre igualdad y equivalencia
Una alternativa más simplificada de tabla de verdad (que se puede usar cuando la expre-
sión es muy grande) consiste en colocar debajo de los conectivos el valor de verdad de
la frase que hasta el momento evalúa dicho conectivo. Por ejemplo, si la expresión fuera
(p ∧ ¬q) ⇒ r escribimos en una sola columna dicha expresión, escribiendo debajo de ∧
el valor de p ∧ q y teniendo esa respuesta, junto a r nos permitirá evaluar la expresión
completa, de manera la respuesta final quedará debajo del “conectivo principal” de la
expresión. La siguiente es una versión simplificada de la tabla del ejemplo anterior.
p q r p ∧ ¬q ⇒ r
1 1 1 0 1 1
1 1 0 0 1 0
1 0 1 1 1 1
1 0 0 1 0 0
0 1 1 0 1 1
0 1 0 0 1 0
0 0 1 0 1 1
0 0 0 0 1 0
Notemos que los espacios que rodean a ≡ son útiles para recordarnos que este operador
tiene la precedencia más baja.
Por otra parte, la igualdad múltiple se interpreta como “conjuntiva”, es decir
a=b=c se interpreta como b = c ∧ c = d,
con lo cual b = c = d y (b = c) = d son diferentes, pues en el estado (b, False), (c, False)
y (d, True), b = c = d es False, mientras que (b = c) = d es True.
La equivalencia es asociativa, es decir b ≡ c ≡ d se usará para referirse tanto a (b ≡ c) ≡ d
como a b ≡ (c ≡ d), con lo cual no puede ser conjuntiva como ocurrió con la igualdad.
Por lo tanto, en fórmulas sin paréntesis, una secuencia de = tendrá un significado distinto
a una de ≡. Veamos algunos ejemplos:
17
Cartilla Herramientas de Lógica Computacional Ejercicios
b≡c≡d b=c=d
= h≡ es asociativai = h= es conjuntivai
(b ≡ c) ≡ d (b = c) ∧ (c = d)
= hreemplazo de operadoresi = hreemplazo de operadoresi
(b ≡ c) = d (b ≡ c) ∧ (c ≡ d)
= hreemplazo de operadoresi =
(b = c) = d
p q A
1 1 1
1 0 1
0 1 0
0 0 1
2. Evaluar las siguientes expresiones en el estado {(p, True), (q, False), (r, False)}
a) (p ∨ q) ∧ r
18
Cartilla Herramientas de Lógica Computacional Ejercicios
b) (p ∧ q) ∨ r
c) p ∨ (q ∧ r)
d) p ≡ (q ≡ r)
e) (p ≡ q) ≡ r
f ) (p ⇒ q) ⇒ r
g) (p ∧ q) ⇒ r
3. Escribir las tablas de verdad para las siguientes expresiones, determinando los casos
en los cuales son tautologı́as o contradicciones.
a) (p ∨ q) ∨ ¬q
b) (p ∧ q) ⇐ ¬q
c) (p 6≡ q) ∧ (p ∨ q)
d) p ≡ (q ≡ p)
e) (p 6≡ q) 6≡ p
f ) (p ⇒ q) ⇒ p
g) ¬q ∧ ¬p ≡ (q ⇒ p) ⇒ q
h) (p ≡ p ∨ ¬p) ⇒ p
4. Escribir las expresiones duales PD de cada una de las expresiones booleanas P que
se indican
a) b ∨ c ∨ True
b) b ∧ c ∧ d
c) b ∧ (c ∨ ¬d)
d) b ∨ (c ∧ d)
e) ¬False ⇒ b ∨ c
f ) ¬b ⇐ b ∨ c
g) (¬b ≡ True) ∨ b
h) (b ≡ c) ≡ (b ⇒ c) ∧ (c ⇒ b)
a) p ≡ q
b) p ∧ p ≡ p
c) p ⇒ p ≡ True
19
Cartilla Herramientas de Lógica Computacional Ejercicios
d) p ⇒ q ≡ ¬p ∨ q
e) True ⇒ p ≡ p
f) False ⇒ p ≡ True
g) p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)
h) p≡q≡q≡p
6. Traducir las siguientes frases en expresiones booleanas
a) Llueva o no, iré a nadar.
b) Llueve, no iré a nadar.
c) Llueven rayos y centellas.
d) Llueven rayos o centellas.
e) Llueven rayos y centellas pero iré a nadar.
7. Traducir las siguientes frases en expresiones booleanas
a) Ninguno entre p y q es verdadero.
b) Exactamente uno entre p y q es verdadero.
c) Cero, dos o cuatro entre p, q, r o s son verdaderos.
d) Uno o tres entre p, q, r o s son verdaderos.
8. Identificar las proposiciones elementales en las siguientes frases y traducirlas en
expresiones booleanas.
a) x < y o x = y.
b) x < y o x = y o x > y.
c) Si x > y e y > z entonces v = w.
d) Las siguientes expresiones son todas verdaderas: x < y, y < z y v = w.
e) A lo sumo una de las siguientes expresiones es verdadera: x < y, y < z y v = w.
f) Ninguna de las siguientes expresiones es verdadera: x < y, y < z y v = w.
g) Las siguientes expresiones no son todas verdaderas al mismo tiempo: x < y,
y < z y v = w.
h) Cuando x < y entonces y < z; cuando x ≥ y entonces v = w.
i) Cuando x < y entonces y < z significa que v = w, pero si x ≥ y entonces y > z
no ocurre; sin embargo si v = w entonces x < y.
9. Explique por qué el procedimiento del ejercicio 1 se puede adaptar a la tabla de
cualquier conectivo binario. En otras palabras, explique por qué todo conectivo
lógico binario (dentro de los 16 que existen) se puede expresar usando únicamente
los conectivos ∨, ∧, ¬. 1
1
Advertencia: Su explicación no debe ser del estilo: “Ensayando uno por uno con los 16 conectivos,
20
Cartilla Herramientas de Lógica Computacional Ejercicios
21
Cartilla Herramientas de Lógica Computacional Ejercicios
22