# HG changeset patch # User urbanc # Date 1296654847 0 # Node ID 0d4d5bb321dcbc30df7c3244f73fc053799e38f1 # Parent 76ab7c09d5758bf0c00d98df973343195596305e a little bit in the introduction diff -r 76ab7c09d575 -r 0d4d5bb321dc IsaMakefile --- a/IsaMakefile Wed Feb 02 13:25:09 2011 +0000 +++ b/IsaMakefile Wed Feb 02 13:54:07 2011 +0000 @@ -51,6 +51,8 @@ itp: session3 rm -f Paper/generated/*.aux # otherwise latex will fall over cd Paper/generated ; $(ISABELLE_TOOL) latex -o pdf root.tex + cd Paper/generated ; bibtex root + cd Paper/generated ; $(ISABELLE_TOOL) latex -o pdf root.tex cd Paper/generated ; $(ISABELLE_TOOL) latex -o pdf root.tex cp Paper/generated/root.pdf paper.pdf 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}