Theorem: contDiffOn_clm_apply
File: Mathlib/Analysis/Calculus/ContDiff.lean

tactic: refine' ⟨fun h y => h.clm_apply contDiffOn_const, fun h => _⟩
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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
⊢ ContDiffOn 𝕜 n f s ↔ ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s

tactic: let d := finrank 𝕜 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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
h : ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s
⊢ ContDiffOn 𝕜 n f s

tactic: have hd : d = finrank 𝕜 (Fin d → 𝕜) := (finrank_fin_fun 𝕜).symm
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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
h : ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s
d : ℕ := finrank 𝕜 F
⊢ ContDiffOn 𝕜 n f s

tactic: let e₁ := ContinuousLinearEquiv.ofFinrankEq hd
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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
h : ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s
d : ℕ := finrank 𝕜 F
hd : d = finrank 𝕜 (Fin d → 𝕜)
⊢ ContDiffOn 𝕜 n f s

tactic: let e₂ := (e₁.arrowCongr (1 : G ≃L[𝕜] G)).trans (ContinuousLinearEquiv.piRing (Fin d))
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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
h : ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s
d : ℕ := finrank 𝕜 F
hd : d = finrank 𝕜 (Fin d → 𝕜)
e₁ : F ≃L[𝕜] Fin d → 𝕜 := ContinuousLinearEquiv.ofFinrankEq hd
⊢ ContDiffOn 𝕜 n f s

tactic: rw [← comp.left_id f, ← e₂.symm_comp_self]
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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
h : ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s
d : ℕ := finrank 𝕜 F
hd : d = finrank 𝕜 (Fin d → 𝕜)
e₁ : F ≃L[𝕜] Fin d → 𝕜 := ContinuousLinearEquiv.ofFinrankEq hd
e₂ : (F →L[𝕜] G) ≃L[𝕜] Fin d → G :=
  ContinuousLinearEquiv.trans (ContinuousLinearEquiv.arrowCongr e₁ 1) (ContinuousLinearEquiv.piRing (Fin d))
⊢ ContDiffOn 𝕜 n f s

tactic: exact e₂.symm.contDiff.comp_contDiffOn (contDiffOn_pi.mpr fun i => h _)
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.2800066
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
inst✝¹ : CompleteSpace 𝕜
n : ℕ∞
f : E → F →L[𝕜] G
s : Set E
inst✝ : FiniteDimensional 𝕜 F
h : ∀ (y : F), ContDiffOn 𝕜 n (fun x => ↑(f x) y) s
d : ℕ := finrank 𝕜 F
hd : d = finrank 𝕜 (Fin d → 𝕜)
e₁ : F ≃L[𝕜] Fin d → 𝕜 := ContinuousLinearEquiv.ofFinrankEq hd
e₂ : (F →L[𝕜] G) ≃L[𝕜] Fin d → G :=
  ContinuousLinearEquiv.trans (ContinuousLinearEquiv.arrowCongr e₁ 1) (ContinuousLinearEquiv.piRing (Fin d))
⊢ ContDiffOn 𝕜 n ((↑(ContinuousLinearEquiv.symm e₂) ∘ ↑e₂) ∘ f) s