updated
authorChristian Urban <christian dot urban at kcl dot ac dot uk>
Mon, 09 May 2016 12:09:56 +0100
changeset 172 cdc0bdcfba3f
parent 171 91647a8d84a3
child 173 80fe81a28a52
updated
thys/Paper/Paper.thy
thys/Paper/document/root.bib
thys/Paper/document/root.tex
thys/ReStar.thy
thys/paper.pdf
--- a/thys/Paper/Paper.thy	Sun May 08 09:49:21 2016 +0100
+++ b/thys/Paper/Paper.thy	Mon May 09 12:09:56 2016 +0100
@@ -62,6 +62,29 @@
 definition 
   "match r s \<equiv> nullable (ders s r)"
 
+(*
+comments not implemented
+
+p9. "None is returned, indicating an error is raised" : there is no error
+
+p9. The condtion "not exists s3 s4..." appears often enough (in particular in
+the proof of Lemma 3) to warrant a definition.
+
+p9. "The POSIX value v" : at this point the existence of a POSIX value is yet
+to be shown
+
+p10. (proof Lemma 3) : separating the cases with description/itemize would greatly
+improve readability
+
+p11. Theorem 2(2) : Stressing the uniqueness is strange, given that it follows
+trivially from the fact that "lexer" is a function. Maybe state the existence of
+a unique POSIX value as corollary.
+
+p14. Proposition 3 is evidently false and Proposition 4 is a conjecture.
+I find it confusing that Propositions 1 and 2, which are proven facts, are also called propositions.
+
+*)
+
 (*>*)
 
 section {* Introduction *}
@@ -414,7 +437,7 @@
   can match the empty string. If yes, we call the function @{const mkeps}
   that produces a value @{term "v\<^sub>4"} for how @{term "r\<^sub>4"} can
   match the empty string (taking into account the POSIX constraints in case
-  there are several ways). This functions is defined by the clauses:
+  there are several ways). This function is defined by the clauses:
 
 \begin{figure}[t]
 \begin{center}
@@ -519,7 +542,7 @@
 
   \noindent Consider first the @{text "else"}-branch where the derivative is @{term
   "SEQ (der c r\<^sub>1) r\<^sub>2"}. The corresponding value must therefore
-  be the form @{term "Seq v\<^sub>1 v\<^sub>2"}, which matches the left-hand
+  be of the form @{term "Seq v\<^sub>1 v\<^sub>2"}, which matches the left-hand
   side in clause~(4) of @{term inj}. In the @{text "if"}-branch the derivative is an
   alternative, namely @{term "ALT (SEQ (der c r\<^sub>1) r\<^sub>2) (der c
   r\<^sub>2)"}. This means we either have to consider a @{text Left}- or
@@ -559,7 +582,7 @@
 
   \begin{proof}
   Both properties are by routine inductions: the first one can, for example,
-  be proved by an induction over the definition of @{term derivatives}; the second by
+  be proved by induction over the definition of @{term derivatives}; the second by
   an induction on @{term r}. There are no interesting cases.\qed
   \end{proof}
 
@@ -684,7 +707,7 @@
   preserves POSIX values.
 
   \begin{lemma}\label{Posix2}
-  @{thm[mode=IfThen] Posix2_roy_version}
+  @{thm[mode=IfThen] Posix_injval}
   \end{lemma}
 
   \begin{proof}
@@ -722,7 +745,7 @@
   \noindent We can use the induction hypothesis for @{text "r\<^sub>1"} to obtain
   @{term "(c # s\<^sub>1) \<in> r\<^sub>1 \<rightarrow> injval r\<^sub>1 c v\<^sub>1"}. Putting this all together allows us to infer
   @{term "((c # s\<^sub>1) @ s\<^sub>2) \<in> SEQ r\<^sub>1 r\<^sub>2 \<rightarrow> Seq (injval r\<^sub>1 c v\<^sub>1) v\<^sub>2"}. The case @{text "(c)"}
-  is similarly.
+  is similar.
 
   For @{text "(b)"} we know @{term "s \<in> der c r\<^sub>2 \<rightarrow> v\<^sub>1"} and 
   @{term "s\<^sub>1 @ s\<^sub>2 \<notin> L (SEQ (der c r\<^sub>1) r\<^sub>2)"}. From the former
@@ -760,8 +783,8 @@
   \end{proof}
 
   \noindent This concludes our correctness proof. Note that we have not
-  changed the algorithm of Sulzmann and Lu,\footnote{Any deviation we
-  introduced is harmless.} but introduced our own specification for what a
+  changed the algorithm of Sulzmann and Lu,\footnote{All deviations we
+  introduced are harmless.} but introduced our own specification for what a
   correct result---a POSIX value---should be. A strong point in favour of
   Sulzmann and Lu's algorithm is that it can be extended in various ways.
 
@@ -891,23 +914,23 @@
   \end{center}
 
   \noindent
-  In the second clause we first calculate the derivative @{text "r \\ c"}
+  In the second clause we first calculate the derivative @{term "der c r"}
   and then simplify the result. This gives us a simplified derivative
   @{text "r\<^sub>s"} and a rectification function @{text "f\<^sub>r"}. The lexer
   is then recursively called with the simplified derivative, but before
-  we inject the character @{term c} into value, we need to rectify
+  we inject the character @{term c} into the value, we need to rectify
   it (that is construct @{term "f\<^sub>r v"}). We can prove that
 
-  \begin{lemma}
+  \begin{theorem}
   @{thm slexer_correctness}
-  \end{lemma}
+  \end{theorem}
 
   \noindent
   holds but for lack of space refer the reader to our mechanisation for details.
 
 *}
 
-section {* The Correctness Argument by Sulzmmann and Lu\label{argu} *}
+section {* The Correctness Argument by Sulzmann and Lu\label{argu} *}
 
 text {*
 %  \newcommand{\greedy}{\succcurlyeq_{gr}}
--- a/thys/Paper/document/root.bib	Sun May 08 09:49:21 2016 +0100
+++ b/thys/Paper/document/root.bib	Mon May 09 12:09:56 2016 +0100
@@ -219,7 +219,7 @@
 @InProceedings{Coquand2012,
   author =       {T.~Coquand and V.~Siles},
   title =        {{A} {D}ecision {P}rocedure for {R}egular {E}xpression {E}quivalence in {T}ype {T}heory},
-  booktitle = {Proc.~of the 1st Conference on Certified Programs and Proofs (CPP)},
+  booktitle = {Proc.~of the 1st International Conference on Certified Programs and Proofs (CPP)},
   pages =     {119--134},
   year =      {2011},
   volume =    {7086},
--- a/thys/Paper/document/root.tex	Sun May 08 09:49:21 2016 +0100
+++ b/thys/Paper/document/root.tex	Mon May 09 12:09:56 2016 +0100
@@ -68,8 +68,7 @@
 algorithm. Our definitions and proof are much simpler than those by
 Sulzmann and Lu and can be easily formalised in Isabelle/HOL. In the
 second part we analyse the correctness argument by Sulzmann and Lu and
-explain why it seems hard to turn it into a proof rigorous enough to
-be accepted by a system such as Isabelle/HOL.\smallskip
+explain why the gaps in this argument cannot be filled easily.\smallskip
 
 {\bf Keywords:} POSIX matching, Derivatives of Regular Expressions,
 Isabelle/HOL
--- a/thys/ReStar.thy	Sun May 08 09:49:21 2016 +0100
+++ b/thys/ReStar.thy	Mon May 09 12:09:56 2016 +0100
@@ -170,8 +170,6 @@
 | Left val
 | Stars "val list"
 
-datatype_compat val
-
 
 section {* The string behind a value *}
 
@@ -215,9 +213,8 @@
 lemma Prf_flat_L:
   assumes "\<turnstile> v : r" shows "flat v \<in> L r"
 using assms
-apply(induct v r rule: Prf.induct)
-apply(auto simp add: Sequ_def)
-done
+by(induct v r rule: Prf.induct)
+  (auto simp add: Sequ_def)
 
 lemma Prf_Stars:
   assumes "\<forall>v \<in> set vs. \<turnstile> v : r"
@@ -457,8 +454,7 @@
 qed
 
 
-(* a proof that does not need proj *)
-lemma Posix2_roy_version:
+lemma Posix_injval:
   assumes "s \<in> (der c r) \<rightarrow> v"
   shows "(c # s) \<in> r \<rightarrow> (injval r c v)"
 using assms
@@ -636,7 +632,7 @@
 apply(drule_tac x="der a r" in meta_spec)
 apply(simp add: der_correctness Der_def)
 apply(rule iffI)
-apply(auto intro: Posix2_roy_version simp add: Posix1(1))
+apply(auto intro: Posix_injval simp add: Posix1(1))
 done 
 
 
Binary file thys/paper.pdf has changed