Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions SphereEversion/Global/Gromov.lean
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,8 @@ theorem RelMfld.Ample.satisfiesHPrinciple (hRample : R.Ample) (hRopen : IsOpen R
rintro a b ⟨t, x⟩ f h
change ContMDiffAt _ _ _ (f ∘ fun p : ℝ × M ↦ (a * p.1 + b, p.2)) (t, x)
change ContMDiffAt _ _ _ f ((fun p : ℝ × M ↦ (a * p.1 + b, p.2)) (t, x)) at h
have :
ContMDiffAt (𝓘(ℝ, ℝ).prod IM) (𝓘(ℝ, ℝ).prod IM) ∞ (fun p : ℝ × M ↦ (a * p.1 + b, p.2))
(t, x) :=
haveI h₁ : ContMDiffAt 𝓘(ℝ, ℝ) 𝓘(ℝ, ℝ) ∞ (fun t ↦ a * t + b) t :=
have : CMDiffAt ∞ (fun p : ℝ × M ↦ (a * p.1 + b, p.2)) (t, x) :=
haveI h₁ : CMDiffAt ∞ (fun t ↦ a * t + b) t :=
contMDiffAt_iff_contDiffAt.mpr
(((contDiffAt_id : ContDiffAt ℝ ∞ id t).const_smul a).add contDiffAt_const)
h₁.prodMap contMDiffAt_id
Expand Down
5 changes: 2 additions & 3 deletions SphereEversion/Global/Immersion.lean
Original file line number Diff line number Diff line change
Expand Up @@ -286,14 +286,13 @@ variable {𝕜 : Type*} [NontriviallyNormedField 𝕜]
{P : Type*} [TopologicalSpace P] [ChartedSpace HP P]

-- move to Mathlib.Geometry.Manifold.ContMDiff.Product
lemma ContMDiff.prod_left {n : ℕ∞} (x : M) :
ContMDiff I' (I.prod I') n fun p : M' ↦ (⟨x, p⟩ : M × M') := by
lemma ContMDiff.prod_left {n : ℕ∞} (x : M) : CMDiff n fun p : M' ↦ (⟨x, p⟩ : M × M') := by
rw [contMDiff_prod_iff]
exact ⟨contMDiff_const, contMDiff_id⟩

-- move to Mathlib.Geometry.Manifold.ContMDiff.Product
theorem ContMDiff.uncurry_left {n : ℕ∞} {f : M → M' → P}
(hf : ContMDiff (I.prod I') IP n ↿f) (x : M) : CMDiff n (f x) := by
(hf : CMDiff n ↿f) (x : M) : CMDiff n (f x) := by
have : f x = (uncurry f) ∘ fun p : M' ↦ ⟨x, p⟩ := by ext; simp
-- or just `apply hf.comp (ContMDiff.prod_left I I' x)`
rw [this]; exact hf.comp (ContMDiff.prod_left I I' x)
Expand Down
40 changes: 16 additions & 24 deletions SphereEversion/Global/OneJetBundle.lean
Original file line number Diff line number Diff line change
Expand Up @@ -331,12 +331,12 @@ theorem contMDiff_oneJetBundle_proj :

theorem ContMDiff.oneJetBundle_proj {f : N → J¹MM'}
(hf : ContMDiff J ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ f) :
ContMDiff J (I.prod I') ∞ fun x ↦ (f x).1 :=
CMDiff ∞ fun x ↦ (f x).1 :=
contMDiff_oneJetBundle_proj.comp hf

theorem ContMDiffAt.oneJetBundle_proj {f : N → J¹MM'} {x₀ : N}
(hf : ContMDiffAt J ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ f x₀) :
ContMDiffAt J (I.prod I') ∞ (fun x ↦ (f x).1) x₀ :=
CMDiffAt ∞ (fun x ↦ (f x).1) x₀ :=
(contMDiff_oneJetBundle_proj _).comp x₀ hf

/-- The constructor of `OneJetBundle`, in case `Sigma.mk` will not give the right type. -/
Expand All @@ -360,23 +360,21 @@ theorem contMDiffAt_oneJetBundle {f : N → J¹MM'} {x₀ : N} :
ContMDiffAt J ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ f x₀ ↔
CMDiffAt ∞ (fun x ↦ (f x).1.1) x₀ ∧
CMDiffAt ∞ (fun x ↦ (f x).1.2) x₀ ∧
ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') ∞
(inTangentCoordinates I I' (fun x ↦ (f x).1.1) (fun x ↦ (f x).1.2) (fun x ↦ (f x).2)
x₀) x₀ := by
CMDiffAt ∞ (inTangentCoordinates I I' (fun x ↦ (f x).1.1)
(fun x ↦ (f x).1.2) (fun x ↦ (f x).2) x₀) x₀ := by
simp_rw [Bundle.contMDiffAt_totalSpace, contMDiffAt_prod_iff, and_assoc,
oneJetBundle_trivializationAt]
rfl

theorem contMDiffAt_oneJetBundle_mk {f : N → M} {g : N → M'} {ϕ : N → E →L[𝕜] E'} {x₀ : N} :
ContMDiffAt J ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞
(fun x ↦ OneJetBundle.mk (f x) (g x) (ϕ x) : N → J¹MM') x₀ ↔
CMDiffAt ∞ f x₀ ∧ CMDiffAt ∞ g x₀ ∧
ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') ∞ (inTangentCoordinates I I' f g ϕ x₀) x₀ :=
CMDiffAt ∞ f x₀ ∧ CMDiffAt ∞ g x₀ ∧ CMDiffAt ∞ (inTangentCoordinates I I' f g ϕ x₀) x₀ :=
contMDiffAt_oneJetBundle

theorem ContMDiffAt.oneJetBundle_mk {f : N → M} {g : N → M'} {ϕ : N → E →L[𝕜] E'} {x₀ : N}
(hf : CMDiffAt ∞ f x₀) (hg : CMDiffAt ∞ g x₀)
(hϕ : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') ∞ (inTangentCoordinates I I' f g ϕ x₀) x₀) :
(hϕ : CMDiffAt ∞ (inTangentCoordinates I I' f g ϕ x₀) x₀) :
ContMDiffAt J ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞
(fun x ↦ OneJetBundle.mk (f x) (g x) (ϕ x) : N → J¹MM') x₀ :=
contMDiffAt_oneJetBundle.mpr ⟨hf, hg, hϕ⟩
Expand Down Expand Up @@ -414,9 +412,9 @@ theorem ContinuousAt.inTangentCoordinates_comp {f : N → M} {g : N → M'} {h :

theorem ContMDiffAt.clm_comp_inTangentCoordinates {f : N → M} {g : N → M'} {h : N → N'}
{ϕ' : N → E' →L[𝕜] F'} {ϕ : N → E →L[𝕜] E'} {n : N} (hg : ContinuousAt g n)
(hϕ' : ContMDiffAt J 𝓘(𝕜, E' →L[𝕜] F') ∞ (inTangentCoordinates I' J' g h ϕ' n) n)
(hϕ : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') ∞ (inTangentCoordinates I I' f g ϕ n) n) :
ContMDiffAt J 𝓘(𝕜, E →L[𝕜] F') ∞ (inTangentCoordinates I J' f h (fun n ↦ ϕ' n ∘L ϕ n) n) n :=
(hϕ' : CMDiffAt ∞ (inTangentCoordinates I' J' g h ϕ' n) n)
(hϕ : CMDiffAt ∞ (inTangentCoordinates I I' f g ϕ n) n) :
CMDiffAt ∞ (inTangentCoordinates I J' f h (fun n ↦ ϕ' n ∘L ϕ n) n) n :=
(hϕ'.clm_comp hϕ).congr_of_eventuallyEq hg.inTangentCoordinates_comp

variable (I')
Expand Down Expand Up @@ -509,13 +507,10 @@ theorem OneJetBundle.map_id (x : J¹MM') :

theorem ContMDiffAt.oneJetBundle_map {f : M'' → M → N} {g : M'' → M' → N'} {x₀ : M''}
{Dfinv : ∀ (z : M'') (x : M), TangentSpace J (f z x) →L[𝕜] TangentSpace I x} {k : M'' → J¹MM'}
(hf : ContMDiffAt (I''.prod I) J ∞ f.uncurry (x₀, (k x₀).1.1))
(hg : ContMDiffAt (I''.prod I') J' ∞ g.uncurry (x₀, (k x₀).1.2))
(hDfinv :
ContMDiffAt I'' 𝓘(𝕜, F →L[𝕜] E) ∞
(inTangentCoordinates J I (fun x ↦ f x (k x).1.1) (fun x ↦ (k x).1.1)
(fun x ↦ Dfinv x (k x).1.1) x₀)
x₀)
(hf : CMDiffAt ∞ f.uncurry (x₀, (k x₀).1.1))
(hg : CMDiffAt ∞ g.uncurry (x₀, (k x₀).1.2))
(hDfinv : CMDiffAt ∞ (inTangentCoordinates J I (fun x ↦ f x (k x).1.1) (fun x ↦ (k x).1.1)
(fun x ↦ Dfinv x (k x).1.1) x₀) x₀)
(hk : ContMDiffAt I'' ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ k x₀) :
ContMDiffAt I'' ((J.prod J').prod 𝓘(𝕜, F →L[𝕜] F')) ∞
(fun z ↦ OneJetBundle.map I' J' (f z) (g z) (Dfinv z) (k z)) x₀ := by
Expand Down Expand Up @@ -544,12 +539,9 @@ theorem mapLeft_eq_map (f : M → N) (Dfinv : ∀ x : M, TangentSpace J (f x)

theorem ContMDiffAt.mapLeft {f : N' → M → N} {x₀ : N'}
{Dfinv : ∀ (z : N') (x : M), TangentSpace J (f z x) →L[𝕜] TangentSpace I x} {g : N' → J¹MM'}
(hf : ContMDiffAt (J'.prod I) J ∞ f.uncurry (x₀, (g x₀).1.1))
(hDfinv :
ContMDiffAt J' 𝓘(𝕜, F →L[𝕜] E) ∞
(inTangentCoordinates J I (fun x ↦ f x (g x).1.1) (fun x ↦ (g x).1.1)
(fun x ↦ Dfinv x (g x).1.1) x₀)
x₀)
(hf : CMDiffAt ∞ f.uncurry (x₀, (g x₀).1.1))
(hDfinv : CMDiffAt ∞ (inTangentCoordinates J I (fun x ↦ f x (g x).1.1) (fun x ↦ (g x).1.1)
(fun x ↦ Dfinv x (g x).1.1) x₀) x₀)
(hg : ContMDiffAt J' ((I.prod I').prod 𝓘(𝕜, E →L[𝕜] E')) ∞ g x₀) :
ContMDiffAt J' ((J.prod I').prod 𝓘(𝕜, F →L[𝕜] E')) ∞
(fun z ↦ mapLeft (f z) (Dfinv z) (g z)) x₀ := by
Expand Down
2 changes: 1 addition & 1 deletion SphereEversion/Global/OneJetSec.lean
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ protected theorem smooth (S : FamilyOneJetSec I M I' M' J N) :
S.smooth'

theorem smooth_bs (S : FamilyOneJetSec I M I' M' J N) :
ContMDiff (J.prod I) I' ∞ fun p : N × M ↦ S.bs p.1 p.2 :=
CMDiff ∞ fun p : N × M ↦ S.bs p.1 p.2 :=
contMDiff_oneJetBundle_proj.snd.comp S.smooth

theorem smooth_coe_bs (S : FamilyOneJetSec I M I' M' J N) {p : N} : CMDiff ∞ (S.bs p) :=
Expand Down
7 changes: 2 additions & 5 deletions SphereEversion/Global/ParametricityForFree.lean
Original file line number Diff line number Diff line change
Expand Up @@ -171,16 +171,13 @@ def FamilyOneJetSec.curry (S : FamilyOneJetSec (IP.prod I) (P × M) I' M' J N) :
smooth' := by
rintro ⟨⟨t, s⟩, x⟩
refine contMDiffAt_snd.oneJetBundle_mk (S.smooth_bs.comp contMDiff_prod_assoc _) ?_
have h1 :
ContMDiffAt ((J.prod IP).prod I) 𝓘(ℝ, EP × E →L[ℝ] E') ∞
(inTangentCoordinates (IP.prod I) I' (fun p : (N × P) × M ↦ (p.1.2, p.2))
have h1 : CMDiffAt ∞ (inTangentCoordinates (IP.prod I) I' (fun p : (N × P) × M ↦ (p.1.2, p.2))
(fun p : (N × P) × M ↦ (S p.1.1).bs (p.1.2, p.2))
(fun p : (N × P) × M ↦ (S p.1.1).ϕ (p.1.2, p.2)) ((t, s), x))
((t, s), x) := by
apply (contMDiffAt_oneJetBundle.mp <|
ContMDiffAt.comp ((t, s), x) (S.smooth (t, (s, x))) (contMDiff_prod_assoc ((t, s), x))).2.2
have h2 :
ContMDiffAt ((J.prod IP).prod I) 𝓘(ℝ, E →L[ℝ] EP × E) ∞
have h2 : CMDiffAt ∞
(inTangentCoordinates I (IP.prod I) Prod.snd (fun p : (N × P) × M ↦ (p.1.2, p.2))
(fun p : (N × P) × M ↦ mfderiv I (IP.prod I) (fun x : M ↦ (p.1.2, x)) p.2) ((t, s), x))
((t, s), x) := by
Expand Down
7 changes: 3 additions & 4 deletions SphereEversion/Global/Relation.lean
Original file line number Diff line number Diff line change
Expand Up @@ -383,10 +383,9 @@ family of formal solutions. -/
theorem RelMfld.SatisfiesHPrincipleWith.bs {R : RelMfld I M IX X} {C : Set (P × M)} {ε : M → ℝ}
(h : R.SatisfiesHPrincipleWith IP C ε) (𝓕₀ : FamilyFormalSol IP P R)
(h2 : ∀ᶠ p : P × M near C, (𝓕₀ p.1).toOneJetSec.IsHolonomicAt p.2) :
∃ f : P → M → X,
(ContMDiff (IP.prod I) IX ∞ <| uncurry f) ∧
(∀ᶠ p : P × M near C, f p.1 p.2 = 𝓕₀.bs p.1 p.2) ∧
(∀ p m, dist (f p m) ((𝓕₀ p).bs m) ≤ ε m) ∧ ∀ p m, oneJetExt I IX (f p) m ∈ R := by
∃ f : P → M → X, (CMDiff ∞ (uncurry f)) ∧
(∀ᶠ p : P × M near C, f p.1 p.2 = 𝓕₀.bs p.1 p.2) ∧
(∀ p m, dist (f p m) ((𝓕₀ p).bs m) ≤ ε m) ∧ ∀ p m, oneJetExt I IX (f p) m ∈ R := by
rcases h 𝓕₀ h2 with ⟨𝓕, _, h₂, h₃, h₄⟩
refine ⟨fun s ↦ (𝓕 (1, s)).bs, ?_, ?_, ?_, ?_⟩
· let j : C^∞⟮IP, P; 𝓘(ℝ, ℝ).prod IP, ℝ × P⟯ :=
Expand Down
4 changes: 2 additions & 2 deletions SphereEversion/Global/SmoothEmbedding.lean
Original file line number Diff line number Diff line change
Expand Up @@ -424,8 +424,8 @@ open Function

/-- This is lemma `lem:smooth_updating` in the blueprint. -/
theorem smooth_update (f : M' → M → N) (g : M' → X → Y) {k : M' → M} {K : Set X}
(hK : IsClosed (φ '' K)) (hf : ContMDiff (IM'.prod IM) IN ∞ (uncurry f))
(hg : ContMDiff (IM'.prod IX) IY ∞ (uncurry g)) (hk : CMDiff ∞ k)
(hK : IsClosed (φ '' K))
(hf : CMDiff ∞ (uncurry f)) (hg : CMDiff ∞ (uncurry g)) (hk : CMDiff ∞ k)
(hg' : ∀ y x, x ∉ K → f y (φ x) = ψ (g y x)) :
CMDiff ∞ fun x ↦ update φ ψ (f x) (g x) (k x) := by
have hK' : ∀ x, k x ∉ φ '' K → update φ ψ (f x) (g x) (k x) = f x (k x) := fun x hx ↦
Expand Down
13 changes: 6 additions & 7 deletions SphereEversion/Global/TwistOneJetSec.lean
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ variable {f : N → J¹[𝕜, E, I, M, V]}
-- todo: remove or use to prove `contMDiff_one_jet_eucl_bundle`
theorem contMDiffAt_one_jet_eucl_bundle' {x₀ : N} :
ContMDiffAt J (I.prod 𝓘(𝕜, E →L[𝕜] V)) ∞ f x₀ ↔ CMDiffAt ∞ (fun x ↦ (f x).1) x₀ ∧
ContMDiffAt J 𝓘(𝕜, E →L[𝕜] V) ∞ (fun x ↦ show E →L[𝕜] V from
CMDiffAt ∞ (fun x ↦ show E →L[𝕜] V from
(f x).2 ∘L (trivializationAt E (TangentSpace I : M → _) (f x₀).1).symmL 𝕜 (f x).1) x₀ := by
simp_rw [contMDiffAt_hom_bundle, inCoordinates, Trivial.trivializationAt,
Trivial.trivialization_continuousLinearMapAt]
Expand All @@ -45,7 +45,7 @@ theorem contMDiffAt_one_jet_eucl_bundle' {x₀ : N} :
theorem contMDiffAt_one_jet_eucl_bundle {x₀ : N} :
ContMDiffAt J (I.prod 𝓘(𝕜, E →L[𝕜] V)) ∞ f x₀ ↔
CMDiffAt ∞ (fun x ↦ (f x).1) x₀ ∧
ContMDiffAt J 𝓘(𝕜, E →L[𝕜] V) ∞ (fun x ↦ show E →L[𝕜] V from
CMDiffAt ∞ (fun x ↦ show E →L[𝕜] V from
(f x).2 ∘L (trivializationAt E (TangentSpace I) (f x₀).proj).symmL 𝕜 (f x).proj) x₀ := by
rw [contMDiffAt_hom_bundle, and_congr_right_iff]
intro hf
Expand All @@ -62,15 +62,15 @@ theorem contMDiffAt_one_jet_eucl_bundle {x₀ : N} :

theorem ContMDiffAt.one_jet_eucl_bundle_mk' {f : N → M} {ϕ : N → E →L[𝕜] V} {x₀ : N}
(hf : CMDiffAt ∞ f x₀)
(hϕ : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] V) ∞ (fun x ↦ show E →L[𝕜] V from
(hϕ : CMDiffAt ∞ (fun x ↦ show E →L[𝕜] V from
ϕ x ∘L (trivializationAt E (TangentSpace I : M → _) (f x₀)).symmL 𝕜 (f x)) x₀) :
ContMDiffAt J (I.prod 𝓘(𝕜, E →L[𝕜] V)) ∞
(fun x ↦ Bundle.TotalSpace.mk (f x) (ϕ x) : N → J¹[𝕜, E, I, M, V]) x₀ :=
contMDiffAt_one_jet_eucl_bundle'.mpr ⟨hf, hϕ⟩

theorem ContMDiffAt.one_jet_eucl_bundle_mk {f : N → M} {ϕ : N → E →L[𝕜] V} {x₀ : N}
(hf : CMDiffAt ∞ f x₀)
(hϕ : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] V) ∞ (fun x ↦ show E →L[𝕜] V from
(hϕ : CMDiffAt ∞ (fun x ↦ show E →L[𝕜] V from
ϕ x ∘L (trivializationAt E (TangentSpace I) (f x₀)).symmL 𝕜 (f x)) x₀) :
ContMDiffAt J (I.prod 𝓘(𝕜, E →L[𝕜] V)) ∞
(fun x ↦ Bundle.TotalSpace.mk (f x) (ϕ x) : N → J¹[𝕜, E, I, M, V]) x₀ :=
Expand Down Expand Up @@ -218,9 +218,8 @@ def familyJoin {f : N × M → V} (hf : ContMDiff (J.prod I) 𝓘(ℝ, V) ∞ f)
ext : 1 <;> simp

def familyTwist (s : OneJetEuclSec I M V) (i : N × M → V →L[ℝ] V')
(i_smooth : ∀ x₀ : N × M, ContMDiffAt (J.prod I) 𝓘(ℝ, V →L[ℝ] V') ∞ i x₀) :
FamilyOneJetEuclSec I M V' J N
where
(i_smooth : ∀ x₀ : N × M, CMDiffAt ∞ i x₀) :
FamilyOneJetEuclSec I M V' J N where
toFun p := ⟨p.2, (i p).comp (s p.2).2⟩
is_sec' p := rfl
smooth' := by
Expand Down
8 changes: 2 additions & 6 deletions SphereEversion/ToMathlib/ExistsOfConvex.lean
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,6 @@ variable {H₁ M₁ H₂ M₂ : Type*}
[TopologicalSpace H₂] (I₂ : ModelWithCorners ℝ E₂ H₂)
[TopologicalSpace M₂] [ChartedSpace H₂ M₂] [IsManifold I₂ ∞ M₂]

@[inherit_doc] local notation "𝓒" => ContMDiff (I₁.prod I₂) 𝓘(ℝ, F)

@[inherit_doc] local notation "𝓒_on" => ContMDiffOn (I₁.prod I₂) 𝓘(ℝ, F)

omit [FiniteDimensional ℝ E₁] [FiniteDimensional ℝ E₂]
[IsManifold I₁ ∞ M₁] [IsManifold I₂ ∞ M₂] in
theorem reallyConvex_contMDiffAtProd {x : M₁} (n : ℕ∞) :
Expand All @@ -135,8 +131,8 @@ omit [FiniteDimensional ℝ E₂] [IsManifold I₂ ∞ M₂] in
theorem exists_contMDiff_of_convex₂ {P : M₁ → (M₂ → F) → Prop} [SigmaCompactSpace M₁] [T2Space M₁]
(hP : ∀ x, Convex ℝ {f | P x f}) {n : ℕ∞}
(hP' : ∀ x : M₁, ∃ U ∈ 𝓝 x, ∃ f : M₁ → M₂ → F,
𝓒_on n (uncurry f) (U ×ˢ (univ : Set M₂)) ∧ ∀ y ∈ U, P y (f y)) :
∃ f : M₁ → M₂ → F, 𝓒 n (uncurry f) ∧ ∀ x, P x (f x) := by
CMDiff[U ×ˢ (univ : Set M₂)] n (uncurry f) ∧ ∀ y ∈ U, P y (f y)) :
∃ f : M₁ → M₂ → F, CMDiff n (uncurry f) ∧ ∀ x, P x (f x) := by
let PP : (Σ x : M₁, Germ (𝓝 x) (M₂ → F)) → Prop := fun p ↦
p.2.ContMDiffAtProd I₁ I₂ n ∧ P p.1 p.2.value
have hPP : ∀ x : M₁, ReallyConvex (smoothGerm I₁ x) {φ | PP ⟨x, φ⟩} := fun x ↦ by
Expand Down
12 changes: 4 additions & 8 deletions SphereEversion/ToMathlib/Geometry/Manifold/MiscManifold.lean
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,19 @@ variable {𝕜 : Type*} [NontriviallyNormedField 𝕜]
{e : OpenPartialHomeomorph M H} {f : M → M'} {m n : WithTop ℕ∞} {s : Set M} {x x' : M}

theorem contMDiff_prod {f : M → M' × N'} :
ContMDiff I (I'.prod J') n f ↔
(CMDiff n fun x ↦ (f x).1) ∧ CMDiff n fun x ↦ (f x).2 :=
CMDiff n f ↔ (CMDiff n fun x ↦ (f x).1) ∧ CMDiff n fun x ↦ (f x).2 :=
⟨fun h ↦ ⟨h.fst, h.snd⟩, fun h ↦ h.1.prodMk h.2⟩

theorem contMDiffAt_prod {f : M → M' × N'} {x : M} :
ContMDiffAt I (I'.prod J') n f x ↔
CMDiffAt n (fun x ↦ (f x).1) x ∧ CMDiffAt n (fun x ↦ (f x).2) x :=
CMDiffAt n f x ↔ CMDiffAt n (fun x ↦ (f x).1) x ∧ CMDiffAt n (fun x ↦ (f x).2) x :=
⟨fun h ↦ ⟨h.fst, h.snd⟩, fun h ↦ h.1.prodMk h.2⟩

theorem smooth_prod {f : M → M' × N'} :
ContMDiff I (I'.prod J') ∞ f ↔
(CMDiff ∞ fun x ↦ (f x).1) ∧ CMDiff ∞ fun x ↦ (f x).2 :=
CMDiff ∞ f ↔ (CMDiff ∞ fun x ↦ (f x).1) ∧ CMDiff ∞ fun x ↦ (f x).2 :=
contMDiff_prod

theorem smoothAt_prod {f : M → M' × N'} {x : M} :
ContMDiffAt I (I'.prod J') ∞ f x ↔
CMDiffAt ∞ (fun x ↦ (f x).1) x ∧ CMDiffAt ∞ (fun x ↦ (f x).2) x :=
CMDiffAt ∞ f x ↔ CMDiffAt ∞ (fun x ↦ (f x).1) x ∧ CMDiffAt ∞ (fun x ↦ (f x).2) x :=
contMDiffAt_prod

end IsManifold
28 changes: 14 additions & 14 deletions lake-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@
"inputRev": null,
"inherited": false,
"configFile": "lakefile.lean"},
{"url": "https://github.com/leanprover-community/mathlib4",
{"url": "https://github.com/grunweg/mathlib4.git",
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "7c64d37d340c4fad44f930c9da90d2dae284bb8b",
"scope": "",
"rev": "d4a0bdb55c93112e3bdea8e86864379701317dbd",
"name": "mathlib",
"manifestFile": "lake-manifest.json",
"inputRev": "master",
"inputRev": "diffgeo-use-custom-elaborators",
"inherited": false,
"configFile": "lakefile.lean"},
{"url": "https://github.com/leanprover-community/plausible",
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "b949552f6ca8e223f424b3e3b33f74185bbf1179",
"rev": "8864a73bf79aad549e34eff972c606343935106d",
"name": "plausible",
"manifestFile": "lake-manifest.json",
"inputRev": "main",
Expand All @@ -35,7 +35,7 @@
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "99657ad92e23804e279f77ea6dbdeebaa1317b98",
"rev": "2ed4ba69b6127de8f5c2af83cccacd3c988b06bf",
"name": "LeanSearchClient",
"manifestFile": "lake-manifest.json",
"inputRev": "main",
Expand All @@ -45,7 +45,7 @@
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "d768126816be17600904726ca7976b185786e6b9",
"rev": "451499ea6e97cee4c8979b507a9af5581a849161",
"name": "importGraph",
"manifestFile": "lake-manifest.json",
"inputRev": "main",
Expand All @@ -55,17 +55,17 @@
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "556caed0eadb7901e068131d1be208dd907d07a2",
"rev": "fb8ed0a85a96e3176f6e94b20d413ea72d92576d",
"name": "proofwidgets",
"manifestFile": "lake-manifest.json",
"inputRev": "v0.0.74",
"inputRev": "v0.0.77",
"inherited": true,
"configFile": "lakefile.lean"},
{"url": "https://github.com/leanprover-community/aesop",
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "725ac8cd67acd70a7beaf47c3725e23484c1ef50",
"rev": "1fa48c6a63b4c4cda28be61e1037192776e77ac0",
"name": "aesop",
"manifestFile": "lake-manifest.json",
"inputRev": "master",
Expand All @@ -75,7 +75,7 @@
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "2676cb5599c12c434daac781e2cea44e8105fc41",
"rev": "95c2f8afe09d9e49d3cacca667261da04f7f93f7",
"name": "Qq",
"manifestFile": "lake-manifest.json",
"inputRev": "master",
Expand All @@ -85,7 +85,7 @@
"type": "git",
"subDir": null,
"scope": "leanprover-community",
"rev": "8da40b72fece29b7d3fe3d768bac4c8910ce9bee",
"rev": "c44068fa1b40041e6df42bd67639b690eb2764ca",
"name": "batteries",
"manifestFile": "lake-manifest.json",
"inputRev": "main",
Expand All @@ -95,10 +95,10 @@
"type": "git",
"subDir": null,
"scope": "leanprover",
"rev": "91c18fa62838ad0ab7384c03c9684d99d306e1da",
"rev": "72ae7004d9f0ddb422aec5378204fdd7828c5672",
"name": "Cli",
"manifestFile": "lake-manifest.json",
"inputRev": "main",
"inputRev": "v4.25.0-rc2",
"inherited": true,
"configFile": "lakefile.toml"}],
"name": "SphereEversion",
Expand Down
3 changes: 2 additions & 1 deletion lakefile.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ linter.mathlibStandardSet = true

[[require]]
name = "mathlib"
scope = "leanprover-community"
git = "https://github.com/grunweg/mathlib4.git"
rev = "diffgeo-use-custom-elaborators"

[[require]]
name = "checkdecls"
Expand Down
2 changes: 1 addition & 1 deletion lean-toolchain
Original file line number Diff line number Diff line change
@@ -1 +1 @@
leanprover/lean4:v4.24.0
leanprover/lean4:v4.25.0-rc2
Loading