src/HOL/TLA/Action.thy
changeset 3807 82a99b090d9d
child 6255 db63752140c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/TLA/Action.thy	Wed Oct 08 11:50:33 1997 +0200
@@ -0,0 +1,60 @@
+(* 
+    File:	 TLA/Action.thy
+    Author:      Stephan Merz
+    Copyright:   1997 University of Munich
+
+    Theory Name: Action
+    Logic Image: HOL
+
+Define the action level of TLA as an Isabelle theory.
+*)
+
+Action  =  Intensional + Stfun +
+
+types
+    state2      (* intention: pair of states *)
+    'a trfct = "('a, state2) term"
+    action   = "state2 form"
+
+arities
+    state2 :: world
+    
+consts
+  mkstate2      :: "[state,state] => state2"  ("([[_,_]])")
+
+  (* lift state variables to transition functions *)
+  before        :: "'a stfun => 'a trfct"            ("($_)"  [100] 99)
+  after         :: "'a stfun => 'a trfct"            ("(_$)"  [100] 99)
+  unchanged     :: "'a stfun => action"
+
+  (* Priming *)
+  prime         :: "'a trfct => 'a trfct"            ("(_`)" [90] 89)
+
+  SqAct         :: "[action, 'a stfun] => action"    ("([_]'_(_))" [0,60] 59)
+  AnAct         :: "[action, 'a stfun] => action"    ("(<_>'_(_))" [0,60] 59)
+  Enabled       :: "action => stpred"
+
+rules
+  (* The following says that state2 is generated by mkstate2 *)
+  state2_ext    "(!!s t. [[s,t]] |= (A::action)) ==> (st::state2) |= A"
+
+  unl_before    "($v) [[s,t]] == v s"
+  unl_after     "(v$) [[s,t]] == v t"
+
+  pr_con        "(#c)` == #c"
+  pr_before     "($v)` == v$"
+  (* no corresponding rule for "after"! *)
+  pr_lift       "(F[x])` == F[x`]"
+  pr_lift2      "(F[x,y])` == F[x`,y`]"
+  pr_lift3      "(F[x,y,z])` == F[x`,y`,z`]"
+  pr_all        "(RALL x. P(x))` == (RALL x. P(x)`)"
+  pr_ex         "(REX x. P(x))` == (REX x. P(x)`)"
+
+  unchanged_def "(unchanged v) [[s,t]] == (v t = v s)"
+  square_def    "[A]_v == A .| unchanged v"
+  angle_def     "<A>_v == A .& .~ unchanged v"
+
+  enabled_def   "(Enabled A) s  ==  EX u. A[[s,u]]"
+end
+
+