He estado revisando Theory of Computation por diversión y esta pregunta me ha estado molestando por un tiempo (curioso, nunca lo pensé cuando aprendí Automata Theory en mi licenciatura). Entonces, ¿por qué exactamente estudiamos autómatas finitos deterministas y no deterministas (DFA / NFA)? Así que aquí hay algunas respuestas que se me ocurrieron después del soliloquio, pero aún no veo su contribución general al momento 'aha':
- Estudiar lo que son y no son capaces, es decir, limitaciones.
- ¿Por qué?
- Dado que son los modelos básicos de computación teórica y sentarían las bases de otros modelos de computación más capaces.
- ¿Qué los hace 'básicos'? ¿Es que tienen solo un poco de almacenamiento y transiciones de estado?
- ¿Y qué? ¿Cómo contribuye todo esto a responder la pregunta de computabilidad? Parece que las máquinas de Turing ayudan a entender esto realmente bien y hay modelos 'menores' de cómputos como PDA, DFA / NFA / Regexes, etc. Pero si uno no conociera los FA, ¿qué es lo que se están perdiendo?
Entonces, aunque 'lo entiendo' hasta cierto punto, ¿no puedo responderme esta pregunta? ¿Cómo explicarías mejor por qué estudiar D / N-FAs? ¿Cuál es la pregunta que buscan responder? ¿Cómo ayuda y por qué es lo primero que se enseña en Automata Theory?
PD: Soy consciente de las diversas aplicaciones lexicográficas y patrones que se pueden implementar como tal. Sin embargo, no deseo saber para qué se puede usar prácticamente, sino cuál fue su razón de uso / invención / diseño durante la culminación del estudio de la teoría de la computación. Históricamente hablando, ¿qué lo llevó a uno a comenzar con esto y a qué comprensión 'ajá' se supone que debe conducir? Si explicaras su importancia a los estudiantes de CS que recién comienzan a estudiar Teoría de Autómatas, ¿cómo lo harías?
Respuestas:
¡Personalmente he disfrutado varios Aha! momentos del estudio de la teoría básica de autómatas. Los NFA y los DFA forman un microcosmos para la informática teórica en su conjunto.
Podría seguir. (Y seguir.) * Me parece útil tener autómatas en la parte posterior de mi cabeza y recordarlos de vez en cuando para comprender un nuevo concepto o para obtener intuición sobre ideas matemáticas de alto nivel. Dudo que todo lo que menciono anteriormente se pueda comunicar en las primeras conferencias de un curso, o incluso en un primer curso. Estas son recompensas a largo plazo basadas en una inversión inicial realizada en las conferencias iniciales de un curso de teoría de autómatas.
Para abordar su título: no siempre busco la iluminación, pero cuando lo hago, prefiero autómatas finitos. Ten sed, amigo mío.
fuente
Hay muchas buenas razones teóricas para estudiar N / DFA. Dos que vienen a la mente de inmediato son:
Las máquinas de Turing (pensamos) capturan todo lo que es computable. Sin embargo, podemos preguntar: ¿Qué partes de una máquina de Turing son "esenciales"? ¿Qué sucede cuando limitas una máquina de Turing de varias maneras? Los DFA son una limitación muy grave y natural (le quitan la memoria). Las PDA son una limitación menos severa, etc. Es teóricamente interesante ver qué memoria le brinda y qué sucede cuando se queda sin ella. Me parece una pregunta muy natural y básica.
Las máquinas de Turing necesitan una cinta infinita. Nuestro universo es finito, por lo que, en cierto sentido, cada dispositivo informático es un DFA. Parece un tema importante, y nuevamente natural, para estudiar.
Preguntar por qué uno debería estudiar DFA es similar a preguntar por qué uno debería aprender el teorema de integridad de Godel cuando lo realmente interesante es su teorema de incompletitud .
La razón por la que son el primer tema en la teoría de autómatas es porque es natural construir modos más complicados a partir de otros menos complicados.
fuente
Para agregar una perspectiva más al resto de las respuestas: porque en realidad puedes hacer cosas con autómatas finitos, en contraste con las máquinas Turing.
Casi cualquier propiedad interesante de las máquinas de Turing es indecidible. Por el contrario, con autómatas finitos, casi todo es decidible. La igualdad del lenguaje, la inclusión, el vacío y la universalidad son todos decidibles. Combinado con esos autómatas finitos se cierran en casi todas las operaciones que se te ocurran, y que estas operaciones son computables, puedes hacer casi cualquier cosa que quieras hacer con autómatas finitos.
Esto significa que si puede capturar algo utilizando autómatas finitos, automáticamente obtendrá muchas herramientas para analizarlo. Por ejemplo, en las pruebas de software, los sistemas y sus especificaciones pueden modelarse como autómatas finitos. Luego puede probar automáticamente si su sistema implementa correctamente la especificación.
Por lo tanto, las máquinas de Turing y los autómatas finitos le enseñan a las personas un contraste interesante y omnipresente: más poder descriptivo va de la mano con menos capacidad de trazabilidad. Los autómatas finitos no pueden describir mucho, pero al menos podemos hacer cosas con ellos.
fuente
Estado. necesita aprender que uno puede modelar el mundo (para ciertos problemas) como un espacio de estado finito, y uno puede pensar en el cálculo en esta configuración. Esta es una idea simple pero extremadamente útil si realiza alguna programación: se encontraría con el estado una y otra y otra vez, y FA le dará una forma de pensar sobre ellos. Considero que esto es una excusa suficiente para enseñar una clase completa. Por supuesto, el estado puede ser determinista o no determinista. Por lo tanto, DFA y NFA, pero puede convertir entre ellos, etc.
Lo segundo que hay que aprender es el teorema de Halting. Lo cual está relacionado con el teorema de incompletitud de Godel. (No se puede construir una máquina que pueda computarlo todo, y hay afirmaciones matemáticas que no se pueden probar ni refutar, y como tales deben tomarse como axiomas. Es decir, vivimos en un mundo que no tiene una descripción finita o real oráculos - ¡sí por nosotros!)
Ahora, hice mi licenciatura en matemáticas, y te acostumbras a la idea de que aprendes cosas que no tienes idea de por qué estás aprendiendo (teoría de grupos, teoría de medidas, teoría de conjuntos, espacios de Hilbert, etc., etc., etc. [todo lo bueno , Por cierto]). Hay algo que decir sobre aprender a aprender: la próxima vez que tengas que aprender algunas matemáticas extrañas (porque necesitas usarlas para hacer algo en el mundo real) que se ve muy extraño, te tomas con calma. Específicamente, lo tercero que hay que aprender es la madurez matemática: poder discutir cuidadosamente sobre las cosas, saber cuándo las pruebas son correctas o no, escribir las pruebas, etc. Si ya lo tiene, este curso es fácil y no le importaría demasiado mucho por qué lo estás aprendiendo.
Excepto por estos, el curso es una completa pérdida de tiempo, como todo lo demás. Específicamente, puedes vivir una vida feliz sin saber esto. Pero esto es literalmente cierto para todo conocimiento. Más o menos. Para mí, un curso en la universidad vale la pena si miras el mundo de manera diferente después de aprenderlo. Este es definitivamente uno de los cursos que cambió la forma en que pienso sobre el mundo. ¿Qué más puedes pedir?
fuente
Aunque no es realmente la razón por la que se estudiaron originalmente, los autómatas finitos y los lenguajes regulares que reconocen son lo suficientemente manejables como para ser utilizados como bloques de construcción para teorías matemáticas más complicadas. En este contexto, ver grupos particularmente automáticos (grupos en los que los elementos pueden ser representados por cadenas en un lenguaje regular y en el que los productos de los elementos por los generadores de grupo pueden ser calculados por transductores de estado finito) y sub-cambios de sonido (sub-cambios de un espacio de cambio cuyo las palabras prohibidas forman un lenguaje regular). Por lo tanto, existen razones para estudiarlos, incluso si está interesado en las matemáticas puras en lugar de la informática.
Los autómatas finitos también se han utilizado en el diseño de algoritmos para otros tipos de objetos. Por ejemplo, un algoritmo de Culik para probar si un autómata celular unidimensional es reversible implica construir, modificar y probar las propiedades de ciertos NFA. Y un documento de 1986 FOCS de Natarajan mostró cómo resolver un cierto problema en el diseño de líneas de ensamblaje mecánico reduciéndolo a un cálculo sobre autómatas finitos.
fuente
Estás haciendo (al menos) dos preguntas diferentes: (a) ¿Qué partes de la teoría se basan en autómatas finitos hoy en día? (b) ¿Por qué se desarrollaron autómatas finitos en primer lugar? Creo que la mejor manera de abordar este último es mirar los documentos antiguos, como:
Aquí están los primeros dos párrafos:
En resumen, se desarrollaron como un modelo de computadoras reales, que tienen recursos finitos.
fuente
Otra razón es que son modelos teóricos relativamente prácticos . Una máquina de Turing, aparte de la imposibilidad de la cinta infinita, es un poco incómoda para lo que es programar una computadora (¡tenga en cuenta que, para empezar, esta no es una buena analogía!). Sin embargo, los PDA y los DFA son bastante susceptibles de ser modelos de programas reales en el sentido de que un diseño de PDA / DFA a menudo se puede convertir fácilmente en un programa real. El diseño del compilador, por ejemplo, los usa ampliamente. Entonces, en este tipo de puntos de conexión entre la teoría y la práctica, tenemos una idea de cómo todo se une y qué podemos y qué no podemos hacer.
fuente
Mira el juego "Living Binary Adder" aquí: http://courstltc.blogspot.com/2012/12/living-binary-adder-game.html Solía presentar este juego a mis alumnos en los primeros capítulos sobre DFA / NFA Ilustra dos cosas importantes en la teoría de autómatas:
Esto, a veces trae el momento "Ajá" a mis alumnos.
fuente
El concepto de DFA es muy útil para diseñar soluciones eficientes para muchos tipos de problemas. Un ejemplo es la creación de redes. Cada protocolo puede implementarse como una máquina de estado. Implementar la solución de esta manera hace que el código sea más simple y más simple significa una tasa de defectos más baja. También significa que los cambios en el código son más fáciles y tienen un impacto menor, de nuevo con una tasa de defectos más baja.
A algunas personas les resulta difícil ver un protocolo de red como una máquina de estado, pero aquellos que pueden dar el salto lo encuentran muy gratificante en términos de retorno del esfuerzo.
fuente
En realidad, mis alumnos a veces preguntan exactamente esto, después de pasar una gran parte del semestre en autómatas finitos y finalmente llegar a las máquinas Turing. ¿Por qué dedicar tanto tiempo a un formalismo más débil cuando hay uno más fuerte disponible? Así que explico la compensación inherente en el poder expresivo frente a la complejidad analítica. Los modelos más ricos suelen ser más difíciles de analizar. La dicotomía DFA vs. TM es extrema, ya que el problema de la membresía es trivial para uno e incuestionable para el otro. Un ejemplo menos extremo sería DFA vs. PDA. El problema de la membresía para este último resulta ser eficientemente solucionable, pero la solución no es para nada trivial. Vemos esta ocurrencia en muchas ramas de las matemáticas y las ciencias: estudie un modelo simple para obtener una comprensión lo más completa posible, que generalmente también conduce a la comprensión de modelos más complejos.
fuente
Veo varias respuestas que llaman a los FM "menores" que las máquinas de Turing.
Un enfoque principal en la clase de posgrado que tomé fue su equivalencia, no distinciones. Para cada modelo FSM que estudiamos, tuvimos que demostrar su equivalencia con las máquinas de Turing. Esto se realiza mediante la implementación de una máquina de Turing en el FSM. IIRC, también estudiamos algunos otros modelos de computación que no implementan una TM, pero olvido cuáles eran. El punto es que si puede implementar una TM, puede ejecutar cualquier programa de TM en el modelo, dado un análogo de cinta suficientemente grande para el problema que se está ejecutando.
El objetivo de la respuesta a la pregunta fue: TM es el modelo básico de computabilidad, pero no es muy práctico cuando se trata de construir máquinas útiles. De ahí los modelos FSM.
Me lo trajeron a casa visceralmente cuando, más o menos al mismo tiempo (1984), descubrí el lenguaje FORTH. Su motor de ejecución se basa en una realización pura de un PDA de doble pila. Yendo más profundo, aprecio este mismo motor bajo compiladores de expresión
Aunque, para mí, el verdadero impacto de FSM fue descubrir el libro "Theory of Finite Automata" de Trakhtenbrot y Korzynski (?) Cuando tenía 18 años, un descubrimiento que esencialmente me dio mi carrera.
fuente