Preparación para ECAES Métodos Formales - UNIANDES · Las relaciones de equivalencia son...

23
Preparación para ECAES Métodos Formales Rodrigo Cardoso - Noviembre de 2006 0 Cómo se entiende esta preparación para ECAES ................................................. 1 1 ECAES y Métodos Formales / Uniandes................................................................ 2 2 Matemáticas discretas ............................................................................................ 2 2.1 Funciones, relaciones, conjuntos ............................................................. 3 2.2 Lógica ....................................................................................................... 6 2.3 Conteo, Ecuaciones de diferencia ........................................................... 9 2.4 Grafos ..................................................................................................... 12 3 Programación y algorítmica .................................................................................. 13 3.1 Estructuras de datos .............................................................................. 13 3.2 Algoritmos .............................................................................................. 15 4 Informática teórica ................................................................................................ 18 4.1 Lenguajes formales y autómatas ........................................................... 19 4.2 Paradigma orientado a objetos (POO) ................................................... 23 Bibliografía ...................................................................................................................... 23 0 CÓMO SE ENTIENDE ESTA PREPARACIÓN PARA ECAES La idea de prepararse para un examen como ECAES, que resume lo aprendido en toda una carrera, no es repetir de nuevo todo lo una vez leído o estudiado. Un tal examen no puede preguntar sobre todo, pero sí sobre lo fundamental y común a todos los currículos de Ingeniería de Sistemas en el país. El énfasis de este documento estará en señalar cuestiones que son importantes para saber y recordar en el momento del examen. Estarán mejor preparados para el examen quienes tengan más claridad conceptual sobre lo que aprendieron. La idea con este documento es resaltar lo básico e importante, de manera que, si no se tuviera claridad sobre un tal tema, o si se hubiera olvidado, un repaso personal del mismo debería ayudar para una mejor preparación.

Transcript of Preparación para ECAES Métodos Formales - UNIANDES · Las relaciones de equivalencia son...

Preparación para ECAES Métodos Formales Rodrigo Cardoso - Noviembre de 2006

0 Cómo se entiende esta preparación para ECAES ................................................. 1

1 ECAES y Métodos Formales / Uniandes................................................................ 2

2 Matemáticas discretas ............................................................................................ 2 2.1 Funciones, relaciones, conjuntos ............................................................. 3 2.2 Lógica ....................................................................................................... 6 2.3 Conteo, Ecuaciones de diferencia ........................................................... 9 2.4 Grafos..................................................................................................... 12

3 Programación y algorítmica .................................................................................. 13 3.1 Estructuras de datos .............................................................................. 13 3.2 Algoritmos .............................................................................................. 15

4 Informática teórica ................................................................................................ 18 4.1 Lenguajes formales y autómatas ........................................................... 19 4.2 Paradigma orientado a objetos (POO)................................................... 23

Bibliografía ...................................................................................................................... 23

0 CÓMO SE ENTIENDE ESTA PREPARACIÓN PARA ECAES

La idea de prepararse para un examen como ECAES, que resume lo aprendido en toda una carrera, no es repetir de nuevo todo lo una vez leído o estudiado. Un tal examen no puede preguntar sobre todo, pero sí sobre lo fundamental y común a todos los currículos de Ingeniería de Sistemas en el país.

El énfasis de este documento estará en señalar cuestiones que son importantes para saber y recordar en el momento del examen. Estarán mejor preparados para el examen quienes tengan más claridad conceptual sobre lo que aprendieron. La idea con este documento es resaltar lo básico e importante, de manera que, si no se tuviera claridad sobre un tal tema, o si se hubiera olvidado, un repaso personal del mismo debería ayudar para una mejor preparación.

1 ECAES Y MÉTODOS FORMALES / UNIANDES

En 2003 ACOFI fue la encargada de diseñar los exámenes ECAES. Como parte del diseño del examen de Ingeniería de Sistemas (IS) se produjo el documento de especificaciones de la prueba [ACOFI2003], en el que se explicitaban las áreas de conocimiento que estarían comprendidas en el examen, preguntas que debían hacerse por área, etc.

Desde 2005 se habla de que el ECAES es un examen que mide competencias. Sin embargo, quizás lo más sensato como forma de preparación hacia un examen ECAES es un repaso de conocimientos adquiridos durante la carrera. Así mismo deben pensar quienes elaboran preguntas para un ECAES, en el sentido de que la importancia de las materias que deberían verse no debe haber cambiado en tan poco tiempo.

Como área fundamental en la carrera de Ingeniería de Sistemas (y Computación, en Uniandes), los Métodos Formales tienen que ver con varias áreas de conocimiento. En estos términos, los ECAES deberían tocar, en cuanto a Métodos Formales según el currículo de Uniandes, temas correspondientes a los cursos:

• Herramientas de Deducción Formal • Fundamentos de Ciencias de la Computación • Diseño de Algoritmos • Modelaje y Especificación de Software • Teoría de Lenguajes • Estructuras de datos

Más que organizar los comentarios en cuanto a temas de cursos, se tomará como referencia el texto de [ACOFI2003] en lo correspondiente a Métodos Formales. Hay que entender que lo allí consignado es una síntesis de lo que se pretendió fuera un contenido fundamental en cualquier currículo de IS. Es posible que haya allí algún tema no cubierto en el currículo Uniandes que un estudiante en particular pudo seguir.

El índice del documento seguirá el índice de [ACOFI2003]. El texto de [ACOFI2003] se escribirá en bastardilla y en verde, mientras que los comentarios al respecto se harán en letra corriente. Para permitir la distinción cuando si no se tiene impresión a color, el texto de [ACOFI2003] se enmarcará, además.

2 MATEMÁTICAS DISCRETAS

Objetivo general

Las estructuras discretas son material fundamental para las ciencias de la computación. Aunque pocos IS terminarán teniendo las estructuras discretas como su objeto principal de trabajo, muchas áreas de la informática requieren de la capacidad de trabajar con esta clase de conceptos ([CC2001]).

El comentario tiene que ver con lo fundamental del área. Los conocimientos pueden ser aplicados en muchos dominios de la IS: construcción de software, sistemas de información, gráficas, comunicaciones, etc.

Por matemática discreta se entienden temas como teoría de conjuntos, lógica, teoría de números o aritmética, combinatoria y conceptos de estructuras abstractas.

La lógica y la teoría de conjuntos se estudian en Uniandes en Herramientas de Deducción Formal (HDF).

La teoría de números o aritmética y conceptos de combinatoria se estudian en Fundamentos de Ciencias de la Computación (FCC).

Los conceptos de estructuras abstractas se refieren a grafos. En Uniandes se estudian de una manera muy práctica en cursos como Estructuras de Datos (ED). No hay un curso específico sobre teoría de grafos.

Preparación para ECAES - Métodos Formales 2 de 23

Los fundamentos matemáticos son útiles para modelar situaciones reales, especificar problemas y verificar soluciones. Son también esenciales para establecer sintaxis y semántica de lenguajes formales que permitan la programación de computadores. En general, las ciencias de la computación y la ingeniería de software se fundamentan en matemáticas discretas y las utilizan en sus desarrollos.

Las estructuras discretas sirven para modelar, especificar, implementar y verificar software. En Uniandes esto corresponde a Diseño de Algoritmos (DA), Modelaje y Especificación de Software (ME) y Teoría de Lenguajes (TL).

Temas

• Funciones, relaciones, conjuntos • Lógica • Conteo, Ecuaciones de diferencia • Grafos

2.1 Funciones, relaciones, conjuntos

Justificación

Los conjuntos constituyen la notación básica para expresar nociones matemáticas. Las relaciones y funciones expresan cómo se pueden denotar diferentes clases de asociaciones entre elementos de conjuntos.

Temas

• Conjuntos (Operaciones básicas, producto cartesiano, potencia, diagramas de Venn) A ∪ B : unión de conjuntos A ∩ B : intersección de conjuntos A \ B : diferencia de conjuntos ∅ : conjunto vacío U : conjunto universal A × B : producto cartesiano, conjunto de parejas de elementos (a,b), con a∈A, b∈B 2U : (o bien U) conjunto potencia o partes.

Qué significa operar conjuntos, en cada caso.

Propiedades entre operaciones, v.gr., A ∩ (A ∪ B) = A A ∩ (B ∪ C) = (A ∩ B)∪(A ∩ C) …

Dualidad entre uniones e intersecciones, v.gr., A ∪ (A ∩ B) = A A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C) …

En Uniandes se usa notación de 3 puestos, para conjuntos denotados por comprensión: {x | Q : E }

lo cual no es lo más corriente. Es más usual la notación de dos puestos: {x | R } (= {x | R : x })

Preparación para ECAES - Métodos Formales 3 de 23

Hay una relación estrecha entre los conjuntos y las proposiciones lógicas. Si uno representa conjuntos con diagramas en el plano, llega a los conocidos como diagramas de Venn-Euler. Es fácil razonar con estos diagramas para recordar propiedades de los conjuntos. Por ejemplo, en el diagrama siguiente:

ST

ST : S ⊆ T

se representa la inclusión de un conjunto en otro. Es fácil ver de allí, por ejemplo, que S ∩ (U \ T) = ∅.

• Cardinalidad

La cardinalidad de un conjunto es su tamaño.

Dos conjuntos A y B tienen la misma cardinalidad si hay una biyección f: A → B.

El vacío tiene cardinalidad 0. Es un conjunto finito. Otros conjuntos finitos son aquellos para los que existe una biyección con un intervalo [0..n-1]. En este caso, la cardinalidad es n.

El conjunto de los números naturales es infinito. Sin embargo, es enumerable o contable. De hecho, un conjunto contable si existe una biyección con los naturales1.

Los números reales son infinitos, pero no son contables. Hay más reales que naturales.

Los números racionales Q = {p,q:Z | q≠0 : p/q} son contables. En general, el producto cartesiano finito de conjuntos contables es contable.

• Relaciones binarias (propiedades: reflexividad, simetría, transitividad, equivalencia, clausuras, inversas, composición)

Una relación R es un subconjunto de un producto cartesiano A1×A2×…×An. Cuando n=2 la relación es binaria.

Las relaciones binarias son las más conocidas, estudiadas y utilizadas. Se definen:

I = {(x,x) | x∈A} identidad en A.

R reflexiva ≡ (∀x|: xRx)

R irreflexiva ≡ I ∩ R = ∅

R simétrica ≡ (∀x,y| xRy : yRx)

R transitiva ≡ (∀x,y,z | xRy ∧ yRz : xRz)

R equivalencia ≡ R reflexiva, simétrica y transitiva.

1 Los números naturales, nat, son 0,1,2,3,… . Hay presentaciones en las que el 0 no es un natural. Hay que fijarse si esto es parte de una pregunta, cómo se debe entender nat.

Preparación para ECAES - Métodos Formales 4 de 23

R-1 = {(y,x)| xRy}

RS = {(x,y)| (∃z|: xRz ∧ zRy)} composición de R con S Es una operación asociativa y con unidad. No es simétrica.

R0 = I

Rk+1 = RRk , k≥0

R* = (∪k | k≥0 : Rk) clausura reflexiva y transitiva de R. relación reflexiva y transitiva más pequeña que contiene R R+ = (∪k | k>0 : Rk) clausura transitiva de R relación transitiva más pequeña que contiene R R total ≡ (∀x |: (∃y|: xRy)) R unívoca ≡ (∀x,y,z | xRy ∧ xRz: y=z) R función ≡ R total y unívoca. R asimétrica ≡ R ∩ R-1 = ∅ R antisimétrica ≡ R ∩ R-1 ⊆ I R orden parcial ≡ R reflexiva, transitiva, antisimétrica R orden total ≡ R orden parcial ∧ (∀x,y|: xRy ∨ yRx)

Las relaciones de equivalencia son relaciones binarias sobre un mismo conjunto. • Ejemplos de relaciones de equivalencia x = y x = y (mod m) {(x,y) | f(x) =X f(y)} …

Una relación de equivalencia parte el conjunto en que se definen en clases de equivalencia. O bien, éstas constituyen un partición de A.

Las clausuras transitiva y reflexiva-transitiva son útiles en teoría de lenguajes (son básicas en la definición de lenguajes regulares) y en problemas de optimización (ruta más corta; la relación representa conectividad entre nodos).

De hecho estudiar relaciones binarias sobre un conjunto A equivale a estudiar grafos dirigidos sobre el conjunto A.

Para representar relaciones se usan estructuras de datos aptas para representar grafos. Típicamente, matrices booleanas. Si son dispersas (pocos arcos), se pueden usar listas de adyacencia.

La representación con matrices booleanas satisface relaciones algebraicas interesantes: • la composición de relaciones corresponde a multiplicación matricial

Preparación para ECAES - Métodos Formales 5 de 23

• la conectividad en grafos se visualiza en la clausura reflexiva transitiva • ...

• Funciones (como relaciones unívocas; propiedades: inyección, sobreyección, biyección).

Una relación en A×B que sea total y unívoca es una función. Se nota f: A → B. Una función es parcial si sólo es unívoca. Además, en vez de (a,b)∈f o afb se escribe f(a)=b. Modernamente: f.a = f.b .

Las propiedades y operaciones de las relaciones se definen igualmente para las funciones. Por ejemplo, hay composición funcional, función inversa (aunque ésta puede no ser función), función identidad, etc.

Propiedades específicas de funciones: f inyectiva ≡ (∀x,y | f.a = f.b : a=b) f sobre ≡ (∀y |: (∃x |: f.x = y) f biyección ≡ f inyectiva y f sobre.

En informática es usual representar una función f: [0..n-1] → X con un arreglo de elementos de X subindicado con elementos de {0..n-1]. Así mismo, una matriz puede verse como una función de varios argumentos.

Las funciones de los lenguajes de programación son representaciones de funciones matemáticas aunque, más precisamente son relaciones unívocas (funciones parciales).

2.2 Lógica

Justificación

La lógica es una herramienta para la IS que permite expresar formalmente las propiedades que posee un objeto (especificación), así como seguir procedimientos para establecer que así sea (pruebas, verificaciones).

Es importante el conocer el uso y las limitaciones de la lógica al ser aplicada a la informática. En cambio, es importante señalar que la lógica, como objeto de estudio, no es esencial en la IS.

La lógica para IS es una herramienta más que una materia para estudiar.

Temas

• Lógica proposicional, Conectivos lógicos, Tablas de verdad

En lógica proposicional las proposiciones son atómicas, indivisibles: p,q,r, ...

La verdad se representa con dos valores: true, false (también 1, 0, pero se advierte que no se deben confundir los valores numéricos con los de verdad).

El tipo booleano se define como bool = {true,false}.

Los conectivos lógicos son funciones u operaciones de argumentos y valor booleano.

Hay conectivos

Preparación para ECAES - Métodos Formales 6 de 23

• de 0 argumentos : true, false • de 1 argumento : ¬. • de 2 argumentos : .∧. , .∨., .⇒., .≡., etc.

Hay 2^(2n) conectivos de n puestos. Por ejemplo, hay 16 conectivos binarios posibles.

La semántica de un conectivo es determinada por su tabla de verdad. De hecho, la semántica de cada fórmula es expresable con una tabla de verdad.

Una fórmula es satisfacible si hay una asignación de valores a las variables booleanas de las que depende, de modo que todo evalúe a true.

Una fórmula es válida si toda asignación de valores a las variables booleanas de las que depende da lugar a que todo evalúe a true.

Las tablas de verdad son un método completo para decidir la validez o la satisfacibilidad de una proposición lógica. Sin embargo, este es un procedimiento exponencial en el número de símbolos de proposición que aparecen en la fórmula (n variables conllevan 2n renglones en la tabla).

El problema SAT se refiere a encontrar un algoritmo para decidir la satisfacibilidad de una fórmula proposicional de n variables. Se ha probado que este es un problema NP-completo. En la práctica, esto significa que los mejores algoritmos para decidir SAT son exponenciales.

• Forma normal conjuntiva / disyuntiva

El conjunto de conectivos {.¬ , .∧.} es un conjunto completo para expresar cualquier fórmula proposicional. Lo mismo puede decirse del conjunto {.¬ , .∨.}.También es completo {.¬, .∧., .∨.} .

Un literal es una fórmula de la forma p o ¬p, siendo p un símbolo de proposición.

Una cláusula es una disyunción de literales: (p1 ∨ p2 ∨ ... ∨ pr).

Una conjunción de cláusulas es una fórmula en forma normal conjuntiva.

Una fórmula f está en forma normal disyuntiva si es una disyunción de conjunciones de literales.

Toda fórmula proposicional tiene una forma normal disyuntiva (conjuntiva) equivalente.

• Fórmulas válidas / Tautologías

Una tautología es una fórmula válida.

• Lógica de predicados, Cuantificación universal / existencial

El lenguaje de lógica de predicados incluye • símbolos de función • símbolos de predicado • cuantificaciones

Preparación para ECAES - Métodos Formales 7 de 23

Las cuantificaciones siguen reglas muy similares a las de las sumatorias.

• Límites de la lógica

Las limitaciones a las que se refiere [ACOFI2003] tienen que ver con expresividad y completitud.

Se usan, esencialmente, lógica proposicional y de predicados. Para la mayoría de las aplicaciones es suficiente la lógica de primer orden (cuantificación sobre variables). Sin embargo, la aritmética requiere, para el tratamiento de la inducción, de cuantificación sobre predicados (segundo orden).

La completitud de una lógica se refiere a la posibilidad de ser axiomatizadas con un cálculo que permita demostrar todos los teoremas (afirmaciones verdaderas) de la teoría.

La lógica de primer orden se puede axiomatizar con un cálculo completo. No así las lógicas de más alto orden.

• Técnicas de demostración estructura de pruebas formales

Un cálculo deductivo incluye reglas de inferencia y axiomas. • Cálculo estándar: basado en Modus Ponens como regla de inferencia. • En Uniandes: Cálculo ecuacional, basado en Regla de Leibniz.

prueba directa, por contradicción, por contraposición

Una prueba directa usa el cálculo deductivo para mostrar el resultado a partir de las premisas.

Un prueba por contradicción muestra que suponer el resultado negado conlleva una incoherencia.

Una prueba por contraposición o contrarrecíproca se basa en que p ⇒ q ≡ ¬q ⇒ ¬p.

inducción matemática

Inicialmente, para mostrar afirmaciones universales sobre nat.

Se puede expresar de varias formas, por ejemplo: (∀n|:p.n) ≡ p.0 ∧ (∀n| p.n: p(n+1))

Lo esencial: probar la afirmación para unos casos específicos (casos base) y, suponiendo que se ha probado para un n, mostrar que se pueden probar para casos complicados derivados de n. Hay que poder argumentar que todo número natural es "alcanzable".

Por ejemplo, también es cierto que: (∀n|:p.n) ≡ p.0 ∧ p.1 ∧ (∀n| p.n: p(n+2))

pero no es cierto que: (∀n|:p.n) ≡ p.0 ∧ p.1 ∧ (∀n| p.n: p(n+3))

Preparación para ECAES - Métodos Formales 8 de 23

La inducción sobre números naturales se puede generalizar a conjuntos definidos recursivamente. Por ejemplo, para probar que toda expresión aritmética bien formada tiene paréntesis balanceados basta mostrar que las expresiones básicas son así y que cualquier construcción de fórmulas que se base en fórmulas correctamente construidas respeta esta propiedad.

órdenes bien fundados

(nat,<) es un orden bien fundado (obf): es una relación de orden sobre nat en la que no existen cadenas descendentes de tamaño arbitrariamente grande ("no hay cadenas infinitas").

Otros ejemplos de obf: • (2X, ⊂) • (String[X],<), donde α<β si α es una subcadena propia de β (v.gr., can<caneca, can<

roncando) • Si (A,<A), (B,<B) son obf's, también (A×B,<lex) lo es. El orden lexicográfico <lex se define así:

(a,b) <lex (c,d) ≡ a<Ab ∨ (a=b ∧ c<Bd)

Los obf's se usan para mostrar terminación de ciclos o recursiones. El estado de computación se califica con un elemento de un obf. Si se prueba que todo paso del proceso conduce a un estado menor calificado que aquél del cual partió, el proceso debe terminar.

• Definiciones matemáticas recursivas

En informática, todo conjunto infinito es finitamente generado, i.e., es construido inductivamente, mediante recursión.

Para construir un conjunto infinito se procede así (ejemplo, cómo construir stacks): • se construyen objetos iniciales (v.gr., empty) • se construyen objetos complejos basándose en objetos ya construidos (v.gr., push(s,x), siendo s un

stack y x un elemento) .

Esto es típico de estructuras de datos sin límite de tamaño: listas, árboles, etc. De hecho, esta construcción es la forma de construir tipos abstractos de datos (TADs).

Cuando un conjunto de objetos se define recursivamente, las propiedades universales sobre estos objetos deben ser mostradas con métodos inductivos: primero, para los objetos iniciales; después, comprobando que los objetos complejos cumplen la propiedad en cuestión si los objetos en que su construcción se basa también la cumplen.

2.3 Conteo, Ecuaciones de diferencia

Justificación

El conteo de elementos de conjuntos finitos es esencial en la práctica de la IS. Es importante para estimar los recursos (especialmente, espaciales o temporales) que demanda una solución.

El tema de ecuaciones de recurrencia tiene relevancia para IS, de manera análoga a como las ecuaciones diferenciales pueden ser importantes en ingenierías en que lo continuo prima sobre lo discreto. La dinámica de los sistemas discretos puede expresarse en cambios modelables con ecuaciones de recurrencia.

Preparación para ECAES - Métodos Formales 9 de 23

Temas

• Reglas de suma y producto

Para estimar el tamaño de conjuntos.

La regla de suma establece que el tamaño de un conjunto que se puede expresar como una partición es el de la suma de los tamaños de las partes.

La regla del producto establece que el tamaño de un conjunto que es el producto cartesiano de otros es el producto de los tamaños de las partes.

Ejemplos: • Número de dígitos en los números de 0 a 1000 = x

xk : número de dígitos en números de k dígitos, 1≤k≤3 x = x1 + x2 + x3 + x4 (regla de sumas) Ahora, aplicaciones de la regla de producto: x1 = 10 (10 posibilidades, cada una un dígito para números de una cifra) x2 = 90 = 9 * 10 (posibles números de dos dígitos; el primer dígito no es 0) x3 = 900 = 9 * 10 * 10 (posibles números de tres cifras) x4 = 1 (solo 1000 tiene cuatro cifras) Así: x = 1001.

• Recursión

El tamaño de un conjunto puede expresarse con una función recursiva. Se prefiere una forma cerrada, para entender mejor la función.

Ejemplo: • c.0 = 0, c(n+1) = c.n + 2n +1, n≥0 • En forma cerrada: c.n = n2, n≥0.

El cálculo de expresiones cerradas se puede adelantar en varios casos interesantes, solucionando ecuaciones de recurrencia correspondientes.

• Progresiones aritméticas y geométricas

Un crecimiento aritmético es un crecimiento de la forma: c(n+1) = c.n + a. En este caso, c.n = na + c.0, n≥0.

Un crecimiento geométrico es de la forma c(n+1) = a c.n + b, con a>1. En este caso, c.n = pan + q, n≥0, para ciertas constantes p,q.

Un crecimiento geométrico da lugar a procesos costosos e ineficientes. Un crecimiento aritmético es muy razonable, pero no siempre se consigue.

• Principio del palomar

Preparación para ECAES - Métodos Formales 10 de 23

Principio de conteo no constructivo, útil para mostrar la existencia de una situación que resuelve un problema.

"Si n palomas entran en m palomares, con m<n, hay un palomar con más de una paloma".

Es no constructivo porque no se sabe cuál es el palomar sobrepoblado; solo se sabe que existe.

Ejemplo: • 5 puntos en un cuadrado de lado 1. Entonces hay dos puntos a una distancia menor o igual a √2/2.

Basta con dividir el cuadrado en cuatro cuadrados iguales, de lado .5. Al menos uno de estos cuadrados debe contener dos puntos y la mayor distancia entre ellos es la diagonal de un cuadrado de lado .5, i.e., la distancia es menor o igual a √2/2.

• Permutaciones y combinaciones

Una permutación es un reordenamiento de una lista de elementos. Si hay n elementos en la lista, hay n! permutaciones.

La combinación C(n,k)cuenta el número de subconjuntos de tamaño k de un conjunto de n elementos. Se puede calcular con el triángulo de Pascal, el cual refleja la fórmula

C(n,k) = n!

k!(n-k)! = ( )nk , n≥k≥0

Hay muchas propiedades para C(n,k). Una de las más importantes le da un nombre por el que es más conocido: coeficiente binomial. Se cumple que:

(x + y)n = (+k| 0≤k≤n : C(n,k) xkyn-k)

• Ecuaciones de recurrencia lineales

Una definición recursiva de una función es una ecuación de recurrencia.

Una recurrencia tiene la forma: xn = F(...)

donde en la expresión F pueden aparecer dependencias de xk, con 0≤k<n. Cuando F es una expresión lineal en un número fijo de variables xk, se dice que la ecuación es lineal.

Por ejemplo: c(n+1) = c.n + 2n +1, n≥0

La solución de ecuaciones lineales es relativamente fácil y conocida. Hay métodos algorítmicos seguros (el Teorema Maestro [Cor1990]), y otros intuitivos y más recordables (el anulador).

Por ejemplo, para la ecuación anterior, aplicando el método del anulador: (E-1)3c = 0 ⇒ c.n = A*1n + B*n*1n + C*n2*1n ¸, n≥0 , para ciertas constantes A,B,C ⇒ c.n = n2 + A

Una ecuación de recurrencia no lineal es, en general, difícil de solucionar. No son tan frecuentes en informática y algunas de ellas se saben resolver con cambios de variables adecuados. Por ejemplo, la ecuación de recurrencia que mide la complejidad temporal promedio de un quicksort cumple las recurrencias: TQS(n) = 0 , n≤1

Preparación para ECAES - Métodos Formales 11 de 23

= TP(n)+ 2TQs(n/2), n>1

TP(n) = 0 , n≤1 = O(n) , n>1

En este caso, las dos últimas ecuaciones definen mediante una recurrencia lineal el tiempo ocupado por el procedimiento que permuta los elementos de un arreglo de n elementos de suerte que los menores o iguales a un pivote x queden a la izquierda y los mayores a x queden a la derecha. Esto da una complejidad O(n), i.e., se puede afirmar que TP(n) = An+B, n≥0. Al remplazar en las dos primeras ecuaciones se obtiene un resultado para TP(n) = O(n log n). Para llegar a esto se requiere hacer un cambio de variable de la forma k:= n/2, con ekl que se logra una recurrencia lineal sobre k.

2.4 Grafos

Justificación

Los grafos constituyen una forma genérica de estructuras de información. Cuando un grafo se puede dibujar corresponde a un modelo visual de una relación binaria.

En un grafo G(V,E), V es el conjunto de nodos o vértices y E es el conjunto de arcos. Un arco es una pareja (u,v)∈V×V. Por esta razón, el conjunto de arcos E es la relación que define el grafo.

Un camino es una sucesión de vértices tal que vértices consecutivos constituyen arcos del grafo. Un camino cerrado empieza y termina en el mismo vértice. Un ciclo es un camino cerrado que solo repite el vértice del comienzo.

El grado (de salida) de un vértice es el número de arcos que salen de él.

Un grafo es conexo cuando entre cada par de vértices existe un camino.

Los arcos de un grafo pueden etiquetarse con valores, v.gr., letras, números, etc. En teoría de lenguajes hay grafos que representan el comportamiento de autómatas, cuyos arcos se etiquetan con cadenas de caracteres. En problemas de ruta óptima los lugares son nodos y las carreteras que comunican lugares son arcos etiquetados con costos.

Los árboles son grafos de gran utilidad en IS como estructuras de información dinámicas básicas.

Temas

• Árboles

Un árbol es un grafo acíclico conexo minimal. Si a un árbol se le quita un arco deja de ser conexo. Si se le agrega un arco, se arma un ciclo.

Los árboles se representan con arcos dirigidos. Muchas veces se distingue uno de sus nodos, la raiz.

Los árboles se denominan n-arios dependiendo del grado de salida máximo de sus vértices. Un árbol binario tiene dos descendientes, a lo sumo. El orden de los descendientes o hijos importa.

Preparación para ECAES - Métodos Formales 12 de 23

• Grafos dirigidos, no dirigidos

En general, E denota un grafo dirigido (el orden de los arcos tiene dirección). Las propiedades de E son propiedades del grafo. Un grafo no dirigido se puede modelar incluyendo los arcos inversos para todos los arcos de E.

• Recorrido de grafos (en particular, recorrido de árboles)

Los grafos dirigidos se pueden recorrer visitando sus nodos sistemáticamente. Hay recorridos por anchura y por profundidad (depth-first).

En los árboles se distinguen los recorridos en preorden (raíz, izquierda, derecha) , posorden (...) e inorden (...).

Hay recorridos de grafos que exigen ciertas condiciones, v.gr., • recorrer todos los arcos de un grafo no dirigido, sin repetir arco. Este es el problema de Euler y tiene

solución en grafos que tengan, a lo sumo, dos nodos de grado impar. La solución es construible en tiempo polinomial.

• recorrer todos los vértices de un grafo, sin repetir vértice, excepto al final. Este es el problema del circuito hamiltoniano, muy relacionado con el problema del agente viajero (lo mismo, pero considerando costos en los arcos, encontrar un circuito de costo mínimo). No hay solución polinomial conocida para este problema: es NP- completo.

3 PROGRAMACIÓN Y ALGORÍTMICA

Objetivo general

En esta área se incluyen conceptos fundamentales de programación que deben manejarse, independientemente del paradigma computacional subyacente. Dentro de estos están conceptos básicos de algorítmica y de estructuras de datos. Estos conocimientos son esenciales para el estudio de otras áreas relacionadas, en especial, ingeniería de software y lenguajes de programación.

Los algoritmos son fundamentales en ciencias de la computación e ingeniería de software. De hecho, el desempeño de un sistema de software real depende solamente de dos cosas: el algoritmo elegido y la eficiencia de la implementación. El buen diseño de algoritmos es crucial para el desempeño de los sistemas de software. El estudio de la algorítmica da luces sobre la naturaleza intrínseca de los problemas y de sus posibles soluciones, independientemente de aspectos como el lenguaje de programación o la plataforma computacional disponible.

Es importante saber reconocer situaciones en las que se sea conveniente emplear algoritmos específicos, así como reconocer situaciones en las que no hay soluciones algorítmicas o solo se conocen soluciones ineficientes.

Temas

• Estructuras de datos • Algoritmos

3.1 Estructuras de datos

Preparación para ECAES - Métodos Formales 13 de 23

Justificación

Las estructuras de datos sirven para almacenar modelos de la realidad sobre los que se implementan soluciones informáticas. Se estudian de manera abstracta, suponiendo la existencia de un lenguaje algorítmico (lenguaje formal para expresar algoritmos) conocido.

Las estructuras de datos tienen que ver con Métodos Formales en la medida en que se habla de Tipos Abstractos de Datos (TADs). No es tema central de los ECAES, pero da sustento a la aplicación de este formalismo en la construcción y verificación de corrección de estructuras de datos.

Un TAD Y[X] es una estructura algebraica con parámetros opcionales (la lista de tipos X). Hay unas operaciones generadoras que crean objetos de tipo Y a partir de la nada (operaciones iniciales) o de otros objetos ya construidos (operaciones constructoras) . Además, el TAD Y se puede enriquecer con operaciones selectoras , definidas recursivamente sobre la forma en que se construye Y.

Hay formas de construcción de TADS que se explican en térnminos de la construcción recursiva arriba mencionada. Por ejemplo, TADs definidos como enumeraciones, producto cartesiano de TADs, restricciones y sumas de TADs.

Los TADs forman la base teórica del la programación OO.

La persistencia en el tiempo resulta importante para estructuras de datos manejadas por programas que manejan información que debe sobrevivir a la terminación del programa que la manipula.

Temas

• Tipos primitivos • Arreglos, Registros, Cadenas • Representación de datos en memoria • Manejo dinámico de almacenamiento • Apuntadores y referencias • Estructuras dinámicas (pilas, colas, árboles, grafos, ...) • Recursión (en datos)

La recursión en datos es la señalada para la construcción de estructuras arbitrariamente grandes, v.gr., pilas, colas, árboles, etc.

• Archivos • Estrategias para elegir la estructura de datos correcta

Una estructura de datos se elige por eficiencia en espacio y/o eficiencia en tiempo. Estas eficiencias se estiman con medidas de complejidad espacial y complejidad temporal.

Las medidas de complejidad son funciones de valor real. Usualmente no se mide, para un algoritmo, su consumo exacto de espacio/tiempo, sino que se habla de un orden de complejidad, que está parametrizado por el tamaño de los datos de entrada.

Así, una búsqueda tiene como entrada un conjunto de n datos, el tamaño del espacio de la búsqueda, dentro de los que se debe buscar un elemento que cumpla cierta propiedad. Si no es posible suponer un orden entre los datos la búsqueda debe pasar, en el peor caso, por todos los elementos del espacio. Es decir, se usa un

Preparación para ECAES - Métodos Formales 14 de 23

algoritmo O(n). Si es posible ordenar los datos con respecto a lo que se busca, de modo que cada pregunta pueda reducir a la mitad los candidatos a ser lo que se busca, se hará en O(log n).

Para la evaluación de recursos es importante saber estimarlos con ecuaciones de recurrencia.

3.2 Algoritmos

Justificación

Los buenos algoritmos son esenciales para la buena programación. Es importante saber cuándo un algoritmo soluciona un problema (corrección, verificación) y cómo usa los recursos para hacerlo (eficiencia). Por otra parte, para ciertos problemas típicos, la cultura informática ha identificado soluciones que suelen usarse como patrones reutilizables de control.

El IS debe tener un conocimiento básico sobre lo que distingue los buenos de los malos algoritmos, así como de las limitaciones de la algorítmica en la solución de problemas.

Temas

• Análisis de algoritmos

Complejidad

Estimación de recursos que un algoritmo consume.

Se usan estimaciones de órdenes de complejidad. La más simple y usada es la que considera el peor caso, y se denota con estimadores O(n). También puede hablarse de complejidad promedio, pero es mucho más difícil de calcular, porque requiere una distribución de probabilidad conocida, de los datos del problema.

En las medidas de complejidad que usan la notación O(n) se requiere conocer ciertas propiedades de la misma:

• f(n)= O(g(n)) ≡ (∃c,n0 | c,n0 constantes: (∀n| n>n0: f.n ≤ c g.n) • Nunca se escriben cadenas de igualdades f = O(g) = O(h). No tiene sentido. Sin embargo, sí es

cierto que: f = O(g), g = O(h) ⇒ f = O(h). • f = O(c g) ⇒ f = O(g) ¸ para c constante. • p = O(f), q = O(g) ⇒ pq = O(fg) • p ≤ q ⇒ p = O(q) • …

Algoritmos polinomiales / exponenciales

Un algoritmo que consuma una cantidad exponencial de recursos es ineficiente. Uno que consuma una cantidad polinomial, en cambio, es eficiente.

Este criterio parte el conjunto de los algoritmos en dos clase: los polinomiales y los exponenciales. Para un problema, se prefieren soluciones polinomiales frente a soluciones exponenciales.

• Algoritmos clásicos

búsqueda

Preparación para ECAES - Métodos Formales 15 de 23

Problema: buscar en un espacio de tamaño n • Búsqueda lineal: O(n)

Variantes: con certeza / con incertidumbre: O(n) • Búsqueda binaria: O(log n)

ordenamiento • Ordenar por máximos: O(n2) • Sort burbuja: O(n2 ) • Quicksort: O(n2) (peor caso). Caso promedio, (distribución uniforme de datos): O(n log n) • Los mejores algoritmos de ordenamiento alcanzan, efectivamente, O(n log n)en el peor caso.

Ordenar es buscar una permutación, entre n! posibles. El mejor algoritmo podría usar log(n!) preguntas/pasos de programa, del que es relativamente fácil ver que es O(n log n). Así que ésta es una cota inferior de complejidad para algoritmos de ordenamiento, en cuanto a preguntas de sí/no.

ruta mínima en grafos

Una grafo dirigido etiquetado G(V,E,c) es un grafo dirigido con una función de costo c:V×V→R*, donde R* = R+∪{0,∞}. Usualmente: V = 1..n .

c(x,y) es el costo del arco (x,y). Un costo infinito se da cuando es imposible ir de un nodo al otro, de modo que c(x,y) = ∞, si (x,y)∉E.

El problema de distancia mínima tiene varias variantes de presentación, v.gr., • Encontrar la distancia mínima entre cada par de nodos. Se resuelve en O(n3) con el algoritmo de

Floyd-Warshall. • Encontrar la distancia mínima de un nodo a todos los demás. Se resuelve en O(n log n + e), donde

e = |E|, con el algoritmo de Dijkstra. Si el grafo tiene pocos arcos (pocos: |E| < n log n), se tiene un algoritmo O(n log n). Esto se consigue usando estructuras de datos especiales para guardar nodos no visitados (heaps, colas de prioridad).

• Encontrar la distancia mínima entre dos nodos: Dijkstra, con comentarios como el anterior.

El problema se puede plantear de manera más abstracta, si c:V×V→Y, donde (Y,+Y,*Y) es un semianillo que representa costos abstractos (suma: Y es un monoide conmutativo, con unidad; multiplicación: Y es un monoide con unidad).

Por ejemplo: • (R*,min,+) es un semianillo para el problema de ruta mínima en grafos ya mencionado • (B,∧,∨) es un semianillo para el problema de conectividad en grafos • …

El problema de ruta mínima de todos contra todos equivale al problema de hallar la clausura transitiva reflexiva de la matriz de conectividad del grafo pesada por la función de costos. En otras palabras: encontrar clausuras transitiva-reflexivas equivale al problema de ruta mínima y se puede resolver con las restricciones de complejidad ya anotadas.

La solución de Dijsktra es un caso especial de uso de programación dinámica. Esta técnica de solución de problemas usa espacio adicional al del planteo del problema para guardar resultados intermedios que puede usar en cálculos futuros. Es un cambio de espacio por tiempo.

...

Preparación para ECAES - Métodos Formales 16 de 23

• Verificación de programas

{Q} S {R} ≡ "el programa S es correcto cra la especificación Q,R" i.e., empezando en Q, hay terminación normal en R.

Para verificar {Q} S {R} se usa el cálculo de Hoare. O, equivalentemente, la teoría de precondiciones más débiles de Dijkstra.

La relación es: {Q} S {R} ≡ Q ⇒ wp(S|R)

La verificación es automatizable mientras no haya ciclos. Para estos se debe recurrir a ayudas para las demostraciones, en invariantes y en cotas para mostrar terminación.

especificación

En {Q} S {R}¸la pareja Q, R especifica al programa S.

La solución de un problema de especificación no es única. Tampoco hay algoritmo para construirla.

corrección

Se da una regla de inferencia (o una definición de wp) para cada posible instrucción del lenguaje de programación.

Por ejemplo: • wp(x:= e|R) ≡ R[x:= e] • wp(S1;S2|R) ≡ wp(S1|wp(S2|R)) • wp(IF|R) ≡ … • wp(DO|R) ≡ …

la última se puede definir, pero no calcular de manera efectiva (no hay un algoritmo para calcularla). En cambio se plantean teoremas que garantizan la corrección de instrucciones, en condiciones bastante generales.

Teorema del IF: {Q} if B then S1 else S2 fi ≡ (1) {Q ∧ B} S1 {R} (2) {Q} ∧ ¬B} S2 {R}

Teorema del DO: {Q} {Inv P} {cota t} do B → S od ≡ (1) Q ⇒ P // P vale antes (2) P ∧ ¬B ⇒ R // P sirve (3) {P ∧ B} S [P // P invariante (4) {P ∧ t=t0} S {t<t0} // Cota rebaja

(5) P ∧ t>t0 ⇒ ¬B // Si falta, ¬B vale (4) + (5): condiciones para mostrar -formalmente- terminación

aserciones, invariantes, ...

Preparación para ECAES - Métodos Formales 17 de 23

Las aserciones son afirmaciones sobre el estado del programa. En un programa, la pre y la poscondición enmarcan el programa estableciendo su especificación.

Un invariante es una aserción que describe una condición inmutable durante la ejecución de un ciclo. También ha invariantes de clase, para describir un comportamiento que satisfacen las instancias de una clase en POO.

• Límites de la algorítmica

indecidibilidad

Un problema es decidible si existe un algoritmo para resolverlo. En otro caso, es indecidible. El problema indecidible más conocido es quizás el problema de la parada: no se puede decidir si un programa va a parar o no.

Otros problemas indecidibles tiene que ver con enunciados de teorías que se saben tienen estos problemas. Por ejemplo, hay problemas en aritmética que son indecidibles.

clases P y NP

Una vez que un problema sea decidible, es posible que el algoritmo que exista para resolverlo sea ineficiente (exponencial).

P: problemas de decisión (sí/no) decidibles en tiempo polinomial con respecto a la entrada.

NP: problemas de decisión decidibles en tiempo polinomial con una máquina no-determinística. Equivalentemente, problemas que verifican una solución de los mismos en tiempo polinomial.

Por ejemplo, el problema del agente viajero (dado un grafo etiquetado y un número k, decidir si hay un un circuito de costo menor que k que pase por todos los nodos del grafo) está en NP. dada una posible solución, es fácil verificar que sea un circuito y que cueste menos de k¸en tiempo polinomial. pero no se conocen soluciones polinomiales de este problema.

Un problema NP-completo representa a NP, en el sentido de que pertenece a esa clase y, además, cualquier problema en NP es reducible polinomialmente (traducible con un proceso que cuesta polinomial) al problema en cuestión.

Algunos problemas NP completos: • Agente viajero • SAT (satisfacción de fórmulas proposicionales) • Clique (decidir si un grafo tiene un subgrafo completo de taaño menor que k) • Circuito Hamiltoniano (existencia) • …

Asociados con los problemas de decisión hay problemas de optimización y de búsqueda. Por ejemplo, para el agente viajero, el problema de optimización correspondiente es calcular el costo de una ruta de costo mínimo. El de búsqueda es encontrar una ruta de costo mínimo. Usualmente, la relación entre los problemas de optimización y de búsqueda con el de decisión es polinomial, i.e, encontrar una solución polinomial para alguno de ellos repercute en encontrar una solución polinomial para todos ellos.

4 INFORMÁTICA TEÓRICA

Preparación para ECAES - Métodos Formales 18 de 23

Objetivo general

Bajo esta denominación se han agrupado temas técnicos de informática que constituyen material fundamental para el estudio y el ejercicio de la profesión. La denominación del área pretende seguir una analogía con el papel de las ciencias básicas hacia las ingenierías, en general: la informática básica es un soporte de muchos de los conocimientos y desarrollos de la IS e incluye conceptos técnicos fundamentales del dominio de la informática.

El nombre de esta área en 2003 fue así pero no es el mejor. Debería ser algo como Informática Fundamental.

La programación orientada por objetos se ha impuesto como paradigma de programación en la última década, especialmente por su capacidad para capturar en el lenguaje de programación la semántica del modelo que se crea en el análisis y el diseño estableciendo una relación uno a uno entre el dominio del problema y el dominio solución.

La POO se incluyó en 2003 por ser el modelo de programación emergente en la época. Puede ser importante para conocer nociones fundamentales de la OO como herencia, polimorfismo, clases, instancias, atributos, etc.

Temas

• Lenguajes formales y Autómatas (conceptos básicos: no Teoría de Autómatas) • Programación orientada por objetos

4.1 Lenguajes formales y autómatas

Justificación

• Con esta denominación se agrupan temas que, en currículos clásicos, pueden ser incluidos en cursos de lenguajes formales o de compiladores.

• Al enunciar 'Autómatas' dentro de los temas del área se ha advertido que no se quiere incluir el tema de autómatas en toda la extensión de la palabra (teoría de autómatas, por ejemplo), sino su uso práctico en IS, en el modelaje de sistemas descritos con estados y transiciones y en aplicaciones de lenguajes formales.

Temas

• Conceptos básicos de lenguajes formales

Definición

Dado un alfabeto V un lenguaje formal es un subconjunto de V*(conjunto de las cadenas finitas de letras de V)

El problema del análisis sintáctico es el de que, dado un lenguaje L y una palabra w∈V* decidir si w∈L. Es indecidible, en general. Es decidible para lenguajes de cierta complejidad.

Un lenguaje se puede describir con una gramática G(V,P,T,N,S) donde • V : alfabeto • P : conjunto de producciones

Una producción es una regla α → β, con α,β∈V*, α∉N* • T : conjunto de símbolos terminales • N : conjunto de símbolos no terminales • S : es un símbolo inicial , S∈N.

Preparación para ECAES - Métodos Formales 19 de 23

Se tiene que V = T∪N. Cada producción es una regla de remplazo que se puede interpretar sobre V*. El lenguaje generado por G es

L(G) = {w∈T* | S ⇒* w}

.⇒. es la relación de remplazo inducida por las producciones sobre V*. Su clausura reflexiva transitiva es .⇒*. Entonces, en el lenguaje están las palabras que se derivan del símbolo distinguido S en un número finito de pasos.

Los lenguajes se clasifican según la forma de las producciones de la gramática. • Tipo 3: lenguajes regulares. Producciones: A → aB, con a∈T, A,B∈N • Tipo 2: lenguajes libres de contexto. Producciones: A → α, con α∈V*, A∈N • Tipo 1: lenguajes sensibles al contexto. Producciones: αAβ → αγβ, con α,β,γ∈V*, A∈N • Tipo 0: lenguajes recursivamente enumerables. Producciones. α→β (sin restricciones).

Hay contención propia entre las clases de lenguajes mencionadas: Tipo 3 ⊂ Tipo 2 ⊂ Tipo 1 ⊂ Tipo 0.

Para reconocer un lenguaje (analizarlo sintácticamente) hay mecanismos formales que describen algoritmos. Según su complejidad, son reconocibles por:

• Regulares: autómatas finitos • Libres de contexto: autómatas de pila, determinísticos • Sensibles al contexto: : autómatas de pila, no determinísticos • Recursivamente enumerables: máquinas de Turing.

Los lenguajes de programación son, en la práctica, lenguajes libres de contexto. La teoría permite definir, a partir de la gramática que defina un tal lenguaje, generar de manera automática un algoritmo que reconozca el lenguaje.

1. Gramáticas / BNF

BNF (Backus-Naur.Form): es una notación para describir gramáticas. Las producciones se denotan con un formalismo sucinto y práctico. En BNF

• w+ : w repetido una o más veces • w* : w repetido cero o más veces • | : separador de partes derechas de reglas que comparten una misma parte izquierda • ::= : símbolo alterno para representar .→. • ⟨…⟩ : descripción de una categoría sintáctica (un no-terminal). • …

Ejemplo: Números de dos dígitos ⟨Dígito⟩ ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ⟨Número de dos dígitos⟩ ::= ⟨Dígito⟩ ⟨Dígito⟩

También se podría: ⟨Dígito⟩ ::= 0..9 ⟨Número de dos dígitos⟩ ::= ⟨Dígito⟩2

• Máquinas de Turing

Definición, fundamentos

Preparación para ECAES - Métodos Formales 20 de 23

Una maquina de Turing es un autómata que tiene una cinta de entrada, una cinta de salida y una cinta de trabajo.

El autómata lee un carácter a la vez en la cinta de entrada, la cual solo se mueve en la dirección en que se lee (no se puede releer).

El autómata puede escribir caracteres, uno por uno, en la cinta de salida, la cual se mueve solo en la dirección de escritura (no se puede reescribir).

El autómata puede escribir o leer un carácter a la vez, de la cinta de trabajo. Esta cinta se mueve en las dos direcciones.

El control de la máquina es una tabla de acciones que, a partir de un estado en el que se esté y un símbolo leído, decide si leer un símbolo más, escribir un símbolo o avanzar en las cintas, de acuerdo con lo que éstas permitan. O puede detenerse.

La máquina de Turing calcula, para una palabra ω en la cinta de entrada, una palabra ω', si al final la máquina se detiene con la palabra ω' en la cinta de salida.

La máquina de Turing es el mecanismo de calculabilidad más usado como referencia. Una función es Turing -calculable si hay una máquina de Turing que la calcule. Un computador moderno es tan potente como una máquina de Turing. Son mecanismos equipotentes:

• Máquinas de Turing • Algoritmos de Markov • Máquinas de Post • Funciones recursivas • Máquinas de registros • …

• Autómatas

Estados, transiciones

Un autómata está definido por un grafo dirigido. Los nodos del grafo son estados del autómata Los arcos representan acciones o transiciones. Hay un subconjunto de estados, los estados iniciales, desde uno de los cuales puede comenzar una ejecución del autómata y un conjunto de estados finales, donde se espera que la ejecución termine de manera normal.

Un autómata puede ser • determinístico : siempre se comporta de la misma manera • no-determinístico : puede comportarse de más de una manera, en condiciones iguales • finito : si el número de estados es finito • …

Autómatas determinísticos, no determinísticos

El no determinismo sirve para modelar incertidumbre en el camino de ejecución que se debe seguir al modelar el control de un autómata.

Para autómatas de estado finito se define el reconocimiento de autómatas no determinísticos como que exista un camino de un estado inicial hasta un estado final. Es conocido el hecho de que siempre que exista un autómata no-determinístico (para reconocer un lenguaje), existe uno determinístico que también lo hace.

Preparación para ECAES - Métodos Formales 21 de 23

La situación no es igual para autómatas de pila (tienen, además, una memoria en forma de pila). De hecho, la diferencia de determinísticos a no-determinístuicos a otros da lugar a lenguajes sensibles o no al contexto.

Modelaje con autómatas

Una situación modelable con estados y transiciones es susceptible de ser modelada con autómatas. El estado puede ser definido por valores de variables, cuya forma de almacenamiento puede ser, en general una estructura de datos cualquiera.

Ejemplos: • Comportamiento de mecanismos (televisor, lavadora, …) • Procesos de control (préstamo bancario, solicitud de visa, …) • …

En particular, un programa puede ser simulado con un autómata y, de hecho, un computador es un un autómata que interpreta (simula) programas.

Autómatas finitos / Relación con lenguajes regulares

Los lenguajes regulares son reconocibles por autómatas finitos. Una gramática regular correspondiente no es otra cosa que una descripción del autómata que reconoce el lenguaje.

Autómatas de pila / Relación con lenguajes libres de contexto

Los lenguajes libres del contexto son reconocibles por autómatas de pila determinísticos.

• Semántica de lenguajes

Una semántica para un lenguaje L es una función σ: L → LC que transforma palabras de L en palabras de otro lenguaje LC (un lenguaje conocido).

Cuando se compila un lenguaje de programación se hace un análisis sintáctico de la palabra que llega como entrada (el programa que se va a compilar) y, si cumple las reglas gramaticales se traduce a un lenguaje entendible por una máquina que sabe ejecutar este código traducido. El paso de traducción o de generación de código, no es otra cosa que una implementación de la función que calcula la semántica del lenguaje.

• Herramientas de análisis sintáctico

Cómo se utilizan

Para generadores de analizadores sintácticos, principalmente. A partir de una gramática de lenguaje Tipo 2, se verifica que sí sea éste el caso. De no ser así, la herramienta indica las producciones con problemas. El usuario puede modificar la gramática para llegar a una gramática aceptable por la herramienta.

Limitaciones

Preparación para ECAES - Métodos Formales 22 de 23

Solo para lenguajes libres de contexto. Las herramientas prefieren además cierta clase de lenguajes sensibles al contexto, v.gr., LL(k).

4.2 Paradigma orientado a objetos (POO)

Justificación

• La POO se ha impuesto como paradigma de programación práctica en la última década. Es importante, independientemente de la plataforma tecnológica que se use (v.gr., C++, Java, ...) que se tenga claridad en conceptos fundamentales, de manera que las soluciones propuestas aprovechen de la mejor manera la tecnología OO (modelaje, diseño, implementación).

Temas

• Diseño OO • Encapsulamiento y ocultamiento de información • Clases / Subclases / Jerarquías de clases • Herencia • Polimorfismo • Clases contenedoras / iteradores • Representación interna de objetos y métodos • Patrones básicos

BIBLIOGRAFÍA [ACOFI2003] ACOFI, ECAES en Ingeniería 2003: Especificaciones en Ingeniería de Sistemas e Informática, 2003. [Car1993] Cardoso, R., Verificación y desarrollo de programas, Ediciones Ecoé-Uniandes, 1993. [CC2001] ACM / IEEE, Final Report of the Joint ACM/IEEE-CS Task Force on Computing Curricula 2001 for Computer

Science, URL: http://www.computer.org/education/cc2001/final/index.htm, 2001. [Cor1990] Cormen, T.H., Leiserson, C.E., Rivest, R.L., Introduction to algorithms, MIT Press, 1990. [Gri1981] Gries, D., The science of programming, Springer Verlag, 2a. impresión, 1983. [Gri1993] Gries, D., A logical approach to discrete Math, Springer Verlag, 1993. [Wik2006] Wikipedia, URL: http://en.wikipedia.org/wiki/Main_Page.

Preparación para ECAES - Métodos Formales 23 de 23