src/HOL/Tools/ATP/atp_problem.ML
changeset 46378 7769bf5c2a17
parent 46338 b02ff6b17599
child 46379 de5dd84717c1
equal deleted inserted replaced
46377:dce6c3a460a9 46378:7769bf5c2a17
   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