\[ \newcommand{\tr}{\Rightarrow} \newcommand{\trs}{\tr^{\!\ast}} \newcommand{\rlnm}[1]{\mathsf{(#1)}} \newcommand{\rred}[1]{\xrightarrow{#1}} \newcommand{\rreds}[1]{\mathrel{\xrightarrow{#1}\!\!^*}} \newcommand{\cl}{\mathsf{Cl}} \newcommand{\pow}{\mathcal{P}} \newcommand{\matches}{\mathrel{\mathsf{matches}}} \newcommand{\kw}[1]{\mathsf{#1}} \]

Kleene’s Theorem. Finite automata and regular expressions have the same expressive power:

  • For all regular expressions $R$, there is a finite automaton $M$ such that \(L(R) = L(M)\)
  • For all finite automata $M$, there is a regular expression $R$ such that \(L(M) = L(R)\)