I read this in a book on computability:
(Kleene's Theorem) A language is regular if and only if it can be obtained from finite languages by applying the three operations union, concatenation, repetition a finite number of times.
I am struggling with "finite languages".
Consider this language: L = a*
It is not finite. It is the set {0, a, aa, aaa, ...}
which is clearly an infinite set (0
= the empty string).
So it is an infinite language, right? That is, "infinite set" means "infinite language", right?
Clearly, a*
is a regular language. And it is an infinite language. Thus, by Kleene's Theorem it cannot be a regular language. Contradiction.
I'm confused. I guess that I don't know what "finite language" means.
You are on the right track, it could be clearer. Kleen's theorem expresses the equivalence of three statements
A language is regular == A language can be expressed by a Regular Expression == A language can be expressed by a finite automata.
Your example is indeed a regular language. A finite language is what you would expect it to be, a language that can be listed in a finite amount of time.
When they are talking about repetition, they are talking about the Kleen Star operation, which is exactly what a*
represents, the set {empty, a, aa, aaa, aaaa, ...}
EDIT:
I have found this link: Kleenes Theorem which helps quite a bit. It by 'repetition' they mean Kleen Star, then the original statement makes sense. a*
is Kleen_Star(a)