X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Fturing%2Fmulti_universal%2Fcopy.ma;h=1fef8d0b011eafc04357c848f253613d2d01b1df;hb=77bf99a9ac05a61573d621d576e269870668f076;hp=e4931202652279a6abe6745086cf2b99444d1508;hpb=d036ed7ebc9b6ecdefc773b0913980066cc778a2;p=helm.git diff --git a/matita/matita/lib/turing/multi_universal/copy.ma b/matita/matita/lib/turing/multi_universal/copy.ma index e49312026..1fef8d0b0 100644 --- a/matita/matita/lib/turing/multi_universal/copy.ma +++ b/matita/matita/lib/turing/multi_universal/copy.ma @@ -107,23 +107,6 @@ whd in ⊢ (??%?); >(eq_pair_fst_snd … (trans ????)) whd in ⊢ (??%?); @eq_f2 ] qed. -lemma change_vec_commute : ∀A,n,v,a,b,i,j. i ≠ j → - change_vec A n (change_vec A n v a i) b j - = change_vec A n (change_vec A n v b j) a i. -#A #n #v #a #b #i #j #Hij @(eq_vec … a) -#k #Hk cases (decidable_eq_nat k i) #Hki -[ >Hki >nth_change_vec // >(nth_change_vec_neq ??????? (sym_not_eq … Hij)) - >nth_change_vec // -| cases (decidable_eq_nat k j) #Hkj - [ >Hkj >nth_change_vec // >(nth_change_vec_neq ??????? Hij) >nth_change_vec // - | >(nth_change_vec_neq ??????? (sym_not_eq … Hki)) - >(nth_change_vec_neq ??????? (sym_not_eq … Hkj)) - >(nth_change_vec_neq ??????? (sym_not_eq … Hki)) - >(nth_change_vec_neq ??????? (sym_not_eq … Hkj)) // - ] -] -qed. - lemma copy_q0_q1 : ∀src,dst,sig,n,is_sep,v,t.src ≠ dst → src < S n → dst < S n → ∀s.current ? t = Some ? s → is_sep s = false → @@ -191,21 +174,12 @@ definition R_copy ≝ outt = int) ∧ (current ? (nth src ? int (niltape ?)) = None ? → outt = int). -lemma change_vec_change_vec : ∀A,n,v,a,b,i. - change_vec A n (change_vec A n v a i) b i = change_vec A n v b i. -#A #n #v #a #b #i @(eq_vec … a) #i0 #Hi0 -cases (decidable_eq_nat i i0) #Hii0 -[ >Hii0 >nth_change_vec // >nth_change_vec // -| >nth_change_vec_neq // >nth_change_vec_neq // - >nth_change_vec_neq // ] -qed. - lemma wsem_copy : ∀src,dst,sig,n,is_sep.src ≠ dst → src < S n → dst < S n → copy src dst sig n is_sep ⊫ R_copy src dst sig n is_sep. #src #dst #sig #n #is_sep #Hneq #Hsrc #Hdst #ta #k #outc #Hloop lapply (sem_while … (sem_copy_step src dst sig n is_sep Hneq Hsrc Hdst) … Hloop) // --Hloop * #tb * #Hstar @(star_ind_l ??????? Hstar) -Hstar -[ #tc whd in ⊢ (%→?); * +-Hloop * #tb * #Hstar @(star_ind_l ??????? Hstar) -Hstar -ta +[ whd in ⊢ (%→?); * [ * #x * * #Hx #Hsep #Houtc % [ % [ #ls #x0 #xs #rs #sep #Hsrctc #Hnosep >Hsrctc in Hx; normalize in ⊢ (%→?); #Hx0 destruct (Hx0) lapply (Hnosep ? (memb_hd …)) >Hsep @@ -218,15 +192,15 @@ lapply (sem_while … (sem_copy_step src dst sig n is_sep Hneq Hsrc Hdst) … Hl | #c #Hc #Hsepc @Houtc ] | #_ @Houtc ] ] -| #tc #td #te * #c0 * * #Hc0 #Hc0nosep #Hd #Hstar #IH #He +| #td #te * #c0 * * #Hc0 #Hc0nosep #Hd #Hstar #IH #He lapply (IH He) -IH * * #IH1 #IH2 #IH3 % [ % [ #ls #x #xs #rs #sep #Hsrc_tc #Hnosep #Hsep #ls0 #x0 #target #c #rs0 #Hlen #Hdst_tc >Hsrc_tc in Hc0; normalize in ⊢ (%→?); #Hc0 destruct (Hc0) - <(change_vec_same … tc src (niltape ?)) in Hd:(???(???(???%??)??)); - <(change_vec_same … tc dst (niltape ?)) in ⊢(???(???(???%??)??)→?); - >Hdst_tc >Hsrc_tc >change_vec_change_vec >change_vec_change_vec - >(change_vec_commute ?? tc ?? dst src) [|@(sym_not_eq … Hneq)] + <(change_vec_same … td src (niltape ?)) in Hd:(???(???(???%??)??)); + <(change_vec_same … td dst (niltape ?)) in ⊢(???(???(???%??)??)→?); + >Hdst_tc >Hsrc_tc >(change_vec_change_vec ?) >change_vec_change_vec + >(change_vec_commute ?? td ?? dst src) [|@(sym_not_eq … Hneq)] >change_vec_change_vec @(list_cases2 … Hlen) [ #Hxsnil #Htargetnil #Hd>(IH2 … Hsep) [ >Hd -Hd >Hxsnil >Htargetnil @(eq_vec … (niltape ?)) @@ -247,9 +221,9 @@ lapply (sem_while … (sem_copy_step src dst sig n is_sep Hneq Hsrc Hdst) … Hl >nth_change_vec // >nth_change_vec // >Hxsnil % ] |#hd1 #hd2 #tl1 #tl2 #Hxs #Htarget >Hxs >Htarget #Hd >(IH1 (c0::ls) hd1 tl1 rs sep ?? Hsep (c0::ls0) hd2 tl2 c rs0) - [ >Hd >(change_vec_commute … ?? tc ?? src dst) // + [ >Hd >(change_vec_commute … ?? td ?? src dst) // >change_vec_change_vec - >(change_vec_commute … ?? tc ?? dst src) [|@sym_not_eq //] + >(change_vec_commute … ?? td ?? dst src) [|@sym_not_eq //] >change_vec_change_vec >reverse_cons >associative_append >associative_append % | >Hd >nth_change_vec // >nth_change_vec_neq // >Hdst_tc >Htarget // @@ -283,4 +257,10 @@ cases (nth src (tape sig) t (niltape ?)) >change_vec_change_vec >change_vec_commute // #Ht1 >Ht1 @IH ] ] +qed. + +lemma sem_copy : ∀src,dst,sig,n,is_sep. + src ≠ dst → src < S n → dst < S n → + copy src dst sig n is_sep ⊨ R_copy src dst sig n is_sep. +#src #dst #sig #n #is_sep #Hneq #Hsrc #Hdst @WRealize_to_Realize /2/ qed. \ No newline at end of file