Está en la página 1de 99

Notas de clase de modelos matemáticos

Daniel Benavides, Rodrigo López, Wilmer Garzón

Agosto 2017
Índice general

1. Computación, matemáticas y el universo 5


1.1. Los fundamentos de las matemáticas . . . . . . . . . . . . . . . . 5
1.2. Nace la teorı́a de la computación . . . . . . . . . . . . . . . . . . 6
1.3. Modelos abstractos de computación . . . . . . . . . . . . . . . . . 6
1.4. Los primeros computadores . . . . . . . . . . . . . . . . . . . . . 7
1.5. La Universalidad de la computación . . . . . . . . . . . . . . . . 7

2. Conjuntos, funciones y relaciones 9


2.1. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Secuencias y tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1. Producto cartesiano . . . . . . . . . . . . . . . . . . . . . 13
2.3. Funciones y relaciones . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.1. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.2. Propiedades y Relaciones . . . . . . . . . . . . . . . . . . 17
2.4. Cardinalidad e infinito . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5. Infinidad de Infinitos . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3. Recurrencia 26
3.1. Sucesiones y recurrencia . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.1. Ecuaciones de recurrencia . . . . . . . . . . . . . . . . . . 27
3.1.2. Notación con ı́ndices . . . . . . . . . . . . . . . . . . . . . 29
3.2. Funciones recurrentes famosas . . . . . . . . . . . . . . . . . . . . 32
3.2.1. La sucesión de Fibonnaci . . . . . . . . . . . . . . . . . . 32
3.2.2. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3. Recurrencia y problemas de conteo . . . . . . . . . . . . . . . . . 35
3.3.1. Recubrimiento de un tablero . . . . . . . . . . . . . . . . 35
3.3.2. Número de saludos en una reunión . . . . . . . . . . . . . 36
3.3.3. Número de comités . . . . . . . . . . . . . . . . . . . . . . 37
3.3.4. Subiendo escaleras . . . . . . . . . . . . . . . . . . . . . . 37
3.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

1
4. Demostraciones 44
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.2. Métodos de demostración . . . . . . . . . . . . . . . . . . . . . . 45
4.2.1. Demostración directa . . . . . . . . . . . . . . . . . . . . . 45
4.2.2. Demostración indirecta . . . . . . . . . . . . . . . . . . . 51
4.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5. Autómatas y computabilidad 56
5.1. Autómatas finitos deterministas . . . . . . . . . . . . . . . . . . . 57
5.1.1. Diagramas de estados . . . . . . . . . . . . . . . . . . . . 57
5.1.2. Tablas de transición de estados . . . . . . . . . . . . . . . 59
5.1.3. Conceptos de lenguajes . . . . . . . . . . . . . . . . . . . 59
5.1.4. El problema de la pertenencia . . . . . . . . . . . . . . . . 60
5.1.5. Definición formal de una autómata finito determinista . . 61
5.1.6. Lenguajes Regulares . . . . . . . . . . . . . . . . . . . . . 63
5.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

6. Lenguajes independientes de contexto 65


6.1. ¿Cómo funcionan las gramáticas independientes de contexto? . . 65
6.1.1. Derivación . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.1.2. Árbol de parseo . . . . . . . . . . . . . . . . . . . . . . . . 67
6.1.3. El lenguaje generado por la gramática . . . . . . . . . . . 67
6.1.4. Ejemplo de palı́ndromos . . . . . . . . . . . . . . . . . . . 68
6.2. Definición formal de una gramática independiente de contexto . . 68
6.2.1. Definición formal del lenguaje generado por gramática . . 69
6.2.2. Usando GIC para estudiar el lenguaje matemático . . . . 70
6.2.3. ¿Cómo diseñar gramáticas independientes de contexto? . 71
6.3. Ambigüedad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7. Máquinas de Turing 75
7.1. Modelo informal de un máquina de Turing . . . . . . . . . . . . . 75
7.2. Descripción formal de un Maquina de Turing . . . . . . . . . . . 77
7.3. Configuración de una máquina de Turing . . . . . . . . . . . . . 78
7.4. Lenguajes reconocibles por una Maquina de Turing . . . . . . . . 78
7.5. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

8. Lógica Proposicional 84
8.1. Los fundamentos de la matemática . . . . . . . . . . . . . . . . . 84
8.2. ¿Cómo definir una lógica formalmente? . . . . . . . . . . . . . . . 85
8.3. Lenguaje objeto y Lenguaje del observador . . . . . . . . . . . . 86
8.4. Sintaxis de la Lógica Proposicional . . . . . . . . . . . . . . . . . 87
8.4.1. Alfabeto de la lógica proposicional . . . . . . . . . . . . . 87
8.4.2. Formulas de la lógica proposicional . . . . . . . . . . . . . 88
8.4.3. Árboles de parseo y de sintaxis . . . . . . . . . . . . . . . 88

2
8.5. Traduciendo lenguaje natural a la LP . . . . . . . . . . . . . . . 90
8.5.1. Método de traducción . . . . . . . . . . . . . . . . . . . . 91
8.6. Semántica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.6.1. Tablas de verdad . . . . . . . . . . . . . . . . . . . . . . . 93
8.6.2. Interpretaciones . . . . . . . . . . . . . . . . . . . . . . . 94
8.6.3. Satisfacción de una formula . . . . . . . . . . . . . . . . . 94
8.6.4. Validez de una formula . . . . . . . . . . . . . . . . . . . 95
8.6.5. Equivalencia Proposicional . . . . . . . . . . . . . . . . . 95
8.6.6. Relación de consecuencia . . . . . . . . . . . . . . . . . . 96
8.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

3
Introducción

Las matemáticas son el lenguaje que ha desarrollado la raza humana para


estudiar y entender los patrones que se encuentran en la naturaleza. En este
curso buscamos introducir al estudiante al estudio de la relación ı́ntima entre
la matemática, la fı́sica del universo y la computación. El curso es un curso
exploratorio donde prima la explicación de los conceptos y no la técnica de ma-
nipulación mecánica de los sı́mbolos. Contrario a otros cursos de matemáticas
este curso es un curso que estudia el universo por medio de los modelos ma-
temáticos y no un curso donde simplemente se muestran hechos y detalles del
lenguaje matemático. Esto no implica que el estudiante no aprenderá a mani-
pular los conceptos matemáticos del curso, simplemente implica que cuando lo
haga deberá entender la explicación que soporta esta manipulación.
Para afrontar el curso el estudiante deberá realizar lectura y práctica de
los ejercicios sugeridos y participar activamente en la clase. La responsabilidad
última del aprendizaje es del estudiante y es él quien debe realizar las actividades
propuestas en el curso y en estas notas.
En el curso se tratarán tres grandes temas. El primero busca definir concep-
tos básicos que permitan el desarrollo posterior de conceptos más sofisticados.
En esta primera parte se revisarán conceptos matemáticos básicos como con-
juntos, infinito, computación, complejidad, tuplas y recursión entre otros. En la
segunda parte se estudiará cómo expresar de manera precisa problemas y solu-
ciones por medio de un lenguaje formal. En particular, usaremos los autómatas
y lenguajes como objetos de estudio para entender los conceptos de prueba,
lenguaje formal, teorema, axioma entre otros. Finalmente, estudiaremos la lógi-
ca proposicional como un lenguaje para estudiar y razonar de manera formal
acerca de los métodos matemáticos, de la forma de pensar del ser humano y
exploraremos relaciones ı́ntimas de la computación con una teorı́a del todo (una
teorı́a del universo).

4
Capı́tulo 1

Computación, matemáticas
y el universo

1.1. Los fundamentos de las matemáticas


En 1900 durante el Congreso Internacional de Matemáticos organizado en
Parı́s, el gran matemático David Hilbert planteó su lista de 23 problemas no
resueltos que los matemáticos deberı́an atacar en el siglo XX. La lista de pro-
blemas de Hilbert evidenciaba la preocupación creciente de los matemáticos
por crear una base sólida para las matemáticas. Esto es, que aunque las ma-
temáticas eran la base fundamental para las ciencias y para el estudio de la
naturaleza, la matemática en si misma no tenı́a una base sólida aceptada por
todos los matemáticos, es decir unas definiciones y reglas mı́nimas “evidentes”de
las cuales se pudiera derivar el conocimiento matemático. Preguntas como ¿qué
constituı́a una prueba?, ¿cuándo una demostración era correcta?, ¿cuándo una
sentencia matemática era verdadera? no tenı́an una clara definición, o al menos
una aceptada por todos los matemáticos.
En este contexto, Hilbert definió las caracterı́sticas mı́nimas que una solución
a los fundamentos de las matemáticas deberı́a tener. Según Hilbert, deberı́an
crearse un conjunto finito de reglas de inferencia (las reglas que permiten pasar
de una sentencia matemática verdadera a otra) para las demostraciones ma-
temáticas. Deberı́a existir un proceso (algoritmo) para verificar si una prueba
satisfacı́a las reglas de inferencia definidas y por lo tanto era válida. Las re-
glas preferiblemente deberı́an ser intuitivamente evidentes (aunque esto no era
obligatorio). Las reglas deberı́an ser consistentes, es decir, que si las reglas desig-
naban una prueba como válida, deberı́an estar seguros que no designarı́an una
prueba con la conclusión opuesta como válida. Para esto, la consistencia deberı́a
ser demostrada usando las reglas propuestas. Finalmente, las reglas deberı́an ser
completas, es decir, deberı́a existir una demostración de que todas las sentencias
matemáticas verdaderas se pueden probar usando las reglas definidas.

5
1.2. Nace la teorı́a de la computación
El fracaso del plan planteado por Hilbert, impulsó muchos de los desarrollos
en computación y en filosofı́a de la ciencia hasta nuestros dı́as. En particular los
trabajos de Gödel, Turing y Church, refutaron los planteamientos de Hilbert, y
sentaron las bases para la teorı́a de la computación moderna. En 1931 Gödel,
revolucionó la teorı́a de la demostración, al inventar un nuevo método que le
permitió demostrar que, para cualquier sistema axiomático que formalizara la
aritmética básica (es decir los números y las operaciones básicas): 1) Si el sistema
es consistente, no puede ser completo, es decir si en el sistema no se generan
contradicciones, no todas las verdades matemáticas se pueden demostrar; 2) la
consistencia del sistema no se puede demostrar dentro del mismo sistema. De
manera similar, en 1936 Alan Turing y Alonso Church de manera independiente,
presentaron una definición de algoritmo y demostraron que no se puede construir
un algoritmo que reciba una expresión matemática (una expresión escrita en
lógica de primer orden) y que pueda decidir si esta es verdadera o falsa. Estos
resultados, rechazaban de manera contundente las aspiraciones de Hilbert, y
presentaban una dificultad para justificar la certeza de las matemáticas. Pero,
como veremos más adelante, en realidad estos resultados son un ejemplo de la
manera en que avanza la ciencia y sus implicaciones no son negativas, sino por
el contrario, sus implicaciones son positivas y plantean un universo abierto a la
búsqueda de nuevas y mejores teorı́as sobre el mismo.

1.3. Modelos abstractos de computación


El trabajo de Turing, se basó en un modelo abstracto de computación deno-
minado máquina de Turing. Este modelo permitı́a que una máquina de Turing
que resolvı́a un problema en particular, es decir con un algoritmo particular, se
pudiera simular en otra máquina que hoy se denomina como Máquina Univer-
sal de Turing. Es decir era un modelo de computación programable. Inspirado
en este trabajo, Von Neuman diseño en 1945 la arquitectura de un compu-
tador digital. Hasta nuestros dı́as esta es la arquitectura que usan la mayorı́a de
computadores en operación y todos tienen el mismo poder de computo de una
Máquina Universal de Turing, es decir en todos se pueden resolver los mismos
problemas.
A partir de estos desarrollos se creó lo que hoy denominamos Teorı́a de la
Computación. Esta teorı́a incluye entre otros temas el estudio de:
Computabilidad: ¿Qué problemas pueden ser resueltos por computadores
y cuáles no?
Complejidad: ¿Que tan difı́cil es resolver problemas con un computador?
Teorı́a de Autómatas: Estudia diferentes modelos matemáticos de compu-
tación, sus propiedades y sus implicaciones.

6
1.4. Los primeros computadores
En paralelo a estos desarrollos teóricos surgieron desarrollos tecnológicos
que permitieron la creación de computadores reales. Entre 1937-1946 se crearon
varios computadores basados en relays (switches electromecánicos) que constitu-
yeron los primeros computadores. Entre estos hay varios computadores famosos
como el “Bombe” construidos por Alan Turing y Harold Keen para descifrar los
mensajes cifrados del ejercito Nazi. En 1946 aparece el ENIAC, construido por
John Mauchly y J. Presper Eckert, que era el primer computador electrónico
(sin relays) y por tanto era cerca de 1000 veces más rápido que sus predeceso-
res. En 1948 se ejecutó el primer programa de computador en la Universidad de
Manchester por parte de los investigadores Frederic Williams, Tom Kilburn, y
Geoff Toothill. Con el surgimiento de los computadores electrónicos se impulso
el desarrollo de los computadores y vinieron muchos de los adelantos que hoy
en dı́a disfrutamos. Se crearon sistemas operativos (1960s), computadores per-
sonales (1970s), internet (1990s), teléfonos inteligentes (2000s), la nube (2000s),
la web 2.0 (2000s), y el internet de las cosas (2010s) entre otros.

1.5. La Universalidad de la computación


En el siglo XX con el desarrollo de la Relatividad General de Einstein y
la Fı́sica Cuántica se crea un nuevo marco de referencia de explicaciones de la
realidad del Universo. Estas, que en la actualidad son nuestras mejores expli-
caciones del universo, impulsaron el desarrollo de nuevos modelos filosóficos y
conceptuales que por supuesto soportaron los desarrollos teóricos y tecnológicos
de la computación. En particular queremos mencionar los trabajos de Feynman,
Benioff y Deutsch que entre 1982 y 1989 presentaron trabajos seminales para
desarrollar un nuevo modelo de computación que utilizaba la mecánica cuántica,
el computador cuántico. Uno de los temas interesantes, que ha sido explorado
por David Deutsch, es que el computador cuántico puede simular la fı́sica del
universo y por lo tanto puede ser un simulador universal, es decir crear una
realidad virtual que simule nuestro universo.
Las implicaciones de estos desarrollos son múltiples, pero quiero enfocar-
me en la implicaciones filosóficas sobre el conocimiento humano. En sus dos
libros, ”The fabric of reality”(1997) y ”The beginning of infinity”(2011), Da-
vid Deutsch estudia y desarrolla las implicaciones de tomar con seriedad las
explicaciones de nuestras mejores teorı́as. En particular, plantea que estamos
por primera vez como humanidad en la capacidad de desarrollar una teorı́a
del todo, una teorı́a que será tan profunda en sus explicaciones que tendrá un
carácter universal, permitirá explicar todo en el universo. Esta teorı́a no es de
carácter reducionista como la fı́sica o la matemática lo conciben, es decir que
a partir de unas pocas leyes se explica todo, sino que por el contrario explica
y abraza con igual importancia los fenómenos básicos de la mecánica cuántica
y los fenómenos emergentes de la naturaleza como la vida, la moral, la polı́ti-
ca, la computación y la inteligencia entre otros. Para esto, se identifican cuatro

7
pilares fundamentales: la fı́sica cuántica, la evolución (la evolución de organis-
mos vivos), la epistemologı́a (la teorı́a de cómo se genera el conocimiento), y
la computación (la teorı́a de las capacidades de los computadores que podemos
construir). A partir de estos pilares se explora la capacidad de crear simuladores
virtuales que puedan simular el universo, y cómo esto implica que objetos en
este universo puedan crear computaciones sobre el mismo universo, por ejemplo
que el cerebro humano pueda crear modelos mentales de lo que sucede en el uni-
verso, o que en el futuro podamos crear máquinas que piensen. Se explora cómo
el conocimiento es un acto de conjeturas (creación) y crı́tica (someter nuestras
conjeturas a prueba), y el carácter infinito del conocimiento, esto es que que
siempre nuestras mejores teorı́as solo abarcarán el principio de lo que se puede
conocer. Ası́ como Gödel y Turing crearon técnicas jamás utilizadas por nadie
para dar nuevas explicaciones del universo, nuestras mejores teorı́as y entre ellas
las matemáticas estarán siempre sometidas a la crı́tica y la posibilidad de ser
remplazadas por mejores teorı́as. Esto es no hay una última fuente de verdad ni
de certeza, el conocimiento es una dinámica de creación y crı́tica infinita.
Este curso toma en serio estas implicaciones y busca preparar al estudiante
para asumir los retos del futuro, presentando un marco conceptual que pone
como elemento indispensable la explicación y a la computación como eje funda-
mental de estas explicaciones. El fin último de la matemática y de las ciencias
es crear nuevas y mejores explicaciones sobre el universo y los fenómenos de la
realidad.
Aunque el curso tiene un carácter introductorio, presentamos esas bases
fundamentales que le permitirán profundizar en sus estudios teóricos y prácticos
en computación.
En este curso tomamos en serio la relación ı́ntima entre la computación, la
matemática, la fı́sica y el conocimiento.

8
Capı́tulo 2

Conjuntos, funciones y
relaciones

Parte de los contenidos de este capı́tulo están inspirados por los contenidos
del libro Michael Sipser Introduction to the Theory of Computation [1].

2.1. Conjuntos
Un conjunto es un grupo de objetos representados en una unidad, el conjunto.
Los conjuntos pueden contener cualquier tipo de objetos, entre ellos números,
sı́mbolos, cadenas de sı́mbolos, lenguajes e incluso conjuntos. Los conjuntos se
pueden describir de manera extensiva listando los elementos que pertenecen al
conjunto entre corchetes, por ejemplo la expresión

S = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

define el conjunto S como el conjunto de los números enteros del 0 al 9. Este


mismo conjunto lo podemos definir de manera comprensiva con la siguiente
expresión:
S = {x es un número entero | 0 ≤ x ≤ 9}.
En esta expresión S corresponde al nombre del conjunto y la primera parte
en el corchete, antes de |, define el tipo de elementos en el conjunto, en este
caso números enteros. La parte después de | define la condición que cumplen
los elementos para pertenecer al conjunto. El sı́mbolo | se lee tal que. La expre-
sión completa se lee ası́: S está definido como el conjunto de las equises de tipo
número entero, tal que, 0 es menor o igual a equis y equis es menor o igual a
9. Recuerde que la x (equis) representa cualquier elemento del conjunto. Ge-
neralmente usamos las letras mayúsculas A, B, C, ... para denotar los nombres
de conjuntos. En los conjuntos el orden de los elementos no es importante y no
tienen elementos repetidos o duplicados, es decir el conjunto {7, 7} es el mismo
conjunto {7}.

9
Para representar los conjuntos infinitos podemos utilizar el sı́mbolo ... para
indicar que el conjunto continúa con la misma secuencia. Por ejemplo para defi-
nir el conjunto de los números naturales podemos utilizar la siguiente expresión:
N = {0, 1, 2, 3, 4, ...},
en adelante utilizaremos N para referirnos a los números naturales (en este curso
el 0 es parte de los números naturales, en otros textos podrá encontrar que los
autores usan los números naturales comenzando en 1).
De manera similar podemos definir los números enteros, es decir los enteros
positivos y los negativos, de la siguiente manera:

Z = {..., −3, −2, −1, 0, 1, 2, 3, 4, ...}.


El conjunto vacı́o se puede representar con dos corchetes sin elementos {} o
con el sı́mbolo ∅.
Para denotar que un elemento pertenece a un conjunto se usa el sı́mbolo
∈ y para denotar que un elemento no pertenece utilizamos el sı́mbolo ∈. / Por
ejemplo podemos decir que 8 ∈ {8, 9, 1} para indicar que 8 pertenece al conjunto
{8, 9, 1}.
Existen varias operaciones definidas entre conjuntos. Si tenemos dos conjun-
tos A y B, la unión de estos dos conjuntos se puede denotar con A ∪ B, la unión
es el conjunto generado al combinar los elementos de A y B. De manera similar
la intersección de dos conjuntos A y B se puede denotar con A ∩ B, y representa
el conjunto generado con los elementos que pertenecen a A y también pertene-
cen a B. La diferencia de A y B se escribe A \ B, y corresponde al conjunto
formado por los elementos que están en A pero no están en B. El complemento
de un conjunto es el conjunto generado con los elementos que no pertenecen a
ese conjunto, el complemento del conjunto A se denota con A.
Una estrategia válida y muy conveniente para aclarar conceptos matemáticos
es la utilización de dibujos. En el caso de los conjuntos utilizamos los Diagramas
de Venn. En estos diagramas se representan los conjuntos como un lazo cerrado
sobre un plano y los elementos se representan como puntos sobre el plano adentro
o afuera del lazo según pertenezcan o no al conjunto. La figura 2.1 muestra la
representación de un conjunto A cuyos elementos son los números naturales del
0 al 5. La figura 2.2 muestra las relaciones de intersección, unión y complemento
entre dos conjuntos.
Se dice que el conjunto A es un subconjunto de B si todos los elementos de
A son también elementos de B, y se escribe A ⊂ B. El conjunto vacı́o es un
subconjunto de cualquier conjunto y un conjunto es subconjunto de si mismo,
esto es, si X es un conjunto entonces ∅ ⊂ X y X ⊂ X. Cuando los elementos
de un conjunto son otros conjuntos hablamos de un conjunto de conjuntos, y en
este caso se dice que el elemento pertenece al conjunto principal. Por ejemplo,
considere el conjunto
A = {1, 2, 3, 4}
y el conjunto
B = {1, 4},

10
Figura 2.1: Representación en Diagrama de Venn de un solo conjunto y sus
elementos

Figura 2.2: Diagramas de Venn mostrando las operaciones de unión, intersección,


diferencia y complemento entre dos conjuntos.

11
en este caso se dice que B es un subconjunto de A y se escribe B ⊂ A. Ahora
considere el conjunto de conjuntos definido de la siguiente manera

S = {{1, 2, 3, 4}, {1, 4}},

en este caso tanto A como B pertenecen a S, y se escribe A ∈ S y B ∈ S.


Se denomina conjunto potencia al conjunto que tiene todos los subconjuntos
de un conjunto dado. Por ejemplo el conjunto potencia de

A = {1, 2, 3}

es
P(A) = {∅, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}.
Esto es equivalente a decir que dado un conjunto A, el conjunto potencia de
A se define como

P(A) = {Xes un conjunto | X ⊂ A}.

Si el conjunto A tiene n elementos el conjunto P(A) tendrá 2n elementos.


La cardinalidad se define como el número de elementos de un conjunto y se
escribe |A|. Cuando |A| = 1 se dice que A es un singleton. Existen conjuntos
con cardinalidad infinita, por ejemplo, el conjunto de los números naturales.
Para terminar esta discusión sobre conjunto debemos hablar de unos conjun-
tos especiales que representan la evolución histórica del concepto de número y
que son muy utilizados en el desarrollo de conceptos matemáticos. Los conjuntos
especiales son:

N es el conjunto de los números naturales. Los números naturales son los


números que usamos para contar, los enteros positivos incluyendo el 0. Es
decir N = {0, 1, 2, 3, ...}.

Z es el conjunto de los números enteros, es decir los enteros positivos y


negativos incluyendo el 0. Es decir Z = {..., −3, −2, −1, 0, 1, 2, 3, ...}.
Q es el conjunto de los números racionales, esto es el conjunto de los
números que se pueden escribir como una división (fracción) de números
enteros. Es decir Q = {n | n = ab , a, b ∈ Z y b 6= 0}.

R es el conjunto de los números reales, esto es el conjunto de los números


racionales unidos con el conjunto de los números irracionales. Los números
irracionales son los números que no se pueden escribir como la división
de dos números enteros. Cuando se escriben en forma decimal, estos son
números que en su parte decimal no termina y√no presenta patrones de
repetición. Ejemplos de estos números son π o 2.
C es el conjunto de los números complejos. Los números complejos se
escriben de la forma a + bi, donde a y b son números enteros e i2 = −1. i
se denomina la unidad imaginaria.

12
Una relación interesante entre estos conjuntos es que cada uno es un sub-
conjunto del siguiente. Es decir los números naturales son un sunconjunto de
los enteros, los números enteros son un subconjunto de los racionales, los racio-
nales son un subconjunto de los reales y los reales son un subconjunto de los
complejos. Es decir N ⊂ Z ⊂ Q ⊂ R ⊂ C.

2.2. Secuencias y tuplas


Una secuencia es una lista de objetos en un orden particular. Generalmente
designamos las secuencias entre paréntesis. Por ejemplo una secuencia puede
ser (4, 2, 8), y representa una secuencia diferente a (8, 4, 2). En las secuencias la
repetición si se permiten, es decir, la secuencia (7, 8, 8, 9, 7, 0) es diferente a la
secuencia (7, 8, 9, 0).
Las secuencias pueden ser infinitas o finitas. Las secuencias finitas se les
denomina generalmente tuplas. Una secuencia con n elementos se nomina n-
tupla. Una secuencia de 3 elementos se denomina 3-tupla y una de 2 se denomina
par ordenado o 2-tupla.
Los conjuntos y las secuencias pueden aparecer como elementos de otras
secuencias o conjuntos. Por ejemplo un conjunto de tuplas puede ser

{(1, 2), (2, 1), (2, 3), (3, 2), (1, 3), (3, 1)}

que es el conjunto de todos los pares ordenados que se pueden crear con ele-
mentos del conjunto {1, 2, 3}. De manera análoga podemos tener una secuencia
definida domo
(∅, {1}, {2}, {3, 2, 1}).

2.2.1. Producto cartesiano


Una relación interesante que no mencionamos en la sección anterior es el
producto cartesiano de dos conjuntos A y B, que se escribe ası́ A × B. El
producto cartesiano A × B, se define como el conjunto de los pares ordenados
donde el primer elemento del par ordenado es un elemento de A y el segundo
elemento es un elemento de B.
Por ejemplo, si A = {4, 6} y B = {1, 2, 3}, entonces

A × B = {(4, 1), (4, 2), (4, 3), (6, 1), (6, 2), (6, 3)}

y
B × A = {(1, 4), (1, 6), (2, 4), (2, 6), (3, 4), (3, 6)}.
Se puede calcular el producto cartesiano de k conjuntos A1 , A2 , ..., Ak , y se
escribe A1 × A2 × A3 ... × Ak . El resultado del producto cartesiano en este caso es
el conjunto de tuplas (a1 , a2 , ..., ak ) donde ai ∈ Ai . Por ejemplo, si A = {1, 2} y
B = {x, y} entonces A×B×A = {(1, x, 1), (1, y, 1), (1, x, 2), (1, y, 2), (2, x, 1), (2, y, 1), (2, x, 2), (2, y, 2)}.

13
Cuando se calcula el producto cartesiano de un conjunto consigo mismo
podemos escribir de manera abreviada Ak . Por ejemplo,

A4 = A × A × A × A

A5 = A × A × A × A × A
Ak = A × A × A × ... × A(Producto cartesiano de A tomado k veces ).
Los productos cartesianos de los conjuntos especiales son muy usados. Por
ejemplo, N2 = N × N es el producto cartesiano de los números naturales con
ellos mismos.

2.3. Funciones y relaciones


2.3.1. Funciones
Una función es un objeto matemático que relaciona un conjunto de entradas
con un conjunto de salidas. En una función cada entrada esta relacionada exac-
tamente con una salida. Las funciones también se pueden denominar mapeos,
y se dice que una función mapea un conjunto de entradas en un conjunto de
salida. Si f es una función que para la entra a produce las salida b, podemos
escribir
f (a) = b.
Existen varias formas de representar funciones. Por ejemplo, podemos repre-
sentar funciones gráficamente con flechas que mapean los elementos del conjunto
de entrada con el conjunto de salida (ver figura 2.4). También podemos repre-
sentar la función como un conjunto de tuplas

f = {(0, 0), (1, 3), (2, 6), (3, 9), (4, 12)}.

Igualmente, la podemos representar como una tabla que muestra todas las entra-
das posibles y mapea cada entrada con su salida correspondiente (ver figura 2.3).

n f (n)
0 0
1 3
2 6
3 9
4 12

Figura 2.3: Función representada mediante una tabla

Finalmente, podemos representar una función de manera formal especifican-


do completamente sus conjuntos de entrada y salida y un procedimiento para

14
Figura 2.4: Representación de una función con un diagrama de flechas

computar la salida a partir de la entrada. Por ejemplo, la función anterior la


podemos expresar de la siguiente manera

f : {0, 1, 2, 3, 4} −→ {0, 3, 6, 9, 12} : f (n) = 3 × n,

si definimos D = {0, 1, 2, 3, 4} y R = {0, 3, 6, 9, 12} podemos escribir de forma


más compacta
f : D −→ R : f (n) = 3 × n.
Generalmente al conjunto de entrada de una función se le denomina dominio y
al conjunto de salida se le denomina rango o imagen. La expresión anterior se
lee ası́: f está definida como una función de dominio D = {0, 1, 2, 3, 4} y rango
R = {0, 3, 6, 9, 12}, en la que f (n) = 3 × n. También, si n es un elemento del
dominio D, a f (n) se le llama la imagen de n en la función f y a n se le llama
la pre-imagen de f (n). En nuestra función, por ejemplo, 3 es la imagen de 1,
9 es la imagen de 3, 1 es la pre-imagen de 3 y 3 es la pre-imagen de 9.
Una función que usa todos los elementos de su rango se dice que es una
función suryectiva o sobreyectiva. Una función f : D −→ R se llama uno
a uno o inyectiva si cada elemento del rango es la imagen de, a lo sumo, un
elemento del dominio. Según esto, la función f del ejemplo anterior es inyectiva.
En cambio la función h definida mediante la tabla de la figura (2.5) no es
inyectiva pues 6 es la imagen tanto de 2 como de 3; es decir, h(2) = h(3) = 6
Otro ejemplo de función no inyectiva es

s : R −→ R : s(x) = sin(x)

en la que 0 es la imagen de muchos valores del dominio. Efectivamente,

0 = sin(0) = sin(π) = sin(2π) = . . . etc

15
n h(n)
0 0
1 3
2 6
3 6
4 12

Figura 2.5: La función h no es inyectiva

0 π 2π 3π

Figura 2.6: sin(x) no es inyectiva

como se muestra en la figura (2.6)


Note que, cuando una función no es inyectiva, algún valor del rango tiene
más de una preimagen. En el ejemplo anterior, el valor 0 tiene varias preimáge-
nes: 0, π,2π,. . . ,etc.
Por otro lado, cuando una función f es inyectiva, se pueden invertir los roles
de las imágenes y las pre-imágenes para construir una nueva función que se
denomina la función inversa de f , que se escribe f −1 y en la que, naturalmente,
los roles del dominio y el rango también se intercambian. Retomando la función
de la tabla (2.3), podemos tabular su inversa como se muestra en la figura (2.7).

n f (n) x f −1 (x)
0 0 0 0
1 3 3 1
2 6 6 2
3 9 9 3
4 12 12 14

Figura 2.7: La función f y su inversa f −1

Una función que es tanto inyectiva como sobreyectiva se dice que es biyec-
tiva. Por ejemplo, la función f : Z −→ Z : f (n) = n + 3 es biyectiva.
Una función puede tener como dominio el producto cartesiano de varios
conjuntos. Ası́, una función f puede estar definida como f : A × B −→ C, donde
el dominio de f es el producto cartesiano de A y de B y el rango es el conjunto
C. Por ejemplo, podemos definir la función g : {0, 1, 2, 3} × {0, 1, 2, 3} −→
{0, 1, 2, 3, 4, 5, 6} usando la tabla siguiente.

16
g 0 1 2 3
0 0 1 2 3
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
En esta función el dominio está conformado por tuplas, concretamente por pares
ordenados, y en la tabla la primera columna representa el primer elemento de
las tuplas y la primera fila representa el segundo elemento, es decir podemos
escribir g((2, 3)) = 5 o simplemente g(2, 3) = 5. La función g se podrı́a definir
también con la siguiente notación
g= {((0, 0), 0), ((0, 1), 1), ((0, 2), 2), ((0, 3), 3),
((1, 0), 1), ((1, 1), 2), ((1, 2), 3), ((1, 3), 4),
((2, 0), 2), ((2, 1), 3), ((2, 2), 4), ((2, 3), 5),
((3, 0), 3), ((3, 1), 4), ((3, 2), 5), ((3, 3), 6)}
donde se define la función g como un conjunto de tuplas, en las que el primer
elemento de cada tupla corresponde a una tupla y el segundo elemento corres-
ponde a un número que es la suma de los elementos de la primera tupla. Es
decir que si tenemos la siguiente tupla ((3, 0), 3), el segundo elemento de esta
tupla corresponde a la suma de los elementos de la primera, es decir a la suma
de 3 + 0.
En una función cuyo dominio es A1 × A2 × A3 · · · × Ak para los conjuntos
A1 , A2 , A3, ..., Ak la entrada es una k-tupla (a1 , a2 , a3 , ..., ak ) y denominamos los
ai como argumentos de la función. una función con k argumentos es denomina-
da una función k-aria. En este caso k se denomina la aridad de una función.
Una función con una argumento se denomina una función unaria. Las funciones
con dos argumentos se denominan funciones binarias. Hay una gran cantidad
de funciones binarias muy conocidas, por ejemplo la suma y la multiplicación.
Muchas de estas funciones usan la notación infija donde la operación se es-
cribe entre los argumentos. Por ejemplo, con la función suma podemos escribir
suma(2, 3) = 5, que usa notación prefija (la operación antes de los argumentos),
o, usando notación infija, 1 + 3 = 5.

2.3.2. Propiedades y Relaciones


Una propiedad o predicado es una función donde el rango es {V ERDADERO,
F ALSO}. Por ejemplo, definamos la propiedad par como una función que re-
cibe como entrada un número entero y responde V ERDADERO si el número
es un número par, y responde F ALSO si el número es un número impar. Ası́,
par(10) = V ERDADERO y par(5) = F ALSO.
Una propiedad cuyo dominio es es un conjunto de k-tuplas A × ... × A
se denomina relación k-aria en A. Un ejemplo de una relación binaria en
Z es la relación “menor que” escrita con el sı́mbolo <. Si R es una rela-
ción binaria la expresión aRb significa que aRb = V ERDADERO. De ma-
nera similar si R es una relación k-aria, la expresión R(a1 , a2 , . . . , ak ) significa

17
que R(a1 , a2 , . . . , ak ) = V ERDADERO. Ası́, por ejemplo podemos escribir
menor(3, 5) = V ERDADERO, o de la manera que generalmente se escribe
usando notación infija, 3 < 5 = V ERDADERO, o simplemente 3 < 5. La
igualdad escrita con el sı́mbolo = es otro ejemplo de una relación binaria.
Algunas veces describir una propiedad con un conjunto es más conveniente
que hacerlo con notación de funciones. Ası́, por ejemplo si A = {0, 1, 2, 3, 4}
la función menor : A × A −→ {V ERDADERO, F ALSO} podrı́a ser escrita
como (A × A, S), donde S = {a ∈ A × A | menor(a) = V ERDADERO}. o
simplemente como S, si el dominio es evidente por el contexto. En este caso

S = {(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)}.

Un tipo especial de relación es la equivalencia. La equivalencia captura la


noción de igualdad de dos objetos con respecto a una caracterı́stica en particu-
lar. Una relación binaria R es una relación de equivalencia si R satisface tres
condiciones:

1. R es reflexiva, es decir para cada x, xRx;


2. R es simétrica si para cada x y y, xRy implica que yRx;

3. R es transitiva si para cada x,y, y z, si xRy y yRz, implica que xRz.

Como ejemplo, suponga que tenemos el conjunto P de todas las personas


del mundo y definimos la relación R “tiene la misma fecha de nacimiento” de la
siguiente manera

R : P × P −→ {V, F } : xRy si x,y tienen la misma fecha de nacimiento.

En este caso podemos demostrar que R es una relación de equivalencia probando


simplemente que cumple con las tres condiciones anteriores. Esto es,
1. R es reflexiva, dado que xRx, es decir todas las personas tienen su misma
fecha de nacimiento;
2. R es simétrica, dado que para cada x y y, xRy implica que yRx, es decir
que si Pedro tiene la misma fecha de nacimiento que Juan, entonces Juan
tiene la misma fecha de nacimiento que Pedro;
3. R es transitiva, dado que para cada x,y, y z, si xRy y yRz, implica que
xRz. Esto es que si Pedro tiene la misma fecha de nacimiento que Juan y
Juan tiene la misma fecha de nacimiento que Marı́a entonces Pedro tiene
la misma fecha de nacimiento que Marı́a.

2.4. Cardinalidad e infinito


La cardinalidad de un conjunto se define como le número de elementos que
tiene un conjunto. Si A es un conjunto, la cardinalidad de A la escribimos ası́

18
|A|. La cardinalidad de un conjunto finito se obtiene simplemente al contar sus
elementos. Esto es,
|{1}| = 1
|{1, 100}| = 2
|{Bogotá, New York, Paris}| = 3
|∅| = 0.
La cardinalidad de los conjuntos infinitos es un poco más complicada, ya
que no podemos asignarle un número natural a la cardinalidad de un conjunto
infinito. Decir por ejemplo que la cardinalidad de N es igual a infinito, no es
necesariamente correcto, ya que el infinito es más un lı́mite, algo hacia lo que
tiende una secuencia de números, pero no es un número concreto. Para lidiar
con este problema vamos a introducir una clase especial de valores que se usan
para medir la cardinalidad de conjuntos infinitos. El primer valor que vamos a
introducir es el siguiente:
|N| = ℵ0 .
ℵ0 se lee Aleph-0, “aleph” es la primera letra del alfabeto hebreo, y George
Cantor usó esta y otras letras del alfabeto Hebreo en el estudio de la teorı́a de
conjuntos. Por supuesto ℵ0 es mayor que cualquier número natural.
Para razonar y estudiar los infinitos necesitamos una definición de cardinali-
dad o al menos una forma de comparar la cardinalidad de conjuntos. Para esto
introducimos la siguiente definición
Definición 2.4.1 (Igualdad de la Cardinalidad). Dos conjuntos tienen la
misma cardinalidad si podemos definir una función que empareje cada elemento
de un conjunto con un elemento del otro conjunto, sin repetir y sin dejar ningún
elemento por fuera.
Por ejemplo si tenemos A = {1, 2, 3} y B = {perro, gato, rata}, pode-
mos decir que A y B tienen la misma cardinalidad y en este caso es igual
a 3. Esto es fácil de probar por la definición 2.4.1 construyendo una función
que empareje los elementos de A con los de B, en este caso la función serı́a
{(1, perro), (2, gato), (3, rata)}. Note que la función no repite elementos ni deja
elementos sin considerar.
Ahora podemos responder preguntas como cuál es la cardinalidad de Z o
de los pares o de los impares, y si estas cardinalidades son más grandes o
más pequeñas que |N|. Para hacer esto vamos a intentar mapear los elementos
de cada conjunto con los de N. Para esto proponemos emparejar los números
naturales con los números enteros de la siguiente manera

(0, 0), (1, −1), (2, 1), (3, −2), (4, 2), (5, −3), ...

, esto es los números naturales pares se mapean con los enteros positivos y los
números naturales impares se mapean con los enteros negativos. Si representa-
mos este mapeo en forma de tabla obtenemos

19
Valor en N Valor en Z
0 0
1 -1
2 1
3 -2
4 2
... ...

Según nuestra definición de cardinalidades podemos concluir que |N| = |Z| = ℵ0 ,


ya que acabamos de encontrar una forma de emparejar todos los elementos de
los números naturales con los elementos de los números enteros. Ahora podemos
expresar el siguiente teorema
Teorema 2.4.1. |N| = |Z| = |números pares| = |números impares| = ℵ0
Demostración. La función que mapea los números enteros con los pares es
f (n) = 2n, y la función que mapea los números enteros con los impares es
f (n) = 2n + 1, esto implica que |Z| = |números pares| = |números impares|.
Ahora, como arriba probamos que |N| = |Z| = ℵ0 , el teorema queda probado
por transitividad de la igualdad.

2.5. Infinidad de Infinitos


Una pregunta derivada de la sección anterior es ver si todos los conjuntos
infinitos tienen la misma cardinalidad. Para esto, recuerde la definición de con-
junto potencia de un conjunto como el conjunto de todos los subconjuntos. Por
ejemplo, si A = {0, 2} entonces P(A) = {{0}, {2}, {0, 2}, ∅}. La cardinalidad
de P(A) es |P(A)| = 4 y podemos ver que |A| < |P(A)|. De manera similar,
podemos ver que

P(P(A)) = {∅, {{0}}, {{2}}, {{0, 2}}, {∅}, {{0}, {2}}, {{0}, {0, 2}}, {{0}, ∅},

{{2}, {0, 2}}, {{2}, ∅}, {{0, 2}, ∅}, {{0}, {2}, {0, 2}}, {∅, {2}, {0, 2}},
{{0}, ∅, {0, 2}}, {{0}, {2}, ∅}, {{0}, {2}, {0, 2}, ∅}}
y en este caso |P(P(A))| = 16, y podemos ver que |P(A)| < |P(P(A))|. Por
lo anterior podemos ver que, si A es un conjunto finito, siempre se cumple que
|A| < |P(A)| < |P(P(A))| < ....
Ahora, podemos preguntar si B es un conjunto infinito entonces |B| =
|P(B)|?. Para encontrar la respuesta a la pregunta anterior vamos a suponer
que efectivamente |B| = |P(B)|, es decir, que suponemos que los conjuntos po-
tencia de conjuntos infinitos tienen la misma cardinalidad del conjunto base. si
suponemos que lo anterior es verdad, quiere decir que podemos mapear de algu-
na manera cada elemento de B con un elemento de P(B) sin que sobre ningún
elemento de B o de P(B). Es decir podemos construir una relación de la forma

20
b0 ↔ {b0 , b1 , b2 , b4 , b5 , ...}
b1 ↔ {b0 , b2 , b3 , b4 , b5 , ...}
b2 ↔ {b1 , b2 , b3 , b4 , b5 , ...}
b3 ↔ {b0 , b2 , b4 , b5 , ...}
b4 ↔ {b1 , b2 , b3 , b5 , ...}
b5 ↔ {b0 , b2 , ...}
.. .. ..
. . .
Note que la selección del mapeo es totalmente aleatoria. Ahora, lo que vamos
a hacer es probar que no importa que tipo de mapeo usted escoja, siempre podrá
encontrar un subconjunto de B que no está mapeado a un elemento de B. Para
esto vamos a usar una técnica llamada diagonalización.
Ahora considere el mapeo propuesto arriba y escribámoslo en forma de tabla
como se muestra a continuación.
b0 b1 b2 b3 b4 b5 ...
b0 S S S N S S ...
b1 S N S S S S ...
b2 N S S S S S ...
b3 S N S N S S ...
b4 N S S S N S ...
b5 S N S N N N ...
..
.
En esta tabla la primera columna muestra el elemento de B que esta mapeado
al conjunto que se obtiene al tomar los elementos de las columnas marcadas
con “S” para la fila correspondiente. Esto es por ejemplo, el elemento b2 está
mapeado con el conjunto infinito {b1 , b2 , b3 , b4 , b5 , ...}, el elemento b0 no está en
este conjunto porque la columna correspondiente esta marcada con “N”, y los
elementos después de b5 no son relevantes para lo que queremos mostrar. Ahora,
vamos a marcar la diagonal de la tabla (letras en engrilla) y ver que conjunto
se forma al seleccionar los elementos correspondientes según se indica con “S”
o “N” en la diagonal. El resultado se ve a continuación.
b0 b1 b2 b3 b4 b5 ...
b0 S S S N S S ...
b1 S N S S S S ...
b2 N S S S S S ...
b3 S N S N S S ...
b4 N S S S N S ...
b5 S N S N N N ...
..
.
Conj. formado S N S N N N ...

El conjunto formado en este caso es {b0 , b2 , ...}, que podrı́a estar en cualquier
parte de nuestra tabla infinita. Para efectos de este ejemplo se puede ver que el

21
elemento b5 está mapeado a este conjunto que se formó en la diagonal. Esto no
es casualidad, el autor de estas notas seleccionó ese mapeo para que el lector
pueda ver que el conjunto seleccionado en la diagonal puede estar en cualquier
parte de la tabla, recuerde que el mapeo en principio fue aleatorio.
Ahora vamos a repetir el ejercicio pero tomando la inversa de la diagonal.
Es decir, vamos a tomar la diagonal y formar el conjunto que se crea al cambiar
las “S” por “N” y las “N”por “S”.
b0 b1 b2 b3 b4 b5 ...
b0 S S S N S S ...
b1 S N S S S S ...
b2 N S S S S S ...
b3 S N S N S S ...
b4 N S S S N S ...
b5 S N S N N N ...
..
.
Conj. complemento N S N S S S ...
Lo interesante de este resultado es que el conjunto formado al tomar el comple-
mento de la diagonal no se encuentra en ningún lugar de la tabla. No me refiero
a la tabla visible en este documento, sino que en la tabla infinita que representa
la tabla parcial que mostramos acá, en esa tabla infinita en ninguna parte se
encuentra el conjunto formado al tomar el complemento de la diagonal.
Para verificar esto, puede realizar el siguiente razonamiento. Suponga que el
complemento de la diagonal lo denominamos C y sabemos que si ese conjunto
se encontrara en la tabla quiere decir que hay un bk que estarı́a mapeado a ese
conjunto. En ese caso usted sabe que en la tabla en la fila de bk , la columna
bk hace parte de la diagonal, y que es ese elemento el que se complementa.
Ahora si C estuviera mapeado a bk , entonces todos los elementos que se indican
con “S” en la fila deberı́an pertenecer a C, pero usted sabe que el elemento
de la columna de bk en esa fila se complementó y por lo tanto C no puede ser
el conjunto definido por la la fila correspondiente a bk . El siguiente cuadro le
ayuda con este razonamiento.
bk−2 bk−1 bk bk+1 bk+2 bk+3 ...
..
.
bk−2 N ...
bk−1 S ...
bk S N S N S N ...
bk+1 S ...
bk+2 N ...
bk+2 S ...
..
.
Conj. C S N N N S N ...
Para terminar este razonamiento mire que la diagonal está formada por

22
las celdas marcadas en la fila y la columna con el mismo elemento. Es decir,
para cualquier número natural k la celda de la fila bk y la columna bk está
en la diagonal. Esto implica que si en una celda de la diagonal encontramos
“N”podemos decir que el elemento correspondiente, por ejemplo bk NO está
mapeado con un conjunto que lo contiene, esto es bk esta mapeado con A y bk ∈
/
A. Al tomar el complemento podemos decir que si en una celda de la diagonal
encontramos “N” podemos decir que el elemento si pertenece al complemento
de la diagonal. Entonces podemos escribir el complemento de la diagonal como

C = {b | hay una “N” en la celda de la diagonal para b}

o de otra manera

C = {b | b está emparejado con un conjunto que no contiene a b}.

Observe que esta definición de C no necesita construir una tabla, ahora tiene
una definición de C, que le permite construirlo con facilidad, independiente del
mapeo que se proponga.

2.6. Ejercicios
1. Describa en español que conjunto define cada una de las siguientes expre-
siones. Utilice ejemplos cuando sea necesario.

a) {0, 2, 4, 6, ...}
b) {..., −3, −1, 1, 3, ...}
c) {n ∈ N | n = 3m y m ∈ N}
a
d ) {r ∈ R | r = b y a, b ∈ Z}
e) {n ∈ N | n = m2 y m ∈ N}
f ) {s | s es una cadena de 0 y 1 donde s es igual a s invertida}
2. Describa en español que conjunto define cada una de las siguientes expre-
siones. Utilice ejemplos cuando sea necesario.
a) {2, 3, 5, 7, 11, 13, 17, 19}
b) {..., −7, −5, −3, −1, 0, 2, 4, 6, 8, ...}
c) {n ∈ N | n = 3m y m ∈ N}
d ) {n ∈ N | n = m2 y m ∈ Z}
e) {r ∈ R | r = cos(s) y s ∈ R}
f ) {(x, y) ∈ R × R | x2 + y 2 = 1}
3. Escriba de manera formal los siguientes conjuntos
a) Conjunto de los números 10, 100, 1000, 10.000, ...

23
b) Conjunto de los números enteros mayores a 7
c) Conjunto de los números naturales menores a 7
d ) El conjunto que contiene la cadena else.
e) El conjunto potencia del conjunto {a, b, c}.
f ) El conjunto que contiene al conjunto vacı́o
g) El conjunto vacı́o
4. Escriba de manera formal los siguientes conjuntos
a) Conjunto de los números 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, ...
b) Conjunto de los números enteros menores a 0
c) Conjunto de los números naturales múltiplos de 7
d ) El conjunto que contiene la cadena if , then, wewrer, f or, else.
e) El conjunto potencia del conjunto {1, 2, 3, 4}.
f ) El conjunto que contiene al conjunto vacı́o y a 45
g) El conjunto de números enteros m de la forma m = 3n donde n es
un entero.
5. Dibuje la siguiente expresión en un Digrama de Venn: N ⊂ Z ⊂ Q ⊂ R ⊂
C.

6. Si A = {1, 2, 3, 4} y B = {1, 2}
a) ¿A es un subconjunto de B?
b) ¿B es un elemento de A?
c) ¿Qué conjunto es A ∪ B?
d ) ¿Qué conjunto es A ∩ B?
e) ¿Qué conjunto es A × B?
f ) ¿Qué conjunto es el conjunto potencia de A?
7. Si A tiene a elementos y B tiene b elementos, ¿cuántos elementos tiene
A × B? Explique su respuesta.

8. Si C tiene c elementos, cuantos elementos tiene el conjunto potencia de


C? Explique su respuesta.
9. Si A = {3, 5, 6, 7} y tenemos f : A × A −→ R : f (a, b) = a − b. Realice lo
siguiente:

a) Escriba f en forma de tabla.


b) Realice el diagrama de flechas de f .
c) Calcule el rango de f .

24
10. En una tabla represente la función con dominio D = {0, 1, 2, 3, 4} y que
mapea cada elemento del dominio con el cuadrado del mismo, es decir
f (n) = n2 . Luego escriba la función de manera formal detallando el do-
minio, el rango y la fórmula de creación.
11. En una tabla represente la función con dominio D = {0, 1, 2, 3, 4} y que
mapea cada elemento del dominio con el cubo del mismo más 2, es decir
f (n) = n3 + 2. Luego escriba la función de manera formal detallando el
dominio, el rango y la fórmula de creación.
12. Si A = {0, 1, 2, 3, 4} y B = {5, 6, 7, 8, 9}, en una tabla represente la función

f : A × B −→ N : f (a, b) = 5a + b

13. De un ejemplo para una relación reflexiva y simétrica pero no transitiva.


14. De un ejemplo para una relación reflexiva y transitiva pero no simétrica.
15. De un ejemplo para una relación simétrica y transitiva pero no reflexiva.

16. Demuestre que la relación “tiene el mismo coseno.es una relación de equi-
valencia en el conjunto de todos los ángulos.
17. Suponga A = ∅ y calcule

a) |A| =
b) |P(A)| =
c) P(A) =
d ) |P(P(A))| =
e) P(P(A)) =

25
Capı́tulo 3

Recurrencia

Esencialmente, la informática es el estudio de problemas y sus soluciones me-


diante procedimientos sistemáticos o mecanizables. Informalmente, recurrencia
es una estrategia para resolver un problema reduciéndolo a uno o más subpro-
blemas con las siguientes caracterı́sticas:
Tienen exactamente la misma estructura que el problema original.
De alguna manera son más simples, menos complejos, más fáciles de re-
solver que el problema original.
Una vez encontradas las soluciones de los subproblemas, éstas se combinan
de alguna manera para resolver el problema original.
Suponga, por ejemplo, que para una rifa se hicieron talonarios de 200 boletas.
Usted recibió un talonario y se espera que venda todas las boletas. Usted puede
pensar en diferentes soluciones:
1. Compra todas las boletas (fácil si se tiene la plata).
2. Busca 200 personas para venderles (a cada una) una boleta. Solución dis-
pendiosa.
3. Consigue 10 amigos, a cada uno de ellos le entrega 20 boletas y los com-
promete a venderlas. Si todos cumplen su compromiso, simplemente se
reúne el dinero recolectado y usted cumple con su compromiso original.
La tercera estrategia es claramente recurrente: cada uno de los 20 amigos
debe resolver el mismo problema (vender unas boletas) pero a una escala menor.
Es más, algunos de ellos podrı́an usar una estrategia similar, partiendo nueva-
mente el problema en subproblemas, etc. En este ejemplo es claro, además, que
hay un punto en que el problema ya no se puede subdividir más (cuando haya
que vender exactamente una boleta).
En este capı́tulo se abordarán problemas muy disı́miles para los cuales resulta
útil la estrategia recurrente para encontrar una solución.

26
3.1. Sucesiones y recurrencia
Las funciones cuyo dominio es N (los números naturales) se pueden analizar
desde muchos puntos de vista. Un punto de vista muy usado es el de las suce-
siones, que se ven como una colección de valores en las que cada valor tiene una
posición, la cual está dada por un valor entero.
Por ejemplo, si en la siguiente colección de valores

1, 3, 5, 7, 9, 11, 13, . . . (3.1)

se quiere destacar el puesto que cada valor ocupa, comenzando desde cero, se
puede decir que se trata una sucesión y entonces se puede definir una función
que la describe. Por ejemplo,

T : N −→ N (3.2)
T (n) = 2n + 1

Aunque la anterior definición es perfectamente rigurosa, en el mundo de las


sucesiones se prefiere el siguiente estilo (equivalente al anterior).

T (n) = 2n + 1 n≥0 (3.3)


en donde se omite la declaración explı́cita del dominio y del rango pero se añade
la aclaración n ≥ 0 de los valores para los que es válida la definición. Los roles
importantes ahora son:

n Designa una posición dentro de la sucesión


T (n) Designa el valor que ocupa la posición n en la sucesión

Esta asociación entre posición y valor se puede hacer más explı́cita mediante
una tabla como la siguiente:

n 0 1 2 3 4 5 6 ... posición
T (n) 1 3 5 7 9 11 13 ... valor

Es claro, consultando la tabla, que T (5) = 11 lo que se corrobora utilizando


la definición (3.3) según la cual

T (5) = 2 × 5 + 1
= 11

3.1.1. Ecuaciones de recurrencia


En el mundo de las sucesiones que —no sobra recordar— no son más que
funciones cuyo dominio es el conjunto N, hay una manera alterna de definir las
funciones, que son las ecuaciones de recurrencia o ecuaciones recurrentes. Se
llaman de recurrencia porque en ellas, el término que aparece a la izquierda (lo

27
que se está definiendo), también aparece en el lado derecho pero en una versión
“debilitada” o en algún sentido, “más pequeña”. La definición de algo se hace
en términos de una versión más pequeña (menos complicada) de sı́ mismo.
Para la sucesión descrita informalmente en (3.1) y definida formalmente
en (3.3) se puede hacer una definición alterna que surge de la observación (a ojo)
de que hay una relación que se cumple entre dos valores vecinos en la sucesión:
cualquier elemento es igual a su predecesor más 2, lo cual puede expresarse como

T (0) = 1 caso base (3.4)


T (n) = T (n − 1) + 2 caso general

Note que en el caso general se define T (n) en términos de T (n − 1) en donde


este último se encuentra “más cerca” del comienzo de la sucesión. Por otro lado,
es crucial la existencia del caso base para que la definición quede completa.
Es claro que mediante (3.3) y (3.4) se define la misma sucesión pero a (3.3)
se le conoce como una definición explı́cita pues el valor de la función depende
únicamente del valor de su argumento, mientras que en el caso de la definición
recurrente el valor de la función puede depender de valores que lo preceden en
la sucesión.
Esta manera de definir es más indirecta que el estilo de la definición (3.3)
pues, en realidad, sugiere un método, paso a paso, para calcular el valor de T (n).
El método aplicado para calcular T (5) en nuestro ejemplo serı́a:

T (5) = T (5 − 1) + 2
= T (4) + 2
= T (4 − 1) + 2 + 2
= T (3) + 2 + 2
= T (3 − 1) + 2 + 2 + 2
= T (2) + 2 + 2 + 2
= T (2 − 1) + 2 + 2 + 2 + 2
= T (1) + 2 + 2 + 2 + 2
= T (1 − 1) + 2 + 2 + 2 + 2 + 2
= T (0) + 2 + 2 + 2 + 2 + 2
=1+2+2+2+2+2
= 11
Uff!!

El método consiste en consultar la definición de T para ir reemplazando


apariciones de T (n) por el lado derecho del caso que convenga, dependiendo
del valor de n. Note que el método no acabarı́a si no se define el caso base.
Este método se denomina reescritura o reducción pues consiste en simplificar
(reducir) las expresiones “reescribiendo” las apariciones de la función utilizando
los diferentes casos de la definición.

28
En los textos de matemáticas es frecuente ver una definición como la anterior
con un aspecto ligeramente diferente pero igualmente claro:
(
1, si n = 0
T (n) = (3.5)
T (n − 1) + 2, en otro caso

Aunque luzca dispendioso el método de cálculo, hay situaciones en la que


resulta perfectamente adecuado y eficiente. Por ejemplo, si se trata de calcular
los primeros 5 valores de la sucesión (no únicamente el quinto valor) los cálculos
serı́an:

T (0) = 1
T (1) = T (1 − 1) + 2 = T (0) + 2 = 1 + 2 = 3
T (2) = T (2 − 1) + 2 = T (1) + 2 = 3 + 2 = 5
T (3) = T (3 − 1) + 2 = T (2) + 2 = 5 + 2 = 7
T (4) = T (4 − 1) + 2 = T (3) + 2 = 7 + 2 = 9

3.1.2. Notación con ı́ndices


Nuevamente, en el contexto de valores asociados con números naturales (su-
cesiones o tablas) se acostumbra una notación con ı́ndices. Por ejemplo, la de-
finición hecha en (3.5) se puede escribir ası́:
(
1, si n = 0
Tn = (3.6)
T(n−1) + 2, en otro caso
En este caso se está usando la forma de subı́ndices, que aparecen en letra más
pequeña, a la derecha del sı́mbolo al cual se aplican y ligeramente más abajo.
Su significado es exactamente el mismo de los argumentos de las funciones de
las que se habló en los apartados anteriores. Es decir,

T (n) significa lo mismo que Tn


T (n − 1) significa lo mismo que T(n−1)

En textos impresos, en donde el tamaño está muy bien definido, con frecuen-
cia sobran los paréntesis. Es decir,

T(n−1) es lo mismo que Tn−1


En texto manuscrito es fácil caer en ambigüedades y es preferible usar
paréntesis. También existe la notación con superı́ndices, como en T n pero es
menos frecuente pues tiende a confundirse con la operación de potenciación.

29
¿Cuándo se usa la notación con ı́ndices y cuándo se usa la notación tradicio-
nal de funciones?. En principio son perfectamente intercambiables. Obviamen-
te, no deben mezclarse en la misma expresión si están asociadas con el mismo
sı́mbolo. Es decir,

F (n) + Tn puede ser correcto


F (n) + Fn−1 no tiene mucho sentido

Tal vez hay una diferencia en el uso más frecuente de cada una de las nota-
ciones. Cuando aparece la expresión F (n) normalmente se piensa en una función
cuyo dominio no necesariamente es N, mientras que la expresión Fn inmediata-
mente sugiere que el valor de n es un entero.
Ejemplo 3.1.1. Escribir de manera recurrente y de manera explı́cita una fun-
ción que genere los números naturales múltiplos de 3. También describa la su-
cesión mediante la notación de subı́ndices.
Para esto consideremos primero la definición recurrente usando las siguientes
ecuaciones:

f (0) = 0
f (n) = f (n − 1) + 3

Ahora, con la notación de subı́ndices:


(
0 si n = 0
Fn =
F(n−1) + 3 en otro caso
Finalmente, la función explı́cita equivalente:

g(n) = 3 × n

Note que muchas veces usamos la palabra genera, para referirnos a una
función. En este contexto simplemente estamos pensando en la función como
una máquina que recibe una entrada y produce una salida.
Ejemplo 3.1.2. Muchas funciones, que no corresponden necesariamente con
sucesiones, pueden definirse recurrentemente. Por ejemplo, la potenciación de
números reales podrı́a definirse ası́:

pot : R × N −→ R
pot(x, 0) = 1
pot(x, n) = x × pot(x, n − 1) para n > 0

lo que podrı́a escribirse de manera más “familiar”, acudiendo a la notación


habitual de la potenciación:

30
x0 = 1
xn = x × xn−1 para n > 0

con lo que, como ya se dijo, se tiene además un método para calcular el valor.
Por ejemplo,

53 = 5 × 52
= 5 × 5 × 51
= 5 × 5 × 5 × 50
=5×5×5×1
= 125

Ejemplo 3.1.3. Los habitantes del planeta Alfa se reproducen de la siguiente


manera: cada mes, un individuo da origen a tres nuevos individuos y cada uno
de ellos, a su turno y cada mes, se reproduce de la misma manera. Se quiere
saber cuántos descendiente tendrá un individuo al cabo de n meses.
Las siguientes observaciones resultan pertinentes:
1. Si en un mes especı́fico hay k individuos, en el mes siguiente habrá 3k
nuevos individuos.
2. Si en un mes especı́fico hay k individuos, en el mes siguiente la población
total será la suma de los individuos que ya existı́an (los k individuos) más
los nuevos individuos (3k según la observación anterior).
3. Si en un mes especı́fico hay k individuos, todos ellos son descendientes del
individuo original, excepto por el individuo original (que no es descendien-
te de sı́ mismo). Es decir, la población total se conforma por el individuo
original, más todos sus descendientes
Veamos cómo, con ecuaciones de recurrencia, es posible expresar lo mismo
que se dice en las observaciones anteriores y, de paso, se obtiene un método para
calcular el número de descendientes. Es fundamental escoger unos sı́mbolos y
aclarar cómo se van a usar dentro de las ecuaciones. Por ejemplo,
Dn = Número de descendientes de un individuo al cabo de n meses.
Pn = Población total en el mes n.
Una vez escogido el significado de los sı́mbolos, de las observaciones iniciales
se pueden plantear las siguientes ecuaciones:

Pn = Pn−1 × 3 + Pn−1 Observaciones 1 y 2 (3.7)


Pn = Dn + 1 Observación 3 (3.8)
P0 = 1 Población al iniciar (3.9)

31
Lo que nos interesa calcular es Dn . Reemplazando (3.8) en (3.7)

Dn + 1 = (Dn−1 + 1) × 3 + Dn−1 + 1
Dn = (Dn−1 + 1) × 3 + Dn−1
Dn = 3Dn−1 + 3 + Dn−1
Dn = 4Dn−1 + 3 (3.10)

Finalmente, utilizando (3.9) y (3.10) podemos plantear la solución, que


incluye un caso base fundamental.

D0 = 0 (3.11)
Dn = 4Dn−1 + 3

Para insistir, la solución anterior también puede expresarse con notación


funcional, ası́:

D(0) = 0 (3.12)
D(n) = 4D(n − 1) + 3

3.2. Funciones recurrentes famosas


3.2.1. La sucesión de Fibonnaci
La sucesión de Fibonnaci es una sucesión que se atribuye a Leonardo Bonacci
(Fibonacci), y que aparece en su libro Liber Abaci (año 1202 D.C.). Sin embargo,
ahora se conoce que desde 200 años antes de cristo los matemáticos indios ya
conocı́an la sucesión.
La sucesión de Fibonaci está definida por las siguientes ecuaciones:

f (0) = 1

f (1) = 1
f (n) = f (n − 1) + f (n − 2).
La tabla que define la misma función es la siguiente

n 1 2 3 4 5 6 ...
f (n) f (0) f (1) f (0) + f (1) f (1) + f (2) f (2) + f (3) f (3) + f (4) ...
f (n) 1 1 2 3 5 8 ...
La sucesión cuando fue concebida por Fibonnaci, se concibió para modelar el
problema de la reproducción de unos conejos imaginarios. El problema radicaba
en encontrar cuantas parejas de conejos tendrı́a un criador de conejos, si iniciaba
con una pareja de conejos y la reproducción de conejos tenı́a las siguientes

32
Figura 3.1: Reproducción de conejos que sigue la secuencia de Fibonnaci. Los
conejos blancos son recién nacidos y los negros ya son maduros sexualmente.

condiciones: 1) los conejos son maduros sexualmente después de un mes; 2)


Cuando una pareja de conejos se aparea, tienen exactamente otra pareja de
conejos; 3) el periodo de gestación es 1 mes; 4) cada mes todas las parejas de
conejos maduros sexualmente se aparean.
La figura 3.1 muestra la evolución de los conejos que siguen las reglas de-
finidas arriba. En la figura los conejos recién nacidos tienen color blanco y los
conejos maduros sexualmente son de color negro. Cada pareja de conejos está
conectada por una lı́nea, estos conejos son monógamos, y siguen con su misma
pareja por toda su infinita vida. Al principio del primer mes, el criador tiene
una pareja de conejos recién nacidos. Al principio del segundo mes la pareja ya
es madura sexualmente y se aparean. Al principio del tercer mes la pareja tiene
una pareja de conejos, estos aún no son maduros sexualmente (por esto son blan-
cos), sus padres después de dar a luz se aparean nuevamente. Al principio del
cuarto mes la primera pareja da nuevamente a luz, y la segunda pareja que ya
es madura sexualmente, se aparea. Al principio del quinto mes, las dos parejas
que se aparearon el mes anterior, dan a luz, y la otra pareja alcanza su madurez
sexual, y se aparea. En el sexto mes, las tres parejas que se aparearon, dan a
luz, y las dos parejas que habı́an nacido el mes anterior, alcanzan su madurez
sexual, y se parean. La secuencia sigue infinitamente.
Note que en el dibujo utilizamos los naturales desde 1 para denominar a a
los meses. Sin embargo, en este libro siempre hablamos del primer término de

33
una función en los naturales como f (0). En otros textos usted puede encontrar
que se refieren al primer término como f (1) o a1 . También es normal que en
otras fuentes, no le pregunten por f (n), sino por an .
El estudio de las propiedades de la función de Fibonnaci ha probado ser muy
fructı́fero en ideas y aplicaciones. Por ejemplo, se sabe que cuando la secuencia
tiende a infinito la razón entre un término y el anterior ( f (n+1)
f (n) ) tiende a la
proporción áurea. Ası́, al definir una espiral con la secuencia de Fibonnaci se
puede encontrar una espiral similar a la espiral dorada. Muchos patrones en la
naturaleza se asemejan a estas espirales, por ejemplo, la forma de los brazos de
las galaxias en espiral (ver figura 3.2) y la forma de los huracanes. Este y otros
temas se dejan para que el lector los investigue y estudie.

Figura 3.2: La galaxia Messier 101 (M101, también conocida como NGC 5457
y denominada popularmente como galaxia ringlete). Se encuentra en la cons-
telación dela Osa Mayor y está a 21 millones de años luz de de distancia a la
tierra. Esta es una de las fotos más detalladas tomadas por el Hubble. Imagen
perteneciente a ESA/Hubble.

3.2.2. Factorial
El factorial de un número n se define como la multiplicación de los números
naturales menores o iguales a n y se escribe ası́: n!. Es decir el factorial de 5

34
está definido como
5! = 1 × 2 × 3 × 4 × 5 = 120.
Se puede hacer una definición recurrente para el factorial mediante las si-
guientes ecuaciones:

f actorial : N −→ N
f actorial(0) = 1
f actorial(n) = f actorial(n − 1) × n

Note que el factorial de 0 se define como 1.


Una aplicación interesante del factorial es que, si usted tiene un conjunto
de n elementos, usted puede ordenar estos elementos, sin repetir ninguno, de n!
maneras diferentes.

3.3. Recurrencia y problemas de conteo


La recurrencia es una estrategia que resulta exitosa para problemas en los
que se trata de contar el número de veces en que se puede presentar una situación
especı́fica. En estos casos, una instancia especı́fica del problema puede asociarse
con uno o unos pocos enteros positivos y a veces es posible plantear la solución.
Note que en todos los ejemplos que se mostrarán a continuación se usa
explı́citamente la estrategia de resolver un problema reduciéndolo a instancias
más simples del mismo problema (definición recurrente), hasta llegar a instancias
triviales del mismo (casos básicos de la recurrencia)

3.3.1. Recubrimiento de un tablero


Dado un tablero rectangular de 2×n casillas y fichas de tamaño 2×1 casillas,
contar de cuántas maneras es posible recubrir el tablero con las fichas dadas.

Tablero Ficha

Figura 3.3: ¿Cómo recubrir el tablero con fichas como la mostrada?

Para plantear una solución, es conveniente analizar algunos casos sencillos. Por
ejemplo, un tablero de 2 × 1 puede recubrirse con una ficha, colocándola
verticalmente. Es decir, de una manera.
Un tablero de 2 × 2 puede recubrirse con 2 fichas, de 2 maneras:
1. Ambas fichas verticales.

35
2. Ambas fichas horizontales.
Un tablero de 2 × 3 puede recubrirse con 3 fichas, de las siguientes maneras:
1. Colocar verticalmente las 3 fichas.
2. Colocar verticalmente la primera ficha y las dos restantes
horizontalmente.
3. Colocar las primeras 2 fichas horizontalmente y la tercera verticalmente.
De manera general, sea Rn el número de maneras en las que se puede recubrir
un tablero de 2 × n con fichas de 2 × 1. Note que hay 2 maneras de colocar la
primera ficha:
1. Si se coloca verticalmente, el problema se reduce a Rn−1 .
2. Si se coloca horizontalmente, la segunda ficha también debe colocarse ho-
rizontalmente y el problema se reduce a Rn−2 .
Resumiendo las observaciones anteriores,

R1 = 1
R2 = 2
Rn = Rn−1 + Rn−2 para n > 2

que puede escribirse de manera equivalente ası́:


(
n, si n = 1 o n = 2
Rn =
Rn−1 + Rn−2 , n > 2
que resulta ser la función de Fibonnaci.

3.3.2. Número de saludos en una reunión


A una reunión social asisten n personas. ¿Si cada una se saluda con las
demás. cuantos saludos en total se pueden dar?
Sea Sn el número de saludos posibles cuando hay n personas. Para una
persona, hay 0 saludos posibles. Para 2 personas hay 1 saludo posible. En el
caso general, la primera persona saluda a las demás (n − 1 saludos), a lo que
hay que sumar los saludos entre las otras n − 1 personas. Es decir,
(
0 n=1
Sn =
(n − 1) + Sn−1 n > 1

o también,

S(1) = 0
S(n) = (n − 1) + S(n − 1)

36
3.3.3. Número de comités
En un conjunto de n personas, cuántos comités de p personas se pueden
formar?.
Sea C(n, p) el número de comités posibles, de tamaño p, escogidos de un
conjunto de n personas. Note que:

Si se excluye una persona, con las (n − 1) personas restantes se pueden


conformar C(n − 1, p) comités de p personas.
La persona que fue excluida puede agregarse a cualquier comité de (p − 1)
personas y de esta manera armar más comités de p personas; es decir,
C(n − 1, p − 1) comités adicionales.

Entonces, en el caso general:

C(n, p) = C(n − 1, p) + C(n − 1, p − 1)

Finalmente,
No se pueden armar comités si se requieren más personas que las disponi-
bles en el grupo inicial.
Se puede armar exactamente un comité si se requieren tantas personas
como las disponibles en el grupo.
La definición completa es, entonces:

C(n, p) = 0 si p > n
C(n, n) = 1
C(n, p) = C(n − 1, p) + C(n − 1, p − 1) en otro caso

3.3.4. Subiendo escaleras


Al subir escaleras, un niño sube escalón por escalón o de dos en dos escalones
de manera indistinta; es decir, el número de escalones al dar el paso es inde-
pendiente del número de escalones subidos en el siguiente paso. Encuentre una
relación de recurrencia de segundo orden para el número de formas que existen
para subir n escalones.
Sea En el número de maneras de subir una escalera de n escalones como lo
hace el niño.

Para n = 1 solo hay una manera de subir la escalera: dar un paso de un


escalón. Es decir, E1 = 1.
Para n = 2 hay dos maneras: (1, 1) y (2). Es decir, E2 = 2

En el caso general, cuando restan n escalones, el niño puede:

37
Subir un escalón y continuar con cualquiera de las soluciones cuando restan
n − 1 escalones; es decir, En−1 .
Subir 2 escalones y seguir con cualquiera de las soluciones cuando restan
n − 2 escalones; es decir, En−2 .

La definición recurrente correspondiente es:


(
n n <= 2
En =
En−1 + En−2 en otro caso

que también puede escribirse ası́:

E(0) = 0
E(1) = 1
E(2) = 2
E(n) = E(n − 1) + E(n − 2) en otro caso

3.4. Ejercicios
1. Calcule los primeros 5 términos de las siguientes funciones recurrentes:
a) f (0) = 2; f (1) = 5; f (n) = f (n − 1) + f (n − 2).
b) f (0) = 3; f (1) = 5; f (n) = f (n − 1) × f (n − 2).
c) f (0) = 1; f (1) = 3; f (2) = 2; f (n) = f (n − 1) × f (n − 3).
d ) f (0) = 1; f (1) = 3; f (n) = f (n − 1) × f (n − 2) × ((−1)n ).
e) f (0) = 1; f (1) = 3; f (n) = f (n − 1) × f (n − 2) × ((−1)n ).
2. Calcule los 10 primeros términos generados por las siguientes ecuaciones
de recurrencia. Los casos base —para las ecuaciones que los necesiten—
son:
a(0) = 1, a(1) = 2, a(2) = 2, a(3) = 3, a(4) = 4

Si para alguna ecuación se necesitan más casos bases defı́nalos.


a) a(n) = n(n + 1)/2
b) a(n + 1) = a(n) + 3 × a(n − 1)
c) a(n + 7) = a(n + 5) + 3 × a(n + 6)
d ) a(n) = a(n − 1) + 2 × a(n − 2) + 3 × a(n − 2)
3. Considere la siguiente sucesión:
El valor en la primera posición de la sucesión (posición 0) es 0.
El valor en las posiciones pares de la sucesión es el doble de su ante-
cesor más uno.

38
El valor en las posiciones impares de la sucesión es el doble de su
antecesor menos uno.

a) Defina la sucesión mediante ecuaciones de recurrencia.


b) Calcule los primeros 10 términos (valores) de la sucesión.

4. Para cada una de las siguientes sucesiones encuentre una función recu-
rrente que la defina:
a) 1, 3, 5, 7, 9, 11, 13, ...
b) 4, 7, 10, 13, 16, 19, ...
c) 2, 3, 5, 8, 13, 21, 34, ...
d ) 4 ,8 16, 32, 64, 128, ...
e) 1, 3, 9 , 27, 81, ...
f ) 2, 3, 6, 18, 108, 1944,...
g) 2, 3, 10, 34, 344, 11700, ...
h) 1, 2, 3, 4, 16, 65536,...
i ) 2, 10, 50, 250, 1250, 6250, 31250, ...
j ) 6, -18, 54, -162, 486, -1458, 4374, ...
5. Encontrar el patrón de generación de las siguientes sucesiones y expresarlo
mediante una fórmula. Use an como término genérico de cada sucesión.
No olvide definir los casos base que hagan falta(extraı́do de [2]):
a) 1, 1, 3, 5, 11, 21, 43, 85, 171, 341, 683, 1365, 2731, 5461, 1092, . . .
b) 1, 1, 4, 4, 7, 7, 10, 10, 13, 13, 16, 16, 19, 19, 22, . . .
c) 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, . . .
d ) 1, 7, 16, 28, 43, 61, 82, 106, 133, 163, 196, 232, 271, 313, . . .
e) 2, 8, 17, 29, 44, 62, 83, 107, 134, 164, 197, 233, 272, 314, . . .
f ) 0, 1, 2, 5, 12, 29, 70, 169, 408, 985, 2378, 5741, 13860, . . .
g) 1, 2, 6, 16, 44, 120, 328, 896, 2448, 6688, 18272, 49920, . . .
h) 1, 10, 101, 1010, 10101, 101010, . . .
i ) 6, 57, 567, 5667, 56667, 566667, 5666667, 56666667, 566666667, 5666666667, 56666666667, . . .
j ) 11, 121, 1221, 12221, 122221, 1222221, 12222221, 122222221, 1222222221, 12222222221, . . .
6. Suponga que definimos la función sucesor de la siguiente manera

S(x) = x + 1

39
Ahora suponga que definimos una función recursiva para la multiplicación
con las siguientes ecuaciones

mult(x, 0) = 0
mult(x, S(y)) = suma(mult(x, y), x)
suma(x, 0) = x
suma(x, S(y)) = S(suma(x, y))

a) Muestre cómo calcuları́a mult(3, 2) paso a paso usando recurrencia.


b) Ahora suponga que definimos la función p de manera recursiva usando
las funciones de arriba y las siguientes ecuaciones

p(x, 0) = 1
p(x, S(y)) = mult(p(x, y), x)

Complete la tabla de p para los primeros 5 naturales


c) ¿Cuál cree que es esta función p?
7. Los préstamos con interés compuesto funcionan de la siguiente manera:
Al comenzar, el acreedor (un banco por ejemplo) le presta una can-
tidad d de dinero (el capital inicial) al deudor (un cliente del banco).
Cada vez que transcurre un mes, la deuda se incrementa por un
factor i (la tasa de interés), que se aplica al total adeudado. Por
ejemplo, si en un mes se adeudan 1000 pesos y la tasa de interés
es de 0,02, al comenzar el siguiente mes, la deuda se incrementa en
(1000 × 0,02 = 20) pesos..
Igualmente, cada vez que transcurre un mes, el deudor debe abonar
(pagar) una cantidad fija de dinero c (la cuota), lo cual disminuye
la deuda. Esta disminución se aplica después de aplicar la tasa de
interés del mes.

a) Plantee una ecuación de recurrencia que permita calcular la cantidad


adeudada al cabo de n meses para un préstamo que se inicia con un
capital de d pesos, con una tasa de interés i y con una cuota mensual
c, suponiendo naturalmente que el deudor nunca se atrasa con las
cuotas.
b) Utilizando su ecuación calcule, con 2 decimales, el valor de la deuda
en el mes 3, para los siguientes valores:

8. La división entera entre números naturales (cuántas veces “cabe” un núme-


ro en otro) se puede calcular restando repetidamente el divisor del divi-
dendo siempre que el dividendo sea mayor o igual que el divisor.

a) Defina la función recurrente div(n, m) que calcula división entera de


n por m. Recuerde que la división por cero está indefinida.

40
b) Defina la función recurrente residuo(n, m) que calcula el residuo de
la división entera de n por m.
9. La evolución de dos especies que comparten un mismo territorio viene
dada por el sistema de ecuaciones

xt+1 = 2xt − 3yt


yt+1 = xt − 2yt

donde xt , yt representan el número de animales de la primera y segunda


especie en el año t.
a) Defina los casos base que hagan falta para que el sistema de ecuacio-
nes quede completo.
b) Suponiendo que la evolución comienza en el año 0, calcule, usando
sus casos base, la población de individuos de la primera especie al
cabo de 5 años.
c) Cambie el sistema de ecuaciones por uno equivalente pero en el que
el subı́ndice que aparece en el lado izquierdo de las ecuaciones sea t
y no t + 1.
10. La población de la ciudad de “La Ronda” al final de cada año es propor-
cional a la población al comienzo del mismo año.

a) Si en el año 2016 la población se incrementó de 50.000 a 75.000 ha-


bitantes, proponga una ecuación de recurrencia que permita calcular
la población en los años posteriores a 2016.
b) ¿Cuál será la población en el año 2025?

11. En la figura siguiente se muestra una sucesión de triángulos de bolitas. Sea


Ti el número de bolitas del i−ésimo triángulo de la sucesión, el cual, como
se ilustra en la figura, tiene i bolitas por lado. Proponga una ecuación de
recurrencia para Ti . Estos números se llaman triangulares.

41
12. En la siguiente serie de figuras se generan números contando los puntos
resaltados. Estos números se llaman números pentagonales. Proponga una
ecuación de recurrencia que permita generar estos números.

13. En un experimento se están utilizando dos tipos de bacterias las cuales se


aı́slan en una cápsula experimental. A cada segundo una bacteria tipo A
se dividirá en dos bacterias tipo B, y una tipo B se dividirá en dos tipo A y
una tipo B. Suponga que las bacterias no mueren durante el experimento.

a) Si al iniciar el experimento, momento t0 , se colocan exactamente dos


bacterias una de tipo A y una de tipo B en la cápsula experimental,
encuentre la ecuación de recurrencia que permita determinar cuántas
bacterias hay el segundo n: tn .
b) Evalúe la función para n ∈ {5, 7}
c) Cómo cambian los resultados pedidos si al inicio del experimento se
colocan 2 bacterias de tipo A?.

14. En cierta variedad hipotética de planta arbórea, la cantidad de crecimiento


nuevo logrado a lo largo de un año dado es exactamente igual a la cantidad
de crecimiento logrado el año anterior. Sea tn la longitud total de todas las
ramas al cabo de n años. Escriba una ecuación de recurrencia que describa
tn y calcule t13 .
15. Existen dos tipos de partı́culas dentro de un redactor nuclear. Cada se-
gundo una partı́cula tipo A se dividirá en dos partı́culas tipo B, y una
partı́cula B se dividirá en una partı́cula A y dos partı́culas B. Si sólo hay
una partı́cula A en el reactor en el instante t=0, ¿cuántas partı́culas hay
en total para t= 3, t=10, t=20 t=1000? (extraı́do de [2]).
16. Se tienen 3 tipos de cajas : negras, blancas y rojas. Las cajas negras
tienen 1 metro de altura, las cajas blancas 2 metros, las cajas rojas 3
metros. Suponiendo que se dispone de tantas cajas como sean necesarias,
se quieren armar torres de n metros de altura.

a) Defina una función recurrente que permita calcular cuántas torres


distintas de n metros de altura se pueden formar con estas cajas.
b) Defina una función recurrente que permita calcular el número de
torres que se pueden armar utilizando únicamente cajas negras y
rojas.

42
17. Se apilan fichas de colores amarillo, verde, azul blanco, rojo. Encontrar el
número de formas de apilar n fichas sin que queden la roja al inicio y la
combinación roja-azul- verde. (extraı́do de [2]).

43
Capı́tulo 4

Demostraciones

4.1. Introducción
En este capı́tulo se hace una introducción a conceptos relacionados con de-
mostración y se describen algunos métodos que permiten construir demostracio-
nes. Entender estos métodos son de gran ayuda para los matemáticos y a todos
los que trabajamos en computación.
Una demostración, es una argumentación valida que permite establecer
la verdad de una proposición. Las demostraciones son de gran importancia en
el mundo de las matemáticas y en diversos campos de aplicación de la compu-
tación. Por ejemplo: se puede hacer verificación matemática para garantizar que
los programas de computación son correctos, que la seguridad de los sistemas no
son vulnerables, garantizar consistencia en los métodos utilizados en inteligencia
artificial, entre otras aplicaciones.
Un teorema, es una proposición que puede ser demostrada como verdade-
ra. Para demostrar que una proposición es un teorema, se debe hacer medio de
una demostración. Los teoremas se pueden ver como hechos o resultados vali-
dos que pueden ser utilizados. En el desarrollo de la demostración se utilizan
argumentaciones, las cuales pueden ser: axiomas, premisas u otros teoremas ya
demostrados anteriormente. Un axioma o premisa es una sentencia que se
asume como cierta. En cada uno de los pasos de la demostración, se aplican
reglas de inferencia las cuales permiten obtener conclusiones intermedias a
partir de las premisas anteriores. El ultimo paso de la demostración corresponde
a la conclusión final, es decir, al teorema.
Algunos otros conceptos, no menos importantes, se encuentran en el mundo
de las demostraciones matemáticas. Un lema es un teorema de menor importan-
cia. Por otro lado, un corolario es un teorema que se puede deducir fácilmente
a partir de un teorema que ya ha sido demostrado. Finalmente, a partir de indi-
cios u observaciones se puede tener una conjetura, la cual es una proposición
que no ha sido demostrada. Cuando se encuentra un caso especifico en el cual
una proposición es falsa, esto se considera un contraejemplo, conllevando a

44
conjeturas falsas y también a proposiciones que no son teoremas.
A continuación se presentan algunos métodos que permiten demostrar teo-
remas, estos métodos presentan una estrategia útil a la hora de hacer demostra-
ciones. La elección del método depende de usted, de su experiencia y su astucia
a la hora de enfrentarse a una demostración matemática.

4.2. Métodos de demostración


4.2.1. Demostración directa
La demostración directa es la más natural. A partir de diferentes hipótesis
(premisas) H1 , H2 , H3 , ..., Hn , se llega a la conclusión C. Es decir, a partir de
las hipótesis se logra demostrar la veracidad de la conclusión C:

H1 ∧ H2 ∧ H3 ∧ ... ∧ Hn ⇒ C
Duante el desarrollo de la demostración se hace uso de axiomas, premisas,
teoremas ya demostrados, y aplicando reglas de inferencia se logra llegar a la
conclusión C.

Ejemplo 4.2.1. Demostrar el siguiente teorema: “si n es un número entero


impar, entonces n2 es impar”.
Demostración. Vamos a asumir (hipótesis) que n es un número entero impar,
es decir, existe un número entero k, tal que:

n = 2k + 1 (4.1)

Ahora vamos a calcular el valor de n2 , haciendo uso de (4.1):

n2 = (k + 1)2 = 4k 2 + 4k + 1 = 2(2k 2 + 2k) + 1 (4.2)

Aplicando la definición de número impar en (4.2), se puede ver que p es


número entero, tal que p = (2k 2 + 2k), es decir:

n2 = 2p + 1 (4.3)

Con base en lo anterior, se demuestra que n2 es número entero impar.


Durante el desarrollo de la demostración anterior, las reglas inferencia apli-
cadas, corresponden a aplicar de forma correcta métodos de la aritmética.
Ejemplo 4.2.2. Demostrar que la suma de dos números impares a y b, da como
resultado un número par.
Demostración. Vamos a asumir que a y b son números impares, es decir, existen
números enteros p y q, tal que:

a = 2p + 1 y b = 2q + 1 (4.4)

45
Ahora se procede a hacer la suema entre a y b, haciendo uso de (4.4):

a + b = (2p + 1) + (2q + 1) = 2p + 2q + 2 = 2(p + q + 1) (4.5)

Teniendo en cuenta la definición de número par en (4.5), se puede ver que


r es número entero, tal que r = (p + q + 1), es decir:

a + b = 2r (4.6)

Con base en lo anterior, se demuestra que la suma de dos números impares a y


b, da como resultado un número par.

Inducción matemática
Uno de los métodos de demostración directa más utilizados en las matemáti-
cas e informática es la inducción matemática. La inducción matemática per-
mite establecer la veracidad de una propiedad P en todos los elementos de un
conjunto infinito.
Por ejemplo, si tenemos los números N = {0, 1, 2, 3, 4, ...}, y consideramos P
como una propiedad en todos los números naturales, el objetivo es demostrar
que P (k) es verdadera para todos los k ∈ N, es decir, que cada k satisface la
propiedad P . Hay que demostrar que P (0) es verdadero y además que P (1),
P (2), P (3), P (4), y ası́ sucesivamente para los infinitos elementos de N.

El principio de inducción matemática indica que si las dos condiciones


siguientes son ciertas, entonces se ha demostrado que todos los elementos del
conjunto satisfacen la propiedad P :
1. Caso base: Hay que demostrar que 0 satisface la propiedad P , es decir,
hay que demostrar que P (0) es verdadera.
2. Caso inductivo: Se supone que n satisface la propiedad P , entonces hay
que demostrar que n + 1 también tiene la propiedad P . Es decir, si P (n)
es verdadera, entonces P (n + 1) también debe ser verdadera.
La suposición de que P (n) es verdadera, se conoce como la hipótesis de
inducción.
Luego de hacer la demostración del caso base y caso inductivo, se demuestra
que determinada propiedad P se cumple en todos los elementos de un conjunto.
Fı́jese que con tan solo dos demostraciones se logra demostrar la veracidad de
la propiedad P en los infinitos elementos del conjunto. Ahora, ¿este principio
tiene sentido?, reflexione con el siguiente ejemplo.
Se tienen n fichas de domino una tras otra en hilera, el objetivo es derri-
bar todas las fichas, dando un leve empujón a la primera, logrando un “efecto
domino”. Para garantizar que todas la n fichas se derriben se puede aplicar el
principio de inducción, la propiedad P (n) para este problema se puede definir
como:

46
P (n) : La ficha n-ésima se caiga

Es importante garantizar que todas las n fichas cumplan la propiedad P .


Aplicando el principio, hay que garantizar el caso base, es decir, P (0) tiene
que cumplirse, esto quiere decir que la primera ficha de la hilera se cae. Ahora, el
caso inductivo se debe suponer P (n), lo cual corresponde a decir que la ficha
n-ésima se cae, ahora el problema está en demostrar P (n + 1), lo cual equivale a
garantizar que la ficha n-ésima+1 se cae, si esto ocurre sucesivamente con todas
las fichas de la hilera, se puede garantizar que sin importar el número de fichas,
siempre se van a derribar todas las fichas.
Ahora, desde el punto de vista matemático, podemos razonar de la siguiente
manera. Por medio del caso base demostramos que P (0) es verdadera, es decir
que la propiedad es verdadera para 0. Ahora al demostrar el paso inductivo,
demostramos que si P (n) es verdadero entonces P (n + 1) es también varadero.
Considerando las dos demostraciones anteriores, sabemos que P (0) es verdadero
(por demostración del caso base), y entonces, considerando n = 0 y n + 1 = 1,
por la demostración del paso inductivo podemos inferir que P (1) es verdadero.
De manera similar, si ya sabemos que P (1) es verdadero, por medio del paso
inductivo podemos hacer n + 1 = 2 y por lo tanto P (2) es verdadero. Y ası́
sucesivamente, siguiendo este razonamiento, se prueba que P (n) es varadera
para todos los naturales.
En el razonamiento anterior tomamos como caso base P (0), pero no nece-
sariamente el caso base tiene que estar definido en 0. Algunas propiedades de
las que veremos más adelante, se cumplen desde determinado numero menor
n, por ejemplo 4. En estos casos se hace la demostración del caso base igual a
P (4), y luego se demuestra el caso inductivo. En este caso, lo único que cambia
en el argumento de la demostración es el caso base. El resto se mantiene de la
misma manera, es decir, aparte del caso base hay que demostrar que si P (n) es
verdadero, entonces P (n + 1) es verdadero.
A continuación algunos ejemplos de demostración por inducción matemática.
Teorema 4.2.1. Demostrar que la propiedad M (n), se cumple para todo n ≥ 1,

n(n + 1)
M (n) : 0 + 1 + 2 + 3 + ... + n = (4.7)
2
Utilizando la notación Σ, se puede representar la sumatoria de la parte iz-
quierda de la ecuación (4.7), de la siguiente manera:
n
X
0 + 1 + 2 + 3 + ... + n = i (4.8)
i=0

Teniendo en cuenta la ecuación (4.8), el teorema a demostrar se puede


escribir de la siguiente manera:
n
X n(n + 1)
M (n) : i= (4.9)
i=0
2

47
Demostración. Caso base: Hay que demostrar que se cumple la propiedad M
para n = 1, es decir, M (1) es verdadero. La ecuación (4.8) corresponde a
una igualdad, vamos a calcular por separado los dos lados de la igualdad y al
final debemos encontrar que los dos lados son iguales, comencemos con el lado
izquierdo
1
X
L.I : i=0+1=1 (4.10)
i=0

ahora calculamos el lado derecho ecuación (4.8)

n(n + 1) 1(1 + 1) 1(2)


L.D : = = =1 (4.11)
2 2 2
Como los valores encontrados a cada lado de la ecuación (4.8) son iguales,
entonces queda demostrado M (1).
Caso inductivo: Vamos a suponer que la propiedad M se cumple para el
valor n, es decir, que la siguiente igualdad es verdadera
n
X n(n + 1)
M (n) : i= (4.12)
i=0
2

Recordemos, la ecuación (4.12) corresponde a nuestra hipótesis de inducción.


Ahora, suponiendo la hipótesis de inducción se procede a demostrar que n + 1
cumple la propiedad M , ahora hay que demostrar
n+1
X (n + 1)(n + 2)
M (n + 1) : i= (4.13)
i=0
2

Comencemos con el lado izquierdo de la ecuación (4.13)

n+1
X
i = 0 + 1 + 2 + ... + n + (n + 1)
i=0
n(n + 1)
= + (n + 1), ((Aplicando la H.I))
2 (4.14)
n(n + 1) + 2(n + 1)
=
2
(n + 2)(n + 1)
=
2
Fı́jese que partimos de lado izquierdo de la ecuación (4.13), aplicando proce-
dimientos matemáticos y utilizando la hipótesis de inducción llegamos directa-
mente al lado derecho de la ecuación (4.13). Es decir, hemos demostrado que
n + 1 satisface la propiedad M .
Luego de demostrar el caso base y el caso inductivo, hemos demostrado que
el teorema (4.9) es verdadero.

48
Teorema 4.2.2. Demostrar que la propiedad G(n) se cumple para todo n ≥ 1,
n
X n(n + 1)(2n + 1)
G(n) : i2 = (4.15)
i=1
6

Demostración. Caso base: Hay que demostrar que para n = 1 se cumple la


propiedad G, es decir, hay que que G(1) es verdadera. Ası́, primero calculamos
el lado izquierdo de la ecuación (4.15)
1
X
i2 = 12 = 1, (4.16)
i=1

luego calculamos el lado derecho de la ecuación

n(n + 1)(2n + 1) (1 × (1 + 1)) × ((2 × 1) + 1) 6


= = = 1.
6 6 6
Como los dos valores son iguales, entonces queda demostrada la propiedad G
para para n = 1.
Caso inductivo: Vamos a suponer que n satisface la propiedad G, es decir
se tiene como hipótesis de inducción
n
X n(n + 1)(2n + 1)
G(n) : i2 = . (4.17)
i=1
6

Tenemos que suponer que lo anterior es verdadero entonces, n + 1 satisface la


propiedad G, es decir, que la siguiente igualdad también es verdadera
n+1
X (n + 1)((n + 1) + 1)(2(n + 1) + 1)
G(n + 1) : i2 = . (4.18)
i=1
6

n+1
X (n + 1)(n + 2)(2n + 3)
G(n + 1) : i2 = . (4.19)
i=1
6
Ahora vamos a demostrar el caso inductivo, para esto comenzamos por el
lado izquierdo de la ecuación 4.19

49
n+1
X
i2 = (12 + 22 + 32 + ... + n2 ) + (n + 1)2
i=1
n
!
X
2
= i + (n + 1)2
i=1
 
n(n + 1)(2n + 1)
= + (n + 1)2 , ((Aplicando la H.I))
6
n(n + 1)(2n + 1) + 6(n + 1)2
= (4.20)
6
(n + 1) [n(2 + 1) + 6(n + 1)]
=
 6 
(n + 1) 2n2 + n + 6n + 6
=
6
(n + 1)(2n2 + 7n + 6)
=
6
(n + 1)(n + 2)(2n + 3)
=
6
Partimos del lado izquierdo de la ecuación 4.19 y aplicando procedimientos
matemáticos y la hipótesis de inducción, hemos llegado al lado derecho de la
ecuación 4.19, quedando demostrado por completo la igualdad, es decir, hemos
demostrado que el caso inductivo se cumple.
En los ejercicios anteriores los procedimientos matemáticos se hicieron con
todo el detalle sobre las expasiones y factorizaciones, sin embargo a medida que
avancemos se omitirán algunos pasos y el estudiante deberá verificarlos por si
mismo.
En el siguiente ejercicio vamos a retomar la definición de los números de
Fibonacci, estudiados secciones atrás, recordemos. Los números de Fibonacci
de definen para todo número natural n de la siguiente manera:
f (0) = 1
f (1) = 1
f (n) = f (n − 1) + f (n − 2)
Ejemplo 4.2.3. Para cualquier n ≥ 0, demuestre que la función f de Fibonacci
satisface la siguiente propiedad:
H(n) : f (0) + f (2) + f (4) + ... + f (2n) = f (2n + 1) − 1 (4.21)
Demostración. Caso base: Hay que demostrar que para n = 0 se cumple la
propiedad H, es decir, hay que que H(0) es verdadera. Procedemos a calcular
el lado izquierdo de la ecuación (4.21)
LI : f (0) = 1 (4.22)

50
ahora calculamos el lado derecho de la ecuación

LD : f (2(0) + 1) − 1 = f (1) − 1 = 1 − 1 = 0 (4.23)

Los dos valores son iguales para los dos lados, entonces queda demostrada la
propiedad H para n = 0.
Caso inductivo: Vamos a suponer que n satisface la propiedad H, es decir
se tiene como hipótesis de inducción

H(n) : f (0) + f (2) + f (4) + ... + f (2n) = f (2n + 1) − 1 (4.24)

Ahora suponiendo la hipótesis de inducción, hay que demostrar que n+1 satisfa-
ce la propiedad H, vamos a sustituir n por n + 1 en la ecuación 4.24, obteniendo

H(n+1) : f (0)+f (2)+f (4)+...+f (2n)+f (2(n+1)) = f (2(n+1)+1))−1 (4.25)

simplificando:

H(n + 1) : f (0) + f (2) + f (4) + ... + f (2n) + f (2n + 2) = f (2n + 3) − 1 (4.26)

Ahora vamos a demostrar el caso inductivo, para esto comenzamos por el lado
izquierdo de la ecuación 4.26

f (0) + f (2) + f (4) + ... + f (2n) + f (2n + 2) = f (2n + 1) − 1 + f (2n + 2), ((H.I))
= f (z + 1) − 1 + f (z + 2), ((z=2n))
= f (z + 2) + f (z + 1) − 1
= f (z + 3) − 1, ((def f(z+3)))
= f (2n + 3) − 1, ((z=2n))
(4.27)

Luego de partir del lado izquierdo de la ecuación 4.27 y aplicando procedimien-


tos matemáticos, la definición de Fibonacci y la hipótesis de inducción, hemos
llegado al lado derecho de la ecuación 4.27, de esta manera se demuestra por
completo que la propiedad H se cumple para cualquier n ≥ 0.

4.2.2. Demostración indirecta


Cómo se explicó en la sección anterior, la demostración directa permite par-
tir de las premisas y por medio de varios pasos válidos llegar a la conclusión,
mediante el proceso de deducción. En algunas ocasiones a partir de las premi-
sas se llega a una especial de encrucijada, algo como un “callejon sin salida”.
Por tal razón, surgen otras técnicas basadas en demostración indirecta. En
las siguientes secciones se explican las técnicas de demostración indirecta más
utilizadas.

51
Demostración por contradicción
La demostración por contradicción, parte de suponer que la conclusión es
falsa y las premisas verdaderas y el objetivo es llegar a demostrar que esto
conduce a algo absurdo, llamado una contradicción, es decir:
¬C ∧ H1 ∧ H2 ∧ H3 ∧ ... ∧ Hn ⇒ absurdo
De esta manera se demuestra que la conclusión C no puede ser falsa, por
lo tanto, C tiene que ser conclusión a partir de las hipótesis H1 , H2 , H3 , ..., Hn .
Esta técnica también es conocida con el nombre de reducción al absurdo.
Ejemplo 4.2.4. Demostrar el siguiente teorema: “si n es un número entero y
3n + 2 es par, entonces n es par”.
Demostración. Vamos a identificar las hipótesis y la conclusión: H1 : “n es un
entero”, H2 : “3n + 2 es par” y C : “n es par”. Vamos a demostrar el teorema
por contradicción, es decir, vamos a suponer que H1 , H2 y ¬C son ciertas, y
debemos llegar a algún absurdo.
Con base en las tres suposiciones se tiene: “n es un entero”, “3n + 2 es par”
y “n no es par”, la ultima hipótesis, es igual a suponer que “n es impar”.
Cómo n es impar, entonces existe un entero k tal que, n = 2k + 1. Esto
permite reescribir la H2 de la siguiente manera:

3n + 2 = 3(2k + 1) + 1, ((suposición n es un entero impar))


= 6k + 3 + 2, ((aritmética))
= 6k + 5, ((aritmética))
(4.28)
= 6k + 4 + 1, ((aritmética))
= 2(3k + 2) + 1, ((factor común))
= 2t + 1, ((se asume que t = 3k + 2))
Con base en lo anterior, se tiene que: 3n + 2 = 2t + 1, es decir, 3n + 2 es impar,
lo cual es un absurdo, pues contradice la H2 , llegando ası́ a una contradicción.
Por lo tanto, ¬C no puede ser cierta, concluyendo ası́ la veracidad de C a partir
de H1 y H2 .
Ejemplo 4.2.5. Demostrar el siguiente teorema: “si a > 1, entonces a < a2 ”.
Demostración. La demostración se realizará por contradicción, vamos a suponer
la hipótesis, H1 : “a > 1” y la negación de la conclusión, C : “a < a2 ”, es decir,
¬C : “a ≥ a2 ”. Ahora vamos a partir de está ultima suposición:

a ≥ a2 , ((suponer ¬C))
a − a2 ≥ 0, ((aritmética))
a(1 − a) ≥ 0, ((factor común)) (4.29)
a ≥ 0 y 1 − a ≥ 0, ((aritmética))
a ≥ 0 y 1 ≥ a, ((aritmética))

52
En el ultimo paso se encuentra una contradicción con H1 , pues partimos del
hecho de suponer que a > 1 y llegamos a un absurdo, a ≤ 1. Quedando ası́
demostrado el teorema por contradicción.

Demostración por contrapositiva


La demostración por contrapositiva, parte de suponer que la conclusión es
falsa y se debe llegar a que la negación de todas las premisas son verdaderas, es
decir:

¬C ⇒ ¬(H1 ∧ H2 ∧ H3 ∧ ... ∧ Hn )

Esta técnica surge de una equivalencia lógica que se estudiará más adelante.
Por ahora, se ilustrará con un ejemplo simple para dar más claridad. Suponga-
mos que la siguiente afirmación es verdadera: “Si está lloviendo, entonces el cielo
está oscuro”, al aplicar la contrapositiva se tiene: “Si el cielo no está oscuro,
entonces no está lloviendo”. Esta segunda afirmación es verdadera, y “lógica-
mente” tiene sentido, si pensamos en la conexión natural que existe entre llover
y el estado del cielo.
A continuación se presenta un ejemplo donde se hace la demostración por
contrapositiva. Una vez se plantea la nueva expresión negando la conclusión y
negando las hipótesis se procede a hacer la demostración de forma directa.
Ejemplo 4.2.6. Demostrar el siguiente teorema: “si n es un número entero y
3n + 2 es impar, entonces n es impar”.
Demostración. Aplicando la contrapositiva al teorema anterior se tiene que: “si
n no es impar, entonces 3n + 2 no es impar”, es decir, basta con demostrar:
“si n es par, entonces 3n + 2 es par”. Esta ultima proposición se demostrará de
forma directa.
Cómo n es par, entonces existe un entero k tal que, n = 2k, teniendo:

3n + 2 = 3(2k) + 2, ((suposición n es un entero par))


= 6k + 2, ((aritmética))
(4.30)
= 2(3k + 1), ((factor común))
= 2t, ((se asume que t = 3k + 1))

Con base en lo anterior, se tiene que: 3n + 2 = 2t, por lo tanto 3n + 2 es número


par. Demostrando ası́ por contrapositiva el teorema inicial: “si n es un número
entero y 3n + 2 es impar, entonces n es impar”.

4.3. Ejercicios
1. Demostrar la veracidad de los siguientes enunciados por medio de la de-
mostración directa:

53
a) La suma de dos números enteros pares es par.
b) El producto de un número entero par por uno impar es par.
c) El cuadrado de un número par es un número par.
d ) El producto de dos números impares es impar.
e) Si m y n son números cuadrados, entonces mn también es un número
cuadrado.
2. Demuestre o refute los siguientes enunciados:
a) La suma de dos números pares es siempre par.
b) La suma de tres números enteros consecutivos es divisible por tres.
c) Sean m y n números pares, entonces 6m + 8n es par.
d ) Si n es un cuadrado perfecto, entonces n + 2 es un cuadrado perfecto.
3. Se quiere demostrar que 2 = 1, encuentre el paso que tiene el error:
P1: Considere esta ecuación como verdadera a = b
P2: multiplique ambos lados por a para obtener a2 = ab
P3: Reste b2 de ambos lados para obtener, a2 − b2 = ab − b2
P4: factorice ambos lados, (a + b)(a − b) = b(a − b)
P5: divida cada lado por (a − b) para obtener, a + b = b
P6: Ahora haga a = b = 1, y por lo anterior queda probado que 2 = 1
4. Considere las siguientes funciones en los naturales

s(n) = 1 + 2 + 3 + 4 + 5 + ... + n

c(n) = 13 + 23 + 33 + 43 + 53 + ... + n3 ,
pruebe por inducción lo siguiente

a) s(n) = 21 n(n + 1).


b) c(n) = 14 (n4 + 2n3 + n2 ) = 14 n2 (n + 1)2 .
c) Puebe por cualquier método que c(n) = (s(n))2 .
5. Igualdad: pruebe por inducción las siguientes propiedades en los naturales

a) A(n): 12 + 22 + 32 + ... + n2 = 31 n(n + 1)(n + 12 )


b) B(n): 13 + 33 + 53 + ... + (2n − 1)3 = n2 (2n2 − 1)
1 1 1 n
c) C(n): 1×3 + 3×5 + ... + (2n−1)×(2n+1) = 2n+1

6. Divisibilidad: utilice el principio de inducción matemática para demostrar

54
a) Si n número natural entonces n3 − n es divisible por 6. Es decir,
n3 − n = 6 × m donde m ∈ N (Esta es la definición de ser múltiplo
de 6, z es múltiplo de 6 si existe un número natural que multiplicado
por 6 sea igual a z).
b) Si n es natural entonces n × (n + 1) es par.
c) n es natural entonces n3 + 2n es divisible por 3.
d ) n es natural entonces 7n − 2n es divisible por 5.
7. Desigualdad: utilice el principio de inducción matemática para demostrar
a) Si n es natural y n > 0 entonces 2(n + 2) ≤ (n + 2)2 .
b) Si n es natural y n > 3 entonces 3n ≥ n3 .
8. Fibonacci: pruebe por inducción las siguientes propiedades utilizando la
definición de número de Fibonacci
a) T(n): f (0) + f (1) + ... + f (n) = f (n + 2) − 1
b) P(n): f (1) + f (3) + ... + f (2(n − 1) + 1) = f (2n)
c) J(n): f (n)2 − f (n + 1)f (n − 1) = (−1)n+1
9. Contradicción: demuestre los siguientes teoremas utilizando la técnica por
contradicción
a) Si n es un entero y n3 + 5 es impar, entonces n es par.
b) Si n es un entero y 3n + 2 es par, entonces n es par.
c) Sean m, n números naturales. Si mn es impar, entonces m y n son
impares.

d ) 3 es un número irracional.
e) La raı́z cuadrada de algún número irracional siempre es racional.
10. Contrapositiva: demuestre los siguientes teoremas utilizando la técnica por
contrapositiva
a) Si n es un entero y n3 + 5 es impar, entonces n es par.
b) Si n es un entero y 3n + 2 es par, entonces n es par.
c) Si la suma de dos números reales es menor que 50, entonces al menos
uno de los números es menor que 25.

55
Capı́tulo 5

Autómatas y
computabilidad

¿Qué exactamente es calcular o computar? Esta pregunta la realizaron


los matemáticos cuando inició el estudio de los fundamentos de la matemática y
de la forma que razonaban los seres humanos (Principios del S. XX y finales del
XIX). En 1936 Alan Turing, en un artı́culo trascendental para la ciencia de la
computación [3], planteó dos ideas fundamentales para estudiar esta pregunta:
Turing, decidió concentrarse en una versión más restringida de la pregunta,
y se cuestionó: ¿Qué son los números computables?.

Luego, para responder esta pregunta, definió que un número era compu-
table si su parte decimal podrı́a ser escrita por una máquina.
Con estas premisas Alan Turing propuso una máquina abstracta que podı́a
computar números, y conjeturó que siguiendo los mismos principios se podrı́an
estudiar las funciones computables e incluso predicados computables. La técnica
de utilizar máquinas abstractas para estudiar lo que es computable, es decir los
que puede o no hacer un computador, es una premisa fundamental para entender
la teorı́a de la computación que desarrollaremos.
En este capı́tulo acogeremos las premisas planteadas por Turing, y estudia-
remos la computabilidad por medio de tres máquinas o mecanismos de computo
abstractos: los autómatas finitos, las gramáticas libres de contexto y las Máqui-
nas de Turing. Cada una de estas máquinas abstractas le permitirá resolver
problemas cada vez más complejos. Es importante anotar que los computadores
más potentes que conocemos, e incluso los que imaginamos, hoy en dı́a pueden
hacer exactamente lo mismo que una máquina de Turing. Inclusive conjeturamos
que el cerebro humano funciona como una máquina de Turing.

56
Figura 5.1: Concepto abstracto de un autómata finito

5.1. Autómatas finitos deterministas


La primera máquina abstracta que estudiaremos son los autómatas finitos
deterministas. Estos autómatas modelan un computador con una limitadı́si-
ma memoria. Como veremos más adelante, este pequeño modelo nos permite
computar ya problemas complejos e interesantes.
Un autómata finito es una máquina que puede leer una cadena de caracteres
desde una cinta de papel. La cinta de papel es finita y esta dividida en casillas, en
cada casilla hay un sı́mbolo. La máquina lee una casilla a la vez y se mueve a la
derecha. La máquina tiene diferentes estados. Dependiendo de la programación,
una vez lee un sı́mbolo puede cambiar de estado, quedarse en el mismo estado
o interrumpir la computación. Cuando la máquina se interrumpe ya no sigue
funcionando ni muestra nada útil. La máquina muestra en cada momento en
que estado se encuentra, por ejemplo, puede mostrar que está en estado q1 o q2
o cualquier otro estado. Los estados dependen de la definición de la máquina.
Una vez termina de leer la cinta, el estado que está mostrando se considera como
el resultado de la computación. La figura 5.1 muestra el concepto abstracto de
un autómata finito. En la figura se ve la máquina, el lector de sı́mbolos, la cinta
finita, los sı́mbolos escritos en la cinta y el estado actual de la máquina.

5.1.1. Diagramas de estados


Un autómata finito determinista se puede representar con una diagrama
de estados. En la figura 5.2 se muestra la definición de un autómata finito
determinista.
La figura representa los estados en cı́rculos y las transiciones con flechas. El
autómata inicia en un estado inicial que se representa con una flecha sin origen,
en este caso el estado inicial es q0. Cada transición esta marcada con un sı́mbolo,
el autómata lee un sı́mbolo de la cinta y realiza la transición correspondiente. Si
el sı́mbolo que leyó no tiene una flecha definida en el estado en que se encuentra
el autómata, la máquina se interrumpe. Por ahora los autómatas que veremos
tendrán flechas para todos los sı́mbolos que puede detectar, saliendo de cada

57
Figura 5.2: Representación de un autómata por medio de un diagrama de estados

estado. Los estados marcados con un doble cı́rculo se denominan estados finales
o estados de aceptación. Cuando un autómata termina su computación en un
estado final se considera que terminó con éxito.
Ejemplo 5.1.1. Suponga que tenemos un autómata como el definido en la figura
5.2 y una cinta de cinco casillas con los siguientes sı́mbolos “ababc”. Vamos a
calcular paso a paso en que estado termina el autómata:
El autómata inicia en estado q0.
Lee el sı́mbolo “a” y pasa al estado q1.
Lee el sı́mbolo “b” y pasa al estado q2.
Lee el sı́mbolo “a” y regresa al estado q1.
Lee el sı́mbolo “b” y pasa al estado q2.
Lee el sı́mbolo “c” y permanece en el estado q2.
Como no hay más caracteres en la cinta, la computación se detiene en el
estado q2.
Como el estado q2 es una estado final, y el autómata terminó sin interrumpirse,
se dice que el autómata aceptó la cadena.
Ejemplo 5.1.2. Considere el autómata anterior y las siguientes dos cadenas
“abacbc” y “abcaba”. Calcule en que estado termina el autómata en cada caso.
Al leer la primera cadena el autómata termina en estado q0 , que no es un
estado final, y por lo tanto se dice que no acepta la cadena.
En la segunda cadena el autómata termina en estado q1 , que no es un
estado final, y por lo tanto se dice que no acepta la cadena.
El lector debe comprobar estos dos resultados calculando cada ejemplo paso
a paso.

58
5.1.2. Tablas de transición de estados
Los autómatas se pueden representar igualmente por tablas de transiciones
de estados, la tabla 5.1 representa el autómata definido en la figura 5.2. La
tabla muestra en la primera columna los estados de origen y en la primera fila
muestra los sı́mbolos que puede leer el autómata. En las casillas de la tabla
muestra el estado al que llegarı́a si partiendo del estado de origen, leyera el
sı́mbolo correspondiente. Se marca con una raya cuando no está definida la
transición desde ese estado al leer el sı́mbolo correspondiente.

a b c
q0 q1 - -
q1 - q2 -
q2 q1 - q2

Tabla 5.1: Tabla de transición de estados

5.1.3. Conceptos de lenguajes


Para estudiar el tipo de problemas que puede resolver un autómata, vamos
a introducir algunas conceptos fundamentales sobre lenguajes.

Alfabeto
Un alfabeto es un conjunto finito y no vacı́o de sı́mbolos. Generalmente
representamos los alfabetos con la letra griega mayúscula Σ (sigma).
A continuación algunos ejemplos de alfabetos:
Σ = {a, b, c} es el alfabeto con los sı́mbolos “a”,“b”, “c”.

Σ = {1, 0} es el alfabeto de los número binarios “1”,“0”.


Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ., −} es un alfabeto que permite construir ca-
denas que representan números reales positivos y negativos (note que el
punto hace parte del alfabeto).

Cadenas de sı́mbolos
Las cadenas de sı́mbolos o palabras son secuencias finitas de sı́mbolos forma-
das con los elementos de un alfabeto. Por ejemplo, la cadena 100100100 es una
cadena formada con los sı́mbolos del alfabeto Σ = {1, 0}. Otro ejemplo es la ca-
dena “abcdegtrs” formada con los sı́mbolos del alfabeto Σ = {a, b, c, d, e, f, g, h, r, s, t}.
Note que las cadenas no deben contener necesariamente todos los sı́mbolos del
alfabeto.

59
La cadena vacı́a
La cadena vacı́a representa una cadena con cero sı́mbolos. A partir de cual-
quier alfabeto se puede formar la cadena vacı́a, y se representa con la letra ε
(epsilon).

Longitud de la cadena
Si w es una variable que representa una cadena, la longitud de w se escribe
ası́ |w|. Hay que tener cuidado cuando nos pasan variables que representan
cadenas, en particular hay que usar variables que no sean sı́mbolos del alfabeto.
Si w = asdaf la longitud de w es |w| = 5. La longitud de la cadena vacı́a es 0,
esto es |ε| = 0.

Potencias de un alfabeto
Si Σ es un alfabeto, se puede construir el conjunto de todas las cadenas de
longitud k que utilizan los sı́mbolos de Σ, a este conjunto lo denominamos la
potencia k de sigma y lo escribimos ası́ Σk . Al conjunto infinito de todas las
cadenas de cualquier longitud que se pueden construir con los sı́mbolos de Σ lo
representamos como Σ∗ .

Concatenación de cadenas
Dado un alfabeto Σ y dos cadenas x, y ∈ Σ, denotamos xy la cadena formada
por la concatenación de las cadenas x y y, es decir la cadena formada por los
sı́mbolos de x seguidos de los sı́mbolos de y. Por ejemplo, si x = 010101 y
y = 111000 entonces xy = 010101111000.

Lenguaje
Un lenguaje es un conjunto de cadenas que se pueden formar al concatenar
sı́mbolos de un alfabeto Σ. Aunque puede parecer rara está definición de len-
guaje, puede imaginar que el lenguaje esta formado por el conjunto de todas las
palabras que se pueden expresar en ese lenguaje.

5.1.4. El problema de la pertenencia


Los autómata finitos deterministas pueden resolver un único tipo de proble-
ma. El problema de decidir si una cadena pertenece o no al lenguaje aceptado
por el autómata.
Lo interesante de esta capacidad es que muchos de los problemas reales que
tratamos se pueden modelar como un problema de pertenencia. Por ejemplo,
si se escribe un número en una cinta de papel, no serı́a complejo describir un
autómata que determinara si el número es un número par, es decir si el número
pertenece al lenguaje formado por todos los números pares.

60
Ejemplo 5.1.3. La figura 5.3 muestra un autómata que detecta si un número
binario, es decir escrito con los sı́mbolos del alfabeto Σ = {0, 1}, es par. En
este caso si el autómata termina en el estado final q1 quiere decir que la cadena
termina en el sı́mbolo 0 y por lo tanto es par. Note que en el sistema binario un
número par siempre termina en cero (0).
Intente construir un autómata para detectar números impares en el sistema
binario y uno para detectar números pares en el sistema decimal.

Figura 5.3: Autómata finito determinista para detectar si un número binario es


par o impar

5.1.5. Definición formal de una autómata finito determi-


nista
Ya hemos tratado de manera informal la definición y uso de autómatas. En
esta sección presentamos una definición formal de los autómatas finitos deter-
ministas.

Definición 5.1.1 (Autómata Finito Determinista). Un autómata finito deter-


minista es una 5-tupla (Q, Σ, δ, q0 , F ), donde

1. Q es un conjunto finito de estados,


2. Σ es el alfabeto,
3. δ : Q × Σ −→ Q es una función de transición,

4. q0 es el estado inicial, y
5. F ⊂ Q, y F es el conjunto de los estados finales o de aceptación.

La definición indica de manera precisa lo que se entiende por una autómata


finito determinista. Por ejemplo, se puede ver que la función de transición δ
recibe una tupla como entrada y responde un estado de salida.
Ejemplo 5.1.4. Dado el alfabeto Σ = {0, 1}, vamos a definir un autómata
que detecte las cadenas que contienen la subcadena 010. Para esto, considere

61
que en ese lenguaje están cadenas como 010, 0000101111, 0100000010010010, y
1111111110101111. Esto es el lenguaje se puede escribir ası́

L = {w ∈ Σ∗ |w = x101y, x, y ∈ Σ∗ }
Considerando lo anterior, para definir totalmente el autómata debemos de-
finir la 5-tupla (Q, Σ, δ, q0 , F ) donde

1. Q = {q0 , q1 , q2 , q3 },
2. Σ = {0, 1},
3. δ : Q × Σ −→ Q es la función de transición descrita en la figura 5.4 y
en la tabla 5.2. Observe que cualquiere de los dos, el diagrama o la tabla,
definen la función δ.
4. q0 es el estado inicial, y
5. F = {q3 }.

Figura 5.4: Autómata finito determinista que detecta las cadenas que contienen
la subcadena 101

El autómata funciona de la siguiente manera. Si la cadena inicia con unos


(cero o más sı́mbolos 1), el autómata permanece en estado q0 . Cuando detecta
un 0 asume que puede ser el inicio de la subcadena que se busca, es decir 010, y
pasa al estado q1 . Si enseguida detecta un 0, sabe que no estaba en el inicio de la
cadena buscada, pero permanece en q1 porque asume que el nuevo sı́mbolo puede
ser el inicio de la cadena buscada. Por el contrario, si estando en q1 recibe un 1
el autómata pasa al estado q2 , el cuál indica que ya encontró la cadena 01 y por
lo tanto solo le falta un 0 para detectar la cadena buscada. Si en q2 recibe un 1,
ya sabe que hay dos unos seguidos y por lo tanto no podrá encontrar la cadena
buscada y debe reiniciar la búsqueda, por lo tanto retorna al estado q0 . Si en
cambio, recibe un 0 pasa al estado q3 que es un estado final, pues ya detectó una
aparición de la cadena 010. Luego de esto, no importa que reciba, ya sabemos
que la cadena pertenece al lenguaje.

62
δ 0 1
q0 q1 q0
q1 q1 q2
q2 q3 q0
q3 q3 q3

Tabla 5.2: Tabla de transición de estados que define δ para el lenguaje formado
por las cadenas que contienen la subcadena 101

5.1.6. Lenguajes Regulares


El conjunto de cadenas que puede leer un autómata finito determinista se
denomina el lenguaje del autómata. Todos los lenguajes que se pueden construir
definiendo un autómata finito determinista se denominan Lenguajes Regulares.

5.2. Ejercicios
1. Para cada uno de los autómatas que se muestran en la figura 5.5, conteste
las preguntas:
a) Describa las máquinas de manera formal. Es decir identificando

(Q, Σ, δ, q0 , F ).

b) ¿Qué secuencia de estados sigue la máquina si recibe como entrada


abaab? (puede escribir la secuencia de estados como una tupla)
c) ¿La máquina acepta la cadena abaab?
d ) ¿La máquina acepta la cadena ε ?

Figura 5.5: Ejemplos de autómatas finitos deterministas

63
2. Considere el alfabeto Σ = {0, 1} y encuentre el autómata que genera los
siguientes lenguajes:
a) {w ∈ Σ∗ |w inicia con 1 y termina con 0}
b) {w ∈ Σ∗ |w contiene por lo menos tres 1} (ojo: no importa el orden
en que aparecen).
c) {w ∈ Σ∗ |w contiene la subcadena x0101y y x, y pueden ser
la cadena vacı́a}.
d ) {w ∈ Σ∗ |w inicia con 0 y tiene longitud impar, o inicia con 1 }
y es de longitud par}.
e) {w ∈ Σ∗ | cada posición impar de w es un 1}

64
Capı́tulo 6

Lenguajes independientes
de contexto

Hasta ahora nos hemos concentrado en los lenguajes regulares. Estos se pue-
den generar ya sea con con autómatas finitos deterministas (AFD). Ahora, nos
vamos a concentrar en una clase más amplia de lenguajes que se denominan
lenguajes independientes de contexto. Para generarlos vamos a utilizar una no-
tación recursiva denominada gramática libre de contexto. Aunque, las gramáticas
no son propiamente un autómata, más adelante veremos que tienen le mismo
poder de cómputo que un autómata especial que se denomina como autómata
a pila.
El estudio de estas gramáticas ha sido muy útil en el desarrollo de com-
piladores desde los años sesenta. En particular, porque antes los analizadores
sintácticos, que son la parte del compilador que descubre la estructura del pro-
grama, se creaban de manera ad-hoc; ahora, con el uso de gramáticas, la creación
de estos componentes se realiza de manera automática.
Adicionalmente, y más alineados con la motivaciones de este curso, las
gramáticas nos permitirán introducirnos a la lógica como una disciplina que
busca estudiar de manera precisa la formalización del conocimiento y el razona-
miento.

6.1. ¿Cómo funcionan las gramáticas indepen-


dientes de contexto?
Una gramática independiente de contexto consiste en un conjunto de reglas
de sustitución que contienen variables y sı́mbolos terminales. Por ejemplo, la
figura 6.1 muestra un conjunto de reglas que representan una gramática inde-
pendiente de contexto que denominaremos G1 ,
Cada regla de sustitución consiste en una variable seguida de una flecha y
una cadena conformada por variables y sı́mbolos terminales. Las variables se

65
A −→ 0A1
A −→ B .
B −→ #

Figura 6.1: Gramática independiente de contexto G1

escriben en mayúsculas y los sı́mbolos terminales son los sı́mbolos del alfabe-
to del lenguaje. En el ejemplo anterior el conjunto de variables es {A, B}, y
el alfabeto del lenguaje o sı́mbolos terminales son {0, 1, #}. Las reglas de
sustitución se denominan también producciones.

6.1.1. Derivación
La gramática nos permite derivar las cadenas del lenguaje siguiendo los
siguientes pasos:
1. Escriba la variable inicial. La variable inicial es generalmente la primera
variable de la regla de sustitución superior en las reglas de la gramática.
2. Encuentre una regla que inicie con esa variable y que crea que puede
utilizar para derivar la cadena que está buscando. Luego substituya la
variable por la cadena a la derecha de la flecha.
3. En la nueva cadena encuentre las variables y substitúyalas repitiendo el
paso anterior hasta llegar a una cadena que solo tenga sı́mbolos terminales.
Por ejemplo, para derivar la cadena 000#111 desde la gramática G1 podemos
seguir los siguientes pasos,

Cad. derivada Regla de sustitución utilizada


A Se selecciona la variable inicial
0A1 Se substituye A por 0A1 usando la regla 1 de la gramática
00A11 Se substituye A por 0A1 usando la regla 1 de la gramática
000A111 Se substituye A por 0A1 usando la regla 1 de la gramática
000B111 Se substituye A por B usando la regla 2 de la gramática
000#111 Se substituye B por # usando la regla 3 de la gramática

Para representar las derivaciones de forma más corta vamos a introducir una
nueva operación para representar la derivación ⇒. Esta operación simplemente
indica que siguiendo una regla de substitución podemos substituir la cadena de
la izquierda por la cadena de la derecha.
Ahora, utilizando los pasos definidos anteriormente y el sı́mbolo para des-
cribir la derivación podemos, por ejemplo, escribir la derivación para la cadena
000#111 ası́,

A ⇒ 0A1 ⇒ 00A11 ⇒ 000A111 ⇒ 000B111 ⇒ 000#111

66
Figura 6.2: Árbol de parseo para derivar cadena 000#111 a partir de G1 .

6.1.2. Árbol de parseo


La información de la derivación se puede representar con una árbol de parseo.
Básicamente el árbol representa cada derivación partiendo de una variable y
dibuja lı́neas desde la variable hasta cada sı́mbolo de la cadena de la sustitución,
una lı́nea por cada terminal o variable.
Por ejemplo si queremos dibujar el árbol de parseo para derivar la cade-
na 000#111 desde la gramática G1 , podemos dibujar el árbol de parseo cómo
se muestra en la figura6.2. En el árbol cada vez que se hace una derivación
simplemente sale una lı́nea desde la variable hacia un sı́mbolo de la cadena de
sustitución. Los sı́mbolos terminales que se derivan lo ponemos inmediatamen-
te en la lı́nea de abajo del árbol para que vean claramente que si se genera la
cadena buscada.

6.1.3. El lenguaje generado por la gramática


Dada una gramática independiente de contexto G, el conjunto de las cadenas
que se pueden derivar, por cualquiera de los dos medios que se mostraron arriba,
constituyen el lenguaje de la gramática y se escribe L(G). Para el ejemplo de la
gramática G1 el lenguaje generado es L(G1 ) = {w|w = 0n #1n , con n ≥ 0}.
Los lenguajes que se pueden generar con una gramática independiente de
contexto se denominan lenguajes independientes de contexto.

67
6.1.4. Ejemplo de palı́ndromos
Los palı́ndromos son cadenas que se leen igual de izquierda a derecha y de
derecha a izquierda. Por ejemplo, otto, allla, y ana son palı́ndromos. Mien-
tras que hola, correr, y Paris no son palı́ndromos. Considere el lenguaje de
palı́ndromos creados a partir del alfabeto {0, 1}. En este caso ε, 0, 1, 10101, y
001100 son palı́ndromos y pertenecen al lenguaje. La gramática G2 que genera
este lenguaje, se muestra en la figura 6.3.

P −→ ε
P −→ 1
P −→ 0
P −→ 0P 0
P −→ 1P 1

Figura 6.3: Gramática independiente de contexto G2 que genera el lenguje de


palı́ndormos sobre le alfabeto {0, 1}

La gramática G2 tiene 5 reglas de sustitución, la primera regla indica que la


cadena vacı́a ε es un palı́ndromo, la segunda regla indica que 0 es un palı́ndromo,
y la tercera regla indica que 1 es un palı́ndromo. Ahora, para derivar las otras dos
reglas se razona que todas las cadenas de este lenguaje deben iniciar y terminar
con el mismo sı́mbolo del alfabeto, es decir si inicia con 0 debe terminar en 0 y si
inicia con 1 debe terminar en 1, si no cumple esto la cadena no es un palı́ndromo
y por lo tanto no pertenece al lenguaje. Adicionalmente, hay que considerar que
si una cadena w es un palı́ndromo y le retiro el primer y último termino, la
cadena resultante es un palı́ndromo. Ası́, las dos últimas reglas codifican este
conocimiento creando reglas para los palı́ndromos que inician y terminan en 0
y en 1 respectivamente.
Con la gramática ya definida podemos entonces generar las derivaciones y
árboles de parseo para las cadenas del lenguaje. Por ejemplo para derivar la
cadena 00100 podemos escribir la derivación siguiente,

P ⇒ 0P 0 ⇒ 00P 00 ⇒ 00100
El árbol de parseo equivalente se muestra en la figura 6.4.

6.2. Definición formal de una gramática inde-


pendiente de contexto
Definición 6.2.1. Una gramática libre de contexto se representa con una tupla
de cuatro elementos G = (V, Σ, R, S). V es el conjunto de variables, Σ es el
conjunto de terminales del lenguaje (alfabeto), R es el conjunto de reglas de
sustitución, y S es la variable inicial.
Como ejemplo podemos escribir formalmente las gramáticas G1 (ver figura
6.1) y G2 (ver figura 6.3) que se introdujeron anteriormente. La definición formal

68
Figura 6.4: Árbol de parseo para derivar cadena 00100 a partir de G2 .

de la gramática G1 es,

G1 = ({A, B}, {0, 1, #}, R1 , A)

donde R1 es el conjunto de reglas de sustitución descritas en la figura 6.1.


La definición formal de la gramática G2 es,

G2 = ({P }, {0, 1}, R2 , P )

donde R2 es el conjunto de reglas de sustitución descritas en la figura 6.3.

6.2.1. Definición formal del lenguaje generado por gramáti-


ca
Considerando que u, v, y w son cadenas de variables y terminales, y A −→ w
es una regla de sustitución de la gramática, podemos sustituir la cadena uAv
por uwv, y esto se escribe uAv ⇒ uwv.
Igualmente, si u, v, ui son cadenas del lenguaje, decimos que u deriva v, y
*
⇒ v, si u = v o si existe un conjunto de k cadenas de variables y
se escribe u =
terminales con k ≥ 0 tal que

u ⇒ u1 ⇒ u2 ⇒ u3 ⇒ ... ⇒ uk ⇒ v

Ası́, podemos escribir que el lenguaje generado por la gramática

G = (V, Σ, R, S)

es
*
L(G) = {w ∈ Σ∗ | S =
⇒ w}
.

69
Ejemplo 1
Dada la gramática independiente de contexto

G3 = ({S}, {a, b}, R3 , S)

donde R3 es el conjunto de reglas de sustitución descritas en ası́,

S −→ aSb | SS | ε

Observe que al lado derecho de la regla de sustitución hay tres cadenas separadas
por el sı́mbolo |, esto es simplemente una manera de simplificar la gramática y
es equivalente a escribir

S −→ aSb
S −→ SS
S −→ ε

En la figura 6.5 se muestran los árboles de parseo para las cadenas abab y
aababb que pertenecen al lenguaje generado por la gramática.

Figura 6.5: Árboles de parseo para derivar cadenas abab y aababb a partir de
G3 .

6.2.2. Usando GIC para estudiar el lenguaje matemático


Ya que conocemos las gramáticas independientes de contexto, vamos a crear
un ejemplo de una gramática que nos permite estudiar expresiones aritméticas
simples. Considere la gramática G4 definida como,

G4 = (V, Σ, R4 , hExpri)

donde
V = {hExpri, hT ermi, hF actori} es el conjunto de variables, observe que
hExpri es el nombre de una variable al igual que hT ermi, y hF actori.
Σ = {a, +, x, (, )}

70
R4 es el conjunto de reglas de sustitución definidas ası́,

hExpri −→ hExpri + hT ermi | hT ermi


hT ermi −→ hT ermi × hF actori | hF actori
hF actori −→ (hExpri) | a

y la variable inicial es hExpri.


Con esta gramática podemos estudiar el árbol de parseo de las siguientes
expresiones: a + a × a, (a + a) × a, los cuales se muestran en la figura 6.6.

Figura 6.6: Árboles de parseo para derivar cadenas a + a × a, (a + a) × a a partir


de G4 .

6.2.3. ¿Cómo diseñar gramáticas independientes de con-


texto?
Muchos lenguajes son uniones de otros lenguajes más simples. Por esto, para
crear estos lenguajes usted puede crear los lenguajes más simples y después
unirlos por medio de una regla de sustitución. Por ejemplo, para construir la
gramática que genera el lenguaje L = {0n 1n |n ≥ 0} ∪ {1n 0n |n ≥ 0} podemos
crear primero la gramática para el primer lenguaje de la unión ası́

S1 −→ 0S1 1 | ε

luego podemos representar el segundo lenguaje con una gramática ası́

S2 −→ 1S2 0 | ε

Ahora, para crear una sola gramática que genera el lenguaje completo po-
demos escribir

71
S −→ S1 | S2
S1 −→ 0S1 1 | ε
S2 −→ 1S2 0 | ε
Cuando tenemos que crear una gramática independiente de contexto para un
lenguaje regular podemos aplicar la siguiente estrategia. En este caso podemos
construir el autómata finito determinista que genera el lenguaje y a partir de
este crear la gramática. Para esto debemos crear una variable Ri por cada uno
de los estados qi del autómata. Luego, debemos crear una regla de sustitución
de la forma Ri −→ aRj si δ(qi , a) = qj es una transición del autómata. Adicio-
nalmente, debemos agregar una regla de la forma Ri −→ ε si qi es un estado de
aceptación del autómata. Finalmente, R0 será la variable inicial de la gramática
si q0 es el estado inicial del autómata.
Otra estrategia comúnmente utilizada es cuando un lenguaje contiene cade-
nas que están formadas por dos subcadenas que están relacionadas, por ejemplo
la longitud de una de las subcadenas depende de la longitud de la otra. Un
ejemplo concreto es el lenguaje {0n 1n |n ≥ 0}. En este lenguaje la subcadena de
unos a la derecha, depende del numero de ceros a la izquierda. En este caso una
regla de la forma S −→ aSb, crea cadenas donde la el cantidad de a es igual a
la cantidad de bs.

6.3. Ambigüedad
Algunas veces una gramática puede generar la misma cadena en varias for-
mas diferentes, es decir puede tener varios árboles de parseo para una cadena. A
estas gramáticas se les denomina gramáticas ambiguas. La siguiente gramática
es una gramática ambigua

hExpri −→ hExpri + hExpri | hExpri × hExpri | (hExpri) | a

Ejercicio: verifique que hay más de un árbol de parseo para derivar la


cadena a + a × a. Observe que esto sucede porque esta gramática no captura las
relaciones de precedencia usuales de los operadores de suma y multiplicación.
Compare esta gramática con la G4 .

6.4. Ejercicios
1. Responda las siguientes preguntas para la gramática independiente de
contexto G que se muestra a continuación

R −→ XRX | S
S −→ aT b | bT a
T −→ XT X | X | ε
X −→ a|b

a) Defina formalmente la gramática.

72
b) Identifique tres cadenas en L(G)
c) Identifique tres cadenas que no estén en L(G)
d ) Responda verdadero o falso: T ⇒ aba

⇒ aba
e) Responda verdadero o falso: T =
f ) Responda verdadero o falso: T ⇒ T

⇒ aba
g) Responda verdadero o falso: XXX =

⇒ aba
h) Responda verdadero o falso: X =

2. Encuentre las gramáticas libres de contexto que generan los siguientes


lenguajes. En todos los casos el alfabeto es {0, 1}.
a) {w | w contiene al menos tres 1}
b) {w | w inicia y termina con el mismo sı́mbolo}
c) {w | w es de longitud impar}
d ) {w | w es de longitud impar y su sı́mbolo del medio es 1}
e) el conjunto vacı́o
3. Considere la gramática G4 definida anteriormente como,

G4 = (V, Σ, R4 , hExpri)

donde
V = {hExpri, hT ermi, hF actori}.
Σ = {a, +, x, (, )}
R4 es el conjunto de reglas de sustitución definidas ası́,
hExpri −→ hExpri + hT ermi | hT ermi
hT ermi −→ hT ermi × hF actori | hF actori
hF actori −→ (hExpri) | a
y la variable inicial es hExpri.

a) Encuentre la derivación para la cadena a + a × a + a.


b) encuentre el árbol de parseo para la cadena a + a × (a + a)

4. Considere nuevamente la gramática G4 (del ejercicio anterior) y modifı́que-


la para soportar expresiones de suma y multiplicación que contengan
números. Los números son cualquier secuencia de dı́gitos numéricos del
0 al 9, y pueden contener un punto decimal. Sugerencia, incorpore varia-
bles para representar el número y el dı́gito.

73
5. La lógica matemática es una disciplina que estudia la formalización precisa
del conocimiento y el razonamiento. Entre los objetivos fundamentales
de la lógica matemática es buscar un fundamento para las matemáticas.
Muchos de los progresos en lógica permitieron desarrollos en teorı́a de
la computación. Para iniciar el estudio de la lógica matemática vamos a
estudiar la sintaxis de la lógica proposicional (hay otros lógicas como lógica
de primer orden, o lógica temporal que no veremos en este capı́tulo).Para
estudiar la sintaxis de la lógica proposicional utilizaremos una gramática
libre de contexto. Concretamente usted debe demostrar que la siguiente
gramática de la lógica proposicional es ambigua. Ayuda: Demuestre que
existen al menos dos árboles de parseo para la siguiente cadena p ∧ q ∨ r ⇒
q1 . La gramática está definida ası́ GL P = (V, Σ, RL P, hExpri) donde

hExpri −→ hConsti | hV ari | hExprihOpbinihExpri |


hN egihExpri | (hExpri)
hConsti −→ true | f alse
hV ari −→ p | q | r | p0 | q1
hOpbini −→ ≡| ∧ | ∨ |→
hN egi −→ ¬

El alfabeto de la gramática es

Σ = {≡, ∧, ∨, →, ¬, p, q, r, p0 , q1 }

6. Suponga que los terminales ≡, ∧, ∨, → son operadores binarios y que ¬ es


un operador unario. Escriba una gramática no ambigua para representar la
lógica proposicional. Ayuda, intente incorporar paréntesis en la gramática.
7. Ahora suponga que la precedencia de los operadores es la siguiente ¬, ∧, ∨,
→, ≡, con el operador de mayor precedencia a la izquierda y el de menor
precedencia a la derecha. Intente encontrar una gramática que no sea
ambigua, y que utilice el menor número de paréntesis posible.

74
Capı́tulo 7

Máquinas de Turing

La tercera máquina que veremos es la máquina de Turing. En 1936, Alan


Turing presentó una máquina abstracta para computar números y conjeturó que
podrı́amos usar mecanismos similares para estudiar las funciones computables
y los predicados computables.

7.1. Modelo informal de un máquina de Turing


Una máquina de Turing es una máquina abstracta que tiene el mismo poder
de computo que los computadores más modernos que conocemos o imaginamos.
Es decir cualquier problema que se puede resolver con un computador actual,
se puede resolver con una máquina de Turing.
La figura 7.1 muestra un modelo conceptual de la Maquina de Turing. La
máquina tiene una cabeza que le permite leer y escribir sı́mbolos en una cinta
infinita que se encuentra dividida en casillas. Por simplicidad, para este capı́tulo
suponemos que la cinta es infinita hacia la derecha (aunque considerar una cinta
infinita en las dos direcciones no afecta el modelo desarrollado). La máquina
puede moverse hacia la izquierda y hacia la derecha en la cinta. Finalmente, la
máquina está en un estado y puede cambiar de estado.
La máquina puede resolver problemas indicando si una entrada en la cinta
pertenece o no a un lenguaje particular. Para esto consideramos que la entrada
que queremos evaluar se encuentra en la parte más izquierda de la cinta, y
después del último sı́mbolo de la cadena que queremos evaluar, se encuentran
todas las casillas con un carácter blanco, que los escribimos como .
La máquina de Turing funciona de la siguiente manera:

1. La máquina inicia en la casilla más a la izquierda de la cinta en un estado


inicial que denominaremos q0 .

2. La máquina posee un estado de aceptación qa cepta y uno de rechazo


qr echazo.

75
Figura 7.1: Modelo gráfico de un máquina de Turing

3. La máquina lee el carácter que está en la cinta, y dependiendo del estado


en que se encuentre decide:
a) Cual es el nuevo estado de la máquina
b) Que sı́mbolo escribirá en la cinta
c) Si se moverá a la izquierda o a la derecha
4. Si la máquina llega a un estado de aceptación o aun estado de rechazo, la
maquina se detiene inmediatamente, es decir, no sigue computando.
5. Si la máquina no entra jamás a un estado de aceptación o de rechazo, la
máquina continúa por siempre sin detenerse.

Ejemplo 7.1.1. Suponga que tenemos una máquina que decide si una palabra
w pertenece al lenguaje {w ∈ Σ∗ |w = s#s y s ∈ Σ∗ }, es decir las cadenas que
tienen la misma subcadena al lado izquierdo y derecho del sı́mbolo #. En este
caso 01010#01010 pertenece al lenguaje y 0100#0011 no pertenece al lenguaje.
En este caso la cinta tendrı́a la cadena que queremos evaluar en el lado iz-
quierdo de la cinta y después de la cadena tendrı́a solo sı́mbolos blancos (). Por
ejemplo, si queremos evaluar la cadena 011#011, la cinta tendrı́a la siguiente
cadena 01011#01011... como se muestra en la figura 7.2.
El algoritmo para detectar si una cadena pertenece o no al lenguaje es re-
correr la cadena de atrás para adelante varias veces, e ir marcando con una
x los sı́mbolos que coincidan, a lado y lado de la cadena. Si algún sı́mbolo no
coincide o si no se encuentra el sı́mbolo #, la máquina se detiene en un es-
tado de rechazo. Si todos los sı́mbolos coinciden, la máquina se detiene en un
estado de aceptación. La figura 7.2 muestra los estados de la cinta y la posición
de la cabeza de la máquina en distintos momentos de la ejecución. La cadena
finalmente es aceptada y termina la ejecución cuando se alcanza el sı́mbolo .

76
Figura 7.2: Ejemplo de ejecución de Maquina de Turing

7.2. Descripción formal de un Maquina de Tu-


ring
En la sección anterior estudiamos el funcionamiento general de un máquina
de Turing, pero muchos detalles de su funcionamiento no fueron explicados o
precisados con suficiente detalle. Para entender el funcionamiento de la máquina
vamos presentar una definición formal.
Definición 7.2.1. Una máuina de Turing es una 7-tupla,

(Q, Σ, Γ, δ, q0 , qaccept , qreject )

, donde Q, Σ, Γ son conjunto finitos y

1. Q es un conjunto de estados,

2. Σ es el alfabeto de entrada que no contiene el sı́mbolo blanco ,


3. Γ es el alfabeto de la cinta, donde  ∈ Γ y Σ ⊂ Γ,
4. δ : Q × Γ → Q × Γ × {L, R} es la función de transición,
5. q0 ∈ Q es el estado inicial,

6. qaccept ∈ Q es el estado de aceptación, y


7. qreject ∈ Q es el estado de rechazo, donde qaccept 6= qreject

77
Una máquina de Turing M = (Q, Σ, Γ, δ, q0 , qaccept , qreject ) realiza cómputos
de la siguiente manera. La máquina M inicia en la casilla más a la izquierda de
la cinta. La entrada w = w1 , w2 , ..., wn ∈ Σ∗ se encuentra en las n casillas más
izquierda de la cinta. El resto de la cinta contiene el sı́mbolo blanco . Como
Σ no contiene le sı́mbolo blanco , el primer sı́mbolo blanco marca el fin de la
entrada. La máquina M se mueve de acuerdo a las condiciones de la función de
transición δ. Si la máquina intenta moverse a la izquierda de la primera casilla de
la cinta, la cabeza se queda en la casilla, ası́ la función de transición indique L.
La computación se ejecuta hasta que alcance un estado de aceptación o rechazo,
en cuyo caso la máquina se interrumpe. Sin no alcanza ninguno de estos estados
la máquina continua por siempre.

7.3. Configuración de una máquina de Turing


Se dice que la configuración instantánea de una máquina de Turing está
determinada por tres componentes: el estado actual, los contenidos de la cinta
y la posición de la cabeza.
Para representar la configuración de la máquina usamos la siguiente notación,

wqs

donde q es el estado actual, ws es la cadena contenida en la cinta, y la cabeza


de la máquina de Turing está al inicio de la cadena s.
Por ejemplo, la configuración 0101qaccept 1010 es una configuración que indica
que los contenidos de la cinta son 01011010, y la cabeza de la máquina se
encuentra en la posición del tercer 1, es decir en la séptima casilla de la cinta.

7.4. Lenguajes reconocibles por una Maquina de


Turing
Una máquina de Turing M reconoce una cadena w si existe una secuencia
de configuraciones C1 , C2 , C3 , ..., Ck , donde
1. C1 es la configuración inicial de M con la entrada w,
2. de cada Ci se puede pasar en un paso válido a Ci + 1, y

3. Ck es una configuración de aceptación.


El conjunto de cadena que acepta M se denomina el lenguaje de M , o el
lenguaje reconocible por M , y se escribe L(M ).
Definición 7.4.1. Un lenguaje es Turing-Reconocible si alguna máquina de
Turing reconoce todas sus cadenas.

78
7.5. Ejemplos
Ejemplo 7.5.1. Defina formalmente una máquina de Turing que acepte cade-
nas que contengan un número par de 0 (ceros). Por ejemplo, la máquina NO
debe aceptar la cadena 0010010010010, que contiene nueve ceros. En cambio, la
máquina debe aceptar la cadena 10010000111100 que contiene 8 (ocho) ceros.
Para resolver el ejercicio vamos primero a diseñar un algoritmo de solución.
En esta parte usted usa su creatividad para pensar un algoritmo, no hay una
formula para hacerlo. Ası́, que no se preocupe si en primera instancia no ve
una solución de manera fácil, al revisar estos ejemplos empezará ver patrones y
formas de solucionar problemas, que con el tiempo le harán mejorar sus habili-
dades.
El algoritmo es el siguiente. La máquina M tiene dos estados q0 y q1 , que los
usa para desarrollar su computación. Adicionalmente, siempre deben tener un
estado de aceptación y un estado de rechazo, qaccept y qreject respectivamente.
El estado q0 representará las cadenas que tienen un número par de ceros. El
estado q1 representa las cadenas con un número impar de ceros. El algoritmo
cambia de estado entre q0 y q1 cada vez que encuentra un 0. Recuerde que la
cadena está en la parte más izquierda de la cinta y que después de la cadena hay
solo sı́mbolos en blanco (). El algoritmo funcionarı́a de la siguiente manera:

1. El estado inicial es q0
2. Si la máquina detecta un 1 permanece en el estado en el que está
3. Si la máquina detecta un 0 cambia de estado. Si estaba en q0 cambia a q1
y si la máquina estaba en q1 cambia a q0 . Note que lo que está detrás de
este comportamiento es que cada vez que detecta un 0 el numero de ceros
aumenta en uno y por lo tanto se alterna entre números pares e impares
de ceros. Es decir si la cadena tenı́a 5 ceros y detecta otro cero, ahora
tendrı́a 6 ceros, y habrı́a pasado de q1 a q0 .
4. Si detecta un sı́mbolo en blanco , y se encuentra en estado q0 , la máquina
pasa al estado qaccept y termina.
5. Si detecta un sı́mbolo en blanco , y se encuentra en estado q1 , la máquina
pasa al estado qreject y termina.

Ahora definimos la máquina formalmente ası́

M = (Q, Σ, Γ, δ, q0 , qaccept , qreject ),

donde
1. Q = {q0 , q1 , qaccept , qreject } es el conjunto de estados
2. Σ = {0, 1} es el alfabeto
3. Γ = {0, 1, } es el alfabeto de la cinta

79
4. La función de transición la podemos representar en una tabla
δ 0 1 
q0 (q1 , 0, R) (q0 , 1, R) (qaccept , , −)
q1 (q0 , 0, R) (q1 , 1, R) (qreject , , −)
qaccept - - -
qreject - - -
Ahora realizamos algunas pruebas de nuestra máquina. Recuerde que, para
representar la configuración de la máquina usamos la siguiente notación wqs,
donde q es el estado actual, ws es la cadena contenida en la cinta, y la cabeza
de la máquina de Turing está al inicio de la cadena s. Por ejemplo, calculemos
los pasos que seguirı́a la máquina al recibir la cadena 010100
1. q0 010100 (La máquina inicia en esta configuración)
2. 0q1 10100 (Como lee un 0, pasa a q1 y se mueve a la derecha)
3. 01q1 0100 (Como lee un 1, se queda en q1 y se mueve a la derecha)
4. 010q0 100 (Como lee un 0, pasa a q0 y se mueve a la derecha)
5. 0101q0 00 (Como lee un 1, se queda en q0 y se mueve a la derecha)
6. 01010q1 0 (Como lee un 0, pasa a q1 y se mueve a la derecha)
7. 010100q0 (Como lee un 0, pasa a q0 y se mueve a la derecha)
8. 010100qaccept (Como lee un  pasa a qaccept y se detiene)
La figura 7.3 muestra la ejecución de la máquina descrita anteriormente.
En la figura se ven las siete transiciones necesarias para llegar al estado de
aceptación.
Ejemplo 7.5.2. Defina formalmente una máquina de Turing que acepte ca-
denas que sean palı́ndromos sobre el alfabeto Σ = {0, 1}. Los palı́ndromos son
cadenas que se leen igual de izquierda a derecha y de derecha a izquierda. Por
ejemplo, la máquina NO debe aceptar la cadena 0010010010010. En cambio, la
máquina debe aceptar la cadena 1001001, que se lee igual de izquierda a derecha
y de derecha a izquierda.
El algoritmo de la solución es el siguiente. Cuando se tiene un palı́ndromo los
sı́mbolos iniciales y finales son siempre iguales, y si usted retira estos sı́mbolos
la cadena que queda es también un palı́ndromo. Por ejemplo, la cadena 1001001
tiene los sı́mbolos inicial y final iguales, si quitamos estos sı́mbolos queda la
cadena 00100 que es también una palı́ndromo. Si usted sigue aplicando este
método, llegará finalmente a la cadena 1, que es un palı́ndromo y la máquina
en este caso puede parar, aceptando la cadena.
Para diseñar esta máquina, vamos a iniciar marcando el sı́mbolo inicial con
una x e irnos hasta el final. Si el sı́mbolo final coincide lo marcamos también con
una x, si el sı́mbolo no coincide la máquina se detiene en estado de rechazo, ya

80
Figura 7.3: Ejecución de la máquina de Turing que evalúa cadenas que tienen
un número de ceros par, para la cadena 010100.

81
que la entrada no es un palı́ndromo. Por el contrario, si el sı́mbolo coincide, se
marca con una x y se continua el computo. Después de marcar una coincidencia
la máquina se regresa hasta la x que marcó a la izquierda e inicia el computo para
revisar si la cadena sin los sı́mbolos de los extremos. el computo continúa hasta
que todas las casillas se marcan con x. Si alguna casilla no se puede marcar se
rechaza la cadena. Cuando la máquina recibe la cadena vacı́a, también la acepta
como un palı́ndromo. La tabla abajo muestra la función de transición para esta
máquina.

δ 0 1  x
q0 (qs0r , x, R) (qs1r , x, R) (qaccept , , −) (qaccept , x, −)
qs0r (qs0r , 0, R) (qs0r , 1, R) (qv0l , , L) (qv0l , x, L)
qv0l (qretl , x, L) (qreject , 1, −) - (qaccept , x, −)
qs1r (qs1r , 0, R) (qs1r , 1, R) (qv1l , , L) (qv1L , x, L)
qv1l (qreject , 0, −) (qretl , x, <) - (qaccept , x, −)
qretl (qretl , 0, L) (qretl , 1, L) - (q0 , x, R)
qaccept - - ...
qreject - - ...

La primera fila muestra el nombre de la función δ y el alfabeto de la cin-


ta Γ == {0, 1, , x}. La primera columna muestra los posibles estados de la
máquina Q = {q0 , qs0r , qv0l , qs1r , qv1l , qretl , qaccept , qreject }. El estado q0 es el es-
tado inicial, si la máquina se encuentra en este estado comienza a verificar si
la palabra que se encuentra entre la casilla en que está ubicada y la siguiente
x o el siguiente blanco es un palı́ndromo. Si está en estado q0 , la máquina se
encuentra en la primera casilla de la cinta o en una casilla que tiene una x en la
casilla a su izquierda. Si en la primera casilla se encuentra un blanco la máquina
acepta la cadena, es decir se considera la cadena vacı́a un palı́ndromo.
Si estando en el estado inicial la máquina encuentra un 0, lo marca con x, y
pasa al estado qs0r , que significa búsqueda (s por la palabra en inglés search) de
un 0 a la derecha (r por la palabra en inglés right). En este estado la máquina
se desplaza hacia la derecha hasta que encuentra una x o un sı́mbolo blanco .
cuando encuentra la x o un sı́mbolo blanco , la maquina pasa a estado qv0l ,
que significa verifique que exista un 0 a la izquierda.
En el estado qv0l detecta un 0, lo marca con una x, y pasa al estado de qretl
que se encarga de regresar la máquina hasta el primer sı́mbolo no marcada a la
izquierda para comenzar de nuevo. Si por el contrario, estando en el el estado
qv0l detecta un 1, la máquina rechaza la entrada y se detiene. Finalmente, si
la máquina está en el estado qv0l la máquina detecta una x, pasa a estado de
aceptación, esto solo pasa cuando la cadena que ese estaba verificando era de
longitud 1, y por lo tanto es un palı́ndromo.
Los estado de qv1l y qv1l son análogos a los anteriores, pero en este caso se
desea buscar un 1 a la derecha y verificar el 1 respectivamente. El lector puede
analizar el comportamiento.
Esta máquina es ineficiente, en uno de los ejercicios, se le pide que la vuelva
más eficiente, evitando retornar ala izquierda cada vez que hace una verificación,

82
es decir podrı́a arrancar la verificación desde la izquierda o desde la derecha,
para no tener que retornar cada vez. Esto implicarı́a hacer el cálculo en la mitad
de los pasos.

7.6. Ejercicios
Todos los ejercicios usan el alfabeto Σ = {0, 1}.

1. Defina formalmente una máquina de Turing que acepte cadenas que ini-
cien y terminen en el mismo sı́mbolo. Por ejemplo, la máquina debe acep-
tar la cadena 0010010010010. La máquina NO debe aceptar la cadena
10010000111100.
2. Defina formalmente una máquina de Turing que acepte cadenas de longi-
tud par.
3. Defina formalmente una máquina de Turing que acepte cadenas que con-
tengan un número impar de 0 (ceros). Por ejemplo, la máquina debe acep-
tar la cadena 0010010010010, que contiene nueve ceros. En cambio, la
máquina NO debe aceptar la cadena 10010000111100 que contiene 8 (ocho)
ceros.
4. Defina formalmente una máquina de Turing que acepte palı́ndromos. La
máquina debe ser más eficiente que la del ejemplo de este capı́tulo. Ayuda:
Usted puede iniciar el algoritmo de marcación de los extremos tanto de
izquierda a derecha como de derecha a izquierda.

83
Capı́tulo 8

Lógica Proposicional

8.1. Los fundamentos de la matemática


Hacia finales del siglo XIX y principios del XX surgen las investigaciones en
Lógica Matemática para responder preguntas relacionadas con los fundamentos
de la Matemática. ¿Qué es una prueba matemática?, ¿Porqué las pruebas ma-
temáticas son válidas?, ¿Hay lı́mites para lo que podemos probar?, ¿Pueden las
máquinas realizar pruebas matemáticas?, son las preguntas que preocupaban a
los matemáticos de la época. Para responder a estas preguntas, por ejemplo, Fre-
ge propuso el uso de principio lógicos y de teorı́a de conjuntos para fundamentar
las matemáticas. Russel intentó eliminar las contradicciones que surgieron en el
sistema de Frege. Hilbert intentó mostrar que los métodos usados generalmente
en matemáticas no llevan a contradicciones.
Estos primeros estudios llevaros a que en 1920 David Hilbert planteara el
programa de Hilbert. Este programa buscaba definir los requerimientos mı́nimos
que deberı́a tener una formalismo que se pudiera considerar como fundamento de
las matemáticas. Podemos generalizar el programa de Hilbert con los siguientes
requerimientos:
Lenguaje formal: Un sistema axiomático simbólico con reglas de for-
mación y de inferencia lógica que solo involucrara la manipulación de
sı́mbolos. Este sistema deberı́a ser finito y utilizar métodos finitos.
Completitud: una demostración de que toda verdad matemática se pue-
de demostrar en el sistema propuesto.
Consistencia: demostración de que si una sentencia es verdadera no se
puede probar una con conclusión opuesta dentro del sistema.
Algoritmo: Debe existir una definición de algoritmo y un algoritmo para
validar que una demostración es válida en el formalismo.
El intento por responder estas preguntas fundacionales y por supuesto al-
gunas de las cuestiones planteadas por Hilbert resultaron en el desarrollo de

84
la lógica matemática. En los capı́tulos anteriores estudiamos las repuestas a la
última pregunta del programa de Hilbert. Estudiamos como Turing, dio una
definición de lo que era computable y el tipo de cosas que se pueden computar
con diferentes autómatas.
En este capı́tulo exploraremos la primera pregunta del programa y comen-
taremos sobre resultados e implicaciones de las respuestas encontradas para las
otras dos preguntas. En particular presentaremos lo que se denomina lógica pro-
posicional, un sistema axiomático que permite modelar algunas proposiciones
matemáticas de manera simbólica, e imitar algunos de los razonamientos (prue-
bas) que realizamos en matemáticas. Aunque la lógica proposicional no permite
formalizar todas las matemáticas, si permite mostrar la forma en que, por me-
dio de la lógica podemos estudiar cuestiones fundamentales de la matemática.
Como por ejemplo, ¿qué es una proposición? o ¿qué es una demostración?.
Al final del capı́tulo, se realizan comentarios sobre los teoremas de incomple-
titud de Gödel y cómo estos destruyen las intenciones del programa de Hilbert.
Igualmente, se introduce la Lógica de predicados o lógica de primer orden, que es
una lógica más expresiva que la lógica proposicional, y en principio es suficiente
para formalizar todas las matemáticas.

8.2. ¿Cómo definir una lógica formalmente?


La lógica es un sistema axiomático, simbólico, y formal que permite estudiar
los métodos de la matemática. Para poder convencernos de que ese sistema en
realidad puede imitar y justificar los métodos de la matemática debemos definir
cada parte del sistema de forma clara y formal. Es decir debemos definir que
entendemos por proposición, que significa que una proposición sea consecuencia
de otra proposición o de un conjunto de proposiciones, y que entendemos por
una prueba matemática.
Para abordar estas cuestiones realizaremos lo siguiente:
1. Para definir y estudiar ¿Qué es una proposición? debemos introdu-
cir algo más formal que el lenguaje natural (español o inglés) para poder
representar las cuestiones matemáticas. Para esto definiremos primero un
lenguaje formal que nos permitirá representar con sı́mbolos la proposi-
ciones matemáticas. Este lenguaje tendrá un alfabeto determinado y una
gramática libre de contexto que nos permitirá crear las formulas del len-
guaje.
2. Para definir y estudiar que entendemos cuando decimos que una
proposición es consecuencia de otra proposición, vamos a introducir
los conceptos de semántica, interpretaciones, satisfacibilidad y validez de
las formulas.
3. Para definir y estudiar que es una prueba matemática, vamos a
introducir un sistema de reglas de inferencia y una generalización con el
concepto de sistemas formales. Esto nos permitirá estudiar formalmente,

85
es decir como un juego de sı́mbolos, la manera en que podemos escribir
pruebas, pasando de una proposición matemática a otra.
Definición 8.2.1. Una lógica se define formalmente por una tupla de tres ele-
mentos (L, S, R) dónde,
L, es el lenguaje formal de la lógica definido con una gramática formal.
S, la semántica de la lógica, es una especificación formal de cómo asignar
significado a los elementos de L.
R, el sistema de inferencia, es un conjunto de axiomas y reglas de infe-
rencia sobre L. Una regla de inferencia es un patrón de razonamiento que
consiste en algunas premisas y algunas conclusiones. Si creemos en las
premisas, una regla de inferencia me dice que debemos creer también en
las conclusiones.

8.3. Lenguaje objeto y Lenguaje del observador


La lógica busca estudiar los fundamentos de las matemáticas. Para evitar
caer en un cı́rculo vicioso donde usamos las matemáticas para estudiar las ma-
temáticas, vamos a separar lo que estudiamos en una caja y lo que usamos para
estudiarlo en otra caja. En nuestro caso no denominamos la separación como
cajas, sino que los denominamos como lenguajes. El lenguaje que estudiamos lo
vamos a denominar lenguaje objeto, y el lenguaje que utilizamos para estudiarlo
vamos a denominarlo el lenguaje del observador (ver [4]).
El lenguaje observador que vamos a utilizar primero es la lógica propo-
sicional. Esta lógica nos permite estudiar proposiciones, que son objetos que
pueden ser falsos o verdaderos. Se pueden formar proposiciones más complejas
por medio de conexiones de otras proposiciones que se utilizan intactas, como
bloques de construcción. Ası́, en lógica proposicional, las proposiciones atómicas
se representan simplemente por una variable que puede tomar el valor de falso
o verdadero, y las proposiciones compuestas se construyen usando conectores
lógicos como ∨ (o lógico), o ¬ (negación lógica).
Por ejemplo, en el caso de la lógica proposicional uno de los lenguajes que
podemos estudiar el lenguaje natural en el que se presentan proposiciones que
pueden ser falsas o verdaderas. En este caso queremos estudiar frases declara-
tivas que expresan proposiciones, es decir frases que pueden ser falsas o verda-
deras. Por ejemplo, considere las siguientes dos frases que expresan la misma
proposición:
Pedro ama a Marı́a
Marı́a es amada por Pedro
Por el contrario la frase Pedro ama a Juana expresa otra proposición. Y
usando conectores podemos construir la proposición Pero ama a Marı́a o Pedro
ama a Juana que es una proposición compuesta. Note que el valor de verdad de

86
esta frase depende de los valores de verdad que se le asignen a cada una de las
frases atómicas. Para describir esta frase en lógica proposicional realizarı́amos
los siguiente:
1. Utilizamos la variable P para representar la proposición Pedro ama a
Marı́a.
2. Utilizamos la variable Q para representar la proposición textitPedro ama
a Juana.
3. Utilizamos el conector ∨ para representar el conector o.
4. Escribimos P ∨ Q para representar la proposición Pedro ama a Marı́a o
Pedro ama a Juana
Más adelante veremos que se puede utilizar la lógica proposicional para es-
tudiar otro tipo de lenguajes o de dominios de aplicación. Por ejemplo, pode-
mos utilizarla para estudiar la composición de compuertas lógicas en circuitos
electrónicos binarios.

8.4. Sintaxis de la Lógica Proposicional


La lógica proposicional es nuestro lenguaje observador. Lo vamos a mantener
por ahora genérico, es decir sin enfatizar ningún lenguaje objeto. Para esto
vamos a definir primero el alfabeto de la lógica proposicional, luego vamos a
definir el tipo de proposiciones que se pueden construir y finalmente veremos
como aplicar esto al estudio del lenguaje natural.

8.4.1. Alfabeto de la lógica proposicional


Definición 8.4.1. El alfabeto de la lógica proposicional está compuesto por
sı́mbolos de los siguientes tipos:
Variables proposicionales que se representan por letras mayúsculas o minúscu-
las, o letras con subı́ndices.
Dos constantes true, false.
Conectores lógicos ∧ (y lógico), ∨ (o lógico), ¬ (negación lógica), ≡ (equi-
valencia lógica), y → (implicación lógica).
paréntesis (, ).
De manera formal podemos escribir que Σ es el alfabeto de la lógica propo-
sicional donde,

Σ = {p, q, r, P, Q, R, p0 , p1 , ...} ∪ {true, f alse} ∪ {∧, ∨, ¬, ≡, →, (, )}


Este alfabeto permite construir frases como P ∨ ¬Q , ¬¬ →, por supuesto
queremos que la primera sea parte del lenguaje de la lógica proposicional, pero
no queremos que la segunda sea parte del lenguaje.

87
8.4.2. Formulas de la lógica proposicional
Para completar la definición del lenguaje vamos a introducir una gramáti-
ca libre de contexto que nos permita especificar que formulas hacen parte del
lenguaje y cuáles no.

Definición 8.4.2. Todas las palabras que se puedan generar con la siguiente
gramática libre de contexto, son formulas de la lógica proposicional.
La gramática está definida ası́ GLP = (V, Σ, RLP , hExpri) donde
hExpri −→ hConsti | hV ari | hExprihOpbinihExpri |
hN egihExpri | (hExpri)
hConsti −→ true | f alse
hV ari −→ p | q | r | ... | P | Q | ...
hOpbini −→ ≡| ∧ | ∨ |→
hN egi −→ ¬
Para evitar el uso excesivo de paréntesis y facilitar la interpretación vamos
a introducir una precedencia de los conectores binarios. Ası́, consideramos que
en la siguiente lista los conectores más a la izquierda tienen mayor precedencia

¬, ∧, ∨, →, ≡
Esto quiere decir que cuando no sea claro por los paréntesis que operadores
van juntos, se considera que el conector de mayor precedencia se aplica prime-
ro. Adicionalmente se considera que todos los conectores son asociativos a la
derecha. Por ejemplo, dada la formula

¬p ∧ q ≡ r
se debe interpretar como

(((¬p) ∧ q) ≡ r)
Otro ejemplo que muestra la asociatividad a la derecha es el siguiente. Dado,

p∧q∧r →r∨q∨b
se debe interpretar como

((p ∧ (q ∧ r)) → (r ∨ (q ∨ b)))

8.4.3. Árboles de parseo y de sintaxis


En el capı́tulo de gramáticas libres de contexto estudiamos como utilizar un
árbol de parseo para derivar cadenas del lenguaje a partir de una gramática.
Considere por ejemplo la expresión

p ∨ q ≡ p ∨ ¬q ∧ q

88
esta expresión se puede derivar, a partir de la gramática de la lógica propo-
sicional por medio del siguiente árbol de parseo
hExpri

hExpri hOpbini hExpri

hExpri hOpbini hExpri hExpri hOpbini hExpri

hV ari hV ari hV ari hExpri

hExpri hOpbini hExpri

hN egi hExpri hV ari

p ∨ q ≡ p ∨ ¬ q ∧ q

El árbol solo sirve para determinar si es posible derivar la cadena partiendo


de la gramática. Como si pudimos derivar la cadena, podemos decir que la
cadena es pare del lenguaje definido por la gramática.
Vamos introducir un nuevo estilo de árbol, el árbol de sintaxis. El árbol
de sintaxis es diferente al de parseo. El de parseo muestra la derivación según
la gramática, el de sintaxis muestra la interpretación de las operaciones.
En el árbol de sintaxis las operaciones son los nodos y las hojas son los
operandos. Los paréntesis no hacen parte del árbol de sintaxis. El árbol de
sintaxis debe respetar la gramática y la precedencia de los operadores. En el
árbol de sintaxis solo aparecen los sı́mbolos del alfabeto, a excepción de los
paréntesis, es decir solo sı́mbolos terminales.
Si consideramos la misma expresión anterior el árbol de sintaxis correspon-
diente es,

∨ ∨

p q p ∧

¬ q

q
Este árbol de sintaxis representa como evaluar la expresión respetando la
gramática y las reglas de precedencia. En este caso lo que estamos afirmando es
que la expresión

p ∨ q ≡ p ∨ ¬q ∧ q
se debe interpretar como

89
((p ∨ q) ≡ (p ∨ ((¬q) ∧ q)))
El árbol de sintaxis expresa exactamente la interpretación dada por la frase
anterior.
Tenga en cuenta que las reglas de precedencia aplican cuando la expresión
es ambigua, en este caso la falta de paréntesis hace que la frase sea ambigua, y
entonces las reglas de precedencia me ayudan a interpretar la expresión. Usted
puede agregar paréntesis para indicar otra forma d entende la proposición. Por
ejemplo, la frase siguiente tiene otra interpretación y por lo tanto otro árbol de
sintaxis.

(p ∨ (q ≡ p)) ∨ ((¬q) ∧ q)
Y su árbol de sintaxis correspondiente es:

∨ ∧

p ≡ ¬ q

q p q

8.5. Traduciendo lenguaje natural a la LP


Un ejemplo de las aplicaciones del lenguaje de la lógica proposicional es el
estudio de las proposiciones en lenguaje natural. Cuando estudiamos el lenguaje
natural con la lógica proposicional, nos vamos a concentrar en las frases que
representan proposiciones, es decir las frases que pueden ser falsas o verdaderas.
Por ejemplo, las siguientes frases son proposiciones:
Pedro ama a Marı́a.
La tierra es plana.
El hombre es inmortal.
Está lloviendo.
Hoy lloverá.
Por el contrario existen frases en el lenguaje natural que no se consideran
proposiciones. Por ejemplo, las preguntas y las órdenes no se consideran propo-
siciones. Ejemplos de frases que no son proposiciones son:
¡Lean las notas de clases antes de la clase! (Frase imperativa que indica
una orden)

90
¿Es plana la tierra? (Frase interrogativa que indica una pregunta)
¿Que tengo en mi bolsillo? (Frase interrogativa que indica una pregunta)
Ejemplo 8.5.1. Vamos ahora a ver un ejemplo de como traducir una propo-
sición en lenguaje natural a la lógica proposicional. Considere por ejemplo la
siguiente proposición,

El carro es rojo y la luna es verde

Esta es un proposición, es decir es una frase que puede ser falsa o verdadera.
La forma más fácil de representar esta proposición es simplemente represen-
tarla con una variable p. A esta variable se le denomina variable proposicional
y en este caso representa toda la frase.
Sin embargo, existen más posibilidades. Por ejemplo, podemos ver que la
frase es la composición de dos proposiciones más simples. La primera es El carro
es rojo y la segunda es la luna es verde, estas frases están relacionadas por la
conjunción y. En este caso si le asignamos una variable proposicional a cada
una de las subproposiciones, podemos modelar la proposición de la siguiente
manera,
q : El carro es rojo
r : la luna es verde
Ahora si remplazamos las subproposiciones por las variables proposicionales
en la frase original obtendrı́amos

qyr
Y partiendo de esta nueva frase podemos remplazar la conjunción y pos su
equivalente lógico ∧, para obtener
q∧r
En este ejemplo tanto p como q ∧ r representan la proposición El carro es
rojo y la luna es verde. Por supuesto entre más subproposiciones identifique
para representar una frase, más compleja será la representación en lógica pro-
posicional. Al decir más compleja, nos referimos a que utilizará más variables
proposicionales y más conectores lógicos.

8.5.1. Método de traducción


El método para traducir una proposición escrita en lenguaje natural a la
lógica proposicional es siempre el mismo. Este método consta de tres pasos:
1. Defina variable proposicionales para representar subproposiciones.
2. En la frase original remplace las subproposiciones por estas variables

3. Partiendo de la frase con las variables remplace los conectores en lenguaje


natural por la representación “obvia” usando conectores lógicos.

91
La tabla 8.1 muestra la traducción tı́pica de conectores en lenguaje natural
a conectores lógicos. Note que aunque la traducción es tı́pica, no necesariamente
siempre aplica, esto se debe que las expresiones en lenguaje natural pueden ser
ambiguas y depender del contexto en el que se dicen.

Lenguaje Natural Lógica proposicional


y, pero se convierte en ∧
o se convierte en ∨
no se convierte en ¬
no es el caso que se convierte en ¬
si p entonces q se convierte en p→q

Tabla 8.1: Traducción de conectores en lenguaje natural a conectores lógicos

Ejemplo 8.5.2. Suponga la siguiente lista de proposiciones:

p: Pedro tiene 24 años


q: Claudia tiene dos hijos
r: 1 es un número primo
s: Estoy loco
Entonces podemos escribir las siguientes oraciones y sus traducciones a la lógica
proposicional:

Proposición Traducción
Pedro tiene 24 años o Claudia tiene dos hijos p∨q
Pedro tiene 24 años y 1 es un número primo p∧r
Si 1 es un número primo y Claudia tiene dos hijos, estoy loco (r ∧ q) → s

8.6. Semántica
La semántica de un lenguaje nos dice el significado de las frases y formulas
que podemos escribir en ese lenguaje. En lógica proposicional nuestras frases
están construidas con variables proposicionales y con conectores lógicos. El sig-
nificado de las variable proposicionales es un valor en el rango falso o vertedero.
Igualmente, el valor de cada frase compleja de lógica proposicional es un valor en
el rango falso o vertedero. Es decir, en lógica proposicional las frases significan
falso o verdadero, no hay significados metafı́sicos de estás frases proposicionales.
Cuando hablamos del significado de algo en lógica proposicional, nos referimos
al valor en el rango de falso o verdadero.
En este contexto al evaluar el valor de la formula

p∧q

Lo primero que se hace es asignar valores a las variables. Por ejemplo, en este
caso podemos asignar
p := true y q := f alse

92
p q ¬p p∧q p∨q p→q p≡q
false false true false false true true
false true true false true true false
true false false false true false false
true true false true true true true

Tabla 8.2: Tabla de verdad de los operadores lógicos

en este caso usamos la notación := para indicar que a la variable de la izquierda


le asignamos el valor de la derecha, y diferenciarla del sı́mbolo de igualdad =
que indica cuando afirmamos o preguntamos que dos cosas son iguales.
Una vez tenemos los valores de verdad de las variables procedemos calcular
los valores de verdad de la formula. Pero antes de hacerlo debemos definir los
valores de verdad los operadores lógicos.

8.6.1. Tablas de verdad


La tabla 8.2 muestra las tablas de verdad de los casos bases, es decir de las
formulas más pequeñas que se pueden crear con los operadores lógicos.
Ahora si, estamos equipados para evaluar formulas complejas. Por ejemplo,
considerando las asignaciones de valores p := true y q := f alse, podemos cal-
cular que el valor de la frase anterior p ∧ q que es f alse (es decir falso). Este
cálculo lo realizamos por simple inspección de los valores del caso base en la
tabla 8.2.
Note que p y q son nombres aleatorios de las variables. Cuando se tiene
una formula se deben identificar las variables y luego asignarle valores a esas
variables para luego calcular el significado de la formula, es decir el valor de
falso o verdadero de la formula.

Ejemplo 8.6.1. Encuentre la tabla de verdad de la siguiente formula q ≡ ¬q∧p.


En este caso recuerde respetar las reglas de precedencia para interpretar la
formula. Ası́, la formula la interpretamos como

q ≡ ((¬q) ∧ p)

y calculamos la tabla de verdad evaluando la tabla de verdad de cada uno de


los componentes individuales ası́,

p q ¬q (¬q) ∧ p q ≡ ((¬q) ∧ p)
false false true false true
false true false false false
true false true true false
true true false false false

Ejemplo 8.6.2. Encuentre la tabla de verdad de la siguiente formula p ∨ q ≡


p ∨ ¬q ∧ q.

93
Respetando las reglas de precedencia para interpretar la formula. Ası́, la
formula la interpretamos como

(p ∨ q) ≡ (p ∨ ((¬q) ∧ q))
y calculamos la tabla de verdad evaluando la tabla de verdad de cada uno
de los componentes individuales ası́,

p q ¬q (¬q) ∧ q p ∨ ((¬q) ∧ q) p∨q (p ∨ q) ≡ (p ∨ ((¬q) ∧ q))


false false true false false false true
false true false false false true false
true false true false true true true
true true false false true true true

8.6.2. Interpretaciones
Definición 8.6.1. Una interpretación de una formula de la lógica proposicio-
nal, es el mapeo de las variables de la formula con valores de falso y verdadero,
y la correspondiente evaluación de la formula para esta asignación.
Ejemplo 8.6.3. Si consideramos la formula

(p ∨ q) ≡ (p ∨ ((¬q) ∧ q))
Una interpretación de esta formula está dada en la siguiente tabla.

p q (p ∨ q) ≡ (p ∨ ((¬q) ∧ q))
false false true

8.6.3. Satisfacción de una formula


Definición 8.6.2. Decimos que una formula se puede satisfacer si es verda-
dera para una interpretación
Ejemplo 8.6.4. Si consideramos nuevamente la formula

(p ∨ q) ≡ (p ∨ ((¬q) ∧ q))
Podemos demostrar que esta formula se puede satisfacer si encontramos una
interpretación para la cual sea verdadera. Es decir debemos encontrar una asig-
nación de valores de falso o verdadero para las variables proposicionales de la
formula, para los cuales el valor de la formula sea verdadero. Una de las inter-
pretaciones que hacen verdadera la formula se muestra en la siguiente tabla.

p q (p ∨ q) ≡ (p ∨ ((¬q) ∧ q))
false true false

Por lo tanto concluimos que está formula se puede satisfacer.

94
8.6.4. Validez de una formula
Definición 8.6.3. Una formula es válida si es verdadera en cualquier posible
interpretación. También se dice que la formula es una tautologı́a.
Ejemplo 8.6.5. Las siguientes dos formulas se conocen como las leyes de Mor-
gan y vamos a demostrar que ambas son formulas válidas.

(¬(p ∧ q)) ≡ ((¬p) ∨ (¬q))

(¬(p ∨ q)) ≡ ((¬p) ∧ (¬q))


Podemos demostrar que estas formulas son válidas si al construir la tabla
de verdad de la formula, para todas las interpretaciones posibles la formula es
verdadera. La tabla de verdad con todas las interpretaciones posibles para la
primera formula se muestra a continuación.
p q (¬(p ∧ q)) ((¬p) ∨ (¬q)) (¬(p ∧ q)) ≡ ((¬p) ∨ (¬q))
f alse f alse true true true
f alse true true true true
true f alse true true true
true true f alse f alse true
La tabla muestra que para cualquier interpretación la formula es una tauto-
logı́a.
La prueba de la segunda formula la puede realizar el lector construyendo la
tabla de verdad.

8.6.5. Equivalencia Proposicional


Definición 8.6.4. Dos formulas φ y ψ son lógicamente equivalentes si las
formulas se satisfacen bajo las mismas interpretaciones. Es decir si tienen la
misma tabla de verdad. En este caso escribimos

φ≡ψ
Ejemplo 8.6.6. Consideremos nuevamente las leyes de Morgan y vamos a de-
mostrar que cada una de estas formulas está afirmado que la formula de la
derecha de la izquierda de la equivalencia es equivalente con la formula de la
derecha:

¬(p ∧ q) ≡ ¬p ∨ ¬q

¬(p ∨ q) ≡ ¬p ∧ ¬q
Ahora si analizamos la primer ley de Morgan se puede ver que esta ley
expresa que la formua (¬(p ∧ q)) es lógicamente equivalente a ((¬p) ∨ (¬q)).
Esto quiere decir que ambas formulas tienen la misma tabla de verdad.
Para comprobar esto podemos comparar las tablas de verdad

95
p q ¬(p ∧ q)
f alse f alse true
f alse true true
true f alse true
true true f alse

p q ¬p ∨ ¬q
f alse f alse true
f alse true true
true f alse true
true true f alse

Las tablas muestran que para cualquier interpretación la formula de la iz-


quierda es equivalente con la formula de la derecha.
La prueba de la segunda ley de Morgan la puede realizar el lector constru-
yendo las tablas de verdad.

8.6.6. Relación de consecuencia


Definición 8.6.5. Consideremos Φ como un conjunto de formulas y ψ como
una formula (En general utilizamos las letras griegas mayúsculas para represen-
tar conjuntos de formulas y las minúsculas para representar formulas individua-
les).
Ahora decimos que ψ es consecuencia de Φ, y los escribimos Φ  ψ, cuando
todas las interpretaciones que satisfacen a ψ satisfacen también cada una las
formulas φ, tal que φ ∈ Φ.

Esta definición es muy interesante porque ahora definimos de forma precisa


que quiere decir que una formula es consecuencia de otra. Esto nos ayudará a
entender de manera precisa cuando en matemáticas decimos por ejemplo que
una formula es consecuencia de un conjunto de formulas.

8.7. Ejercicios
1. Escriba el árbol de parseo y de sintaxis de las siguientes expresiones
a) (p ∧ q) ∨ (¬p ∧ ¬q)
b) ¬((f alse ∧ (r → (p ∨ s))) ≡ (¬((p → q) ∨ (r ∧ (¬r)))))
c) r → (p ≡ s) ≡ ¬p → q ∨ ¬r
2. Usando tablas de verdad muestre que las siguientes proposiciones son tau-
tologı́as
a) p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)
b) ((p ≡ (q ≡ r)) ≡ ((p ≡ q) ≡ r))

96
c) (a ∧ b ≡ a ∨ b) ≡ (a ≡ b) (Esta formula se llama la regla dorada, por
su versatilidad para ayudar en demostraciones)
3. Con base en la siguiente especificación, traduzca del lenguaje de la lógi-
ca proposicional al castellano cada una de las siguientes proposiciones
procurando que dicha traducción sea lo más cercana posible al lenguaje
cotidiano:
h: El cuarteto interpretará a Haydn.
m : El cuarteto interpretará a Mozart.

a) h ≡ (¬m)
b) ¬(h ∧ m)
c) h ∨ m
d ) ((¬(h ∧ m)) ∧ (¬h)) → m

4. Simbolizar correctamente:
a) Si llueve o cae nieve, entonces no hay electricidad. Hay electricidad.
Entonces no nevó.
b) Si sin(x) es diferenciable, entonces sin(x) es continua. Si sin(x) es
continua, entonces sin(x) es diferenciable. La función sin(x) es dife-
renciable. Consecuentemente, la función sin(x) es integrable
c) Si Pedro entiende matemáticas, entonces puede entender lógica. Pe-
dro no entiende lógica. Consecuentemente, Pedro no entiende ma-
temáticas.

5. Demostrar que las siguientes formulas son teoremas de la lógica proposi-


cional usando reglas de inferencia:
a) ¬f alse ≡ true
b) ¬p ≡ p ≡ f alse
c) p ∨ true ≡ true
d ) p ∧ (¬p ∨ q) ≡ p ∧ q
e) p ∧ (p → q) ≡ p ∧ q
6. Para cada una de las siguientes especificaciones encuentre una parentiza-
ción de tal manera que la proposición resultante sea una tautologı́a:

a) p → q ≡ r ≡ p ∧ q ≡ p ∧ r
b) f alse ∧ p → p ≡ q 6≡ r

97
Bibliografı́a

[1] Michael Sipser. Introduction to the Theory of Computation. CENGAGE


Learning, Boston, MA, third edition, 2013.

[2] Raúl Chaparro. Notas y ejercicios de clase de modelos matemáticos para


informática. Documento no publicado, febrero 2017.
[3] A. M. Turing. On computable numbers, with an application to the en-
tscheidungsproblem. Proceedings of the London Mathematical Society, s2-
42(1):230–265, 1937.

[4] Stephen Cole Kleene. MAthematical Logic. John Wiley & Sons, Inc., New
York, first edition, 1967.

98

También podría gustarte