Brzozowski derivative

Function defined on formal languages in computer science From Wikipedia, the free encyclopedia

In theoretical computer science, particularly in formal language theory, the Brzozowski derivative of a set of strings and a string is the set of all strings obtainable from a string in by cutting off the prefix . Formally:

.
Brzozowski derivative (on red background) of a dictionary string set with respect to the string "con"

For example,

The Brzozowski derivative was introduced under various different names since the late 1950s.[1][2][3] Today it is named after the computer scientist Janusz Brzozowski who investigated its properties and gave an algorithm to compute the derivative of a generalized regular expression.[4]

Definition

Even though originally studied for regular expressions, the definition applies to arbitrary formal languages. Given any formal language over an alphabet and any string , the derivative of with respect to is defined as:[4]

The Brzozowski derivative is a special case of left quotient by a singleton set containing only : .

Equivalently, for all :

From the definition, for all :

since for all , we have .

The derivative with respect to an arbitrary string reduces to successive derivatives over the symbols of that string, since for all :

A language is called nullable if and only if it contains the empty string . Each language is uniquely determined by nullability of its derivatives:

A language can be viewed as a (potentially infinite) boolean-labelled tree (see also tree (set theory) and infinite-tree automaton). Each possible string denotes a node in the tree, with label true when and false otherwise. In this interpretation, the derivative with respect to a symbol corresponds to the subtree obtained by following the edge from the root. Decomposing a tree into the root and the subtrees corresponds to the following equality, which holds for every language :

Derivatives of generalized regular expressions

When a language is given by a regular expression, the concept of derivatives leads to an algorithm for deciding whether a given word belongs to the regular expression.

Given a finite alphabet A of symbols,[5] a generalized regular expression R denotes a possibly infinite set of finite-length strings over the alphabet A, called the language of R, denoted L(R).

A generalized regular expression can be one of the following (where a is a symbol of the alphabet A, and R and S are generalized regular expressions):

  • "∅" denotes the empty set: L(∅) = {},
  • "ε" denotes the singleton set containing the empty string: L(ε) = {ε},
  • "a" denotes the singleton set containing the single-symbol string a: L(a) = {a},
  • "RS" denotes the union of R and S: L(RS) = L(R) ∪ L(S),
  • "RS" denotes the intersection of R and S: L(RS) = L(R) ∩ L(S),
  • R" denotes the complement of R (with respect to A*, the set of all strings over A): LR) = A* \ L(R),
  • "RS" denotes the concatenation of R and S: L(RS) = L(R) · L(S),
  • "R*" denotes the Kleene closure of R: L(R*) = L(R)*.

In an ordinary regular expression, neither ∧ nor ¬ is allowed.

Computation

For any given generalized regular expression R and any string u, the derivative u−1R is again a generalized regular expression (denoting the language u−1L(R)).[6] It may be computed recursively as follows.[7]

(ua)−1R= a−1(u−1R)      for a symbol a and a string u
ε−1R= R

Using the previous two rules, the derivative with respect to an arbitrary string is explained by the derivative with respect to a single-symbol string a. The latter can be computed as follows:[8]

a−1a= ε
a−1b= ∅for each symbol ba
a−1ε= ∅
a−1= ∅
a−1(R*)= (a−1R)R*
a−1(RS)= (a−1R)S ∨ ν(R)a−1S
a−1(RS)= (a−1R) ∧ (a−1S)
a−1(RS)= (a−1R) ∨ (a−1S)
a−1R)= ¬(a−1R)

Here, ν(R) is an auxiliary function yielding a generalized regular expression that evaluates to the empty string ε if R's language contains ε, and otherwise evaluates to ∅. This function can be computed by the following rules:[9]

ν(a)= ∅for any symbol a
ν(ε)= ε
ν(∅)= ∅
ν(R*)= ε
ν(RS)= ν(R) ∧ ν(S)
ν(RS)= ν(R) ∧ ν(S)
ν(RS)= ν(R) ∨ ν(S)
ν(¬R)= εif ν(R) = ∅
ν(¬R)= ∅if ν(R) = ε

Properties

A string u is a member of the string set denoted by a generalized regular expression R if and only if ε is a member of the string set denoted by the derivative u−1R.[10]

Considering all the derivatives of a fixed generalized regular expression R results in only finitely many different languages. If their number is denoted by dR, all these languages can be obtained as derivatives of R with respect to strings of length less than dR.[11] Furthermore, there is a complete deterministic finite automaton with dR states that recognises the regular language given by R, as stated by the Myhill–Nerode theorem.

Derivatives of context-free languages

Derivatives are also effectively computable for recursively defined equations with regular expression operators, which are equivalent to context-free grammars. This insight was used to derive parsing algorithms for context-free languages.[12] Implementation of such algorithms have shown to have cubic time complexity,[13] corresponding to the complexity of the Earley parser on general context-free grammars.

See also

References

Related Articles

Wikiwand AI