Zulip Chat Archive
Stream: new members
Topic: Proving contradictions
Moti Ben-Ari (Dec 28 2023 at 11:30):
The following proof is accepted but tauto
seems to be too strong a tactic for a simple contradiction. contradiction h2
is what I want but it works only between two hypotheses and not between a hypothesis and a goal. Are there any other options?
theorem T1 (A : Prop) : (¬A → A) → A := by
intro h1
by_contra h2
apply h2
tauto
done
Another proof would have
contrapose h1
as the second line. I expected to get ¬A →¬¬A
but instead got ¬(¬A→A)
. Why? Is there any way to get from h1
to ¬A →¬¬A
?
Alex J. Best (Dec 28 2023 at 12:03):
Your #mwe has no imports, are you using Mathlib?
Alex J. Best (Dec 28 2023 at 12:03):
import Mathlib
theorem T1 (A : Prop) : (¬A → A) → A := by
intro h1
by_contra h2
apply h2
apply h1
exact h2
is a direct proof
Alex J. Best (Dec 28 2023 at 12:04):
You can use contrapose!
to push the negation inwards. under the hood this calls push_neg
Moti Ben-Ari (Dec 28 2023 at 13:39):
Alex J. Best said:
Your #mwe has no imports, are you using Mathlib?
Yes, sorry, I used import Mathlib.Tactic
.
I see that contrapose!
works though I would prefer to simply replace a hypothesis by its contrapositive.
Alex J. Best (Dec 28 2023 at 14:33):
If h
is a proof of P -> Q
then mt h
is the proof of not Q -> not P
, I guess we dont have a tactic for exactly that because the term is so short!
Last updated: May 02 2025 at 03:31 UTC