Theorem: AffineMap.isOpenMap_linear_iff
File: Mathlib/Analysis/NormedSpace/AffineIsometry.lean

tactic: inhabit P
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type ?u.2245720
V₂ : Type u_4
V₃ : Type ?u.2245726
V₄ : Type ?u.2245729
P₁ : Type ?u.2245732
P : Type u_3
P₂ : Type u_5
P₃ : Type ?u.2245741
P₄ : Type ?u.2245744
inst✝²⁰ : NormedField 𝕜
inst✝¹⁹ : SeminormedAddCommGroup V
inst✝¹⁸ : SeminormedAddCommGroup V₁
inst✝¹⁷ : SeminormedAddCommGroup V₂
inst✝¹⁶ : SeminormedAddCommGroup V₃
inst✝¹⁵ : SeminormedAddCommGroup V₄
inst✝¹⁴ : NormedSpace 𝕜 V
inst✝¹³ : NormedSpace 𝕜 V₁
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : NormedSpace 𝕜 V₃
inst✝¹⁰ : NormedSpace 𝕜 V₄
inst✝⁹ : PseudoMetricSpace P
inst✝⁸ : MetricSpace P₁
inst✝⁷ : PseudoMetricSpace P₂
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : PseudoMetricSpace P₄
inst✝⁴ : NormedAddTorsor V P
inst✝³ : NormedAddTorsor V₁ P₁
inst✝² : NormedAddTorsor V₂ P₂
inst✝¹ : NormedAddTorsor V₃ P₃
inst✝ : NormedAddTorsor V₄ P₄
f : P →ᵃ[𝕜] P₂
⊢ IsOpenMap ↑f.linear ↔ IsOpenMap ↑f

tactic: have :
  (f.linear : V → V₂) =
    (AffineIsometryEquiv.vaddConst 𝕜 <| f default).toHomeomorph.symm ∘
      f ∘ (AffineIsometryEquiv.vaddConst 𝕜 default).toHomeomorph := by
  ext v
  simp only [(AffineIsometryEquiv.coe_toHomeomorph), Function.comp_apply, (AffineMap.map_vadd),
    eq_self_iff_true, (AffineIsometryEquiv.toHomeomorph_symm),
    (AffineIsometryEquiv.coe_vaddConst), (vadd_vsub), (AffineIsometryEquiv.coe_vaddConst_symm)]
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type ?u.2245720
V₂ : Type u_4
V₃ : Type ?u.2245726
V₄ : Type ?u.2245729
P₁ : Type ?u.2245732
P : Type u_3
P₂ : Type u_5
P₃ : Type ?u.2245741
P₄ : Type ?u.2245744
inst✝²⁰ : NormedField 𝕜
inst✝¹⁹ : SeminormedAddCommGroup V
inst✝¹⁸ : SeminormedAddCommGroup V₁
inst✝¹⁷ : SeminormedAddCommGroup V₂
inst✝¹⁶ : SeminormedAddCommGroup V₃
inst✝¹⁵ : SeminormedAddCommGroup V₄
inst✝¹⁴ : NormedSpace 𝕜 V
inst✝¹³ : NormedSpace 𝕜 V₁
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : NormedSpace 𝕜 V₃
inst✝¹⁰ : NormedSpace 𝕜 V₄
inst✝⁹ : PseudoMetricSpace P
inst✝⁸ : MetricSpace P₁
inst✝⁷ : PseudoMetricSpace P₂
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : PseudoMetricSpace P₄
inst✝⁴ : NormedAddTorsor V P
inst✝³ : NormedAddTorsor V₁ P₁
inst✝² : NormedAddTorsor V₂ P₂
inst✝¹ : NormedAddTorsor V₃ P₃
inst✝ : NormedAddTorsor V₄ P₄
f : P →ᵃ[𝕜] P₂
inhabited_h : Inhabited P
⊢ IsOpenMap ↑f.linear ↔ IsOpenMap ↑f

tactic: rw [this]
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type ?u.2245720
V₂ : Type u_4
V₃ : Type ?u.2245726
V₄ : Type ?u.2245729
P₁ : Type ?u.2245732
P : Type u_3
P₂ : Type u_5
P₃ : Type ?u.2245741
P₄ : Type ?u.2245744
inst✝²⁰ : NormedField 𝕜
inst✝¹⁹ : SeminormedAddCommGroup V
inst✝¹⁸ : SeminormedAddCommGroup V₁
inst✝¹⁷ : SeminormedAddCommGroup V₂
inst✝¹⁶ : SeminormedAddCommGroup V₃
inst✝¹⁵ : SeminormedAddCommGroup V₄
inst✝¹⁴ : NormedSpace 𝕜 V
inst✝¹³ : NormedSpace 𝕜 V₁
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : NormedSpace 𝕜 V₃
inst✝¹⁰ : NormedSpace 𝕜 V₄
inst✝⁹ : PseudoMetricSpace P
inst✝⁸ : MetricSpace P₁
inst✝⁷ : PseudoMetricSpace P₂
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : PseudoMetricSpace P₄
inst✝⁴ : NormedAddTorsor V P
inst✝³ : NormedAddTorsor V₁ P₁
inst✝² : NormedAddTorsor V₂ P₂
inst✝¹ : NormedAddTorsor V₃ P₃
inst✝ : NormedAddTorsor V₄ P₄
f : P →ᵃ[𝕜] P₂
inhabited_h : Inhabited P
this :
  ↑f.linear =
    ↑(Homeomorph.symm (AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 (↑f default)))) ∘
      ↑f ∘ ↑(AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 default))
⊢ IsOpenMap ↑f.linear ↔ IsOpenMap ↑f

tactic: simp only [Homeomorph.comp_isOpenMap_iff, Homeomorph.comp_isOpenMap_iff']
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type ?u.2245720
V₂ : Type u_4
V₃ : Type ?u.2245726
V₄ : Type ?u.2245729
P₁ : Type ?u.2245732
P : Type u_3
P₂ : Type u_5
P₃ : Type ?u.2245741
P₄ : Type ?u.2245744
inst✝²⁰ : NormedField 𝕜
inst✝¹⁹ : SeminormedAddCommGroup V
inst✝¹⁸ : SeminormedAddCommGroup V₁
inst✝¹⁷ : SeminormedAddCommGroup V₂
inst✝¹⁶ : SeminormedAddCommGroup V₃
inst✝¹⁵ : SeminormedAddCommGroup V₄
inst✝¹⁴ : NormedSpace 𝕜 V
inst✝¹³ : NormedSpace 𝕜 V₁
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : NormedSpace 𝕜 V₃
inst✝¹⁰ : NormedSpace 𝕜 V₄
inst✝⁹ : PseudoMetricSpace P
inst✝⁸ : MetricSpace P₁
inst✝⁷ : PseudoMetricSpace P₂
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : PseudoMetricSpace P₄
inst✝⁴ : NormedAddTorsor V P
inst✝³ : NormedAddTorsor V₁ P₁
inst✝² : NormedAddTorsor V₂ P₂
inst✝¹ : NormedAddTorsor V₃ P₃
inst✝ : NormedAddTorsor V₄ P₄
f : P →ᵃ[𝕜] P₂
inhabited_h : Inhabited P
this :
  ↑f.linear =
    ↑(Homeomorph.symm (AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 (↑f default)))) ∘
      ↑f ∘ ↑(AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 default))
⊢ IsOpenMap
      (↑(Homeomorph.symm (AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 (↑f default)))) ∘
        ↑f ∘ ↑(AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 default))) ↔
    IsOpenMap ↑f

tactic: ext v
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type ?u.2245720
V₂ : Type u_4
V₃ : Type ?u.2245726
V₄ : Type ?u.2245729
P₁ : Type ?u.2245732
P : Type u_3
P₂ : Type u_5
P₃ : Type ?u.2245741
P₄ : Type ?u.2245744
inst✝²⁰ : NormedField 𝕜
inst✝¹⁹ : SeminormedAddCommGroup V
inst✝¹⁸ : SeminormedAddCommGroup V₁
inst✝¹⁷ : SeminormedAddCommGroup V₂
inst✝¹⁶ : SeminormedAddCommGroup V₃
inst✝¹⁵ : SeminormedAddCommGroup V₄
inst✝¹⁴ : NormedSpace 𝕜 V
inst✝¹³ : NormedSpace 𝕜 V₁
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : NormedSpace 𝕜 V₃
inst✝¹⁰ : NormedSpace 𝕜 V₄
inst✝⁹ : PseudoMetricSpace P
inst✝⁸ : MetricSpace P₁
inst✝⁷ : PseudoMetricSpace P₂
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : PseudoMetricSpace P₄
inst✝⁴ : NormedAddTorsor V P
inst✝³ : NormedAddTorsor V₁ P₁
inst✝² : NormedAddTorsor V₂ P₂
inst✝¹ : NormedAddTorsor V₃ P₃
inst✝ : NormedAddTorsor V₄ P₄
f : P →ᵃ[𝕜] P₂
inhabited_h : Inhabited P
⊢ ↑f.linear =
    ↑(Homeomorph.symm (AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 (↑f default)))) ∘
      ↑f ∘ ↑(AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 default))

tactic: simp only [(AffineIsometryEquiv.coe_toHomeomorph), Function.comp_apply, (AffineMap.map_vadd),
  eq_self_iff_true, (AffineIsometryEquiv.toHomeomorph_symm),
  (AffineIsometryEquiv.coe_vaddConst), (vadd_vsub), (AffineIsometryEquiv.coe_vaddConst_symm)]
state_before: case h
𝕜 : Type u_1
V : Type u_2
V₁ : Type ?u.2245720
V₂ : Type u_4
V₃ : Type ?u.2245726
V₄ : Type ?u.2245729
P₁ : Type ?u.2245732
P : Type u_3
P₂ : Type u_5
P₃ : Type ?u.2245741
P₄ : Type ?u.2245744
inst✝²⁰ : NormedField 𝕜
inst✝¹⁹ : SeminormedAddCommGroup V
inst✝¹⁸ : SeminormedAddCommGroup V₁
inst✝¹⁷ : SeminormedAddCommGroup V₂
inst✝¹⁶ : SeminormedAddCommGroup V₃
inst✝¹⁵ : SeminormedAddCommGroup V₄
inst✝¹⁴ : NormedSpace 𝕜 V
inst✝¹³ : NormedSpace 𝕜 V₁
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : NormedSpace 𝕜 V₃
inst✝¹⁰ : NormedSpace 𝕜 V₄
inst✝⁹ : PseudoMetricSpace P
inst✝⁸ : MetricSpace P₁
inst✝⁷ : PseudoMetricSpace P₂
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : PseudoMetricSpace P₄
inst✝⁴ : NormedAddTorsor V P
inst✝³ : NormedAddTorsor V₁ P₁
inst✝² : NormedAddTorsor V₂ P₂
inst✝¹ : NormedAddTorsor V₃ P₃
inst✝ : NormedAddTorsor V₄ P₄
f : P →ᵃ[𝕜] P₂
inhabited_h : Inhabited P
v : V
⊢ ↑f.linear v =
    (↑(Homeomorph.symm (AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 (↑f default)))) ∘
        ↑f ∘ ↑(AffineIsometryEquiv.toHomeomorph (AffineIsometryEquiv.vaddConst 𝕜 default)))
      v