Search code examples
computer-sciencefsmregular-language

Why is {a^nb^n | n >= 0} not regular?


In a CS course I'm taking there is an example of a language that is not regular:

{a^nb^n | n >= 0}

I can understand that it is not regular since no Finite State Automaton/Machine can be written that validates and accepts this input since it lacks a memory component. (Please correct me if I'm wrong)

The wikipedia entry on Regular Language also lists this example, but does not provide a (mathematical) proof why it is not regular.

Can anyone enlighten me on this and provide proof for this, or point me too a good resource?


Solution

  • What you're looking for is Pumping lemma for regular languages.

    Here is an example with your exact problem:

    Examples:
    Let L = {ambm | m ≥ 1}.
    Then L is not regular.
    Proof: Let n be as in Pumping Lemma.
    Let w = anbn.
    Let w = xyz be as in Pumping Lemma.
    Thus, xy2z ∈ L, however, xy2z contains more a’s than b’s.