src/Pure/Syntax/syn_ext.ML
changeset 14697 5ad13d05049b
parent 14647 3f9d3d5cd0cd
child 14819 4dae1cb304a4
--- a/src/Pure/Syntax/syn_ext.ML	Sat May 01 22:09:45 2004 +0200
+++ b/src/Pure/Syntax/syn_ext.ML	Sat May 01 22:10:37 2004 +0200
@@ -267,17 +267,18 @@
       if not (exists is_index args) then (const, typ, [])
       else
         let
-          val c = if const <> "" then "_indexed_" ^ const
+          val indexed_const = if const <> "" then "_indexed_" ^ const
             else err_in_mfix "Missing constant name for indexed syntax" mfix;
-          val T = Term.range_type typ handle Match =>
+          val rangeT = Term.range_type typ handle Match =>
             err_in_mfix "Missing structure argument for indexed syntax" mfix;
 
-          val xs = map Ast.Variable (Term.invent_names [] "x" (length args - 1));
+          val xs = map Ast.Variable (Term.invent_names [] "xa" (length args - 1));
+          val (xs1, xs2) = Library.splitAt (Library.find_index is_index args, xs);
           val i = Ast.Variable "i";
-          val n = Library.find_index is_index args;
-          val lhs = Ast.mk_appl (Ast.Constant c) (take (n, xs) @ [i] @ drop (n, xs));
-          val rhs = Ast.mk_appl (Ast.Constant const) (Ast.Appl [Ast.Constant "_struct", i] :: xs);
-        in (c, T, [(lhs, rhs)]) end;
+          val lhs = Ast.mk_appl (Ast.Constant indexed_const)
+            (xs1 @ [Ast.mk_appl (Ast.Constant "_index") [i]] @ xs2);
+          val rhs = Ast.mk_appl (Ast.Constant const) (i :: xs);
+        in (indexed_const, rangeT, [(lhs, rhs)]) end;
 
     val (symbs, lhs) = add_args raw_symbs typ' pris;