src/HOL/UNITY/Comp.ML
changeset 6703 8103c1fb092d
parent 6646 3ea726909fff
child 6738 06189132c67b
equal deleted inserted replaced
6702:27a2e763daf8 6703:8103c1fb092d
     6 Composition
     6 Composition
     7 
     7 
     8 From Chandy and Sanders, "Reasoning About Program Composition"
     8 From Chandy and Sanders, "Reasoning About Program Composition"
     9 *)
     9 *)
    10 
    10 
    11 (*split_all_tac causes a big blow-up*)
       
    12 claset_ref() := claset() delSWrapper record_split_name;
       
    13 
       
    14 Delsimps [split_paired_All];
       
    15 
       
    16 
       
    17 (*** component ***)
    11 (*** component ***)
    18 
    12 
    19 Goalw [component_def] "SKIP component F";
    13 Goalw [component_def] "SKIP component F";
    20 by (force_tac (claset() addIs [Join_SKIP_left], simpset()) 1);
    14 by (force_tac (claset() addIs [Join_SKIP_left], simpset()) 1);
    21 qed "component_SKIP";
    15 qed "component_SKIP";
    52 qed "component_Init";
    46 qed "component_Init";
    53 
    47 
    54 Goal "[| F component G; G component F |] ==> F=G";
    48 Goal "[| F component G; G component F |] ==> F=G";
    55 by (blast_tac (claset() addSIs [program_equalityI, 
    49 by (blast_tac (claset() addSIs [program_equalityI, 
    56 				component_Init, component_Acts]) 1);
    50 				component_Init, component_Acts]) 1);
    57 qed "component_anti_sym";
    51 qed "component_antisym";
    58 
    52 
    59 Goalw [component_def]
    53 Goalw [component_def]
    60       "F component H = (EX G. F Join G = H & Disjoint F G)";
    54       "F component H = (EX G. F Join G = H & Disjoint F G)";
    61 by (blast_tac (claset() addSIs [Diff_Disjoint, Join_Diff2]) 1);
    55 by (blast_tac (claset() addSIs [Diff_Disjoint, Join_Diff2]) 1);
    62 qed "component_eq";
    56 qed "component_eq";