Algoritmo para reducir un DFA mediante la introducción de no determinismo?


8

Esto está algo relacionado con otra pregunta que hice , pero siento que es lo suficientemente diferente como para justificar su propia pregunta.

Estoy investigando donde estoy tratando de encontrar la estructura de los complementos de una determinada clase de lenguajes finitos. Es fácil para mí obtener los DFA mínimos que aceptan estos lenguajes, pero me gustaría examinar qué tipo de estructura tienen los NFA que aceptan estos idiomas, particularmente cómo el no determinismo ayuda con el tamaño del estado de los autómatas (los DFA son exponencialmente grandes).

El problema es que la técnica principal de reducción de NFA usa equivalencias, que no producirán ninguna reducción si comienzo con un DFA mínimo (ya que básicamente está usando la misma técnica). Si empiezo con un DFA no mínimo, solo escupe el DFA mínimo.

Lo que me pregunto es, ¿hay algoritmos que puedan comenzar con un DFA y reducirlo a un NFA más pequeño al introducir el no determinismo? ¿Existen "técnicas estándar" para hacer esto?

He encontrado reducciones de preorden , que parecen prometedoras pero difíciles de implementar. Estoy abierto a muchas sugerencias.


es posible pero Pspace completo para encontrar un NFA mínimo para un DFA
vzn

Sí, pero existen técnicas de reducción que son útiles pero no encuentran el mínimo en todos los casos. Estoy más interesado en cómo el no determinismo reduce el tamaño del estado que en encontrar el caso mínimo.
jmite

Respuestas:


4

Para una heurística eficiente, sugeriría buscar en la literatura CAD sobre el problema de codificación de estado (asignar identificadores binarios a estados de un DFA para minimizar la cantidad de lógica para la función de transición de estado). Devadas y Newton, "Descomposición y factorización de finito secuencial máquinas de estado ", IEEE TCAD , 8 (11): 1206-1217, 1989 señala que existe una estrecha relación entre la codificación de estado y la descomposición de la máquina de estado.

Si para un DFA con N declara que asigna un único M Identificador de estado de bit a cada estado (lg2N<MN), esencialmente ha descompuesto el DFA en una red de Mmáquinas interactivas de dos estados. Equivalente: has definido un conjuntoS con M elementos, y se les asignó un subconjunto único de Sa cada estado en su DFA original. Esto también es lo que hace el algoritmo de construcción de conjuntos de potencia Rabin-Scott . Entonces, al hacer una codificación de estado en el DFA, estamos tratando de aplicar ingeniería inversa al conjunto desde el que comenzó el algoritmo de construcción del conjunto de potencia.

En el problema de codificación de estado tradicional, todas las codificaciones son legales, y hay alguna función objetiva (relacionada con la cantidad de lógica en la función de transición de estado) que está intentando minimizar. Para generar un NFA, debe resolver una versión restringida del problema de detección donde:

una codificación de MLos identificadores de bits para los estados DFA representan un NFA si para cada símbolo del alfabeto la función de transición para cada bit es una simple disyunción de bits. (No se permite conjunción ni negación).

Para que puedas enumerar todos los M codificaciones de bits para todos lg2N<MN, y verifique si cada uno satisface la restricción. (Tenga en cuenta que paraM=N la codificación trivial "one-hot" siempre satisface las restricciones y le da el DFA.) Sin embargo, la enumeración es ridículamente grande (el libro de texto de Di Micheli lo da como algo así como 2M!(2MN)!M!.) La razón por la que sugiero la literatura CAD es que existen técnicas para hacer esta búsqueda implícitamente en lugar de enumerar (por ejemplo, mediante el uso de BDD, ver Lin, Touati y Newton, "No importa la minimización de la secuencial de varios niveles redes lógicas, " Int'l Conf Comp-Aided Dsgn ICCAD-90: 414-417, 1990 .

Ejemplo

Tome el siguiente DFA, (con una codificación de estado que obtuve por engaño (generé el DFA a partir de un NFA usando Rabin-Scott, y la codificación representa los subconjuntos elegidos por Rabin-Scott))

DFA de Rabin-Scott

Si llamamos a los bits en la asignación de estado ABCD, cuando el símbolo de entrada es 1, la función de transición es A = A, B = A, C = B, D = C. Cuando el símbolo de entrada es 0, la función de transición es A = A, C = B, D = C. Esta es una función de transición puramente disyuntiva sin conjunción ni negación, por lo que esta codificación de estado nos da un NFA. Los estados en el NFA corresponden uno a uno con los bits en la codificación, y la función de transición es la siguiente:

NFA para Rabin-Scott

Formulación como problema de satisfacción booleana

La descripción informal anterior conduce directamente a una codificación como un problema de satisfacción booleana. Hay un conjunto de variables que describe las transiciones en el NFA, y un conjunto de variables para la codificación del estado de DFA que se derivarían de Rabin-Scott para el NFA elegido. Las transiciones del DFA específico que está tratando de descomponer se usan para colocar restricciones en las transiciones NFA.

Supongamos que se nos da un DFA con N estados para un idioma con S símbolos, y nos gustaría obtener un M NFA estatal, con lg2N<MN. Utilizaremos las variablesysft para representar las posibles transiciones en la NFA. ysftserá cierto si hay una transición en el NFA de estado NFAf a estado NFAten símbolo s. En el ejemplo anterior NFA, el alfabeto es de tamaño 2 y hay 4 estados NFA, por lo que haySM2=32 y variables y y0AA,y1AAy y1AB son todas verdaderas mientras y1DA Es falso.

Utilizaremos las variables xdn para indicar si el algoritmo Rabin-Scott debe incluir o no el estado NFA n en el conjunto de estados que etiquetan el estado de DFA d. En el ejemplo anterior tenemosN=8 DFA declara y M=4 NFA dice que hay 32 xvariables En el ejemplo anterior, suponga que el estado más bajo (el etiquetado "1011") es el estadok, entonces xkA, xkCy xkD son ciertas mientras xkB Es falso.

Ahora las limitaciones. En primer lugar, Rabin-Scott debe encontrar una codificación diferente para cada estado de DFA, por lo que para los estados de DFAi<j y todos los estados de la NFA {A,B,,D}:

(xiAxjA)+(xiBxjB)++(xiDxjD).

A continuación, debe darse el caso de que si Rabin-Scott encuentra una transición del estado de DFA i al estado de DFA j en símbolo s entonces para cada estado NFA k incluido en la codificación de j debe haber un estado NFA l de la codificación del estado DFA j tal que la NFA original tuvo una transición de l a k. En el ejemplo anterior, en el símbolo "1" hay una transición de DFA del estado de DFA "1000" al estado de DFA "1100", por lo que debe haber una transición de NFA del estado de NFA A a los estados de NFA A y B y no transición de NFA de NFA estado A al estado NFA C o D. Entonces, para cada uno de loso(SN2) bordes en el DFA tenemos las restricciones:

xjA=ysAAxiA+ysBAxiB++ysDAxiDxjB=ysABxiA+ysBBxiB++ysDBxiDxjD=ysADxiA+ysBDxiB++ysDDxiD.

Finalmente tenemos que lidiar con el inicio y aceptar los estados. El estado de inicio de DFA se codifica con la unión de los estados de inicio de NFA, por lo que es mejor que el estado de inicio de DFA no se codifique con el conjunto vacío.x0A+x0B++x0D. Y finalmente necesitamos un conjunto de variablesfnpara indicar si cada estado NFA es un estado de aceptación NFA. Debe darse el caso de que la codificación de cada estado de aceptación de DFA contenga al menos un estado de aceptación de NFA y que la codificación de cada estado de no aceptación de DFA no contenga ningún estado de aceptación de NFA, por lo que:xiAfA+xiBfB++xiDfD para DFA aceptar estados i y ¬(xjAfA+xjBfB++xjDfD) para los estados no aceptados de DFA j.


Esta idea de la ingeniería inversa de la construcción del subconjunto es exactamente lo que estoy buscando. Parece complicado, así que me tomaré un tiempo para analizarlo. ¡Gracias!
jmite

1
He estado tratando de descubrir cómo reformularlo como un problema SAT, pero aún no he dedicado suficiente tiempo.
Wandering Logic

3

Minimizar los NFA es difícil, de hecho es tan difícil que incluso la aproximación es difícil; ver Minimizar NFA y expresiones regulares de Gramlich y Schnitger (2005). Este artículo también parece tener algunas referencias útiles, por ejemplo, Algoritmos de reducción de NFA por medio de desigualdades regulares de Champarnaud y Coulon (2002) que contiene técnicas de minimización.


Sí, estoy bien si es solo una reducción y no una minimización completa. Voy a echar un vistazo, esas referencias se ven muy bien sin embargo.
jmite

2

Existen algunas nociones de FSA canónicas que no son necesariamente deterministas, por lo tanto, pueden ser más pequeñas que el DFA mínimo. Un ejemplo son las FSA "residuales", para las cuales se pueden calcular las FSA canónicas residuales de forma bastante directa, ver F. Denis, A. Lemay y A. Terlutte. "Autómatas de estado finito residual", Fundamenta Informaticae 51 (4): 339-368, 2002 . Existen varias alternativas.


¿Podría explicar la informática de forma bastante directa? De esta manera, calcular el FSA canónico residual es un problema completo de PSPACE. Eso todavía podría funcionar para mí (mis máquinas son bastante pequeñas) pero desconfío de eso.
jmite

En particular, estoy confundido sobre cómo determinaría si un estado en una máquina es "codiciable", como se define en la página 17 del documento, justo antes de la Sección 5 Lema 4.
jmite
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.