src/HOL/TLA/cladata.ML
changeset 3807 82a99b090d9d
child 4089 96fba19bcbe2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/TLA/cladata.ML	Wed Oct 08 11:50:33 1997 +0200
@@ -0,0 +1,56 @@
+(*  Title:      TLA/cladata.ML
+    Author:     Stephan Merz (mostly stolen from Isabelle/HOL)
+
+Setting up the classical reasoner for TLA.
+
+The classical prover for TLA uses a different hyp_subst_tac that substitutes 
+somewhat more liberally for state variables. Unfortunately, this requires
+either generating a new prover or redefining the basic proof tactics.
+We take the latter approach, because otherwise there would be a type conflict
+between standard HOL and TLA classical sets, and we would have to redefine
+even more things (e.g., blast_tac), and try to keep track of which rules 
+have been active in setting up a new default claset.
+
+*)
+
+
+(* Generate a different hyp_subst_tac
+   that substitutes for x(s) if s is a bound variable of "world" type. 
+   This is useful to solve equations that contain state variables.
+*)
+
+use "hypsubst.ML";           (* local version! *)
+
+structure ActHypsubst_Data =
+  struct
+  structure Simplifier = Simplifier
+  (*Take apart an equality judgement; otherwise raise Match!*)
+  fun dest_eq (Const("Trueprop",_) $ (Const("op =",_)  $ t $ u)) = (t,u);
+  val eq_reflection = eq_reflection
+  val imp_intr = impI
+  val rev_mp = rev_mp
+  val subst = subst
+  val sym = sym
+  end;
+
+structure ActHypsubst = ActHypsubstFun(ActHypsubst_Data);
+open ActHypsubst;
+
+
+(**
+  Define the basic classical set and clasimpset for the action part of TLA.
+  Add the new hyp_subst_tac to the wrapper (also for the default claset).
+**)
+
+val action_cs = (HOL_cs addSIs [actionI,intI] addSEs [exE_prop] addDs [actionD,intD] 
+                        addss !simpset) 
+                addSaltern action_hyp_subst_tac;
+val action_css = (action_cs, !simpset);
+
+
+AddSIs [actionI,intI];
+AddDs  [actionD,intD];
+Addss  (!simpset);
+
+
+