src/HOLCF/IOA/meta_theory/Automata.ML
changeset 4423 a129b817b58a
parent 4098 71e05eb27fb6
child 4473 803d1e302af1
equal deleted inserted replaced
4422:21238c9d363e 4423:a129b817b58a
    48 \               &                                  \                     
    48 \               &                                  \                     
    49 \               (if a:act B then                    \   
    49 \               (if a:act B then                    \   
    50 \                  (snd(s),a,snd(t)):trans_of(B)     \                
    50 \                  (snd(s),a,snd(t)):trans_of(B)     \                
    51 \                else snd(t) = snd(s))}";
    51 \                else snd(t) = snd(s))}";
    52 
    52 
    53 by(simp_tac (simpset() addsimps (par_def::ioa_projections)) 1);
    53 by (simp_tac (simpset() addsimps (par_def::ioa_projections)) 1);
    54 qed "trans_of_par";
    54 qed "trans_of_par";
    55 
    55 
    56 
    56 
    57 (* ----------------------------------------------------------------------------------- *)
    57 (* ----------------------------------------------------------------------------------- *)
    58 
    58 
   177 (* a: inp A *)
   177 (* a: inp A *)
   178 by (case_tac "a:act B" 1);
   178 by (case_tac "a:act B" 1);
   179 (* a:act B *)
   179 (* a:act B *)
   180 by (eres_inst_tac [("x","a")] allE 1);
   180 by (eres_inst_tac [("x","a")] allE 1);
   181 by (Asm_full_simp_tac 1);
   181 by (Asm_full_simp_tac 1);
   182 bd inpAAactB_is_inpBoroutB 1;
   182 by (dtac inpAAactB_is_inpBoroutB 1);
   183 ba 1;
   183 by (assume_tac 1);
   184 ba 1;
   184 by (assume_tac 1);
   185 by (eres_inst_tac [("x","a")] allE 1);
   185 by (eres_inst_tac [("x","a")] allE 1);
   186 by (Asm_full_simp_tac 1);
   186 by (Asm_full_simp_tac 1);
   187 by (eres_inst_tac [("x","aa")] allE 1);
   187 by (eres_inst_tac [("x","aa")] allE 1);
   188 by (eres_inst_tac [("x","b")] allE 1);
   188 by (eres_inst_tac [("x","b")] allE 1);
   189 be exE 1;
   189 by (etac exE 1);
   190 be exE 1;
   190 by (etac exE 1);
   191 by (res_inst_tac [("x","(s2,s2a)")] exI 1);
   191 by (res_inst_tac [("x","(s2,s2a)")] exI 1);
   192 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   192 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   193 (* a~: act B*)
   193 (* a~: act B*)
   194 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   194 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   195 by (eres_inst_tac [("x","a")] allE 1);
   195 by (eres_inst_tac [("x","a")] allE 1);
   196 by (Asm_full_simp_tac 1);
   196 by (Asm_full_simp_tac 1);
   197 by (eres_inst_tac [("x","aa")] allE 1);
   197 by (eres_inst_tac [("x","aa")] allE 1);
   198 be exE 1;
   198 by (etac exE 1);
   199 by (res_inst_tac [("x","(s2,b)")] exI 1);
   199 by (res_inst_tac [("x","(s2,b)")] exI 1);
   200 by (Asm_full_simp_tac 1);
   200 by (Asm_full_simp_tac 1);
   201 
   201 
   202 (* a:inp B *)
   202 (* a:inp B *)
   203 by (case_tac "a:act A" 1);
   203 by (case_tac "a:act A" 1);
   204 (* a:act A *)
   204 (* a:act A *)
   205 by (eres_inst_tac [("x","a")] allE 1);
   205 by (eres_inst_tac [("x","a")] allE 1);
   206 by (eres_inst_tac [("x","a")] allE 1);
   206 by (eres_inst_tac [("x","a")] allE 1);
   207 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   207 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   208 by (forw_inst_tac [("A2","A")] (compat_commute RS iffD1) 1);
   208 by (forw_inst_tac [("A2","A")] (compat_commute RS iffD1) 1);
   209 bd inpAAactB_is_inpBoroutB 1;
   209 by (dtac inpAAactB_is_inpBoroutB 1);
   210 back();
   210 back();
   211 ba 1;
   211 by (assume_tac 1);
   212 ba 1;
   212 by (assume_tac 1);
   213 by (Asm_full_simp_tac 1);
   213 by (Asm_full_simp_tac 1);
   214 by (rotate_tac ~1 1);
   214 by (rotate_tac ~1 1);
   215 by (Asm_full_simp_tac 1);
   215 by (Asm_full_simp_tac 1);
   216 by (eres_inst_tac [("x","aa")] allE 1);
   216 by (eres_inst_tac [("x","aa")] allE 1);
   217 by (eres_inst_tac [("x","b")] allE 1);
   217 by (eres_inst_tac [("x","b")] allE 1);
   218 be exE 1;
   218 by (etac exE 1);
   219 be exE 1;
   219 by (etac exE 1);
   220 by (res_inst_tac [("x","(s2,s2a)")] exI 1);
   220 by (res_inst_tac [("x","(s2,s2a)")] exI 1);
   221 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   221 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   222 (* a~: act B*)
   222 (* a~: act B*)
   223 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   223 by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
   224 by (eres_inst_tac [("x","a")] allE 1);
   224 by (eres_inst_tac [("x","a")] allE 1);
   225 by (Asm_full_simp_tac 1);
   225 by (Asm_full_simp_tac 1);
   226 by (eres_inst_tac [("x","a")] allE 1);
   226 by (eres_inst_tac [("x","a")] allE 1);
   227 by (Asm_full_simp_tac 1);
   227 by (Asm_full_simp_tac 1);
   228 by (eres_inst_tac [("x","b")] allE 1);
   228 by (eres_inst_tac [("x","b")] allE 1);
   229 be exE 1;
   229 by (etac exE 1);
   230 by (res_inst_tac [("x","(aa,s2)")] exI 1);
   230 by (res_inst_tac [("x","(aa,s2)")] exI 1);
   231 by (Asm_full_simp_tac 1);
   231 by (Asm_full_simp_tac 1);
   232 qed"input_enabled_par";
   232 qed"input_enabled_par";
   233 
   233 
   234 (* ---------------------------------------------------------------------------------- *)
   234 (* ---------------------------------------------------------------------------------- *)
   287 
   287 
   288 goal thy "act (restrict A acts) = act A";
   288 goal thy "act (restrict A acts) = act A";
   289 by (simp_tac (simpset() addsimps [actions_def,asig_internals_def,
   289 by (simp_tac (simpset() addsimps [actions_def,asig_internals_def,
   290         asig_outputs_def,asig_inputs_def,externals_def,asig_of_def,restrict_def,
   290         asig_outputs_def,asig_inputs_def,externals_def,asig_of_def,restrict_def,
   291         restrict_asig_def]) 1);
   291         restrict_asig_def]) 1);
   292 auto();
   292 by (Auto_tac());
   293 qed"acts_restrict";
   293 qed"acts_restrict";
   294 
   294 
   295 goal thy "starts_of(restrict ioa acts) = starts_of(ioa) &     \
   295 goal thy "starts_of(restrict ioa acts) = starts_of(ioa) &     \
   296 \         trans_of(restrict ioa acts) = trans_of(ioa) & \
   296 \         trans_of(restrict ioa acts) = trans_of(ioa) & \
   297 \         reachable (restrict ioa acts) s = reachable ioa s & \
   297 \         reachable (restrict ioa acts) s = reachable ioa s & \
   415 goalw thy [is_trans_of_def,restrict_def,restrict_asig_def] 
   415 goalw thy [is_trans_of_def,restrict_def,restrict_asig_def] 
   416 "!!A. is_trans_of A ==> is_trans_of (rename A f)";
   416 "!!A. is_trans_of A ==> is_trans_of (rename A f)";
   417 by (asm_full_simp_tac (simpset() addsimps [actions_def,trans_of_def,
   417 by (asm_full_simp_tac (simpset() addsimps [actions_def,trans_of_def,
   418     asig_internals_def,asig_outputs_def,asig_inputs_def,externals_def,
   418     asig_internals_def,asig_outputs_def,asig_inputs_def,externals_def,
   419    asig_of_def,rename_def,rename_set_def]) 1);
   419    asig_of_def,rename_def,rename_set_def]) 1);
   420 auto();
   420 by (Auto_tac());
   421 qed"is_trans_of_rename";
   421 qed"is_trans_of_rename";
   422 
   422 
   423 goal thy "!! A. [| is_asig_of A; is_asig_of B; compatible A B|]  \
   423 goal thy "!! A. [| is_asig_of A; is_asig_of B; compatible A B|]  \
   424 \         ==> is_asig_of (A||B)";
   424 \         ==> is_asig_of (A||B)";
   425 by (asm_full_simp_tac (simpset() addsimps [is_asig_of_def,asig_of_par,
   425 by (asm_full_simp_tac (simpset() addsimps [is_asig_of_def,asig_of_par,
   426        asig_comp_def,compatible_def,asig_internals_def,asig_outputs_def,
   426        asig_comp_def,compatible_def,asig_internals_def,asig_outputs_def,
   427      asig_inputs_def,actions_def,is_asig_def]) 1);
   427      asig_inputs_def,actions_def,is_asig_def]) 1);
   428 by (asm_full_simp_tac (simpset() addsimps [asig_of_def]) 1);
   428 by (asm_full_simp_tac (simpset() addsimps [asig_of_def]) 1);
   429 auto();
   429 by (Auto_tac());
   430 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   430 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   431 qed"is_asig_of_par";
   431 qed"is_asig_of_par";
   432 
   432 
   433 goalw thy [is_asig_of_def,is_asig_def,asig_of_def,restrict_def,restrict_asig_def,
   433 goalw thy [is_asig_of_def,is_asig_def,asig_of_def,restrict_def,restrict_asig_def,
   434            asig_internals_def,asig_outputs_def,asig_inputs_def,externals_def,o_def] 
   434            asig_internals_def,asig_outputs_def,asig_inputs_def,externals_def,o_def] 
   435 "!! A. is_asig_of A ==> is_asig_of (restrict A f)";
   435 "!! A. is_asig_of A ==> is_asig_of (restrict A f)";
   436 by (Asm_full_simp_tac 1);
   436 by (Asm_full_simp_tac 1);
   437 auto();
   437 by (Auto_tac());
   438 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   438 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   439 qed"is_asig_of_restrict";
   439 qed"is_asig_of_restrict";
   440 
   440 
   441 goal thy "!! A. is_asig_of A ==> is_asig_of (rename A f)";
   441 goal thy "!! A. is_asig_of A ==> is_asig_of (rename A f)";
   442 by (asm_full_simp_tac (simpset() addsimps [is_asig_of_def,
   442 by (asm_full_simp_tac (simpset() addsimps [is_asig_of_def,
   443      rename_def,rename_set_def,asig_internals_def,asig_outputs_def,
   443      rename_def,rename_set_def,asig_internals_def,asig_outputs_def,
   444      asig_inputs_def,actions_def,is_asig_def,asig_of_def]) 1);
   444      asig_inputs_def,actions_def,is_asig_def,asig_of_def]) 1);
   445 auto(); 
   445 by (Auto_tac()); 
   446 by (dres_inst_tac [("s","Some xb")] sym 1);
   446 by (dres_inst_tac [("s","Some xb")] sym 1);
   447 by (rotate_tac ~1 1);
   447 by (rotate_tac ~1 1);
   448 by (Asm_full_simp_tac 1);
   448 by (Asm_full_simp_tac 1);
   449 by (best_tac (set_cs addEs [equalityCE]) 1);
   449 by (best_tac (set_cs addEs [equalityCE]) 1);
   450 by (dres_inst_tac [("s","Some xb")] sym 1);
   450 by (dres_inst_tac [("s","Some xb")] sym 1);
   464 
   464 
   465 goalw thy [compatible_def]
   465 goalw thy [compatible_def]
   466 "!! A. [|compatible A B; compatible A C |]==> compatible A (B||C)";
   466 "!! A. [|compatible A B; compatible A C |]==> compatible A (B||C)";
   467 by (asm_full_simp_tac (simpset() addsimps [internals_of_par, 
   467 by (asm_full_simp_tac (simpset() addsimps [internals_of_par, 
   468    outputs_of_par,actions_of_par]) 1);
   468    outputs_of_par,actions_of_par]) 1);
   469 auto();
   469 by (Auto_tac());
   470 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   470 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   471 qed"compatible_par";
   471 qed"compatible_par";
   472 
   472 
   473 (* FIX: better derive by previous one and compat_commute *)
   473 (* FIX: better derive by previous one and compat_commute *)
   474 goalw thy [compatible_def]
   474 goalw thy [compatible_def]
   475 "!! A. [|compatible A C; compatible B C |]==> compatible (A||B) C";
   475 "!! A. [|compatible A C; compatible B C |]==> compatible (A||B) C";
   476 by (asm_full_simp_tac (simpset() addsimps [internals_of_par, 
   476 by (asm_full_simp_tac (simpset() addsimps [internals_of_par, 
   477    outputs_of_par,actions_of_par]) 1);
   477    outputs_of_par,actions_of_par]) 1);
   478 auto();
   478 by (Auto_tac());
   479 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   479 by (REPEAT (best_tac (set_cs addEs [equalityCE]) 1));
   480 qed"compatible_par2";
   480 qed"compatible_par2";
   481 
   481 
   482 goalw thy [compatible_def]
   482 goalw thy [compatible_def]
   483 "!! A. [| compatible A B; (ext B - S) Int ext A = {}|] \
   483 "!! A. [| compatible A B; (ext B - S) Int ext A = {}|] \