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