src/HOL/Tools/res_types_sorts.ML
changeset 17525 ae5bb6001afb
parent 16803 014090d1e64b
equal deleted inserted replaced
17524:42d56a6dec6e 17525:ae5bb6001afb
     8 
     8 
     9 signature RES_TYPES_SORTS =
     9 signature RES_TYPES_SORTS =
    10 sig
    10 sig
    11   exception ARITIES of string
    11   exception ARITIES of string
    12   val arity_clause: string * (string * string list list) list -> ResClause.arityClause list
    12   val arity_clause: string * (string * string list list) list -> ResClause.arityClause list
    13   val arity_clause_thy: theory -> ResClause.arityClause list list * (string * 'a list) list
    13   val arity_clause_thy: theory -> ResClause.arityClause list 
    14   type classrelClauses
    14   type classrelClauses
    15   val classrel_clause: string * string list -> ResClause.classrelClause list
    15   val classrel_clause: string * string list -> ResClause.classrelClause list
    16   val classrel_clauses_classrel: Sorts.classes -> ResClause.classrelClause list list
    16   val classrel_clauses_classrel: Sorts.classes -> ResClause.classrelClause list list
    17   val classrel_clauses_thy: theory -> ResClause.classrelClause list list
    17   val classrel_clauses_thy: theory -> ResClause.classrelClause list 
    18   val multi_arity_clause:
       
    19     (string * (string * string list list) list) list ->
       
    20     (string * 'a list) list ->
       
    21     ResClause.arityClause list list * (string * 'a list) list
       
    22   val tptp_arity_clause_thy: theory -> string list list
       
    23 end;
    18 end;
    24 
    19 
    25 structure ResTypesSorts: RES_TYPES_SORTS =
    20 structure ResTypesSorts: RES_TYPES_SORTS =
    26 struct
    21 struct
    27 
    22 
    36 
    31 
    37 fun multi_arity_clause [] expts = ([], expts)
    32 fun multi_arity_clause [] expts = ([], expts)
    38   | multi_arity_clause ((tcon, []) :: tcons_ars) expts =
    33   | multi_arity_clause ((tcon, []) :: tcons_ars) expts =
    39       multi_arity_clause tcons_ars ((tcon, []) :: expts)
    34       multi_arity_clause tcons_ars ((tcon, []) :: expts)
    40   | multi_arity_clause (tcon_ar :: tcons_ars) expts =
    35   | multi_arity_clause (tcon_ar :: tcons_ars) expts =
    41       let val result = multi_arity_clause tcons_ars expts
    36       let val (cls,ary) = multi_arity_clause tcons_ars expts
    42       in ((arity_clause tcon_ar :: fst result), snd result) end;
    37       in ((arity_clause tcon_ar @ cls), ary) end;
    43 
    38 
    44 fun arity_clause_thy thy =
    39 fun arity_clause_thy thy =
    45   let val arities = #arities (Type.rep_tsig (Sign.tsig_of thy))
    40   let val arities = #arities (Type.rep_tsig (Sign.tsig_of thy))
    46   in multi_arity_clause (Symtab.dest arities) [] end;
    41   in #1 (multi_arity_clause (Symtab.dest arities) []) end;
    47 
       
    48 fun tptp_arity_clause_thy thy =
       
    49   map (map ResClause.tptp_arity_clause) (#1 (arity_clause_thy thy));
       
    50 
    42 
    51 
    43 
    52 (* Isabelle classes *)
    44 (* Isabelle classes *)
    53 
    45 
    54 type classrelClauses = ResClause.classrelClause list Symtab.table;
    46 type classrelClauses = ResClause.classrelClause list Symtab.table;
    55 
    47 
    56 val classrel_of = #2 o #classes o Type.rep_tsig o Sign.tsig_of;
    48 val classrel_of = #2 o #classes o Type.rep_tsig o Sign.tsig_of;
    57 val classrel_clause = ResClause.classrelClauses_of;
    49 val classrel_clause = ResClause.classrelClauses_of;
    58 fun classrel_clauses_classrel (C: Sorts.classes) = map classrel_clause (Graph.dest C);
    50 fun classrel_clauses_classrel (C: Sorts.classes) = map classrel_clause (Graph.dest C);
    59 val classrel_clauses_thy = classrel_clauses_classrel o classrel_of;
    51 val classrel_clauses_thy = List.concat o classrel_clauses_classrel o classrel_of;
    60 
       
    61 val tptp_classrel_clauses_thy =
       
    62   map (map ResClause.tptp_classrelClause) o classrel_clauses_thy;
       
    63 
    52 
    64 end;
    53 end;