The derivative of a regular expression with respect to a symbol is “what pattern remains after consuming that symbol.” Match a string by taking derivatives one letter at a time; accept if the final expression is nullable (matches the empty string). The genius: the states of the DFA are the derivatives themselves — regexes as states, computed on demand, no separate NFA-to-DFA machinery at all.
Match a*b by derivatives. d/da(a*b) = a*b (the star loops, same state); d/db(a*b) = ε (nullable — accept). Three derivatives are the three DFA states. Watch the pattern transform letter by letter: live demo
“Derivatives are just another way to write the subset construction.” — no. There is no NFA in sight: the derivative is a direct, algebraic regex-to-DFA map where each state is a regular expression, and it extends cleanly to intersection and complement (which the NFA route makes awkward). cited
Finiteness needs one trick: quotient the derivatives by similarity (associativity/commutativity/idempotence of +), or the set of derivatives is infinite — Brzozowski proved that under similarity it is finite, so the DFA terminates. Brzozowski 1964
Matching a*b by derivatives runs on the canonical compiler — the three derivative-states, accept by nullability: