src/HOL/Tools/res_clause.ML
changeset 33037 b22e44496dc2
parent 32264 0be31453f698
child 33038 8f9594c31de4
equal deleted inserted replaced
33015:575bd6548df9 33037:b22e44496dc2
    91 
    91 
    92 val const_prefix = "c_";
    92 val const_prefix = "c_";
    93 val tconst_prefix = "tc_";
    93 val tconst_prefix = "tc_";
    94 val class_prefix = "class_";
    94 val class_prefix = "class_";
    95 
    95 
    96 fun union_all xss = List.foldl (op union) [] xss;
    96 fun union_all xss = List.foldl (gen_union (op =)) [] xss;
    97 
    97 
    98 (*Provide readable names for the more common symbolic functions*)
    98 (*Provide readable names for the more common symbolic functions*)
    99 val const_trans_table =
    99 val const_trans_table =
   100       Symtab.make [(@{const_name "op ="}, "equal"),
   100       Symtab.make [(@{const_name "op ="}, "equal"),
   101                    (@{const_name HOL.less_eq}, "lessequals"),
   101                    (@{const_name HOL.less_eq}, "lessequals"),
   261 
   261 
   262 fun pred_of_sort (LTVar (s,ty)) = (s,1)
   262 fun pred_of_sort (LTVar (s,ty)) = (s,1)
   263   | pred_of_sort (LTFree (s,ty)) = (s,1)
   263   | pred_of_sort (LTFree (s,ty)) = (s,1)
   264 
   264 
   265 (*Given a list of sorted type variables, return a list of type literals.*)
   265 (*Given a list of sorted type variables, return a list of type literals.*)
   266 fun add_typs Ts = List.foldl (op union) [] (map sorts_on_typs Ts);
   266 fun add_typs Ts = List.foldl (gen_union (op =)) [] (map sorts_on_typs Ts);
   267 
   267 
   268 (*The correct treatment of TFrees like 'a in lemmas (axiom clauses) is not clear.
   268 (*The correct treatment of TFrees like 'a in lemmas (axiom clauses) is not clear.
   269   * Ignoring them leads to unsound proofs, since we do nothing to ensure that 'a
   269   * Ignoring them leads to unsound proofs, since we do nothing to ensure that 'a
   270     in a lemma has the same sort as 'a in the conjecture.
   270     in a lemma has the same sort as 'a in the conjecture.
   271   * Deleting such clauses will lead to problems with locales in other use of local results
   271   * Deleting such clauses will lead to problems with locales in other use of local results
   370 fun iter_type_class_pairs thy tycons [] = ([], [])
   370 fun iter_type_class_pairs thy tycons [] = ([], [])
   371   | iter_type_class_pairs thy tycons classes =
   371   | iter_type_class_pairs thy tycons classes =
   372       let val cpairs = type_class_pairs thy tycons classes
   372       let val cpairs = type_class_pairs thy tycons classes
   373           val newclasses = union_all (union_all (union_all (map (map #2 o #2) cpairs))) \\ classes \\ HOLogic.typeS
   373           val newclasses = union_all (union_all (union_all (map (map #2 o #2) cpairs))) \\ classes \\ HOLogic.typeS
   374           val (classes', cpairs') = iter_type_class_pairs thy tycons newclasses
   374           val (classes', cpairs') = iter_type_class_pairs thy tycons newclasses
   375       in  (classes' union classes, cpairs' union cpairs)  end;
   375       in (gen_union (op =) (classes', classes), gen_union (op =) (cpairs', cpairs)) end;
   376 
   376 
   377 fun make_arity_clauses_dfg dfg thy tycons classes =
   377 fun make_arity_clauses_dfg dfg thy tycons classes =
   378   let val (classes', cpairs) = iter_type_class_pairs thy tycons classes
   378   let val (classes', cpairs) = iter_type_class_pairs thy tycons classes
   379   in  (classes', multi_arity_clause dfg cpairs)  end;
   379   in  (classes', multi_arity_clause dfg cpairs)  end;
   380 val make_arity_clauses = make_arity_clauses_dfg false;
   380 val make_arity_clauses = make_arity_clauses_dfg false;