src/HOL/TLA/Action.thy
author paulson
Wed, 15 Jul 1998 10:15:13 +0200
changeset 5143 b94cd208f073
parent 3807 82a99b090d9d
child 6255 db63752140c7
permissions -rw-r--r--
Removal of leading "\!\!..." from most Goal commands

(* 
    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