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