src/HOLCF/IMP/Denotational.ML
changeset 2841 c2508f4ab739
parent 2798 f84be65745b2
child 2846 53c76f9d95fd
equal deleted inserted replaced
2840:7e03e61612b0 2841:c2508f4ab739
     4     Copyright   1996 TUM
     4     Copyright   1996 TUM
     5 
     5 
     6 Equivalence of Denotational Semantics in HOLCF and Evaluation Semantics in HOL
     6 Equivalence of Denotational Semantics in HOLCF and Evaluation Semantics in HOL
     7 *)
     7 *)
     8 
     8 
     9 Addsimps [flift1_def];
     9 goalw thy [dlift_def] "dlift f`(Def x) = f`(Discr x)";
       
    10 by(Simp_tac 1);
       
    11 qed "dlift_Def";
       
    12 Addsimps [dlift_Def];
    10 
    13 
    11 val prems = goal Lift.thy "[| f`UU = UU; f`x = Def b |] ==> EX a. x = Def a";
    14 goalw thy [dlift_def] "cont(%f. dlift f)";
    12 by (cut_facts_tac prems 1);
    15 by(Simp_tac 1);
    13 by (res_inst_tac [("x","x")] Lift_cases 1);
    16 qed "cont_dlift";
    14  by (fast_tac (HOL_cs addSEs [DefE2]) 1);
    17 AddIffs [cont_dlift];
    15 by (fast_tac HOL_cs 1);
    18 
    16 qed "strict_Def";
    19 goalw thy [dlift_def] "dlift f`l = Def y --> (? x. l = Def x)";
       
    20 by(simp_tac (!simpset setloop (split_tac[expand_lift_case])) 1);
       
    21 qed_spec_mp "dlift_DefD";
    17 
    22 
    18 
    23 
    19 goal thy "D(WHILE b DO c) = D(IF b THEN c;WHILE b DO c ELSE SKIP)";
    24 goal thy "!!c. <c,s> -c-> t ==> D c`(Discr s) = (Def t)";
    20 by(Simp_tac 1);
       
    21 by(EVERY[stac fix_eq 1, Simp_tac 1, IF_UNSOLVED	no_tac]);
       
    22 qed "D_While_If";
       
    23 
       
    24 
       
    25 goal thy "D c`UU =UU";
       
    26 by (com.induct_tac "c" 1);
       
    27     by (ALLGOALS Asm_simp_tac);
       
    28 by (stac fix_eq 1);
       
    29 by (Asm_simp_tac 1);
       
    30 qed "D_strict";
       
    31 
       
    32 
       
    33 goal thy "!!c. <c,s> -c-> t ==> D c`(Def s) = (Def t)";
       
    34 be evalc.induct 1;
    25 be evalc.induct 1;
    35       by (ALLGOALS Asm_simp_tac);
    26       by (ALLGOALS Asm_simp_tac);
    36  by (ALLGOALS (rtac (fix_eq RS ssubst) THEN' Asm_full_simp_tac));
    27  by (ALLGOALS (rtac (fix_eq RS ssubst) THEN' Asm_full_simp_tac));
    37 qed_spec_mp "eval_implies_D";
    28 qed_spec_mp "eval_implies_D";
    38 
    29 
    39 goal thy "!s t. D c`(Def s) = (Def t) --> <c,s> -c-> t";
    30 goal thy "!s t. D c`(Discr s) = (Def t) --> <c,s> -c-> t";
    40 by (com.induct_tac "c" 1);
    31 by (com.induct_tac "c" 1);
    41     by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    32     by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    42    by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    33    by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    43   by (Simp_tac 1);
    34   by (Simp_tac 1);
    44   by (strip_tac 1);
    35   by (strip_tac 1);
    45   by (forward_tac [D_strict RS strict_Def] 1);
    36   by (forward_tac [dlift_DefD] 1);
    46   be exE 1;
    37   be exE 1;
    47   by (rotate_tac ~1 1);
    38   by (rotate_tac ~1 1);
    48   by (Asm_full_simp_tac 1);
    39   by (Asm_full_simp_tac 1);
    49   by (fast_tac (HOL_cs addSIs evalc.intrs) 1);
    40   by (fast_tac (HOL_cs addSIs evalc.intrs) 1);
    50  by (REPEAT (rtac allI 1));
    41  by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
    51  by (case_tac "bexp s" 1);
       
    52   by (fast_tac ((HOL_cs addSIs evalc.intrs) unsafe_addss !simpset) 1);
       
    53  by (fast_tac ((HOL_cs addIs evalc.intrs) unsafe_addss !simpset) 1);
    42  by (fast_tac ((HOL_cs addIs evalc.intrs) unsafe_addss !simpset) 1);
    54 by(res_inst_tac [("Q","D (WHILE bexp DO com)`UU = UU")] conjunct1 1);
       
    55 by (Simp_tac 1);
    43 by (Simp_tac 1);
    56 br fix_ind 1;
    44 br fix_ind 1;
    57   by(fast_tac (HOL_cs addSIs (adm_lemmas@[adm_flatdom,flat_lift])) 1);
    45   by(fast_tac (HOL_cs addSIs (adm_lemmas@[adm_flatdom,flat_lift])) 1);
    58  by (Simp_tac 1);
    46  by (Simp_tac 1);
    59 br conjI 1;
    47 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
    60  by (REPEAT (rtac allI 1));
    48 by (safe_tac HOL_cs);
    61  by (case_tac "bexp s" 1);
       
    62   (* case bexp s *)
    49   (* case bexp s *)
    63   by (Asm_simp_tac 1);
    50   by (forward_tac [dlift_DefD] 1);
    64   by (strip_tac 1);
       
    65   be conjE 1;
       
    66   bd strict_Def 1;
       
    67    ba 1;
       
    68   be exE 1;
    51   be exE 1;
    69   by (rotate_tac ~1 1);
    52   by (rotate_tac ~1 1);
    70   by (Asm_full_simp_tac 1);
    53   by (Asm_full_simp_tac 1);
    71   by (fast_tac (HOL_cs addIs evalc.intrs) 1);
    54   by (fast_tac (HOL_cs addIs evalc.intrs) 1);
    72  (* case ~bexp s *)
    55  (* case ~bexp s *)
    73  by (fast_tac ((HOL_cs addSIs evalc.intrs) unsafe_addss !simpset) 1);
    56  by (fast_tac ((HOL_cs addSIs evalc.intrs) unsafe_addss !simpset) 1);
    74 (* induction step for strictness *)
       
    75 by (Asm_full_simp_tac 1);
       
    76 qed_spec_mp "D_implies_eval";
    57 qed_spec_mp "D_implies_eval";
    77 
    58 
    78 
    59 
    79 goal thy "(D c`(Def s) = (Def t)) = (<c,s> -c-> t)";
    60 goal thy "(D c`(Discr s) = (Def t)) = (<c,s> -c-> t)";
    80 by (fast_tac (HOL_cs addSEs [D_implies_eval,eval_implies_D]) 1);
    61 by (fast_tac (HOL_cs addSEs [D_implies_eval,eval_implies_D]) 1);
    81 qed "D_is_eval";
    62 qed "D_is_eval";