src/ZF/UNITY/SubstAx.ML
changeset 12484 7ad150f5fc10
parent 12220 9dc4e8fec63d
child 12825 f1f7964ed05c
equal deleted inserted replaced
12483:0a01efff43e9 12484:7ad150f5fc10
    68 qed "LeadsTo_Union";
    68 qed "LeadsTo_Union";
    69 
    69 
    70 (*** Derived rules ***)
    70 (*** Derived rules ***)
    71 
    71 
    72 Goal "F : A leadsTo B ==> F : A LeadsTo B";
    72 Goal "F : A leadsTo B ==> F : A LeadsTo B";
    73 by (forward_tac [leadsToD2] 1);
    73 by (ftac leadsToD2 1);
    74 by (Clarify_tac 1);
    74 by (Clarify_tac 1);
    75 by (asm_simp_tac (simpset() addsimps [LeadsTo_eq]) 1);
    75 by (asm_simp_tac (simpset() addsimps [LeadsTo_eq]) 1);
    76 by (blast_tac (claset() addIs [leadsTo_weaken_L]) 1);
    76 by (blast_tac (claset() addIs [leadsTo_weaken_L]) 1);
    77 qed "leadsTo_imp_LeadsTo";
    77 qed "leadsTo_imp_LeadsTo";
    78 
    78 
   104 (*Lets us look at the starting state*)
   104 (*Lets us look at the starting state*)
   105 val [major, program] = Goal 
   105 val [major, program] = Goal 
   106 "[|(!!s. s:A ==> F:{s} LeadsTo B); F:program|]==>F:A LeadsTo B";
   106 "[|(!!s. s:A ==> F:{s} LeadsTo B); F:program|]==>F:A LeadsTo B";
   107 by (cut_facts_tac [program] 1);
   107 by (cut_facts_tac [program] 1);
   108 by (stac (UN_singleton RS sym) 1 THEN rtac LeadsTo_UN 1);
   108 by (stac (UN_singleton RS sym) 1 THEN rtac LeadsTo_UN 1);
   109 by (forward_tac [major] 1);
   109 by (ftac major 1);
   110 by Auto_tac;
   110 by Auto_tac;
   111 qed "single_LeadsTo_I";
   111 qed "single_LeadsTo_I";
   112 
   112 
   113 Goal "[| A <= B; F:program |] ==> F : A LeadsTo B";
   113 Goal "[| A <= B; F:program |] ==> F : A LeadsTo B";
   114 by (asm_simp_tac (simpset() addsimps [LeadsTo_def]) 1);
   114 by (asm_simp_tac (simpset() addsimps [LeadsTo_def]) 1);
   207 "[|(!!i. i:I ==> F: A(i) LeadsTo A'(i)); F:program |] \
   207 "[|(!!i. i:I ==> F: A(i) LeadsTo A'(i)); F:program |] \
   208 \     ==> F : (UN i:I. A(i)) LeadsTo (UN i:I. A'(i))";
   208 \     ==> F : (UN i:I. A(i)) LeadsTo (UN i:I. A'(i))";
   209 by (cut_facts_tac [minor] 1);
   209 by (cut_facts_tac [minor] 1);
   210 by (rtac LeadsTo_Union 1);
   210 by (rtac LeadsTo_Union 1);
   211 by (ALLGOALS(Clarify_tac));
   211 by (ALLGOALS(Clarify_tac));
   212 by (forward_tac [major] 1);
   212 by (ftac major 1);
   213 by (blast_tac (claset()  addIs [LeadsTo_weaken_R]) 1);
   213 by (blast_tac (claset()  addIs [LeadsTo_weaken_R]) 1);
   214 qed "LeadsTo_UN_UN";
   214 qed "LeadsTo_UN_UN";
   215 
   215 
   216 (*Binary union version*)
   216 (*Binary union version*)
   217 Goal "[| F:A LeadsTo A'; F:B LeadsTo B' |] ==> F:(A Un B) LeadsTo (A' Un B')";
   217 Goal "[| F:A LeadsTo A'; F:B LeadsTo B' |] ==> F:(A Un B) LeadsTo (A' Un B')";
   283 by (asm_simp_tac (simpset() addsimps PSP::Int_ac) 1);
   283 by (asm_simp_tac (simpset() addsimps PSP::Int_ac) 1);
   284 qed "PSP2";
   284 qed "PSP2";
   285 
   285 
   286 Goal
   286 Goal
   287 "[| F : A LeadsTo A'; F : B Unless B'|]==> F:(A Int B) LeadsTo ((A' Int B) Un B')";
   287 "[| F : A LeadsTo A'; F : B Unless B'|]==> F:(A Int B) LeadsTo ((A' Int B) Un B')";
   288 by (rewrite_goals_tac [Unless_def]);
   288 by (rewtac Unless_def);
   289 by (dtac PSP 1);
   289 by (dtac PSP 1);
   290 by (assume_tac 1);
   290 by (assume_tac 1);
   291 by (blast_tac (claset() addIs [LeadsTo_Diff, LeadsTo_weaken, subset_imp_LeadsTo]) 1);
   291 by (blast_tac (claset() addIs [LeadsTo_Diff, LeadsTo_weaken, subset_imp_LeadsTo]) 1);
   292 qed "PSP_Unless";
   292 qed "PSP_Unless";
   293 
   293