From e9dada5e146b632fca4376fb9ae9b0b56fe1fd77 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Mon, 17 Feb 2014 12:05:34 -0800 Subject: [PATCH] refactor(builtin/kernel): use standard definition for 'or' and 'and' Signed-off-by: Leonardo de Moura --- examples/lean/primes.lean | 7 - src/builtin/kernel.lean | 292 ++++++++++++++++++-------------- src/builtin/obj/kernel.olean | Bin 51309 -> 52554 bytes src/kernel/kernel_decls.cpp | 37 ++-- src/kernel/kernel_decls.h | 111 ++++++------ tests/lean/j5.lean | 2 +- tests/lean/j5.lean.expected.out | 2 +- tests/lean/j6.lean | 2 +- tests/lean/j6.lean.expected.out | 2 +- tests/lean/rs.lean.expected.out | 2 +- 10 files changed, 253 insertions(+), 204 deletions(-) diff --git a/examples/lean/primes.lean b/examples/lean/primes.lean index 29eb3a0d8..167800157 100644 --- a/examples/lean/primes.lean +++ b/examples/lean/primes.lean @@ -11,13 +11,6 @@ import macros import tactic using Nat --- --- could go in kernel --- - -theorem or_imp (p q : Bool) : (p ∨ q) ↔ (¬ p → q) -:= subst (symm (imp_or (¬ p) q)) (not_not_eq p) - -- -- fundamental properties of Nat -- diff --git a/src/builtin/kernel.lean b/src/builtin/kernel.lean index be3379248..7e06e7a93 100644 --- a/src/builtin/kernel.lean +++ b/src/builtin/kernel.lean @@ -43,12 +43,14 @@ alias ⊥ : false definition not (a : Bool) := a → false notation 40 ¬ _ : not -definition or (a b : Bool) := ¬ a → b +definition or (a b : Bool) +:= ∀ c : Bool, (a → c) → (b → c) → c infixr 30 || : or infixr 30 \/ : or infixr 30 ∨ : or -definition and (a b : Bool) := ¬ (a → ¬ b) +definition and (a b : Bool) +:= ∀ c : Bool, (a → b → c) → c infixr 35 && : and infixr 35 /\ : and infixr 35 ∧ : and @@ -65,9 +67,6 @@ definition iff (a b : Bool) := a = b infixr 25 <-> : iff infixr 25 ↔ : iff -theorem em (a : Bool) : a ∨ ¬ a -:= assume Hna : ¬ a, Hna - theorem not_intro {a : Bool} (H : a → false) : ¬ a := H @@ -102,15 +101,40 @@ theorem contrapos {a b : Bool} (H : a → b) : ¬ b → ¬ a theorem absurd_elim {a : Bool} (b : Bool) (H1 : a) (H2 : ¬ a) : b := false_elim b (absurd H1 H2) --- Recall that or is defined as ¬ a → b theorem or_introl {a : Bool} (H : a) (b : Bool) : a ∨ b -:= assume H1 : ¬ a, absurd_elim b H H1 +:= take c : Bool, + assume (H1 : a → c) (H2 : b → c), + H1 H theorem or_intror {b : Bool} (a : Bool) (H : b) : a ∨ b -:= assume H1 : ¬ a, H +:= take c : Bool, + assume (H1 : a → c) (H2 : b → c), + H2 H + +theorem or_elim {a b c : Bool} (H1 : a ∨ b) (H2 : a → c) (H3 : b → c) : c +:= H1 c H2 H3 theorem resolve1 {a b : Bool} (H1 : a ∨ b) (H2 : ¬ a) : b -:= H1 H2 +:= H1 b (assume Ha : a, absurd_elim b Ha H2) (assume Hb : b, Hb) + +theorem resolve2 {a b : Bool} (H1 : a ∨ b) (H2 : ¬ b) : a +:= H1 a (assume Ha : a, Ha) (assume Hb : b, absurd_elim a Hb H2) + +theorem or_flip {a b : Bool} (H : a ∨ b) : b ∨ a +:= take c : Bool, + assume (H1 : b → c) (H2 : a → c), + H c H2 H1 + +theorem and_intro {a b : Bool} (H1 : a) (H2 : b) : a ∧ b +:= take c : Bool, + assume H : a → b → c, + H H1 H2 + +theorem and_eliml {a b : Bool} (H : a ∧ b) : a +:= H a (assume (Ha : a) (Hb : b), Ha) + +theorem and_elimr {a b : Bool} (H : a ∧ b) : b +:= H b (assume (Ha : a) (Hb : b), Hb) axiom subst {A : (Type U)} {a b : A} {P : A → Bool} (H1 : P a) (H2 : a = b) : P b @@ -195,13 +219,17 @@ theorem eqf_elim {a : Bool} (H : a = false) : ¬ a theorem heqt_elim {a : Bool} (H : a == true) : a := eqt_elim (to_eq H) -axiom case (P : Bool → Bool) (H1 : P true) (H2 : P false) (a : Bool) : P a +axiom boolcomplete (a : Bool) : a = true ∨ a = false -theorem boolcomplete (a : Bool) : a = true ∨ a = false -:= case (λ x, x = true ∨ x = false) - (or_introl (refl true) (true = false)) - (or_intror (false = true) (refl false)) - a +theorem case (P : Bool → Bool) (H1 : P true) (H2 : P false) (a : Bool) : P a +:= or_elim (boolcomplete a) + (assume Ht : a = true, subst H1 (symm Ht)) + (assume Hf : a = false, subst H2 (symm Hf)) + +theorem em (a : Bool) : a ∨ ¬ a +:= or_elim (boolcomplete a) + (assume Ht : a = true, or_introl (eqt_elim Ht) (¬ a)) + (assume Hf : a = false, or_intror a (eqf_elim Hf)) theorem boolcomplete_swapped (a : Bool) : a = false ∨ a = true := case (λ x, x = false ∨ x = true) @@ -254,25 +282,6 @@ theorem not_imp_elimr {a b : Bool} (H : ¬ (a → b)) : ¬ b := assume Hb : b, absurd (assume Ha : a, Hb) H --- Recall that and is defined as ¬ (a → ¬ b) -theorem and_intro {a b : Bool} (H1 : a) (H2 : b) : a ∧ b -:= assume H : a → ¬ b, absurd H2 (H H1) - -theorem and_eliml {a b : Bool} (H : a ∧ b) : a -:= not_imp_eliml H - -theorem and_elimr {a b : Bool} (H : a ∧ b) : b -:= not_not_elim (not_imp_elimr H) - -theorem or_elim {a b c : Bool} (H1 : a ∨ b) (H2 : a → c) (H3 : b → c) : c -:= not_not_elim - (assume H : ¬ c, - absurd (H3 (resolve1 H1 (mt (assume Ha : a, H2 Ha) H))) - H) - -theorem by_contradiction {a : Bool} (H : ¬ a → false) : a -:= or_elim (em a) (λ H1 : a, H1) (λ H1 : ¬ a, false_elim a (H H1)) - theorem boolext {a b : Bool} (Hab : a → b) (Hba : b → a) : a = b := or_elim (boolcomplete a) (λ Hat : a = true, or_elim (boolcomplete b) @@ -294,6 +303,9 @@ theorem eqf_intro {a : Bool} (H : ¬ a) : a = false := boolext (assume H1 : a, absurd H1 H) (assume H2 : false, false_elim a H2) +theorem by_contradiction {a : Bool} (H : ¬ a → false) : a +:= or_elim (em a) (λ H1 : a, H1) (λ H1 : ¬ a, false_elim a (H H1)) + theorem a_neq_a {A : (Type U)} (a : A) : (a ≠ a) ↔ false := boolext (assume H, a_neq_a_elim H) (assume H, false_elim (a ≠ a) H) @@ -362,9 +374,6 @@ theorem or_left_comm (a b c : Bool) : a ∨ (b ∨ c) ↔ b ∨ (a ∨ c) add_rewrite or_comm or_assoc or_id or_falsel or_falser or_truel or_truer or_tauto or_left_comm -theorem resolve2 {a b : Bool} (H1 : a ∨ b) (H2 : ¬ b) : a -:= resolve1 ((or_comm a b) ◂ H1) H2 - 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)) @@ -430,6 +439,17 @@ theorem imp_or (a b : Bool) : (a → b) ↔ ¬ a ∨ b assume Ha : a, resolve1 H ((symm (not_not_eq a)) ◂ Ha)) +theorem or_imp (a b : Bool) : a ∨ b ↔ (¬ a → b) +:= boolext + (assume H : a ∨ b, + (or_elim H + (assume (Ha : a) (Hna : ¬ a), absurd_elim b Ha Hna) + (assume (Hb : b) (Hna : ¬ a), Hb))) + (assume H : ¬ a → b, + (or_elim (em a) + (assume Ha : a, or_introl Ha b) + (assume Hna : ¬ a, or_intror a (H Hna)))) + theorem not_congr {a b : Bool} (H : a ↔ b) : ¬ a ↔ ¬ b := congr2 not H @@ -509,6 +529,94 @@ theorem forall_rem {A : (Type U)} (H : inhabited A) (p : Bool) : (∀ x : A, p) (assume Hr : p, take x, Hr) + +theorem not_and (a b : Bool) : ¬ (a ∧ b) ↔ ¬ a ∨ ¬ b +:= boolext (assume H, or_elim (em a) + (assume Ha, or_elim (em b) + (assume Hb, absurd_elim (¬ a ∨ ¬ b) (and_intro Ha Hb) H) + (assume Hnb, or_intror (¬ a) Hnb)) + (assume Hna, or_introl Hna (¬ b))) + (assume (H : ¬ a ∨ ¬ b) (N : a ∧ b), + or_elim H + (assume Hna, absurd (and_eliml N) Hna) + (assume Hnb, absurd (and_elimr N) Hnb)) + +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 +:= boolext (assume H, or_elim (em a) + (assume Ha, absurd_elim (¬ a ∧ ¬ b) (or_introl Ha b) H) + (assume Hna, or_elim (em b) + (assume Hb, absurd_elim (¬ a ∧ ¬ b) (or_intror a Hb) H) + (assume Hnb, and_intro Hna Hnb))) + (assume (H : ¬ a ∧ ¬ b) (N : a ∨ b), + or_elim N + (assume Ha, absurd Ha (and_eliml H)) + (assume Hb, absurd Hb (and_elimr H))) + +theorem not_or_elim {a b : Bool} (H : ¬ (a ∨ b)) : ¬ a ∧ ¬ b +:= (not_or a b) ◂ H + +theorem not_implies (a b : Bool) : ¬ (a → b) ↔ a ∧ ¬ b +:= calc (¬ (a → b)) = ¬ (¬ a ∨ b) : { imp_or a b } + ... = ¬ ¬ a ∧ ¬ b : not_or (¬ a) b + ... = a ∧ ¬ b : congr2 (λ x, x ∧ ¬ b) (not_not_eq a) + +theorem and_imp (a b : Bool) : a ∧ b ↔ ¬ (a → ¬ b) +:= have H1 : a ∧ ¬ ¬ b ↔ ¬ (a → ¬ b), + from symm (not_implies a (¬ b)), + subst H1 (not_not_eq b) + +theorem not_implies_elim {a b : Bool} (H : ¬ (a → b)) : a ∧ ¬ b +:= (not_implies a b) ◂ H + +theorem a_eq_not_a (a : Bool) : (a = ¬ a) ↔ false +:= boolext (λ H, or_elim (em a) + (λ Ha, absurd Ha (subst Ha H)) + (λ Hna, absurd (subst Hna (symm H)) Hna)) + (λ H, false_elim (a = ¬ a) H) + +theorem a_iff_not_a (a : Bool) : (a ↔ ¬ a) ↔ false +:= a_eq_not_a a + +theorem true_eq_false : (true = false) ↔ false +:= subst (a_eq_not_a true) not_true + +theorem true_iff_false : (true ↔ false) ↔ false +:= true_eq_false + +theorem false_eq_true : (false = true) ↔ false +:= subst (a_eq_not_a false) not_false + +theorem false_iff_true : (false ↔ true) ↔ false +:= false_eq_true + +theorem a_iff_true (a : Bool) : (a ↔ true) ↔ a +:= boolext (λ H, eqt_elim H) + (λ H, eqt_intro H) + +theorem a_iff_false (a : Bool) : (a ↔ false) ↔ ¬ a +:= boolext (λ H, eqf_elim H) + (λ H, eqf_intro H) + +add_rewrite a_eq_not_a a_iff_not_a true_eq_false true_iff_false false_eq_true false_iff_true a_iff_true a_iff_false + +theorem not_iff (a b : Bool) : ¬ (a ↔ b) ↔ (¬ a ↔ b) +:= or_elim (em b) + (λ Hb, calc (¬ (a ↔ b)) = (¬ (a ↔ true)) : { eqt_intro Hb } + ... = ¬ a : { a_iff_true a } + ... = ¬ a ↔ true : { symm (a_iff_true (¬ a)) } + ... = ¬ a ↔ b : { symm (eqt_intro Hb) }) + (λ Hnb, calc (¬ (a ↔ b)) = (¬ (a ↔ false)) : { eqf_intro Hnb } + ... = ¬ ¬ a : { a_iff_false a } + ... = ¬ a ↔ false : { symm (a_iff_false (¬ a)) } + ... = ¬ a ↔ b : { symm (eqf_intro Hnb) }) + +theorem not_iff_elim {a b : Bool} (H : ¬ (a ↔ b)) : (¬ a) ↔ b +:= (not_iff a b) ◂ H + + -- Congruence theorems for contextual simplification -- Simplify a → b, by first simplifying a to c using the fact that ¬ b is true, and then @@ -575,105 +683,41 @@ theorem imp_congrl {a b c d : Bool} (H_bd : ∀ (H_a : a), b = d) (H_ac : ∀ (H theorem imp_congr {a b c d : Bool} (H_ac : a = c) (H_bd : ∀ (H_c : c), b = d) : (a → b) = (c → d) := imp_congrr (λ H, H_ac) H_bd --- In the following theorems we are using the fact that a ∨ b is defined as ¬ a → b theorem or_congrr {a b c d : Bool} (H_ac : ∀ (H_nb : ¬ b), a = c) (H_bd : ∀ (H_nc : ¬ c), b = d) : a ∨ b ↔ c ∨ d -:= imp_congrr (λ H_nb : ¬ b, congr2 not (H_ac H_nb)) H_bd +:= have H1 : (¬ a → b) ↔ (¬ c → d), + from imp_congrr (λ H_nb : ¬ b, congr2 not (H_ac H_nb)) H_bd, + calc (a ∨ b) = (¬ a → b) : or_imp _ _ + ... = (¬ c → d) : H1 + ... = c ∨ d : symm (or_imp _ _) + theorem or_congrl {a b c d : Bool} (H_bd : ∀ (H_na : ¬ a), b = d) (H_ac : ∀ (H_nd : ¬ d), a = c) : a ∨ b ↔ c ∨ d -:= imp_congrl H_bd (λ H_nd : ¬ d, congr2 not (H_ac H_nd)) +:= have H1 : (¬ a → b) ↔ (¬ c → d), + from imp_congrl H_bd (λ H_nd : ¬ d, congr2 not (H_ac H_nd)), + calc (a ∨ b) = (¬ a → b) : or_imp _ _ + ... = (¬ c → d) : H1 + ... = c ∨ d : symm (or_imp _ _) -- (Common case) simplify a to c, and then b to d using the fact that ¬ c is true theorem or_congr {a b c d : Bool} (H_ac : a = c) (H_bd : ∀ (H_nc : ¬ c), b = d) : a ∨ b ↔ c ∨ d := or_congrr (λ H, H_ac) H_bd --- In the following theorems we are using the fact hat a ∧ b is defined as ¬ (a → ¬ b) theorem and_congrr {a b c d : Bool} (H_ac : ∀ (H_b : b), a = c) (H_bd : ∀ (H_c : c), b = d) : a ∧ b ↔ c ∧ d -:= congr2 not (imp_congrr (λ (H_nnb : ¬ ¬ b), H_ac (not_not_elim H_nnb)) (λ H_c : c, congr2 not (H_bd H_c))) +:= have H1 : ¬ (a → ¬ b) ↔ ¬ (c → ¬ d), + from congr2 not (imp_congrr (λ (H_nnb : ¬ ¬ b), H_ac (not_not_elim H_nnb)) (λ H_c : c, congr2 not (H_bd H_c))), + calc (a ∧ b) = ¬ (a → ¬ b) : and_imp _ _ + ... = ¬ (c → ¬ d) : H1 + ... = c ∧ d : symm (and_imp _ _) + theorem and_congrl {a b c d : Bool} (H_bd : ∀ (H_a : a), b = d) (H_ac : ∀ (H_d : d), a = c) : a ∧ b ↔ c ∧ d -:= congr2 not (imp_congrl (λ H_a : a, congr2 not (H_bd H_a)) (λ (H_nnd : ¬ ¬ d), H_ac (not_not_elim H_nnd))) +:= have H1 : ¬ (a → ¬ b) ↔ ¬ (c → ¬ d), + from congr2 not (imp_congrl (λ H_a : a, congr2 not (H_bd H_a)) (λ (H_nnd : ¬ ¬ d), H_ac (not_not_elim H_nnd))), + calc (a ∧ b) = ¬ (a → ¬ b) : and_imp _ _ + ... = ¬ (c → ¬ d) : H1 + ... = c ∧ d : symm (and_imp _ _) + -- (Common case) simplify a to c, and then b to d using the fact that c is true theorem and_congr {a b c d : Bool} (H_ac : a = c) (H_bd : ∀ (H_c : c), b = d) : a ∧ b ↔ c ∧ d := and_congrr (λ H, H_ac) H_bd -theorem not_and (a b : Bool) : ¬ (a ∧ b) ↔ ¬ a ∨ ¬ b -:= boolext (assume H, or_elim (em a) - (assume Ha, or_elim (em b) - (assume Hb, absurd_elim (¬ a ∨ ¬ b) (and_intro Ha Hb) H) - (assume Hnb, or_intror (¬ a) Hnb)) - (assume Hna, or_introl Hna (¬ b))) - (assume (H : ¬ a ∨ ¬ b) (N : a ∧ b), - or_elim H - (assume Hna, absurd (and_eliml N) Hna) - (assume Hnb, absurd (and_elimr N) Hnb)) - -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 -:= boolext (assume H, or_elim (em a) - (assume Ha, absurd_elim (¬ a ∧ ¬ b) (or_introl Ha b) H) - (assume Hna, or_elim (em b) - (assume Hb, absurd_elim (¬ a ∧ ¬ b) (or_intror a Hb) H) - (assume Hnb, and_intro Hna Hnb))) - (assume (H : ¬ a ∧ ¬ b) (N : a ∨ b), - or_elim N - (assume Ha, absurd Ha (and_eliml H)) - (assume Hb, absurd Hb (and_elimr H))) - -theorem not_or_elim {a b : Bool} (H : ¬ (a ∨ b)) : ¬ a ∧ ¬ b -:= (not_or a b) ◂ H - -theorem not_implies (a b : Bool) : ¬ (a → b) ↔ a ∧ ¬ b -:= calc (¬ (a → b)) = ¬ (¬ a ∨ b) : { imp_or a b } - ... = ¬ ¬ a ∧ ¬ b : not_or (¬ a) b - ... = a ∧ ¬ b : congr2 (λ x, x ∧ ¬ b) (not_not_eq a) - -theorem not_implies_elim {a b : Bool} (H : ¬ (a → b)) : a ∧ ¬ b -:= (not_implies a b) ◂ H - -theorem a_eq_not_a (a : Bool) : (a = ¬ a) ↔ false -:= boolext (λ H, or_elim (em a) - (λ Ha, absurd Ha (subst Ha H)) - (λ Hna, absurd (subst Hna (symm H)) Hna)) - (λ H, false_elim (a = ¬ a) H) - -theorem a_iff_not_a (a : Bool) : (a ↔ ¬ a) ↔ false -:= a_eq_not_a a - -theorem true_eq_false : (true = false) ↔ false -:= subst (a_eq_not_a true) not_true - -theorem true_iff_false : (true ↔ false) ↔ false -:= true_eq_false - -theorem false_eq_true : (false = true) ↔ false -:= subst (a_eq_not_a false) not_false - -theorem false_iff_true : (false ↔ true) ↔ false -:= false_eq_true - -theorem a_iff_true (a : Bool) : (a ↔ true) ↔ a -:= boolext (λ H, eqt_elim H) - (λ H, eqt_intro H) - -theorem a_iff_false (a : Bool) : (a ↔ false) ↔ ¬ a -:= boolext (λ H, eqf_elim H) - (λ H, eqf_intro H) - -add_rewrite a_eq_not_a a_iff_not_a true_eq_false true_iff_false false_eq_true false_iff_true a_iff_true a_iff_false - -theorem not_iff (a b : Bool) : ¬ (a ↔ b) ↔ (¬ a ↔ b) -:= or_elim (em b) - (λ Hb, calc (¬ (a ↔ b)) = (¬ (a ↔ true)) : { eqt_intro Hb } - ... = ¬ a : { a_iff_true a } - ... = ¬ a ↔ true : { symm (a_iff_true (¬ a)) } - ... = ¬ a ↔ b : { symm (eqt_intro Hb) }) - (λ Hnb, calc (¬ (a ↔ b)) = (¬ (a ↔ false)) : { eqf_intro Hnb } - ... = ¬ ¬ a : { a_iff_false a } - ... = ¬ a ↔ false : { symm (a_iff_false (¬ a)) } - ... = ¬ a ↔ b : { symm (eqf_intro Hnb) }) - -theorem not_iff_elim {a b : Bool} (H : ¬ (a ↔ b)) : (¬ a) ↔ b -:= (not_iff a b) ◂ H - theorem forall_or_distributer {A : (Type U)} (p : Bool) (φ : A → Bool) : (∀ x, p ∨ φ x) = (p ∨ ∀ x, φ x) := boolext (assume H : (∀ x, p ∨ φ x), diff --git a/src/builtin/obj/kernel.olean b/src/builtin/obj/kernel.olean index 6dd8a2e9359661c94647c10e32757c41a33e6950..89828906083f545eb14cd62594a3925c0b72fb55 100644 GIT binary patch literal 52554 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