En informática teórica , en particular en teoría del lenguaje formal , la derivada de Brzozowski de un conjunto de cadenas y una cadena es el conjunto de todas las cadenas que se pueden obtener a partir de una cadena en cortando el prefijo . Formalmente:
Por ejemplo,
La derivada de Brzozowski se introdujo con varios nombres diferentes desde finales de la década de 1950. [1] [2] [3] Hoy lleva el nombre del científico informático Janusz Brzozowski , quien investigó sus propiedades y dio un algoritmo para calcular la derivada de una expresión regular generalizada . [4]
Aunque originalmente se estudió para expresiones regulares, la definición se aplica a cualquier lenguaje formal. Dado cualquier lenguaje formal sobre un alfabeto y cualquier cadena , la derivada de con respecto a se define como: [5]
La derivada de Brzozowski es un caso especial de cociente izquierdo por un conjunto singleton que contiene sólo : .
De manera equivalente, para todos :
De la definición, para todos :
ya que para todos , tenemos .
La derivada con respecto a una cadena arbitraria se reduce a derivadas sucesivas sobre los símbolos de esa cadena, ya que para todo :
Un lenguaje se considera nulo si y solo si contiene la cadena vacía . Cada lenguaje se determina de forma única por la nulidad de sus derivados:
Un lenguaje puede ser visto como un árbol (potencialmente infinito) etiquetado con booleanos (ver también árbol (teoría de conjuntos) y autómata de árbol infinito ). Cada cadena posible denota un nodo en el árbol, con etiqueta verdadera cuando y falsa en caso contrario. En esta interpretación, la derivada con respecto a un símbolo corresponde al subárbol obtenido al seguir la arista desde la raíz. Descomponer un árbol en la raíz y los subárboles corresponde a la siguiente igualdad, que se cumple para cada lenguaje :
Cuando un idioma se da mediante una expresión regular, el concepto de derivadas conduce a un algoritmo para decidir si una palabra dada pertenece a la expresión regular.
Dado un alfabeto finito A de símbolos, [6] una expresión regular generalizada R denota un conjunto posiblemente infinito de cadenas de longitud finita sobre el alfabeto A , llamado el lenguaje de R , denotado L ( R ).
Una expresión regular generalizada puede ser una de las siguientes (donde a es un símbolo del alfabeto A , y R y S son expresiones regulares generalizadas):
En una expresión regular ordinaria, no se permiten ni ∧ ni ¬.
Para cualquier expresión regular generalizada dada R y cualquier cadena u , la derivada u −1 R es nuevamente una expresión regular generalizada (que denota el lenguaje u −1 L ( R )). [7] Puede calcularse recursivamente de la siguiente manera. [8]
( ua ) −1 R | = a −1 ( u −1 R ) | para un símbolo a y una cadena u |
ε −1 R | = R |
Utilizando las dos reglas anteriores, la derivada con respecto a una cadena arbitraria se explica por la derivada con respecto a una cadena de un solo símbolo a . Esta última se puede calcular de la siguiente manera: [9]
un −1 un | = ε | |
a -1 b | = ∅ | para cada símbolo b ≠ a |
a -1 ε | = ∅ | |
un −1 ∅ | = ∅ | |
a −1 ( R *) | = ( a − 1R ) R * | |
a −1 ( RS ) | = ( a −1 R ) S ∨ ν( R ) a −1 S | |
a −1 ( R ∧ S ) | = ( a − 1R )∧( a − 1S ) | |
a −1 ( R ∨ S ) | = ( a − 1R )∨( a − 1S ) | |
a −1 (¬ R ) | = ¬( a −1 R ) |
Aquí, ν( R ) es una función auxiliar que produce una expresión regular generalizada que se evalúa como la cadena vacía ε si el lenguaje de R contiene ε , y de lo contrario se evalúa como ∅. Esta función se puede calcular mediante las siguientes reglas: [10]
v( a ) | = ∅ | para cualquier símbolo a |
ν( ε ) | = ε | |
ν(∅) | = ∅ | |
v( R *) | = ε | |
v( RS ) | = ν( R ) ∧ ν( S ) | |
ν( R ∧ S ) | = ν( R ) ∧ ν( S ) | |
ν( R ∨ S ) | = ν( R ) ∨ ν( S ) | |
ν(¬ R ) | = ε | si ν( R ) = ∅ |
ν(¬ R ) | = ∅ | si ν( R ) = ε |
Una cadena u es un miembro del conjunto de cadenas denotado por una expresión regular generalizada R si y solo si ε es un miembro del conjunto de cadenas denotado por la derivada u −1 R . [11]
Si se consideran todas las derivadas de una expresión regular generalizada fija R, se obtiene un número finito de lenguajes diferentes. Si su número se denota por d R , todos estos lenguajes se pueden obtener como derivados de R con respecto a cadenas de longitud menor que d R . [12] Además, existe un autómata finito determinista completo con d R estados que reconoce el lenguaje regular dado por R , como se indica en el teorema de Myhill–Nerode .
Las derivadas también son efectivamente computables para ecuaciones definidas recursivamente con operadores de expresión regular, que son equivalentes a gramáticas libres de contexto . Esta idea se utilizó para derivar algoritmos de análisis para lenguajes libres de contexto . [13] La implementación de tales algoritmos ha demostrado tener una complejidad de tiempo cúbico , [14] correspondiente a la complejidad del analizador de Earley en gramáticas generales libres de contexto.