Zulip Chat Archive
Stream: new members
Topic: showing contradiction
Rohan Joshi (Aug 08 2024 at 12:10):
Hello everyone, I had a question regarding proving a contradiction in lean4. In this scenario, I have the hypothesis h1: a^4 + b^4 = c^4 and the goal: a^4 + b^4 ≠ c^4. I tried using By.contradiction but it does not work. Any idea on how to proceed with this?
Ruben Van de Velde (Aug 08 2024 at 12:12):
This is not a logically correct argument
Ruben Van de Velde (Aug 08 2024 at 12:12):
Given a hypothesis that 1 = 1, you cannot prove that 1 \ne 1
Edward van de Meent (Aug 08 2024 at 12:13):
it will need to be concluded from other hypotheses.
Bulhwi Cha (Aug 08 2024 at 12:13):
Rohan Joshi said:
In this scenario, I have the hypothesis h1: a^4 + b^4 = c^4 and the goal: a^4 + b^4 ≠ c^4.
Is h1
the only hypothesis you have?
Rohan Joshi (Aug 08 2024 at 12:14):
no, I have hypotheses :
h: a^4 + b^4 = c^4 \im \exists d, a^4 + b^4 = d^2 \and abd \neq 0
h2: \exists d, a^4 + b^4 = d^2 \and abd \neq 0
Bulhwi Cha (Aug 08 2024 at 12:15):
Can you show us #mwe?
Rohan Joshi (Aug 08 2024 at 12:15):
Screenshot-2024-08-08-at-7.15.43PM.png
Rohan Joshi (Aug 08 2024 at 12:16):
Screenshot-2024-08-08-at-7.15.57PM.png
Ruben Van de Velde (Aug 08 2024 at 12:16):
Please read the page behind the link #mwe
Rohan Joshi (Aug 08 2024 at 12:20):
import Mathlib
namespace FLT
open Classical
theorem reduce_c_exponent_2(a b c :ℤ) (k: a*b*c ≠ 0):
a^4+b^4=c^4 → ∃ d, a^4+b^4 = d^2 ∧ a*b*d ≠ 0 := by
intro h
use c^2
have h1 : a^4 + b^4 = (c^2)^2
linarith
have h2: a*b*(c^2) ≠ 0
have h3: c ≠ 0
contrapose! k
rw[k]
apply mul_zero
rw[pow_two]
rw[← mul_assoc]
rw[mul_comm]
apply mul_ne_zero
use h3
use k
apply And.intro
exact h1
exact h2
variable (d: ℤ)
theorem fermat_for_4(a b c : ℤ):
a*b*c ≠ 0 → a^4+b^4≠ c^4:= by
intro h
apply reduce_c_exponent_2 at h
have h1: a^4 + b^4 = c^4
sorry
--------------------------------------
have h2: ∃ d, a^4+b^4 = d^2 ∧ a*b*d ≠ 0
apply h
exact h1
sorry
Rohan Joshi (Aug 08 2024 at 12:38):
One thing I tried was using another hypothesis:
h3: a^4 + b^4 = d^2 ∧ abd ≠ 0
but in order to prove this hypothesis, I need to get rid of the \exists d from h2. I tried using apply Exists.elim but it does not seem to work. Is there any way to work around this?
Screenshot-2024-08-08-at-7.38.35PM.png
Edward van de Meent (Aug 08 2024 at 12:48):
Rohan Joshi said:
import Mathlib namespace FLT open Classical theorem reduce_c_exponent_2(a b c :ℤ) (k: a*b*c ≠ 0): a^4+b^4=c^4 → ∃ d, a^4+b^4 = d^2 ∧ a*b*d ≠ 0 := by intro h use c^2 have h1 : a^4 + b^4 = (c^2)^2 linarith have h2: a*b*(c^2) ≠ 0 have h3: c ≠ 0 contrapose! k rw[k] apply mul_zero rw[pow_two] rw[← mul_assoc] rw[mul_comm] apply mul_ne_zero use h3 use k apply And.intro exact h1 exact h2 variable (d: ℤ) theorem fermat_for_4(a b c : ℤ): a*b*c ≠ 0 → a^4+b^4≠ c^4:= by intro h apply reduce_c_exponent_2 at h have h1: a^4 + b^4 = c^4 sorry -------------------------------------- have h2: ∃ d, a^4+b^4 = d^2 ∧ a*b*d ≠ 0 apply h exact h1 sorry
could you maybe also remove the python
from the codeblock? on zulip, it will use lean4
as default syntax higlighting. you can read more about this at #backticks.
Edward van de Meent (Aug 08 2024 at 12:50):
doing this will also add a link to the lean playground in the upper right corner of the code block, allowing us to open the code with one click and try and look for a fix more easily
Rohan Joshi (Aug 08 2024 at 12:50):
import Mathlib
namespace FLT
open Classical
theorem reduce_c_exponent_2(a b c :ℤ) (k: a*b*c ≠ 0):
a^4+b^4=c^4 → ∃ d, a^4+b^4 = d^2 ∧ a*b*d ≠ 0 := by
intro h
use c^2
have h1 : a^4 + b^4 = (c^2)^2
linarith
have h2: a*b*(c^2) ≠ 0
have h3: c ≠ 0
contrapose! k
rw[k]
apply mul_zero
rw[pow_two]
rw[← mul_assoc]
rw[mul_comm]
apply mul_ne_zero
use h3
use k
apply And.intro
exact h1
exact h2
------------------------------------------
theorem not_reduce_c_exponent_2(a b c : ℤ):
a*b*c ≠ 0 → a^4+b^4 ≠ c^2:= by
intro h
contrapose! h
sorry
-------------------------------------------
variable (d: ℤ)
theorem fermat_for_4(a b c : ℤ):
a*b*c ≠ 0 → a^4+b^4≠ c^4:= by
intro h
apply reduce_c_exponent_2 at h
have h1: a^4 + b^4 = c^4
sorry
--------------------------------------
have h2: ∃ d, a^4+b^4 = d^2 ∧ a*b*d ≠ 0
apply h
exact h1
have h3: a^4 + b^4 = d^2 ∧ a*b*d ≠ 0
apply Exists.elim at h2
sorry
---------------------------------
sorry
Edward van de Meent (Aug 08 2024 at 12:59):
regarding the Exists.elim
, what you can do if you have a h : ∃ (d:SomeType), some_prop d
is use obtain ⟨d,hd⟩ := h2
, which adds d:SomeType
and hd : some_prop d
to the context.
Edward van de Meent (Aug 08 2024 at 13:01):
btw, using variable (d: ℤ)
in this case is more harmful than good, because you don't want any integer d
, but specifically the one you proved exists with the property you want
Edward van de Meent (Aug 08 2024 at 13:03):
and having multiple integers d
floating around only leads to confusion
Rohan Joshi (Aug 08 2024 at 13:09):
i see the problem now. Thank you so much for your help! :grinning:
Last updated: May 02 2025 at 03:31 UTC