X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Fturing%2Fmulti_universal%2Funistep_aux.ma;h=7a8062ee34c198ae2726f16b54b16cdec9ff2e58;hb=f4047107dfd976f173151174269f356b1f431ab7;hp=43f99d64441ef461825fed34bb9e588527e9e45e;hpb=61a782396156141eae5b0e07eb2b4b4e15fb4130;p=helm.git diff --git a/matita/matita/lib/turing/multi_universal/unistep_aux.ma b/matita/matita/lib/turing/multi_universal/unistep_aux.ma index 43f99d644..7a8062ee3 100644 --- a/matita/matita/lib/turing/multi_universal/unistep_aux.ma +++ b/matita/matita/lib/turing/multi_universal/unistep_aux.ma @@ -13,6 +13,7 @@ include "turing/multi_universal/moves_2.ma". include "turing/multi_universal/match.ma". include "turing/multi_universal/copy.ma". include "turing/multi_universal/alphabet.ma". +include "turing/multi_universal/tuples.ma". (* @@ -267,7 +268,11 @@ qed. (* macchina che muove il nastro obj a destra o sinistra a seconda del valore del current di prg, che codifica la direzione in cui ci muoviamo *) - + +definition char_to_move ≝ λc.match c with + [ bit b ⇒ if b then R else L + | _ ⇒ N]. + definition tape_move_obj : mTM FSUnialpha 2 ≝ ifTM ?? (inject_TM ? (test_char ? (λc:FSUnialpha.c == bit false)) 2 prg) @@ -279,6 +284,63 @@ definition tape_move_obj : mTM FSUnialpha 2 ≝ tc_true) tc_true. +definition restart_tape ≝ λi. + inject_TM ? (move_to_end FSUnialpha L) 2 i · + mmove i FSUnialpha 2 R. + definition unistep ≝ - obj_to_cfg · match_m cfg prg FSUnialpha 2 · copy prg cfg FSUnialpha 2 · - cfg_to_obj · tape_move_obj. \ No newline at end of file + obj_to_cfg · match_m cfg prg FSUnialpha 2 · + restart_tape cfg · copy prg cfg FSUnialpha 2 · + cfg_to_obj · tape_move_obj · restart_tape prg. + +(* +definition legal_tape ≝ λn,l,h,t. + ∃state,char,table. + nth cfg ? t1 (niltape ?) = midtape ? [ ] bar (state@[char]) → + is_config n (bar::state@[char]) → + nth prg ? t1 (niltape ?) = midtape ? [ ] bar table → + bar::table = table_TM n l h → *) + +definition list_of_tape ≝ λsig,t. + left sig t@option_cons ? (current ? t) (right ? t). + +definition low_char' ≝ λc. + match c with + [ None ⇒ null + | Some b ⇒ if (is_bit b) then b else null + ]. + +definition R_unistep ≝ λn,l,h.λt1,t2: Vector ? 3. + ∀state,oldc,table. + (* cfg *) + nth cfg ? t1 (niltape ?) = midtape ? [ ] bar (state@[oldc]) → + is_config n (bar::state@[oldc]) → + (* prg *) + nth prg ? t1 (niltape ?) = midtape ? [ ] bar table → + bar::table = table_TM n l h → + (* obj *) + only_bits (list_of_tape ? (nth obj ? t1 (niltape ?))) → + let char ≝ low_char' (current ? (nth obj ? t1 (niltape ?))) in + let conf ≝ (bar::state@[char]) in + (∃ll,lr.bar::table = ll@conf@lr) → + ∃nstate,nchar,m,t. tuple_encoding n h t = (conf@nstate@[nchar;m]) ∧ + mem ? t l ∧ + t2 = + change_vec ?? + (change_vec ?? t1 (midtape ? [ ] bar (nstate@[nchar])) cfg) + (tape_move_mono ? (nth obj ? t1 (niltape ?)) 〈Some ? nchar,char_to_move m〉) obj. + +definition tape_map ≝ λA,B:FinSet.λf:A→B.λt. + mk_tape B (map ?? f (left ? t)) + (option_map ?? f (current ? t)) + (map ?? f (right ? t)). + +definition low ≝ λM:normalTM.λc:nconfig (no_states M).Vector_of_list ? + [tape_map ?? bit (ctape ?? c); + midtape ? [ ] bar (bits_of_state ? (nhalt M) (cstate ?? c)); + ?]. + + + + + . \ No newline at end of file