This commit is contained in:
2025-01-30 19:04:57 +01:00
parent ea9436dfbc
commit b5497fbe3e

View File

@ -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