Skip to content

Commit 48aaad4

Browse files
authored
feat: bump to 4.30 (#141)
I had to add 40 `set_option backward.isDefEq.respectTransparency false in`s. One `simp` broke, but there is a not too bad fix. (I still it were better understood.) One proof now takes a really long time; it would be good to understand why!
1 parent 5b63797 commit 48aaad4

26 files changed

Lines changed: 118 additions & 79 deletions

SphereEversion/Global/Immersion.lean

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,21 @@ theorem mem_immersionRel_iff {σ : OneJetBundle I M I' M'} :
4444
σ ∈ immersionRel I M I' M' ↔ Injective (σ.2 : TangentSpace I _ →L[ℝ] TangentSpace I' _) :=
4545
Iff.rfl
4646

47+
set_option backward.isDefEq.respectTransparency false in
4748
/-- A characterisation of the immersion relation in terms of a local chart. -/
4849
theorem mem_immersionRel_iff' {σ σ' : OneJetBundle I M I' M'} (hσ' : σ' ∈ (ψJ σ).source) :
4950
σ' ∈ immersionRel I M I' M' ↔ Injective (ψJ σ σ').2 := by
5051
simp_rw [mem_immersionRel_iff]
5152
rw [oneJetBundle_chartAt_apply, inCoordinates_eq]
5253
· simp_rw [ContinuousLinearMap.coe_comp', ContinuousLinearEquiv.coe_coe, EquivLike.comp_injective,
53-
EquivLike.injective_comp]
54+
EquivLike.injective_comp]
5455
exacts [hσ'.1.1, hσ'.1.2]
5556

5657
theorem chartAt_image_immersionRel_eq {σ : OneJetBundle I M I' M'} :
5758
ψJ σ '' ((ψJ σ).source ∩ immersionRel I M I' M') = (ψJ σ).target ∩ {q : HJ | Injective q.2} :=
5859
PartialEquiv.IsImage.image_eq fun _σ' hσ' ↦ (mem_immersionRel_iff' I I' hσ').symm
5960

61+
set_option backward.isDefEq.respectTransparency false in
6062
theorem immersionRel_open [FiniteDimensional ℝ E] : IsOpen (immersionRel I M I' M') := by
6163
simp_rw [ChartedSpace.isOpen_iff HJ (immersionRel I M I' M'), chartAt_image_immersionRel_eq]
6264
refine fun σ ↦ (ψJ σ).open_target.inter ?_
@@ -168,7 +170,7 @@ variable (ω : Orientation ℝ E (Fin 3))
168170
theorem smooth_bs :
169171
ContMDiff (𝓘(ℝ, ℝ).prod (𝓡 2)) 𝓘(ℝ, E) ∞
170172
fun p : ℝ × (sphere (0 : E) 1) ↦ (1 - p.1) • (p.2 : E) + p.1 • -(p.2: E) := by
171-
refine (ContMDiff.smul ?_ ?_).add (contMDiff_fst.smul ?_)
173+
refine (ContMDiff.smul (I := 𝓘(ℝ)) ?_ ?_).add (contMDiff_fst.smul ?_)
172174
· exact (contDiff_const.sub contDiff_id).contMDiff.comp contMDiff_fst
173175
· exact (contMDiff_coe_sphere.of_le le_top).comp contMDiff_snd
174176
· exact (contDiff_neg.contMDiff.comp (contMDiff_coe_sphere.of_le le_top)).comp contMDiff_snd
@@ -214,6 +216,7 @@ theorem formalEversionHolAtZero {t : ℝ} (ht : t < 1 / 4) :
214216
congr with y
215217
simp [smoothStep.of_lt ht]
216218

219+
set_option backward.isDefEq.respectTransparency false in
217220
theorem formalEversionHolAtOne {t : ℝ} (ht : 3 / 4 < t) :
218221
(formalEversion E ω t).toOneJetSec.IsHolonomic := by
219222
intro x
@@ -253,12 +256,6 @@ variable {𝕜 : Type*} [NontriviallyNormedField 𝕜]
253256
{E F G : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E] [NormedAddCommGroup F] [NormedSpace 𝕜 F]
254257
[NormedAddCommGroup G] [NormedSpace 𝕜 G]
255258

256-
-- move to Analysis.Calculus.ContDiff.Basic, or so
257-
theorem contDiff_prod_iff (f : E → F × G) (n : ℕ∞) :
258-
ContDiff 𝕜 n f ↔
259-
ContDiff 𝕜 n (Prod.fst ∘ f) ∧ ContDiff 𝕜 n (Prod.snd ∘ f) :=
260-
fun h ↦ ⟨h.fst, h.snd⟩, fun h ↦ h.1.prodMk h.2
261-
262259
-- move to Analysis.Calculus.ContDiff.Defs, or so
263260
lemma ContDiff.inr (x : E) (n : ℕ∞) : ContDiff 𝕜 n fun p : F ↦ (⟨x, p⟩ : E × F) := by
264261
rw [contDiff_prod_iff]

SphereEversion/Global/Localisation.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ def OneJetSec.loc (F : OneJetSec 𝓘(ℝ, E) E 𝓘(ℝ, E') E') : JetSec E E'
3636
have : ContMDiffAt _ _ _ _ _ := F.contMDiff x₀
3737
simp_rw +unfoldPartialApp [contMDiffAt_oneJetBundle, inTangentCoordinates, inCoordinates,
3838
TangentBundle.symmL_model_space, TangentBundle.continuousLinearMapAt_model_space,
39-
ContinuousLinearMap.one_def, ContinuousLinearMap.comp_id, TangentSpace,
40-
ContinuousLinearMap.id_comp] at this
39+
ContinuousLinearMap.one_def, TangentSpace] at this
4140
exact this.2.2.contDiffAt
4241

4342
theorem OneJetSec.loc_hol_at_iff (F : OneJetSec 𝓘(ℝ, E) E 𝓘(ℝ, E') E') (x : E) :
@@ -85,6 +84,7 @@ theorem JetSec.unloc_hol_at_iff (𝓕 : JetSec E E') (x : E) :
8584
rw [mfderiv_eq_fderiv]
8685
exact Iff.rfl
8786

87+
set_option backward.isDefEq.respectTransparency false in
8888
def HtpyJetSec.unloc (𝓕 : HtpyJetSec E E') : HtpyOneJetSec 𝓘(ℝ, E) E 𝓘(ℝ, E') E' where
8989
bs t := (𝓕 t).f
9090
ϕ t x := (𝓕 t x).2

SphereEversion/Global/OneJetBundle.lean

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,11 @@ def OneJetSpace (p : M × M') : Type _ :=
9595
((ContMDiffMap.fst : C^∞⟮I.prod I', M × M'; I, M⟯) *ᵖ (TangentSpace I)) p →SL[σ]
9696
((ContMDiffMap.snd : C^∞⟮I.prod I', M × M'; I', M'⟯) *ᵖ (TangentSpace I')) p
9797

98-
instance (p : M × M') : TopologicalSpace (OneJetSpace I I' p) := by
99-
delta OneJetSpace
100-
infer_instance
98+
instance (p : M × M') : TopologicalSpace (OneJetSpace I I' p) :=
99+
inferInstanceAs <| TopologicalSpace (E →L[𝕜] E')
101100

102-
instance (p : M × M') : AddCommGroup (OneJetSpace I I' p) := by
103-
delta OneJetSpace
104-
infer_instance
101+
instance (p : M × M') : AddCommGroup (OneJetSpace I I' p) :=
102+
inferInstanceAs <| AddCommGroup (E →L[𝕜] E')
105103

106104
variable {I I'}
107105

@@ -148,34 +146,38 @@ section
148146

149147
variable {M} (p : M × M')
150148

151-
instance (x : M × M') : Module 𝕜 (FJ¹MM' x) := by
152-
delta OneJetSpace
153-
infer_instance
149+
instance (x : M × M') : Module 𝕜 (FJ¹MM' x) :=
150+
inferInstanceAs <| Module 𝕜 (E →L[𝕜] E')
154151

155152
end
156153

154+
set_option backward.isDefEq.respectTransparency false in
157155
instance : TopologicalSpace J¹MM' := by
158156
delta OneJetSpace OneJetBundle
159157
infer_instance
160158

159+
set_option backward.isDefEq.respectTransparency false in
161160
instance : FiberBundle (E →L[𝕜] E') FJ¹MM' := by
162161
delta OneJetSpace
163162
infer_instance
164163

165-
164+
set_option backward.isDefEq.respectTransparency false in
166165
instance : VectorBundle 𝕜 (E →L[𝕜] E') FJ¹MM' := by
167166
delta OneJetSpace
168167
infer_instance
169168

169+
set_option backward.isDefEq.respectTransparency false in
170170
instance : ContMDiffVectorBundle ∞ (E →L[𝕜] E')
171171
(OneJetSpace I I' : M × M' → Type _) (I.prod I') := by
172172
delta OneJetSpace
173173
infer_instance
174174

175+
set_option backward.isDefEq.respectTransparency false in
175176
instance : ChartedSpace HJ J¹MM' := by
176177
delta OneJetSpace OneJetBundle
177178
infer_instance
178179

180+
set_option backward.isDefEq.respectTransparency false in
179181
instance : IsManifold ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ J¹MM' := by
180182
apply Bundle.TotalSpace.isManifold
181183

@@ -190,6 +192,7 @@ theorem oneJetBundle_proj_continuous : Continuous (π (E →L[𝕜] E') FJ¹MM')
190192
-- Porting note: removed next line
191193
-- attribute [simps] ContMDiffMap.fst ContMDiffMap.snd
192194

195+
set_option backward.isDefEq.respectTransparency false in
193196
theorem oneJetBundle_trivializationAt (x₀ x : J¹MM') :
194197
(trivializationAt (E →L[𝕜] E') (OneJetSpace I I') x₀.proj x).2 =
195198
inCoordinates E (TangentSpace I) E' (TangentSpace I') x₀.proj.1 x.proj.1 x₀.proj.2 x.proj.2
@@ -214,6 +217,7 @@ theorem trivializationAt_oneJetBundle_target (x₀ : M × M') :
214217
Set.univ :=
215218
rfl
216219

220+
set_option backward.isDefEq.respectTransparency false in
217221
/-- Computing the value of a chart around `v` at point `v'` in `J¹(M, M')`.
218222
The last component equals the continuous linear map `v'.2`, composed on both sides by an
219223
appropriate coordinate change function. -/
@@ -226,6 +230,7 @@ theorem oneJetBundle_chartAt_apply (v v' : OneJetBundle I M I' M') :
226230
rw [FiberBundle.chartedSpace_chartAt_snd]
227231
exact oneJetBundle_trivializationAt v v'
228232

233+
set_option backward.isDefEq.respectTransparency false in
229234
/-- In `J¹(M, M')`, the source of a chart has a nice formula -/
230235
theorem oneJetBundle_chart_source (x₀ : J¹MM') :
231236
(chartAt HJ x₀).source =
@@ -298,6 +303,7 @@ lemma ContMDiffMap.snd_apply (x : M) (x' : M') :
298303

299304
end
300305

306+
set_option backward.isDefEq.respectTransparency false in
301307
/-- In `J¹(M, M')`, the target of a chart has a nice formula -/
302308
theorem oneJetBundle_chart_target (x₀ : J¹MM') :
303309
(chartAt HJ x₀).target = Prod.fst ⁻¹' (chartAt (ModelProd H H') x₀.proj).target := by
@@ -325,6 +331,7 @@ theorem oneJetBundle_chart_target (x₀ : J¹MM') :
325331

326332
section Maps
327333

334+
set_option backward.isDefEq.respectTransparency false in
328335
theorem contMDiff_oneJetBundle_proj :
329336
ContMDiff ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) (I.prod I') ∞ (π (E →L[𝕜] E') FJ¹MM') := by
330337
apply contMDiff_proj _
@@ -356,6 +363,7 @@ theorem oneJetBundle_mk_snd {x : M} {y : M'} {f : OneJetSpace I I' (x, y)} :
356363
(OneJetBundle.mk x y f).2 = f :=
357364
rfl
358365

366+
set_option backward.isDefEq.respectTransparency false in
359367
theorem contMDiffAt_oneJetBundle {f : N → J¹MM'} {x₀ : N} :
360368
ContMDiffAt J ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ f x₀ ↔
361369
CMDiffAt ∞ (fun x ↦ (f x).1.1) x₀ ∧
@@ -446,6 +454,7 @@ theorem ContMDiff.oneJet_comp {f1 : N' → M} (f2 : N' → M') {f3 : N' → N}
446454

447455
variable {I'}
448456

457+
set_option backward.isDefEq.respectTransparency false in
449458
open Trivialization in
450459
omit [IsManifold J ∞ N] in
451460
theorem ContMDiff.oneJet_add {f : N → M} {g : N → M'} {ϕ ϕ' : ∀ x : N, OneJetSpace I I' (f x, g x)}
@@ -478,6 +487,7 @@ protected def OneJetBundle.map (f : M → N) (g : M' → N')
478487

479488
variable {I' J'}
480489

490+
set_option backward.isDefEq.respectTransparency false in
481491
omit [IsManifold I ∞ M] [IsManifold I' ∞ M']
482492
[IsManifold I₂ ∞ M₂] [IsManifold I₃ ∞ M₃]
483493
[IsManifold J' ∞ N'] [IsManifold J ∞ N] in
@@ -533,6 +543,7 @@ theorem ContMDiffAt.oneJetBundle_map {f : M'' → M → N} {g : M'' → M' → N
533543
def mapLeft (f : M → N) (Dfinv : ∀ x : M, TangentSpace J (f x) →L[𝕜] TangentSpace I x) :
534544
J¹MM' → OneJetBundle J N I' M' := fun p ↦ OneJetBundle.mk (f p.1.1) p.1.2 (p.2 ∘L Dfinv p.1.1)
535545

546+
set_option backward.isDefEq.respectTransparency false in
536547
set_option linter.style.multiGoal false in
537548
omit [IsManifold I ∞ M] [IsManifold I' ∞ M']
538549
[IsManifold I₂ ∞ M₂] [IsManifold I₃ ∞ M₃]
@@ -637,6 +648,7 @@ variable (I I')
637648

638649
-- note: this proof works for all vector bundles where we have proven
639650
-- `∀ p, chartAt _ p = f.toPartialEquiv`
651+
set_option backward.isDefEq.respectTransparency false in
640652
/-- The canonical identification between the one-jet bundle to the model space and the product,
641653
as a homeomorphism -/
642654
def oneJetBundleModelSpaceHomeomorph : OneJetBundle I H I' H' ≃ₜ 𝓜 :=

SphereEversion/Global/OneJetSec.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ of its base map at x. -/
102102
def IsHolonomicAt (F : OneJetSec I M I' M') (x : M) : Prop :=
103103
mfderiv% F.bs x = (F x).2
104104

105+
set_option backward.isDefEq.respectTransparency false in
105106
/-- A section of J¹(M, M') is holonomic at (x : M) iff it coincides with the 1-jet extension of
106107
its base map at x. -/
107108
theorem isHolonomicAt_iff {F : OneJetSec I M I' M'} {x : M} :
@@ -265,7 +266,7 @@ theorem uncurry_ϕ' (S : FamilyOneJetSec I M I' M' IP P) (p : P × M) :
265266
convert
266267
mfderiv_comp p ((S.contMDiff_bs.comp (contMDiff_id.prodMk contMDiff_const)).mdifferentiable
267268
(by simp) p.1) (contMDiff_fst.mdifferentiable one_ne_zero p)
268-
simp_rw [mfderiv_fst]
269+
on_goal 1 => simp_rw [mfderiv_fst]
269270
rfl
270271

271272
theorem isHolonomicAt_uncurry (S : FamilyOneJetSec I M I' M' IP P) {p : P × M} :

SphereEversion/Global/ParametricityForFree.lean

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ variable {σ : OneJetBundle (IP.prod I) (P × M) I' M'}
6464
#check (R.relativize IP P).slice σ p
6565
#check (R.slice (bundleSnd σ) q : Set <| TangentSpace I' σ.proj.2) -/
6666

67+
set_option backward.isDefEq.respectTransparency false in
6768
omit [IsManifold I ∞ M] [IsManifold I' ∞ M'] [IsManifold IP ∞ P] in
6869
theorem relativize_slice {σ : OneJetBundle (IP.prod I) (P × M) I' M'}
6970
{p : DualPair <| TangentSpace (IP.prod I) σ.1.1} (q : DualPair <| TangentSpace I σ.1.1.2)
@@ -134,6 +135,7 @@ theorem RelMfld.Ample.relativize (hR : R.Ample) : (R.relativize IP P).Ample := b
134135
rw [relativize_slice q rfl]
135136
exact (hR q).vadd
136137

138+
set_option backward.isDefEq.respectTransparency false in
137139
theorem FamilyOneJetSec.uncurry_mem_relativize (S : FamilyOneJetSec I M I' M' IP P) {s : P}
138140
{x : M} : S.uncurry (s, x) ∈ R.relativize IP P ↔ S s x ∈ R := by
139141
simp_rw [RelMfld.relativize, mem_preimage, bundleSnd_eq, OneJetSec.coe_apply, mapLeft]
@@ -150,7 +152,9 @@ theorem FamilyOneJetSec.uncurry_mem_relativize (S : FamilyOneJetSec I M I' M' IP
150152
erw [S.uncurry_ϕ', ContinuousLinearMap.comp_apply, ContinuousLinearMap.add_apply,
151153
ContinuousLinearMap.comp_apply, ContinuousLinearMap.inr_apply, ContinuousLinearMap.coe_fst',
152154
ContinuousLinearMap.comp_apply]
153-
simp
155+
-- adaptation note: in Lean 4.28, all this proof was just `simp`
156+
simp only [uncurry_bs, bs_eq_coe_bs, add_eq_right]
157+
exact ContinuousLinearMap.map_zero _
154158

155159
def FamilyFormalSol.uncurry (S : FamilyFormalSol IP P R) : FormalSol (R.relativize IP P) := by
156160
refine ⟨S.toFamilyOneJetSec.uncurry, ?_⟩
@@ -207,6 +211,7 @@ theorem FamilyOneJetSec.curry_ϕ' (S : FamilyOneJetSec (IP.prod I) (P × M) I' M
207211
rw [mfderiv_id, mfderiv_const]
208212
rfl
209213

214+
set_option backward.isDefEq.respectTransparency false in
210215
theorem FormalSol.eq_iff {F₁ F₂ : FormalSol R} {x : M} :
211216
F₁ x = F₂ x ↔ F₁.bs x = F₂.bs x ∧ F₁.ϕ x = by apply F₂.ϕ x := by
212217
simp [Bundle.TotalSpace.ext_iff, FormalSol.fst_eq, FormalSol.snd_eq]
@@ -221,6 +226,7 @@ theorem FamilyOneJetSec.isHolonomicAt_curry (S : FamilyOneJetSec (IP.prod I) (P
221226
rw [id, hS]
222227
rfl
223228

229+
set_option backward.isDefEq.respectTransparency false in
224230
theorem FamilyOneJetSec.curry_mem (S : FamilyOneJetSec (IP.prod I) (P × M) I' M' J N) {p : N × P}
225231
{x : M} (hR : S p.1 (p.2, x) ∈ R.relativize IP P) : S.curry p x ∈ R := by
226232
simp_rw [RelMfld.relativize, mem_preimage, bundleSnd_eq, OneJetSec.coe_apply, mapLeft] at hR ⊢
@@ -237,6 +243,7 @@ theorem FamilyFormalSol.curry_ϕ' (S : FamilyFormalSol J N (R.relativize IP P))
237243
(S.curry p).ϕ x = (S p.1).ϕ (p.2, x) ∘L ContinuousLinearMap.inr ℝ EP E :=
238244
S.toFamilyOneJetSec.curry_ϕ' p x
239245

246+
set_option backward.isDefEq.respectTransparency false in
240247
theorem curry_eq_iff_eq_uncurry {𝓕 : FamilyFormalSol J N (R.relativize IP P)}
241248
{𝓕₀ : FamilyFormalSol IP P R} {t : N} {x : M} {s : P} (h : 𝓕 t (s, x) = 𝓕₀.uncurry (s, x)) :
242249
(𝓕.curry (t, s)) x = 𝓕₀ s x := by

SphereEversion/Global/Relation.lean

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ variable {R : RelMfld I M I' M'}
6868
structure FormalSol (R : RelMfld I M I' M') extends OneJetSec I M I' M' where
6969
is_sol' : ∀ x : M, toOneJetSec x ∈ R
7070

71+
set_option backward.isDefEq.respectTransparency false in
7172
instance (R : RelMfld I M I' M') : FunLike (FormalSol R) M (OneJetBundle I M I' M') where
7273
coe := fun F ↦ F.toOneJetSec
7374
coe_injective' := by
@@ -76,7 +77,6 @@ instance (R : RelMfld I M I' M') : FunLike (FormalSol R) M (OneJetBundle I M I'
7677
· exact congrArg Prod.snd (congrArg Bundle.TotalSpace.proj (congrFun h x))
7778
· simpa using (Bundle.TotalSpace.ext_iff.mp (congrFun h x)).2
7879

79-
8080
def mkFormalSol (F : M → OneJetBundle I M I' M') (hsec : ∀ x, (F x).1.1 = x) (hsol : ∀ x, F x ∈ R)
8181
(hsmooth : ContMDiff I ((I.prod I').prod 𝓘(ℝ, E →L[ℝ] E')) ∞ F) : FormalSol R
8282
where
@@ -183,6 +183,7 @@ theorem mem_slice {R : RelMfld I M I' M'} {σ : OneJetBundle I M I' M'} {p : Dua
183183
{w : TM' σ.1.2} : w ∈ R.slice σ p ↔ OneJetBundle.mk σ.1.1 σ.1.2 (p.update σ.2 w) ∈ R :=
184184
Iff.rfl
185185

186+
set_option backward.isDefEq.respectTransparency false in
186187
omit [IsManifold I ∞ M] [IsManifold I' ∞ M'] in
187188
theorem slice_mk_update {R : RelMfld I M I' M'} {σ : OneJetBundle I M I' M'}
188189
{p : DualPair <| TM σ.1.1} (x : E') :
@@ -515,8 +516,8 @@ instance (y : Y) : NormedAddCommGroup (TY y) := by assumption
515516

516517
instance (y : Y) : NormedSpace ℝ (TY y) := by assumption
517518

518-
omit [IsManifold IX ∞ X] [IsManifold IM ∞ M]
519-
[IsManifold IY ∞ Y] [IsManifold IN ∞ N] in
519+
set_option backward.isDefEq.respectTransparency false in
520+
omit [IsManifold IX ∞ X] [IsManifold IM ∞ M] [IsManifold IY ∞ Y] [IsManifold IN ∞ N] in
520521
/-- Ampleness survives localization -/
521522
theorem RelMfld.Ample.localize (hR : R.Ample) : (R.localize φ ψ).Ample := by
522523
intro x p
@@ -558,6 +559,9 @@ def OneJetSec.localize (hF : range (F.bs ∘ φ) ⊆ range ψ) : OneJetSec IX X
558559
(F.contMDiff_bs.comp φ.contMDiff_to).contMDiffAt
559560
· exact .oneJet_comp IM φ (F.contMDiff_eta.comp φ.contMDiff_to) φ.contMDiff_to.oneJetExt
560561

562+
#adaptation_note /-- In Lean 4.28, this declaration was still reasonably fast -/
563+
set_option maxHeartbeats 600000 in
564+
set_option backward.isDefEq.respectTransparency false in
561565
theorem transfer_localize (hF : range (F.bs ∘ φ) ⊆ range ψ) (x : X) :
562566
φ.transfer ψ (F.localize φ ψ hF x) = F (φ x) := by
563567
rw [OneJetSec.coe_apply, OneJetSec.localize_bs, OneJetSec.localize_ϕ,
@@ -570,9 +574,16 @@ theorem transfer_localize (hF : range (F.bs ∘ φ) ⊆ range ψ) (x : X) :
570574
-- continuous_linear_equiv.coe_coe, continuous_linear_equiv.apply_symm_apply]
571575
-- Porting note: we are missing an ext lemma here.
572576
apply ContinuousLinearMap.ext_iff.2 (fun v ↦ ?_)
577+
/- adaptation note: in Lean 4.28, this was
573578
erw [← ψ.fderiv_coe, ContinuousLinearMap.comp_apply, ContinuousLinearEquiv.coe_coe,
574579
ContinuousLinearMap.comp_apply, ContinuousLinearEquiv.apply_symm_apply,
575580
ContinuousLinearMap.comp_apply, ContinuousLinearEquiv.apply_symm_apply]
581+
and much faster -/
582+
rw [← ψ.fderiv_coe, ContinuousLinearMap.comp_apply]
583+
erw [ContinuousLinearEquiv.coe_coe (e := (φ.fderiv x).symm)]
584+
rw [ContinuousLinearMap.comp_apply]
585+
erw [ContinuousLinearEquiv.apply_symm_apply, ContinuousLinearMap.comp_apply,
586+
ContinuousLinearEquiv.apply_symm_apply]
576587
rfl
577588

578589
theorem OneJetSec.localize_bs_fun (hF : range (F.bs ∘ φ) ⊆ range ψ) :
@@ -583,6 +594,7 @@ theorem OneJetSec.localize_mem_iff (hF : range (F.bs ∘ φ) ⊆ range ψ) {x :
583594
F.localize φ ψ hF x ∈ R.localize φ ψ ↔ F (φ x) ∈ R := by
584595
rw [RelMfld.localize, mem_preimage, transfer_localize F φ ψ hF]
585596

597+
set_option backward.isDefEq.respectTransparency false in
586598
theorem isHolonomicAt_localize_iff (hF : range (F.bs ∘ φ) ⊆ range ψ) (x : X) :
587599
(F.localize φ ψ hF).IsHolonomicAt x ↔ F.IsHolonomicAt (φ x) := by
588600
have :
@@ -603,7 +615,8 @@ theorem isHolonomicAt_localize_iff (hF : range (F.bs ∘ φ) ⊆ range ψ) (x :
603615

604616
/-! ## From embeddings `X ↪ M` and `Y ↪ N` to `J¹(X, Y) ↪ J¹(M, N)` -/
605617

606-
-- very slow to elaborate :-(
618+
-- slow to elaborate :-(
619+
set_option backward.isDefEq.respectTransparency false in
607620
@[simps]
608621
def OneJetBundle.embedding : OpenSmoothEmbedding IXY J¹XY IMN J¹MN where
609622
toFun := φ.transfer ψ

0 commit comments

Comments
 (0)