Closure properties of various classes of languages The union of any two regular languages is a regular language. The intersection of any two regular languages is a regular language. The concatenation of any two regular languages is a regular language. The complement of any regular language is a regular language. The Kleene closure of any regular language is a regular language. The union of any two context-free languages is a context-free language. The intersection of two context-free languages might not be a context-free language. The concatenation of any two context-free languages is a context-free language. The complement of a context-free language might not be a context-free language. The Kleene closure of any context-free language is a context-free language. The intersection of any regular language and any context free language is context-free. Any context-free language over the unary alphabet is regular. The union of any two polynomial time languages is a polynomial time language. The intersection of any two polynomial time languages is a polynomial time language. The concatenation of any two polynomial time languages is a polynomial time language. The complement of any polynomial time languages is a polynomial time language. Is the Kleene closure of a polynomial time language always a polynomial time language? The union of any two NP-time languages is an NP-time language. The intersection of any two NP-time languages is an NP-time language. The concatenation of any two NP-time languages is an NP-time language. The complement of an NP-time languages might not be an NP-time language. The Kleene closure of any NP-time language is an NP-time language. Is the Kleene closure of an NP-time language always an NP-time language? What about P-space (polynomial space) languages? What about recursive (i.e., decidable) languages? What about recursively enumerable languages?