--- a/doc-src/IsarRef/generic.tex Mon Aug 28 20:29:19 2000 +0200
+++ b/doc-src/IsarRef/generic.tex Mon Aug 28 20:29:56 2000 +0200
@@ -620,16 +620,19 @@
\section{Basic equational reasoning}
-\indexisarmeth{subst}\indexisarmeth{hypsubst}\indexisaratt{symmetric}
+\indexisarmeth{subst}\indexisarmeth{hypsubst}\indexisarmeth{split}\indexisaratt{symmetric}
\begin{matharray}{rcl}
subst & : & \isarmeth \\
hypsubst^* & : & \isarmeth \\
+ split & : & \isarmeth \\
symmetric & : & \isaratt \\
\end{matharray}
\begin{rail}
'subst' thmref
;
+ 'split' thmrefs
+ ;
\end{rail}
These methods and attributes provide basic facilities for equational reasoning
@@ -642,6 +645,9 @@
\item [$subst~thm$] performs a single substitution step using rule $thm$,
which may be either a meta or object equality.
\item [$hypsubst$] performs substitution using some assumption.
+\item [$split~thms$] performs single-step case splitting using rules $thms$.
+ Note that the $simp$ method already involves repeated application of split
+ rules as declared in the current context (see \S\ref{sec:simp}).
\item [$symmetric$] applies the symmetry rule of meta or object equality.
\end{descr}
--- a/src/Provers/splitter.ML Mon Aug 28 20:29:19 2000 +0200
+++ b/src/Provers/splitter.ML Mon Aug 28 20:29:56 2000 +0200
@@ -412,21 +412,22 @@
(Attrib.add_del_args split_add_global split_del_global,
Attrib.add_del_args split_add_local split_del_local);
-val setup_attrs =
- Attrib.add_attributes [(splitN, split_attr, "declare splitter rule")];
-
-(* method modifiers *)
+(* methods *)
val split_modifiers =
[Args.$$$ splitN -- Args.colon >> K ((I, split_add_local): Method.modifier),
Args.$$$ splitN -- Args.$$$ "add" -- Args.colon >> K (I, split_add_local),
Args.$$$ splitN -- Args.$$$ "del" -- Args.colon >> K (I, split_del_local)];
+val split_meth = Method.thms_args (Method.SIMPLE_METHOD' HEADGOAL o split_tac);
+
(** theory setup **)
-val setup = [setup_attrs];
+val setup =
+ [Attrib.add_attributes [(splitN, split_attr, "declare splitter rule")],
+ Method.add_methods [(splitN, split_meth, "apply splitter rule")]];
end;