Zulip Chat Archive
Stream: new members
Topic: Understanding Contradiction
Dev-Indra (Mar 16 2020 at 22:21):
I have read ch.3 of Theorem Proving in Lean and I am currently in ch. 4. I have tried some direct proof tactics in the examples provided and in the Natural Number Game. I am curious how to do the contradiction proofs. Can anyone tell me how contradiction works in lean to get me going?
Mario Carneiro (Mar 16 2020 at 22:23):
There is a constant called classical.by_contradiction
which has the type (\not p -> false) -> p
. That is, if you apply it when your goal is p
, then your new goal is \not p -> false
, and you can then assume hnp : \not p
and proceed to prove false
Dev-Indra (Mar 16 2020 at 22:28):
I applied classical.by_contradiction
within my proof but Lean is giving me an error?! Do I apply it outside of my proof or within?
Dev-Indra (Mar 16 2020 at 22:29):
Do I need to import anything too?
Daniel Keys (Mar 16 2020 at 22:29):
Here's an example:
lemma andNeg : (¬ P) ∧ (¬ Q) → ¬ ( P ∨ Q ) := begin intro nPnQ, by_contradiction pORq, cases pORq with hp hq, exact nPnQ.left hp, exact nPnQ.right hq end
Mario Carneiro (Mar 16 2020 at 22:30):
Note that by_contradiction
is also the name of a tactic, that combines the application of the theorem classical.by_contradiction
and the assume
step into one
Mario Carneiro (Mar 16 2020 at 22:31):
@Dev-Indra your comment is too vague to guess what the error is. You should post code
Daniel Keys (Mar 16 2020 at 22:32):
You need to open classical
or use classical.by_contradiction
instead of just by_contradiction
.
Dev-Indra (Mar 16 2020 at 22:33):
@ Daniel Keys Ok I see. I will give it a shot.
@Mario Carneiro . Here was my error message when I just typed classical.by_contradiction
within my proof.
type mismatch at application tactic.istep 130 2 130 2 classical.by_contradiction term classical.by_contradiction has type (¬?m_1 → false) → ?m_1 : Prop but is expected to have type tactic ?m_1 : Type ?
Mario Carneiro (Mar 16 2020 at 22:34):
you have to type apply classical.by_contradiction
Mario Carneiro (Mar 16 2020 at 22:34):
because classical.by_contradiction
is a theorem, not a tactic
Dev-Indra (Mar 16 2020 at 22:34):
So thanks, I see
Mario Carneiro (Mar 16 2020 at 22:35):
by_contradiction
is a tactic with a similar name, used in Daniel's proof above
Mario Carneiro (Mar 16 2020 at 22:35):
but tactics and theorems live in different namespaces
Daniel Keys (Mar 16 2020 at 22:37):
I just noticed you're in chapter 4. Tactics are introduced in chapter 5. Sorry I jumped too far ahead.
Mario Carneiro (Mar 16 2020 at 22:39):
if you do the NNG then tactics are there from day 1
Last updated: Dec 20 2023 at 11:08 UTC