updated paper
authorChristian Urban <christian dot urban at kcl dot ac dot uk>
Sun, 27 Jan 2013 17:15:38 +0000
changeset 91 2068654bdf54
parent 90 d2f4b775cd15
child 92 b9d0dd18c81e
updated paper
Paper/Paper.thy
paper.pdf
thys/uncomputable.thy
--- a/Paper/Paper.thy	Sun Jan 27 15:46:32 2013 +0000
+++ b/Paper/Paper.thy	Sun Jan 27 17:15:38 2013 +0000
@@ -34,7 +34,7 @@
   tcopy ("copy") and 
   tape_of ("\<langle>_\<rangle>") and 
   tm_comp ("_ \<oplus> _") and 
-  DUMMY  ("\<^raw:\mbox{$\_$}>")
+  DUMMY  ("\<^raw:\mbox{$\_\!\_\,$}>")
 
 declare [[show_question_marks = false]]
 
@@ -315,7 +315,8 @@
 
   \noindent
   We slightly deviate
-  from the presentation in \cite{Boolos87} by using the @{term Nop} operation; however its use
+  from the presentation in \cite{Boolos87} and \cite{AspertiRicciotti12} 
+  by using the @{term Nop} operation; however its use
   will become important when we formalise halting computations and also universal Turing 
   machines.  Given a tape and an action, we can define the
   following tape updating function:
@@ -522,9 +523,7 @@
   halts, then in our setting the @{term steps}-evaluation does not
   actually halt, but rather transitions to the @{text 0}-state (the
   final state) and remains there performing @{text Nop}-actions until
-  @{text n} is reached. This is different from the setup in 
-  \cite{AspertiRicciotti12} where an option is returned once a final 
-  state is reached.
+  @{text n} is reached. 
   
   \begin{figure}[t]
   \begin{center}
@@ -668,11 +667,11 @@
   we need to prove correct is the @{term dither} program shown in \eqref{dither} 
   and the other program is @{term "tcopy"} defined as
 
-  \begin{center}
-  \begin{tabular}{@ {}l@ {\hspace{1mm}}c@ {\hspace{1mm}}l@ {}}
+  \begin{equation}
+  \mbox{\begin{tabular}{@ {}l@ {\hspace{1mm}}c@ {\hspace{1mm}}l@ {}}
   @{thm (lhs) tcopy_def} & @{text "\<equiv>"} & @{thm (rhs) tcopy_def}
-  \end{tabular}
-  \end{center}
+  \end{tabular}}\label{tcopy}
+  \end{equation}
 
   \noindent
   whose three components are given in Figure~\ref{copy}. To the prove
@@ -776,7 +775,7 @@
   \end{center}
 
   \noindent
-  We can prove the following formal statements
+  We can prove the following Hoare-statements:
  
   \begin{center}
   \begin{tabular}{l}
@@ -786,19 +785,37 @@
   \end{center}
 
   \noindent
-  {\it unfold} The first states that on a tape @{term "(Bk \<up> n,  [Oc, Oc])"}
-  halts in tree steps leaving the tape unchanged. In the other states
-  that @{term dither} started with tape @{term "(Bk \<up> n,  [Oc])"} loops.
-  
+  The first is by a simple calculation. The second is by induction on the
+  number of steps we can perform starting from the input tape.
 
+  The purpose of the @{term tcopy} program defined in \eqref{tcopy} is
+  to produce the standard tape @{term "(DUMMY, <[n, n::nat]>)"} when
+  started with @{term "(DUMMY, <[n::nat]>)"}, that is making a copy of
+  a value on the tape.  Reasoning about this program is substantially
+  harder than about @{term dither}. To ease the burden, we can prove
+  the following Hoare-rules for sequentially composed programs.
 
-  In the following we will consider the following Turing machine program
-  that makes a copies a value on the tape.
-
+  \begin{center}
+  \begin{tabular}{@ {}p{3cm}@ {\hspace{9mm}}p{3cm}@ {}}
+  @{thm[mode=Rule] 
+  Hoare_plus_halt[where ?P1.0="P\<^isub>1" and ?P2.0="P\<^isub>2" and ?Q1.0="Q\<^isub>1" and ?Q2.0="Q\<^isub>2" and ?A="p\<^isub>1" and B="p\<^isub>2"]}
+  &
+  @{thm[mode=Rule] 
+  Hoare_plus_unhalt[where ?P1.0="P\<^isub>1" and ?P2.0="P\<^isub>2" and ?Q1.0="Q\<^isub>1" and ?A="p\<^isub>1" and B="p\<^isub>2"]}
+  \end{tabular}
+  \end{center}
    
-
+  \noindent
+  The first corresponds to the usual Hoare-rule for composition of imperative
+  programs, where @{term "Q\<^isub>1 \<mapsto> P\<^isub>2"} means @{term "Q\<^isub>1"} implies @{term "P\<^isub>2"} for 
+  all tapes @{term "(l, r)"}. The second rule covers the case where rughly the 
+  first program terminates generating a tape for which the second program
+  loops. These are two cases we need in our proof for undecidability.
   
-  
+  The Hoare-rules above allow us to prove the correctness of @{term tcopy}
+  by considering the correctness of @{term "tcopy_begin"}, @{term "tcopy_loop"} 
+  and @{term "tcopy_end"} in isolation. We will show some details for the 
+  the program @{term "tcopy_begin"}. 
 
 
   assertion holds for all tapes
@@ -813,21 +830,10 @@
   measure for the copying TM, which we however omit.
 
   halting problem
+
+  Magnus: invariants -- Section 5.4.5 on page 75.
 *}
 
-text {*
-  \begin{center}
-  \begin{tabular}{@ {}p{3cm}p{3cm}@ {}}
-  @{thm[mode=Rule] 
-  Hoare_plus_halt[where ?P1.0="P\<^isub>1" and ?P2.0="P\<^isub>2" and ?Q1.0="Q\<^isub>1" and ?Q2.0="Q\<^isub>2" and ?A="p\<^isub>1" and B="p\<^isub>2"]}
-  &
-  @{thm[mode=Rule] 
-  Hoare_plus_unhalt[where ?P1.0="P\<^isub>1" and ?P2.0="P\<^isub>2" and ?Q1.0="Q\<^isub>1" and ?A="p\<^isub>1" and B="p\<^isub>2"]}
-  \end{tabular}
-  \end{center}
-
-
-*}
 
 section {* Abacus Machines *}
 
Binary file paper.pdf has changed
--- a/thys/uncomputable.thy	Sun Jan 27 15:46:32 2013 +0000
+++ b/thys/uncomputable.thy	Sun Jan 27 17:15:38 2013 +0000
@@ -49,7 +49,7 @@
                 (R, 2), (R, 2), (L, 5), (W0, 4),
                 (R, 0), (L, 5)]"
 
-definition 
+idefinition 
   tcopy :: "instr list"
 where
   "tcopy \<equiv> (tcopy_begin |+| tcopy_loop) |+| tcopy_end"
@@ -81,16 +81,13 @@
          if s = 4 then inv_begin4 n (l, r) 
          else False)"
 
-
-
 lemma [elim]: "\<lbrakk>0 < i; 0 < j\<rbrakk> \<Longrightarrow> 
   \<exists>ia>0. ia + j - Suc 0 = i + j \<and> Oc # Oc \<up> i = Oc \<up> ia"
 apply(rule_tac x = "Suc i" in exI, simp)
 done
 
 lemma inv_begin_step: 
-  "\<lbrakk>inv_begin x cf; x > 0\<rbrakk>
- \<Longrightarrow> inv_begin x (step cf (tcopy_begin, 0))"
+  "\<lbrakk>inv_begin x cf; x > 0\<rbrakk> \<Longrightarrow> inv_begin x (step cf (tcopy_begin, 0))"
 unfolding tcopy_begin_def
 apply(case_tac cf)
 apply(auto simp: inv_begin.simps step.simps tcopy_begin_def numeral split: if_splits)
@@ -139,7 +136,7 @@
 by(auto intro:wf_inv_image simp:init_LE_def lex_pair_def)
 
 lemma init_halt: 
-  "x > 0 \<Longrightarrow> \<exists> stp. is_final (steps (Suc 0, [], Oc\<up>x) (tcopy_begin, 0) stp)"
+  "x > 0 \<Longrightarrow> \<exists> stp. is_final (steps0 (Suc 0, [], Oc\<up>x) tcopy_begin stp)"
 proof(rule_tac LE = init_LE in halt_lemma)
   show "wf init_LE" by(simp add: wf_begin_le)
 next
@@ -173,13 +170,12 @@
 qed
     
 lemma init_correct: 
-  "x > 0 \<Longrightarrow> {inv_begin1 x} tcopy_begin {inv_begin0 x}"
+  "0 < x \<Longrightarrow> {inv_begin1 x} tcopy_begin {inv_begin0 x}"
 proof(rule_tac Hoare_haltI)
   fix l r
-  assume h: "0 < x"
-    "inv_begin1 x (l, r)"
-  hence "\<exists> stp. is_final (steps (Suc 0, [], Oc\<up>x) (tcopy_begin, 0) stp)"
-    by(erule_tac init_halt)    
+  assume h: "0 < x" "inv_begin1 x (l, r)"
+  hence "\<exists> stp. is_final (steps0 (Suc 0, [], Oc \<up> x) tcopy_begin stp)"
+    by (rule_tac init_halt)    
   then obtain stp where "is_final (steps (Suc 0, [], Oc\<up>x) (tcopy_begin, 0) stp)" ..
   moreover have "inv_begin x (steps (Suc 0, [], Oc\<up>x) (tcopy_begin, 0) stp)"
     apply(rule_tac inv_begin_steps)
@@ -1004,7 +1000,7 @@
 
 
 lemma dither_halts_aux: 
-  shows "steps0 (1, Bk \<up> m, [Oc, Oc]) dither 3 = (0, Bk \<up> m, [Oc, Oc])"
+  shows "steps0 (1, Bk \<up> m, [Oc, Oc]) dither 2 = (0, Bk \<up> m, [Oc, Oc])"
 unfolding dither_def
 by (simp add: steps.simps step.simps numeral)