src/HOL/TLA/Init.ML
author wenzelm
Sat, 21 Jan 2006 23:02:14 +0100
changeset 18728 6790126ab5f6
parent 17309 c43ed29bd197
permissions -rw-r--r--
simplified type attribute;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     1
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     2
(* $Id$ *)
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     3
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
     4
local
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     5
  fun prover s = prove_goal (the_context ()) s
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
     6
                    (K [force_tac (claset(), simpset() addsimps [Init_def]) 1])
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
     7
in
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
     8
  val const_simps = map (int_rewrite o prover)
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
     9
      [ "|- (Init #True) = #True",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    10
        "|- (Init #False) = #False"]
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    11
  val Init_simps = map (int_rewrite o prover)
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    12
      [ "|- (Init ~F) = (~ Init F)",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    13
        "|- (Init (P --> Q)) = (Init P --> Init Q)",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    14
        "|- (Init (P & Q)) = (Init P & Init Q)",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    15
        "|- (Init (P | Q)) = (Init P | Init Q)",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    16
        "|- (Init (P = Q)) = ((Init P) = (Init Q))",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    17
        "|- (Init (!x. F x)) = (!x. (Init F x))",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    18
        "|- (Init (? x. F x)) = (? x. (Init F x))",
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    19
        "|- (Init (?! x. F x)) = (?! x. (Init F x))"
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    20
      ]
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    21
end;
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    22
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    23
Addsimps const_simps;
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    24
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    25
Goal "|- (Init $P) = (Init P)";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    26
by (force_tac (claset(), simpset() addsimps [Init_def,fw_act_def,fw_stp_def]) 1);
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    27
qed "Init_stp_act";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    28
val Init_simps = (int_rewrite Init_stp_act)::Init_simps;
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    29
bind_thm("Init_stp_act_rev", symmetric(int_rewrite Init_stp_act));
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    30
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    31
Goal "|- (Init F) = F";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    32
by (force_tac (claset(), simpset() addsimps [Init_def,fw_temp_def]) 1);
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    33
qed "Init_temp";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    34
val Init_simps = (int_rewrite Init_temp)::Init_simps;
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    35
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    36
(* Trivial instances of the definitions that avoid introducing lambda expressions. *)
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    37
Goalw [Init_def,fw_stp_def] "(sigma |= Init P) = P (st1 sigma)";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    38
by (rtac refl 1);
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    39
qed "Init_stp";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    40
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    41
Goalw [Init_def,fw_act_def] "(sigma |= Init A) = A (st1 sigma, st2 sigma)";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    42
by (rtac refl 1);
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    43
qed "Init_act";
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    44
db63752140c7 updated (Stephan Merz);
wenzelm
parents:
diff changeset
    45
val Init_defs = [Init_stp, Init_act, int_use Init_temp];