lean/Example.lean

91 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

2025-01-30 19:04:53 +00:00
open Or
open False renaming elim → negelim
2025-01-30 17:37:49 +00:00
variable (p q r : Prop)
2025-01-29 22:07:02 +00:00
2025-01-30 17:37:49 +00:00
-- commutativity of ∧ and
2025-01-30 18:04:57 +00:00
example : p ∧ q ↔ q ∧ p :=
2025-01-30 18:13:33 +00:00
⟨λ ⟨p,q⟩ => ⟨q,p⟩, λ ⟨q,p⟩ => ⟨p,q⟩⟩
2025-01-30 18:04:57 +00:00
example : p q ↔ q p :=
2025-01-30 18:13:33 +00:00
⟨λ
2025-01-30 19:04:53 +00:00
| inl p => inr p
| inr q => inl q,
2025-01-30 18:13:33 +00:00
λ
2025-01-30 19:04:53 +00:00
| inl q => inr q
| inr p => inl p⟩
2025-01-30 17:37:49 +00:00
-- associativity of ∧ and
2025-01-30 18:04:57 +00:00
example : (p ∧ q) ∧ r ↔ p ∧ (q ∧ r) :=
2025-01-30 18:13:33 +00:00
⟨λ ⟨⟨p,q⟩,r⟩ => ⟨p,⟨q,r⟩⟩, λ ⟨p,⟨q,r⟩⟩ => ⟨⟨p,q⟩,r⟩⟩
2025-01-30 18:04:57 +00:00
example : (p q) r ↔ p (q r) :=
2025-01-30 18:13:33 +00:00
⟨λ
2025-01-30 19:04:53 +00:00
| inr r => inr (inr r)
| inl (inr q) => inr (inl q)
| inl (inl p) => inl p,
2025-01-30 18:13:33 +00:00
λ
2025-01-30 19:04:53 +00:00
| inl p => inl (inl p)
| inr (inl q) => inl (inr q)
| inr (inr r) => inr r⟩
2025-01-30 17:37:49 +00:00
-- distributivity
2025-01-30 18:04:57 +00:00
example : p ∧ (q r) ↔ (p ∧ q) (p ∧ r) :=
2025-01-30 18:13:33 +00:00
⟨λ
2025-01-30 19:04:53 +00:00
| ⟨p, inl q⟩ => inl ⟨p,q⟩
| ⟨p, inr r⟩ => inr ⟨p,r⟩,
2025-01-30 18:13:33 +00:00
λ
2025-01-30 19:04:53 +00:00
| inl ⟨p,q⟩ => ⟨p,inl q⟩
| inr ⟨p,r⟩ => ⟨p,inr r⟩⟩
2025-01-30 18:04:57 +00:00
example : p (q ∧ r) ↔ (p q) ∧ (p r) :=
2025-01-30 18:13:33 +00:00
⟨λ
2025-01-30 19:04:53 +00:00
| inl p => ⟨inl p, inl p⟩
| inr ⟨q,r⟩ => ⟨inr q, inr r⟩,
2025-01-30 18:13:33 +00:00
λ
2025-01-30 19:04:53 +00:00
| ⟨inr q, inr r⟩ => inr ⟨q,r⟩
| ⟨inl p, _⟩ => inl p
| ⟨ _, inl p⟩ => inl p⟩
2025-01-30 17:37:49 +00:00
-- other properties
2025-01-30 18:04:57 +00:00
example : (p → (q → r)) ↔ (p ∧ q → r) :=
2025-01-30 18:13:33 +00:00
⟨λ f ⟨p,q⟩ => f p q,λ f p q => f ⟨p,q⟩⟩
2025-01-30 18:04:57 +00:00
example : ((p q) → r) ↔ (p → r) ∧ (q → r) :=
2025-01-30 18:13:33 +00:00
2025-01-30 19:04:53 +00:00
λ f => ⟨λ p => f (inl p), λ q => f (inr q)⟩,
2025-01-30 18:13:33 +00:00
λ
2025-01-30 19:04:53 +00:00
|⟨f, _⟩, inl p => f p
|⟨_, g⟩, inr q => g q⟩
2025-01-30 18:04:57 +00:00
example : ¬(p q) ↔ ¬p ∧ ¬q :=
2025-01-30 19:04:53 +00:00
⟨λ f => ⟨λ p => f (inl p), λ q => f (inr q)⟩,
2025-01-30 18:13:33 +00:00
λ
2025-01-30 19:04:53 +00:00
| ⟨np, _⟩, inl p => np p
| ⟨_ ,nq⟩, inr q => nq q⟩
2025-01-30 18:04:57 +00:00
example : ¬p ¬q → ¬(p ∧ q)
2025-01-30 19:04:53 +00:00
| inl np, ⟨p,_⟩ => np p
| inr nq, ⟨_,q⟩ => nq q
2025-01-30 18:04:57 +00:00
example : ¬(p ∧ ¬p) :=
λ ⟨p,np⟩ => np p
2025-01-30 17:37:49 +00:00
example : p ∧ ¬q → ¬(p → q) :=
λ ⟨p,nq⟩ ptoq => nq (ptoq p)
example : ¬p → (p → q) :=
λ np p => absurd p np
example : (¬p q) → (p → q)
2025-01-30 19:04:53 +00:00
| (inl np), p => absurd p np
| (inr q), _ => q
2025-01-30 17:37:49 +00:00
2025-01-30 18:04:57 +00:00
example : p False ↔ p :=
2025-01-30 19:04:53 +00:00
⟨λ h => elim h id negelim, λ p => inl p⟩
2025-01-30 17:37:49 +00:00
2025-01-30 18:04:57 +00:00
example : p ∧ False ↔ False :=
2025-01-30 19:04:53 +00:00
⟨λ ⟨_,f⟩ => f, λ f => negelim f⟩
2025-01-30 17:37:49 +00:00
example : (p → q) → (¬q → ¬p) :=
2025-01-30 18:13:33 +00:00
λ f nq p => absurd (f p) nq