src/HOLCF/IOA/meta_theory/CompoScheds.ML
changeset 6161 bc2a76ce1ea3
parent 5976 44290b71a85f
child 7229 6773ba0c36d5
equal deleted inserted replaced
6160:32c0b8f57bb7 6161:bc2a76ce1ea3
    64 Goal "(mkex2 A B`nil`exA`exB) s t= nil";
    64 Goal "(mkex2 A B`nil`exA`exB) s t= nil";
    65 by (stac mkex2_unfold 1);
    65 by (stac mkex2_unfold 1);
    66 by (Simp_tac 1);
    66 by (Simp_tac 1);
    67 qed"mkex2_nil";
    67 qed"mkex2_nil";
    68 
    68 
    69 Goal "!!x.[| x:act A; x~:act B; HD`exA=Def a|] \
    69 Goal "[| x:act A; x~:act B; HD`exA=Def a|] \
    70 \   ==> (mkex2 A B`(x>>sch)`exA`exB) s t =   \
    70 \   ==> (mkex2 A B`(x>>sch)`exA`exB) s t =   \
    71 \       (x,snd a,t) >> (mkex2 A B`sch`(TL`exA)`exB) (snd a) t";
    71 \       (x,snd a,t) >> (mkex2 A B`sch`(TL`exA)`exB) (snd a) t";
    72 by (rtac trans 1);
    72 by (rtac trans 1);
    73 by (stac mkex2_unfold 1);
    73 by (stac mkex2_unfold 1);
    74 by (asm_full_simp_tac (simpset() addsimps [Cons_def,If_and_if]) 1);
    74 by (asm_full_simp_tac (simpset() addsimps [Cons_def,If_and_if]) 1);
    75 by (asm_full_simp_tac (simpset() addsimps [Cons_def]) 1);
    75 by (asm_full_simp_tac (simpset() addsimps [Cons_def]) 1);
    76 qed"mkex2_cons_1";
    76 qed"mkex2_cons_1";
    77 
    77 
    78 Goal "!!x.[| x~:act A; x:act B; HD`exB=Def b|] \
    78 Goal "[| x~:act A; x:act B; HD`exB=Def b|] \
    79 \   ==> (mkex2 A B`(x>>sch)`exA`exB) s t = \
    79 \   ==> (mkex2 A B`(x>>sch)`exA`exB) s t = \
    80 \       (x,s,snd b) >> (mkex2 A B`sch`exA`(TL`exB)) s (snd b)";
    80 \       (x,s,snd b) >> (mkex2 A B`sch`exA`(TL`exB)) s (snd b)";
    81 by (rtac trans 1);
    81 by (rtac trans 1);
    82 by (stac mkex2_unfold 1);
    82 by (stac mkex2_unfold 1);
    83 by (asm_full_simp_tac (simpset() addsimps [Cons_def,If_and_if]) 1);
    83 by (asm_full_simp_tac (simpset() addsimps [Cons_def,If_and_if]) 1);
    84 by (asm_full_simp_tac (simpset() addsimps [Cons_def]) 1);
    84 by (asm_full_simp_tac (simpset() addsimps [Cons_def]) 1);
    85 qed"mkex2_cons_2";
    85 qed"mkex2_cons_2";
    86 
    86 
    87 Goal "!!x.[| x:act A; x:act B; HD`exA=Def a;HD`exB=Def b|] \
    87 Goal "[| x:act A; x:act B; HD`exA=Def a;HD`exB=Def b|] \
    88 \   ==> (mkex2 A B`(x>>sch)`exA`exB) s t =  \
    88 \   ==> (mkex2 A B`(x>>sch)`exA`exB) s t =  \
    89 \        (x,snd a,snd b) >> \
    89 \        (x,snd a,snd b) >> \
    90 \           (mkex2 A B`sch`(TL`exA)`(TL`exB)) (snd a) (snd b)";
    90 \           (mkex2 A B`sch`(TL`exA)`(TL`exB)) (snd a) (snd b)";
    91 by (rtac trans 1);
    91 by (rtac trans 1);
    92 by (stac mkex2_unfold 1);
    92 by (stac mkex2_unfold 1);
   107 
   107 
   108 Goal "mkex A B nil (s,exA) (t,exB) = ((s,t),nil)";
   108 Goal "mkex A B nil (s,exA) (t,exB) = ((s,t),nil)";
   109 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   109 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   110 qed"mkex_nil";
   110 qed"mkex_nil";
   111 
   111 
   112 Goal "!!x.[| x:act A; x~:act B |] \
   112 Goal "[| x:act A; x~:act B |] \
   113 \   ==> mkex A B (x>>sch) (s,a>>exA) (t,exB)  =  \
   113 \   ==> mkex A B (x>>sch) (s,a>>exA) (t,exB)  =  \
   114 \       ((s,t), (x,snd a,t) >> snd (mkex A B sch (snd a,exA) (t,exB)))";
   114 \       ((s,t), (x,snd a,t) >> snd (mkex A B sch (snd a,exA) (t,exB)))";
   115 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   115 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   116 by (cut_inst_tac [("exA","a>>exA")] mkex2_cons_1 1);
   116 by (cut_inst_tac [("exA","a>>exA")] mkex2_cons_1 1);
   117 by Auto_tac;
   117 by Auto_tac;
   118 qed"mkex_cons_1";
   118 qed"mkex_cons_1";
   119 
   119 
   120 Goal "!!x.[| x~:act A; x:act B |] \
   120 Goal "[| x~:act A; x:act B |] \
   121 \   ==> mkex A B (x>>sch) (s,exA) (t,b>>exB) =  \ 
   121 \   ==> mkex A B (x>>sch) (s,exA) (t,b>>exB) =  \ 
   122 \       ((s,t), (x,s,snd b) >> snd (mkex A B sch (s,exA) (snd b,exB)))";
   122 \       ((s,t), (x,s,snd b) >> snd (mkex A B sch (s,exA) (snd b,exB)))";
   123 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   123 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   124 by (cut_inst_tac [("exB","b>>exB")] mkex2_cons_2 1);
   124 by (cut_inst_tac [("exB","b>>exB")] mkex2_cons_2 1);
   125 by Auto_tac;
   125 by Auto_tac;
   126 qed"mkex_cons_2";
   126 qed"mkex_cons_2";
   127 
   127 
   128 Goal "!!x.[| x:act A; x:act B |]  \
   128 Goal "[| x:act A; x:act B |]  \
   129 \   ==>  mkex A B (x>>sch) (s,a>>exA) (t,b>>exB) = \
   129 \   ==>  mkex A B (x>>sch) (s,a>>exA) (t,b>>exB) = \
   130 \        ((s,t), (x,snd a,snd b) >> snd (mkex A B sch (snd a,exA) (snd b,exB)))";
   130 \        ((s,t), (x,snd a,snd b) >> snd (mkex A B sch (snd a,exA) (snd b,exB)))";
   131 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   131 by (simp_tac (simpset() addsimps [mkex_def]) 1);
   132 by (cut_inst_tac [("exB","b>>exB"),("exA","a>>exA")] mkex2_cons_3 1);
   132 by (cut_inst_tac [("exB","b>>exB"),("exA","a>>exA")] mkex2_cons_3 1);
   133 by Auto_tac;
   133 by Auto_tac;
   275 by (mkex_induct_tac "sch" "exA" "exB");
   275 by (mkex_induct_tac "sch" "exA" "exB");
   276 
   276 
   277 qed"stutterA_mkex";
   277 qed"stutterA_mkex";
   278 
   278 
   279 
   279 
   280 Goal "!! sch.[|  \
   280 Goal "[|  \
   281 \ Forall (%x. x:act (A||B)) sch ; \
   281 \ Forall (%x. x:act (A||B)) sch ; \
   282 \ Filter (%a. a:act A)`sch << filter_act`(snd exA) ;\
   282 \ Filter (%a. a:act A)`sch << filter_act`(snd exA) ;\
   283 \ Filter (%a. a:act B)`sch << filter_act`(snd exB) |] \
   283 \ Filter (%a. a:act B)`sch << filter_act`(snd exB) |] \
   284 \ ==> stutter (asig_of A) (ProjA (mkex A B sch exA exB))";
   284 \ ==> stutter (asig_of A) (ProjA (mkex A B sch exA exB))";
   285 
   285 
   306 by (mkex_induct_tac "sch" "exA" "exB");
   306 by (mkex_induct_tac "sch" "exA" "exB");
   307 
   307 
   308 qed"stutterB_mkex";
   308 qed"stutterB_mkex";
   309 
   309 
   310 
   310 
   311 Goal "!! sch.[|  \
   311 Goal "[|  \
   312 \ Forall (%x. x:act (A||B)) sch ; \
   312 \ Forall (%x. x:act (A||B)) sch ; \
   313 \ Filter (%a. a:act A)`sch << filter_act`(snd exA) ;\
   313 \ Filter (%a. a:act A)`sch << filter_act`(snd exA) ;\
   314 \ Filter (%a. a:act B)`sch << filter_act`(snd exB) |] \
   314 \ Filter (%a. a:act B)`sch << filter_act`(snd exB) |] \
   315 \ ==> stutter (asig_of B) (ProjB (mkex A B sch exA exB))";
   315 \ ==> stutter (asig_of B) (ProjB (mkex A B sch exA exB))";
   316 
   316