67 the accepting and non-accepting states in the corresponding automaton to |
67 the accepting and non-accepting states in the corresponding automaton to |
68 obtain an automaton for the complement language. The problem, however, lies with |
68 obtain an automaton for the complement language. The problem, however, lies with |
69 formalising such reasoning in a HOL-based theorem prover, in our case |
69 formalising such reasoning in a HOL-based theorem prover, in our case |
70 Isabelle/HOL. Automata are built up from states and transitions that |
70 Isabelle/HOL. Automata are built up from states and transitions that |
71 need to be represented as graphs, matrices or functions, none |
71 need to be represented as graphs, matrices or functions, none |
72 of which can be defined as inductive datatype. |
72 of which can be defined as an inductive datatype. |
73 |
73 |
74 In case of graphs and matrices, this means we have to build our own |
74 In case of graphs and matrices, this means we have to build our own |
75 reasoning infrastructure for them, as neither Isabelle/HOL nor HOL4 nor |
75 reasoning infrastructure for them, as neither Isabelle/HOL nor HOL4 nor |
76 HOLlight support them with libraries. Even worse, reasoning about graphs and |
76 HOLlight support them with libraries. Even worse, reasoning about graphs and |
77 matrices can be a real hassle in HOL-based theorem provers. Consider for |
77 matrices can be a real hassle in HOL-based theorem provers. Consider for |
143 |
143 |
144 \noindent |
144 \noindent |
145 changes the type---the disjoint union is not a set, but a set of pairs. |
145 changes the type---the disjoint union is not a set, but a set of pairs. |
146 Using this definition for disjoint union means we do not have a single type for automata |
146 Using this definition for disjoint union means we do not have a single type for automata |
147 and hence will not be able to state certain properties about \emph{all} |
147 and hence will not be able to state certain properties about \emph{all} |
148 automata, since there is no type quantification available in HOL. An |
148 automata, since there is no type quantification available in HOL (unlike in Coq, for example). An |
149 alternative, which provides us with a single type for automata, is to give every |
149 alternative, which provides us with a single type for automata, is to give every |
150 state node an identity, for example a natural |
150 state node an identity, for example a natural |
151 number, and then be careful to rename these identities apart whenever |
151 number, and then be careful to rename these identities apart whenever |
152 connecting two automata. This results in clunky proofs |
152 connecting two automata. This results in clunky proofs |
153 establishing that properties are invariant under renaming. Similarly, |
153 establishing that properties are invariant under renaming. Similarly, |
375 |
375 |
376 text {* |
376 text {* |
377 The key definition in the Myhill-Nerode theorem is the |
377 The key definition in the Myhill-Nerode theorem is the |
378 \emph{Myhill-Nerode relation}, which states that w.r.t.~a language two |
378 \emph{Myhill-Nerode relation}, which states that w.r.t.~a language two |
379 strings are related, provided there is no distinguishing extension in this |
379 strings are related, provided there is no distinguishing extension in this |
380 language. This can be defined as tertiary relation. |
380 language. This can be defined as a tertiary relation. |
381 |
381 |
382 \begin{definition}[Myhill-Nerode Relation] Given a language @{text A}, two strings @{text x} and |
382 \begin{definition}[Myhill-Nerode Relation] Given a language @{text A}, two strings @{text x} and |
383 @{text y} are Myhill-Nerode related provided |
383 @{text y} are Myhill-Nerode related provided |
384 \begin{center} |
384 \begin{center} |
385 @{thm str_eq_def[simplified str_eq_rel_def Pair_Collect]} |
385 @{thm str_eq_def[simplified str_eq_rel_def Pair_Collect]} |
571 then we calculate the combined regular expressions for all @{text r} coming |
571 then we calculate the combined regular expressions for all @{text r} coming |
572 from the deleted @{text "(X, r)"}, and take the @{const STAR} of it; |
572 from the deleted @{text "(X, r)"}, and take the @{const STAR} of it; |
573 finally we append this regular expression to @{text rhs'}. It can be easily seen |
573 finally we append this regular expression to @{text rhs'}. It can be easily seen |
574 that this operation mimics Arden's lemma on the level of equations. To ensure |
574 that this operation mimics Arden's lemma on the level of equations. To ensure |
575 the non-emptiness condition of Arden's lemma we say that a right-hand side is |
575 the non-emptiness condition of Arden's lemma we say that a right-hand side is |
576 \emph{ardenable} provided |
576 @{text ardenable} provided |
577 |
577 |
578 \begin{center} |
578 \begin{center} |
579 @{thm ardenable_def} |
579 @{thm ardenable_def} |
580 \end{center} |
580 \end{center} |
581 |
581 |
625 \end{center} |
625 \end{center} |
626 |
626 |
627 \noindent |
627 \noindent |
628 Finally, we can define how an equational system should be solved. For this |
628 Finally, we can define how an equational system should be solved. For this |
629 we will need to iterate the process of eliminating equations until only one equation |
629 we will need to iterate the process of eliminating equations until only one equation |
630 will be left in the system. However, we not just want to have any equation |
630 will be left in the system. However, we do not just want to have any equation |
631 as being the last one, but the one involving the equivalence class for |
631 as being the last one, but the one involving the equivalence class for |
632 which we want to calculate the regular |
632 which we want to calculate the regular |
633 expression. Let us suppose this equivalence class is @{text X}. |
633 expression. Let us suppose this equivalence class is @{text X}. |
634 Since @{text X} is the one to be solved, in every iteration step we have to pick an |
634 Since @{text X} is the one to be solved, in every iteration step we have to pick an |
635 equation to be eliminated that is different from @{text X}. In this way |
635 equation to be eliminated that is different from @{text X}. In this way |
680 This principle states that given an invariant (which we will specify below) |
680 This principle states that given an invariant (which we will specify below) |
681 we can prove a property |
681 we can prove a property |
682 @{text "P"} involving @{const Solve}. For this we have to discharge the following |
682 @{text "P"} involving @{const Solve}. For this we have to discharge the following |
683 proof obligations: first the |
683 proof obligations: first the |
684 initial equational system satisfies the invariant; second the iteration |
684 initial equational system satisfies the invariant; second the iteration |
685 step @{text "Iter"} preserves the the invariant as long as the condition @{term Cond} holds; |
685 step @{text "Iter"} preserves the invariant as long as the condition @{term Cond} holds; |
686 third @{text "Iter"} decreases the termination order, and fourth that |
686 third @{text "Iter"} decreases the termination order, and fourth that |
687 once the condition does not hold anymore then the property @{text P} must hold. |
687 once the condition does not hold anymore then the property @{text P} must hold. |
688 |
688 |
689 The property @{term P} in our proof will state that @{term "Solve X (Init (UNIV // \<approx>A))"} |
689 The property @{term P} in our proof will state that @{term "Solve X (Init (UNIV // \<approx>A))"} |
690 returns with a single equation @{text "X = xrhs"} for some @{text "xrhs"}, and |
690 returns with a single equation @{text "X = xrhs"} for some @{text "xrhs"}, and |
707 \noindent |
707 \noindent |
708 The first two ensure that the equational system is always finite (number of equations |
708 The first two ensure that the equational system is always finite (number of equations |
709 and number of terms in each equation); the second makes sure the `meaning' of the |
709 and number of terms in each equation); the second makes sure the `meaning' of the |
710 equations is preserved under our transformations. The other properties are a bit more |
710 equations is preserved under our transformations. The other properties are a bit more |
711 technical, but are needed to get our proof through. Distinctness states that every |
711 technical, but are needed to get our proof through. Distinctness states that every |
712 equation in the system is distinct. Ardenable ensures that we can always |
712 equation in the system is distinct. @{text Ardenable} ensures that we can always |
713 apply the arden operation. |
713 apply the arden operation. |
714 The last property states that every @{text rhs} can only contain equivalence classes |
714 The last property states that every @{text rhs} can only contain equivalence classes |
715 for which there is an equation. Therefore @{text lhss} is just the set containing |
715 for which there is an equation. Therefore @{text lhss} is just the set containing |
716 the first components of an equational system, |
716 the first components of an equational system, |
717 while @{text "rhss"} collects all equivalence classes @{text X} in the terms of the |
717 while @{text "rhss"} collects all equivalence classes @{text X} in the terms of the |
727 \end{lemma} |
727 \end{lemma} |
728 |
728 |
729 \begin{proof} |
729 \begin{proof} |
730 Finiteness is given by the assumption and the way how we set up the |
730 Finiteness is given by the assumption and the way how we set up the |
731 initial equational system. Soundness is proved in Lem.~\ref{inv}. Distinctness |
731 initial equational system. Soundness is proved in Lem.~\ref{inv}. Distinctness |
732 follows from the fact that the equivalence classes are disjoint. The ardenable |
732 follows from the fact that the equivalence classes are disjoint. The @{text ardenable} |
733 property also follows from the setup of the initial equational system, as does |
733 property also follows from the setup of the initial equational system, as does |
734 validity.\qed |
734 validity.\qed |
735 \end{proof} |
735 \end{proof} |
736 |
736 |
737 \noindent |
737 \noindent |
754 |
754 |
755 \noindent |
755 \noindent |
756 Finiteness is straightforward, as @{const Subst} and @{const Arden} operations |
756 Finiteness is straightforward, as @{const Subst} and @{const Arden} operations |
757 keep the equational system finite. These operations also preserve soundness |
757 keep the equational system finite. These operations also preserve soundness |
758 and distinctness (we proved soundness for @{const Arden} in Lem.~\ref{ardenable}). |
758 and distinctness (we proved soundness for @{const Arden} in Lem.~\ref{ardenable}). |
759 The property ardenable is clearly preserved because the append-operation |
759 The property @{text ardenable} is clearly preserved because the append-operation |
760 cannot make a regular expression to match the empty string. Validity is |
760 cannot make a regular expression to match the empty string. Validity is |
761 given because @{const Arden} removes an equivalence class from @{text yrhs} |
761 given because @{const Arden} removes an equivalence class from @{text yrhs} |
762 and then @{const Subst_all} removes @{text Y} from the equational system. |
762 and then @{const Subst_all} removes @{text Y} from the equational system. |
763 Having proved the implication above, we can instantiate @{text "ES"} with @{text "ES - {(Y, yrhs)}"} |
763 Having proved the implication above, we can instantiate @{text "ES"} with @{text "ES - {(Y, yrhs)}"} |
764 which matches with our proof-obligation of @{const "Subst_all"}. Since |
764 which matches with our proof-obligation of @{const "Subst_all"}. Since |
830 this is equal to \mbox{@{text "\<Union>\<calL> ` (Arden X rhs)"}} using the properties of the |
830 this is equal to \mbox{@{text "\<Union>\<calL> ` (Arden X rhs)"}} using the properties of the |
831 invariant and Lem.~\ref{ardenable}. Using the validity property for the equation @{text "X = rhs"}, |
831 invariant and Lem.~\ref{ardenable}. Using the validity property for the equation @{text "X = rhs"}, |
832 we can infer that @{term "rhss rhs \<subseteq> {X}"} and because the arden operation |
832 we can infer that @{term "rhss rhs \<subseteq> {X}"} and because the arden operation |
833 removes that @{text X} from @{text rhs}, that @{term "rhss (Arden X rhs) = {}"}. |
833 removes that @{text X} from @{text rhs}, that @{term "rhss (Arden X rhs) = {}"}. |
834 This means the right-hand side @{term "Arden X rhs"} can only consist of terms of the form @{term "Lam r"}. |
834 This means the right-hand side @{term "Arden X rhs"} can only consist of terms of the form @{term "Lam r"}. |
835 So we can collect those (finitely many) regular expressions and have @{term "X = L (\<Uplus>rs)"}. |
835 So we can collect those (finitely many) regular expressions @{text rs} and have @{term "X = L (\<Uplus>rs)"}. |
836 With this we can conclude the proof.\qed |
836 With this we can conclude the proof.\qed |
837 \end{proof} |
837 \end{proof} |
838 |
838 |
839 \noindent |
839 \noindent |
840 Lem.~\ref{every_eqcl_has_reg} allows us to finally give a proof for the first direction |
840 Lem.~\ref{every_eqcl_has_reg} allows us to finally give a proof for the first direction |
891 \noindent |
891 \noindent |
892 hold, which shows that @{term "UNIV // \<approx>(L r)"} must be finite.\qed |
892 hold, which shows that @{term "UNIV // \<approx>(L r)"} must be finite.\qed |
893 \end{proof} |
893 \end{proof} |
894 |
894 |
895 \noindent |
895 \noindent |
896 Much more interesting, however, are the inductive cases. They seem hard to be solved |
896 Much more interesting, however, are the inductive cases. They seem hard to solve |
897 directly. The reader is invited to try. |
897 directly. The reader is invited to try. |
898 |
898 |
899 Our proof will rely on some |
899 Our proof will rely on some |
900 \emph{tagging-functions} defined over strings. Given the inductive hypothesis, it will |
900 \emph{tagging-functions} defined over strings. Given the inductive hypothesis, it will |
901 be easy to prove that the \emph{range} of these tagging-functions is finite |
901 be easy to prove that the \emph{range} of these tagging-functions is finite |
1272 text {* |
1272 text {* |
1273 In this paper we took the view that a regular language is one where there |
1273 In this paper we took the view that a regular language is one where there |
1274 exists a regular expression that matches all of its strings. Regular |
1274 exists a regular expression that matches all of its strings. Regular |
1275 expressions can conveniently be defined as a datatype in HOL-based theorem |
1275 expressions can conveniently be defined as a datatype in HOL-based theorem |
1276 provers. For us it was therefore interesting to find out how far we can push |
1276 provers. For us it was therefore interesting to find out how far we can push |
1277 this point of view. We have established both directions of the Myhill-Nerode |
1277 this point of view. We have established in Isabelle/HOL both directions |
1278 theorem. |
1278 of the Myhill-Nerode theorem. |
1279 % |
1279 % |
1280 \begin{theorem}[The Myhill-Nerode Theorem]\mbox{}\\ |
1280 \begin{theorem}[The Myhill-Nerode Theorem]\mbox{}\\ |
1281 A language @{text A} is regular if and only if @{thm (rhs) Myhill_Nerode}. |
1281 A language @{text A} is regular if and only if @{thm (rhs) Myhill_Nerode}. |
1282 \end{theorem} |
1282 \end{theorem} |
1283 % |
1283 % |
1350 lemma. |
1350 lemma. |
1351 |
1351 |
1352 We briefly considered using the method Brzozowski presented in the Appendix |
1352 We briefly considered using the method Brzozowski presented in the Appendix |
1353 of~\cite{Brzozowski64} in order to prove the second direction of the |
1353 of~\cite{Brzozowski64} in order to prove the second direction of the |
1354 Myhill-Nerode theorem. There he calculates the derivatives for regular |
1354 Myhill-Nerode theorem. There he calculates the derivatives for regular |
1355 expressions and shows that there can be only finitely many of them. We could |
1355 expressions and shows that there can be only finitely many of them (if regarded equal |
|
1356 modulo ACI). We could |
1356 have used as the tag of a string @{text s} the derivative of a regular expression |
1357 have used as the tag of a string @{text s} the derivative of a regular expression |
1357 generated with respect to @{text s}. Using the fact that two strings are |
1358 generated with respect to @{text s}. Using the fact that two strings are |
1358 Myhill-Nerode related whenever their derivative is the same, together with |
1359 Myhill-Nerode related whenever their derivative is the same, together with |
1359 the fact that there are only finitely many derivatives for a regular |
1360 the fact that there are only finitely many derivatives for a regular |
1360 expression would give us a similar argument as ours. However it seems not so easy to |
1361 expression would give us a similar argument as ours. However it seems not so easy to |