src/HOL/Tools/ATP/atp_proof_reconstruct.ML
changeset 77272 0506c3273814
parent 75123 66eb6fdfc244
child 77418 a8458f0df4ee
equal deleted inserted replaced
77271:40b23105a322 77272:0506c3273814
    44     bool -> int Symtab.table ->
    44     bool -> int Symtab.table ->
    45     (string, string, (string, string atp_type) atp_term, string) atp_formula -> term
    45     (string, string, (string, string atp_type) atp_term, string) atp_formula -> term
    46 
    46 
    47   val used_facts_in_atp_proof : Proof.context -> (string * stature) list -> string atp_proof ->
    47   val used_facts_in_atp_proof : Proof.context -> (string * stature) list -> string atp_proof ->
    48     (string * stature) list
    48     (string * stature) list
    49   val used_facts_in_unsound_atp_proof : Proof.context -> (string * stature) list -> 'a atp_proof ->
       
    50     string list option
       
    51   val atp_proof_prefers_lifting : string atp_proof -> bool
    49   val atp_proof_prefers_lifting : string atp_proof -> bool
    52   val is_typed_helper_used_in_atp_proof : string atp_proof -> bool
    50   val is_typed_helper_used_in_atp_proof : string atp_proof -> bool
    53   val replace_dependencies_in_line : atp_step_name * atp_step_name list -> ('a, 'b) atp_step ->
    51   val replace_dependencies_in_line : atp_step_name * atp_step_name list -> ('a, 'b) atp_step ->
    54     ('a, 'b) atp_step
    52     ('a, 'b) atp_step
    55   val termify_atp_proof : Proof.context -> string -> ATP_Problem.atp_format ->
    53   val termify_atp_proof : Proof.context -> string -> ATP_Problem.atp_format ->
   517   #> (if null deps then union (op =) (resolve_facts facts (num :: ss)) else I)
   515   #> (if null deps then union (op =) (resolve_facts facts (num :: ss)) else I)
   518 
   516 
   519 fun used_facts_in_atp_proof ctxt facts atp_proof =
   517 fun used_facts_in_atp_proof ctxt facts atp_proof =
   520   if null atp_proof then facts else fold (add_fact ctxt facts) atp_proof []
   518   if null atp_proof then facts else fold (add_fact ctxt facts) atp_proof []
   521 
   519 
   522 fun used_facts_in_unsound_atp_proof _ _ [] = NONE
       
   523   | used_facts_in_unsound_atp_proof ctxt facts atp_proof =
       
   524     let
       
   525       val used_facts = used_facts_in_atp_proof ctxt facts atp_proof
       
   526       val all_global_facts = forall (fn (_, (sc, _)) => sc = Global) used_facts
       
   527       val axiom_used = is_axiom_used_in_proof (is_some o resolve_conjecture) atp_proof
       
   528     in
       
   529       if all_global_facts andalso not axiom_used then
       
   530         SOME (map fst used_facts)
       
   531       else
       
   532         NONE
       
   533     end
       
   534 
       
   535 val ascii_of_lam_fact_prefix = ascii_of lam_fact_prefix
   520 val ascii_of_lam_fact_prefix = ascii_of lam_fact_prefix
   536 
   521 
   537 (* overapproximation (good enough) *)
   522 (* overapproximation (good enough) *)
   538 fun is_lam_lifted s =
   523 fun is_lam_lifted s =
   539   String.isPrefix fact_prefix s andalso
   524   String.isPrefix fact_prefix s andalso