src/HOL/Tools/Sledgehammer/metis_clauses.ML
changeset 37925 1188e6bff48d
parent 37924 17f36ad210d6
child 37926 e6ff246c0cdb
equal deleted inserted replaced
37924:17f36ad210d6 37925:1188e6bff48d
    16   datatype arLit =
    16   datatype arLit =
    17     TConsLit of name * name * name list |
    17     TConsLit of name * name * name list |
    18     TVarLit of name * name
    18     TVarLit of name * name
    19   datatype arity_clause = ArityClause of
    19   datatype arity_clause = ArityClause of
    20    {axiom_name: string, conclLit: arLit, premLits: arLit list}
    20    {axiom_name: string, conclLit: arLit, premLits: arLit list}
    21   datatype classrel_clause = ClassrelClause of
    21   datatype class_rel_clause = ClassRelClause of
    22    {axiom_name: string, subclass: name, superclass: name}
    22    {axiom_name: string, subclass: name, superclass: name}
    23   datatype combtyp =
    23   datatype combtyp =
    24     CombTVar of name |
    24     CombTVar of name |
    25     CombTFree of name |
    25     CombTFree of name |
    26     CombType of name * combtyp list
    26     CombType of name * combtyp list
    57   val skolem_prefix: string
    57   val skolem_prefix: string
    58   val skolem_infix: string
    58   val skolem_infix: string
    59   val is_skolem_const_name: string -> bool
    59   val is_skolem_const_name: string -> bool
    60   val num_type_args: theory -> string -> int
    60   val num_type_args: theory -> string -> int
    61   val type_literals_for_types : typ list -> type_literal list
    61   val type_literals_for_types : typ list -> type_literal list
    62   val make_classrel_clauses: theory -> class list -> class list -> classrel_clause list
    62   val make_class_rel_clauses: theory -> class list -> class list -> class_rel_clause list
    63   val make_arity_clauses: theory -> string list -> class list -> class list * arity_clause list
    63   val make_arity_clauses: theory -> string list -> class list -> class list * arity_clause list
    64   val type_of_combterm : combterm -> combtyp
    64   val type_of_combterm : combterm -> combtyp
    65   val strip_combterm_comb : combterm -> combterm * combterm list
    65   val strip_combterm_comb : combterm -> combterm * combterm list
    66   val literals_of_term : theory -> term -> fol_literal list * typ list
    66   val literals_of_term : theory -> term -> fol_literal list * typ list
    67   val conceal_skolem_terms :
    67   val conceal_skolem_terms :
    83 val fixed_var_prefix = "v_";
    83 val fixed_var_prefix = "v_";
    84 
    84 
    85 val tvar_prefix = "T_";
    85 val tvar_prefix = "T_";
    86 val tfree_prefix = "t_";
    86 val tfree_prefix = "t_";
    87 
    87 
    88 val classrel_clause_prefix = "clsrel_";
    88 val class_rel_clause_prefix = "clsrel_";
    89 
    89 
    90 val const_prefix = "c_";
    90 val const_prefix = "c_";
    91 val type_const_prefix = "tc_";
    91 val type_const_prefix = "tc_";
    92 val class_prefix = "class_";
    92 val class_prefix = "class_";
    93 
    93 
   286   end
   286   end
   287 
   287 
   288 
   288 
   289 (**** Isabelle class relations ****)
   289 (**** Isabelle class relations ****)
   290 
   290 
   291 datatype classrel_clause =
   291 datatype class_rel_clause =
   292   ClassrelClause of {axiom_name: string, subclass: name, superclass: name}
   292   ClassRelClause of {axiom_name: string, subclass: name, superclass: name}
   293 
   293 
   294 (*Generate all pairs (sub,super) such that sub is a proper subclass of super in theory thy.*)
   294 (*Generate all pairs (sub,super) such that sub is a proper subclass of super in theory thy.*)
   295 fun class_pairs _ [] _ = []
   295 fun class_pairs _ [] _ = []
   296   | class_pairs thy subs supers =
   296   | class_pairs thy subs supers =
   297       let
   297       let
   298         val class_less = Sorts.class_less (Sign.classes_of thy)
   298         val class_less = Sorts.class_less (Sign.classes_of thy)
   299         fun add_super sub super = class_less (sub, super) ? cons (sub, super)
   299         fun add_super sub super = class_less (sub, super) ? cons (sub, super)
   300         fun add_supers sub = fold (add_super sub) supers
   300         fun add_supers sub = fold (add_super sub) supers
   301       in fold add_supers subs [] end
   301       in fold add_supers subs [] end
   302 
   302 
   303 fun make_classrel_clause (sub,super) =
   303 fun make_class_rel_clause (sub,super) =
   304   ClassrelClause {axiom_name = classrel_clause_prefix ^ ascii_of sub ^ "_" ^
   304   ClassRelClause {axiom_name = class_rel_clause_prefix ^ ascii_of sub ^ "_" ^
   305                                ascii_of super,
   305                                ascii_of super,
   306                   subclass = `make_type_class sub,
   306                   subclass = `make_type_class sub,
   307                   superclass = `make_type_class super};
   307                   superclass = `make_type_class super};
   308 
   308 
   309 fun make_classrel_clauses thy subs supers =
   309 fun make_class_rel_clauses thy subs supers =
   310   map make_classrel_clause (class_pairs thy subs supers);
   310   map make_class_rel_clause (class_pairs thy subs supers);
   311 
   311 
   312 
   312 
   313 (** Isabelle arities **)
   313 (** Isabelle arities **)
   314 
   314 
   315 fun arity_clause _ _ (_, []) = []
   315 fun arity_clause _ _ (_, []) = []