Zulip Chat Archive
Stream: general
Topic: or distrib over and golf
Kevin Buzzard (Oct 18 2018 at 19:50):
A student just asked me this:
example (P Q R : Prop) : P ∨ (Q ∧ R) ↔ (P ∨ Q) ∧ (P ∨ R) := sorry
They proved it in 60 lines :-) I said that there were probably quicker proofs. How quick can we get it?
Chris Hughes (Oct 18 2018 at 19:51):
by finish
Sebastien Gouezel (Oct 18 2018 at 19:52):
by tauto
(one letter less)
Kevin Buzzard (Oct 18 2018 at 19:53):
I couldn't get finish to work :-/
Kevin Buzzard (Oct 18 2018 at 19:53):
But I got or_and_distrib_left
to work :-)
Rob Lewis (Oct 18 2018 at 19:53):
finish
doesn't work for me, but split; finish
does.
Chris Hughes (Oct 18 2018 at 19:55):
example (P Q R : Prop) : P ∨ (Q ∧ R) ↔ (P ∨ Q) ∧ (P ∨ R) := ⟨λ h, h.elim (λ h, ⟨or.inl h, or.inl h⟩) (λ h, ⟨or.inr h.1, or.inr h.2⟩), λ h, h.1.elim or.inl (λ hQ, h.2.elim or.inl (λ hR, or.inr ⟨hQ, hR⟩))
Scott Olson (Oct 18 2018 at 21:24):
If one didn't want to use a high level tactic, I'm fond of pattern matching for this style of "take it apart and put it back together in another shape" proof:
lemma ltr {P Q R : Prop} : P ∨ (Q ∧ R) → (P ∨ Q) ∧ (P ∨ R) | (or.inl hp) := ⟨or.inl hp, or.inl hp⟩ | (or.inr ⟨hq, hr⟩) := ⟨or.inr hq, or.inr hr⟩ lemma rtl {P Q R : Prop} : (P ∨ Q) ∧ (P ∨ R) → P ∨ (Q ∧ R) | ⟨or.inl hp, _⟩ := or.inl hp | ⟨_, or.inl hp⟩ := or.inl hp | ⟨or.inr hq, or.inr hr⟩ := or.inr ⟨hq, hr⟩ example {P Q R : Prop} : P ∨ (Q ∧ R) ↔ (P ∨ Q) ∧ (P ∨ R) := iff.intro ltr rtl
Scott Olson (Oct 18 2018 at 21:27):
This isn't exactly golfing it, but I find it really clear for proofs that are merely reorganizing "data"
Kevin Buzzard (Oct 18 2018 at 22:24):
Thanks for all of these -- I believe the student is a learner and is reading the answers so it's great to see the options which are available
Last updated: Dec 20 2023 at 11:08 UTC