X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=matita%2Fmatita%2Flib%2Fturing%2Fmulti_to_mono%2Fshift_trace.ma;h=1e5e36e9122050e5588c7c91f744dc1c2776daf5;hb=0af3592e3a85a4bb82c5c6df259cf9ab117ba0b1;hp=016648770cbe5ea61168bfe926ef38819348615c;hpb=31790e8f6fa051f710f41e4c17d67701874ba331;p=helm.git diff --git a/matita/matita/lib/turing/multi_to_mono/shift_trace.ma b/matita/matita/lib/turing/multi_to_mono/shift_trace.ma index 016648770..1e5e36e91 100644 --- a/matita/matita/lib/turing/multi_to_mono/shift_trace.ma +++ b/matita/matita/lib/turing/multi_to_mono/shift_trace.ma @@ -96,7 +96,7 @@ definition R_move_to_blank_L â λsig,n,i,t1,t2. (hd ? (ls1@b::ls2) (all_blanks â¦)) (tail ? (ls1@b::ls2)) rs j) ⧠(not_blank sig n i b = false) ⧠(hd (multi_sig sig n) (ls1@[b]) (all_blanks â¦) = a) ⧠(* not implied by the next fact *) - (âj.j â¤n â to_blank_i ?? j (ls1@b::ls2) = to_blank_i ?? j (a::ls)) ⧠+ (âj.j < n â to_blank_i ?? j (ls1@b::ls2) = to_blank_i ?? j (a::ls)) ⧠t2 = midtape ? ls2 b ((reverse ? ls1)@rs)). theorem sem_move_to_blank_L: âsig,n,i. @@ -250,39 +250,47 @@ definition is_sig â λA,sig.λc:sig_ext (TA A sig). [ inl _ â false | inr _ â true]]. -definition not_head â λA,sig,n.λc:multi_sig (TA A sig) n. +definition not_head â λA,sig,n.λc:multi_sig (TA A sig) (S n). ¬(is_head A sig (nth n ? (vec ⦠c) (blank ?))). +lemma not_head_all_blanks : âA,sig,n. + not_head A sig n (all_blanks ⦠(S n)) = true. +#A #sig #n whd in ⢠(??%?); >blank_all_blanks // +qed. + definition no_head_in â λA,sig,n,l. - âx. mem ? x (trace (TA A sig) n n l) â is_head ⦠x = false. + âx. mem ? x (trace (TA A sig) (S n) n l) â is_head ⦠x = false. (* lemma not_head_true: âA,sig,n,c. not_head A sig n c = true â is_head ⦠(nth n ? (vec ⦠c) (blank ?)) = false. *) +lemma hd_nil : âA,d. hd A [ ] d = d. +// qed. + definition mtiL â λA,sig,n,i. - move_to_blank_L (TA A sig) n i · - shift_i_L (TA A sig) n i · + move_to_blank_L (TA A sig) (S n) i · + shift_i_L (TA A sig) (S n) i · move_until ? L (not_head A sig n). definition Rmtil â λA,sig,n,i,t1,t2. âls,a,rs. - t1 = midtape (MTA A sig n) ls a rs â + t1 = midtape (MTA A sig (S n)) ls a rs â is_head A sig (nth n ? (vec ⦠a) (blank ?)) = true â - (âi.regular_trace (TA A sig) n a ls rs i) â + (âi.regular_trace (TA A sig) (S n) a ls rs i) â (* next: we cannot be on rightof on trace i *) (nth i ? (vec ⦠a) (blank ?) = (blank ?) â nth i ? (vec ⦠(hd ? rs (all_blanks â¦))) (blank ?) â (blank ?)) â no_head_in ⦠ls â no_head_in ⦠rs â (âls1,a1,rs1. - t2 = midtape (MTA A sig n) ls1 a1 rs1 ⧠+ t2 = midtape (MTA A sig (S n)) ls1 a1 rs1 ⧠(âi.regular_trace ⦠a1 ls1 rs1 i) ⧠- (âj. j ⤠n â j â i â to_blank_i ? n j (a1::ls1) = to_blank_i ? n j (a::ls)) ⧠- (âj. j ⤠n â j â i â to_blank_i ? n j rs1 = to_blank_i ? n j rs) ⧠- (to_blank_i ? n i ls1 = to_blank_i ? n i (a::ls)) ⧠- (to_blank_i ? n i (a1::rs1)) = to_blank_i ? n i rs). + (âj. j ⤠n â j â i â to_blank_i ? (S n) j (a1::ls1) = to_blank_i ? (S n) j (a::ls)) ⧠+ (âj. j ⤠n â j â i â to_blank_i ? (S n) j rs1 = to_blank_i ? (S n) j rs) ⧠+ (to_blank_i ? (S n) i ls1 = to_blank_i ? (S n) i (a::ls)) ⧠+ (to_blank_i ? (S n) i (a1::rs1)) = to_blank_i ? (S n) i rs). theorem sem_Rmtil: âA,sig,n,i. i < n â mtiL A sig n i ⨠Rmtil A sig n i. #A #sig #n #i #lt_in @@ -294,7 +302,7 @@ theorem sem_Rmtil: âA,sig,n,i. i < n â mtiL A sig n i ⨠Rmtil A sig n i. (* we start looking into Rmitl *) #ls #a #rs #Htin (* tin is a midtape *) #Hheada #Hreg #no_rightof #Hnohead_ls #Hnohead_rs -cut (regular_i ? n (a::ls) i) +cut (regular_i ? (S n) (a::ls) i) [cases (Hreg i) * // cases (true_or_false (nth i ? (vec ⦠a) (blank ?) == (blank ?))) #Htest [#_ @daemon (* absurd, since hd rs non e' blank *) @@ -329,8 +337,7 @@ lapply (Htout ⦠Ht2) -Htout -Ht2 * * #H3 @False_ind @(absurd (true=false)) [2://]