Commit 2025-02-11 15:35 35037673
View on Github →feat: erw?
, a tool to explain why erw
is necessary (#21643)
Zulip
Example usage: in
def subalgebraMap (e : A ≃ₐ[R] B) (S : Subalgebra R A) : S ≃ₐ[R] S.map (e : A →ₐ[R] B) :=
{ e.toRingEquiv.subsemiringMap S.toSubsemiring with
commutes' := fun r => by
ext; dsimp only
erw [RingEquiv.subsemiringMap_apply_coe]
exact e.commutes _ }
replace erw
with erw?
. You'll get the informational message:
(e.toRingEquiv.subsemiringMap S.toSubsemiring).toFun
and
⇑(e.toRingEquiv.subsemiringMap S.toSubsemiring)
are defeq at default transparency, but not at reducible transparency.
and this then suggests to a sufficiently expert reader which simp lemmas are missing! (In this particular case, I'd first replace the dsimp only
with dsimp
, and then run erw?
, which tell you something more useful.)
Note that erw?
only accepts a single lemma, so any erw [X1, X2, X3]
need to be broken up first (this is probably good practice anyway, to record which steps really need the erw
).