Zulip Chat Archive
Stream: general
Topic: Fighting cast
Eric Wieser (Mar 23 2021 at 13:09):
I know that I probably don't want to be at this goal state in the first place, but is this true?
example {ι : Type*} [add_monoid ι] {A : ι → Type*} [∀ i, has_zero (A i)] :
cast (congr_arg A (zero_add (0 : ι))) 0 = 0 :=
begin
apply eq_of_heq,
apply cast_heq _ _, -- fails, for reasons I don't understand
end
docs#cast_heq doesn't seem to apply properly
Kevin Buzzard (Mar 23 2021 at 13:11):
import tactic
example {ι : Type*} [add_monoid ι] {A : ι → Type*} [∀ i, has_zero (A i)] :
cast (congr_arg A (zero_add (0 : ι))) 0 = 0 :=
begin
apply eq_of_heq,
convert cast_heq _ _;
simp,
end
Kevin Buzzard (Mar 23 2021 at 13:12):
cast_heq
wants the a
's in cast h a == a
to have the same type, but yours don't
Eric Wieser (Mar 23 2021 at 13:21):
Thanks!
Eric Wieser (Mar 23 2021 at 13:22):
Now why doesn't my attempt to generalize this work...
lemma cast_pi {ι : Sort*} {A : ι → Sort*} (f : Π i, A i) {i j : ι} (h : i = j) :
cast (congr_arg A h) (f i) = f j :=
begin
convert cast_eq _ _,
refl,
end
example {ι : Type*} [add_monoid ι] {A : ι → Type*} [∀ i, has_zero (A i)] :
cast (congr_arg A (zero_add (0 : ι))) 0 = 0 :=
begin
-- exact cast_pi (λ i, (0 : A i)) _, -- works
apply cast_pi, --fails
-- refine cast_pi _ _, --fails
end
Kevin Buzzard (Mar 23 2021 at 14:42):
mumble mumble apply bug?
Kevin Buzzard (Mar 23 2021 at 14:45):
mumble mumble higher order unification problem? Actually that might be it, guessing a function is hard,
Eric Wieser (Mar 23 2021 at 15:05):
I guess I'm surprised that it doesn't just give me a goal filled with metavariables
Eric Wieser (Mar 23 2021 at 15:06):
I created #6834 which hopefully eliminates some of the pain I'm feeling, but it doesn't help the case I presented here.
Eric Wieser (Mar 23 2021 at 18:30):
And #6837 has some gross solutions to nasty versions of the one I started this thread with
Last updated: Dec 20 2023 at 11:08 UTC