src/HOLCF/IMP/Denotational.ML
changeset 3457 a8ab7c64817c
parent 3325 4e4ee8a101be
child 4098 71e05eb27fb6
equal deleted inserted replaced
3456:fdb1768ebd3e 3457:a8ab7c64817c
     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 goalw thy [dlift_def] "dlift f`(Def x) = f`(Discr x)";
     9 goalw thy [dlift_def] "dlift f`(Def x) = f`(Discr x)";
    10 by(Simp_tac 1);
    10 by (Simp_tac 1);
    11 qed "dlift_Def";
    11 qed "dlift_Def";
    12 Addsimps [dlift_Def];
    12 Addsimps [dlift_Def];
    13 
    13 
    14 goalw thy [dlift_def] "cont(%f. dlift f)";
    14 goalw thy [dlift_def] "cont(%f. dlift f)";
    15 by(Simp_tac 1);
    15 by (Simp_tac 1);
    16 qed "cont_dlift";
    16 qed "cont_dlift";
    17 AddIffs [cont_dlift];
    17 AddIffs [cont_dlift];
    18 
    18 
    19 goalw thy [dlift_def]
    19 goalw thy [dlift_def]
    20  "(dlift f`l = Def y) = (? x. l = Def x & f`(Discr x) = Def y)";
    20  "(dlift f`l = Def y) = (? x. l = Def x & f`(Discr x) = Def y)";
    21 by(simp_tac (!simpset setloop (split_tac[expand_lift_case])) 1);
    21 by (simp_tac (!simpset setloop (split_tac[expand_lift_case])) 1);
    22 qed "dlift_is_Def";
    22 qed "dlift_is_Def";
    23 Addsimps [dlift_is_Def];
    23 Addsimps [dlift_is_Def];
    24 
    24 
    25 goal thy "!!c. <c,s> -c-> t ==> D c`(Discr s) = (Def t)";
    25 goal thy "!!c. <c,s> -c-> t ==> D c`(Discr s) = (Def t)";
    26 be evalc.induct 1;
    26 by (etac evalc.induct 1);
    27       by (ALLGOALS Asm_simp_tac);
    27       by (ALLGOALS Asm_simp_tac);
    28  by (ALLGOALS (rtac (fix_eq RS ssubst) THEN' Asm_full_simp_tac));
    28  by (ALLGOALS (stac fix_eq THEN' Asm_full_simp_tac));
    29 qed_spec_mp "eval_implies_D";
    29 qed_spec_mp "eval_implies_D";
    30 
    30 
    31 goal thy "!s t. D c`(Discr s) = (Def t) --> <c,s> -c-> t";
    31 goal thy "!s t. D c`(Discr s) = (Def t) --> <c,s> -c-> t";
    32 by (com.induct_tac "c" 1);
    32 by (com.induct_tac "c" 1);
    33     by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    33     by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    34    by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    34    by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    35   by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    35   by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    36  by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
    36  by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
    37  by (fast_tac ((HOL_cs addIs evalc.intrs) addss !simpset) 1);
    37  by (fast_tac ((HOL_cs addIs evalc.intrs) addss !simpset) 1);
    38 by (Simp_tac 1);
    38 by (Simp_tac 1);
    39 br fix_ind 1;
    39 by (rtac fix_ind 1);
    40   by(fast_tac (HOL_cs addSIs (adm_lemmas@[adm_chfindom,ax_flat_lift])) 1);
    40   by (fast_tac (HOL_cs addSIs (adm_lemmas@[adm_chfindom,ax_flat_lift])) 1);
    41  by (Simp_tac 1);
    41  by (Simp_tac 1);
    42 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
    42 by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
    43 by (safe_tac HOL_cs);
    43 by (safe_tac HOL_cs);
    44   by (fast_tac (HOL_cs addIs evalc.intrs) 1);
    44   by (fast_tac (HOL_cs addIs evalc.intrs) 1);
    45  by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);
    45  by (fast_tac ((HOL_cs addSIs evalc.intrs) addss !simpset) 1);