diff -r 76ab7c09d575 -r 0d4d5bb321dc Paper/Paper.thy --- a/Paper/Paper.thy Wed Feb 02 13:25:09 2011 +0000 +++ b/Paper/Paper.thy Wed Feb 02 13:54:07 2011 +0000 @@ -14,16 +14,28 @@ Seq (infixr "\" 100) and Star ("_\<^bsup>\\<^esup>") and pow ("_\<^bsup>_\<^esup>" [100, 100] 100) and - Suc ("_+1>" [100] 100) and + Suc ("_+1" [100] 100) and quotient ("_ \<^raw:\ensuremath{\!\sslash\!}> _" [90, 90] 90) and REL ("\") - (*>*) section {* Introduction *} text {* + Regular languages are an important and well-understood subject in Computer + Science with many beautiful theorems and many useful algorithms. There is a + wide range of textbooks about this subject. Many of these textbooks, such as + \cite{Kozen97}, are aimed at students and contain very detailed + ``pencil-and-paper'' proofs. It seems natural to exercise theorem provers by + formalising these theorems and by verifying formally the algorithms. There + is however a problem: the typical approach to regular languages is to start + with finite automata. + + + + + Therefore instead of defining a regular language as being one where there exists an automata that regognises all of its strings, we define @@ -43,22 +55,26 @@ section {* Preliminaries *} text {* - Strings in Isabelle/HOL are lists of characters. Therefore the - \emph{empty string} is represented by the empty list, written @{term "[]"}. \emph{Languages} are sets of - strings. The language containing all strings is abbreviated as @{term "UNIV::string set"} - and the notation for the quotient of a language @{text A} according to a relation @{term REL} is - @{term "A // REL"}. - - Set operations + Strings in Isabelle/HOL are lists of characters and the + \emph{empty string} is the empty list, written @{term "[]"}. \emph{Languages} are sets of + strings. The language containing all strings is written in Isabelle/HOL as @{term "UNIV::string set"}. + The notation for the quotient of a language @{text A} according to a relation @{term REL} is + @{term "A // REL"}. The concatenation of two languages is written @{term "A ;; B"}; a language + raised tow the power $n$ is written @{term "A \ n"}. Both concepts are defined as \begin{center} - @{thm Seq_def} + @{thm Seq_def[THEN eq_reflection, where A1="A" and B1="B"]} + \hspace{7mm} + @{thm pow.simps(1)[THEN eq_reflection, where A1="A"]} + \hspace{7mm} + @{thm pow.simps(2)[THEN eq_reflection, where A1="A" and n1="n"]} \end{center} \noindent - where @{text "@"} is the usual list-append operation. + where @{text "@"} is the usual list-append operation. The Kleene-star of a language @{text A} + is defined as the union over all powers, namely @{thm Star_def}. + - \noindent Regular expressions are defined as the following datatype \begin{center}