S → SS | (S) | ε
Zgodność: (każde wygenerowane słowo jest poprawnym wyrażeniem nawiasowym) Niech L oznacza język poprawnych wyrażeń nawiasowych. Dowód zgodności przez indukcję po długości wyprowadzenia.
Przypadek bazowy: poprzez wyprowadzenie długości 1 jest możliwe wygenerowanie tylko słowa ε i należy ono do L.
Krok indukcyjny: każde dłuższe wyprowadzenie zaczyna się od produkcji S → (S) lub S → SS. W pierwszym przypadku wygenerowane słowo będzie postaci (w), gdzie S →...→ w jest wyprowadzeniem o długości n-1, czyli w∈L z założenia indukcyjnego.
Podobnie w drugim przypadku, wygenerowane słowo będzie postaci uv, gdzie S →...→ u oraz S →...→ v są wyprowadzeniami o długości mniejszej niż n (suma długości tych wyprowadzeń wynosi n-1). Zatem u,v∈L, stąd uv∈L.
Pełność: (każde wyrażenie nawiasowe da się wyprowadzić) Dowód przez indukcję po długości wyrażenia. Wyrażenie o długości 0 (słowo puste ε) da się wyprowadzić.
Niech w będzie dowolnym wyrażeniem nawiasowym o długości n>0. Określmy funkcję \( f_w(i)=\#_((w_1...w_i)-\#_)(w_1...w_i) \), czyli różnicę w liczbie wystąpień nawiasu otwierającego i zamykającego w prefiksie o długości i. Łatwo zauważyć, że:
- \( f_w(0)=0 \)
- \( f_w(n)=0 \)
- \( f_w(i)\ge0 \) dla \( i=0\dots n \)
W przypadku gdy istnieje j takie, że \( 0 < j < n \) i \( f_w(j)=0 \), słowa \( w_1...w_j \) oraz \( w_{j+1}...w_n \) są poprawnymi wyrażeniami nawiasowymi o długości mniejszej niż n. Zatem istnieją wyprowadzenia \( S\rightarrow
\cdots \rightarrow w_1...w_j \) oraz \( S\rightarrow \cdots \rightarrow w_{j+1}...w_n \) i da się z nich złożyć wyprowadzenie \( S \rightarrow SS \rightarrow \cdots \rightarrow w \).
W przypadku, gdy dla wszystkich j, \( f_w(j)>0 \) słowo \( w_2...w_{n-1} \) jest poprawnym wyrażeniem nawiasowym o długości n-2, zatem wyprowadzalnym z S. Stąd łatwo otrzymać wyprowadzenie słowa w \( S \rightarrow (S) \rightarrow \cdots \rightarrow w \).