src/Pure/consts.ML
changeset 61262 7bd1eb4b056e
parent 56139 b7add947a6ef
child 63573 8976c5bc9e97
equal deleted inserted replaced
61261:ddb2da7cb2e4 61262:7bd1eb4b056e
    25   val alias: Name_Space.naming -> binding -> string -> T -> T
    25   val alias: Name_Space.naming -> binding -> string -> T -> T
    26   val is_concealed: T -> string -> bool
    26   val is_concealed: T -> string -> bool
    27   val intern: T -> xstring -> string
    27   val intern: T -> xstring -> string
    28   val intern_syntax: T -> xstring -> string
    28   val intern_syntax: T -> xstring -> string
    29   val check_const: Context.generic -> T -> xstring * Position.T list -> term * Position.report list
    29   val check_const: Context.generic -> T -> xstring * Position.T list -> term * Position.report list
    30   val certify: Context.pretty -> Type.tsig -> bool -> T -> term -> term  (*exception TYPE*)
    30   val certify: Context.generic -> Type.tsig -> bool -> T -> term -> term  (*exception TYPE*)
    31   val typargs: T -> string * typ -> typ list
    31   val typargs: T -> string * typ -> typ list
    32   val instance: T -> string * typ list -> typ
    32   val instance: T -> string * typ list -> typ
    33   val declare: Context.generic -> binding * typ -> T -> T
    33   val declare: Context.generic -> binding * typ -> T -> T
    34   val constrain: string * typ option -> T -> T
    34   val constrain: string * typ option -> T -> T
    35   val abbreviate: Context.generic -> Type.tsig -> string -> binding * term -> T -> (term * term) * T
    35   val abbreviate: Context.generic -> Type.tsig -> string -> binding * term -> T -> (term * term) * T
   153   in (Const (c, T), reports) end;
   153   in (Const (c, T), reports) end;
   154 
   154 
   155 
   155 
   156 (* certify *)
   156 (* certify *)
   157 
   157 
   158 fun certify pp tsig do_expand consts =
   158 fun certify context tsig do_expand consts =
   159   let
   159   let
   160     fun err msg (c, T) =
   160     fun err msg (c, T) =
   161       raise TYPE (msg ^ " " ^ quote c ^ " :: " ^
   161       raise TYPE (msg ^ " " ^ quote c ^ " :: " ^
   162         Syntax.string_of_typ (Syntax.init_pretty pp) T, [], []);
   162         Syntax.string_of_typ (Syntax.init_pretty context) T, [], []);
   163     val certT = Type.cert_typ tsig;
   163     val certT = Type.cert_typ tsig;
   164     fun cert tm =
   164     fun cert tm =
   165       let
   165       let
   166         val (head, args) = Term.strip_comb tm;
   166         val (head, args) = Term.strip_comb tm;
   167         val args' = map cert args;
   167         val args' = map cert args;
   270 
   270 
   271 in
   271 in
   272 
   272 
   273 fun abbreviate context tsig mode (b, raw_rhs) consts =
   273 fun abbreviate context tsig mode (b, raw_rhs) consts =
   274   let
   274   let
   275     val pp = Context.pretty_generic context;
   275     val cert_term = certify context tsig false consts;
   276     val cert_term = certify pp tsig false consts;
   276     val expand_term = certify context tsig true consts;
   277     val expand_term = certify pp tsig true consts;
       
   278     val force_expand = mode = Print_Mode.internal;
   277     val force_expand = mode = Print_Mode.internal;
   279 
   278 
   280     val _ = Term.exists_subterm Term.is_Var raw_rhs andalso
   279     val _ = Term.exists_subterm Term.is_Var raw_rhs andalso
   281       error ("Illegal schematic variables on rhs of abbreviation " ^ Binding.print b);
   280       error ("Illegal schematic variables on rhs of abbreviation " ^ Binding.print b);
   282 
   281