Zulip Chat Archive
Stream: new members
Topic: Time out with the mathematical brackets
AHan (Nov 04 2018 at 04:11):
I've defined a prime field, and tried to define a function that maps int
topf
, but somehow timeout at the function...
def pf {p : ℕ} := {e // prime p ∧ 0 ≤ e ∧ e < p} variable {p : ℕ} def int_to_pf (x : ℤ) : @pf p := ⟨x, begin end⟩
while my friend succeed with
def pf (p : ℕ ) [prime p] := {e // 0 ≤ e ∧ e < p} variable p : ℕ variable [pp: prime p] def int_to_pf (x : ℤ) : @pf p (prime p) := ⟨x, begin end⟩
Why is there a difference?
Mario Carneiro (Nov 04 2018 at 04:34):
you are casting an int
to a nat
in both examples, this times out searching for a coercion
Mario Carneiro (Nov 04 2018 at 04:36):
In the second example it fails fast only because it gets stuck in the type of the theorem: @pf p (prime p)
is not well typed because prime p
does not have type prime p
AHan (Nov 04 2018 at 04:41):
sorry for a mistake, I think my friend wrote
pp: prime p def int_to_pf (x : ℤ) : @pf p pp ...
AHan (Nov 04 2018 at 04:42):
Where did I cast int to nat?
Aren't elements in pf all have value of type nat?
Andrew Ashworth (Nov 04 2018 at 06:04):
Your x in int to pf is an int?
AHan (Nov 04 2018 at 06:24):
yes, but aren't val of elements of type pf also int?
Andrew Ashworth (Nov 04 2018 at 06:30):
You defined p in pf as a nat
AHan (Nov 04 2018 at 06:39):
But the second example can work?
Mario Carneiro (Nov 04 2018 at 06:51):
lean does not have a subtyping relation, so if something has type pf p
it does not have type int
. But more importantly you are going the other way around here: x
has type int
and you are putting it in the first component of pf p
, which you didn't write explicitly (it is the type of e
) but is nat
.
AHan (Nov 04 2018 at 06:59):
Oh!! Got it! thanks a lot!!
Last updated: Dec 20 2023 at 11:08 UTC