src/HOL/IMP/VC.ML
changeset 5183 89f162de39cf
parent 5117 7b5efef2ca74
child 5223 4cb05273f764
equal deleted inserted replaced
5182:69917bbbce45 5183:89f162de39cf
    11 AddIs hoare.intrs;
    11 AddIs hoare.intrs;
    12 
    12 
    13 val lemma = prove_goal HOL.thy "!s. P s --> P s" (K[Fast_tac 1]);
    13 val lemma = prove_goal HOL.thy "!s. P s --> P s" (K[Fast_tac 1]);
    14 
    14 
    15 Goal "!Q. (!s. vc c Q s) --> |- {awp c Q} astrip c {Q}";
    15 Goal "!Q. (!s. vc c Q s) --> |- {awp c Q} astrip c {Q}";
    16 by (acom.induct_tac "c" 1);
    16 by (induct_tac "c" 1);
    17     by (ALLGOALS Simp_tac);
    17     by (ALLGOALS Simp_tac);
    18     by (Fast_tac 1);
    18     by (Fast_tac 1);
    19    by (Fast_tac 1);
    19    by (Fast_tac 1);
    20   by (Fast_tac 1);
    20   by (Fast_tac 1);
    21  (* if *)
    21  (* if *)
    28  by (resolve_tac hoare.intrs 1);
    28  by (resolve_tac hoare.intrs 1);
    29    by (ALLGOALS(fast_tac HOL_cs));
    29    by (ALLGOALS(fast_tac HOL_cs));
    30 qed "vc_sound";
    30 qed "vc_sound";
    31 
    31 
    32 Goal "!P Q. (!s. P s --> Q s) --> (!s. awp c P s --> awp c Q s)";
    32 Goal "!P Q. (!s. P s --> Q s) --> (!s. awp c P s --> awp c Q s)";
    33 by (acom.induct_tac "c" 1);
    33 by (induct_tac "c" 1);
    34     by (ALLGOALS Asm_simp_tac);
    34     by (ALLGOALS Asm_simp_tac);
    35 by (EVERY1[rtac allI, rtac allI, rtac impI]);
    35 by (EVERY1[rtac allI, rtac allI, rtac impI]);
    36 by (EVERY1[etac allE, etac allE, etac mp]);
    36 by (EVERY1[etac allE, etac allE, etac mp]);
    37 by (EVERY1[etac allE, etac allE, etac mp, atac]);
    37 by (EVERY1[etac allE, etac allE, etac mp, atac]);
    38 qed_spec_mp "awp_mono";
    38 qed_spec_mp "awp_mono";
    39 
    39 
    40 Goal "!P Q. (!s. P s --> Q s) --> (!s. vc c P s --> vc c Q s)";
    40 Goal "!P Q. (!s. P s --> Q s) --> (!s. vc c P s --> vc c Q s)";
    41 by (acom.induct_tac "c" 1);
    41 by (induct_tac "c" 1);
    42     by (ALLGOALS Asm_simp_tac);
    42     by (ALLGOALS Asm_simp_tac);
    43 by (safe_tac HOL_cs);
    43 by (safe_tac HOL_cs);
    44 by (EVERY[etac allE 1,etac allE 1,etac impE 1,etac allE 2,etac mp 2,atac 2]);
    44 by (EVERY[etac allE 1,etac allE 1,etac impE 1,etac allE 2,etac mp 2,atac 2]);
    45 by (fast_tac (HOL_cs addEs [awp_mono]) 1);
    45 by (fast_tac (HOL_cs addEs [awp_mono]) 1);
    46 qed_spec_mp "vc_mono";
    46 qed_spec_mp "vc_mono";
    68 by (Asm_simp_tac 1);
    68 by (Asm_simp_tac 1);
    69 by (fast_tac (HOL_cs addSEs [awp_mono,vc_mono]) 1);
    69 by (fast_tac (HOL_cs addSEs [awp_mono,vc_mono]) 1);
    70 qed "vc_complete";
    70 qed "vc_complete";
    71 
    71 
    72 Goal "!Q. vcawp c Q = (vc c Q, awp c Q)";
    72 Goal "!Q. vcawp c Q = (vc c Q, awp c Q)";
    73 by (acom.induct_tac "c" 1);
    73 by (induct_tac "c" 1);
    74 by (ALLGOALS (asm_simp_tac (simpset() addsimps [Let_def])));
    74 by (ALLGOALS (asm_simp_tac (simpset() addsimps [Let_def])));
    75 qed "vcawp_vc_awp";
    75 qed "vcawp_vc_awp";