src/HOL/thy_syntax.ML
changeset 1475 7f5a4cd08209
parent 1465 5d7a7e439cec
child 1574 5a63ab90ee8a
equal deleted inserted replaced
1474:3f7d67927fe2 1475:7f5a4cd08209
    15 struct
    15 struct
    16 
    16 
    17 open ThyParse;
    17 open ThyParse;
    18 
    18 
    19 
    19 
    20 (** subtype **)
    20 (** typedef **)
    21 
    21 
    22 fun mk_subtype_decl (((((opt_name, vs), t), mx), rhs), wt) =
    22 fun mk_typedef_decl (((((opt_name, vs), t), mx), rhs), wt) =
    23   let
    23   let
    24     val name' = if_none opt_name t;
    24     val name' = if_none opt_name t;
    25     val name = strip_quotes name';
    25     val name = strip_quotes name';
    26   in
    26   in
    27     (cat_lines [name', mk_triple (t, mk_list vs, mx), rhs, wt],
    27     (cat_lines [name', mk_triple (t, mk_list vs, mx), rhs, wt],
    28       [name ^ "_def", "Rep_" ^ name, "Rep_" ^ name ^ "_inverse",
    28       [name ^ "_def", "Rep_" ^ name, "Rep_" ^ name ^ "_inverse",
    29         "Abs_" ^ name ^ "_inverse"])
    29         "Abs_" ^ name ^ "_inverse"])
    30   end;
    30   end;
    31 
    31 
    32 val subtype_decl =
    32 val typedef_decl =
    33   optional ("(" $$-- name --$$ ")" >> Some) None --
    33   optional ("(" $$-- name --$$ ")" >> Some) None --
    34   type_args -- name -- opt_infix --$$ "=" -- string -- opt_witness
    34   type_args -- name -- opt_infix --$$ "=" -- string -- opt_witness
    35   >> mk_subtype_decl;
    35   >> mk_typedef_decl;
    36 
    36 
    37 
    37 
    38 
    38 
    39 (** (co)inductive **)
    39 (** (co)inductive **)
    40 
    40 
   189 (** sections **)
   189 (** sections **)
   190 
   190 
   191 val user_keywords = ["intrs", "monos", "con_defs", "|"];
   191 val user_keywords = ["intrs", "monos", "con_defs", "|"];
   192 
   192 
   193 val user_sections =
   193 val user_sections =
   194  [axm_section "subtype" "|> Subtype.add_subtype" subtype_decl,
   194  [axm_section "typedef" "|> Typedef.add_typedef" typedef_decl,
   195   ("inductive", inductive_decl ""),
   195   ("inductive", inductive_decl ""),
   196   ("coinductive", inductive_decl "Co"),
   196   ("coinductive", inductive_decl "Co"),
   197   ("datatype", datatype_decl),
   197   ("datatype", datatype_decl),
   198   ("primrec", primrec_decl)];
   198   ("primrec", primrec_decl)];
   199 
   199