src/HOL/IMP/Transition.ML
author nipkow
Mon, 29 Apr 1996 15:48:27 +0200
changeset 1700 afd3b60660db
child 1701 a26fbeaaaabd
permissions -rw-r--r--
Natural and Transition semantics.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1700
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/IMP/Transition.ML
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow & Robert Sandner, TUM
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     4
    Copyright   1996 TUM
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     5
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     6
Equivalence of Natural and Transition semantics
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     7
*)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     8
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
     9
open Transition;
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    10
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    11
val relpow_cs = rel_cs addSEs [rel_pow_0_E];
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    12
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    13
val evalc1_elim_cases = map (evalc1.mk_cases com.simps)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    14
   ["(SKIP,s) -1-> t", "(x:=a,s) -1-> t", "(c1;c2, s) -1-> t",
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    15
    "(IF b THEN c1 ELSE c2, s) -1-> t", "(WHILE b DO c,s) -1-> t"];
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    16
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    17
val evalc1_cs = relpow_cs addIs (evalc.intrs@evalc1.intrs);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    18
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    19
goal Transition.thy "!!c. (c,s) -(0)-> (SKIP,u) ==> c = SKIP & s = u";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    20
by(fast_tac evalc1_cs 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    21
val hlemma1 = result();
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    22
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    23
goal Transition.thy "!!s. (SKIP,s) -(m)-> (SKIP,t) ==> s = t & m = 0";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    24
be rel_pow_E2 1;
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    25
by (Asm_full_simp_tac 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    26
by (eresolve_tac evalc1_elim_cases 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    27
val hlemma2 = result();
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    28
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    29
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    30
goal Transition.thy
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    31
  "!s t u c d. (c,s) -(n)-> (SKIP,t) --> (d,t) -*-> (SKIP,u) --> \
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    32
\              (c;d, s) -*-> (SKIP, u)";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    33
by(nat_ind_tac "n" 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    34
 (* case n = 0 *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    35
 by(fast_tac (evalc1_cs addIs [rtrancl_into_rtrancl2])1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    36
(* induction step *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    37
by (safe_tac (HOL_cs addSDs [rel_pow_Suc_D2]));
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    38
by(split_all_tac 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    39
by(fast_tac (evalc1_cs addIs [rtrancl_into_rtrancl2]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    40
qed_spec_mp "lemma1";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    41
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    42
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    43
goal Transition.thy "!c s s1. <c,s> -c-> s1 --> (c,s) -*-> (SKIP,s1)";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    44
br evalc.mutual_induct 1;
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    45
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    46
(* SKIP *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    47
br rtrancl_refl 1;
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    48
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    49
(* ASSIGN *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    50
by (fast_tac (evalc1_cs addSIs [r_into_rtrancl]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    51
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    52
(* SEMI *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    53
by (fast_tac (set_cs addDs [rtrancl_imp_UN_rel_pow] addIs [lemma1]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    54
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    55
(* IF *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    56
by (fast_tac (evalc1_cs addIs [rtrancl_into_rtrancl2]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    57
by (fast_tac (evalc1_cs addIs [rtrancl_into_rtrancl2]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    58
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    59
(* WHILE *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    60
by (fast_tac (evalc1_cs addSIs [r_into_rtrancl]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    61
by (fast_tac (evalc1_cs addDs [rtrancl_imp_UN_rel_pow]
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    62
                        addIs [rtrancl_into_rtrancl2,lemma1]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    63
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    64
qed_spec_mp "evalc_impl_evalc1";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    65
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    66
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    67
goal Transition.thy
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    68
  "!c d s u. (c;d,s) -(n)-> (SKIP,u) --> \
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    69
\            (? t m. (c,s) -*-> (SKIP,t) & (d,t) -(m)-> (SKIP,u) & m <= n)";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    70
by(nat_ind_tac "n" 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    71
 (* case n = 0 *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    72
 by (fast_tac (HOL_cs addSDs [hlemma1] addss !simpset) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    73
(* induction step *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    74
by (fast_tac (HOL_cs addSIs [rtrancl_refl,le_SucI,le_refl]
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    75
                     addSDs [rel_pow_Suc_D2]
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    76
                     addSEs (evalc1_elim_cases@
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    77
                             [rel_pow_imp_rtrancl,rtrancl_into_rtrancl2])) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    78
qed_spec_mp "lemma2";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    79
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    80
goal Transition.thy "!s t. (c,s) -*-> (SKIP,t) --> <c,s> -c-> t";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    81
by (com.induct_tac "c" 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    82
by (safe_tac (evalc1_cs addSDs [rtrancl_imp_UN_rel_pow]));
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    83
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    84
(* SKIP *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    85
by (fast_tac (evalc1_cs addSEs rel_pow_E2::evalc1_elim_cases) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    86
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    87
(* ASSIGN *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    88
by (fast_tac (evalc1_cs addSDs [hlemma2]
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    89
                        addSEs rel_pow_E2::evalc1_elim_cases
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    90
                        addss !simpset) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    91
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    92
(* SEMI *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    93
by (fast_tac (evalc1_cs addSDs [lemma2,rel_pow_imp_rtrancl]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    94
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    95
(* IF *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    96
be rel_pow_E2 1;
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    97
by (Asm_full_simp_tac 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    98
by (fast_tac (evalc1_cs addSDs[rel_pow_imp_rtrancl]addEs evalc1_elim_cases) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
    99
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   100
(* WHILE, induction on the length of the computation *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   101
by(rotate_tac 1 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   102
by (etac rev_mp 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   103
by (res_inst_tac [("x","s")] spec 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   104
by(res_inst_tac [("n","n")] less_induct 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   105
by (strip_tac 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   106
be rel_pow_E2 1;
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   107
 by (Asm_full_simp_tac 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   108
by (eresolve_tac evalc1_elim_cases 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   109
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   110
(* WhileFalse *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   111
 by (fast_tac (evalc1_cs addSDs [hlemma2]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   112
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   113
(* WhileTrue *)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   114
by(fast_tac(evalc1_cs addSDs[lemma2,le_imp_less_or_eq,less_Suc_eq RS iffD2])1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   115
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   116
qed_spec_mp "evalc1_impl_evalc";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   117
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   118
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   119
(**** proof of the equivalence of evalc and evalc1 ****)
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   120
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   121
goal Transition.thy "((c, s) -*-> (SKIP, t)) = (<c,s> -c-> t)";
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   122
by (fast_tac (HOL_cs addSEs [evalc1_impl_evalc,evalc_impl_evalc1]) 1);
afd3b60660db Natural and Transition semantics.
nipkow
parents:
diff changeset
   123
qed "evalc1_eq_evalc";