2011-01-02 23 views
6

En "Derivados de las expresiones regulares" de Brzozowski y en otros lugares, el δ función (R) devolver λ si un R es anulable, y ∅ otra cosa, incluye cláusulas tales como los siguientes:nulabilidad (Las expresiones regulares)

δ(R1 + R2) = δ(R1) + δ(R2) 
δ(R1 · R2) = δ(R1) ∧ δ(R2) 

Claramente, si tanto R1 y R2 son anulable entonces (R1 · R2) es anulable, y si cualquiera de R1 o R2 es anulable entonces (R1 + R2) es anulable. Sin embargo, no está claro para mí lo que se supone que significan las cláusulas anteriores. Mi primer pensamiento, el mapeo de (+), (·), o las operaciones booleanas a conjuntos regulares no tiene sentido, ya que en el caso base,

δ(a) = ∅ (for all a ∈ Σ) 
δ(λ) = λ 
δ(∅) = ∅ 

y λ no es un conjunto (ni es un conjunto el tipo de retorno de δ, que es una expresión regular). Además, este mapeo no está indicado, y hay una notación separada para él. Comprendo nulability, pero estoy perdido en la definición de suma, producto y operaciones booleanas en la definición de δ: cómo son λ o ∅ devueltos de δ (R1) ∧ δ (R2), por ejemplo , en la definición de δ (R1 · R2)?

+1

Esto debería ser en Theoretical CS en su lugar: http://cstheory.stackexchange.com/ – Wolph

+7

Tenía la impresión de que * cstheory.stackexchange * está destinado a preguntas de nivel de investigación. Si es así, esta pregunta es ciertamente * no * apropiada para el sitio. Hay muchas preguntas de este nivel sobre expresiones regulares en este sitio. – danportin

+0

Estoy bastante cómodo con casi todo en SO, pero esta pregunta me confunde sin fin. Creo que obtendrás más ojos en cstheory. – bukzor

Respuesta

2

Creo que te atrapan las libertades notacionales tomadas por el autor. El tipo de retorno de δ (R) es sin duda un conjunto, o más bien un lenguaje. Si nos fijamos en la definición:

alt text

se puede ver que hay una inconsistencia en el tipo de retorno, formalmente λ es un elemento, pero ∅ es el lenguaje vacío ... lo que debería decir es:

alt text

el hecho de que el autor utiliza λ tanto para la cadena vacía, así como el lenguaje que contiene sólo la cadena vacía se evidencia aún más por la definición del operador de Kleene estrella:

alt text

Claramente, la última parte debe ser alt text si queremos ser pedantes.

Dado que el tipo de retorno de δ (R) es un conjunto, o más bien un idioma, las ecuaciones que proporcione tienen perfecto sentido y expresan exactamente lo que usted describió.

+0

Creo que estás en lo cierto. Estoy acostumbrado a ver L (R) (o cualquier notación equivalente, como [R]) para el lenguaje de una expresión regular. Sigue siendo extraño que el autor use δ en la definición de derivadas para denotar una expresión regular. Si δ denota una expresión regular, y no un lenguaje ({λ} o ∅), cualquiera de las expresiones regulares λ o ∅ se obtiene en los casos recursivos de δ por álgebra simple (por ejemplo, ∅ + λ = λ). – danportin

3

Creo que tenía razón al mapear + y ^ a boolean or y and respectivamente. Parece que las dos líneas que citó trato con alternancia (suma) y concatenación (producto):

δ(R1 + R2) = δ(R1) + δ(R2) 

El alternancia de R1 y R2 es anulable si R1 es anulable, R2 es anulable, o ambos R1 y R2 son nulables.

δ(R1 · R2) = δ(R1) ∧ δ(R2) 

La concatenación de R1 y R2 sólo es anulable si ambos R1 y R2 son anulables.

Consulte here para obtener una implementación de Haskell de estas reglas.

+1

Hmm - Si estuviera definiendo una función * nulable *, las cláusulas adecuadas serían * nulable (R1 + R2) = nulable (R1) ∨ nulable (R2) * (como usted dijo, la suma de R1 y R2 es nulable si disyunción de nulo (R1) y nulo (R2) es verdadero) y * nulable (R1 · R2) = nulo (R1) ∧ nulo (R2) *. Así que podría definir claramente la función δ como * δ (R) = case nullable (R) de True -> λ; Falso -> ∅ *. Si bien es correcto, no es el punto, creo, ya que el valor de retorno de la función es λ o el idioma vacío, y no está empleando un mecanismo como "caso". – danportin

2

(No puedo ver el artículo de Brzozowski para entender mejor lo que se quiere decir), pero puedo sugerir 2 maneras de interpretar esta notación (además de ver cómo funciona la notación, veo, no hay pregunta: el sentido intencionado de esta definición es bien entendido):

1) A la izquierda de la definición, tenemos solo patrones "sintácticos" para las expresiones regulares. A la derecha, producimos conjuntos; recuerde que una expresión regular es una manera de denotar un idioma (un conjunto), por lo que esta forma de escribir la definición se vuelve comprensible: a la derecha, simplemente usamos algunas expresiones regulares (simples) como una forma breve de referirnos a conjuntos. Es decir, ∅ significa el idioma vacío (el conjunto vacío) y λ (si interpreta como expresión regular) significa el idioma que contiene solo la palabra vacía (el conjunto con este elemento).

Las operaciones son simplemente operaciones en conjuntos: probablemente unión e intersección.

Si la notación se interpreta de esta manera, no hay contradicción con la notación utilizada para defian el caso base: de nuevo, "a" es una expresión regular que significa el idioma con la palabra "a".

2) Construimos expresiones regulares a la derecha, en primer lugar, pero el autor ha ampliado las operaciones que crean expresiones regulares con la cuña, que tiene la semántica de intersección de idiomas.

Cuestiones relacionadas