refined filter for ATP steps to avoid 'have True' steps in E proofs
authorblanchet
Thu, 24 Jul 2014 18:46:38 +0200
changeset 589996840b23da81d
parent 58998 49077e289606
child 59000 f55c173a3cbc
refined filter for ATP steps to avoid 'have True' steps in E proofs
src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
     1.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Thu Jul 24 18:46:38 2014 +0200
     1.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Thu Jul 24 18:46:38 2014 +0200
     1.3 @@ -68,13 +68,11 @@
     1.4  fun add_fact_of_dependencies [(_, ss as _ :: _)] = apsnd (union (op =) ss)
     1.5    | add_fact_of_dependencies names = apfst (insert (op =) (label_of_clause names))
     1.6  
     1.7 -fun is_True_prop t = t aconv @{prop True}
     1.8 -
     1.9  fun add_line_pass1 (line as (name, role, t, rule, [])) lines =
    1.10      (* No dependencies: lemma (for Z3), fact, conjecture, or (for Vampire) internal facts or
    1.11         definitions. *)
    1.12      if role = Conjecture orelse role = Negated_Conjecture then line :: lines
    1.13 -    else if is_True_prop t then map (replace_dependencies_in_line (name, [])) lines
    1.14 +    else if t aconv @{prop True} then map (replace_dependencies_in_line (name, [])) lines
    1.15      else if role = Lemma orelse role = Hypothesis orelse is_arith_rule rule then line :: lines
    1.16      else if role = Axiom then lines (* axioms (facts) need no proof lines *)
    1.17      else map (replace_dependencies_in_line (name, [])) lines
    1.18 @@ -83,18 +81,16 @@
    1.19  fun add_lines_pass2 res _ [] = rev res
    1.20    | add_lines_pass2 res prev_t ((line as (name, role, t, rule, deps)) :: lines) =
    1.21      let
    1.22 -      val is_last_line = null lines
    1.23 -
    1.24 -      fun looks_interesting () =
    1.25 -        not (is_True_prop t) andalso not (t aconv prev_t) andalso null (Term.add_tvars t []) andalso
    1.26 -        length deps >= 2 andalso not (can the_single lines)
    1.27 +      fun looks_boring () =
    1.28 +        t aconv @{prop True} orelse t aconv @{prop False} orelse t aconv prev_t orelse
    1.29 +        length deps < 2
    1.30  
    1.31        fun is_skolemizing_line (_, _, _, rule', deps') =
    1.32          is_skolemize_rule rule' andalso member (op =) deps' name
    1.33        fun is_before_skolemize_rule () = exists is_skolemizing_line lines
    1.34      in
    1.35        if role <> Plain orelse is_skolemize_rule rule orelse is_arith_rule rule orelse
    1.36 -         is_datatype_rule rule orelse is_last_line orelse looks_interesting () orelse
    1.37 +         is_datatype_rule rule orelse null lines orelse not (looks_boring ()) orelse
    1.38           is_before_skolemize_rule () then
    1.39          add_lines_pass2 (line :: res) t lines
    1.40        else