lean4-htt/library/tools/super/simp.lean

44 lines
1.5 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2016 Gabriel Ebner. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Gabriel Ebner
-/
import .clause_ops .prover_state
open tactic monad
namespace super
meta def prove_using_assumption : tactic unit := do
tgt ← target,
ass ← mk_local_def `h tgt,
exact ass
meta def simplify_capturing_assumptions (type : expr) : tactic (expr × expr × list expr) := do
S ← simp_lemmas.mk_default,
(type', heq) ← simplify {} S type,
hyps ← return $ contained_lconsts type,
hyps' ← return $ contained_lconsts_list [type', heq],
add_hyps ← return $ list.filter (λn : expr, ¬hyps^.contains n^.local_uniq_name) hyps'^.values,
return (type', heq, add_hyps)
meta def try_simplify_left (c : clause) (i : ) : tactic (list clause) :=
on_left_at c i $ λtype, do
(type', heq, add_hyps) ← simplify_capturing_assumptions type,
hyp ← mk_local_def `h type',
prf ← mk_eq_mpr heq hyp,
return [(hyp::add_hyps, prf)]
meta def try_simplify_right (c : clause) (i : ) : tactic (list clause) :=
on_right_at' c i $ λhyp, do
(type', heq, add_hyps) ← simplify_capturing_assumptions hyp^.local_type,
heqtype ← infer_type heq,
heqsymm ← mk_eq_symm heq,
prf ← mk_eq_mpr heqsymm hyp,
return [(add_hyps, prf)]
meta def simp_inf : inf_decl := inf_decl.mk 40 $ take given, sequence' $ do
r ← [try_simplify_right, try_simplify_left],
i ← list.range given^.c^.num_lits,
[inf_if_successful 2 given (r given^.c i)]
end super