Zulip Chat Archive
Stream: general
Topic: eq.rec with dependent types
Winston Yin (Jun 20 2022 at 22:11):
I'm having some trouble using rw on goals that involve many dependent types. I have (omitting some for clarity):
ι : Type*
V : ι → Type*
f : Π i : ι, V i →ₗ[k] V i
n : ι → Type*
b : Π i : ι, basis (n i) k (V i)
x y : n
h : x.1 = y.1
I've gotten to a point where the goal is:
eq.rec (⇑((b y.1).repr) (⇑(f y.1) (⇑(b y.1) y.2))) _ = ⇑((b x.1).repr) (⇑(f x.1) (⇑(b x.1) (cast _ y.2)))
The underscore on the LHS is a proof of y.1 = x.1
. How can I finish such a goal?
rw h
throws motive is not type correct
. After I add a further hypothesis hn : n x.1 = n y.1
and use simp_rw h
, it is still unable to simplify the expression further.
Eric Wieser (Jun 20 2022 at 22:17):
Can you give a mwe?
Eric Wieser (Jun 20 2022 at 22:17):
x y : n
feels like nonsense there given n : ι → Type*
Winston Yin (Jun 20 2022 at 22:18):
Eric Wieser said:
x y : n
feels like nonsense there givenn : ι → Type*
Fixed. Those should be Sigmas
Eric Wieser (Jun 20 2022 at 22:18):
cases x, cases y, dsimp only at *, subst h
might help
Winston Yin (Jun 20 2022 at 22:21):
That works! Could you explain the heuristic behind this?
Eric Wieser (Jun 20 2022 at 22:21):
You want to get your equalities to have a single variable on one side, so that you can use subst
(aka cases h
)
Winston Yin (Jun 20 2022 at 22:22):
Also I am not familiar with dsimp
or at *
Eric Wieser (Jun 20 2022 at 22:22):
dsimp only at *
turns annoying (sigma.mk x y).fst
goals into x
Eric Wieser (Jun 20 2022 at 22:23):
at *
does it at all the hypotheses
Winston Yin (Jun 20 2022 at 22:25):
I see. Basically Lean can't substitute x.1 = y.1
but can substitute x_fst = y_fst
once I've cases
-ed on x, y
Winston Yin (Jun 20 2022 at 22:26):
Thanks a lot.
Kyle Miller (Jun 20 2022 at 22:27):
tactic#dsimp is a like tactic#simp but only uses simp lemmas that are definitionally true (so it's as if you did a sequence of change
tactics). https://leanprover-community.github.io/extras/simp.html mentions dsimp
Kyle Miller (Jun 20 2022 at 22:27):
Something else that can be helpful is using tactic#generalize to turn certain expressions into variables so you can subst them
Kyle Miller (Jun 20 2022 at 22:28):
Yet another thing that can be helpful is stepping back and wondering how you got into this eq.rec
business anyway :wink:
Winston Yin (Jun 20 2022 at 22:29):
I'm doing my best to avoid proving things about dfinsupp
because scary things happen when I try.
Reid Barton (Jun 20 2022 at 22:47):
Kyle Miller said:
Yet another thing that can be helpful is stepping back and wondering how you got into this
eq.rec
business anyway :wink:
For example, it might have been better to do this cases x, cases y, subst h
business before eq.rec
appeared
Last updated: Dec 20 2023 at 11:08 UTC