]> matita.cs.unibo.it Git - helm.git/commitdiff
init_match
authorAndrea Asperti <andrea.asperti@unibo.it>
Thu, 17 May 2012 16:34:03 +0000 (16:34 +0000)
committerAndrea Asperti <andrea.asperti@unibo.it>
Thu, 17 May 2012 16:34:03 +0000 (16:34 +0000)
matita/matita/lib/turing/universal/uni_step.ma

index 6ba1aa23681362492370c651d367fa82745535a2..5c48d9272c2c011b678cc9666b696dae15bf737b 100644 (file)
@@ -52,4 +52,80 @@ if is_true(current) (* current state is final *)
            (* /move_tape *)
       else sink;
         
-*)
\ No newline at end of file
+*)
+
+definition init_match ≝ 
+  seq ? (mark ?) 
+    (seq ? (adv_to_mark_r ? (λc:STape.is_grid (\fst c)))
+      (seq ? (move_r ?) 
+        (seq ? (mark ?)
+          (seq ? (move_l ?) 
+            (adv_to_mark_l ? (is_marked ?)))))).
+            
+definition R_init_match ≝ λt1,t2.
+  ∀ls,l,rs,c,d. no_grids (〈c,false〉::l) → no_marks l → 
+  t1 = midtape STape ls 〈c,false〉 (l@〈grid,false〉::〈d,false〉::rs) →
+  t2 = midtape STape ls 〈c,true〉 (l@〈grid,false〉::〈d,true〉::rs).
+  
+lemma sem_init_match : Realize ? init_match R_init_match.
+#intape 
+cases (sem_seq ????? (sem_mark ?)
+       (sem_seq ????? (sem_adv_to_mark_r ? (λc:STape.is_grid (\fst c)))
+        (sem_seq ????? (sem_move_r ?)
+         (sem_seq ????? (sem_mark ?)
+          (sem_seq ????? (sem_move_l ?)
+           (sem_adv_to_mark_l ? (is_marked ?)))))) intape)
+#k * #outc * #Hloop #HR 
+@(ex_intro ?? k) @(ex_intro ?? outc) % [@Hloop] -Hloop
+#ls #l #rs #c #d #Hnogrids #Hnomarks #Hintape
+cases HR -HR
+#ta * whd in ⊢ (%→?); #Hta lapply (Hta … Hintape) -Hta -Hintape #Hta
+* #tb * whd in ⊢ (%→?); #Htb cases (Htb … Hta) -Htb -Hta 
+  [* #Hgridc @False_ind @(absurd … Hgridc) @eqnot_to_noteq 
+   @(Hnogrids 〈c,false〉) @memb_hd ]
+* #Hgrdic #Htb lapply (Htb l 〈grid,false〉 (〈d,false〉::rs) (refl …) (refl …) ?) 
+  [#x #membl @Hnogrids @memb_cons @membl] -Htb #Htb
+* #tc * whd in ⊢ (%→?); #Htc lapply (Htc … Htb) -Htc -Htb #Htc
+* #td * whd in ⊢ (%→?); #Htd lapply (Htd … Htc) -Htd -Htc #Htd
+* #te * whd in ⊢ (%→?); #Hte lapply (Hte … Htd) -Hte -Htd #Hte
+whd in ⊢ (%→?); #Htf cases (Htf … Hte) -Htf -Hte 
+  [* whd in ⊢ ((??%?)→?); #Habs destruct (Habs)]
+* #_ #Htf lapply (Htf (reverse ? l) 〈c,true〉 ls (refl …) (refl …) ?) 
+  [#x #membl @Hnomarks @daemon] -Htf #Htf >Htf >reverse_reverse %
+qed.
+
+#Htb lapply (Htb ??? (refl …) (refl …))
+
+lapply (Htb l 〈grid,false〉 (〈d,false〉::rs) (refl … ))
+   
+* #tc * whd in ⊢ (%→?); #Htc 
+* #td * whd in ⊢ (%→%→?); #Htd #Houtc
+#l1 #c #l2 #b #l3 #c1 #rs #c0 #b0 #Hl1 #Hl2 #Hc #Hc0 #Hintape
+cases (Hta … Hintape) [ * #Hfalse normalize in Hfalse; destruct (Hfalse) ]
+-Hta * #_ #Hta lapply (Hta l1 〈c,true〉 ? (refl ??) ??) [@Hl1|%]
+-Hta #Hta lapply (Htb … Hta) -Htb #Htb cases (Htc … Htb) [ >Hc -Hc * #Hc destruct (Hc) ] 
+-Htc * #_ #Htc lapply (Htc … (refl ??) (refl ??) ?) [@Hl2]
+-Htc #Htc lapply (Htd … Htc) -Htd
+>reverse_append >reverse_cons 
+>reverse_cons in Hc0; cases (reverse … l2)
+[ normalize in ⊢ (%→?); #Hc0 destruct (Hc0)
+  #Htd >(Houtc … Htd) %
+| * #c2 #b2 #tl2 normalize in ⊢ (%→?);
+  #Hc0 #Htd >(Houtc … Htd)
+  whd in ⊢ (???%); destruct (Hc0)
+  >associative_append >associative_append %
+]
+qed.
+
+definition match_tuple_step ≝ 
+  ifTM ? (test_char ? (λc:STape.¬ is_grid (\fst c))) 
+   (single_finalTM ? 
+     (seq ? compare
+      (ifTM ? (test_char ? (λc:STape.is_grid (\fst c)))
+        (nop ?)
+        (seq ? mark_next_tuple 
+           (ifTM ? (test_char ? (λc:STape.is_grid (\fst c)))
+             (mark ?) (seq ? (move_l ?) init_current) tc_true)) tc_true)))
+    (nop ?) tc_true.
+          
\ No newline at end of file