X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Fturing%2Finject.ma;h=ed0ecaea85db4965cd1467747af3a704c897125d;hb=5e72e41f4f86814e56d4b00959ccc56c71042a4c;hp=0e9ffe09050f189530c2755c29a91e7ad1684506;hpb=b31ab31a99065295b91003a0df95dec817cee5de;p=helm.git diff --git a/matita/matita/lib/turing/inject.ma b/matita/matita/lib/turing/inject.ma index 0e9ffe090..ed0ecaea8 100644 --- a/matita/matita/lib/turing/inject.ma +++ b/matita/matita/lib/turing/inject.ma @@ -10,8 +10,10 @@ V_____________________________________________________________*) include "turing/turing.ma". +(* include "turing/basic_machines.ma". *) (******************* inject a mono machine into a multi tape one **********************) + definition inject_trans ≝ λsig,states:FinSet.λn,i:nat. λtrans:states × (option sig) → states × (option sig × move). λp:states × (Vector (option sig) (S n)). @@ -30,14 +32,21 @@ lapply (trans sig M) #trans #x lapply (trans x) * * #s #a #m % [ @s | % [ @a | @m ] ] qed. -axiom current_chars_change_vec: ∀sig,n,v,a,i. i < S n → +lemma current_chars_change_vec: ∀sig,n,v,a,i. i < S n → current_chars sig ? (change_vec ? (S n) v a i) = change_vec ? (S n)(current_chars ?? v) (current ? a) i. +#sig #n #v #a #i #Hi @(eq_vec … (None ?)) #i0 #Hi0 +change with (vec_map ?????) in match (current_chars ???); +<(nth_vec_map … (niltape ?)) +cases (decidable_eq_nat i i0) #Hii0 +[ >Hii0 >nth_change_vec // >nth_change_vec // +| >nth_change_vec_neq // >nth_change_vec_neq // @nth_vec_map ] +qed. lemma inject_trans_def :∀sig:FinSet.∀n,i:nat.i < S n → ∀M,v,s,a,sn,an,mn. trans sig M 〈s,a〉 = 〈sn,an,mn〉 → - cic:/matita/turing/turing/trans.fix(0,2,9) sig n (inject_TM sig M n i) 〈s,change_vec ? (S n) v a i〉 = + cic:/matita/turing/turing/trans#fix:0:2:9 sig n (inject_TM sig M n i) 〈s,change_vec ? (S n) v a i〉 = 〈sn,change_vec ? (S n) (null_action ? n) 〈an,mn〉 i〉. #sig #n #i #Hlt #M #v #s #a #sn #an #mn #Htrans whd in ⊢ (??%?); >nth_change_vec // >Htrans // @@ -49,7 +58,7 @@ lemma inj_ter: ∀A,B,C.∀p:A×B×C. lemma inject_step : ∀sig,n,M,i,q,t,nq,nt,v. i < S n → step sig M (mk_config ?? q t) = mk_config ?? nq nt → - cic:/matita/turing/turing/step.def(12) sig n (inject_TM sig M n i) + cic:/matita/turing/turing/step#def:12 sig n (inject_TM sig M n i) (mk_mconfig ?? n q (change_vec ? (S n) v t i)) = mk_mconfig ?? n nq (change_vec ? (S n) v nt i). #sig #n #M #i #q #t #nq #nt #v #lein whd in ⊢ (??%?→?); @@ -69,7 +78,7 @@ cases (decidable_eq_nat … i i0) #Hii0 qed. lemma halt_inject: ∀sig,n,M,i,x. - cic:/matita/turing/turing/halt.fix(0,2,9) sig n (inject_TM sig M n i) x + cic:/matita/turing/turing/halt#fix:0:2:9 sig n (inject_TM sig M n i) x = halt sig M x. // qed. @@ -79,7 +88,7 @@ qed. lemma loop_inject: ∀sig,n,M,i,k,ins,int,outs,outt,vt.i < S n → loopM sig M k (mk_config ?? ins int) = Some ? (mk_config ?? outs outt) → - cic:/matita/turing/turing/loopM.def(13) sig n (inject_TM sig M n i) k (mk_mconfig ?? n ins (change_vec ?? vt int i)) + cic:/matita/turing/turing/loopM#def:13 sig n (inject_TM sig M n i) k (mk_mconfig ?? n ins (change_vec ?? vt int i)) =Some ? (mk_mconfig sig ? n outs (change_vec ?? vt outt i)). #sig #n #M #i #k elim k -k [#ins #int #outs #outt #vt #Hin normalize in ⊢ (%→?); #H destruct @@ -103,35 +112,11 @@ lemma loop_inject: ∀sig,n,M,i,k,ins,int,outs,outt,vt.i < S n → ] qed. -(* -lemma cstate_inject: ∀sig,n,M,i,x. *) - definition inject_R ≝ λsig.λR:relation (tape sig).λn,i:nat. λv1,v2: (Vector (tape sig) (S n)). R (nth i ? v1 (niltape ?)) (nth i ? v2 (niltape ?)) ∧ ∀j. i ≠ j → nth j ? v1 (niltape ?) = nth j ? v2 (niltape ?). -(* -lemma nth_make : ∀A,i,n,j,a,d. i < n → nth i ? (make_veci A a n j) d = a (j+i). -#A #i elim i - [#n #j #a #d #ltOn @(lt_O_n_elim … ltOn)