cleaner
This commit is contained in:
parent
ea9436dfbc
commit
b5497fbe3e
194
Example.lean
194
Example.lean
@ -1,133 +1,81 @@
|
|||||||
variable (p q r : Prop)
|
variable (p q r : Prop)
|
||||||
|
|
||||||
-- commutativity of ∧ and ∨
|
-- commutativity of ∧ and ∨
|
||||||
example : p ∧ q ↔ q ∧ p := by
|
example : p ∧ q ↔ q ∧ p :=
|
||||||
apply Iff.intro
|
Iff.intro (λ ⟨p,q⟩ => ⟨q,p⟩) (λ ⟨q,p⟩ => ⟨p,q⟩)
|
||||||
· intro pandq
|
|
||||||
apply And.intro
|
|
||||||
· apply And.right pandq
|
|
||||||
· apply And.left pandq
|
|
||||||
· intro qandp
|
|
||||||
apply And.intro
|
|
||||||
· apply And.right qandp
|
|
||||||
· apply And.left qandp
|
|
||||||
|
|
||||||
example : p ∨ q ↔ q ∨ p := by
|
example : p ∨ q ↔ q ∨ p :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro porq
|
(λ
|
||||||
cases porq with
|
| Or.inl p => Or.inr p
|
||||||
| inl p => exact Or.inr p
|
| Or.inr q => Or.inl q)
|
||||||
| inr q => exact Or.inl q
|
(λ
|
||||||
· intro qorp
|
| Or.inl q => Or.inr q
|
||||||
cases qorp with
|
| Or.inr p => Or.inl p)
|
||||||
| inl q => exact Or.inr q
|
|
||||||
| inr p => exact Or.inl p
|
|
||||||
|
|
||||||
-- associativity of ∧ and ∨
|
-- associativity of ∧ and ∨
|
||||||
example : (p ∧ q) ∧ r ↔ p ∧ (q ∧ r) := by
|
example : (p ∧ q) ∧ r ↔ p ∧ (q ∧ r) :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro pqandr
|
(λ ⟨⟨p,q⟩,r⟩ => ⟨p,⟨q,r⟩⟩)
|
||||||
apply And.intro
|
(λ ⟨p,⟨q,r⟩⟩ => ⟨⟨p,q⟩,r⟩)
|
||||||
· exact And.left (And.left pqandr)
|
|
||||||
· apply And.intro
|
|
||||||
· exact And.right (And.left pqandr)
|
|
||||||
· exact And.right pqandr
|
|
||||||
· intro pandqr
|
|
||||||
apply And.intro
|
|
||||||
· apply And.intro
|
|
||||||
· exact And.left pandqr
|
|
||||||
· exact And.left (And.right pandqr)
|
|
||||||
· exact And.right (And.right pandqr)
|
|
||||||
|
|
||||||
example : (p ∨ q) ∨ r ↔ p ∨ (q ∨ r) := by
|
example : (p ∨ q) ∨ r ↔ p ∨ (q ∨ r) :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro pqorr
|
(λ
|
||||||
cases pqorr with
|
| Or.inr r => Or.inr (Or.inr r)
|
||||||
| inr r => apply Or.inr (Or.inr r)
|
| Or.inl (Or.inr q) => Or.inr (Or.inl q)
|
||||||
| inl porq => cases porq with
|
| Or.inl (Or.inl p) => Or.inl p)
|
||||||
| inl p => apply Or.inl p
|
(λ
|
||||||
| inr q => apply Or.inr (Or.inl q)
|
| Or.inl p => Or.inl (Or.inl p)
|
||||||
· intro porqr
|
| Or.inr (Or.inl q) => Or.inl (Or.inr q)
|
||||||
cases porqr with
|
| Or.inr (Or.inr r) => Or.inr r)
|
||||||
| inl p => apply Or.inl (Or.inl p)
|
|
||||||
| inr qorr => cases qorr with
|
|
||||||
| inr r => apply Or.inr r
|
|
||||||
| inl q => apply Or.inl (Or.inr q)
|
|
||||||
|
|
||||||
-- distributivity
|
-- distributivity
|
||||||
example : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by
|
example : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro pandqorr
|
(λ
|
||||||
cases pandqorr with
|
| ⟨p, Or.inl q⟩ => Or.inl ⟨p,q⟩
|
||||||
| intro p qor => cases qor with
|
| ⟨p, Or.inr r⟩ => Or.inr ⟨p,r⟩)
|
||||||
| inl q => apply Or.inl (And.intro p q)
|
(λ
|
||||||
| inr r => apply Or.inr (And.intro p r)
|
| Or.inl ⟨p,q⟩ => ⟨p,Or.inl q⟩
|
||||||
· intro pandqorpandr
|
| Or.inr ⟨p,r⟩ => ⟨p,Or.inr r⟩)
|
||||||
cases pandqorpandr with
|
|
||||||
| inl pandq => apply And.intro (And.left pandq) (Or.inl (And.right pandq))
|
|
||||||
| inr pandr => apply And.intro (And.left pandr) (Or.inr (And.right pandr))
|
|
||||||
|
|
||||||
example : p ∨ (q ∧ r) ↔ (p ∨ q) ∧ (p ∨ r) := by
|
example : p ∨ (q ∧ r) ↔ (p ∨ q) ∧ (p ∨ r) :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro porqandr
|
(λ
|
||||||
cases porqandr with
|
| Or.inl p => ⟨Or.inl p, Or.inl p⟩
|
||||||
| inl p => apply And.intro (Or.inl p) (Or.inl p)
|
| Or.inr ⟨q,r⟩ => ⟨Or.inr q, Or.inr r⟩)
|
||||||
| inr qandr => apply And.intro (Or.inr (And.left qandr)) (Or.inr (And.right qandr))
|
(λ
|
||||||
· intro porqandporr
|
| ⟨Or.inr q, Or.inr r⟩ => Or.inr ⟨q,r⟩
|
||||||
cases And.left porqandporr with
|
| ⟨Or.inl p, _⟩ => Or.inl p
|
||||||
| inl p => apply Or.inl p
|
| ⟨ _, Or.inl p⟩ => Or.inl p)
|
||||||
| inr q => cases And.right porqandporr with
|
|
||||||
| inl p => apply Or.inl p
|
|
||||||
| inr r => apply Or.inr (And.intro q r)
|
|
||||||
|
|
||||||
-- other properties
|
-- other properties
|
||||||
example : (p → (q → r)) ↔ (p ∧ q → r) := by
|
example : (p → (q → r)) ↔ (p ∧ q → r) :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro ptoqtor
|
(λ f ⟨p,q⟩ => f p q)
|
||||||
intro pandq
|
(λ f p q => f ⟨p,q⟩)
|
||||||
exact ptoqtor (And.left pandq) (And.right pandq)
|
|
||||||
· intro pandqtor
|
|
||||||
intro p
|
|
||||||
intro q
|
|
||||||
exact pandqtor (And.intro p q)
|
|
||||||
|
|
||||||
example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) := by
|
example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro porqtor
|
(λ porqtor => And.intro (λ p => porqtor (Or.inl p)) (λ q => porqtor (Or.inr q)))
|
||||||
apply And.intro
|
(λ
|
||||||
· intro p
|
|⟨f, _⟩, Or.inl p => f p
|
||||||
exact porqtor (Or.inl p)
|
|⟨_, g⟩, Or.inr q => g q)
|
||||||
· intro q
|
|
||||||
exact porqtor (Or.inr q)
|
|
||||||
· intro ptorandqtor
|
|
||||||
intro porq
|
|
||||||
cases porq with
|
|
||||||
| inl p => exact (And.left ptorandqtor) p
|
|
||||||
| inr q => exact (And.right ptorandqtor) q
|
|
||||||
|
|
||||||
example : ¬(p ∨ q) ↔ ¬p ∧ ¬q := by
|
example : ¬(p ∨ q) ↔ ¬p ∧ ¬q :=
|
||||||
apply Iff.intro
|
Iff.intro
|
||||||
· intro nporq
|
(λ nporq => And.intro (λ p => nporq (Or.inl p)) (λ q => nporq (Or.inr q)))
|
||||||
apply And.intro
|
(λ
|
||||||
· intro p
|
| ⟨np, _⟩, Or.inl p => np p
|
||||||
exact nporq (Or.inl p)
|
| ⟨_ ,nq⟩, Or.inr q => nq q)
|
||||||
· intro q
|
|
||||||
exact nporq (Or.inr q)
|
|
||||||
· intro npandnq
|
|
||||||
intro porq
|
|
||||||
cases porq with
|
|
||||||
| inl p => exact (And.left npandnq) p
|
|
||||||
| inr q => exact (And.right npandnq) q
|
|
||||||
|
|
||||||
example : ¬p ∨ ¬q → ¬(p ∧ q) := by
|
example : ¬p ∨ ¬q → ¬(p ∧ q)
|
||||||
intro npornq
|
| Or.inl np, ⟨p,_⟩ => np p
|
||||||
cases npornq with
|
| Or.inr nq, ⟨_,q⟩ => nq q
|
||||||
| inl np => intro pandq; exact np (And.left pandq)
|
|
||||||
| inr nq => intro pandq; exact nq (And.right pandq)
|
|
||||||
|
|
||||||
example : ¬(p ∧ ¬p) := by
|
example : ¬(p ∧ ¬p) :=
|
||||||
intro pandnp
|
λ ⟨p,np⟩ => np p
|
||||||
exact (And.right pandnp) (And.left pandnp)
|
|
||||||
|
|
||||||
example : p ∧ ¬q → ¬(p → q) :=
|
example : p ∧ ¬q → ¬(p → q) :=
|
||||||
λ ⟨p,nq⟩ ptoq => nq (ptoq p)
|
λ ⟨p,nq⟩ ptoq => nq (ptoq p)
|
||||||
@ -139,21 +87,11 @@ example : (¬p ∨ q) → (p → q)
|
|||||||
| (Or.inl np), p => absurd p np
|
| (Or.inl np), p => absurd p np
|
||||||
| (Or.inr q), _ => q
|
| (Or.inr q), _ => q
|
||||||
|
|
||||||
example : p ∨ False ↔ p := by
|
example : p ∨ False ↔ p :=
|
||||||
apply Iff.intro
|
Iff.intro (λ porf => Or.elim porf id False.elim) (λ p => Or.inl p)
|
||||||
· intro porf
|
|
||||||
apply Or.elim porf id False.elim
|
|
||||||
· intro p
|
|
||||||
apply Or.inl p
|
|
||||||
|
|
||||||
|
|
||||||
example : p ∧ False ↔ False := by
|
|
||||||
apply Iff.intro
|
|
||||||
· intro ⟨p,f⟩
|
|
||||||
exact f
|
|
||||||
· intro f
|
|
||||||
apply False.elim f
|
|
||||||
|
|
||||||
|
example : p ∧ False ↔ False :=
|
||||||
|
Iff.intro (λ ⟨_,f⟩ => f) (λ f => False.elim f)
|
||||||
|
|
||||||
example : (p → q) → (¬q → ¬p) :=
|
example : (p → q) → (¬q → ¬p) :=
|
||||||
λ ptoq nq p => absurd (ptoq p) nq
|
λ ptoq nq p => absurd (ptoq p) nq
|
||||||
|
Loading…
Reference in New Issue
Block a user