simps_of_case: Better error if split rule is not an equality
authornoschinl
Tue, 02 Jun 2015 13:14:36 +0200
changeset 60355 ccafd7d193e7
parent 60354 235d65be79c9
child 60356 2e1c1968b38e
simps_of_case: Better error if split rule is not an equality
src/HOL/Library/simps_case_conv.ML
--- a/src/HOL/Library/simps_case_conv.ML	Tue Jun 02 13:14:11 2015 +0200
+++ b/src/HOL/Library/simps_case_conv.ML	Tue Jun 02 13:14:36 2015 +0200
@@ -174,13 +174,14 @@
     THEN (forward_tac [refl_imp])
 
 fun do_split ctxt split =
-  let
-    val split' = split RS iffD1;
-    val split_rhs = Thm.concl_of (hd (snd (fst (Variable.import false [split'] ctxt))))
-  in if was_split split_rhs
-     then DETERM (apply_split ctxt split') THEN get_rules_once_split
-     else raise TERM ("malformed split rule", [split_rhs])
-  end
+  case try op RS (split, iffD1) of
+    NONE => raise TERM ("malformed split rule", [Thm.prop_of split])
+  | SOME split' =>
+      let val split_rhs = Thm.concl_of (hd (snd (fst (Variable.import false [split'] ctxt))))
+      in if was_split split_rhs
+         then DETERM (apply_split ctxt split') THEN get_rules_once_split
+         else raise TERM ("malformed split rule", [split_rhs])
+      end
 
 val atomize_meta_eq = forward_tac [meta_eq_to_obj_eq]