From 1176093afaf40d2ab168228b1740c13227a09449 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Wed, 15 Jan 2014 14:42:00 -0800 Subject: [PATCH] refactor(library/simplifier): simplifier should only use homogeneous equalities Signed-off-by: Leonardo de Moura --- src/builtin/kernel.lean | 126 ++++++++++++++++----------------- src/builtin/obj/kernel.olean | Bin 24110 -> 24749 bytes src/library/simplifier/ceq.cpp | 13 ++-- 3 files changed, 69 insertions(+), 70 deletions(-) diff --git a/src/builtin/kernel.lean b/src/builtin/kernel.lean index 2c5770bf9..c09f11449 100644 --- a/src/builtin/kernel.lean +++ b/src/builtin/kernel.lean @@ -77,14 +77,14 @@ theorem trivial : true theorem absurd {a : Bool} (H1 : a) (H2 : ¬ a) : false := H2 H1 -theorem eqmp {a b : Bool} (H1 : a == b) (H2 : a) : b +theorem eqmp {a b : Bool} (H1 : a = b) (H2 : a) : b := subst H2 H1 infixl 100 <| : eqmp infixl 100 ◂ : eqmp -theorem boolcomplete (a : Bool) : a == true ∨ a == false -:= case (λ x, x == true ∨ x == false) trivial trivial a +theorem boolcomplete (a : Bool) : a = true ∨ a = false +:= case (λ x, x = true ∨ x = false) trivial trivial a theorem false_elim (a : Bool) (H : false) : a := case (λ x, x) trivial H a @@ -92,14 +92,14 @@ theorem false_elim (a : Bool) (H : false) : a theorem imp_trans {a b c : Bool} (H1 : a → b) (H2 : b → c) : a → c := assume Ha, H2 (H1 Ha) -theorem imp_eq_trans {a b c : Bool} (H1 : a → b) (H2 : b == c) : a → c +theorem imp_eq_trans {a b c : Bool} (H1 : a → b) (H2 : b = c) : a → c := assume Ha, H2 ◂ (H1 Ha) -theorem eq_imp_trans {a b c : Bool} (H1 : a == b) (H2 : b → c) : a → c +theorem eq_imp_trans {a b c : Bool} (H1 : a = b) (H2 : b → c) : a → c := assume Ha, H2 (H1 ◂ Ha) -theorem not_not_eq (a : Bool) : (¬ ¬ a) == a -:= case (λ x, (¬ ¬ x) == x) trivial trivial a +theorem not_not_eq (a : Bool) : (¬ ¬ a) = a +:= case (λ x, (¬ ¬ x) = x) trivial trivial a theorem not_not_elim {a : Bool} (H : ¬ ¬ a) : a := (not_not_eq a) ◂ H @@ -169,10 +169,10 @@ theorem eq_ne_trans {A : TypeU} {a b c : A} (H1 : a = b) (H2 : b ≠ c) : a ≠ theorem ne_eq_trans {A : TypeU} {a b c : A} (H1 : a ≠ b) (H2 : b = c) : a ≠ c := subst H1 H2 -theorem eqt_elim {a : Bool} (H : a == true) : a +theorem eqt_elim {a : Bool} (H : a = true) : a := (symm H) ◂ trivial -theorem eqf_elim {a : Bool} (H : a == false) : ¬ a +theorem eqf_elim {a : Bool} (H : a = false) : ¬ a := not_intro (λ Ha : a, H ◂ Ha) theorem congr1 {A : TypeU} {B : A → TypeU} {f g : ∀ x : A, B x} (a : A) (H : f == g) : f a == g a @@ -194,31 +194,31 @@ theorem exists_intro {A : TypeU} {P : A → Bool} (a : A) (H : P a) : Exists A P := assume H1 : (∀ x : A, ¬ P x), absurd H (H1 a) -theorem boolext {a b : Bool} (Hab : a → b) (Hba : b → a) : a == b +theorem boolext {a b : Bool} (Hab : a → b) (Hba : b → a) : a = b := or_elim (boolcomplete a) - (λ Hat : a == true, or_elim (boolcomplete b) - (λ Hbt : b == true, trans Hat (symm Hbt)) - (λ Hbf : b == false, false_elim (a == b) (subst (Hab (eqt_elim Hat)) Hbf))) - (λ Haf : a == false, or_elim (boolcomplete b) - (λ Hbt : b == true, false_elim (a == b) (subst (Hba (eqt_elim Hbt)) Haf)) - (λ Hbf : b == false, trans Haf (symm Hbf))) + (λ Hat : a = true, or_elim (boolcomplete b) + (λ Hbt : b = true, trans Hat (symm Hbt)) + (λ Hbf : b = false, false_elim (a = b) (subst (Hab (eqt_elim Hat)) Hbf))) + (λ Haf : a = false, or_elim (boolcomplete b) + (λ Hbt : b = true, false_elim (a = b) (subst (Hba (eqt_elim Hbt)) Haf)) + (λ Hbf : b = false, trans Haf (symm Hbf))) -theorem iff_intro {a b : Bool} (Hab : a → b) (Hba : b → a) : a == b +theorem iff_intro {a b : Bool} (Hab : a → b) (Hba : b → a) : a = b := boolext Hab Hba -theorem eqt_intro {a : Bool} (H : a) : a == true +theorem eqt_intro {a : Bool} (H : a) : a = true := boolext (assume H1 : a, trivial) (assume H2 : true, H) -theorem eqf_intro {a : Bool} (H : ¬ a) : a == false +theorem eqf_intro {a : Bool} (H : ¬ a) : a = false := boolext (assume H1 : a, absurd H1 H) (assume H2 : false, false_elim a H2) -theorem or_comm (a b : Bool) : (a ∨ b) == (b ∨ a) +theorem or_comm (a b : Bool) : (a ∨ b) = (b ∨ a) := boolext (assume H, or_elim H (λ H1, or_intror b H1) (λ H2, or_introl H2 a)) (assume H, or_elim H (λ H1, or_intror a H1) (λ H2, or_introl H2 b)) -theorem or_assoc (a b c : Bool) : ((a ∨ b) ∨ c) == (a ∨ (b ∨ c)) +theorem or_assoc (a b c : Bool) : ((a ∨ b) ∨ c) = (a ∨ (b ∨ c)) := boolext (assume H : (a ∨ b) ∨ c, or_elim H (λ H1 : a ∨ b, or_elim H1 (λ Ha : a, or_introl Ha (b ∨ c)) (λ Hb : b, or_intror a (or_introl Hb c))) @@ -228,118 +228,118 @@ theorem or_assoc (a b c : Bool) : ((a ∨ b) ∨ c) == (a ∨ (b ∨ c)) (λ H1 : b ∨ c, or_elim H1 (λ Hb : b, or_introl (or_intror a Hb) c) (λ Hc : c, or_intror (a ∨ b) Hc))) -theorem or_id (a : Bool) : (a ∨ a) == a +theorem or_id (a : Bool) : (a ∨ a) = a := boolext (assume H, or_elim H (λ H1, H1) (λ H2, H2)) (assume H, or_introl H a) -theorem or_falsel (a : Bool) : (a ∨ false) == a +theorem or_falsel (a : Bool) : (a ∨ false) = a := boolext (assume H, or_elim H (λ H1, H1) (λ H2, false_elim a H2)) (assume H, or_introl H false) -theorem or_falser (a : Bool) : (false ∨ a) == a +theorem or_falser (a : Bool) : (false ∨ a) = a := (or_comm false a) ⋈ (or_falsel a) -theorem or_truel (a : Bool) : (true ∨ a) == true +theorem or_truel (a : Bool) : (true ∨ a) = true := eqt_intro (case (λ x : Bool, true ∨ x) trivial trivial a) -theorem or_truer (a : Bool) : (a ∨ true) == true +theorem or_truer (a : Bool) : (a ∨ true) = true := (or_comm a true) ⋈ (or_truel a) -theorem or_tauto (a : Bool) : (a ∨ ¬ a) == true +theorem or_tauto (a : Bool) : (a ∨ ¬ a) = true := eqt_intro (em a) -theorem and_comm (a b : Bool) : (a ∧ b) == (b ∧ a) +theorem and_comm (a b : Bool) : (a ∧ b) = (b ∧ a) := boolext (assume H, and_intro (and_elimr H) (and_eliml H)) (assume H, and_intro (and_elimr H) (and_eliml H)) -theorem and_id (a : Bool) : (a ∧ a) == a +theorem and_id (a : Bool) : (a ∧ a) = a := boolext (assume H, and_eliml H) (assume H, and_intro H H) -theorem and_assoc (a b c : Bool) : ((a ∧ b) ∧ c) == (a ∧ (b ∧ c)) +theorem and_assoc (a b c : Bool) : ((a ∧ b) ∧ c) = (a ∧ (b ∧ c)) := boolext (assume H, and_intro (and_eliml (and_eliml H)) (and_intro (and_elimr (and_eliml H)) (and_elimr H))) (assume H, and_intro (and_intro (and_eliml H) (and_eliml (and_elimr H))) (and_elimr (and_elimr H))) -theorem and_truer (a : Bool) : (a ∧ true) == a +theorem and_truer (a : Bool) : (a ∧ true) = a := boolext (assume H : a ∧ true, and_eliml H) (assume H : a, and_intro H trivial) -theorem and_truel (a : Bool) : (true ∧ a) == a +theorem and_truel (a : Bool) : (true ∧ a) = a := trans (and_comm true a) (and_truer a) -theorem and_falsel (a : Bool) : (a ∧ false) == false +theorem and_falsel (a : Bool) : (a ∧ false) = false := boolext (assume H, and_elimr H) (assume H, false_elim (a ∧ false) H) -theorem and_falser (a : Bool) : (false ∧ a) == false +theorem and_falser (a : Bool) : (false ∧ a) = false := (and_comm false a) ⋈ (and_falsel a) -theorem and_absurd (a : Bool) : (a ∧ ¬ a) == false +theorem and_absurd (a : Bool) : (a ∧ ¬ a) = false := boolext (assume H, absurd (and_eliml H) (and_elimr H)) (assume H, false_elim (a ∧ ¬ a) H) -theorem imp_truer (a : Bool) : (a → true) == true -:= case (λ x, (x → true) == true) trivial trivial a +theorem imp_truer (a : Bool) : (a → true) = true +:= case (λ x, (x → true) = true) trivial trivial a -theorem imp_truel (a : Bool) : (true → a) == a -:= case (λ x, (true → x) == x) trivial trivial a +theorem imp_truel (a : Bool) : (true → a) = a +:= case (λ x, (true → x) = x) trivial trivial a -theorem imp_falser (a : Bool) : (a → false) == ¬ a +theorem imp_falser (a : Bool) : (a → false) = ¬ a := refl _ -theorem imp_falsel (a : Bool) : (false → a) == true -:= case (λ x, (false → x) == true) trivial trivial a +theorem imp_falsel (a : Bool) : (false → a) = true +:= case (λ x, (false → x) = true) trivial trivial a -theorem not_and (a b : Bool) : (¬ (a ∧ b)) == (¬ a ∨ ¬ b) -:= case (λ x, (¬ (x ∧ b)) == (¬ x ∨ ¬ b)) - (case (λ y, (¬ (true ∧ y)) == (¬ true ∨ ¬ y)) trivial trivial b) - (case (λ y, (¬ (false ∧ y)) == (¬ false ∨ ¬ y)) trivial trivial b) +theorem not_and (a b : Bool) : (¬ (a ∧ b)) = (¬ a ∨ ¬ b) +:= case (λ x, (¬ (x ∧ b)) = (¬ x ∨ ¬ b)) + (case (λ y, (¬ (true ∧ y)) = (¬ true ∨ ¬ y)) trivial trivial b) + (case (λ y, (¬ (false ∧ y)) = (¬ false ∨ ¬ y)) trivial trivial b) a theorem not_and_elim {a b : Bool} (H : ¬ (a ∧ b)) : ¬ a ∨ ¬ b := (not_and a b) ◂ H -theorem not_or (a b : Bool) : (¬ (a ∨ b)) == (¬ a ∧ ¬ b) -:= case (λ x, (¬ (x ∨ b)) == (¬ x ∧ ¬ b)) - (case (λ y, (¬ (true ∨ y)) == (¬ true ∧ ¬ y)) trivial trivial b) - (case (λ y, (¬ (false ∨ y)) == (¬ false ∧ ¬ y)) trivial trivial b) +theorem not_or (a b : Bool) : (¬ (a ∨ b)) = (¬ a ∧ ¬ b) +:= case (λ x, (¬ (x ∨ b)) = (¬ x ∧ ¬ b)) + (case (λ y, (¬ (true ∨ y)) = (¬ true ∧ ¬ y)) trivial trivial b) + (case (λ y, (¬ (false ∨ y)) = (¬ false ∧ ¬ y)) trivial trivial b) a theorem not_or_elim {a b : Bool} (H : ¬ (a ∨ b)) : ¬ a ∧ ¬ b := (not_or a b) ◂ H -theorem not_iff (a b : Bool) : (¬ (a == b)) == ((¬ a) == b) -:= case (λ x, (¬ (x == b)) == ((¬ x) == b)) - (case (λ y, (¬ (true == y)) == ((¬ true) == y)) trivial trivial b) - (case (λ y, (¬ (false == y)) == ((¬ false) == y)) trivial trivial b) +theorem not_iff (a b : Bool) : (¬ (a = b)) = ((¬ a) = b) +:= case (λ x, (¬ (x = b)) = ((¬ x) = b)) + (case (λ y, (¬ (true = y)) = ((¬ true) = y)) trivial trivial b) + (case (λ y, (¬ (false = y)) = ((¬ false) = y)) trivial trivial b) a -theorem not_iff_elim {a b : Bool} (H : ¬ (a == b)) : (¬ a) == b +theorem not_iff_elim {a b : Bool} (H : ¬ (a = b)) : (¬ a) = b := (not_iff a b) ◂ H -theorem not_implies (a b : Bool) : (¬ (a → b)) == (a ∧ ¬ b) -:= case (λ x, (¬ (x → b)) == (x ∧ ¬ b)) - (case (λ y, (¬ (true → y)) == (true ∧ ¬ y)) trivial trivial b) - (case (λ y, (¬ (false → y)) == (false ∧ ¬ y)) trivial trivial b) +theorem not_implies (a b : Bool) : (¬ (a → b)) = (a ∧ ¬ b) +:= case (λ x, (¬ (x → b)) = (x ∧ ¬ b)) + (case (λ y, (¬ (true → y)) = (true ∧ ¬ y)) trivial trivial b) + (case (λ y, (¬ (false → y)) = (false ∧ ¬ y)) trivial trivial b) a theorem not_implies_elim {a b : Bool} (H : ¬ (a → b)) : a ∧ ¬ b := (not_implies a b) ◂ H -theorem not_congr {a b : Bool} (H : a == b) : (¬ a) == (¬ b) +theorem not_congr {a b : Bool} (H : a = b) : (¬ a) = (¬ b) := congr2 not H -theorem eq_exists_intro {A : (Type U)} {P Q : A → Bool} (H : ∀ x : A, P x == Q x) : (∃ x : A, P x) == (∃ x : A, Q x) +theorem eq_exists_intro {A : (Type U)} {P Q : A → Bool} (H : ∀ x : A, P x = Q x) : (∃ x : A, P x) = (∃ x : A, Q x) := congr2 (Exists A) (funext H) -theorem not_forall (A : (Type U)) (P : A → Bool) : (¬ (∀ x : A, P x)) == (∃ x : A, ¬ P x) +theorem not_forall (A : (Type U)) (P : A → Bool) : (¬ (∀ x : A, P x)) = (∃ x : A, ¬ P x) := calc (¬ ∀ x : A, P x) = (¬ ∀ x : A, ¬ ¬ P x) : not_congr (allext (λ x : A, symm (not_not_eq (P x)))) ... = (∃ x : A, ¬ P x) : refl (∃ x : A, ¬ P x) theorem not_forall_elim {A : (Type U)} {P : A → Bool} (H : ¬ (∀ x : A, P x)) : ∃ x : A, ¬ P x := (not_forall A P) ◂ H -theorem not_exists (A : (Type U)) (P : A → Bool) : (¬ ∃ x : A, P x) == (∀ x : A, ¬ P x) +theorem not_exists (A : (Type U)) (P : A → Bool) : (¬ ∃ x : A, P x) = (∀ x : A, ¬ P x) := calc (¬ ∃ x : A, P x) = (¬ ¬ ∀ x : A, ¬ P x) : refl (¬ ∃ x : A, P x) ... = (∀ x : A, ¬ P x) : not_not_eq (∀ x : A, ¬ P x) diff --git a/src/builtin/obj/kernel.olean b/src/builtin/obj/kernel.olean index 4e34ee73e69d8f13454c5cfd262cc9b22e4b8ea8..8bf6de6fd17102a526c22217279f385cda79a67c 100644 GIT binary patch literal 24749 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 literal 24110 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 diff --git a/src/library/simplifier/ceq.cpp b/src/library/simplifier/ceq.cpp index e7d957a0b..18ee9fecc 100644 --- a/src/library/simplifier/ceq.cpp +++ b/src/library/simplifier/ceq.cpp @@ -11,7 +11,6 @@ Author: Leonardo de Moura #include "library/expr_pair.h" #include "library/ite.h" #include "library/kernel_bindings.h" -#include "library/eq_heq.h" namespace lean { static name g_Hc("Hc"); // auxiliary name for if-then-else @@ -45,11 +44,11 @@ class to_ceqs_fn { } list apply(expr const & e, expr const & H) { - if (is_eq(e) || is_heq(e)) { + if (is_eq(e)) { return mk_singleton(e, H); } else if (is_not(e)) { expr a = arg(e, 1); - expr new_e = mk_heq(a, False); + expr new_e = mk_eq(Bool, a, False); expr new_H = mk_eqf_intro_th(a, H); return mk_singleton(new_e, new_H); } else if (is_and(e)) { @@ -93,7 +92,7 @@ class to_ceqs_fn { }); return append(new_then_ceqs, new_else_ceqs); } else { - return mk_singleton(mk_heq(e, True), mk_eqt_intro_th(e, H)); + return mk_singleton(mk_eq(Bool, e, True), mk_eqt_intro_th(e, H)); } } public: @@ -118,10 +117,10 @@ bool is_ceq(ro_environment const & env, expr e) { ctx = extend(ctx, abst_name(e), abst_domain(e)); e = abst_body(e); } - if (is_eq_heq(e)) { - auto lhs_rhs = eq_heq_args(e); + if (is_eq(e)) { + expr lhs = arg(e, 2); // traverse lhs, and mark all variables that occur there in is_lhs. - for_each(lhs_rhs.first, [&](expr const & e, unsigned offset) { + for_each(lhs, [&](expr const & e, unsigned offset) { if (is_var(e)) { unsigned vidx = var_idx(e); if (vidx >= offset) {