added 'split' method;
authorwenzelm
Mon, 28 Aug 2000 20:29:56 +0200
changeset 9703 bf65780eed02
parent 9702 f23bee3c0682
child 9704 c2f2f70bbb60
added 'split' method;
doc-src/IsarRef/generic.tex
src/Provers/splitter.ML
--- 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;