replaced extend_theory by new add_* functions;
authorclasohm
Fri, 01 Jul 1994 11:03:42 +0200
changeset 444 3ca9d49fd662
parent 443 10884e64c241
child 445 7b6d8b8d4580
replaced extend_theory by new add_* functions; changed syntax of datatype declaration
src/ZF/Fin.ML
src/ZF/List.ML
src/ZF/constructor.ML
src/ZF/ind_syntax.ML
src/ZF/intr_elim.ML
--- a/src/ZF/Fin.ML	Wed Jun 29 12:13:03 1994 +0200
+++ b/src/ZF/Fin.ML	Fri Jul 01 11:03:42 1994 +0200
@@ -16,7 +16,7 @@
 *)
 
 structure Fin = Inductive_Fun
- (val thy        = Arith.thy addconsts [(["Fin"],"i=>i")]
+ (val thy        = Arith.thy |> add_consts [("Fin", "i=>i", NoSyn)]
   val rec_doms   = [("Fin","Pow(A)")]
   val sintrs     = ["0 : Fin(A)",
                     "[| a: A;  b: Fin(A) |] ==> cons(a,b) : Fin(A)"]
--- a/src/ZF/List.ML	Wed Jun 29 12:13:03 1994 +0200
+++ b/src/ZF/List.ML	Fri Jul 01 11:03:42 1994 +0200
@@ -9,10 +9,9 @@
 structure List = Datatype_Fun
  (val thy        = Univ.thy
   val rec_specs  = [("list", "univ(A)",
-                      [(["Nil"],    "i"), 
-                       (["Cons"],   "[i,i]=>i")])]
+                      [(["Nil"],    "i", NoSyn), 
+                       (["Cons"],   "[i,i]=>i", NoSyn)])]
   val rec_styp   = "i=>i"
-  val ext        = None
   val sintrs     = ["Nil : list(A)",
                     "[| a: A;  l: list(A) |] ==> Cons(a,l) : list(A)"]
   val monos      = []
--- a/src/ZF/constructor.ML	Wed Jun 29 12:13:03 1994 +0200
+++ b/src/ZF/constructor.ML	Fri Jul 01 11:03:42 1994 +0200
@@ -22,10 +22,9 @@
 signature CONSTRUCTOR =
   sig
   val thy        : theory		(*parent theory*)
-  val rec_specs  : (string * string * (string list * string)list) list
+  val rec_specs  : (string * string * (string list * string * mixfix)list) list
                       (*recursion ops, types, domains, constructors*)
   val rec_styp	 : string		(*common type of all recursion ops*)
-  val ext        : Syntax.sext option	(*syntax extension for new theory*)
   val sintrs     : string list		(*desired introduction rules*)
   val monos      : thm list		(*monotonicity of each M operator*)
   val type_intrs : thm list		(*type-checking intro rules*)
@@ -63,15 +62,21 @@
    (fn a => "Name of recursive set not an identifier: " ^ a);
 
 (*Expands multiple constant declarations*)
-fun pairtypes (cs,st) = map (rpair st) cs;
+fun flatten_consts ((names, typ, mfix) :: cs) =
+      let fun mk_const name = (name, typ, mfix)
+      in (map mk_const names) @ (flatten_consts cs) end
+  | flatten_consts [] = [];
 
 (*Constructors with types and arguments*)
 fun mk_con_ty_list cons_pairs = 
-  let fun mk_con_ty (a,st) =
-	  let val T = rdty st
-	      val args = mk_frees "xa" (binder_types T)
-	  in  (a,T,args) end
-  in  map mk_con_ty (flat (map pairtypes cons_pairs))  end;
+  let fun mk_con_ty (a, st, syn) =
+	  let val T = rdty st;
+	      val args = mk_frees "xa" (binder_types T);
+              val name = const_name a syn; (* adds "op" to infix constructors*)
+	  in (name, T, args) end;
+
+      fun pairtypes c = flatten_consts [c];
+  in map mk_con_ty (flat (map pairtypes cons_pairs))  end;
 
 val con_ty_lists = map (mk_con_ty_list o #3) rec_specs;
 
@@ -87,8 +92,8 @@
 
 (*Make constructor definition*)
 fun mk_con_defs (kpart, con_ty_list) = 
-  let val ncon = length con_ty_list	(*number of constructors*)
-      fun mk_def ((a,T,args), kcon) =	(*kcon = index of this constructor*)
+  let val ncon = length con_ty_list	   (*number of constructors*)
+      fun mk_def ((a,T,args), kcon) = (*kcon = index of this constructor*)
 	  mk_defpair sign 
 	     (list_comb (Const(a,T), args),
 	      mk_inject npart kpart (mk_inject ncon kcon (mk_tuple args)))
@@ -107,7 +112,7 @@
 
 (*Treatment of a single constructor*)
 fun add_case ((a,T,args), (opno,cases)) =
-    if Syntax.is_identifier a 
+    if Syntax.is_identifier a
     then (opno,   
 	  (Free(case_name ^ "_" ^ a, T), args) :: cases)
     else (opno+1, 
@@ -142,13 +147,15 @@
 val axpairs =
     big_case_def :: flat (map mk_con_defs ((1 upto npart) ~~ con_ty_lists));
 
-val const_decs = remove_mixfixes ext
-		   (([big_case_name], flatten_typ sign big_case_typ) :: 
-		    (big_rec_name ins rec_names, rec_styp) :: 
+val const_decs = flatten_consts
+		   (([big_case_name], flatten_typ sign big_case_typ, NoSyn) ::
+		    (big_rec_name ins rec_names, rec_styp, NoSyn) ::
 		    flat (map #3 rec_specs));
 
-val con_thy = extend_theory thy (big_rec_name ^ "_Constructors")
-    ([], [], [], [], [], const_decs, ext) axpairs;
+val con_thy = thy
+              |> add_consts const_decs
+              |> add_axioms axpairs
+              |> add_thyname (big_rec_name ^ "_Constructors");
 
 (*1st element is the case definition; others are the constructors*)
 val con_defs = map (get_axiom con_thy o #1) axpairs;
--- a/src/ZF/ind_syntax.ML	Wed Jun 29 12:13:03 1994 +0200
+++ b/src/ZF/ind_syntax.ML	Fri Jul 01 11:03:42 1994 +0200
@@ -14,14 +14,6 @@
     end;
 fun flatten_term sign t = Pretty.str_of (Sign.pretty_term sign t);
 
-(*Add constants to a theory*)
-infix addconsts;
-fun thy addconsts const_decs = 
-    extend_theory thy (space_implode "_" (flat (map #1 const_decs)) 
-		       ^ "_Theory")
-		  ([], [], [], [], [], const_decs, None) [];
-
-
 (*Make a definition, lhs==rhs, checking that vars on lhs contain *)
 fun mk_defpair sign (lhs,rhs) = 
   let val Const(name,_) = head_of lhs
--- a/src/ZF/intr_elim.ML	Wed Jun 29 12:13:03 1994 +0200
+++ b/src/ZF/intr_elim.ML	Fri Jul 01 11:03:42 1994 +0200
@@ -207,8 +207,10 @@
 	 | _ => rec_tms ~~		(*define the sets as Parts*)
 		map (subst_atomic [(Free(X',iT),big_rec_tm)]) parts));
 
-val thy = extend_theory Ind.thy (big_rec_name ^ "_Inductive")
-    ([], [], [], [], [], [], None) axpairs;
+val thy = 
+  Ind.thy
+  |> add_axioms axpairs
+  |> add_thyname (big_rec_name ^ "_Inductive");
 
 val defs = map (get_axiom thy o #1) axpairs;