Paper/Paper.thy
changeset 59 fc35eb54fdc9
parent 58 0d4d5bb321dc
child 60 fb08f41ca33d
--- a/Paper/Paper.thy	Wed Feb 02 13:54:07 2011 +0000
+++ b/Paper/Paper.thy	Wed Feb 02 15:43:22 2011 +0000
@@ -25,12 +25,29 @@
 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
+  wide range of textbooks about this subject. Many of which, 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.
+  formalising these theorems and by verifying formally the algorithms. 
+
+  There is however a problem: the typical approach to the subject of regular
+  languages is to introduce finite automata and define everything in terms of
+  automata.  For example, a regular language is nearly always defined as one
+  where there is a finite deterministic automata that recognises all the
+  strings of the language. One benefit of this approach is that it is easy
+  to prove on paper that regular languages are closed under complementation: 
+  one just has to exchange the accepting and non-accepting states in the corresponding 
+  automata into non-accepting.  The problem with automata is that they need
+  to be represented as graphs (nodes represent states and edges, transitions)
+  or as matrices (recording the transitions between states). Both representations
+  cannot be defined in terms of inductive datatypes, and a reasoning infrastructure
+  must be established manually. To our knowledge neither 
+  Isabelle nor HOL4 nor Coq have a readily usable reasoning library for graphs
+  and matrices. Moreover, the reasoning about graphs can be quite cumbersome.
+  Cosider for example the frequently used operation of combinding two automata
+  into a new compound automaton. While on paper, this can be done by just forming
+  the disjoint union of the nodes, this does not work in typed systems \dots
+