From e9a3863eafff94bd059f485d36a94df034daa045 Mon Sep 17 00:00:00 2001 From: pingu Date: Thu, 30 Jan 2025 19:13:33 +0100 Subject: [PATCH] Even more clean --- Example.lean | 73 +++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/Example.lean b/Example.lean index 311e88c..0ed7026 100644 --- a/Example.lean +++ b/Example.lean @@ -2,73 +2,64 @@ variable (p q r : Prop) -- commutativity of ∧ and ∨ example : p ∧ q ↔ q ∧ p := - Iff.intro (λ ⟨p,q⟩ => ⟨q,p⟩) (λ ⟨q,p⟩ => ⟨p,q⟩) + ⟨λ ⟨p,q⟩ => ⟨q,p⟩, λ ⟨q,p⟩ => ⟨p,q⟩⟩ example : p ∨ q ↔ q ∨ p := - Iff.intro - (λ - | Or.inl p => Or.inr p - | Or.inr q => Or.inl q) - (λ - | Or.inl q => Or.inr q - | Or.inr p => Or.inl p) + ⟨λ + | Or.inl p => Or.inr p + | Or.inr q => Or.inl q, + λ + | Or.inl q => Or.inr q + | Or.inr p => Or.inl p⟩ -- associativity of ∧ and ∨ example : (p ∧ q) ∧ r ↔ p ∧ (q ∧ r) := - Iff.intro - (λ ⟨⟨p,q⟩,r⟩ => ⟨p,⟨q,r⟩⟩) - (λ ⟨p,⟨q,r⟩⟩ => ⟨⟨p,q⟩,r⟩) + ⟨λ ⟨⟨p,q⟩,r⟩ => ⟨p,⟨q,r⟩⟩, λ ⟨p,⟨q,r⟩⟩ => ⟨⟨p,q⟩,r⟩⟩ example : (p ∨ q) ∨ r ↔ p ∨ (q ∨ r) := - Iff.intro - (λ + ⟨λ | Or.inr r => Or.inr (Or.inr r) | Or.inl (Or.inr q) => Or.inr (Or.inl q) - | Or.inl (Or.inl p) => Or.inl p) - (λ + | Or.inl (Or.inl p) => Or.inl p, + λ | Or.inl p => Or.inl (Or.inl p) | Or.inr (Or.inl q) => Or.inl (Or.inr q) - | Or.inr (Or.inr r) => Or.inr r) + | Or.inr (Or.inr r) => Or.inr r⟩ -- distributivity example : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := - Iff.intro - (λ + ⟨λ | ⟨p, Or.inl q⟩ => Or.inl ⟨p,q⟩ - | ⟨p, Or.inr r⟩ => Or.inr ⟨p,r⟩) - (λ + | ⟨p, Or.inr r⟩ => Or.inr ⟨p,r⟩, + λ | Or.inl ⟨p,q⟩ => ⟨p,Or.inl q⟩ - | Or.inr ⟨p,r⟩ => ⟨p,Or.inr r⟩) + | Or.inr ⟨p,r⟩ => ⟨p,Or.inr r⟩⟩ example : p ∨ (q ∧ r) ↔ (p ∨ q) ∧ (p ∨ r) := - Iff.intro - (λ + ⟨λ | Or.inl p => ⟨Or.inl p, Or.inl p⟩ - | Or.inr ⟨q,r⟩ => ⟨Or.inr q, Or.inr r⟩) - (λ + | Or.inr ⟨q,r⟩ => ⟨Or.inr q, Or.inr r⟩, + λ | ⟨Or.inr q, Or.inr r⟩ => Or.inr ⟨q,r⟩ | ⟨Or.inl p, _⟩ => Or.inl p - | ⟨ _, Or.inl p⟩ => Or.inl p) + | ⟨ _, Or.inl p⟩ => Or.inl p⟩ -- other properties example : (p → (q → r)) ↔ (p ∧ q → r) := - Iff.intro - (λ f ⟨p,q⟩ => f p q) - (λ f p q => f ⟨p,q⟩) + ⟨λ f ⟨p,q⟩ => f p q,λ f p q => f ⟨p,q⟩⟩ example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) := - Iff.intro - (λ porqtor => And.intro (λ p => porqtor (Or.inl p)) (λ q => porqtor (Or.inr q))) - (λ + ⟨ + λ f => ⟨λ p => f (Or.inl p), λ q => f (Or.inr q)⟩, + λ |⟨f, _⟩, Or.inl p => f p - |⟨_, g⟩, Or.inr q => g q) + |⟨_, g⟩, Or.inr q => g q⟩ example : ¬(p ∨ q) ↔ ¬p ∧ ¬q := - Iff.intro - (λ nporq => And.intro (λ p => nporq (Or.inl p)) (λ q => nporq (Or.inr q))) - (λ - | ⟨np, _⟩, Or.inl p => np p - | ⟨_ ,nq⟩, Or.inr q => nq q) + ⟨λ f => ⟨λ p => f (Or.inl p), λ q => f (Or.inr q)⟩, + λ + | ⟨np, _⟩, Or.inl p => np p + | ⟨_ ,nq⟩, Or.inr q => nq q⟩ example : ¬p ∨ ¬q → ¬(p ∧ q) | Or.inl np, ⟨p,_⟩ => np p @@ -88,10 +79,10 @@ example : (¬p ∨ q) → (p → q) | (Or.inr q), _ => q example : p ∨ False ↔ p := - Iff.intro (λ porf => Or.elim porf id False.elim) (λ p => Or.inl p) + ⟨λ h => Or.elim h id False.elim, λ p => Or.inl p⟩ example : p ∧ False ↔ False := - Iff.intro (λ ⟨_,f⟩ => f) (λ f => False.elim f) + ⟨λ ⟨_,f⟩ => f, λ f => False.elim f⟩ example : (p → q) → (¬q → ¬p) := - λ ptoq nq p => absurd (ptoq p) nq + λ f nq p => absurd (f p) nq