Zulip Chat Archive
Stream: new members
Topic: de morgan
Patrick Thomas (Oct 03 2020 at 23:18):
Is there a more elegant way to prove this (without tactics)? It seems kind of brute force.
example {P Q : Prop} : ¬ (P ∧ Q) → (¬ P ∨ ¬ Q) :=
assume a1 : ¬ (P ∧ Q),
have s1 : P ∨ ¬ P := classical.em P,
or.elim s1
(
assume a2 : P,
have s2 : Q ∨ ¬ Q := classical.em Q,
or.elim s2
(
assume a3 : Q,
have s3 : P ∧ Q := and.intro a2 a3,
false.elim (a1 s3)
)
(
assume a3 : ¬ Q,
or.intro_right (¬ P) a3
)
)
(
assume a2 : ¬ P,
or.intro_left (¬ Q) a2
)
Mario Carneiro (Oct 03 2020 at 23:26):
import logic.basic
example {P Q : Prop} : ¬ (P ∧ Q) → (¬ P ∨ ¬ Q) := not_and_distrib.1
:stuck_out_tongue_wink:
Patrick Thomas (Oct 03 2020 at 23:26):
Nice :)
Mario Carneiro (Oct 03 2020 at 23:28):
Without logic.basic:
example {P Q : Prop} : ¬ (P ∧ Q) → (¬ P ∨ ¬ Q) :=
λ h, classical.by_contradiction $ λ h',
h ⟨classical.by_contradiction $ λ h₁, h' (or.inl h₁),
classical.by_contradiction $ λ h₁, h' (or.inr h₁)⟩
Mario Carneiro (Oct 03 2020 at 23:30):
To be fair, if I formatted this proof the same way as you I don't think it's much shorter
Patrick Thomas (Oct 03 2020 at 23:30):
Would it be the same basic approach?
Patrick Thomas (Oct 03 2020 at 23:32):
I'm not really sure how to read it.
Mario Carneiro (Oct 03 2020 at 23:32):
Here's your proof with golfy formatting
example {P Q : Prop} : ¬ (P ∧ Q) → (¬ P ∨ ¬ Q) :=
λ a1, (classical.em P).elim
(λ a2, (classical.em Q).elim (λ a3, (a1 ⟨a2, a3⟩).elim) or.inr) or.inl
Mario Carneiro (Oct 03 2020 at 23:33):
I think that using by_contradiction
leads to more linear arguments
Patrick Thomas (Oct 03 2020 at 23:35):
I'll see if I can figure out how to use it in my verbose version.
Mario Carneiro (Oct 03 2020 at 23:35):
Here's my proof with tactic formatting
import tactic
example {P Q : Prop} : ¬ (P ∧ Q) → (¬ P ∨ ¬ Q) :=
begin
classical,
intro h,
by_contra h',
apply h, split,
{ by_contra h₁,
apply h',
exact or.inl h₁ },
{ by_contra h₁,
apply h',
exact or.inr h₁ },
end
Patrick Thomas (Oct 03 2020 at 23:36):
Thank you.
Patrick Thomas (Oct 03 2020 at 23:55):
Cool. Thank you again.
example {P Q : Prop} : ¬ (P ∧ Q) → (¬ P ∨ ¬ Q) :=
assume a1 : ¬ (P ∧ Q),
by_contradiction (
assume a2 : ¬ (¬ P ∨ ¬ Q),
have s1 : P := (
by_contradiction (
assume a3 : ¬ P,
have s2 : ¬ P ∨ ¬ Q := or.intro_left (¬ Q) a3,
a2 s2
)
),
have s2 : Q := (
by_contradiction (
assume a3 : ¬ Q,
have s2 : ¬ P ∨ ¬ Q := or.intro_right (¬ P) a3,
a2 s2
)
),
have s3 : P ∧ Q := and.intro s1 s2,
a1 s3
)
Last updated: Dec 20 2023 at 11:08 UTC