Theorem: ContDiffOn.comp
File: Mathlib/Analysis/Calculus/ContDiff.lean

tactic: let Eu : Type max uE uF uG := ULift.{max uF uG} E
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: let Fu : Type max uE uF uG := ULift.{max uE uG} F
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: let Gu : Type max uE uF uG := ULift.{max uE uF} G
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have isoE : Eu ≃L[𝕜] E := ContinuousLinearEquiv.ulift
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have isoF : Fu ≃L[𝕜] F := ContinuousLinearEquiv.ulift
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have isoG : Gu ≃L[𝕜] G := ContinuousLinearEquiv.ulift
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: let fu : Eu → Fu := (isoF.symm ∘ f) ∘ isoE
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have fu_diff : ContDiffOn 𝕜 n fu (isoE ⁻¹' s) := by
  rwa [isoE.contDiffOn_comp_iff, isoF.symm.comp_contDiffOn_iff]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: let gu : Fu → Gu := (isoG.symm ∘ g) ∘ isoF
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have gu_diff : ContDiffOn 𝕜 n gu (isoF ⁻¹' t) := by
  rwa [isoF.contDiffOn_comp_iff, isoG.symm.comp_contDiffOn_iff]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have main : ContDiffOn 𝕜 n (gu ∘ fu) (isoE ⁻¹' s) := by
  apply ContDiffOn.comp_same_univ gu_diff fu_diff
  intro y hy
  simp only [ContinuousLinearEquiv.coe_apply, Function.comp_apply, mem_preimage]
  rw [isoF.apply_symm_apply (f (isoE y))]
  exact st hy
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: have : gu ∘ fu = (isoG.symm ∘ g ∘ f) ∘ isoE := by
  ext y
  simp only [Function.comp_apply]
  rw [isoF.apply_symm_apply (f (isoE y))]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
main : ContDiffOn 𝕜 n (gu ∘ fu) (↑isoE ⁻¹' s)
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: rwa [this, isoE.contDiffOn_comp_iff, isoG.symm.comp_contDiffOn_iff] at main
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
main : ContDiffOn 𝕜 n (gu ∘ fu) (↑isoE ⁻¹' s)
this : gu ∘ fu = (↑(ContinuousLinearEquiv.symm isoG) ∘ g ∘ f) ∘ ↑isoE
⊢ ContDiffOn 𝕜 n (g ∘ f) s

tactic: rwa [isoE.contDiffOn_comp_iff, isoF.symm.comp_contDiffOn_iff]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
⊢ ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)

tactic: rwa [isoF.contDiffOn_comp_iff, isoG.symm.comp_contDiffOn_iff]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
⊢ ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)

tactic: apply ContDiffOn.comp_same_univ gu_diff fu_diff
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
⊢ ContDiffOn 𝕜 n (gu ∘ fu) (↑isoE ⁻¹' s)

tactic: intro y hy
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
⊢ ↑isoE ⁻¹' s ⊆ fu ⁻¹' (↑isoF ⁻¹' t)

tactic: simp only [ContinuousLinearEquiv.coe_apply, Function.comp_apply, mem_preimage]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
y : Eu
hy : y ∈ ↑isoE ⁻¹' s
⊢ y ∈ fu ⁻¹' (↑isoF ⁻¹' t)

tactic: rw [isoF.apply_symm_apply (f (isoE y))]
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
y : Eu
hy : y ∈ ↑isoE ⁻¹' s
⊢ ↑isoF (↑(ContinuousLinearEquiv.symm isoF) (f (↑isoE y))) ∈ t

tactic: exact st hy
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
y : Eu
hy : y ∈ ↑isoE ⁻¹' s
⊢ f (↑isoE y) ∈ t

tactic: ext y
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
main : ContDiffOn 𝕜 n (gu ∘ fu) (↑isoE ⁻¹' s)
⊢ gu ∘ fu = (↑(ContinuousLinearEquiv.symm isoG) ∘ g ∘ f) ∘ ↑isoE

tactic: simp only [Function.comp_apply]
state_before: case h.h
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
main : ContDiffOn 𝕜 n (gu ∘ fu) (↑isoE ⁻¹' s)
y : Eu
⊢ ((gu ∘ fu) y).down = (((↑(ContinuousLinearEquiv.symm isoG) ∘ g ∘ f) ∘ ↑isoE) y).down

tactic: rw [isoF.apply_symm_apply (f (isoE y))]
state_before: case h.h
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.731125
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s✝ s₁ t✝ u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
s : Set E
t : Set F
g : F → G
f : E → F
hg : ContDiffOn 𝕜 n g t
hf : ContDiffOn 𝕜 n f s
st : s ⊆ f ⁻¹' t
Eu : Type (max uE uF uG) := ULift E
Fu : Type (max uE uF uG) := ULift F
Gu : Type (max uE uF uG) := ULift G
isoE : Eu ≃L[𝕜] E
isoF : Fu ≃L[𝕜] F
isoG : Gu ≃L[𝕜] G
fu : Eu → Fu := (↑(ContinuousLinearEquiv.symm isoF) ∘ f) ∘ ↑isoE
fu_diff : ContDiffOn 𝕜 n fu (↑isoE ⁻¹' s)
gu : Fu → Gu := (↑(ContinuousLinearEquiv.symm isoG) ∘ g) ∘ ↑isoF
gu_diff : ContDiffOn 𝕜 n gu (↑isoF ⁻¹' t)
main : ContDiffOn 𝕜 n (gu ∘ fu) (↑isoE ⁻¹' s)
y : Eu
⊢ (↑(ContinuousLinearEquiv.symm isoG) (g (↑isoF (↑(ContinuousLinearEquiv.symm isoF) (f (↑isoE y)))))).down =
    (↑(ContinuousLinearEquiv.symm isoG) (g (f (↑isoE y)))).down