[GOAL]
n : ℕ
F : TypeVec n → Type u
inst✝¹ : MvFunctor F
q : MvQPF F
G : TypeVec n → Type u
inst✝ : MvFunctor G
FG_abs : {α : TypeVec n} → F α → G α
FG_repr : {α : TypeVec n} → G α → F α
FG_abs_repr : ∀ {α : TypeVec n} (x : G α), FG_abs (FG_repr x) = x
FG_abs_map : ∀ {α β : TypeVec n} (f : α ⟹ β) (x : F α), FG_abs (f <$$> x) = f <$$> FG_abs x
α✝ : TypeVec n
x : G α✝
⊢ (fun {α} p => FG_abs (abs p)) ((fun {α} x => repr (FG_repr x)) x) = x
[PROOFSTEP]
dsimp
[GOAL]
n : ℕ
F : TypeVec n → Type u
inst✝¹ : MvFunctor F
q : MvQPF F
G : TypeVec n → Type u
inst✝ : MvFunctor G
FG_abs : {α : TypeVec n} → F α → G α
FG_repr : {α : TypeVec n} → G α → F α
FG_abs_repr : ∀ {α : TypeVec n} (x : G α), FG_abs (FG_repr x) = x
FG_abs_map : ∀ {α β : TypeVec n} (f : α ⟹ β) (x : F α), FG_abs (f <$$> x) = f <$$> FG_abs x
α✝ : TypeVec n
x : G α✝
⊢ FG_abs (abs (repr (FG_repr x))) = x
[PROOFSTEP]
rw [abs_repr, FG_abs_repr]
[GOAL]
n : ℕ
F : TypeVec n → Type u
inst✝¹ : MvFunctor F
q : MvQPF F
G : TypeVec n → Type u
inst✝ : MvFunctor G
FG_abs : {α : TypeVec n} → F α → G α
FG_repr : {α : TypeVec n} → G α → F α
FG_abs_repr : ∀ {α : TypeVec n} (x : G α), FG_abs (FG_repr x) = x
FG_abs_map : ∀ {α β : TypeVec n} (f : α ⟹ β) (x : F α), FG_abs (f <$$> x) = f <$$> FG_abs x
α✝ β✝ : TypeVec n
f : α✝ ⟹ β✝
p : MvPFunctor.Obj (P F) α✝
⊢ (fun {α} p => FG_abs (abs p)) (f <$$> p) = f <$$> (fun {α} p => FG_abs (abs p)) p
[PROOFSTEP]
dsimp
[GOAL]
n : ℕ
F : TypeVec n → Type u
inst✝¹ : MvFunctor F
q : MvQPF F
G : TypeVec n → Type u
inst✝ : MvFunctor G
FG_abs : {α : TypeVec n} → F α → G α
FG_repr : {α : TypeVec n} → G α → F α
FG_abs_repr : ∀ {α : TypeVec n} (x : G α), FG_abs (FG_repr x) = x
FG_abs_map : ∀ {α β : TypeVec n} (f : α ⟹ β) (x : F α), FG_abs (f <$$> x) = f <$$> FG_abs x
α✝ β✝ : TypeVec n
f : α✝ ⟹ β✝
p : MvPFunctor.Obj (P F) α✝
⊢ FG_abs (abs (f <$$> p)) = f <$$> FG_abs (abs p)
[PROOFSTEP]
rw [abs_map, FG_abs_map]


[GOAL]
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x : E
h : StarConvex ℝ x s
hne : Set.Nonempty s
⊢ ContractibleSpace ↑s
[PROOFSTEP]
refine'
  (contractible_iff_id_nullhomotopic s).2
    ⟨⟨x, h.mem hne⟩, ⟨⟨⟨fun p => ⟨p.1.1 • x + (1 - p.1.1) • (p.2 : E), _⟩, _⟩, fun x => _, fun x => _⟩⟩⟩
[GOAL]
case refine'_1
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x : E
h : StarConvex ℝ x s
hne : Set.Nonempty s
p : ↑unitInterval × ↑s
⊢ ↑p.fst • x + (1 - ↑p.fst) • ↑p.snd ∈ s
[PROOFSTEP]
exact h p.2.2 p.1.2.1 (sub_nonneg.2 p.1.2.2) (add_sub_cancel'_right _ _)
[GOAL]
case refine'_2
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x : E
h : StarConvex ℝ x s
hne : Set.Nonempty s
⊢ Continuous fun p =>
    { val := ↑p.fst • x + (1 - ↑p.fst) • ↑p.snd, property := (_ : ↑p.fst • x + (1 - ↑p.fst) • ↑p.snd ∈ s) }
[PROOFSTEP]
exact
  ((continuous_subtype_val.fst'.smul continuous_const).add
        ((continuous_const.sub continuous_subtype_val.fst').smul continuous_subtype_val.snd')).subtype_mk
    _
[GOAL]
case refine'_3
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x✝ : E
h : StarConvex ℝ x✝ s
hne : Set.Nonempty s
x : ↑s
⊢ ContinuousMap.toFun
      (ContinuousMap.mk fun p =>
        { val := ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd, property := (_ : ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd ∈ s) })
      (0, x) =
    ↑(ContinuousMap.id ↑s) x
[PROOFSTEP]
ext1
[GOAL]
case refine'_3.a
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x✝ : E
h : StarConvex ℝ x✝ s
hne : Set.Nonempty s
x : ↑s
⊢ ↑(ContinuousMap.toFun
        (ContinuousMap.mk fun p =>
          { val := ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd, property := (_ : ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd ∈ s) })
        (0, x)) =
    ↑(↑(ContinuousMap.id ↑s) x)
[PROOFSTEP]
simp
[GOAL]
case refine'_4
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x✝ : E
h : StarConvex ℝ x✝ s
hne : Set.Nonempty s
x : ↑s
⊢ ContinuousMap.toFun
      (ContinuousMap.mk fun p =>
        { val := ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd, property := (_ : ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd ∈ s) })
      (1, x) =
    ↑(ContinuousMap.const ↑s { val := x✝, property := (_ : x✝ ∈ s) }) x
[PROOFSTEP]
ext1
[GOAL]
case refine'_4.a
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : ContinuousAdd E
inst✝ : ContinuousSMul ℝ E
s : Set E
x✝ : E
h : StarConvex ℝ x✝ s
hne : Set.Nonempty s
x : ↑s
⊢ ↑(ContinuousMap.toFun
        (ContinuousMap.mk fun p =>
          { val := ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd, property := (_ : ↑p.fst • x✝ + (1 - ↑p.fst) • ↑p.snd ∈ s) })
        (1, x)) =
    ↑(↑(ContinuousMap.const ↑s { val := x✝, property := (_ : x✝ ∈ s) }) x)
[PROOFSTEP]
simp


[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
⊢ Homeomorph.trans h (Homeomorph.symm h) = Homeomorph.refl α
[PROOFSTEP]
ext
[GOAL]
case H
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
x✝ : α
⊢ ↑(Homeomorph.trans h (Homeomorph.symm h)) x✝ = ↑(Homeomorph.refl α) x✝
[PROOFSTEP]
apply symm_apply_apply
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
⊢ Homeomorph.trans (Homeomorph.symm h) h = Homeomorph.refl β
[PROOFSTEP]
ext
[GOAL]
case H
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
x✝ : β
⊢ ↑(Homeomorph.trans (Homeomorph.symm h) h) x✝ = ↑(Homeomorph.refl β) x✝
[PROOFSTEP]
apply apply_symm_apply
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α ≃ₜ β
g : β → α
hg : Function.RightInverse g ↑f
this : g = ↑(Homeomorph.symm f)
⊢ Function.LeftInverse g ↑f
[PROOFSTEP]
convert f.left_inv
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α ≃ₜ β
g : β → α
hg : Function.RightInverse g ↑f
this : g = ↑(Homeomorph.symm f)
⊢ Function.RightInverse g ↑f
[PROOFSTEP]
convert f.right_inv using 1
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α ≃ₜ β
g : β → α
hg : Function.RightInverse g ↑f
this : g = ↑(Homeomorph.symm f)
⊢ Continuous
    { toFun := ↑f, invFun := g, left_inv := (_ : Function.LeftInverse g ↑f),
        right_inv := (_ : Function.RightInverse g ↑f) }.invFun
[PROOFSTEP]
convert f.symm.continuous
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
⊢ Inducing (↑(Homeomorph.symm h) ∘ ↑h)
[PROOFSTEP]
simp only [symm_comp_self, inducing_id]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
⊢ QuotientMap (↑h ∘ ↑(Homeomorph.symm h))
[PROOFSTEP]
simp only [self_comp_symm, QuotientMap.id]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α → β
hf : Embedding f
⊢ Continuous (f ∘ (Equiv.ofInjective f (_ : Function.Injective f)).invFun)
[PROOFSTEP]
simp [continuous_subtype_val]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
s : Set β
h : α ≃ₜ β
⊢ IsCompact (↑h ⁻¹' s) ↔ IsCompact s
[PROOFSTEP]
rw [← image_symm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
s : Set β
h : α ≃ₜ β
⊢ IsCompact (↑(Homeomorph.symm h) '' s) ↔ IsCompact s
[PROOFSTEP]
exact h.symm.isCompact_image
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
s : Set α
h : α ≃ₜ β
hs : IsPreconnected (↑h '' s)
⊢ IsPreconnected s
[PROOFSTEP]
simpa only [image_symm, preimage_image] using hs.image _ h.symm.continuous.continuousOn
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
s : Set β
h : α ≃ₜ β
⊢ IsPreconnected (↑h ⁻¹' s) ↔ IsPreconnected s
[PROOFSTEP]
rw [← image_symm, isPreconnected_image]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
s : Set β
h : α ≃ₜ β
⊢ IsConnected (↑h ⁻¹' s) ↔ IsConnected s
[PROOFSTEP]
rw [← image_symm, isConnected_image]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
⊢ map (↑h) (cocompact α) = cocompact β
[PROOFSTEP]
rw [← h.comap_cocompact, map_comap_of_surjective h.surjective]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
s : Set α
⊢ IsOpen (↑h '' s) ↔ IsOpen s
[PROOFSTEP]
rw [← preimage_symm, isOpen_preimage]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
s : Set β
⊢ IsClosed (↑h ⁻¹' s) ↔ IsClosed s
[PROOFSTEP]
simp only [← isOpen_compl_iff, ← preimage_compl, isOpen_preimage]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
s : Set α
⊢ IsClosed (↑h '' s) ↔ IsClosed s
[PROOFSTEP]
rw [← preimage_symm, isClosed_preimage]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
s : Set α
⊢ ↑h '' closure s = closure (↑h '' s)
[PROOFSTEP]
rw [← preimage_symm, preimage_closure]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
s : Set α
⊢ ↑h '' interior s = interior (↑h '' s)
[PROOFSTEP]
rw [← preimage_symm, preimage_interior]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
s : Set α
⊢ ↑h '' frontier s = frontier (↑h '' s)
[PROOFSTEP]
rw [← preimage_symm, preimage_frontier]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
x : α
⊢ range ↑h ∈ 𝓝 (↑h x)
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
x : α
⊢ map (↑(Homeomorph.symm h)) (𝓝 (↑h x)) = 𝓝 x
[PROOFSTEP]
rw [h.symm.map_nhds_eq, h.symm_apply_apply]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
y : β
⊢ comap (↑h) (𝓝 y) = 𝓝 (↑(Homeomorph.symm h) y)
[PROOFSTEP]
rw [h.nhds_eq_comap, h.apply_symm_apply]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
i : LocallyConnectedSpace β
h : α ≃ₜ β
⊢ LocallyConnectedSpace α
[PROOFSTEP]
have : ∀ x, (𝓝 x).HasBasis (fun s ↦ IsOpen s ∧ h x ∈ s ∧ IsConnected s) (h.symm '' ·) := fun x ↦
  by
  rw [← h.symm_map_nhds_eq]
  exact (i.1 _).map _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
i : LocallyConnectedSpace β
h : α ≃ₜ β
x : α
⊢ HasBasis (𝓝 x) (fun s => IsOpen s ∧ ↑h x ∈ s ∧ IsConnected s) fun x => ↑(Homeomorph.symm h) '' x
[PROOFSTEP]
rw [← h.symm_map_nhds_eq]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
i : LocallyConnectedSpace β
h : α ≃ₜ β
x : α
⊢ HasBasis (map (↑(Homeomorph.symm h)) (𝓝 (↑h x))) (fun s => IsOpen s ∧ ↑h x ∈ s ∧ IsConnected s) fun x =>
    ↑(Homeomorph.symm h) '' x
[PROOFSTEP]
exact (i.1 _).map _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
i : LocallyConnectedSpace β
h : α ≃ₜ β
this : ∀ (x : α), HasBasis (𝓝 x) (fun s => IsOpen s ∧ ↑h x ∈ s ∧ IsConnected s) fun x => ↑(Homeomorph.symm h) '' x
⊢ LocallyConnectedSpace α
[PROOFSTEP]
refine locallyConnectedSpace_of_connected_bases _ _ this fun _ _ hs ↦ ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
i : LocallyConnectedSpace β
h : α ≃ₜ β
this : ∀ (x : α), HasBasis (𝓝 x) (fun s => IsOpen s ∧ ↑h x ∈ s ∧ IsConnected s) fun x => ↑(Homeomorph.symm h) '' x
x✝¹ : α
x✝ : Set β
hs : IsOpen x✝ ∧ ↑h x✝¹ ∈ x✝ ∧ IsConnected x✝
⊢ IsPreconnected (↑(Homeomorph.symm h) '' x✝)
[PROOFSTEP]
exact hs.2.2.2.image _ h.symm.continuous.continuousOn
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α ≃ β
h₁ : Continuous ↑e
h₂ : IsOpenMap ↑e
⊢ Continuous e.invFun
[PROOFSTEP]
rw [continuous_def]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α ≃ β
h₁ : Continuous ↑e
h₂ : IsOpenMap ↑e
⊢ ∀ (s : Set α), IsOpen s → IsOpen (e.invFun ⁻¹' s)
[PROOFSTEP]
intro s hs
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α ≃ β
h₁ : Continuous ↑e
h₂ : IsOpenMap ↑e
s : Set α
hs : IsOpen s
⊢ IsOpen (e.invFun ⁻¹' s)
[PROOFSTEP]
convert ← h₂ s hs using 1
[GOAL]
case h.e'_3
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α ≃ β
h₁ : Continuous ↑e
h₂ : IsOpenMap ↑e
s : Set α
hs : IsOpen s
⊢ ↑e '' s = e.invFun ⁻¹' s
[PROOFSTEP]
apply e.image_eq_preimage
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : β → γ
x : α
⊢ range ↑h ∈ 𝓝 (↑h x)
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : γ → α
⊢ IsOpenMap (↑h ∘ f) ↔ IsOpenMap f
[PROOFSTEP]
refine' ⟨_, fun hf => h.isOpenMap.comp hf⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : γ → α
⊢ IsOpenMap (↑h ∘ f) → IsOpenMap f
[PROOFSTEP]
intro hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : γ → α
hf : IsOpenMap (↑h ∘ f)
⊢ IsOpenMap f
[PROOFSTEP]
rw [← Function.comp.left_id f, ← h.symm_comp_self, Function.comp.assoc]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : γ → α
hf : IsOpenMap (↑h ∘ f)
⊢ IsOpenMap (↑(Homeomorph.symm h) ∘ ↑h ∘ f)
[PROOFSTEP]
exact h.symm.isOpenMap.comp hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : β → γ
⊢ IsOpenMap (f ∘ ↑h) ↔ IsOpenMap f
[PROOFSTEP]
refine' ⟨_, fun hf => hf.comp h.isOpenMap⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : β → γ
⊢ IsOpenMap (f ∘ ↑h) → IsOpenMap f
[PROOFSTEP]
intro hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : β → γ
hf : IsOpenMap (f ∘ ↑h)
⊢ IsOpenMap f
[PROOFSTEP]
rw [← Function.comp.right_id f, ← h.self_comp_symm, ← Function.comp.assoc]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
h : α ≃ₜ β
f : β → γ
hf : IsOpenMap (f ∘ ↑h)
⊢ IsOpenMap ((f ∘ ↑h) ∘ ↑(Homeomorph.symm h))
[PROOFSTEP]
exact hf.comp h.symm.isOpenMap
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
⊢ Continuous (Equiv.piEquivPiSubtypeProd p β).toFun
[PROOFSTEP]
apply Continuous.prod_mk
[GOAL]
case hf
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
⊢ Continuous fun x x_1 => x ↑x_1
[PROOFSTEP]
exact continuous_pi fun j => continuous_apply j.1
[GOAL]
case hg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
⊢ Continuous fun x x_1 => x ↑x_1
[PROOFSTEP]
exact continuous_pi fun j => continuous_apply j.1
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
j : ι
⊢ Continuous fun a => Equiv.invFun (Equiv.piEquivPiSubtypeProd p β) a j
[PROOFSTEP]
dsimp only [Equiv.piEquivPiSubtypeProd]
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
j : ι
⊢ Continuous fun a => if h : p j then Prod.fst a { val := j, property := h } else Prod.snd a { val := j, property := h }
[PROOFSTEP]
split_ifs
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
j : ι
h✝ : p j
⊢ Continuous fun a => Prod.fst a { val := j, property := h✝ }
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
p : ι → Prop
β : ι → Type u_6
inst✝¹ : (i : ι) → TopologicalSpace (β i)
inst✝ : DecidablePred p
j : ι
h✝ : ¬p j
⊢ Continuous fun a => Prod.snd a { val := j, property := h✝ }
[PROOFSTEP]
exacts [(continuous_apply _).comp continuous_fst, (continuous_apply _).comp continuous_snd]
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
inst✝¹ : DecidableEq ι
i : ι
β : ι → Type u_6
inst✝ : (j : ι) → TopologicalSpace (β j)
j : ι
⊢ Continuous fun a => Equiv.invFun (Equiv.piSplitAt i β) a j
[PROOFSTEP]
dsimp only [Equiv.piSplitAt]
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
inst✝¹ : DecidableEq ι
i : ι
β : ι → Type u_6
inst✝ : (j : ι) → TopologicalSpace (β j)
j : ι
⊢ Continuous fun a => if h : j = i then (_ : i = j) ▸ a.fst else Prod.snd a { val := j, property := h }
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
inst✝¹ : DecidableEq ι
i : ι
β : ι → Type u_6
inst✝ : (j : ι) → TopologicalSpace (β j)
j : ι
h : j = i
⊢ Continuous fun a => (_ : i = j) ▸ a.fst
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
inst✝¹ : DecidableEq ι
i : ι
β : ι → Type u_6
inst✝ : (j : ι) → TopologicalSpace (β j)
j : ι
h : ¬j = i
⊢ Continuous fun a => Prod.snd a { val := j, property := h }
[PROOFSTEP]
subst h
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
inst✝¹ : DecidableEq ι
β : ι → Type u_6
inst✝ : (j : ι) → TopologicalSpace (β j)
j : ι
⊢ Continuous fun a => (_ : j = j) ▸ a.fst
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
ι : Type u_5
inst✝¹ : DecidableEq ι
i : ι
β : ι → Type u_6
inst✝ : (j : ι) → TopologicalSpace (β j)
j : ι
h : ¬j = i
⊢ Continuous fun a => Prod.snd a { val := j, property := h }
[PROOFSTEP]
exacts [continuous_fst, (continuous_apply _).comp continuous_snd]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α ≃ β
hf : Inducing ↑f
⊢ Continuous
    (↑f ∘
      { toFun := f.toFun, invFun := f.invFun, left_inv := (_ : Function.LeftInverse f.invFun f.toFun),
          right_inv := (_ : Function.RightInverse f.invFun f.toFun) }.invFun)
[PROOFSTEP]
simpa using continuous_id
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : CompactSpace α
inst✝ : T2Space β
f : α ≃ β
hf : Continuous ↑f
⊢ Continuous ↑f.symm
[PROOFSTEP]
rw [continuous_iff_isClosed]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : CompactSpace α
inst✝ : T2Space β
f : α ≃ β
hf : Continuous ↑f
⊢ ∀ (s : Set α), IsClosed s → IsClosed (↑f.symm ⁻¹' s)
[PROOFSTEP]
intro C hC
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : CompactSpace α
inst✝ : T2Space β
f : α ≃ β
hf : Continuous ↑f
C : Set α
hC : IsClosed C
⊢ IsClosed (↑f.symm ⁻¹' C)
[PROOFSTEP]
have hC' : IsClosed (f '' C) := (hC.isCompact.image hf).isClosed
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : CompactSpace α
inst✝ : T2Space β
f : α ≃ β
hf : Continuous ↑f
C : Set α
hC : IsClosed C
hC' : IsClosed (↑f '' C)
⊢ IsClosed (↑f.symm ⁻¹' C)
[PROOFSTEP]
rwa [Equiv.image_eq_preimage] at hC'


[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
r : ℝ
⊢ closedBall x r = ↑(ContinuousLinearEquiv.symm toEuclidean) '' Metric.closedBall (↑toEuclidean x) r
[PROOFSTEP]
rw [toEuclidean.image_symm_eq_preimage, closedBall_eq_preimage]
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
r : ℝ
⊢ IsCompact (closedBall x r)
[PROOFSTEP]
rw [closedBall_eq_image]
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
r : ℝ
⊢ IsCompact (↑(ContinuousLinearEquiv.symm toEuclidean) '' Metric.closedBall (↑toEuclidean x) r)
[PROOFSTEP]
exact (isCompact_closedBall _ _).image toEuclidean.symm.continuous
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
r : ℝ
h : r ≠ 0
⊢ closure (ball x r) = closedBall x r
[PROOFSTEP]
rw [ball_eq_preimage, ← toEuclidean.preimage_closure, closure_ball (toEuclidean x) h, closedBall_eq_preimage]
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
R : ℝ
s : Set E
x : E
hR : 0 < R
hs : IsClosed s
h : s ⊆ ball x R
⊢ ∃ r, r ∈ Ioo 0 R ∧ s ⊆ ball x r
[PROOFSTEP]
rw [ball_eq_preimage, ← image_subset_iff] at h
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
R : ℝ
s : Set E
x : E
hR : 0 < R
hs : IsClosed s
h : ↑toEuclidean '' s ⊆ Metric.ball (↑toEuclidean x) R
⊢ ∃ r, r ∈ Ioo 0 R ∧ s ⊆ ball x r
[PROOFSTEP]
rcases exists_pos_lt_subset_ball hR (toEuclidean.isClosed_image.2 hs) h with ⟨r, hr, hsr⟩
[GOAL]
case intro.intro
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
R : ℝ
s : Set E
x : E
hR : 0 < R
hs : IsClosed s
h : ↑toEuclidean '' s ⊆ Metric.ball (↑toEuclidean x) R
r : ℝ
hr : r ∈ Ioo 0 R
hsr : ↑toEuclidean '' s ⊆ Metric.ball (↑toEuclidean x) r
⊢ ∃ r, r ∈ Ioo 0 R ∧ s ⊆ ball x r
[PROOFSTEP]
exact ⟨r, hr, image_subset_iff.1 hsr⟩
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
⊢ Filter.HasBasis (𝓝 x) (fun r => 0 < r) (closedBall x)
[PROOFSTEP]
rw [toEuclidean.toHomeomorph.nhds_eq_comap x]
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
⊢ Filter.HasBasis
    (Filter.comap (↑(ContinuousLinearEquiv.toHomeomorph toEuclidean))
      (𝓝 (↑(ContinuousLinearEquiv.toHomeomorph toEuclidean) x)))
    (fun r => 0 < r) (closedBall x)
[PROOFSTEP]
exact Metric.nhds_basis_closedBall.comap _
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
⊢ Filter.HasBasis (𝓝 x) (fun r => 0 < r) (ball x)
[PROOFSTEP]
rw [toEuclidean.toHomeomorph.nhds_eq_comap x]
[GOAL]
E : Type u_1
inst✝⁶ : AddCommGroup E
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalAddGroup E
inst✝³ : T2Space E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : FiniteDimensional ℝ E
x : E
⊢ Filter.HasBasis
    (Filter.comap (↑(ContinuousLinearEquiv.toHomeomorph toEuclidean))
      (𝓝 (↑(ContinuousLinearEquiv.toHomeomorph toEuclidean) x)))
    (fun r => 0 < r) (ball x)
[PROOFSTEP]
exact Metric.nhds_basis_ball.comap _
[GOAL]
E : Type u_1
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : TopologicalSpace E
inst✝⁹ : TopologicalAddGroup E
inst✝⁸ : T2Space E
inst✝⁷ : Module ℝ E
inst✝⁶ : ContinuousSMul ℝ E
inst✝⁵ : FiniteDimensional ℝ E
F : Type u_2
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace ℝ G
inst✝ : FiniteDimensional ℝ G
f g : F → G
n : ℕ∞
hf : ContDiff ℝ n f
hg : ContDiff ℝ n g
h : ∀ (x : F), f x ≠ g x
⊢ ContDiff ℝ n fun x => Euclidean.dist (f x) (g x)
[PROOFSTEP]
simp only [Euclidean.dist]
[GOAL]
E : Type u_1
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : TopologicalSpace E
inst✝⁹ : TopologicalAddGroup E
inst✝⁸ : T2Space E
inst✝⁷ : Module ℝ E
inst✝⁶ : ContinuousSMul ℝ E
inst✝⁵ : FiniteDimensional ℝ E
F : Type u_2
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace ℝ G
inst✝ : FiniteDimensional ℝ G
f g : F → G
n : ℕ∞
hf : ContDiff ℝ n f
hg : ContDiff ℝ n g
h : ∀ (x : F), f x ≠ g x
⊢ ContDiff ℝ n fun x => Dist.dist (↑toEuclidean (f x)) (↑toEuclidean (g x))
[PROOFSTEP]
apply @ContDiff.dist ℝ
[GOAL]
case hf
E : Type u_1
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : TopologicalSpace E
inst✝⁹ : TopologicalAddGroup E
inst✝⁸ : T2Space E
inst✝⁷ : Module ℝ E
inst✝⁶ : ContinuousSMul ℝ E
inst✝⁵ : FiniteDimensional ℝ E
F : Type u_2
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace ℝ G
inst✝ : FiniteDimensional ℝ G
f g : F → G
n : ℕ∞
hf : ContDiff ℝ n f
hg : ContDiff ℝ n g
h : ∀ (x : F), f x ≠ g x
⊢ ContDiff ℝ n fun y => ↑toEuclidean (f y)
case hg
E : Type u_1
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : TopologicalSpace E
inst✝⁹ : TopologicalAddGroup E
inst✝⁸ : T2Space E
inst✝⁷ : Module ℝ E
inst✝⁶ : ContinuousSMul ℝ E
inst✝⁵ : FiniteDimensional ℝ E
F : Type u_2
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace ℝ G
inst✝ : FiniteDimensional ℝ G
f g : F → G
n : ℕ∞
hf : ContDiff ℝ n f
hg : ContDiff ℝ n g
h : ∀ (x : F), f x ≠ g x
⊢ ContDiff ℝ n fun y => ↑toEuclidean (g y)
case hne
E : Type u_1
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : TopologicalSpace E
inst✝⁹ : TopologicalAddGroup E
inst✝⁸ : T2Space E
inst✝⁷ : Module ℝ E
inst✝⁶ : ContinuousSMul ℝ E
inst✝⁵ : FiniteDimensional ℝ E
F : Type u_2
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace ℝ G
inst✝ : FiniteDimensional ℝ G
f g : F → G
n : ℕ∞
hf : ContDiff ℝ n f
hg : ContDiff ℝ n g
h : ∀ (x : F), f x ≠ g x
⊢ ∀ (x : F), ↑toEuclidean (f x) ≠ ↑toEuclidean (g x)
[PROOFSTEP]
exacts [(@toEuclidean G _ _ _ _ _ _ _).contDiff.comp hf, (@toEuclidean G _ _ _ _ _ _ _).contDiff.comp hg, fun x =>
  toEuclidean.injective.ne (h x)]


[GOAL]
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
⊢ Function.Injective fun g => comp (sigmaMk g.fst) g.snd
[PROOFSTEP]
rintro ⟨i, g⟩ ⟨i', g'⟩ h
[GOAL]
case mk.mk
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
i : ι
g : C(X, Y i)
i' : ι
g' : C(X, Y i')
h :
  (fun g => comp (sigmaMk g.fst) g.snd) { fst := i, snd := g } =
    (fun g => comp (sigmaMk g.fst) g.snd) { fst := i', snd := g' }
⊢ { fst := i, snd := g } = { fst := i', snd := g' }
[PROOFSTEP]
obtain ⟨rfl, hg⟩ : i = i' ∧ HEq (⇑g) (⇑g') := Function.eq_of_sigmaMk_comp <| congr_arg FunLike.coe h
[GOAL]
case mk.mk.intro
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
i : ι
g g' : C(X, Y i)
h :
  (fun g => comp (sigmaMk g.fst) g.snd) { fst := i, snd := g } =
    (fun g => comp (sigmaMk g.fst) g.snd) { fst := i, snd := g' }
hg : HEq ↑g ↑g'
⊢ { fst := i, snd := g } = { fst := i, snd := g' }
[PROOFSTEP]
simpa using hg


[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x : A ⊗[R] L
⊢ ⁅x, x⁆ = 0
[PROOFSTEP]
simp only [bracket_def]
[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x : A ⊗[R] L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) x = 0
[PROOFSTEP]
refine' x.induction_on _ _ _
[GOAL]
case refine'_1
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x : A ⊗[R] L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) 0 = 0
[PROOFSTEP]
simp only [LinearMap.map_zero, eq_self_iff_true, LinearMap.zero_apply]
[GOAL]
case refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x : A ⊗[R] L
⊢ ∀ (x : A) (y : L), ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y)) (x ⊗ₜ[R] y) = 0
[PROOFSTEP]
intro a l
[GOAL]
case refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x : A ⊗[R] L
a : A
l : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a ⊗ₜ[R] l)) (a ⊗ₜ[R] l) = 0
[PROOFSTEP]
simp only [bracket'_tmul, TensorProduct.tmul_zero, eq_self_iff_true, lie_self]
[GOAL]
case refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x : A ⊗[R] L
⊢ ∀ (x y : A ⊗[R] L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) x = 0 →
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) y = 0 →
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y)) (x + y) = 0
[PROOFSTEP]
intro z₁ z₂ h₁ h₂
[GOAL]
case refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (z₁ + z₂)) (z₁ + z₂) = 0
[PROOFSTEP]
suffices bracket' R A L z₁ z₂ + bracket' R A L z₂ z₁ = 0 by
  rw [LinearMap.map_add, LinearMap.map_add, LinearMap.add_apply, LinearMap.add_apply, h₁, h₂, zero_add, add_zero,
    add_comm, this]
[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
this : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₁ = 0
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (z₁ + z₂)) (z₁ + z₂) = 0
[PROOFSTEP]
rw [LinearMap.map_add, LinearMap.map_add, LinearMap.add_apply, LinearMap.add_apply, h₁, h₂, zero_add, add_zero,
  add_comm, this]
[GOAL]
case refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₁ = 0
[PROOFSTEP]
refine' z₁.induction_on _ _ _
[GOAL]
case refine'_3.refine'_1
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) 0 = 0
[PROOFSTEP]
simp only [LinearMap.map_zero, add_zero, LinearMap.zero_apply]
[GOAL]
case refine'_3.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
⊢ ∀ (x : A) (y : L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y)) z₂ +
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) (x ⊗ₜ[R] y) =
      0
[PROOFSTEP]
intro a₁ l₁
[GOAL]
case refine'_3.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
a₁ : A
l₁ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z₂ +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) (a₁ ⊗ₜ[R] l₁) =
    0
[PROOFSTEP]
refine' z₂.induction_on _ _ _
[GOAL]
case refine'_3.refine'_2.refine'_1
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
a₁ : A
l₁ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) 0 +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) (a₁ ⊗ₜ[R] l₁) =
    0
[PROOFSTEP]
simp only [LinearMap.map_zero, add_zero, LinearMap.zero_apply]
[GOAL]
case refine'_3.refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
a₁ : A
l₁ : L
⊢ ∀ (x : A) (y : L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (x ⊗ₜ[R] y) +
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y)) (a₁ ⊗ₜ[R] l₁) =
      0
[PROOFSTEP]
intro a₂ l₂
[GOAL]
case refine'_3.refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
a₁ : A
l₁ : L
a₂ : A
l₂ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂) +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) (a₁ ⊗ₜ[R] l₁) =
    0
[PROOFSTEP]
simp only [← lie_skew l₂ l₁, mul_comm a₁ a₂, TensorProduct.tmul_neg, bracket'_tmul, add_right_neg]
[GOAL]
case refine'_3.refine'_2.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
a₁ : A
l₁ : L
⊢ ∀ (x y : A ⊗[R] L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) x +
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) (a₁ ⊗ₜ[R] l₁) =
        0 →
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) y +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (a₁ ⊗ₜ[R] l₁) =
          0 →
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (x + y) +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y)) (a₁ ⊗ₜ[R] l₁) =
          0
[PROOFSTEP]
intro y₁ y₂ hy₁ hy₂
[GOAL]
case refine'_3.refine'_2.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
a₁ : A
l₁ : L
y₁ y₂ : A ⊗[R] L
hy₁ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) y₁ +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y₁) (a₁ ⊗ₜ[R] l₁) =
    0
hy₂ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) y₂ +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y₂) (a₁ ⊗ₜ[R] l₁) =
    0
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (y₁ + y₂) +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (y₁ + y₂)) (a₁ ⊗ₜ[R] l₁) =
    0
[PROOFSTEP]
simp only [hy₁, hy₂, add_add_add_comm, add_zero, LinearMap.add_apply, LinearMap.map_add]
[GOAL]
case refine'_3.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
⊢ ∀ (x y : A ⊗[R] L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) x = 0 →
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) y = 0 →
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y)) z₂ +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) (x + y) =
          0
[PROOFSTEP]
intro y₁ y₂ hy₁ hy₂
[GOAL]
case refine'_3.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x z₁ z₂ : A ⊗[R] L
h₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₁) z₁ = 0
h₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) z₂ = 0
y₁ y₂ : A ⊗[R] L
hy₁ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y₁) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) y₁ = 0
hy₂ : ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y₂) z₂ + ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) y₂ = 0
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (y₁ + y₂)) z₂ +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) z₂) (y₁ + y₂) =
    0
[PROOFSTEP]
simp only [add_add_add_comm, hy₁, hy₂, add_zero, LinearMap.add_apply, LinearMap.map_add]
[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ⁅x, ⁅y, z⁆⁆ = ⁅⁅x, y⁆, z⁆ + ⁅y, ⁅x, z⁆⁆
[PROOFSTEP]
simp only [bracket_def]
[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) y)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) z)
[PROOFSTEP]
refine' x.induction_on _ _ _
[GOAL]
case refine'_1
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) y)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) z)
[PROOFSTEP]
simp only [LinearMap.map_zero, add_zero, LinearMap.zero_apply]
[GOAL]
case refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ∀ (x : A) (y_1 : L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y_1)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y_1)) y)) z +
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y_1)) z)
[PROOFSTEP]
intro a₁ l₁
[GOAL]
case refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) y)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
[PROOFSTEP]
refine' y.induction_on _ _ _
[GOAL]
case refine'_2.refine'_1
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) 0)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) 0) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
[PROOFSTEP]
simp only [LinearMap.map_zero, add_zero, LinearMap.zero_apply]
[GOAL]
case refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
⊢ ∀ (x : A) (y : L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y)) z) =
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
              (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (x ⊗ₜ[R] y)))
          z +
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x ⊗ₜ[R] y))
          (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
[PROOFSTEP]
intro a₂ l₂
[GOAL]
case refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
        z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
[PROOFSTEP]
refine' z.induction_on _ _ _
[GOAL]
case refine'_2.refine'_2.refine'_1
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) 0) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
        0 +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) 0)
[PROOFSTEP]
rw [LinearMap.map_zero, LinearMap.map_zero, LinearMap.map_zero, LinearMap.map_zero, add_zero]
[GOAL]
case refine'_2.refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
⊢ ∀ (x : A) (y : L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) (x ⊗ₜ[R] y)) =
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
              (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
          (x ⊗ₜ[R] y) +
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
          (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (x ⊗ₜ[R] y))
[PROOFSTEP]
intro a₃ l₃
[GOAL]
case refine'_2.refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
a₃ : A
l₃ : L
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) (a₃ ⊗ₜ[R] l₃)) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
        (a₃ ⊗ₜ[R] l₃) +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₃ ⊗ₜ[R] l₃))
[PROOFSTEP]
simp only [bracket'_tmul]
[GOAL]
case refine'_2.refine'_2.refine'_2
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
a₃ : A
l₃ : L
⊢ (a₁ * (a₂ * a₃)) ⊗ₜ[R] ⁅l₁, ⁅l₂, l₃⁆⁆ = (a₁ * a₂ * a₃) ⊗ₜ[R] ⁅⁅l₁, l₂⁆, l₃⁆ + (a₂ * (a₁ * a₃)) ⊗ₜ[R] ⁅l₂, ⁅l₁, l₃⁆⁆
[PROOFSTEP]
rw [mul_left_comm a₂ a₁ a₃, mul_assoc, leibniz_lie, TensorProduct.tmul_add]
[GOAL]
case refine'_2.refine'_2.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
⊢ ∀ (x y : A ⊗[R] L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
          (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) x) =
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
                (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
            x +
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) x) →
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) y) =
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
                  (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
              y +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
              (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) y) →
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) (x + y)) =
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
                  (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
              (x + y) +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
              (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (x + y))
[PROOFSTEP]
intro u₁ u₂ h₁ h₂
[GOAL]
case refine'_2.refine'_2.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
a₂ : A
l₂ : L
u₁ u₂ : A ⊗[R] L
h₁ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) u₁) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
        u₁ +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) u₁)
h₂ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) u₂) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
        u₂ +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) u₂)
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂)) (u₁ + u₂)) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (a₂ ⊗ₜ[R] l₂)))
        (u₁ + u₂) +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₂ ⊗ₜ[R] l₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (u₁ + u₂))
[PROOFSTEP]
rw [map_add, map_add, map_add, map_add, map_add, h₁, h₂, add_add_add_comm]
[GOAL]
case refine'_2.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
⊢ ∀ (x y : A ⊗[R] L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) z) =
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) x))
            z +
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z) →
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) y))
              z +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y)
              (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z) →
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y)) z) =
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
                  (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (x + y)))
              z +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y))
              (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
[PROOFSTEP]
intro u₁ u₂ h₁ h₂
[GOAL]
case refine'_2.refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
a₁ : A
l₁ : L
u₁ u₂ : A ⊗[R] L
h₁ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₁) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) u₁)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₁) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
h₂ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₂) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) u₂)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₂) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁))
      (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (u₁ + u₂)) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L)
            (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) (u₁ + u₂)))
        z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (u₁ + u₂))
        (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (a₁ ⊗ₜ[R] l₁)) z)
[PROOFSTEP]
rw [map_add, LinearMap.add_apply, LinearMap.add_apply, map_add, map_add, map_add, LinearMap.add_apply, h₁, h₂,
  add_add_add_comm]
[GOAL]
case refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ∀ (x y_1 : A ⊗[R] L),
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) y)) z +
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) x) z) →
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y_1) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y_1) y)) z +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y_1) z) →
        ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y_1)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
          ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y_1)) y)) z +
            ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (x + y_1)) z)
[PROOFSTEP]
intro u₁ u₂ h₁ h₂
[GOAL]
case refine'_3
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z u₁ u₂ : A ⊗[R] L
h₁ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₁) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₁) y)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₁) z)
h₂ :
  ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₂) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₂) y)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) u₂) z)
⊢ ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (u₁ + u₂)) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) z) =
    ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (u₁ + u₂)) y)) z +
      ↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) y) (↑(↑(LieAlgebra.ExtendScalars.bracket' R A L) (u₁ + u₂)) z)
[PROOFSTEP]
rw [map_add, LinearMap.add_apply, LinearMap.add_apply, LinearMap.add_apply, map_add, map_add, LinearMap.add_apply, h₁,
  h₂, add_add_add_comm]
[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ⁅x + y, z⁆ = ⁅x, z⁆ + ⁅y, z⁆
[PROOFSTEP]
simp only [bracket_def, LinearMap.add_apply, LinearMap.map_add]
[GOAL]
R : Type u
A : Type w
L : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
x y z : A ⊗[R] L
⊢ ⁅x, y + z⁆ = ⁅x, y⁆ + ⁅x, z⁆
[PROOFSTEP]
simp only [bracket_def, LinearMap.map_add]


[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
x : E
⊢ 0 ≤ ↑re (inner x (↑T x))
[PROOFSTEP]
rw [inner_re_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
x : E
⊢ 0 ≤ ↑re (inner (↑T x) x)
[PROOFSTEP]
exact hT.inner_nonneg_left x
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
⊢ IsPositive 0
[PROOFSTEP]
refine' ⟨isSelfAdjoint_zero _, fun x => _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
x : E
⊢ 0 ≤ reApplyInnerSelf 0 x
[PROOFSTEP]
change 0 ≤ re ⟪_, _⟫
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
x : E
⊢ 0 ≤ ↑re (inner (↑0 x) x)
[PROOFSTEP]
rw [zero_apply, inner_zero_left, ZeroHomClass.map_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T S : E →L[𝕜] E
hT : IsPositive T
hS : IsPositive S
⊢ IsPositive (T + S)
[PROOFSTEP]
refine' ⟨hT.isSelfAdjoint.add hS.isSelfAdjoint, fun x => _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T S : E →L[𝕜] E
hT : IsPositive T
hS : IsPositive S
x : E
⊢ 0 ≤ reApplyInnerSelf (T + S) x
[PROOFSTEP]
rw [reApplyInnerSelf, add_apply, inner_add_left, map_add]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T S : E →L[𝕜] E
hT : IsPositive T
hS : IsPositive S
x : E
⊢ 0 ≤ ↑re (inner (↑T x) x) + ↑re (inner (↑S x) x)
[PROOFSTEP]
exact add_nonneg (hT.inner_nonneg_left x) (hS.inner_nonneg_left x)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
S : E →L[𝕜] F
⊢ IsPositive (comp S (comp T (↑adjoint S)))
[PROOFSTEP]
refine' ⟨hT.isSelfAdjoint.conj_adjoint S, fun x => _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
S : E →L[𝕜] F
x : F
⊢ 0 ≤ reApplyInnerSelf (comp S (comp T (↑adjoint S))) x
[PROOFSTEP]
rw [reApplyInnerSelf, comp_apply, ← adjoint_inner_right]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
S : E →L[𝕜] F
x : F
⊢ 0 ≤ ↑re (inner (↑(comp T (↑adjoint S)) x) (↑(↑adjoint S) x))
[PROOFSTEP]
exact hT.inner_nonneg_left _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
S : F →L[𝕜] E
⊢ IsPositive (comp (↑adjoint S) (comp T S))
[PROOFSTEP]
convert hT.conj_adjoint (S†)
[GOAL]
case h.e'_7.h.e'_24.h.e'_24
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 F
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
S : F →L[𝕜] E
⊢ S = ↑adjoint (↑adjoint S)
[PROOFSTEP]
rw [adjoint_adjoint]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace 𝕜 F
inst✝² : CompleteSpace E
inst✝¹ : CompleteSpace F
U : Submodule 𝕜 E
T : E →L[𝕜] E
hT : IsPositive T
inst✝ : CompleteSpace { x // x ∈ U }
⊢ IsPositive
    (comp (Submodule.subtypeL U)
      (comp (orthogonalProjection U) (comp T (comp (Submodule.subtypeL U) (orthogonalProjection U)))))
[PROOFSTEP]
have := hT.conj_adjoint (U.subtypeL ∘L orthogonalProjection U)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace 𝕜 F
inst✝² : CompleteSpace E
inst✝¹ : CompleteSpace F
U : Submodule 𝕜 E
T : E →L[𝕜] E
hT : IsPositive T
inst✝ : CompleteSpace { x // x ∈ U }
this :
  IsPositive
    (comp (comp (Submodule.subtypeL U) (orthogonalProjection U))
      (comp T (↑adjoint (comp (Submodule.subtypeL U) (orthogonalProjection U)))))
⊢ IsPositive
    (comp (Submodule.subtypeL U)
      (comp (orthogonalProjection U) (comp T (comp (Submodule.subtypeL U) (orthogonalProjection U)))))
[PROOFSTEP]
rwa [(orthogonalProjection_isSelfAdjoint U).adjoint_eq] at this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace 𝕜 F
inst✝² : CompleteSpace E
inst✝¹ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
U : Submodule 𝕜 E
inst✝ : CompleteSpace { x // x ∈ U }
⊢ IsPositive (comp (orthogonalProjection U) (comp T (Submodule.subtypeL U)))
[PROOFSTEP]
have := hT.conj_adjoint (orthogonalProjection U : E →L[𝕜] U)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace 𝕜 F
inst✝² : CompleteSpace E
inst✝¹ : CompleteSpace F
T : E →L[𝕜] E
hT : IsPositive T
U : Submodule 𝕜 E
inst✝ : CompleteSpace { x // x ∈ U }
this : IsPositive (comp (orthogonalProjection U) (comp T (↑adjoint (orthogonalProjection U))))
⊢ IsPositive (comp (orthogonalProjection U) (comp T (Submodule.subtypeL U)))
[PROOFSTEP]
rwa [U.adjoint_orthogonalProjection] at this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁹ : IsROrC 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace 𝕜 E
inst✝⁵ : InnerProductSpace 𝕜 F
inst✝⁴ : CompleteSpace E
inst✝³ : CompleteSpace F
E' : Type u_4
inst✝² : NormedAddCommGroup E'
inst✝¹ : InnerProductSpace ℂ E'
inst✝ : CompleteSpace E'
T : E' →L[ℂ] E'
⊢ IsPositive T ↔ ∀ (x : E'), ↑(↑re (inner (↑T x) x)) = inner (↑T x) x ∧ 0 ≤ ↑re (inner (↑T x) x)
[PROOFSTEP]
simp_rw [IsPositive, forall_and, isSelfAdjoint_iff_isSymmetric, LinearMap.isSymmetric_iff_inner_map_self_real,
  conj_eq_iff_re]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁹ : IsROrC 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace 𝕜 E
inst✝⁵ : InnerProductSpace 𝕜 F
inst✝⁴ : CompleteSpace E
inst✝³ : CompleteSpace F
E' : Type u_4
inst✝² : NormedAddCommGroup E'
inst✝¹ : InnerProductSpace ℂ E'
inst✝ : CompleteSpace E'
T : E' →L[ℂ] E'
⊢ ((∀ (v : E'), ↑(↑re (inner (↑↑T v) v)) = inner (↑↑T v) v) ∧ ∀ (x : E'), 0 ≤ reApplyInnerSelf T x) ↔
    (∀ (x : E'), ↑(↑re (inner (↑T x) x)) = inner (↑T x) x) ∧ ∀ (x : E'), 0 ≤ ↑re (inner (↑T x) x)
[PROOFSTEP]
rfl


[GOAL]
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
H : Type u_2
inst✝⁶ : TopologicalSpace H
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
I : ModelWithCorners 𝕜 E H
R : Type u_4
inst✝³ : Ring R
inst✝² : TopologicalSpace R
inst✝¹ : ChartedSpace H R
inst✝ : SmoothRing I R
⊢ Smooth I I fun a => -a
[PROOFSTEP]
simpa only [neg_one_mul] using @smooth_mul_left 𝕜 _ H _ E _ _ I R _ _ _ _ (-1)
[GOAL]
𝕜 : Type u_1
inst✝ : NontriviallyNormedField 𝕜
src✝ : LieAddGroup 𝓘(𝕜, 𝕜) 𝕜 := normedSpaceLieAddGroup
⊢ Smooth (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) 𝓘(𝕜, 𝕜) fun p => p.fst * p.snd
[PROOFSTEP]
rw [smooth_iff]
[GOAL]
𝕜 : Type u_1
inst✝ : NontriviallyNormedField 𝕜
src✝ : LieAddGroup 𝓘(𝕜, 𝕜) 𝕜 := normedSpaceLieAddGroup
⊢ (Continuous fun p => p.fst * p.snd) ∧
    ∀ (x : 𝕜 × 𝕜) (y : 𝕜),
      ContDiffOn 𝕜 ⊤
        (↑(extChartAt 𝓘(𝕜, 𝕜) y) ∘
          (fun p => p.fst * p.snd) ∘ ↑(LocalEquiv.symm (extChartAt (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) x)))
        ((extChartAt (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) x).target ∩
          ↑(LocalEquiv.symm (extChartAt (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) x)) ⁻¹'
            ((fun p => p.fst * p.snd) ⁻¹' (extChartAt 𝓘(𝕜, 𝕜) y).source))
[PROOFSTEP]
refine' ⟨continuous_mul, fun x y => _⟩
[GOAL]
𝕜 : Type u_1
inst✝ : NontriviallyNormedField 𝕜
src✝ : LieAddGroup 𝓘(𝕜, 𝕜) 𝕜 := normedSpaceLieAddGroup
x : 𝕜 × 𝕜
y : 𝕜
⊢ ContDiffOn 𝕜 ⊤
    (↑(extChartAt 𝓘(𝕜, 𝕜) y) ∘
      (fun p => p.fst * p.snd) ∘ ↑(LocalEquiv.symm (extChartAt (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) x)))
    ((extChartAt (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) x).target ∩
      ↑(LocalEquiv.symm (extChartAt (ModelWithCorners.prod 𝓘(𝕜, 𝕜) 𝓘(𝕜, 𝕜)) x)) ⁻¹'
        ((fun p => p.fst * p.snd) ⁻¹' (extChartAt 𝓘(𝕜, 𝕜) y).source))
[PROOFSTEP]
simp only [Prod.mk.eta, mfld_simps]
[GOAL]
𝕜 : Type u_1
inst✝ : NontriviallyNormedField 𝕜
src✝ : LieAddGroup 𝓘(𝕜, 𝕜) 𝕜 := normedSpaceLieAddGroup
x : 𝕜 × 𝕜
y : 𝕜
⊢ ContDiffOn 𝕜 ⊤ (fun p => p.fst * p.snd) Set.univ
[PROOFSTEP]
rw [contDiffOn_univ]
[GOAL]
𝕜 : Type u_1
inst✝ : NontriviallyNormedField 𝕜
src✝ : LieAddGroup 𝓘(𝕜, 𝕜) 𝕜 := normedSpaceLieAddGroup
x : 𝕜 × 𝕜
y : 𝕜
⊢ ContDiff 𝕜 ⊤ fun p => p.fst * p.snd
[PROOFSTEP]
exact contDiff_mul