A non-regular language, as the name implies, is a language that is not a regular language. That is, there is no finite state automata (deterministic or otherwise) that can recognise it.
To prove that some language is not regular, we need to show that there is no FSA that can recognise it. This is pretty difficult, so both methods of proving non-regularity require additional tools
Proving Non-Regularity Via Pumping Lemma
Proving Non-Regularity Via Fooling Sets
See an example of an infinite fooling set:
Thus, the language:
Extending With Closure Properties
Union
We can use the contrapositive of some closure properties:
If we have two languages and , and is regular, then if we know that is non-regular, then it must be that is non-regular.
Complement
A much simpler one is the complement of a regular language:
Taking the contrapositive yields:
Concatenation
Again, the contrapositive means that if is not regular, then one of or (or both) are non-regular.
If we have a regular language , and we somehow know concatenating it with another language to get is not regular, then the contrapositive allows us to deduce that must be non-regular.
Kleene Star
Another easy unary operator: Regular Language.md
The contrapositive yields: