Beruflich Dokumente
Kultur Dokumente
Con codigo
multiparadigma en DrRacket
Por
Abdiel E. Caceres
Gonzalez
Atribucion-NoComercial
2.5 Mexico (CC BY-NC 2.5 MX).
Para ver la licencia visite
https://creativecommons.org/licenses/by-nc/2.5/mx/.
Indice general
1. Fundamentos matematicos
1.1. Logica
matematica . . . . . . . . . . . . . . . . . . .
1.1.1. Combinaciones de expresiones . . . . . . .
1.2. Conjuntos . . . . . . . . . . . . . . . . . . . . . . .
1.2.1. La pertenencia . . . . . . . . . . . . . . . . .
1.2.2. La cardinalidad . . . . . . . . . . . . . . . .
1.3. Cuantificadores . . . . . . . . . . . . . . . . . . . .
1.3.1. Cuantificador universal . . . . . . . . . . . .
1.3.2. Cuantificador existencial . . . . . . . . . . .
1.4. Operaciones con conjuntos . . . . . . . . . . . . . .
1.4.1. Subconjuntos . . . . . . . . . . . . . . . . .
1.4.2. Igualdad de conjuntos . . . . . . . . . . . .
de conjuntos . . . . . . . . . . . .
1.4.3. Creacion
1.4.4. Agregar un elemento a un conjunto . . . . .
de conjuntos . . . . . . . . . . . . . .
1.4.5. Union
de conjuntos . . . . . . . . . .
1.4.6. Interseccion
1.4.7. Diferencia de un conjunto respecto de otro
1.5. El conjunto potencia . . . . . . . . . . . . . . . . .
1.6. Producto cartesiano . . . . . . . . . . . . . . . . . .
1.7. Relaciones y Funciones . . . . . . . . . . . . . . . .
de funciones . . . . . . . . . .
1.7.1. Composicion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
4
8
10
11
13
13
17
19
19
21
21
22
25
27
28
29
33
35
38
2. Smbolos y Alfabetos
2.1. Smbolos . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1. Smbolos en DrRacket . . . . . . . . . . . .
2.2. Alfabetos . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1. Verificar un alfabeto . . . . . . . . . . . . .
2.2.2. La pertenencia de un smbolo a un alfabeto
2.2.3. Cardinalidad de un alfabeto . . . . . . . . .
2.2.4. Subalfabeto . . . . . . . . . . . . . . . . . .
2.2.5. Igualdad en alfabetos . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
41
41
43
44
46
46
47
48
3. Palabras y Lenguajes
3.1. Palabras . . . . . . . . . . . . . . . . . . . .
3.1.1. La palabra vaca . . . . . . . . . . .
3.1.2. Igualdad en las palabras . . . . . .
3.1.3. Palabras de un alfabeto . . . . . . .
3.1.4. Alfabeto de una palabra . . . . . .
3.1.5. Longitud de una palabra . . . . . .
3.2. Operaciones con palabras . . . . . . . . . .
de palabras . . . . .
3.2.1. Concatenacion
3.2.2. Escribir en una palabra . . . . . . .
3.2.3. Potencia de una palabra . . . . . .
3.2.4. Prefijo y sufijo . . . . . . . . . . . .
3.2.5. Subpalabras . . . . . . . . . . . . .
3.2.6. Palabra inversa . . . . . . . . . . .
3.3. Lenguajes . . . . . . . . . . . . . . . . . . .
3.3.1. Alfabeto inducido por un lenguaje
3.3.2. Lenguaje Nulo . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
50
51
52
53
53
54
54
56
58
59
61
63
64
66
66
III
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4. Automatas
finitos determinstas
4.1.2. Automatas
en procesamiento de lenguaje natural . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
79
. 79
. 80
. 81
. 81
. 82
. 82
. 84
. 86
. 88
. 88
. 89
. 91
. 93
. 95
. 97
. 99
. 100
. 101
. 102
5. Automatas
no determinstas
de los afn % . . . . . . . . . .
5.1. Presentacion
5.1.1. Ejemplo de un afn % . . . . . . . . .
formal de un afn % . . .
5.1.2. Definicion
5.1.3. Atributos de afn % . . . . . . . . . .
5.1.4. La tabla de transiciones de un afn %
5.1.5. afn % como listas de transiciones .
5.1.6. Los metodos informativos . . . . .
de transicion
5.2. La funcion
. . . . . . . . . .
de transicion
extendida . . . .
5.3. La funcion
5.4. El lenguaje del afn % . . . . . . . . . . . . .
5.4.1. Palabras aceptadas . . . . . . . . .
5.4.2. Palabras propias . . . . . . . . . . .
5.4.3. Palabras impropias . . . . . . . . .
5.5. Equivalencia entre afn % y afd % . . . . . .
afn % afd % . . . . . .
5.5.1. Conversion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
67
68
68
69
71
72
72
73
74
107
107
108
108
108
110
110
113
113
114
116
117
117
118
118
118
Definiciones DrRacket
. . . . . . . . . . . . . . . . . . . . . .
1.1. La negacion
1.2. La conjuncion
. . . . . . . . . . . . . . . . . . . .
1.3. La disyuncion
. . . . . . . . . . . . . . . . . . . .
1.4. El conjunto vacio . . . . . . . . . . . . . . . . . .
1.5. Predicado para verificar el conjunto vaco . . . .
1.6. La pertenencia de un elemento a un conjunto . .
1.7. La cardinalidad de un conjunto . . . . . . . . . .
1.8. El cuantificador universal . . . . . . . . . . . . .
1.9. El cuantificador existencial . . . . . . . . . . . . .
1.10. Subconjunto de un conjunto . . . . . . . . . . . .
1.11. Subconjunto propio de un conjunto . . . . . . . .
1.12. Conjuntos iguales . . . . . . . . . . . . . . . . . .
1.13. Agregar un elemento a un conjunto . . . . . . . .
de dos conjuntos . . . . . . . . . . . . .
1.14. La union
de dos conjuntos . . . . . . . . . .
1.15. La interseccion
1.16. La diferencia de conjuntos . . . . . . . . . . . . .
1.17. El conjunto potencia de un conjunto . . . . . . .
de pares . . . . . . . . . . . . . . .
1.18. Manipulacion
1.19. El producto cartesiao de dos conjuntos . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
6
6
8
9
11
12
14
18
19
20
21
23
26
27
29
32
33
35
36
36
37
38
43
44
45
47
48
50
50
51
52
53
54
55
57
58
59
60
61
62
63
63
66
66
67
67
67
68
69
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
70
72
73
74
76
77
85
85
102
109
113
114
1. Fundamentos matematicos
Contenido
1.1. Logica
matematica . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1. La pertenencia . . . . . . . . . . . . . . . . . . . . . . . .
10
1.2.2. La cardinalidad . . . . . . . . . . . . . . . . . . . . . . .
11
1.3. Cuantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
17
19
1.4.1. Subconjuntos . . . . . . . . . . . . . . . . . . . . . . . .
19
21
de conjuntos . . . . . . . . . . . . . . . . . . .
1.4.3. Creacion
21
22
de conjuntos . . . . . . . . . . . . . . . . . . . . .
1.4.5. Union
25
de conjuntos . . . . . . . . . . . . . . . . .
1.4.6. Interseccion
27
28
29
33
. . . . . . . . . . . . . . . . . . . . . .
35
de funciones . . . . . . . . . . . . . . . . .
1.7.1. Composicion
38
necesitamos para desarrollar modelos computacionales de todos los objetos teoricos de matematicas discretas que se requieren.
CAPITULO
1. FUNDAMENTOS MATEMATICOS
1.1.
Logica
matematica
es #f, esto significa que son datos primitivos y no hace falta ninguna evaluacion.
El valor de un dato primitivo es e l mismo.
sinonimos
los terminos rExpresion y expresion. Usaremos rExpresion para hacer
1.1. LOGICA
MATEMATICA
utilizada en el lenguaje DrRacket, pero por sime nfasis en que es una expresion
plicidad generalmente utilizaremos expresion. En DrRacket hay principalmente
dos tipos de expresiones:
Ejemplo 1-2
Expresiones primitivas
falso ; Es una cadena de texto
3.14159 ; Es un n
umero
Expresiones compuestas
(+ 8 10); 8 + 10
(> 10 28); 10 > 28
Ejemplo 1-3
Los siguientes ejemplos son expresiones proposicionales en DrRacket.
1. #t ; Es primitiva
2. #f ; Es primitiva
3. (= 4 4) 7 #t ; 4 = 4 produce verdadero
4. (= 14 5) 7 #f ; 14 = 5 produce falso
5. (> (+ 2 2) (* 2 2)) 7 #f
CAPITULO
1. FUNDAMENTOS MATEMATICOS
1.1.1.
Combinaciones de expresiones
Ejemplo 1-4
Consideremos las siguientes expresiones
3 ; Expresi
on primitiva, es un n
umero
4 ; Expresi
on primitiva, es un n
umero
(= 3 4) ; Expresi
on compuesta.
(= 4 (+ 2 2)); 4 = (2 + 2) es una expresi
on compuesta
operadores logicos.
En esta introduccion
conjuncion,
disyuncion
y la condicional. Las expresiones proposicionanegacion,
les cuyo valor de verdad depende del valor de verdad de uno o mas componentes
que en principio pueden ser desconocidos, se llama predicado.
Negacion
proposicional, (neg p) es otra expresion
proposicioSi p es una r-expresion
nal que tiene un valor de verdad diferente a p. (neg p) es un predicado porque
no podemos determiar el valor de verdad hasta que se sepa el valor de verdad de
p.
DrRacket para determinar el valor de verAs podemos crear una definicion
de una proposicion.
dad de la negacion
Codigo 1.1: La negacion
1
2
3
4
5
1.1. LOGICA
MATEMATICA
una r-expresion
para realizar
especfica.
la funcion
Actividad 1-1
en el segmento de codigo
la <rExpresi
on> es una expresion
cuando <expresi
on
de la <rExpresi
booleana> 7 #t, una vez terminada la evaluacion
on>, el resto
se omite; por otro lado, si <expresi
on booleana> 7 #f la parte que se omite es
es la <rExpresi
la rExpresi
on, y la parte que se evaua
on-Alternativa>.
Conjuncion
es un operador logico
caso 1:
caso 2:
caso 3:
caso 4:
p
#t
#t
#f
#f
q
#t
#f
#t
#f
(y p q)
#t
#f
#f
#f
CAPITULO
1. FUNDAMENTOS MATEMATICOS
Probar el codigo
es una tarea que se realiza en el a rea de interacciones en
el interprete de DrRacket, probaremos cada una de las cuatro combinaciones.
Cuando se dice
> (y
#t
> (y
#f
> (y
#f
> (y
#f
#t #t); caso 1
#t #f); caso 2
#f #t); caso 3
#f #f); caso 4
Disyuncion
es un predicado que considera expresiones proposicionales y
La disyuncion
proposicional que tiene un valor de verdad #t, si al
genera una nueva expresion
menos una de las expresiones proposicionales pasadas como argumento es #t;
con valor #f, si todas las proposiciones pasadas como
y genera una expresion
argumento son #f.
suele llamarse simplemente o, para referirse a que se toma
A la disyuncion
el valor de verdad de uno o el otro valor de verdad que sea #t. El procedimiento
(o p q)
se ejecuta mediante una r-expresion
caso 1:
caso 2:
caso 3:
caso 4:
p
#t
#t
#f
#f
q
#t
#f
#t
#f
(o p q)
#t
#t
#t
#f
de la disyuncion
que considera solamente dos expreUna implementacion
siones proposicionales es la que sigue:
Codigo 1.3: La disyuncion
1
1.1. LOGICA
MATEMATICA
2
3
4
5
; (o #t #f) 7 #t
(define o
( (p q)
(if p #t q)))
#t); caso 1
#f); caso 2
#t); caso 3
#f); caso 4
La condicional
caso 1:
caso 2:
caso 3:
caso 4:
p
#t
#t
#f
#f
q
#t
#f
#t
#f
(-> p q)
#t
#f
#t
#t
el antecedente o hipotesis
de la implicacion.
2. El segundo operando que hemos identificado como q, se le conoce como el
implicacion.
Notamos que la condicional es #f unicamente en el caso cuando el antecedente es falso y el consecuente es verdadero, que en la tabla de verdad se ha
identificado con el caso 2.
CAPITULO
1. FUNDAMENTOS MATEMATICOS
caso 1:
caso 2:
caso 3:
caso 4:
p
#t
#t
#f
#f
q
#t
#f
#t
#f
(-> p q)
#t
#f
#t
#t
En los primeros dos casos p 7 #t, y en los siguientes dos casos p 7 #f,
as podemos utilizar este hecho para determinar dos diferentes casos y utilizar
if, y en el caso en que p 7 #t, la expresion
a evaluar debe tener
una expresion
q (hay que ser observadores), y cuando p 7 #f la
el mismo valor que la expresion
a evaluar es la primitiva #t.
expresion
1
2
3
4
5
1.2.
Conjuntos
1.2. CONJUNTOS
Actividad 1-2
1
2
3
4
5
(define card-v2
( (A c)
(if (empty? A)
c
(card-v2 (cdr A) (+ c 1)))))
datos en la definicion.
Palabra clave:
Nuevo concepto:
Significado:
util
en el
Para verificar que un conjunto no tiene elementos (una condicion
futuro) vamos a crear un predicado conjuntoVacio? que requiere un conjunto
y cuyo valor de verdad depende de los elementos del conjunto. Si A es un conjunto que no tiene elementos, entonces (conjuntoVacio? A) 7 #t; mientras que
(conjuntoVacio? A) 7 #f cuando el conjunto A tiene al menos un elemento.
DrRacket tiene un predicado que verifica que una lista sea la lista vaca, se
que deseamos. Nuevamente haremos un sinoni
llama empty? y realiza la funcion
que nos permita entender mucho mejor el codigo
mo en espanol
generado. Escri
bir sinonimos
no aumenta la complejidad del programa, y s aumenta el poder
expresivo.
Codigo 1.5: Predicado para verificar el conjunto vaco
1
2
3
4
5
;; Se define un sin
onimo para determinar el conjunto vacio
;; (conjuntoVacio Conjunto?) 7 Booleano?
;; (conjuntoVacio ()) 7 #t
;; (conjuntoVacio (a)) 7 #f
(define conjuntoVacio? empty?)
DrRacket utiliza el predicado empty? para verificar que una lista es vaca.
En definiciones posteriores tendremos la necesidad de utilizarla para verificar
as que es bueno hacer la
conceptos similares pero en diferente interpretacion,
diferencia desde ahora, creando este procedimiento especfico para conjuntos.
Ejemplo 1-5
Si suponemos un conjunto con los elementos a, b, c, d, podemos identifi
carlo con un nombre, digamos conjuntoA. Podemos as crear una abstraccion
para este conjunto como
1
As podemos utilizar el nombre conjuntoA para referirnos al conjunto que contiene a los elementos a b c y d. Sera util crear un procedimiento para verificar
la pertenencia.
CAPITULO
1. FUNDAMENTOS MATEMATICOS
10
1.2.1.
La pertenencia
que hacen
Todos los elementos que pertenecen al conjunto tienen en comun
que el predicado (pertenece? x A) 7 #t. El predicado pertenece? es evaluado
como #t cuando el elemento x se encuentra entre los elementos del conjunto A.
Para crear un procedimiento que verifique la pertenencia de un elemento x a
un conjunto A, debemos recordar que los conjuntos has sido modelados con listas.
Las listas en DrRacket pueden ser de una forma de las dos posibles:
(a0 |A0 ),
(a0 |A0 )se
donde a0 es el car del conjunto, y A es el cdr del conjunto. La notacion
ha establecido para indicar que el conjunto no es vaco.
Actividad 1-3
En los siguientes conjuntos (modelados con listas), encierra en un crculo el
car y subraya el cdr.
1. (1 2 3 4)
2. (a b c)
3. (seno coseno)
4. (x)
5. ()
1.2. CONJUNTOS
11
Actividad 1-4
de pertenece? sustituyendo el significado en
Sigue paso a paso la definicion
cada caso, para saber porque (pertenece? w (a r t w f)) 7 #t
1.2.2.
La cardinalidad
CAPITULO
1. FUNDAMENTOS MATEMATICOS
12
10
11
12
13
14
15
16
auxiliar
Es muy aconsejable utilizar funciones auxiliares. El uso de la funcion
auxiliar.
lugar de un conjunto y un numero
como en el caso de la funcion
auxliar puede utilizar parametros para llevar el control de los calcuUna funcion
cardinalidad-aux se utiliza
los que se realizan durante el proceso, en la funcion
el parametro res para llevar la cuenta de los elementos.
> (cardinalidad (1 2 3 x y z))
6
> (cardinalidad conjuntoVacio)
0
Actividad 1-5
Estudia el codigo
1.7, notaras que en la lnea 9 hay una llamada recursiva del
1.3. CUANTIFICADORES
13
Ejemplo 1-6
Los siguientes son ejemplos de conjuntos unitarios.
(0); El conjunto unitario que contiene a 0
(s); El conjunto unitario que contiene a s
(()); El conjunto unitario que contiene al conjunto vac
o
Actividad 1-6
Escribe en DrRacket un predicado que se llame conjuntoUnitario? y
que reciba como argumento un conjunto A, para que devuelva #t si
(cardinalidad A) 7 1, y devuelva #f en cualquier otro caso.
1.3.
Cuantificadores
1.3.1.
Cuantificador universal
El cuantificador universal es un predicado que vamos a identificar como paraTodo; para calcular el valor de verdad se requieren dos elementos:
CAPITULO
1. FUNDAMENTOS MATEMATICOS
14
andmap.
espanol,
de la funcion
Codigo 1.8: El cuantificador universal
1
2
3
4
5
6
de decision:
1.3. CUANTIFICADORES
15
Un modo mas cuidadoso de modelar el requerimiento mostrado en el ejemplo 1-7 es utilizando un cuantificador universal. Darnos cuenta de que necesitamos utilizar un cuantificador es sencillo una vez que nos damos cuenta de que se
debe verificar un predicado en cada uno de los elementos de un dominio. En el
caso del ejemplo 1-7, el predicado que se tiene que verificar es esta cerrado?, y se
debe verificar sobre cada uno (no sobre todos1 ) de los elementos del dominio
que esta conformado por los puertos, pero no todos los puertos, sino solamente
aqueellos que son de entrada.
Ejemplo 1-8
en donde uno de los requeriImagina que estas desarrollando una aplicacion
mientos dice:
Si todos los puertos de lectura estan cerrados, entonces es sistema es
seguro.
Un modo mas adecuado es con un cuantificador universal.
(paraTodo
( (puertoDeSalida) (cerrado? puertoDeSalida))
conjuntoPuertosDeSalida)
El resultado sera #t, si se verifica que cada uno de los puertos de salida esten
Palabra clave:
Predicado:
Dominio:
CAPITULO
1. FUNDAMENTOS MATEMATICOS
16
(*
2 x) (cuadrado
2. (( (x) (>
(*
2 x) (cuadrado
3. (( (x) (>
(*
2 x) (cuadrado
Sustitumos el smbolo x por el valor que debe ser evaluado y hacemos las
operaciones que corresponden.
1. (> (* 2 20) (cuadrado 20)) 7 ?, y
2. (> (* 2 35) (cuadrado 35)) 7 ?, y
3. (> (* 2 60) (cuadrado 60)) 7 ?.
El smbolo ? significa que no sabemos hasta el momento el significado de la
por lo que habra que evaluar la expresion,
empecemos por la primera:
expresion
1 : (>
1.a : (>
1.b : (>
1.c : (>
Actividad 1-8
1.3. CUANTIFICADORES
1.3.2.
17
Cuantificador existencial
la informacion
cuantificador existencial utilizaPara edntender como
evalua
remos el siguiente concepto:
(existeUn
( (P A)
(cond ((conjuntoVacio? A) #f )
((P (car A)) #t )
(else (existeUn P (cdr A))))))
Notemos en los tres casos, los dos primeros corresponden a casos base y el
ultimo
es un caso recursivo porque se hace una llamada al mismo procedimiento.
1. El primer caso es cuando (conjuntoVacio? A) 7 #t, esto sucede porque no
hay elementos en el conjunto de modo que es claro que no existe elemento
alguno que cumpla cualquier propiedad.
2. El segundo caso es cuando (P (car A)) 7 #t. Al evaluar el predicado P
con el primero de los valores del conjunto A, se produce #t, esto es suficiente
como #t.
para terminar el procedimiento y evaluar toda la expresion
3. El tercer caso es la llamada recursiva, aqu es importante observar que la
llamada se realiza con el mismo predicado P, pero con una instancia diferente del conjunto A, de hecho es el mismo conjunto excepto el primer
garantiza que eventualmente se alcanzara el
elemento; esta modificacion
conjunto vaco, que es uno de los casos base, y terminara el procedimiento.
Ejemplo 1-9
(existeUn (
CAPITULO
1. FUNDAMENTOS MATEMATICOS
18
Ejemplo 1-10
> (existeUn (
#t
> (existeUn (
#f
>
Ejemplo 1-11
(existeUn (
(( (x) (>
x 100)) 2) 7 #f
(( (x) (>
x 100)) 20) 7 #f
(( (x) (>
x 100)) 200) 7 #t
(existeUn (
19
Actividad 1-9
evaluando los eleCalcula detalladamente el valor de verdad de la expresion,
mentos del dominio que sean necesarios.
(existeUn
( (x) (= (- (* 3 x) (* 24 x)) (- x (* 8 x))))
(13 61 9 24 89 920))
1.4.
estudiaremos como
En esta seccion
comparar conjuntos, crear conjuntos, ha
cerlos crecer, y como
combinarlos para formar nuevos conjuntos con caractersticas particulares.
1.4.1.
Subconjuntos
CAPITULO
1. FUNDAMENTOS MATEMATICOS
20
Actividad 1-10
Subconjunto propio
Pensemos que A y B son conjuntos y (subconjunto? A B) 7 #t (A es subconjunto de B es cierto), pero tambien sucede que B tiene al menos un elemento que
no pertenece al conjunto A; decimos entonces que A es un subconjunto propio
del conjunto B.
Notemos en primer lugar que (subconjunto? A B) 7 #t, esto dice que al
existe
menos A tiene tantos elementos como B, pero luego hay mas informacion,
al menos un elemento de B que no pertenece a A, esto aclara que B tiene mas
elementos que A.
Vamos a crear un predicado que determine si un conjunto es subconjunto
propio de otro conjunto. Para esto debemos verificar que todos los elementos del
conjunto propuesto pertenecen al otro conjunto.
Nuestro predicado debe:
Recibir como entrada dos conjuntos, el conjunto A que es el supuesto subconjunto propio; y otro conjunto B que es el que debe contener a todos los
elementos de A.
Devolver como salida, #t si A es subconjunto de B, y existe al menos un
elemento de B que no pertenece a A.
Codigo 1.11: Subconjunto propio de un conjunto
1
2
3
4
5
6
(existeUn (
))
1.4.2.
21
Igualdad de conjuntos
Sean A y B dos conjuntos. Decimos que los dos conjuntos A y B son conjuntos
iguales si ambos contienen exactamente los mismos elementos. Para determinar
que dos conjuntos (definidos extensionalmente) son contienen los mismos elementos, debemos hacer dos cosas:
1. Verificar que (subconjunto? A B) 7 #t. Esto nos dice que todos los elemen cabe la posibilidad
tos de A pertenecen a B, pero eso no es todo porque aun
que (subconjuntoPropio? A B) 7 #t.
2. Tambien debemos verificar (subconjunto? B A) 7 #t. Esta segunda con sola, dice que todos los elementos de B tamien son elementos de A.
dicion
(2 1 3) (2 3 1))
(2 1 3) (1 2 3))
(2 1 3) (2 3 1 4))
(2 1 3 4) (2 3 1))
Estos ejemplos nos muestran que dos conjuntos son iguales in importar el
orden que se tomen los elementos.
1.4.3.
de conjuntos
Creacion
Los conjuntos pueden ser creados de dos maneras, o bien puede detallarse
una regla que determine que elementos contiene el conjunto, o bien puede deta implcita,
llarse a cada elemento. A la primera forma se le conoce como creacion
explcita. DrRacmientras que a la segunda manera se le conoce como creacion
ket puede definir los conjuntos de ambas maneras.
Supongamos que deseamos crear un conjunto:
CAPITULO
1. FUNDAMENTOS MATEMATICOS
22
esPar? es un sinonimo
de la
primitiva even?
funcion
1.4.4.
el numero
4) al conjunto, debemos hacer un procedimiento que genere un nuevo
conjunto que contenga a todos los elementos del conjunto A, pero tambien al
nuevo elemento (en este caso el 4).
Recordemos que estamos modelando los conjuntos por medio de listas, las
listas que sirven para modelar conjuntos no deben tener elementos repetidos, de
23
modo que tambien debemos considerar este caso a la hora de modelar la funcion
de agregar un elemento al conjunto.
As vamos a definir el problema de agregar un elemento e a un conjunto C,
como un procedimiento que se llame agregarAlConjunto y con las siguientes
condiciones de entrada y salida.
Entrada: El procedimiento agregarAlConjunto recibe un elemento e de cons recibe un elemento e y
una lista L; y produce una
cualquier tipo, puede incluso ser un conjunto; y recibe un conjunto A.
nueva lista con el nuevo
elemento e como car y los
Salida: Debe devolver un conjunto (en forma de una lista), que contenga elementos de L como el cdr de
la nueva lista.
como primer elemento al candidato e, y el resto del conjunto a la lista C.
DrRacket ofrece una primitiva que nos permite agregar elementos a una lista, se llama cons (que viene de la palabra construct), y hace precisamente lo que
deseamos. Recibe como entrada un elemento de cualquier tipo y una lista, y devuelve una nueva lista con e como primer elemento y a C como el resto de los
elementos. Sin embargo vamos a renombrar este procedimiento para hacerlo mas
adecuado a nuestro idioma.
Figura 1.1: La accion de agregarAlConjunto genera una nueva lista con el nuevo elemento.
24
CAPITULO
1. FUNDAMENTOS MATEMATICOS
given: 2
arguments...:
3
4
es de la forma (OPDR opnd ...)es decir, priPor regla general una rExpresion
empiece
mero un operador, luego todos los operandos; a menos que la expresion
25
Actividad 1-11
Africa
Cano Hurtado
Lenguaje
Java
DrRacket
C++
DrRacket
Java
DrRacket
C++
DrRacket
C++
DrRacket
Java
C++
Java
C++
Semestre
2
6
7
2
6
7
5
5
6
6
5
7
5
5
1. Formaliza la tabla como un conjunto llamado convocados cuyos elementos sean tripletas de la forma (nombre lenguaje semestre).
2. Crea un nuevo conjunto y haz un procedimiento en DrRacket que agrege
solo los nombres de las personas en la lista de convocados, que cumplan
con estar en un semestre avanzado (mayor que 4) y que sepan programar
en Java o DrRacket. Este conjunto se llama seleccionados.
1.4.5.
de conjuntos
Union
conjunto con los elementos de otros dos conjuntos. Si A y B son conjuntos, la union
del conjunto A con el conjunto B significa hacer un nuevo conjunto con todos los
elementos de B, junto con aquellos elementos de A que no pertenezcan a B.
de los conjuntos A con B la vamos a denotar como (union A B),
La union
vamos a considerar de
y esto produce un nuevo conjunto. Para modelar la union
deben estar invariablemente todos los elementos de B, y le
inicio que en la union
vamos a agregar los elementos de A, recordemos que el procedimiento agrega los
elementos si no pertenecen al conjunto.
El procedimiento para hacerlos debe considerar dos posibles casos:
1. Cuando (conjuntoVacio? A) 7 #t, entonces lo que se produce es precisa-
CAPITULO
1. FUNDAMENTOS MATEMATICOS
26
Actividad 1-12
En un negocio pusieron una maquina que despacha comida chatarra, al principio lo atenda la empresa A, aunque hay otra empresa B que ofrece un servicio similar. La maquina atendida por la empresa A surte cacahuates, gomitas, chiclets y pasitas. Luego de un tiempo, la empresa B compro la
empresa A junto con todas sus maquinas. Antes de la compra la empresa B
atenda maquinas que surten frituras, cacahuates, pandulce, y refrescos;
ahora sigue surtiendo sus mismos productos junto con los productos que antes
surta solamente la empresa A.
1. Del parrafo anterior extrae todo el conocimiento que puedas, y formalizalo mediante definiciones DrRacket.
2. Haz un procedimiento que reciba como entrada los conjuntos de cada
empresa, calcule y devuelva como salida el nuevo conjunto de mercanca
que comercializa la empresa B.
Actividad 1-13
de conjuntos puede extenderse para unir un conjunto de conjuntos,
La union
generalizada, que vamos a conocer con el nombre
a esto lo llamamos union
union*. Considera las siguientes restricciones para que escribas un progama
en DrRacket para modelar el comportamiento de union*. Para las siguientes
restricciones CONJUNTOS representa al conjunto de conjuntos; y res representa
generalizada, inicialmente con conjuntoVacio.
el resultado de la union
generalizada
1. si (conjuntoVacio? CONJUNTOS) 7 #t, entonces la union
(union* CONJUNTOS) 7 conjuntoVacio.
2. en otro caso, debemos hacer union* con el resto de los CONJUNTOS, y la
union de res con el primer elemento de CONJUNTOS.
1.4.6.
27
de conjuntos
Interseccion
es vaca.
1. Si (conjuntoVacio? B) 7 #t, entonces la interseccion
2. Si (conjuntoVacio? A) 7 #t, entonces se debe devilver el resutado que se
debe estar generando en res.
3. Si (pertenece? (car A) B) 7 #t, significa que un elemento de A tambien
cuyo resultado
pertenece a B, de modo que debe agregarse a la interseccion
del resto del
se va generando en res, as que debemos hacer la interseccion
conjunto A, con B, y habiendo agregado el primer elemento de A al resultado
res.
del resto de los elementos de
4. De otro modo, debemos hacer la interseccion
A, junto con los demas argumentos sin modificar.
11
12
13
14
15
16
17
;; La interseccion de conjuntos
;; (interseccion Conjunto Conjunto) 7 Conjunto?
;; (interseccion (1 2 3 4) (3 7 6 2)) 7(2 3)
(define interseccion
( (A B)
(interseccion-aux A B ())))
CAPITULO
1. FUNDAMENTOS MATEMATICOS
28
Actividad 1-14
Carrera
LCC
LCC
LM
LCC
LF
LCC
Carrera
LCC
LCC
LCC
LCC
LF
LF
LM
LM
Lenguaje
Pascal
DrRacket
DrRacket
C++
C++
C++
Lenguaje
Pascal
C
C++
DrRacket
C++
C++
DrRacket
C++
Grado
4
4
4
4
4
4
Grado
6
6
6
6
6
6
6
6
1.4.7.
funcion.
se realiza cuando es necesarios separar los elementos que solo
Esta operacion
pertenecen a un conjunto, ya que los elementos que pertenecen a ambos conjun-
29
tos y los elementos que solo pertenecen al otro conjunto son omitidos.
se hace verificando cada uno
Un procedimiento para realizar esta funcion
de los elementos del conjunto A, y construir el nuevo conjunto res con los que
no pertenecen al conjunto B (la pertenencia al conjunto A es obvia). Debemos
verificar los siguientes casos:
1. Si (conjuntoVacio? A) 7 #t, el resultado es lo que el nuevo conjunto res
tenga, inicialmente res 7 conjuntoVacio.
2. Si (pertenece? (car A) B) 7 #t, entonces debemos omitir este elemento,
porque pertenece a ambos conjuntos y solamente deseamos los que pertenecen exclusivamente al conjunto A, y debemos seguir el procedimiento con
el resto de los elementos de A y sin alterar el resultado res.
3. En otro caso, debemos hacer nuevamente el procedimiento diferenciaConjuntos pero ahora con el resto de los elementos de A, y agregando el
primer elemento de A al conjunto de respuesta res.
Codigo 1.16: La diferencia de conjuntos
1
2
3
4
5
6
7
8
9
(define diferenciaC-aux
( (A B res)
(cond ((conjuntoVacio? A) res)
((pertenece? (car A) B) (diferenciaC-aux (cdr A) B res))
(else (diferenciaC-aux (cdr A) B (agregarAlConjunto (car A) res))))))
10
11
12
13
(define diferenciaConjuntos
( (A B)
(diferenciaC-aux A B ())))
1.5.
El conjunto potencia
CAPITULO
1. FUNDAMENTOS MATEMATICOS
30
Como respondiste en la actividad 1-15, el conjuntoPotencia tiene solamente un subconjunto, que es precisamente conjuntoVacio, de modo que
(conjuntoPotencia conjuntoVacio) 7 (())
Ahora supongamos que A 7 (a), es decir el conjunto A es un conjunto
unitario. Deseamos ahora calcular (conjuntoPotencia A).
Un conjunto que tiene un solo
elemento se llama conjunto
unitario (pagina 13).
Ejemplo 1-12
Enlista los subconjuntos de A1 7 (a).
Los subconjuntos de (a) son conjuntoVacio y A, esto es (),(a). As
(conjuntoPotencia A1 ) 7 (() (a))
31
Ejemplo 1-14
(conjuntoPotencia (c b a)) 7 (() (a) (b) (b a) (c) (c a) (c b) (c
b a))
Nota que la primera mitad de elementos es precisamente
(conjuntoPotencia (cdr A)), y todos los subconjuntos de la segunda
mitad tienen como primer elemento a (car A).
Actividad 1-16
Calcula el conjunto potencia de A 7 (d c b a), y observa todas las anotaciones que hemos hecho hasta ahora.
unico
elemento es el conjunto vaco.
Cuando el conjunto no es vaco, tomaremos uno a uno sus elementos y vamos
a construir el conjunto potencia del conjunto unitario, del conjunto que tiene dos
elementos y as en adelante.
El modelo computacional se hace en tres partes:
de agre1. La parte mas profunda se llama agregaEnCada, y tiene la funcion
gar un elemento cualquiera a una lista de subconjuntos. Esto es porque nos
hemos dado cuenta de que la mitad de los elementos del conjunto potencia
del conjunto A tiene el (car A), y el resto de los subconjuntos no lo tie utiliza una funcion
primitiva llamada map, esta primitiva
ne. Esta funcion
opera en su forma mas simple con dos ingredientes, un procedimiento P y
una lista C. Al hacer map, se aplica el procedimiento P en cada uno de los
elementos de C, y lo que produce es una nueva lista con las evaluaciones
encontradas para cada elemento de C:
(map P C) 7 (list (P c1 ) (P c2 ) . . . )
CAPITULO
1. FUNDAMENTOS MATEMATICOS
32
Ejemplo 1-15
(map ( (x) (+ x 1)) (0 1 2 3)) 7 (1 2 3 4)
lambda.
Aqu el predicado es anonimo,
es una expresion
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1.6.
33
(a b c))
(b c d) (a) (a d) (a c) (a c d)
(c d e) (b) (b e) (b d)
c d e) (a) (a e) (a d)
c d e) (a b) (a b e) (a b d)
c d) (a b c d e))
Producto cartesiano
6
7
8
9
10
11
12
13
14
15
CAPITULO
1. FUNDAMENTOS MATEMATICOS
34
16
17
18
19
;; (2de (a b)) 7b
(define 2de
( (par)
(cadr par)))
Ejemplo 1-16
El poducto cartesiano de los conjuntos A 7 (1 2 3 4) y B 7 (7 8 9) se construye con todos los pares que se forman con los elementos de ambos conjuntos
((1 7) (1 8) (1 9) ; los pares de 1 con cada uno de (7 8 9)
(2 7) (2 8) (2 9); los pares de 2 con cada uno de (7 8 9)
(3 7) (3 8) (3 9); los pares de 3 con cada uno de (7 8 9)
(4 7) (4 8) (4 9)); los pares de 4 con cada uno de (7 8 9)
es la aplicacion
del procedimiento creaPar
En el ejemplo 1-16, cada renglon
de uno de los elementos del conjunto A con todos los elementos de B. Esto lo
podemos modelar con map:
(map ( (b)(creaPar
(map ( (b)(creaPar
(map ( (b)(creaPar
(map ( (b)(creaPar
1
2
3
4
b)
b)
b)
b)
0 (7
8
8
0 (7 8
0 (7 8
0 (7
9)))
9)))
9)))
9)))
((1
((2
((3
((4
7) (1
7) (2
7) (3
7) (4
8) (1
8) (2
8) (3
8) (4
9))
9))
9))
9))
Aqu hay dos anotaciones. Primero estas cuatro aplicaciones de map se pueden automatizar con el uso de otro map; y segunda, de utilizar un segundo map
resulta una lista con las cuatro aplicaciones, pero no queremos una lista2 de cuatro listas2 , sino una sola lista que contenga a todos los pares. Para resolver esto
utilizamos append*, que sirve para anexar los elementos de varias listas al final
de la primera lista.
2 Aqu equivale a conjunto.
35
1.7.
Relaciones y Funciones
36
CAPITULO
1. FUNDAMENTOS MATEMATICOS
que no tiene asociaciones, se llama la relacion
vaca.
1. Hay una relacion
2. El conjunto que proporciona los primeros elementos de los pares de la re se llama dominio.
lacion
3. El conjunto que proporciona los segundos elementos de los pares de la re se llama codominio.
lacion
puede estar relacionado
4. Si un elemento del dominio aparece en la relacion,
con uno o mas elementos del codominio.
Un problema muy frecuente es determinar todos los elementos del codomi elemento del dominio. Para modelar esto se
nio que estan relacionados con algun
Llamaremos a al elemento del
require de un elemento del dominio y la relacion.
que esta dada en forma de una lista de pares ordenadominio y R a la relacion
dos. Notemos que un supuesto fuerte es que (pertenece? a A) 7 #t, pero esta
queda bajo la responsabilidad del que utilice la funcion.
verificacion
Codigo 1.21: Imagen de un elemento bajo una relacion
1
2
3
4
5
6
37
Actividad 1-17
Escribe un procedimiento llamado imagen* con entrada un subconjunto C del
R, y la relacion
R en forma de una lista de pares
dominio de una relacion
considerando
ordenados; y salida la imagen del subconjunto bajo esa relacion,
que:
Si C 7 conjuntoVacio, entonces (imagen* C) 7 conjuntoVacio
de la imagen de cada elemento del
en otro caso, se debe hacer la union
conjunto C.
Actividad 1-18
R y salida
Escribe un procedimiento llamado rango, con entrada una relacion
donde cada uno de los elementos
un subconjunto del dominio de la relacion,
del subconjunto cumpla que su imagen no es vaca.
1
2
3
4
5
6
7
En una funcion
se cumple que
es un tipo especial de relacion.
Una funcion
son conjuntos unitodas las imagenes de los elementos del rango de la relacion,
esta relacionado
tarios. Esto significa que cada elemento del rango de la relacion,
con exactamente un elemento del codominio.
Codigo 1.22: Determina si una relacion es una funcion
1
2
3
4
5
6
7
8
Ya que las funciones son un caso especial de las relaciones, para calcular la
imagen de un elemento y la imagen extendida de un conjunto de elementos del
dominio, podemos utilizar las funciones hechas para las relaciones, ver el codigo
en la pagina 36.
CAPITULO
1. FUNDAMENTOS MATEMATICOS
38
Actividad 1-19
Considera que F 7 ((1 5) (2 4) (4 1) (6 3) (3 7) (5 2) (7 6)) y realiza
las siguientes actividades:
1. Escribe un procedimiento que se llame listaImagenes que recibe un
F y que obtensubconjunto de elementos del dominio C y una funcion
ga una lista con las imagenes de los elementos (1 3 5), por ejemplo
(listaImagenes (1 3 5)) 7 (5 7 2), porque (imagen 1 F) 7 5,
(imagen 3 F) 7 7 y (imagen 5 F) 7 2.
2. Escribe un predicado (devuelve #t o #f) que se llame soloPares? que
1.7.1.
de funciones
Composicion
39
15
16
17
18
19
20
21
22
23
24
4 5))
d e))
a) (2 b) (2 e) (3 a) (3 d) (4 c) (4 b) (5 c) (5 e)))
1) (c 3) (d 5) (e 4)))
3) (5 3))
Actividad 1-20
Considera las siguientes funciones F 7 ((1 3) (2 1) (3 2) (4 4)) y
G 7 ((4 3) (3 4) (2 2) (1 1)). Realiza ahora lo siguiente:
de las funcion
F con G.
1. Calcula la composicion
de las funcion
G con F.
2. Calcula la composicion
CAPITULO
1. FUNDAMENTOS MATEMATICOS
40
Actividad 1-21
2. Smbolos y Alfabetos
Contenido
2.1.
2.1. Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
2.2. Alfabetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
44
46
46
2.2.4. Subalfabeto . . . . . . . . . . . . . . . . . . . . . . . . .
47
48
Smbolos
2.1.1.
Smbolos en DrRacket
un apostrofe
porque son primitivas del lenguaje, esto es que el significado es e l
mismo.
41
CAPITULO
2. SIMBOLOS
Y ALFABETOS
42
Figura 2.1: Smbolos utilizados en la escritura del libro de Isaas. The Digital Dead Sea Scrolls
> estoEsUnSimbolo
estoEsUnSimbolo
> a
a
> 12*+=
12*+=
>
2.2. ALFABETOS
43
En DrRacket hay que tomar en cuenta que los smbolos de las letras minuscu
las son diferentes a los smbolos de las letras mayusculas,
y pueden significar
cosas diferentes:
> (define a 10)
> (define A 20)
> (+ a A)
30
2.2.
Alfabetos
(define S1 (1 0))
Notemos que escencialmente un alfabeto tiene la misma forma que un conjunto, tal y como se ha utilizado hasta ahora (vease el ejemplo 1-5 de la pagina 9).
de los objetos que se han creado.
La diferencia se observa en la interpretacion
CAPITULO
2. SIMBOLOS
Y ALFABETOS
44
2.2.1.
Verificar un alfabeto
3. El conjunto debe ser finito. Ya que generalmente los alfabetos tienen pocos
smbolos (en los lenguajes naturales, uno de los alfabetos mas largos es el
jemer, que se habla y escribe en Camboya y el alfabeto tiene 72 letras). En
4. El conjunto debe contener exclusivamente smbolos. En DrRacket se puede verificar que una entrada es un smbolo mediante el predicado symbol?
(ver la ayuda de DrRacket).
2.2. ALFABETOS
45
Figura 2.2: Algunas frases en camboyano, el idioma es el jemer. Fuente: Gua de conversacion
en jemer, en http://wikitravel.org/es/Gua de conversacion Jemer
Actividad 2-1
Escribe un predicado en DrRacket que permita determinar si un conjunto es
un alfabeto.
Codigo 2.3: Verificacion de un alfabeto
1
2
3
4
5
6
7
8
9
del codigo
CAPITULO
2. SIMBOLOS
Y ALFABETOS
46
2.2.2.
Claro que podemos utilizar el predicado hecho anteriormente para determinar la pertenencia de un elemento a un conjunto (pagina 11), ya que los alfabetos
son conjuntos.
> (pertenece? x (a w i g x))
#t
> (define S (0 1)) ;; Sea S el alfabeto con los s
mbolos (0 1)
> (pertenece? 0 S)
#t
> (pertenece? 2 S)
#f
2.2.3.
Cardinalidad de un alfabeto
(cardinalidad (0 1))
(cardinalidad (a b c d e))
(cardinalidad alfabetoVacio)
(define S (q k s u e l a p))
(cardinalidad S)
2.2. ALFABETOS
47
Actividad 2-2
Calcula la cardinalidad de los siguientes alfabetos. Utiliza la herramienta cardinalidad que has programado en DrRacket.
1. (3 90 2 8 1)7
2. (2 903 1 0 3)7
3. (casa perro azul crisantemo)7
4. (a b)7
5. (23bv 2q01 sw)7
2.2.4.
Subalfabeto
Una vez mas recordamos que los alfabetos son conjuntos, unos conjuntos que
solamente agrupan smbolos. Pero como conjuntos, es posible definir el concepto
de subalfabeto analogo al concepto de subconjunto (ver pagina 19).
Si S1 y S2 son alfabetos, decimos que S1 es un subalfabeto de S2 cuando
todos los smbolos de S1 pertenecen al alfabeto S2.
efectiva de subconjunto? es un predicado que se estudio en
La definicion
la pagina 19, podemos emplear este predicado para crear otro predicado con un
nombre mas adecuado:
Codigo 2.4: Subalfabeto
1
2
Actividad 2-3
Escribe un procedimiento en DrRacket que se llame subalfabetos y que reciba dos argumentos: un alfabeto S y una lista de alfabetos LS y devuelva como
salida una lista de valores booleanos. Ambas listas, la lista de alfabetos de entrada LS y la de salida son de la misma longitud, y para cada alfabeto Si en la
lista de alfabetos de entrada LS, corresponde un valor booleano en la lista de
salida. La i-esima salida debe ser #t si (subalfabeto? Si S) 7 #t.
(subalfabetos (0 1 2 3 4) ((2 3 4) (0 2 4) (3 4 5))) 7
(#t #t #f )
CAPITULO
2. SIMBOLOS
Y ALFABETOS
48
2.2.5.
Igualdad en alfabetos
Dos alfabetos S1 y S2 son iguales si contienen exactamente los mismos smbolos. Para determinar la igualdad se requiere:
1. Determinar que todos los smbolos de S1 pertenecen tambien al alfabeto S2 .
Hacer solo esta parte no es suficiente, porque pueden haber smbolos en S2
que no pertenecen a S1 .
2. Determinar que todos los smbolos de S2 pertenecen tambien al alfabeto S1 .
Codigo 2.5: Verificar igualdad en alfabetos
1
2
3
4
Actividad 2-4
Separa la siguiente lista de alfabetos en dos sublistas. Cada una de las listas
debe tener alfabetos iguales. Prepara un procedimiento en DrRacket que se
llame separaAlfabetos que haga esta tarea automaticamente.
Entrada: una lista de alfabetos.
Salida: una lista con dos listas, en cada lista debe haber alfabetos iguales.
((3 2 0 1) (0 2 1 3) (4 2 1 3) (4 3 1 2) (2 4 3 1) (1 2 3 0) (0 3 2
1) (3 1 4 2) (0 2 3 1) (3 2 1 4) (1 3 2 4) (2 1 0 3) (1 3 0 2) (0 1
2 3) (3 0 1 2) (2 1 4 3) (1 0 3 2) (3 1 2 0) (1 2 3 4) (4 1 3 2) (2
3 4 1) (3 2 4 1) (2 3 0 1) (2 4 1 3))
1
2
3
4
5
6
7
8
;; creas tu procedimeinto
(define separaAlfabetos
( (LA)
;; ... Aqui va tu codigo
))
9
10
11
;; Pruebas tu codigo
(separaAlfabetos LAlfabetos)
3. Palabras y Lenguajes
Contenido
3.1. Palabras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
50
51
52
53
53
54
de palabras . . . . . . . . . . . . . . . . .
3.2.1. Concatenacion
54
56
58
59
3.2.5. Subpalabras . . . . . . . . . . . . . . . . . . . . . . . . .
61
63
3.3. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
66
66
67
68
68
3.3.6. Sublenguaje . . . . . . . . . . . . . . . . . . . . . . . . .
69
71
72
de lenguajes . . . . . . . . . . . . . . . .
3.4.1. Concatenacion
72
73
74
Con solo los smbolos no se puede hacer mucho, para que su utilidad sea
notable tenemos que formar con ellos otros elementos que sirvan para comunicar un mensaje. Lo primero que haremos con los smbolos es construir palabras,
luego con esas palabras podemos determinar lenguajes.
3.1.
Palabras
Una palabra es una secuencia finita de smbolos. Una secuencia es lo mismo que una cadena, lista o como en ciencias computacionales se conoce como un
string.
49
CAPITULO
3. PALABRAS Y LENGUAJES
50
Ejemplo 3-1
Como vamos a modelar una palabra mediante una lista de smbolos, necesitamos un predicado que determine si un objeto es una palabra o no lo es. El
predicado debe devolver #t cuando se le presente una palabra en forma de una
lista de smbolos que puede o no ser la lista vaca; y por otro lado debe responder
con #f cuando lo que se presente no sea una palabra.
Codigo 3.1: Predicado para detectar una palabra
1
2
3
4
5
6
7
8
3.1.1.
La palabra vaca
3.1. PALABRAS
51
Claro que tambien podemos verificar que una palabra sea la palabra vaca.
Codigo 3.3: Verificacion de palabra vaca
1
2
3
4
5
3.1.2.
Para determinar si dos palabras son iguales ahora hay que verificar uno a uno
los elementos de ambas palabras, verificando la igualdad de los smbolos. Pode
mos establecer un enunciado mas formal para describir la idea de la verificacion.
Para verificar la igualdad de las palabras w y s:
1. Si (palabraVacia? w) 7 #t y (palabraVacia? s) 7 #t, es claro que son
iguales, de modo que la igualdad de las palabras se verifica y se devuelve
(w0 |w0 ) se
La notacion
#t.
establecio en la pagina 10, pero
w0 se refiere al car de una
2. Si w 7 (w0 |w0 ) y s 7 (s0 |s0 ), y se tiene que (iguales? w0 s0 ) 7 #t, lista, y w0 se refiere al cdr de la
entonces significa que al menos en el primer smbolo ambas palabras son misma lista.
iguales, as que ahora hay que verificar la igualdad de la palabra w0 con la
palabra s0 .
3. En otro caso, devolver #f, ya que difieren en un smbolo.
CAPITULO
3. PALABRAS Y LENGUAJES
52
Actividad 3-1
3.1.3.
Palabras de un alfabeto
Actividad 3-2
Escribe un predicado en DrRacket que se llame esPalabra? que reciba una
palabra w y un alfabeto S, y que devuelva como salida un #t si todos los smbolos de w fueron tomados de S, y devuelve #f en caso contrario. Consejo: puedes
utilizar el cuantificador universal (pagina 14).
1
2
3
4
5
6
7
8
3.1. PALABRAS
> (esPalabra?
#t
> (esPalabra?
#t
> (esPalabra?
#f
> (esPalabra?
#t
>
3.1.4.
53
(2 3 4) (1 2 3 4 5))
(2 3 4 2 2 2 4 4 5) (1 2 3 4 5))
(2 3 4 2 2 8 2 4 4 5) (1 2 3 4 5))
() (1 2 3 4 5))
Actividad 3-3
Escribe un procedimiento DrRacket que permita obtener el alfabeto de una
palabra.
Codigo 3.5: El alfabeto de una palabra
1
2
3
4
5
6
7
3.1.5.
CAPITULO
3. PALABRAS Y LENGUAJES
54
Para decir que una palabra w tiene longitud k, lo vamos a expresar como
(longitud w) 7 k
establece que un procedimiento de nombre longitud tiene la
Esta notacion
de contar los smbolos de la palabra.
funcion
3.2.
En las siguientes secciones estudiaremos algunas operaciones que nos permiten manipular palabras, para obtener nuevas palabras o bien para determinar
condiciones particulares de las palabras.
3.2.1.
de palabras
Concatenacion
55
de append exige que todos sus operandos sean listas, excepto por el ultimo
CAPITULO
3. PALABRAS Y LENGUAJES
56
La identidad en las palabras
Es decir que al concatener por la derecha la palabraVacia a cualquier palabra w se obtiene esa misma palabra w. Por otro lado, si se concatena la palabraVacia con cualquier otra palabra w se obtiene el mismo resultado.
(concatenar palabraVacia w) 7 w
> (concatenar (a b c d) palabraVacia)
(a b c d)
> (concatenar palabraVacia (a b c d))
(a b c d)
3.2.2.
Podemos agregar smbolos a una palabra, escribiendole sus letras por cualquiera de sus extremos. Para hacer estas operaciones se requiere de un smbolo y
una palabra, el resultado siempre sera una nueva palabra. El smbolo que se da
como argumento no debe ser el smbolo (ver la pagina 43), pero la palabra dada
s puede ser la palabraVacia.
57
En general, al agregar un smbolo por la izquierda de la palabra w se obtiene otra palabra de la forma:
Actividad 3-5
de
Escribe un procedimiento que se llame escribeIzq que tenga la funcion
agregar por la izquierda un smbolo e a una palabra w. El producto debe ser
una nueva palabra donde el car es el smbolo e y el cdr es la palabra w.
Codigo 3.8: Escribir por izquierda
1
2
3
4
5
6
7
8
9
(escribeDer w) 7 ( )
CAPITULO
3. PALABRAS Y LENGUAJES
58
Actividad 3-6
3.2.3.
un procedimiento que sea mas eficiente utilizando funciones auxiliares, disenan que en uno de sus parametros se lleve la construccion
de la nueva
do una funcion
del resultado acpalabra, y de manera incremental se aplique la concatenacion
tual con la palabra.
que simplemente invoque la funcion
auxiFinalmente utilizar una funcion
liar con los argumentos debidamente inicializados.
Ejemplo 3-5
La potencia 4 de la palabra w 7 (a b b).
(a b b a b b a b b a b b)
59
Actividad 3-7
Escribe un procedimiento en DrRacket que calcule la n e sima potencia de una
7
8
9
10
11
12
13
14
15
16
17
3.2.4.
Prefijo y sufijo
Prefijo
(palabrasIguales? w (concatenar )) 7 #t
CAPITULO
3. PALABRAS Y LENGUAJES
60
Ejemplo 3-6
Si es precisamente la palabraVacia, entonces es un prefijo para la palabra w porque si hacemos 7 w, podemos asegurar que
(palabrasIguales? w (concatenar )) 7 #t
porque
(conacatenar ) 7 (conacatenar palabraVacia w) 7 w
Actividad 3-8
Escribe un predicado en DrRacket que se llame prefijo? y que reciba como
entrada dos palabras s y w. El predicado debe devolver #t si la palabra s es un
prefijo para la palabra w; y debe devolver falso en caso contrario.
Codigo 3.11: Prefijo de una palabra
1
2
3
4
5
6
7
8
Sufijo
De manera similar, si w, y son palabras en el mismo alfabeto S, decimos
que es un sufijo de la palabra w si podemos verificar que
(palabrasIguales? w (concatenar )) 7 #t
Podemos observar que si 7 palabraVacia entonces es un sufijo de w, porque podemos hacer que 7 w para lograr que (palabrasIguales? w (concatenar
)) 7 #t.
61
Actividad 3-9
Escribe un predicado en DrRacket que se llame sufijo? y que reciba como
entrada dos palabras s y w. El predicado debe devolver #t si la palabra s es un
sufijo para la palabra w; y debe devolver falso en caso contrario.
Codigo 3.12: Sufijo de una palabra
1
2
3
4
5
6
7
8
3.2.5.
Subpalabras
Sigamos suponiendo que w 7 (w0 w1 ... wn1 ) es una palabra; y supongamos tambien que 7 (0 1 ... m1 ) es otra palabra. Ambas palabras de
longitud mayor o igual que 0. Decimos que es una subpalabra de la palabra w
si podemos proporcionar dos palabras y con las que podamos verificar
(palabrasIguales? w (concatenar )) 7 #t
Si w 7 palabraVacia, solo podemos encontrar una subpalabra para w que
es precisamente 7 palabraVacia; porque podemos hacer que 7 7 palabraVacia, y hacer
(palabrasIguales? w (concatenar )) 7 #t
porque
(palabrasIguales? () (concatenar () () ())) 7 #t
Ejemplo 3-7
Digamos que w 7 (c o m p a r t o); entonces la palabra 7 (p a r)
es una subpalabra de w, porque podemos dar otras dos palabras 7 (c o
m) y 7 (t o) con las que podemos verificar que
(palabrasIguales? w (concatenar )) 7 #t
porque
(concatenar )7
(concatenar (c o m) (p a r) (t o)) 7 (c o m p a r t o)
CAPITULO
3. PALABRAS Y LENGUAJES
62
Ejemplo 3-8
Actividad 3-10
Escribe un predicado en DrRacket que se llame subpalabra? y que reciba
como entrada la palabra s y la palabra w, de modo que la computadora determine #t si la palabra s es una subpalabra de w, y de otro modo devuelva
#f.
Codigo 3.13: Subpalabra de una palabra
1
2
3
4
5
6
7
8
9
63
Actividad 3-11
Escribe un procedimiento en DrRacket que se llame componentesDe y que
reciba como entrada la palabra s y la palabra w, para que calcule la lista con
los tres componentes de la palabra: el prefijo , la subpalabra s y el sufijo
siempre que (subpalabra? s w) 7 #t, y en otro caso que la respuesta sea #f.
Codigo 3.14: Componentes de una palabra
1
2
3
4
5
6
7
8
9
3.2.6.
Palabra inversa
CAPITULO
3. PALABRAS Y LENGUAJES
64
Actividad 3-12
3.3.
Lenguajes
Al seleccionar los smbolos que forman las palabras, una pregunta inmediata
es cuantas palabras se pueden formar con un conjunto de letras (smbolos)?, voy
unica
letra a, y continuemos escribiendo por la derecha smbolos a la palabra que
resulte:
Es facil observar que con esta manera de crear nuevas palabras que con
tengan smbolos del mismo alfabeto, se pueden generar un numero
infinito de
palabras. As la cantidad de palabras que se pueden crear con un alfabeto de
cardinalidad finita, es infinito!
3.3. LENGUAJES
65
panol
no es el numero
total de palabras, faltan muchas de las palabras creadas en cada
(regionalismos) o las que son usadas de diferente forma (modismos); hay
region
as, 800,000
personas que se atreven a decir que son unas 800,000 palabras. Aun
es un numero
mucho menor que infinito.
Que tienen de especial las palabras que pertenecen al idioma espa nol? y
las que pertenecen a otro idioma en particular?
Lo unico
que tienen de especial estas palabras son que ellas tienen un significado. Seleccionando las palabras que se utilizan es posible transmitir un mensaje, porque cada palabra tiene un significado en s, y juntas aportan un mensaje.
Decimos entonces que un lenguaje es simplemente un conjunto de palabras. Es
te conjunto puede ser finito (como el caso del espanol,
aunque no se sepa bien
cuantas son) o puede ser infinito. Un lenguaje puede ser un listado de palabras,
o pueden seleccionarse las palabras que obedezcan a una regla de escritura.
Ejemplo 3-10
Los siguientes son ejemplos de alfabetos:
((b e g i n) (e n d) (i f) (e l s e)). Este alfabeto solo acepta
estas cuatro palabras
((1 0) (1 0 0) (1 0 0 0) (1 0 0 0 0) (1 0 0 0 0 0)). Este alfabeto acepta cinco palabras.
beto en espanol
y minusculas
e
CAPITULO
3. PALABRAS Y LENGUAJES
66
3.3.1.
En ocasiones es necesario saber cual es el alfabeto que dio origen a las palabras de un lenguaje. Para responder preguntas de ese estilo debemos crear un
procedimiento que nos permita recuperar las letras con las que se escribieron las
palabras de un lenguaje.
Actividad 3-13
Escribe un procedimiento en DrRacket que permita obtener el conjunto de
letras con las que se puede escribir cualquier palabra de un alfabeto dado. El
procedimiento se debe llamar alfabetoDe*, y recibe como entrada un lenguaje L en la forma de una lista de palabras; la salida del procedimiento debe ser
un alfabeto, es decir un conjunto de smbolos.
Codigo 3.16: Alfabeto inducido por lenguaje
1
2
3
4
5
6
7
8
9
10
3.3.2.
Lenguaje Nulo
3.3. LENGUAJES
2
3
4
5
67
3.3.3.
El lenguaje identidad
unicamente
a la palabraVacia, es decir su cardinalidad no es cero.
lenguajeNulo 7 (); Este es el lenguaje vac
o.
lenguajeId 7 (()); Este es el lenguaje identidad que contiene la
palabra vac
a.
Codigo 3.19: El lenguaje identidad
1
2
y claro, un predicado que nos permita determinar si un lenguaje es precisamente el lenguaje identidad.
Codigo 3.20: Predicado para determinar el lenguaje identidad
1
2
3
4
5
6
7
8
9
CAPITULO
3. PALABRAS Y LENGUAJES
68
3.3.4.
Lenguaje unitario
Para formar las palabras hay que escribeDer o escribeIzq cada una de las
letras del alfabeto con la palabraVacia.
Actividad 3-14
Escribe un procedimiento en DrRacket llamado lenguajeUn que dado un alfabeto S, genere su lenguaje unitario.
Codigo 3.21: El lenguaje unitario de un alfabeto
1
2
3
4
5
6
7
3.3.5.
(a b c d e f))
(d) (e) (f))
(0 1 2 3))
(3))
3.3. LENGUAJES
69
3.3.6.
Sublenguaje
CAPITULO
3. PALABRAS Y LENGUAJES
70
L2 )) debe ser #t para todos las palabras en el dominio L1 , tenemos todo lo necesario para determinar si un lenguaje es sublenguaje de otro utilizando solamente
un cuantificador universal.
Actividad 3-15
Escribe un predicado en DrRacket que determine mediante el uso de un cuantificador universal, que un lenguaje L1 es un sublenguaje de otro lenguaje L2.
Este predicado se debe llamar sublenguaje? y debe recibir como entrada los
dos lenguajes L1 y L2, ambos en forma de lista de palabras; como salida el
predicado debe devolver #t si el lenguaje L1 es efectivamente un sublenguaje
del lenguaje L2, y #f en otro caso.
Codigo 3.23: Determinar que un lenguaje es sublenguaje de otro
1
2
3
4
5
6
7
8
9
10
Ejemplo 3-13
Si L1 7 (() (1) (0) (1 0) (0 1) (1 1 1) (0 1 1)),
L2 7 ((1 0) (1 1 0)),
L3 7 (1 0) (1 1 1) son lenguajes:
1. (sublenguaje? L2 L1 ) 7 #f; porque la palabra (1 1 0) en L2 no es
una palabra en el lenguaje L1 .
2. (sublenguaje? L3 L1 ) 7 #t; porque todas las palabras de L3 pertenecen al lenguaje L1 .
3. Si (sublenguaje?
La Lb ) 7 #t, no siempre es cierto que
(sublenguaje? Lb La ) 7 #t.
3.3. LENGUAJES
71
Actividad 3-16
Sea L 7 (() (0) (1) (1 0) (0 1 1 0) (0 0) (1 1) (0 0 0) (0 0 1) (0 1
0) (0 0 0 1) (1 1 0 0) (0 0 1 1) (0 1 0 1) (1 0 1 0)) un lenguaje.
1. Haz un procedimiento para que de manera automatica la computadora
determine cuales de los siguientes lenguajes son sublenguajes de L
2. Escribe en la lnea delante de cada lenguaje #t si es un sublenguaje de
L, o un #f si no lo es.
1. ((0 1 1) (0 1 0) (0 1) (1 1) ())
2. ((0 0 0 1) (0 0 0) (0 0) (1) (0))
3. ((1 0 1 0) (0 0 1) (1 1 1 0) (0 0 0 1))
4. ((1 0) (1) (0) ())
3.3.7.
Lenguajes iguales
(y (sublenguaje? L1 L2 ) (sublenguaje? L2 L1 )) 7 #t
CAPITULO
3. PALABRAS Y LENGUAJES
72
Ejemplo 3-14
Actividad 3-17
Escribe un predicado que se llame lenguajesIguales? que tome como entradas los dos lenguajes L1 y L2, cada uno de ellos escrito en forma de una lista
de palabras. El predicado debe devolver #t si es cierto que los lenguajes son
iguales y #f en otro caso.
Codigo 3.24: Igualdad entre lenguajes
1
2
3
4
5
6
7
8
3.4.
3.4.1.
de lenguajes
Concatenacion
73
Ejemplo 3-15
(concatenarLeng ((l i b r) (f l o r)) ((e r o) (e r i a))) 7
((l i b r e r o) (l i b r e r i a) (f l o r e r o) (f l o r e r i
a))
Actividad 3-18
Escribe un procedimiento en DrRacket que se llame conacatenarLeng y que
reciba como entrada los dos alfabetos L1 y L2; y devuelva como salida un nue de cada palabra de L1 con cada
vo alfabeto que contenga la concatencacion
palabra en L2.
Codigo 3.25: La concatenacion de lenguajes
1
2
3
4
5
6
7
8
9
Ahora, si el lenguaje L1 esta basado en el alfabeto S1 , y el lenguaje L2 esta basado en el alfabeto S2 , donde los alfabetos S1 y S2 no necesariamente son dife de los lenguajes
rentes, entonces las palabras que pertenecen a la concatenacion
esta basado en un nuevo alfabeto, el alfabeto que es inducido por las nuevas palabras, sin embargo este nuevo alfabeto puede calcularse a partir de los alfabetos
originales haciendo
(alfabetoDe (concatenarLeng L1 L2 )) 7 (union S1 S2 )
3.4.2.
Potencia de un lenguaje
CAPITULO
3. PALABRAS Y LENGUAJES
74
Pero este metodo claramente genera procesos recursivos (malos para la compu porque para resolver la operacion
de concatenarLeng se necesita antes
tacion)
resolver la potenciaLeng con una instancia menor de n; y antes de resolver esta
nueva instancia, se debe resolver una instancia menor, y as recursivamente hasta
que se encuentre que n 7 0, y entonces ya que se alcanza ese caso base, se pueden
empezar a hacer las n concatenaciones.
Otro metodo involucra un procedimiento auxiliar que agrega una nueva va del resultado de manera iterativa, siguiendo
riable res que lleva la construccion
los siguientes casos
(potenciaLeng-aux L n res)7
1. Si n 7 0, entonces la potenciaLeng-aux del lenguaje L es lenguajeId;
2. De otro modo, la potencia del lenguaje se resuelve recursivamente haciendo
(potenciaLeng-aux L (- n 1) (concatenarLeng L res))
Actividad 3-19
Escribe en DrRacket un procedimiento que sirva para calcular la n-esima po de utilizar una funcion
3.5.
Cerradura de Kleene
unaria1
La cerradura de Kleene es un lenguaje generado por una operacion
sobre un alfabeto S, y produce un lenguaque llamaremos Kleene* y que actua
[y el lenguaje que genera] lleva en su nombre el apellido del
je. Esta operacion
celebre matematico estadounidense Stephen Kleene, quien entre otras cosas estaFig. 3.1. Sthephen Cole Kleene
blecio las bases de la teora de las funciones recursivas, que junto con el calculo-
(1909 1994)
1 El termino unaria se refiere a aridad de la operacion.
La aridad es la cantidad de operandos que
75
Ejemplo 3-16
Si S 7 (b) es un alfabeto, (Kleene* S) 7 (() (b) (b b) (b b b) (b b
b b) (b b b b b) ... )
Entonces la cerradura finita de Kleene desde la potencia 0 hasta una poten generalizada de los lenguajes que resultan
cia n, con 0 n<< +infty.0 es la union
de calcular la n e sima potencia del lenguaje unitario del alfabeto S.
CAPITULO
3. PALABRAS Y LENGUAJES
76
Actividad 3-20
valores de numeros
enteros desde 0 hasta n inclusive.
Codigo 3.27: Cerradura finita de Kleene
1
2
3
4
5
6
7
8
9
10
> (nKleene* (0 1) 4)
((1 1 1) (1 1 0) (1 0 1) (1
(0 0 1) (0 0 0) (1) (0) ()
(0 0 0 0) (0 0 0 1) (0 0 1
(0 1 0 1) (0 1 1 0) (0 1 1
(1 0 1 1) (1 1 0 0) (1 1 0
>
0 0) (0 1 1) (0 1
(0 0) (0 1) (1 0)
0) (0 0 1 1) (0 1
1) (1 0 0 0) (1 0
1) (1 1 1 0) (1 1
0)
(1 1)
0 0)
0 1) (1 0 1 0)
1 1))
Cuando L 7 (lenguajeUn S) la cardinalidad de la cerradura finita de Kleene de un alfabeto S esta dada por
(+ (longitud (potenciaLeng L 0))
(longitud (potenciaLeng L 1))
...
(longitud (potenciaLeng L n)))
77
Otra cosa que podemos hacer al trabajar con la cerradura de Kleene, es crear
un predicado que determine si una palabra o un lenguaje pertenecen a la cerradura de Kleene para un alfabeto determinado sin tener que verificar una a una
cada palabra del lenguaje.
Este predicado funciona con un argumento que puede ser una palabra o un
lenguaje; devuelve #t si el argumento es una palabra compuesta con smbolos
del alfabeto; tambien devuelve #t si el objeto es un lenguaje y todas las palabras
estan compuestas con smbolos del alfabeto. El predicado debe devolver #f en
cualquier otro caso.
Primero, para reconocer que un argumento que llamaremos X es una palabra
de un alfabeto S (ver pagina 50) se deben cumplir dos condiciones:
1. Que X sea una lista.
2. Ya que sabemos que X es una lista, para todos los elementos de la lista X
debe ser cierto que pertenecen al alfabeto S.
Segundo, para reconocer que el argumento X es un lenguaje generado con
palabras de un alfabeto S se deben cumplir tambien dos condiciones:
1. Que X sea una lista.
2. Ahora que ya sabemos que X es una lista, para todos los elementos de la
lista X debe ser cierto que son palabras del alfabeto S.
Actividad 3-21
Escribe un procedimiento en DrRacket que se llame Kleene*? con entrada un
objeto X de cualquier clase y un alfabeto S con los siguientes casos:
1. Si X es una palabra del alfabeto S, entonces #t.
2. Si X es un lenguaje cuyas palabras son hechas con smbolos de S, entonces #t.
3. en cualquier otro caso, entonces #f.
Codigo 3.28: La pertenencia una palabra o lenguaje a la Kleene*
1
2
3
4
5
6
7
8
9
10
CAPITULO
3. PALABRAS Y LENGUAJES
78
Ejemplo 3-18
>(Kleene*? (1 0 0) (0 1))
#t
;; porque es una palabra en el alfabeto (0 1)
;;
>(Kleene*? (1 0 2) (0 1))
#f
;; Porque no es una palabra en el alfabeto (0 1)
;;
>(Kleene*? ((1 0 0) () (1) (1 0 0)) (0 1))
#t
;; Porque todas las palabras son en el alfabeto (0 1)
;;
>(Kleene*? ((1 0 0) () (1) (1 2 0)) (0 1))
#f
;; Porque al menos una palabra no es en el alfabeto (0 1)
;;
>(Kleene*? 1 (0 1))
#f
;; Porque 1 no es una palabra ni un lenguaje
4. Automatas
finitos determinstas
Contenido
4.1.2. Automatas
en procesamiento de lenguaje natural . .
4.1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 79
. 80
. 81
. 81
. 82
. 82
. 84
. 86
. 88
. 88
. 89
. 91
. 93
. 95
. 97
. 99
. 100
. 101
. 102
Generalidades de automatas
Uno de los problemas basicos en la teora de lenguajes formales es determinar si una palabra pertenece a un lenguaje. Hasta ahora hemos tratado con
lenguajes en los que se ha dado una lista de palabras, de modo que el problema
de determinar la pertenencia de una palabra al un lenguaje es facilmente resuelto al buscar la palabra comparando una a una las palabras del lenguaje con la
palabra buscada, y dando como respuesta un #t si la palabra es encontrada y un
#f en el otro caso.
Sin embargo, hay situaciones en las que no hay una lista de palabras en
donde
buscar, y tampoco hay un predicado que determine la pertenencia de una
palabra al lenguaje, porque el lenguaje no ha sido determinado. Estas situaciones
ocurren cuando se desea modelar sistemas con las siguientes dos caractersticas:
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
80
4.1.1.
la ultima
letra de una palabra, en dependencia del estado que se encuentre, se
o no pertenece.
determina si esa palabra pertenece al lenguaje de programacion
Si la palabra pertenece, se agrega esa palabra en la lista de tokens validos y se
continua con la siguiente parabra, de otro modo se determina el error encontrado.
Los eventos que hacen reccionar a este sistema es el conjunto de smbolos que
Genralmente los lenguajes de programacion
4.1. GENERALIDADES DE AUTOMATAS
81
4.1.2.
Automatas
en procesamiento de lenguaje natural
Los automatas
finitos tambies se han utilizado como parte medular en sistemas de procesamiento de lenguaje natural (PLN). El PLN es un a rea de las
ciencias computacionales en la que se producen, estudian y aplican procedimientos para generar y reconocer texto en lenguaje natural; tambien se hacen proce a partir de textos obtenidos de
dimientos para extraer y recuperar informacion
ultima
vez el 19 de marzo de 2014. (2004)
Mehryar Mohri. On some applications of finite-state automata theory to natural language processing. Natural Language Engineering, 2, Cambridge University Press, pp 61-80. (1996)
Maurice Gross. The Use of Finite Automata in the Lexical Representaion of
Natural Language. In Proceedings of the LITP Spring School on Theoretical
Computer Science: Electronic Dictionaries and Automata in Computational
Linguistics, Maurice Gross and Dominique Perrin (Eds.). Springer-Verlag,
London, UK, 34-50. (1987).
4.1.3.
Estacionamiento autonomo
para vehculos
de los automatas
La aplicacion
finitos en la robotica
es muy variada. En este
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
82
4.1.4.
Otras aplicaciones
denominados automatas
finitos determinstas, y lo haremos desde un punto de
orientada a objetos.
vista funcional utilizando programacion
4.2.
Un automata
finito determinista (afd %) es una clase de maquinaria teorica que genera objetos que sirven para analizar palabras de longitud finita. Las
3 F. Psomopoulos, S. Diplaris and P. A. Mitkas. A Finite State Automata Based Technique for
Protein Classification Rules Induction. In Proceedings of the Second European Conference on Data
Mining and Text Mining in Bioinformatics, held in conjunction with ECML/PKDD in Pisa, Italy. 24.
September, 2004.
4 Renji Tao. Finite Automata and Application to Cryptography. Springer Publishing Company, Incorporated. (2009)
83
su naturaleza simbolica,
pudiera tener cualquier significado.
Un afd % se define por una tupla hE S T q0 Ai, donde:
E: Es el conjunto de estados. Es un conjunto de smbolos que se asocian con los
el automata
puede percibir y analizar; en este documento los denotaremos
por numeros,
o la letra griega .
S 7 (1 2 ... n ); Los n s
mbolos elegidos. o bien S 7 SIM, cuando
SIM 7 (1 2 ... n ).
T : Es un conjunto de reglas que socian un estado y un smbolo del alfabeto, con
un nuevo estado (posiblemente el mismo); se llama el conjunto de transiciones.
q0 : Es el estado inicial, elegido entre los estados de E, esto es que
(pertenece? q0 E) 7 #t.
A: Es el conjunto de estados aceptores, es un subconjunto no vaco de estados.
(subconjunto? A E) 7 #t
Los automatas
finitos determinstas sirven para analizar palabras de smbolos, que pueden representar secuencias de eventos. Estas palabras al ser analiza
das causan que los automatas
finitos determin
istas o afd % (para abreviar), cambien de estado (posiblemente queden en el mismo estado).
Los automatas
tienen tres diferentes tipos de estados:
1. Un unico
estado que se conoce como estado inicial. Este estado se identifica
del automata
en la definicion
como E.
2. Un conjunto de estados que se reconocen como estados aceptores. En la
se identifica este conjunto con A
definicion
3. Un subconjunto de estados, que son los estados que no son los aceptores ni
es el estado inicial.
se
tablece una asociacion
Cada regla de transicion
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
84
4.2.1.
Un automata
finito determinstico (y todas las demas clases de automatas,
como se vera en captulos posteriores) puede verse como un objeto que tiene cier es conveniente para tratar a los afd %
tos atributos y ciertos metodos. Esta vision
La clase de automatas
finitos deterministas son definidos mediante cinco caractersticas o atributos principales, en ocasiones tambien se llaman campos,
que coinciden directamente con la tupla que define al afd %, hE S T q0 Ai
del automata.
85
(define afd %
(class object %
(init EST SIM EIN FIN TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define q0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; .... Metodos publicos y privados
))
Con el codigo
4.1 ya es posible crear automatas
de la clase afd %. Aunque no
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define T TRA); Las reglas de transicion en lista de tripletas
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
86
7
8
9
10
11
12
13
14
15
16
Una vez que se tiene la clase afd % y que contiene los metodos informativos,
par de automatas
muy parecidos entre ellos porque utilizan el mismo alfabeto, el
mismo conjunto de estados, el mismo conjunto de estados aceptores, pero difieren en el conjunto de estados aceptores.
> (define D2 (new afd % [EST (a b)]
[SIM (0 1)]
[EIN a]
[ACE (b)]
[TRA ((a 0 a) (a 1 b) (b 0 b) (b 1 a))]))
> (define D3 (new afd % [EST (a b)]
[SIM (0 1)]
[EIN a]
[ACE (a)]
[TRA ((a 0 a) (a 1 b) (b 0 b) (b 1 a))]))
>
Ejemplo 4-1
Los automatas
D1, D2 y D3 creados anteriormente pueden utilizarse como operandos, por ejemplo con map con el fin de enviar un mismo mensaje a la lista
de objetos (list D1 D2 D3).
> D1
(object:afd % ...)
> D2
(object:afd % ...)
> D3
(object:afd % ...)
> (map ( (af) (send af aceptores)) (list D1 D2 D3))
((b) (b) (a)) ; La lista de estados aceptores de cada aut
omata
>
4.2.2.
de transicion
La funcion
((a 0 a) (a 1 b) (b 0 b) (b 0 a))
87
automata
D1 cambia de su estado actual a al nuevo estado b a causa de haber
detectado el smbolo 1.
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
; .... definicion de los campos
(super-new)
; metodos informativos (actividad anterior)
; .... Otros metodos publicos y privados
(define/private (3de tupla) (caddr tupla)); hay varias maneras de hacerlo
))
de transicion
con el nombre Tr. Tr tiene la
Definiremos ahora la funcion
de seleccionar del conjunto T la regla de transicion
T cuando el automata
funcion
estado actual qact y se analiza algun
smbolo . As Tr tiene
se encuentra en algun
el contrato
(Tr E S) 7 E?, y se define como
(Tr q ) 7 (3de (qact i qsig )), cuando (iguales? (q ) (qact i )) 7 #t,
(qact i qsig ) en T .
para alguna transicion
Ejemplo 4-2
En resumen, este metodo privado llamado Tr, recibe un estado q y un smbolo y devuelve un nuevo estado qsig siempre y cuando la tripleta (q qsig )
pertenezca al conjunto de transiciones T .
Actividad 4-1
Escribe el metodo privado Tr que recibe un estado q en E, y un smbolo de
S; y devuelve un estado qsig , solo cuando exista una triada (eact i esig ) en
las transiciones T donde
(iguales? (q ) (eact i )) 7 #t
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
88
4.3.
4.3.1.
Tablas de transiciones
...
..
.
.
..
...
...
qsig
q1
..
.
qact
..
.
qm
...
f(qact qsig )
de cardinalidad
La definicion
se encuentra en la pagina 12.
hacia un unico
sicion
estado, que pudiera ser el mismo. De modo que el numero
89
Ejemplo 4-3
> (define D5 (new afd %
[EST
[SIM
[EIN
[ACE
[TRA
(q1 q2 q3 q4 q5 q6)]
(0 1)]
q1]
(q4 q5)]
((q1 0 q2) (q1 1 q3) (q2 0 q5) (q2 1 q4)
(q3 0 q2) (q3 1 q3) (q4 0 q6) (q4 1 q4)
(q5 0 q5) (q5 1 q6) (q6 0 q6) (q6 1 q6))]))
La representacion
D5:
0
1
>q1 q2 q3
q2 q5 q4
q3 q2 q3
q4 q6 q4
q5 q5 q6
q6 q6 q6
Actividad 4-2
1. Suponiendo el automata
D5 del ejemplo 4-3, utiliza la tabla de transiciones o el metodo Tr de la clase afd % para calcular las transiciones:
El automata
en estado q2 y analiza el smbolo 0.
El automata
en estado q1 y analiza el smbolo 0.
El automata
en estado q3 y analiza el smbolo 1.
El automata
en estado q5 y analiza el smbolo 1.
en DrRacket como
4.3.2.
Grafos de transiciones
automata.
Sin embargo, cuando el automata
es muy grande, utilizar grafos de
mas confuso.
transiciones puede resultar aun
Los grafos de transiciones tienen los siguientes elementos:
1. Los estados se representan por medio de los nodos del grafo y se dibujan
generalmente con crculos etiquetados, las etiquetas suelen estar dentro de
los crculos y coinciden con el nombre del estado.
2. Cada par de estados se conectan mediante una arista dirigida (flecha) etiquetada con alguno de los smbolos de entrada. Si en las transiciones hay
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
90
una triada (qact qsig ), entonces hay un nodo etiquetado con qact desde
el cual sale una arista etiquetada con el smbolo y que llega a un nodo
etiquetado con el nombre del estado qsig .
(q1 q2 )
Fig. 4.1. Transicion
Ejemplo 4-4
El automata
D5 del ejemplo 4-3 se puede representar por el grafo:
Si el automata
se encuentra en el estado inicial, escribe las transiciones necesarias para alcanzar cada uno de los siguientes estados
q2
q4
91
Actividad 4-4
Dibuja el grafo de transiciones y la tabla de transiciones del siguiente grafo
> (define D6 (new afd %
[EST
[SIM
[EIN
[ACE
[TRA
4.3.3.
(q1 q2 q3 q4 q5 q6)]
(0 1 2)]
q1]
(q4 q5 q6)]
((q1 0 q2) (q1 1 q3)
(q2 0 q3) (q2 1 q2)
(q3 0 q3) (q3 1 q2)
(q4 0 q5) (q4 1 q6)
(q5 0 q4) (q5 1 q6)
(q6 0 q5) (q6 1 q4)
(q1
(q2
(q3
(q4
(q5
(q6
2
2
2
2
2
2
q1)
q4)
q4)
q4)
q5)
q6))]))
Una representacion
3. El renglon
debe iniciar con la marca
>> o con > .
que corresponde a un estado aceptor debe iniciar con
4. Cada renglon
que no inicia ni con > , ni con , ni con >>, entonces debe
5. Un renglon
iniciar con el smbolo .
se encuentra un smbolo de un
6. Despues de la marca de inicio de renglon
estado que representa al estado actual. Enseguida se encuentra una lista
cuyos elementos ocurren en pares - q, para cada uno de los smbolos del
alfabeto y sus correspondientes estados siguientes. Esto es, si suponemos
que los estados son E 7 (q1 ... qa ... qb ... qc ... qm ) y el alfabeto es S 7 (1
estara codificado del siguiente modo
... i ... j ...n ), entonces un renglon
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
92
7. En cada renglon
ya
que se trata de un afd % y hay transiciones para cada smbolo de entrada.
Ejemplo 4-5
El automata
D6, definido para la actividad 4-4 en la pagina 91, se representa
en formato de texto como:
>>
--**
**
**
q1
q2
q3
q4
q5
q6
a
a
a
a
a
a
q2
q3
q3
q5
q4
q5
b
b
b
b
b
b
q3
q2
q2
q6
q6
q4
c
c
c
c
c
c
q1
q4
q4
q4
q5
q6
Actividad 4-5
1. Dibuja el grafo de transiciones de un afd % dado mediante la siguiente
textual de un archivo de texto llamado D7.dat.
descripcion
>>
---**
**
q0
q1
q2
q3
q4
q5
0
0
0
0
0
0
q1
q0
q1
q3
q4
q5
1
1
1
1
1
1
q2
q2
q0
q4
q4
q5
2
2
2
2
2
2
q0
q3
q3
q5
q5
q4
93
Actividad 4-6
Escribe un procedimiento en DrRacket que se llame txt->afd que reciba el
nombre de un archivo filename y que devuelva un objeto afd %, si el archivo
Hasta ahora los afd % solamente tienen unos cuantos metodos informativos,
incluyendo el metodo Tr que recibe un estado eent y un smbolo de entrada
percibir la senal
que es codificado como
(send Aid Tr eent ) 7 esal
hay otros metodos que hacen de los afd % realmente uti
Sin embargo, aun
les. Este tipo de afd % se utilizan principalmente para reconocer palabras de un
alfabeto.
Supongamos que A es un afd %, definido por la quntupla hEST SIM EIN ACE
TRAi. El alfabeto S sirve como conjunto generador para el espacio de palabras S ,
que contiene todas las palabras de longitud finita creadas con letras de S.
del automata
a causa de analizar una secuencia de smbolos de entrada; para
4.4.
Consideremos el automata
A 7 hEST SIM EIN ACE TRAi , que es un afd % con
uno de sus metodos la transicion de estados Tr, que toma un estado y un smbolo
y resuelve un nuevo estado.
de transicion
exDefiniremos un nuevo metodo que llamaremos funcion
de la
Ver la definicion
cerradura de Kleene en la
pagina 88.
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
94
pruebas, pero al final puede ser privado) sirve para determinar el ultimo
esta
do que alcanza el automata
despues de analizar una secuencia de smbolos del
alfabeto.
de transicion
extendida tiene como dominio el producto carteLa funcion
siano de S con E, y el codominio es nuevamente el conjunto de estados E:
(TR Palabra Estado) 7 Estado?
(TR w e) Definida en dos casos:
Cuando una palabra w no es
vaca, se puede denotar como
(w0 |w0 ) ver la pagina 57.
mensaje al automata
(send A TR w e) 7 e0 ,
el estado e0 que resulta del analisis de la palabra w a partir del estado e, se denota
estado final.
Actividad 4-7
para el automata;
y como salida un estado e0 , el estado final que corresponde.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
;; ....................
;; Metodos del capitulo 4
;; ....................
;; METODOS CAPITULO 5
;; (TR Palabra Estado) -->Estado?
;; (TR (1 0 1 1) e0) -->e3
(define/public (TR w e)
;... Aqui debes escribir el codigo
)
)
)
95
Ejemplo 4-6
4.4.1.
extendida
Clases de congruencia sobre la transicion
el automata
A se encuentra actualmente en un estado ei y se le presenta la palabra
w, el automata
A recibe un mensaje como:
(send A TR w ei ),
y responde con un nuevo estado ef , quiza sea el mismo.
Tomando en cuenta que (send A TR w ei ) 7 ei funciona como la identidad,
TR a partir
cuando w 7 palabraVacia. Al considerar el conjunto S y la operacion
de equivalencia E en la que
de un mismo estado e, podemos crear una relacion
dos palabras x y y en S son congruentes si:
(<-> (pertenece? (creaPar x y) E)
(iguales? (send A TR y ei )) (send A TR y ei )) 7 #t
Actividad 4-8
E tal y como ha sido definida, es una relacion
de
Demuestra que la relacion
equivalencia.
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
96
Ejemplo 4-7
e
a
f
b
c
d
0
0
0
0
0
0
d
e
c
a
f
d
1
1
1
1
1
1
c
d
a
c
d
e
2
2
2
2
2
2
b
b
f
b
c
a
El espacio S es particionado en subconjuntos que llamaremos clases de congruencia, donde cada clase de congruencia contiene todas las palabras en S que
numero
finito de transiciones entre estados.
Actividad 4-9
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
;; ... todos los metodos y definiciones anteriores
;; ...
;; (congruentes? Palabra Palabra Estado) -->Booleano?
;; (congruentes? (2 1 2 2 0 0 1 1) (1 0 1 0) b) -->#t
;; de acuerdo al ejemplo 4-7
(define/public (congruentes? x y e)
;; ... Aqui debes escribir el codigo
)
)
)
concatenar ha sido
La funcion
definida en la pagina 55.
97
Actividad 4-10
Considera un automata
A 7 hEST SIM EIN ACE TRAi. Demuestra que para
cualesquiera palabras x, y, w en S ; si se cumple (congruentes? x y e) 7 #t
entonces
(y (congruentes? (concatenar x w) (concatenar y w) e)
(congruentes? (concatenar w x) (concatenar w y)) e) 7 #t
4.5.
Sigamos considerando un afd % llamado A definido con hEST SIM EIN ACE
TRAi. En este apartado estudiaremos acerca del subconjunto A de estados, llamado los estados aceptores. Los estados aceptores se identifican en el grafo de
transiciones por tener un doble crculo. El estado inicial tambien puede ser un
estado aceptor.
extendida, el afd %
Cuando una palabra es analizada utilizando la transicion
cambia de estado con cada smbolo analizado de acuerdo a T. Cuando el analisis
inicia en e0, el estado final puede ser o no un estado aceptor, entonces la clase
de congruencia de las palabras aceptadas se compone de las palabras que al ser
Ejemplo 4-8
> (map ( (edo) (send C aceptor? edo)) (a b c d e f))
(#t #f #t #t #f #f)
>
1
2
3
4
5
6
7
8
9
10
11
12
13
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (aceptor? edo) (pertenece? edo A))
)
))
Las palabras que al ser analizadas a partir del estado inicial, hacen que el
automata
concluya en alguno de los estados finales, estas palabras las llamaremos palabras congruentes aceptadas; y las palabras que no lo hacen, a las que
llamaremos palabras no aceptadas. Esto significa:
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
98
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (aceptor? edo) (pertenece? edo A))
(define/public (acepta? w) (aceptor? (TR w e0)))
)
))
Actividad 4-11
Considera el afd % al que llamaremos C definido por los elementos:
Estados E: (e a f b c d)
Smbolos S: (0 1 2)
Estado inicial e0: e
Estados aceptores A: (a c e)
Transiciones T: (
(e 0 f) (e 1 d) (e 2 e) (a 0 e) (a 1 d) (a 2 b)
(f 0 c) (f 1 a) (f 2 f) (b 0 a) (b 1 c) (b 2 b)
(c 0 f) (c 1 d) (c 2 c) (d 0 d) (d 1 e) (d 2 a))
Clasifica las siguientes palabras en aceptadas o no aceptadas, mencionando
99
Con las palabras en S se genera la clase de las palabras aceptadas. Este conjunto puede modificarse al cambiar el estado inicial. Para poder cambiar el esta
do inicial de un afd % ya definido, debemos crear un metodo publico
que permita
reasignar un nuevo valor al atributo e0 que identifica al estado inicial.
Actividad 4-12
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (e0! edo)
; Aqu
debes escribir el c
odigo
)
))
Actividad 4-13
Toma el afd % C definido en la pagina 98 y cambia el estado inicial al estado
a. Considera las mismas palabras del ejercicio 4-11 y determina si ahora las
palabras son aceptadas.
1. (0 2 0)
2. (2 1 0 2)
3. (2 1 1 0)
4. (0 2 1 1)
5. (2 1 2 1)
6. (0 2 1 2)
7. (2 2 0)
8. (1 1 0)
4.6.
El lenguaje de un afd %
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
100
Ahora estudiaremos dos conjuntos que se derivan del lenguaje del automata.
Estos conjuntos los llamaremos el lenguaje de palabras propias e impropias.
4.6.1.
para un automata
A 7 hEST SIM EIN ACE TRAi, cada uno de los m estados del
automata
define un lenguaje. Ahora supongamos que S[e ] representa al conjunto
1
de las palabras aceptadas considerando e0 7 e1 ; S[e ] el conjunto de las palabras
2
aceptadas que fueron analizadas considerando que e0 7 e2 , y as para cada estado hasta S[e ] el conjunto de las palabras aceptadas considerando ahora que
m
e0 7 em .
Defiremos entonces el conjunto de las palabras propias como el conjunto de
1]
Actividad 4-14
Escribe un metodo para el afd % llamado kPropias que calcule el conjunto de
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (kPropias k)
; Aqu
debes escribir el c
odigo
)
))
101
4.6.2.
De manera similar que las palabras propias, podemos crear una definicion
para las palabras impropias, supongamos que E 7 (e1 e2 ... em ) son los esta
dos de un automata
A 7 hEST SIM EIN ACE TRAi, cada uno de los m estados del
automata
define un conjunto de palabras no aceptadas. Ahora supongamos que
[e ] representa al conjunto de las palabras no aceptadas considerando e0 7 e1 ;
S
1
S[e2 ] el conjunto de las palabras no aceptadas considerando que e0 7 e2 , y as pa [e ] el conjunto de las palabras no aceptadas considerando
ra cada estado, hasta S
m
ahora que e0 7 em .
Defiremos entonces el conjunto de las palabras impropias como el conjunto
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
102
Actividad 4-15
Escribe otro metodo para el afd %, que calcule el conjunto de palabras impropias de longitud menor o igual que un entero positivo k, el metodo se debe
(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (kImpropias k)
; Aqu
debes escribir el c
odigo
)
))
4.7.
4.7. RESUMEN METODOS
DEL AFD %
103
Actividad 4-16
3. Tenga un numero
multiplo
de 8 de letras a, un numero
multiplo
de 4
de b y un numero
multiplo
de 2 de letras c.
orientada a objetos
Programacion
orientada a objetos POO es un paradigma de programacion
La Programacion
de entidades llamadas objetos que se crean para
que se basa en la definicion
modelar elementos que tienen sus propias caractersticas, aqu los conoceremos
como campos y los objetos son capaces de llevar a cabo funciones especficas que
preocupa de como
se obtuvo o cual fue el procedimiento para obtener la hora.
Para utilizar objetos en DrRacket se debe incorporar la biblioteca de fun
ciones (require racket/class) en el codigo
fuente de nuestro diccionario de
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
104
#lang racket
(require racket/class)
;
;
Clases
Las clases son los moldes o prototipos con los que se fabrican los objetos. Es
como un molde para hacer gelatinas; una vez que se tiene un molde para hacer
gelatinas de una cierta forma, es posible hacer una o mas gelatinas de la misma
forma. El procedimiento para crear objetos es primero crear una clase para cada
tipo de objeto que se ocupe.
de clase se llama class, y es una expresion
muy
En DrRacket una expresion
. Son similares en que ambas expresiones definen ensimilar a una expresion
tidades anonimas,
describe procedimientos anonimos,
mientras que class ds
cribe clases anonimas. La manera de describir una clase en DrRacket requiere
de subclase y despues todas las declaracioescribir class, luego una expresion
nes y expresiones.
(class expr-superclase decl-o-expr ...)
Todas las clases que se definan deben derivarse de una superclase. Hay una
clase que se llama object % que es la clase de mayor jerarqua en DrRacket, todas
las demas clases son derivadas directa o indirectamente de object %. Por conven en DrRacket todas los nombres para las clases terminan en %, esto ayuda al
cion
programador para determinar el uso de los identificadores.
que se relaciona con los metodos, camCada decl-o-expr es una declaracion
o bien es una expresion
que se evalua
Clase relacion %
;; Definici
on de una clase para modelar una relaci
on matem
atica
;; Se debe dar la lista de pares relacionados, el dominio y codominio
(define relacion %
(class object %
(init rel dom cod) ; <-- argumentos de inicializacion
(define RE rel) ; <-- campo los pares de la relacion
(define DO dom) ; <-- campo el dominio
(define CO cod) ; <-- campo el codominio
(super-new) ; <-- inicializacion de la superclase
4.7. RESUMEN METODOS
DEL AFD %
10
11
12
13
14
15
16
17
105
de una clase.
Veamos las partes importantes en la definicion
no tiene
1. El identificador class indica que se va a definir una clase, que aun
nombre, pero se le puede asignar uno mediante define. La clase es una
subclase de object %.
rel, dom y cod. Un argu2. La clase tiene tres argumentos de inicializacion
recibe valores para asegnarlos como valores iniciamento de inicializacion
les a alguno de los campos de la clase.
este campo se iniciali3. Se definen tres campos RE para establecer la relacion,
unicamente
por medio de un envo de mensajes mediante send.
6. Los metodos privador se declaran con define/private, y son accesibles
unicamente
dentro de la misma clase. Un objeto de otra clase no puede
acceder a estos metodos.
Objetos
Los objetos son instancias de clases definidas. Es decir, primero se debe definir una clase y luego crear objetos de esa clase.Suponiendo que ya se cuenta con
de una clase, digamos la clase relacion %, para crear objetos de la
la definicion
new.
clase relacion % se utiliza una expresion
(new nombre-clase [arg-init val]...); Es un objeto an
onimo.
de objetos implica uso de memoria. Con cada objeto que se crea,
La creacion
se dedica un poco de memoria para alojar el valor de los campos, y tambien se
con los metodos.
gestiona memoria para la interaccion
CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS
106
Ejemplo 4-9
Paso de mensajes
El uso de objetos, y de los metodos definidos dentro de ellos se utilizan por
medio del paso de mensajes, que pueden ser empleados en objetos o en procedimientos.
Ejemplo 4-10
R en el ejemplo 4-9, se puede acceder a cualquiera
Al haber definido la relacion
5. Automatas
no determinstas
Contenido
de los afn % . . . . . . . . . .
5.1. Presentacion
5.1.1. Ejemplo de un afn % . . . . . . . . .
formal de un afn % . . .
5.1.2. Definicion
5.1.3. Atributos de afn % . . . . . . . . . .
5.1.4. La tabla de transiciones de un afn %
5.1.5. afn % como listas de transiciones .
5.1.6. Los metodos informativos . . . . .
de transicion
. . . . . . . . . .
5.2. La funcion
de transicion
extendida . . .
5.3. La funcion
5.4. El lenguaje del afn % . . . . . . . . . . . .
5.4.1. Palabras aceptadas . . . . . . . . .
5.4.2. Palabras propias . . . . . . . . . . .
5.4.3. Palabras impropias . . . . . . . . .
5.5. Equivalencia entre afn % y afd % . . . . . .
afn % afd % . . . . . .
5.5.1. Conversion
5.1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
107
108
108
108
110
110
113
113
114
116
117
117
118
118
118
de los afn %
Presentacion
de un automata
En ocasiones el diseno
finito puede resultar un poco mas
complicado al tener que pensar para cada estado y para cada smbolo de entra
da, cual debe ser el siguiente estado del automata
finito. Eso puede ocurrir en
tre otras razones porque si el automata
se encuentra en un estado en particular,
smbolo de entrada en particular, pero
podra ser imposible que recibiera algun
determinstica lo exige, se debe definir cada uno de los pares
como la condicion
del producto cartesiano de estados con simbolos como posible entrada de la fun de transicion.
El caso que se ilustra es un buen motivo para introducir una
cion
de otro modo, un afn % tambien nos sirve para analizar secuencias de senales
que
percibe el automata,
determinando si esa secuencia de entrada es aceptada o no
lo es.
Hay una diferencia importante con respecto a los afd %, los afn % pueden
dejar un estado (a causa de haber recibido un smbolo de entrada) y alzanzar
ninguno, uno o mas estados al mismo tiempo.
En este captulo estudiaremos una manera de definir los afn % que es orien
tada a objetos, creando una clase para definir este tipo de automatas.
Tambien
estudiaremos la manera en que cambia de estados y veremos que a pesar de la
107
108
CAPITULO
5. AUTOMATAS
NO DETERMINISTAS
diferencia importante, para cada afn % que se defina, existe un afd % que acepta
el mismo alfabeto.
5.1.1.
Ejemplo de un afn %
numero
(entero mayor o igual que 0) de veces los smbolos 1, 0 en ese orden, y
terminando con el smbolo 1. Tomando en cuenta que el alfabeto es (0 1). Para
definir un afd % que acepte las palabras descritas, debemos considerar cada uno
de los posibles casos, porque as lo exige el determinismo de los afd %.
La alternativa que ofrecen los afn %, es permitir no definir estado siguiente
si no es necesario, o bien poder definir mas de un estado siguiente, observa y
analiza el diagrama de estados de la figura 5.1.
Figura 5.1: afn % que acepta palabras que empiezan con 0, terminan con 1, y entre el inicio y el
final pueden ocurrie cualquier numero de veces los smbolos 1 y 0 en ese orden.
5.1.2.
formal de un afn %
Definicion
La clase de automatas
finitos no determinstas afd % se define por medio de
una tupla hEST SIM EIN ACE TRAi, donde todos los elementos son como en el
del conjunto de reglas de transicion.
Los elementos
caso determinsta a excepcion
dan valor a los atributos de la clase, que se describen a
de la tupla de definicion
continuacion.
5.1.3.
Atributos de afn %
Los atributos basicos1 de una clase afn % se pueden conocer por los elementos
de la tupla de definicion
hEST SIM EIN ACE TRAi,
1 La clase puede tener mas de estos atributos, pero estos son los que sin duda debe tener.
DE LOS AFN %
5.1. PRESENTACION
109
donde todos los elementos son como en los afd %, excepto el conjunto de reglas
TRA que ahora es un conjunto de reglas que asocian pares de estadode transicion
simbolo con conjuntos de estados.
Codigo 5.1: Definicion de campos en la clase afn %
1
2
3
4
5
6
7
8
9
(define afn %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
10
11
12
13
))
q5)]
(q0
(q1
(q2
(q3
(q4
(q5
1
1
1
1
1
1
())
(q2))
())
(q4 q5))
())
()))]
CAPITULO
5. AUTOMATAS
NO DETERMINISTAS
110
5.1.4.
La unica
diferencia con la tabla de transiciones en un afd %, es la manera en
que se muestran los estados siguientes en las transiciones. El afn % de la figura
5.1 tiene la siguiente tabla de transiciones.
>q0
q1
q2
q3
q4
q5
0
hq1 q3i
hi
hi
hi
hq3i
hi
1
hi
hq2i
hi
hq4 q5i
hi
hi
Notamos que los estados siguientes, han sido agrupados para especificar que
a todos los
a partir de un estado y un smbolo el automata
hace una transicion
estados que se indican en el conjunto de estados.
El estado inicial se identifica con un smbolo [>], y los estados aceptores con
un punto [], si un estado es al mismo tiempo el estado inicial y uno de los estados
aceptores, entonces se marca con ambos smbolos.
Ya que los estados pertenecen a un conjunto, y los elementos de un conjunto pueden aparecer en cualquier orden, entonces el orden en que aparezcan los
estados en la tabla de transiciones es arbitrariamente elegido; de manera similar
ocurre con las columnas que representan las transiciones para cada uno de los
smbolos de entrada. Sin embargo, se debe seleccionar un orden y respetar el orden en cada una de las entradas de la tabla. Las siguientes tablas son equivalentes
a la anterior.
q3
q1
q2
>q0
q4
q5
0
hi
hi
hi
hq1 q3i
hq3i
hi
1
hq4 q5i
hq2i
hi
hi
hi
hi
q5
q3
q1
q2
>q0
q4
1
hi
hq4 q5i
hq2i
hi
hi
hi
0
hi
hi
hi
hi
hq1 q3i
hq3i
automatas
afd %, la diferencia es que en los afn % es posible que a partir de un
subconjunto de estados,
estado e y un smbolo de entrada sj1 , se alcance algun
incluso puede ser el conjuntoVacio. Digamos que se alcanzan los estados (ei1
ei2 ... ein ) que de hecho representa un subconjunto de estados, para representar
en la definicion
de la funcion
de transicion
hemos agrupado en una
esta situacion
lista los tres elementos:
DE LOS AFN %
5.1. PRESENTACION
111
Los primeros dos smbolos ## representan alguno de los smbolos que identifican
el tipo de estado que se describen enseguida. Para hacer diferencia entre las clases
de nodos, incluiremos (como en el caso de los afd %) las marcas al inicio de cada
>>, **, --, y >*.
rengon
Ejemplo 5-2
El automata
afn % de la figura 5.1 en formato de texto.
>>
-**
--**
q0
q1
q2
q3
q4
q5
0
0
0
0
0
0
q1 q3 1
1 q2
1
1 q4 q5
q3 1
1
ejemplo el renglon
-- q3 0 q3 1 q4 q5
CAPITULO
5. AUTOMATAS
NO DETERMINISTAS
112
4. Los smbolos del alfabeto se pueden conocer al filtrar todos aquellos smbo del conjunto de estados con el conjunto
los que no pertenezcan a la union
de smbolos de tipo de estado.
Actividad 5-1
mo automata.
Actividad 5-2
Escribe un procedimiento llamado text->afn (no es un metodo de la clase)
que reciba como entrada el nombre de un archivo de texto como una cadena
de caracteres (string), y genere un nuevo objeto de la clase afn % cuando el
error
archivo de texto contiene las especificaciones de un afn %. Si hubo algun
del archivo, el procedimiento debe responder
en la lectura o interpretacion
con #f.
> (define n02 (txt->afn "n02.dat"))
>
es:
En caso de error la interaccion
> (define n02 (txt->afn "n02.dat"))
#f
>
1
2
3
4
5
6
7
8
DE TRANSICION
5.2. LA FUNCION
5.1.6.
113
(define afn %
(class object %
(init EST SIM EIN FIN TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
(define/public (estados) E)
(define/public (simbolos) S)
(define/public (edoIni) e0)
(define/public (aceptores) A)
(define/public (transiciones) T)
; .... Otros metodos publicos y privados
))
5.2.
de transicion
La funcion
de transicion
para los afn % permite que el automata
La funcion
pueda estar
en mas de un estado al mismo tiempo una vez que se ha analizado un smbolo de
el automata
Si el automata
n03 se encuentra en el estado q2 y lee un smbolo 1, el automata reacciona y cambia de estado, lo caracterstico es que ahora puede cambiar
a mas de un estado; ahora se encontrara en los estados q3 y q5 al mismo
(q3 1 (q3 q5)) definida en la funcion
de trantiempo, ya que la transicion
as lo indica.
sicion
de los metodos 3de y Tr definido anteriormente para el caso
La defininicion
requerida.
determinstico cumplen con la funcion
2 Introduction to Object Oriented Programming Concepts (OOP) and More, de Code Project for
those who code, en http://www.codeproject.com/Articles/22769/Introduction-to-ObjectOriented-Programming-Concep
114
CAPITULO
5. AUTOMATAS
NO DETERMINISTAS
(define afn %
(class object %
(init EST SIM EIN FIN TRA) ; los argumentos de inicializacion
;...
;...
(define/private (3de tupla) ; recibe (a b c) devuelve c
(car (cdr (cdr tupla))))
(define/public (Tr e s)
(if (and (pertenece? e E) (pertenece? s S))
(3de (car (filter ( (t) (equal? (creaPar e s)
(take t 2)))
T)))
#f))
; .... Otros metodos publicos y privados
))
5.3.
de transicion
extendida
La funcion
del lenguaje de un
lenguaje del automata
afd % (ver pagina 99 para la definicion
afd %).
DE TRANSICION
EXTENDIDA
5.3. LA FUNCION
115
Actividad 5-3
Con el automata
de la figura 5.3 calculemos (TR (0 1) q1).
CAPITULO
5. AUTOMATAS
NO DETERMINISTAS
116
2. Para determinar el siguiente conjunto de estados, se debe calcular la transi extendida para cada estado actual considerando el resto de la palabra,
cion
esto es:
a. Para el estado actual q2: (TR (1) q2) 7 (q2 q5) y la palabra
Actividad 5-4
5.4.
5.4.1.
117
Palabras aceptadas
Aqu (TR w EIN) 7 (ef1 ef2 ... efk ) es el conjunto de estados finales, es decir
el subconjunto de estados que son alcanzados por N al finalizar el analisis de la
palabra w a partir del estado inicial EIN; y (aceptor? efi ) es un predicado que es
verdadero cuando el estado efi es uno de los estados aceptores del automata.
Actividad 5-5
Actividad 5-6
5.4.2.
Palabras propias
Del mismo modo que ocurre en los afd %, el lenguaje de un afn % depende en
gran medida del estado a partir del cual se empiece a analizar una palabra.
Supongamos ahora que para un afn % donde EIN 7 e1 ,
CAPITULO
5. AUTOMATAS
NO DETERMINISTAS
118
(k)
(k)
5.4.3.
Palabras impropias
5.5.
alksdj
5.5.1.
asdo
afn % afd %
Conversion