Pochodna Brzozowskiego

Pochodna Brzozowskiego (na czerwonym tle) łańcucha znaków ze słownika względem łańcucha „con”

W teorii języków formalnych w informatyce pochodna Brzozowskiego u 1 S {\displaystyle u^{-1}S} zbioru ciągów znaków S {\displaystyle S} względem ciągu znaków u {\displaystyle u} jest zdefiniowana jako zbiór ciągów znaków otrzymanych z elementów zbioru S {\displaystyle S} poprzez usunięcie prefiksu u {\displaystyle u} (jeśli istnieje), formalnie u 1 S = { v Σ : u v S } , {\displaystyle u^{-1}S=\{v\in \Sigma ^{*}:uv\in S\},} jak na rysunku[1]. Nazwa pochodnych Brzozowskiego pochodzi od nazwiska informatyka Janusza Brzozowskiego, który badał ich właściwości i opracował algorytm liczący pochodne uogólnionych wyrażeń regularnych.

Pochodna wyrażenia regularnego

Mając skończony alfabet A {\displaystyle A} symboli[2] uogólnione wyrażenie regularne oznacza potencjalnie nieskończony zbiór ciągów znaków skończonej długości złożonych z symboli z alfabetu A . {\displaystyle A.} Zbiór ten może mieć postać:

  • {\displaystyle \varnothing } (pusty zbiór ciągów znaków)
  • ε {\displaystyle \varepsilon } (jednoelementowy zbiór zawierający tylko pusty ciąg znaków)
  • symbol a {\displaystyle a} ze zbioru A {\displaystyle A} (co oznacza jednoelementowy zbiór zawierający ciąg znaków składający się z jednego symbolu a {\displaystyle a} )
  • R S {\displaystyle R\lor S} (unia zbiorów R {\displaystyle R} i S , {\displaystyle S,} gdzie R {\displaystyle R} i S {\displaystyle S} są uogólnionymi wyrażeniami regularnymi)
  • R S {\displaystyle R\land S} (część wspólna zbiorów R {\displaystyle R} i S {\displaystyle S} )
  • ¬ R {\displaystyle \neg R} (dopełnienie zbioru R {\displaystyle R} względem wszystkich ciągów znaków złożonych z symboli alfabetu A {\displaystyle A} )
  • R S {\displaystyle RS} (zbiór wszystkich możliwych złączeń ciągów znaków ze zbiorów R {\displaystyle R} i S {\displaystyle S} )
  • R {\displaystyle R^{*}} (zbiór n {\displaystyle n} -krotnych powtórzeń ciągów znaków ze zbioru R {\displaystyle R} i S , {\displaystyle S,} dla dowolnego n 0 , {\displaystyle n\geqslant 0,} włącznie z pustym ciągiem znaków).

W zwykłym wyrażeniu regularnym {\displaystyle \land } ani ¬ {\displaystyle \neg } nie jest dozwolone.

Zbiór ciągów znaków oznaczony przez uogólnione wyrażenie regularne R {\displaystyle R} nazywany jest jego językiem i oznacza się go jako L ( R ) . {\displaystyle L(R).}

Jako funkcja pomocnicza δ ( R ) {\displaystyle \delta (R)} zwraca pusty łańcuch ε {\displaystyle \varepsilon } jeśli język odpowiadający R {\displaystyle R} zawiera ε , {\displaystyle \varepsilon ,} w przeciwnym razie δ ( R ) {\displaystyle \delta (R)} zwraca . {\displaystyle \varnothing .} Funkcja ta może być obliczona za pomocą następujących reguł[3]:

δ ( ε ) {\displaystyle \delta (\varepsilon )} = ε {\displaystyle \varepsilon }
δ ( ) {\displaystyle \delta (\varnothing )} = {\displaystyle \varnothing }
δ ( R ) {\displaystyle \delta (R^{*})} = ε {\displaystyle \varepsilon }
δ ( R S ) {\displaystyle \delta (RS)} = δ ( R ) δ ( S ) {\displaystyle \delta (R)\land \delta (S)}
δ ( R S ) {\displaystyle \delta (R\land S)} = δ ( R ) δ ( S ) {\displaystyle \delta (R)\land \delta (S)}
δ ( R S ) {\displaystyle \delta (R\lor S)} = δ ( R ) δ ( S ) {\displaystyle \delta (R)\lor \delta (S)}
δ ( ¬ R ) {\displaystyle \delta (\neg R)} = ε {\displaystyle \varepsilon } jeśli δ ( R ) = {\displaystyle \delta (R)=\varnothing }
δ ( ¬ R ) {\displaystyle \delta (\neg R)} = {\displaystyle \varnothing } jeśli δ ( R ) = ε {\displaystyle \delta (R)=\varepsilon }

W oparciu o to, pochodna uogólnionego wyrażenia regularnego względem jednoelementowego ciągu znaków a {\displaystyle a} może być obliczona w następujący sposób[4]:

a 1 a {\displaystyle a^{-1}a} = ε {\displaystyle \varepsilon }
a 1 b {\displaystyle a^{-1}b} = {\displaystyle \varnothing } dla każdego symbolu b a {\displaystyle b\neq a}
a 1 ε {\displaystyle a^{-1}\varepsilon } = {\displaystyle \varnothing }
a 1 {\displaystyle a^{-1}\varnothing } = {\displaystyle \varnothing }
a 1 ( R ) {\displaystyle a^{-1}(R^{*})} = a 1 R R {\displaystyle a^{-1}RR^{*}}
a 1 ( R S ) {\displaystyle a^{-1}(RS)} = ( a 1 R ) S δ ( R ) a 1 S {\displaystyle (a^{-1}R)S\lor \delta (R)a^{-1}S}
a 1 ( R S ) {\displaystyle a^{-1}(R\land S)} = ( a 1 R ) ( a 1 S ) {\displaystyle (a^{-1}R)\land (a^{-1}S)}
a 1 ( R S ) {\displaystyle a^{-1}(R\lor S)} = ( a 1 R ) ( a 1 S ) {\displaystyle (a^{-1}R)\lor (a^{-1}S)}
a 1 ( ¬ R ) {\displaystyle a^{-1}(\neg R)} = ¬ ( a 1 R ) {\displaystyle \neg (a^{-1}R)}

Dla symbolu a , {\displaystyle a,} dowolnego łańcucha u {\displaystyle u} i uogólnionego wyrażenia regularnego R {\displaystyle R} pochodna ( u a ) 1 R {\displaystyle (ua)^{-1}R} może być obliczona rekursywnie jako a 1 ( u 1 R ) ; {\displaystyle a^{-1}(u^{-1}R);} i ε 1 R {\displaystyle \varepsilon ^{-1}R} jest równe R {\displaystyle R} [5]. w ten sposób dla danego uogólnionego wyrażenia regularnego R {\displaystyle R} i łańcucha u , {\displaystyle u,} pochodna u 1 R {\displaystyle u^{-1}R} może być obliczona jako kolejne uogólnione wyrażenie regularne[6].

Właściwości

Łańcuch u {\displaystyle u} należy do zbioru określonego przez uogólnione wyrażenie regularne R {\displaystyle R} wtedy i tylko wtedy gdy ε {\displaystyle \varepsilon } należy do zbioru ciągów znaków określonego przez pochodną u 1 R {\displaystyle u^{-1}R} [7].

Rozważając wszystkie pochodne uogólnionego wyrażenia regularnego R {\displaystyle R} stałej długości otrzymuje się skończenie wiele różnych języków. Jeśli ich liczba określona jest przez d R , {\displaystyle d_{R},} wszystkie te języki można otrzymać jako pochodne R {\displaystyle R} względem ciągu znaków długości mniejszej niż d R {\displaystyle d_{R}} [8]. Ponadto istnieje kompletny deterministyczny automat skończony o liczbie stanów d R {\displaystyle d_{R}} rozpoznający język regularny określony przez R , {\displaystyle R,} zgodnie z twierdzeniem Myhilla-Nerode’a.

Przypisy

  1. Janusz A. Brzozowski. Derivatives of Regular Expressions. „JACM”. 11, s. 481–494, 1964. DOI: 10.1145/321239.321249. 
  2. Brzozowski (1964), s. 481, wymagał by A 2 n {\displaystyle A2^{n}} kombinacji n {\displaystyle n} bitów, dla dowolnego n . {\displaystyle n.}
  3. Brzozowski (1964), s. 482, definicja 3.2.
  4. Brzozowski (1964), s. 483, twierdzenie 3.1.
  5. Brzozowski (1964), s. 483, twierdzenie 3.2.
  6. Brzozowski (1964), s. 483, twierdzenie 4.1.
  7. Brzozowski (1964), s. 483, twierdzenie 4.2.
  8. Brzozowski (1964), s. 484, twierdzenie 4.3.