src/HOL/Modelcheck/EindhovenSyn.ML
changeset 6466 2eba94dc5951
child 7295 fe09a0c5cebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Modelcheck/EindhovenSyn.ML	Thu Apr 22 10:56:37 1999 +0200
@@ -0,0 +1,47 @@
+(*  Title:      HOL/Modelcheck/EindhovenSyn.ML
+    ID:         $Id$
+    Author:     Olaf Mueller, Jan Philipps, Robert Sandner
+    Copyright   1997  TU Muenchen
+*)
+
+
+
+
+
+
+
+
+fun mc_eindhoven_tac i state =
+let val sign = #sign (rep_thm state)
+in 
+case drop(i-1,prems_of state) of
+   [] => Seq.empty |
+   subgoal::_ => 
+	let val concl = Logic.strip_imp_concl subgoal;
+	    val OraAss = invoke_oracle EindhovenSyn.thy "eindhoven_mc" (sign,EindhovenOracleExn concl);
+	in
+	((cut_facts_tac [OraAss] i) THEN (atac i)) state
+        end
+end;
+
+
+Goalw [split_def] "(f::'a*'b=>'c) = (%(x, y). f (x, y))";
+  by (rtac ext 1);
+  by (stac (surjective_pairing RS sym) 1);
+  by (rtac refl 1);
+qed "pair_eta_expand";
+
+local
+  val lhss = [read_cterm (sign_of thy) ("f::'a*'b=>'c", TVar (("'a", 0), []))];
+  val rew = mk_meta_eq pair_eta_expand;
+
+  fun proc _ _ (Abs _) = Some rew
+    | proc _ _ _ = None;
+in
+  val pair_eta_expand_proc = Simplifier.mk_simproc "pair_eta_expand" lhss proc;
+end;
+
+
+val Eindhoven_ss =
+  simpset() addsimprocs [pair_eta_expand_proc]
+    addsimps [split_paired_Ex, Let_def];