642 unreadable "op_1", "op_2", etc., in the problem files. "eq" is reserved to |
642 unreadable "op_1", "op_2", etc., in the problem files. "eq" is reserved to |
643 ensure that "HOL.eq" is correctly mapped to equality (not clear whether this |
643 ensure that "HOL.eq" is correctly mapped to equality (not clear whether this |
644 is still necessary). *) |
644 is still necessary). *) |
645 val reserved_nice_names = [tptp_old_equal, "op", "eq"] |
645 val reserved_nice_names = [tptp_old_equal, "op", "eq"] |
646 |
646 |
647 fun readable_name underscore full_name s = |
647 fun readable_name protect full_name s = |
648 (if s = full_name then |
648 (if s = full_name then |
649 s |
649 s |
650 else |
650 else |
651 s |> no_qualifiers |
651 s |> no_qualifiers |
652 |> perhaps (try (unprefix "'")) |
652 |> perhaps (try (unprefix "'")) |
659 NONE) |
659 NONE) |
660 else |
660 else |
661 s) |
661 s) |
662 |> (fn s => |
662 |> (fn s => |
663 if member (op =) reserved_nice_names s then full_name else s)) |
663 if member (op =) reserved_nice_names s then full_name else s)) |
664 |> underscore ? suffix "_" |
664 |> protect |
665 |
665 |
666 fun nice_name _ (full_name, _) NONE = (full_name, NONE) |
666 fun nice_name _ (full_name, _) NONE = (full_name, NONE) |
667 | nice_name underscore (full_name, desired_name) (SOME the_pool) = |
667 | nice_name protect (full_name, desired_name) (SOME the_pool) = |
668 if is_built_in_tptp_symbol full_name then |
668 if is_built_in_tptp_symbol full_name then |
669 (full_name, SOME the_pool) |
669 (full_name, SOME the_pool) |
670 else case Symtab.lookup (fst the_pool) full_name of |
670 else case Symtab.lookup (fst the_pool) full_name of |
671 SOME nice_name => (nice_name, SOME the_pool) |
671 SOME nice_name => (nice_name, SOME the_pool) |
672 | NONE => |
672 | NONE => |
673 let |
673 let |
674 val nice_prefix = readable_name underscore full_name desired_name |
674 val nice_prefix = readable_name protect full_name desired_name |
675 fun add j = |
675 fun add j = |
676 let |
676 let |
677 val nice_name = |
677 val nice_name = |
678 nice_prefix ^ (if j = 0 then "" else string_of_int j) |
678 nice_prefix ^ (if j = 0 then "" else string_of_int j) |
679 in |
679 in |
686 (Symtab.update_new (full_name, nice_name) (fst the_pool), |
686 (Symtab.update_new (full_name, nice_name) (fst the_pool), |
687 Symtab.update_new (nice_name, full_name) (snd the_pool))) |
687 Symtab.update_new (nice_name, full_name) (snd the_pool))) |
688 end |
688 end |
689 in add 0 |> apsnd SOME end |
689 in add 0 |> apsnd SOME end |
690 |
690 |
|
691 fun avoid_clash_with_dfg_keywords s = |
|
692 let val n = String.size s in |
|
693 if n < 2 orelse String.isSubstring "_" s then |
|
694 s |
|
695 else |
|
696 String.substring (s, 0, n - 1) ^ |
|
697 String.str (Char.toUpper (String.sub (s, n - 1))) |
|
698 end |
|
699 |
691 fun nice_atp_problem readable_names format problem = |
700 fun nice_atp_problem readable_names format problem = |
692 let |
701 let |
693 val empty_pool = |
702 val empty_pool = |
694 if readable_names then SOME (Symtab.empty, Symtab.empty) else NONE |
703 if readable_names then SOME (Symtab.empty, Symtab.empty) else NONE |
695 val underscore = case format of DFG _ => true | _ => false |
704 val nice_name = |
696 val nice_name = nice_name underscore |
705 nice_name (case format of DFG _ => avoid_clash_with_dfg_keywords | _ => I) |
697 fun nice_type (AType (name, tys)) = |
706 fun nice_type (AType (name, tys)) = |
698 nice_name name ##>> pool_map nice_type tys #>> AType |
707 nice_name name ##>> pool_map nice_type tys #>> AType |
699 | nice_type (AFun (ty1, ty2)) = nice_type ty1 ##>> nice_type ty2 #>> AFun |
708 | nice_type (AFun (ty1, ty2)) = nice_type ty1 ##>> nice_type ty2 #>> AFun |
700 | nice_type (ATyAbs (names, ty)) = |
709 | nice_type (ATyAbs (names, ty)) = |
701 pool_map nice_name names ##>> nice_type ty #>> ATyAbs |
710 pool_map nice_name names ##>> nice_type ty #>> ATyAbs |