added lambda-lifting to Sledgehammer (rough)
authorblanchet
Sun, 17 Jul 2011 14:11:35 +0200
changeset 44728a875729380a4
parent 44727 d636b053d4ff
child 44729 be41d12de6fa
added lambda-lifting to Sledgehammer (rough)
src/HOL/Tools/ATP/atp_translate.ML
src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML
     1.1 --- a/src/HOL/Tools/ATP/atp_translate.ML	Sun Jul 17 14:11:34 2011 +0200
     1.2 +++ b/src/HOL/Tools/ATP/atp_translate.ML	Sun Jul 17 14:11:35 2011 +0200
     1.3 @@ -993,8 +993,8 @@
     1.4       atomic_types = atomic_types}
     1.5    end
     1.6  
     1.7 -fun make_fact ctxt format type_enc trans_lambdas eq_as_iff preproc presimp_consts
     1.8 -              ((name, loc), t) =
     1.9 +fun make_fact ctxt format type_enc trans_lambdas eq_as_iff preproc
    1.10 +              presimp_consts ((name, loc), t) =
    1.11    let val thy = Proof_Context.theory_of ctxt in
    1.12      case t |> preproc ? preprocess_prop ctxt trans_lambdas presimp_consts Axiom
    1.13             |> make_formula thy type_enc (eq_as_iff andalso format <> CNF) name
     2.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Sun Jul 17 14:11:34 2011 +0200
     2.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Sun Jul 17 14:11:35 2011 +0200
     2.3 @@ -525,6 +525,11 @@
     2.4     | NONE => type_enc_from_string best_type_enc)
     2.5    |> choose_format formats
     2.6  
     2.7 +fun lift_lambdas ctxt ts =
     2.8 +  case SMT_Translate.lift_lambdas ctxt false ts |> snd of
     2.9 +    (defs, [t]) => [foldr1 HOLogic.mk_conj (t :: defs)] (* FIXME: hack *)
    2.10 +  | (defs, ts) => ts @ defs
    2.11 +
    2.12  fun translate_atp_lambdas ctxt type_enc =
    2.13    Config.get ctxt atp_lambda_translation
    2.14    |> (fn trans =>
    2.15 @@ -537,16 +542,11 @@
    2.16           else
    2.17             trans)
    2.18    |> (fn trans =>
    2.19 -         if trans = concealed_lambdasN then
    2.20 -           map (conceal_lambdas ctxt)
    2.21 -         else if trans = lambda_liftingN then
    2.22 -           I (* TODO: implement *)
    2.23 -         else if trans = combinatorsN then
    2.24 -           map (introduce_combinators ctxt)
    2.25 -         else if trans = lambdasN then
    2.26 -           map Envir.eta_contract
    2.27 -         else
    2.28 -           error ("Unknown lambda translation method: " ^ quote trans ^ "."))
    2.29 +         if trans = concealed_lambdasN then map (conceal_lambdas ctxt)
    2.30 +         else if trans = lambda_liftingN then lift_lambdas ctxt
    2.31 +         else if trans = combinatorsN then map (introduce_combinators ctxt)
    2.32 +         else if trans = lambdasN then map Envir.eta_contract
    2.33 +         else error ("Unknown lambda translation method: " ^ quote trans ^ "."))
    2.34  
    2.35  val metis_minimize_max_time = seconds 2.0
    2.36