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; |