Zulip Chat Archive
Stream: new members
Topic: Failed to synthesize instance for zero index of list
Ioannis Konstantoulas (Sep 11 2023 at 10:23):
In the middle of a proof, I have a list L
together with an equation : L = x :: y :: ys
. Using that, I prove
have positive_length : 0 < L.length := sorry
I then write something like
let l_0 := (0 : Fin L.length)
and get the error message
failed to synthesize instance
OfNat (Fin (List.length L)) 0
How can I use positive_length
to make Lean synthesize that instance for me, so I can use it in the proof?
Yaël Dillies (Sep 11 2023 at 10:25):
You must wrap it in a Fact
.
Ioannis Konstantoulas (Sep 11 2023 at 10:26):
The conclusion of my theorem is of the form ∃ i : Fin L.length, p L[i]
for a predicate p
.
Ioannis Konstantoulas (Sep 11 2023 at 10:26):
Yaël Dillies said:
You must wrap it in a
Fact
.
Is Fact
a type in Core? I am not using Mathlib or Std.
Yaël Dillies (Sep 11 2023 at 10:27):
docs#Fin.instAddMonoidWithOne tells you what you need. You need docs#NeZero.
Yaël Dillies (Sep 11 2023 at 10:28):
Tough luck. Core and Std only have a OfNat (Fin n.succ)
instance, not a Fact (n != 0) -> OfNat (Fin n)
as mathlib does.
Ioannis Konstantoulas (Sep 11 2023 at 10:32):
I am confused by that statement: previously in the proof, I wrote (0 : Fin 1)
with no complaints. Do you mean that I should prove L.length = succ x
for some x
? That is easy.
Yaël Dillies (Sep 11 2023 at 10:34):
Yeah because 1
is syntactically of the form Nat.succ n
for some n
(namely n := 0
). The problem in your case is that L.length
is not syntactically of the form Nat.succ n
for some n
.
Eric Wieser (Sep 11 2023 at 11:19):
(1 is not syntactically succ n
, but it does unify with it)
Ioannis Konstantoulas (Sep 11 2023 at 12:39):
Thank you for your comments, I know how to proceed now!
Last updated: Dec 20 2023 at 11:08 UTC