src/HOL/TLA/Stfun.ML
author wenzelm
Thu, 21 Sep 2006 19:04:29 +0200
changeset 20665 7e54c7cc72a5
parent 17309 c43ed29bd197
permissions -rw-r--r--
member (op =); ThmDatabase.is_ml_reserved; tuned oracle name;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 12607
diff changeset
     1
(*
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 12607
diff changeset
     2
    File:        Stfun.ML
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 12607
diff changeset
     3
    ID:          $Id$
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
    Author:      Stephan Merz
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
     5
    Copyright:   1998 University of Munich
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     7
Lemmas and tactics for states and state functions.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     8
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
12607
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    10
Goalw [basevars_def] "!!vs. basevars vs ==> EX u. vs u = c";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    11
by (res_inst_tac [("b","c"),("f","vs")] rangeE 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    12
by Auto_tac;
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    13
qed "basevars";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    14
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    15
Goal "!!x y. basevars (x,y) ==> basevars x";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    16
by (simp_tac (simpset() addsimps [basevars_def]) 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    17
by (rtac equalityI 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    18
 by (rtac subset_UNIV 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    19
by (rtac subsetI 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    20
by (dres_inst_tac [("c", "(xa, arbitrary)")] basevars 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    21
by Auto_tac;
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    22
qed "base_pair1";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    23
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    24
Goal "!!x y. basevars (x,y) ==> basevars y";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    25
by (simp_tac (simpset() addsimps [basevars_def]) 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    26
by (rtac equalityI 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    27
 by (rtac subset_UNIV 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    28
by (rtac subsetI 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    29
by (dres_inst_tac [("c", "(arbitrary, xa)")] basevars 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    30
by Auto_tac;
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    31
qed "base_pair2";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    32
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    33
Goal "!!x y. basevars (x,y) ==> basevars x & basevars y";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    34
by (rtac conjI 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    35
by (etac base_pair1 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    36
by (etac base_pair2 1);
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    37
qed "base_pair";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    38
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    39
(* Since the unit type has just one value, any state function can be
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    40
   regarded as "base". The following axiom can sometimes be useful
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    41
   because it gives a trivial solution for "basevars" premises.
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    42
*)
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    43
Goalw [basevars_def] "basevars (v::unit stfun)";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    44
by Auto_tac;
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    45
qed "unit_base";
16b63730cfbb update by Stephan Merz;
wenzelm
parents: 6255
diff changeset
    46
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    47
(*  [| basevars v; !!x. v x = c ==> Q |] ==> Q  *)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    48
bind_thm("baseE", (standard (basevars RS exE)));
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    49
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    50
(* -------------------------------------------------------------------------------
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    51
   The following shows that there should not be duplicates in a "stvars" tuple:
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    52
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    53
Goal "!!v. basevars (v::bool stfun, v) ==> False";
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    54
by (etac baseE 1);
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 12607
diff changeset
    55
by (subgoal_tac "(LIFT (v,v)) x = (True, False)" 1);
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    56
by (atac 2);
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    57
by (Asm_full_simp_tac 1);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    58
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    59
------------------------------------------------------------------------------- *)