[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
a✝ b✝ : E
hx : a✝ ∈ {v | ∀ (u : E), u ∈ K → inner u v = 0}
hy : b✝ ∈ {v | ∀ (u : E), u ∈ K → inner u v = 0}
u : E
hu : u ∈ K
⊢ inner u (a✝ + b✝) = 0
[PROOFSTEP]
rw [inner_add_right, hx u hu, hy u hu, add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
c : 𝕜
x : E
hx :
  x ∈
    {
          toAddSubsemigroup :=
            { carrier := {v | ∀ (u : E), u ∈ K → inner u v = 0},
              add_mem' :=
                (_ :
                  ∀ {a b : E},
                    a ∈ {v | ∀ (u : E), u ∈ K → inner u v = 0} →
                      b ∈ {v | ∀ (u : E), u ∈ K → inner u v = 0} → ∀ (u : E), u ∈ K → inner u (a + b) = 0) },
          zero_mem' := (_ : ∀ (x : E), x ∈ K → inner x 0 = 0) }.toAddSubsemigroup.carrier
u : E
hu : u ∈ K
⊢ inner u (c • x) = 0
[PROOFSTEP]
rw [inner_smul_right, hx u hu, mul_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
v : E
⊢ v ∈ Kᗮ ↔ ∀ (u : E), u ∈ K → inner v u = 0
[PROOFSTEP]
simp_rw [mem_orthogonal, inner_eq_zero_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
hu : u ∈ K
hv : v ∈ Kᗮ
⊢ inner v u = 0
[PROOFSTEP]
rw [inner_eq_zero_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
hu : u ∈ K
hv : v ∈ Kᗮ
⊢ inner u v = 0
[PROOFSTEP]
exact inner_right_of_mem_orthogonal hu hv
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
⊢ v ∈ (span 𝕜 {u})ᗮ ↔ inner u v = 0
[PROOFSTEP]
refine' ⟨inner_right_of_mem_orthogonal (mem_span_singleton_self u), _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
⊢ inner u v = 0 → v ∈ (span 𝕜 {u})ᗮ
[PROOFSTEP]
intro hv w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
hv : inner u v = 0
w : E
hw : w ∈ span 𝕜 {u}
⊢ inner w v = 0
[PROOFSTEP]
rw [mem_span_singleton] at hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
hv : inner u v = 0
w : E
hw : ∃ a, a • u = w
⊢ inner w v = 0
[PROOFSTEP]
obtain ⟨c, rfl⟩ := hw
[GOAL]
case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
hv : inner u v = 0
c : 𝕜
⊢ inner (c • u) v = 0
[PROOFSTEP]
simp [inner_smul_left, hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
u v : E
⊢ v ∈ (span 𝕜 {u})ᗮ ↔ inner v u = 0
[PROOFSTEP]
rw [mem_orthogonal_singleton_iff_inner_right, inner_eq_zero_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner x ↑v = inner y ↑v
⊢ x - y ∈ Kᗮ
[PROOFSTEP]
rw [mem_orthogonal']
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner x ↑v = inner y ↑v
⊢ ∀ (u : E), u ∈ K → inner (x - y) u = 0
[PROOFSTEP]
intro u hu
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner x ↑v = inner y ↑v
u : E
hu : u ∈ K
⊢ inner (x - y) u = 0
[PROOFSTEP]
rw [inner_sub_left, sub_eq_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner x ↑v = inner y ↑v
u : E
hu : u ∈ K
⊢ inner x u = inner y u
[PROOFSTEP]
exact h ⟨u, hu⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner (↑v) x = inner (↑v) y
⊢ x - y ∈ Kᗮ
[PROOFSTEP]
intro u hu
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner (↑v) x = inner (↑v) y
u : E
hu : u ∈ K
⊢ inner u (x - y) = 0
[PROOFSTEP]
rw [inner_sub_right, sub_eq_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x y : E
h : ∀ (v : { x // x ∈ K }), inner (↑v) x = inner (↑v) y
u : E
hu : u ∈ K
⊢ inner u x = inner u y
[PROOFSTEP]
exact h ⟨u, hu⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K ⊓ Kᗮ = ⊥
[PROOFSTEP]
rw [eq_bot_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K ⊓ Kᗮ ≤ ⊥
[PROOFSTEP]
intro x
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ K ⊓ Kᗮ → x ∈ ⊥
[PROOFSTEP]
rw [mem_inf]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ K ∧ x ∈ Kᗮ → x ∈ ⊥
[PROOFSTEP]
exact fun ⟨hx, ho⟩ => inner_self_eq_zero.1 (ho x hx)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Disjoint K Kᗮ
[PROOFSTEP]
simp [disjoint_iff, K.inf_orthogonal_eq_bot]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Kᗮ = ⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v)
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Kᗮ ≤ ⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v)
[PROOFSTEP]
rw [le_iInf_iff]
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ ∀ (i : { x // x ∈ K }), Kᗮ ≤ LinearMap.ker (↑(innerSL 𝕜) ↑i)
[PROOFSTEP]
rintro ⟨v, hv⟩ w hw
[GOAL]
case a.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
v : E
hv : v ∈ K
w : E
hw : w ∈ Kᗮ
⊢ w ∈ LinearMap.ker (↑(innerSL 𝕜) ↑{ val := v, property := hv })
[PROOFSTEP]
simpa using hw _ hv
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ ⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v) ≤ Kᗮ
[PROOFSTEP]
intro v hv w hw
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
v : E
hv : v ∈ ⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v)
w : E
hw : w ∈ K
⊢ inner w v = 0
[PROOFSTEP]
simp only [mem_iInf] at hv
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
v w : E
hw : w ∈ K
hv : ∀ (i : { x // x ∈ K }), v ∈ LinearMap.ker (↑(innerSL 𝕜) ↑i)
⊢ inner w v = 0
[PROOFSTEP]
exact hv ⟨w, hw⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ IsClosed ↑Kᗮ
[PROOFSTEP]
rw [orthogonal_eq_inter K]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ IsClosed ↑(⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v))
[PROOFSTEP]
have := fun v : K => ContinuousLinearMap.isClosed_ker (innerSL 𝕜 (v : E))
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
this : ∀ (v : { x // x ∈ K }), IsClosed ↑(LinearMap.ker (↑(innerSL 𝕜) ↑v))
⊢ IsClosed ↑(⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v))
[PROOFSTEP]
convert isClosed_iInter this
[GOAL]
case h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
this : ∀ (v : { x // x ∈ K }), IsClosed ↑(LinearMap.ker (↑(innerSL 𝕜) ↑v))
⊢ ↑(⨅ (v : { x // x ∈ K }), LinearMap.ker (↑(innerSL 𝕜) ↑v)) =
    ⋂ (i : { x // x ∈ K }), ↑(LinearMap.ker (↑(innerSL 𝕜) ↑i))
[PROOFSTEP]
simp only [iInf_coe]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ ⊤ᗮ = ⊥
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ ⊤ᗮ ↔ x ∈ ⊥
[PROOFSTEP]
rw [mem_bot, mem_orthogonal]
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ (∀ (u : E), u ∈ ⊤ → inner u x = 0) ↔ x = 0
[PROOFSTEP]
exact
  ⟨fun h => inner_self_eq_zero.mp (h x mem_top), by
    rintro rfl
    simp⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x = 0 → ∀ (u : E), u ∈ ⊤ → inner u x = 0
[PROOFSTEP]
rintro rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ ∀ (u : E), u ∈ ⊤ → inner u 0 = 0
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ ⊥ᗮ = ⊤
[PROOFSTEP]
rw [← top_orthogonal_eq_bot, eq_top_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ ⊤ ≤ ⊤ᗮᗮ
[PROOFSTEP]
exact le_orthogonal_orthogonal ⊤
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Kᗮ = ⊤ ↔ K = ⊥
[PROOFSTEP]
refine'
  ⟨_, by
    rintro rfl
    exact bot_orthogonal_eq_top⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K = ⊥ → Kᗮ = ⊤
[PROOFSTEP]
rintro rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
⊢ ⊥ᗮ = ⊤
[PROOFSTEP]
exact bot_orthogonal_eq_top
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Kᗮ = ⊤ → K = ⊥
[PROOFSTEP]
intro h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
h : Kᗮ = ⊤
⊢ K = ⊥
[PROOFSTEP]
have : K ⊓ Kᗮ = ⊥ := K.orthogonal_disjoint.eq_bot
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
h : Kᗮ = ⊤
this : K ⊓ Kᗮ = ⊥
⊢ K = ⊥
[PROOFSTEP]
rwa [h, inf_comm, top_inf_eq] at this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
U : Submodule 𝕜 E
V : Set (Submodule 𝕜 E)
⊢ (∀ (Uᵢ : Submodule 𝕜 E), Uᵢ ∈ V → Uᵢ ⟂ U) ↔ ∀ (Vᵢ : Submodule 𝕜 E), Vᵢ ∈ V → U ⟂ Vᵢ
[PROOFSTEP]
simp_rw [isOrtho_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
ι : Sort u_4
U : Submodule 𝕜 E
V : ι → Submodule 𝕜 E
⊢ (∀ (i : ι), V i ⟂ U) ↔ ∀ (i : ι), U ⟂ V i
[PROOFSTEP]
simp_rw [isOrtho_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
s t : Set E
⊢ span 𝕜 s ⟂ span 𝕜 t ↔ ∀ ⦃u : E⦄, u ∈ s → ∀ ⦃v : E⦄, v ∈ t → inner u v = 0
[PROOFSTEP]
simp_rw [span_eq_iSup_of_singleton_spans s, span_eq_iSup_of_singleton_spans t, isOrtho_iSup_left, isOrtho_iSup_right,
  isOrtho_iff_le, span_le, Set.subset_def, SetLike.mem_coe, mem_orthogonal_singleton_iff_inner_left,
  Set.mem_singleton_iff, forall_eq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 E
h : U ⟂ V
⊢ Submodule.map f U ⟂ Submodule.map f V
[PROOFSTEP]
rw [isOrtho_iff_inner_eq] at *
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 E
h : ∀ (u : E), u ∈ U → ∀ (v : E), v ∈ V → inner u v = 0
⊢ ∀ (u : F), u ∈ Submodule.map f U → ∀ (v : F), v ∈ Submodule.map f V → inner u v = 0
[PROOFSTEP]
simp_rw [mem_map, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂, LinearIsometry.inner_map_map]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 E
h : ∀ (u : E), u ∈ U → ∀ (v : E), v ∈ V → inner u v = 0
⊢ ∀ (a : E), a ∈ U → ∀ (a_2 : E), a_2 ∈ V → inner a a_2 = 0
[PROOFSTEP]
exact h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 F
h : U ⟂ V
⊢ Submodule.comap f U ⟂ Submodule.comap f V
[PROOFSTEP]
rw [isOrtho_iff_inner_eq] at *
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 F
h : ∀ (u : F), u ∈ U → ∀ (v : F), v ∈ V → inner u v = 0
⊢ ∀ (u : E), u ∈ Submodule.comap f U → ∀ (v : E), v ∈ Submodule.comap f V → inner u v = 0
[PROOFSTEP]
simp_rw [mem_comap, ← f.inner_map_map]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 F
h : ∀ (u : F), u ∈ U → ∀ (v : F), v ∈ V → inner u v = 0
⊢ ∀ (u : E), ↑f u ∈ U → ∀ (v : E), ↑f v ∈ V → inner (↑f u) (↑f v) = 0
[PROOFSTEP]
intro u hu v hv
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E →ₗᵢ[𝕜] F
U V : Submodule 𝕜 F
h : ∀ (u : F), u ∈ U → ∀ (v : F), v ∈ V → inner u v = 0
u : E
hu : ↑f u ∈ U
v : E
hv : ↑f v ∈ V
⊢ inner (↑f u) (↑f v) = 0
[PROOFSTEP]
exact h _ hu _ hv
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E ≃ₗᵢ[𝕜] F
U V : Submodule 𝕜 E
h : Submodule.map f U ⟂ Submodule.map f V
⊢ U ⟂ V
[PROOFSTEP]
have hf : ∀ p : Submodule 𝕜 E, (p.map f).comap f.toLinearIsometry = p := comap_map_eq_of_injective f.injective
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E ≃ₗᵢ[𝕜] F
U V : Submodule 𝕜 E
h : Submodule.map f U ⟂ Submodule.map f V
hf : ∀ (p : Submodule 𝕜 E), Submodule.comap (LinearIsometryEquiv.toLinearIsometry f) (Submodule.map f p) = p
⊢ U ⟂ V
[PROOFSTEP]
simpa only [hf] using h.comap f.toLinearIsometry
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E ≃ₗᵢ[𝕜] F
U V : Submodule 𝕜 F
h : Submodule.comap f U ⟂ Submodule.comap f V
⊢ U ⟂ V
[PROOFSTEP]
have hf : ∀ p : Submodule 𝕜 F, (p.comap f).map f.toLinearIsometry = p := map_comap_eq_of_surjective f.surjective
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
f : E ≃ₗᵢ[𝕜] F
U V : Submodule 𝕜 F
h : Submodule.comap f U ⟂ Submodule.comap f V
hf : ∀ (p : Submodule 𝕜 F), Submodule.map (LinearIsometryEquiv.toLinearIsometry f) (Submodule.comap f p) = p
⊢ U ⟂ V
[PROOFSTEP]
simpa only [hf] using h.map f.toLinearIsometry


[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
⊢ ↑e ⁻¹' Iic b = Iic (↑(symm e) b)
[PROOFSTEP]
ext x
[GOAL]
case h
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
x : α
⊢ x ∈ ↑e ⁻¹' Iic b ↔ x ∈ Iic (↑(symm e) b)
[PROOFSTEP]
simp [← e.le_iff_le]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
⊢ ↑e ⁻¹' Ici b = Ici (↑(symm e) b)
[PROOFSTEP]
ext x
[GOAL]
case h
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
x : α
⊢ x ∈ ↑e ⁻¹' Ici b ↔ x ∈ Ici (↑(symm e) b)
[PROOFSTEP]
simp [← e.le_iff_le]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
⊢ ↑e ⁻¹' Iio b = Iio (↑(symm e) b)
[PROOFSTEP]
ext x
[GOAL]
case h
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
x : α
⊢ x ∈ ↑e ⁻¹' Iio b ↔ x ∈ Iio (↑(symm e) b)
[PROOFSTEP]
simp [← e.lt_iff_lt]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
⊢ ↑e ⁻¹' Ioi b = Ioi (↑(symm e) b)
[PROOFSTEP]
ext x
[GOAL]
case h
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
x : α
⊢ x ∈ ↑e ⁻¹' Ioi b ↔ x ∈ Ioi (↑(symm e) b)
[PROOFSTEP]
simp [← e.lt_iff_lt]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : β
⊢ ↑e ⁻¹' Icc a b = Icc (↑(symm e) a) (↑(symm e) b)
[PROOFSTEP]
simp [← Ici_inter_Iic]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : β
⊢ ↑e ⁻¹' Ico a b = Ico (↑(symm e) a) (↑(symm e) b)
[PROOFSTEP]
simp [← Ici_inter_Iio]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : β
⊢ ↑e ⁻¹' Ioc a b = Ioc (↑(symm e) a) (↑(symm e) b)
[PROOFSTEP]
simp [← Ioi_inter_Iic]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : β
⊢ ↑e ⁻¹' Ioo a b = Ioo (↑(symm e) a) (↑(symm e) b)
[PROOFSTEP]
simp [← Ioi_inter_Iio]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a : α
⊢ ↑e '' Iic a = Iic (↑e a)
[PROOFSTEP]
rw [e.image_eq_preimage, e.symm.preimage_Iic, e.symm_symm]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a : α
⊢ ↑e '' Iio a = Iio (↑e a)
[PROOFSTEP]
rw [e.image_eq_preimage, e.symm.preimage_Iio, e.symm_symm]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : α
⊢ ↑e '' Ioo a b = Ioo (↑e a) (↑e b)
[PROOFSTEP]
rw [e.image_eq_preimage, e.symm.preimage_Ioo, e.symm_symm]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : α
⊢ ↑e '' Ioc a b = Ioc (↑e a) (↑e b)
[PROOFSTEP]
rw [e.image_eq_preimage, e.symm.preimage_Ioc, e.symm_symm]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : α
⊢ ↑e '' Ico a b = Ico (↑e a) (↑e b)
[PROOFSTEP]
rw [e.image_eq_preimage, e.symm.preimage_Ico, e.symm_symm]
[GOAL]
α : Type u_2
β : Type u_1
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
a b : α
⊢ ↑e '' Icc a b = Icc (↑e a) (↑e b)
[PROOFSTEP]
rw [e.image_eq_preimage, e.symm.preimage_Icc, e.symm_symm]
[GOAL]
α : Type ?u.15052
inst✝¹ : Preorder α
inst✝ : OrderTop α
src✝ : Subtype (Iic ⊤) ≃ α := Equiv.subtypeUnivEquiv (_ : ∀ (x : α), x ≤ ⊤)
x y : ↑(Iic ⊤)
⊢ ↑{ toFun := src✝.toFun, invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
            right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
        x ≤
      ↑{ toFun := src✝.toFun, invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
            right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
        y ↔
    x ≤ y
[PROOFSTEP]
rfl
[GOAL]
α : Type ?u.15647
inst✝¹ : Preorder α
inst✝ : OrderBot α
src✝ : Subtype (Ici ⊥) ≃ α := Equiv.subtypeUnivEquiv (_ : ∀ (x : α), ⊥ ≤ x)
x y : ↑(Ici ⊥)
⊢ ↑{ toFun := src✝.toFun, invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
            right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
        x ≤
      ↑{ toFun := src✝.toFun, invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
            right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
        y ↔
    x ≤ y
[PROOFSTEP]
rfl


[GOAL]
x : ℝ
hx : x ≠ 0
⊢ HasStrictDerivAt sqrt (1 / (2 * sqrt x)) x ∧ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
cases' hx.lt_or_lt with hx hx
[GOAL]
case inl
x : ℝ
hx✝ : x ≠ 0
hx : x < 0
⊢ HasStrictDerivAt sqrt (1 / (2 * sqrt x)) x ∧ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
rw [sqrt_eq_zero_of_nonpos hx.le, mul_zero, div_zero]
[GOAL]
case inl
x : ℝ
hx✝ : x ≠ 0
hx : x < 0
⊢ HasStrictDerivAt sqrt 0 x ∧ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
have : sqrt =ᶠ[𝓝 x] fun _ => 0 := (gt_mem_nhds hx).mono fun x hx => sqrt_eq_zero_of_nonpos hx.le
[GOAL]
case inl
x : ℝ
hx✝ : x ≠ 0
hx : x < 0
this : sqrt =ᶠ[𝓝 x] fun x => 0
⊢ HasStrictDerivAt sqrt 0 x ∧ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
exact
  ⟨(hasStrictDerivAt_const x (0 : ℝ)).congr_of_eventuallyEq this.symm, fun n =>
    contDiffAt_const.congr_of_eventuallyEq this⟩
[GOAL]
case inr
x : ℝ
hx✝ : x ≠ 0
hx : 0 < x
⊢ HasStrictDerivAt sqrt (1 / (2 * sqrt x)) x ∧ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
have : ↑2 * sqrt x ^ (2 - 1) ≠ 0 := by simp [(sqrt_pos.2 hx).ne', @two_ne_zero ℝ]
[GOAL]
x : ℝ
hx✝ : x ≠ 0
hx : 0 < x
⊢ 2 * sqrt x ^ (2 - 1) ≠ 0
[PROOFSTEP]
simp [(sqrt_pos.2 hx).ne', @two_ne_zero ℝ]
[GOAL]
case inr
x : ℝ
hx✝ : x ≠ 0
hx : 0 < x
this : 2 * sqrt x ^ (2 - 1) ≠ 0
⊢ HasStrictDerivAt sqrt (1 / (2 * sqrt x)) x ∧ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
constructor
[GOAL]
case inr.left
x : ℝ
hx✝ : x ≠ 0
hx : 0 < x
this : 2 * sqrt x ^ (2 - 1) ≠ 0
⊢ HasStrictDerivAt sqrt (1 / (2 * sqrt x)) x
[PROOFSTEP]
simpa using sqLocalHomeomorph.hasStrictDerivAt_symm hx this (hasStrictDerivAt_pow 2 _)
[GOAL]
case inr.right
x : ℝ
hx✝ : x ≠ 0
hx : 0 < x
this : 2 * sqrt x ^ (2 - 1) ≠ 0
⊢ ∀ (n : ℕ∞), ContDiffAt ℝ n sqrt x
[PROOFSTEP]
exact fun n => sqLocalHomeomorph.contDiffAt_symm_deriv this hx (hasDerivAt_pow 2 (sqrt x)) (contDiffAt_id.pow 2)
[GOAL]
f : ℝ → ℝ
s : Set ℝ
f' x : ℝ
hf : HasDerivWithinAt f f' s x
hx : f x ≠ 0
⊢ HasDerivWithinAt (fun y => Real.sqrt (f y)) (f' / (2 * Real.sqrt (f x))) s x
[PROOFSTEP]
simpa only [(· ∘ ·), div_eq_inv_mul, mul_one] using (hasDerivAt_sqrt hx).comp_hasDerivWithinAt x hf
[GOAL]
f : ℝ → ℝ
s : Set ℝ
f' x : ℝ
hf : HasDerivAt f f' x
hx : f x ≠ 0
⊢ HasDerivAt (fun y => Real.sqrt (f y)) (f' / (2 * Real.sqrt (f x))) x
[PROOFSTEP]
simpa only [(· ∘ ·), div_eq_inv_mul, mul_one] using (hasDerivAt_sqrt hx).comp x hf
[GOAL]
f : ℝ → ℝ
s : Set ℝ
f' x : ℝ
hf : HasStrictDerivAt f f' x
hx : f x ≠ 0
⊢ HasStrictDerivAt (fun t => Real.sqrt (f t)) (f' / (2 * Real.sqrt (f x))) x
[PROOFSTEP]
simpa only [(· ∘ ·), div_eq_inv_mul, mul_one] using (hasStrictDerivAt_sqrt hx).comp x hf


[GOAL]
K : Type v
V : Type w
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
inst✝² : IsAlgClosed K
inst✝¹ : FiniteDimensional K V
inst✝ : Nontrivial V
f : End K V
⊢ ∃ c, HasEigenvalue f c
[PROOFSTEP]
simp_rw [hasEigenvalue_iff_mem_spectrum]
[GOAL]
K : Type v
V : Type w
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
inst✝² : IsAlgClosed K
inst✝¹ : FiniteDimensional K V
inst✝ : Nontrivial V
f : End K V
⊢ ∃ c, c ∈ spectrum K f
[PROOFSTEP]
exact spectrum.nonempty_of_isAlgClosed_of_finiteDimensional K f
[GOAL]
K : Type v
V : Type w
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
inst✝¹ : IsAlgClosed K
inst✝ : FiniteDimensional K V
f : End K V
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
induction' h_dim : finrank K V using Nat.strong_induction_on with n ih generalizing V
[GOAL]
case h
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
n : ℕ
ih :
  ∀ (m : ℕ),
    m < n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
h_dim : finrank K V = n
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
cases' n with n
[GOAL]
case h.zero
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
ih :
  ∀ (m : ℕ),
    m < Nat.zero →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.zero
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
rw [← top_le_iff]
[GOAL]
case h.zero
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
ih :
  ∀ (m : ℕ),
    m < Nat.zero →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.zero
⊢ ⊤ ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
[PROOFSTEP]
simp only [finrank_eq_zero.1 (Eq.trans (finrank_top _ _) h_dim), bot_le]
  -- Otherwise the vector space is nontrivial.
[GOAL]
case h.succ
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
haveI : Nontrivial V :=
  finrank_pos_iff.1
    (by rw [h_dim]; apply Nat.zero_lt_succ)
      -- Hence, `f` has an eigenvalue `μ₀`.
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
⊢ 0 < finrank ?m.10065 V
[PROOFSTEP]
rw [h_dim]
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
⊢ 0 < Nat.succ n
[PROOFSTEP]
apply Nat.zero_lt_succ
[GOAL]
case h.succ
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
obtain ⟨μ₀, hμ₀⟩ : ∃ μ₀, f.HasEigenvalue μ₀ := exists_eigenvalue f
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
let ES :=
  f.generalizedEigenspace μ₀
    (finrank K V)
      -- and `ER` to be the generalized eigenrange.
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
let ER :=
  f.generalizedEigenrange μ₀
    (finrank K V)
      -- `f` maps `ER` into itself.
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have h_f_ER : ∀ x : V, x ∈ ER → f x ∈ ER := fun x hx =>
  map_generalizedEigenrange_le
    (Submodule.mem_map_of_mem hx)
      -- Therefore, we can define the restriction `f'` of `f` to `ER`.
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
let f' : End K ER := f.restrict h_f_ER
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have h_dim_ES_pos : 0 < finrank K ES := by
  dsimp only
  rw [h_dim]
  apply
    pos_finrank_generalizedEigenspace_of_hasEigenvalue hμ₀
      (Nat.zero_lt_succ n)
        -- and the dimensions of `ES` and `ER` add up to `finrank K V`.
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
⊢ 0 < finrank K { x // x ∈ ES }
[PROOFSTEP]
dsimp only
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
⊢ 0 < finrank K { x // x ∈ ↑(generalizedEigenspace f μ₀) (finrank K V) }
[PROOFSTEP]
rw [h_dim]
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
⊢ 0 < finrank K { x // x ∈ ↑(generalizedEigenspace f μ₀) (Nat.succ n) }
[PROOFSTEP]
apply
  pos_finrank_generalizedEigenspace_of_hasEigenvalue hμ₀
    (Nat.zero_lt_succ n)
      -- and the dimensions of `ES` and `ER` add up to `finrank K V`.
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have h_dim_add : finrank K ER + finrank K ES = finrank K V := by apply LinearMap.finrank_range_add_finrank_ker
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
⊢ finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
[PROOFSTEP]
apply LinearMap.finrank_range_add_finrank_ker
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have h_dim_ER : finrank K ER < n.succ := by
  linarith
    -- This allows us to apply the induction hypothesis on `ER`:
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
⊢ finrank K { x // x ∈ ER } < Nat.succ n
[PROOFSTEP]
linarith
  -- This allows us to apply the induction hypothesis on `ER`:
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have ih_ER : ⨆ (μ : K) (k : ℕ), f'.generalizedEigenspace μ k = ⊤ := ih (finrank K ER) h_dim_ER f' rfl
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have ih_ER' : ⨆ (μ : K) (k : ℕ), (f'.generalizedEigenspace μ k).map ER.subtype = ER := by
  simp only [(Submodule.map_iSup _ _).symm, ih_ER, Submodule.map_subtype_top ER]
    -- Moreover, every generalized eigenspace of `f'` is contained in the corresponding generalized
        -- eigenspace of `f`.
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
⊢ ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
[PROOFSTEP]
simp only [(Submodule.map_iSup _ _).symm, ih_ER, Submodule.map_subtype_top ER]
  -- Moreover, every generalized eigenspace of `f'` is contained in the corresponding generalized
      -- eigenspace of `f`.
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have hff' : ∀ μ k, (f'.generalizedEigenspace μ k).map ER.subtype ≤ f.generalizedEigenspace μ k :=
  by
  intros
  rw [generalizedEigenspace_restrict]
  apply Submodule.map_comap_le
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
⊢ ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
[PROOFSTEP]
intros
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
μ✝ : K
k✝ : ℕ
⊢ Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ✝) k✝) ≤ ↑(generalizedEigenspace f μ✝) k✝
[PROOFSTEP]
rw [generalizedEigenspace_restrict]
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
μ✝ : K
k✝ : ℕ
⊢ Submodule.map (Submodule.subtype ER) (Submodule.comap (Submodule.subtype ER) (↑(generalizedEigenspace f μ✝) k✝)) ≤
    ↑(generalizedEigenspace f μ✝) k✝
[PROOFSTEP]
apply Submodule.map_comap_le
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have hER : ER ≤ ⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k :=
  by
  rw [← ih_ER']
  exact iSup₂_mono hff'
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
⊢ ER ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
[PROOFSTEP]
rw [← ih_ER']
[GOAL]
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
⊢ ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤
    ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
[PROOFSTEP]
exact iSup₂_mono hff'
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
hER : ER ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have hES : ES ≤ ⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k :=
  le_trans (le_iSup (fun k => f.generalizedEigenspace μ₀ k) (finrank K V))
    (le_iSup (fun μ : K => ⨆ k : ℕ, f.generalizedEigenspace μ k) μ₀)
      -- Moreover, we know that `ER` and `ES` are disjoint.
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
hER : ER ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
hES : ES ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
have h_disjoint : Disjoint ER ES := generalized_eigenvec_disjoint_range_ker f μ₀
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
hER : ER ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
hES : ES ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
h_disjoint : Disjoint ER ES
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
show ⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k = ⊤
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
hER : ER ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
hES : ES ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
h_disjoint : Disjoint ER ES
⊢ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
[PROOFSTEP]
rw [← top_le_iff, ← Submodule.eq_top_of_disjoint ER ES h_dim_add h_disjoint]
[GOAL]
case h.succ.intro
K : Type v
V✝ : Type w
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V✝
inst✝⁵ : Module K V✝
inst✝⁴ : IsAlgClosed K
inst✝³ : FiniteDimensional K V✝
f✝ : End K V✝
x✝ : ℕ
h_dim✝ : finrank K V✝ = x✝
V : Type w
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
n : ℕ
ih :
  ∀ (m : ℕ),
    m < Nat.succ n →
      ∀ {V : Type w} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] (f : End K V),
        finrank K V = m → ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k = ⊤
h_dim : finrank K V = Nat.succ n
this : Nontrivial V
μ₀ : K
hμ₀ : HasEigenvalue f μ₀
ES : Submodule K V := ↑(generalizedEigenspace f μ₀) (finrank K V)
ER : Submodule K V := generalizedEigenrange f μ₀ (finrank K V)
h_f_ER : ∀ (x : V), x ∈ ER → ↑f x ∈ ER
f' : End K { x // x ∈ ER } := LinearMap.restrict f h_f_ER
h_dim_ES_pos : 0 < finrank K { x // x ∈ ES }
h_dim_add : finrank K { x // x ∈ ER } + finrank K { x // x ∈ ES } = finrank K V
h_dim_ER : finrank K { x // x ∈ ER } < Nat.succ n
ih_ER : ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f' μ) k = ⊤
ih_ER' : ⨆ (μ : K) (k : ℕ), Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) = ER
hff' :
  ∀ (μ : K) (k : ℕ),
    Submodule.map (Submodule.subtype ER) (↑(generalizedEigenspace f' μ) k) ≤ ↑(generalizedEigenspace f μ) k
hER : ER ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
hES : ES ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
h_disjoint : Disjoint ER ES
⊢ ER ⊔ ES ≤ ⨆ (μ : K) (k : ℕ), ↑(generalizedEigenspace f μ) k
[PROOFSTEP]
apply sup_le hER hES


[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
⊢ ∀ (s : Set ℤ) (a : ℤ), BddAbove s → a ∈ s → a ≤ sSup s
[PROOFSTEP]
intro s n hs hns
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : BddAbove s
hns : n ∈ s
⊢ n ≤ sSup s
[PROOFSTEP]
have : s.Nonempty ∧ BddAbove s :=
  ⟨⟨n, hns⟩, hs⟩
    -- Porting note: this was `rw [dif_pos this]`
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : BddAbove s
hns : n ∈ s
this : Set.Nonempty s ∧ BddAbove s
⊢ n ≤ sSup s
[PROOFSTEP]
simp only [this, and_self, dite_true, ge_iff_le]
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : BddAbove s
hns : n ∈ s
this : Set.Nonempty s ∧ BddAbove s
⊢ n ≤ ↑(greatestOfBdd (choose (_ : BddAbove s)) (_ : choose (_ : BddAbove s) ∈ upperBounds s) (_ : Set.Nonempty s))
[PROOFSTEP]
exact (greatestOfBdd _ _ _).2.2 n hns
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
⊢ ∀ (s : Set ℤ) (a : ℤ), Set.Nonempty s → a ∈ upperBounds s → sSup s ≤ a
[PROOFSTEP]
intro s n hs hns
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : Set.Nonempty s
hns : n ∈ upperBounds s
⊢ sSup s ≤ n
[PROOFSTEP]
have : s.Nonempty ∧ BddAbove s :=
  ⟨hs, ⟨n, hns⟩⟩
    -- Porting note: this was `rw [dif_pos this]`
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : Set.Nonempty s
hns : n ∈ upperBounds s
this : Set.Nonempty s ∧ BddAbove s
⊢ sSup s ≤ n
[PROOFSTEP]
simp only [this, and_self, dite_true, ge_iff_le]
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : Set.Nonempty s
hns : n ∈ upperBounds s
this : Set.Nonempty s ∧ BddAbove s
⊢ ↑(greatestOfBdd (choose (_ : BddAbove s)) (_ : choose (_ : BddAbove s) ∈ upperBounds s) (_ : Set.Nonempty s)) ≤ n
[PROOFSTEP]
exact hns (greatestOfBdd _ (Classical.choose_spec this.2) _).2.1
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
⊢ ∀ (s : Set ℤ) (a : ℤ), BddBelow s → a ∈ s → sInf s ≤ a
[PROOFSTEP]
intro s n hs hns
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : BddBelow s
hns : n ∈ s
⊢ sInf s ≤ n
[PROOFSTEP]
have : s.Nonempty ∧ BddBelow s :=
  ⟨⟨n, hns⟩, hs⟩
    -- Porting note: this was `rw [dif_pos this]`
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : BddBelow s
hns : n ∈ s
this : Set.Nonempty s ∧ BddBelow s
⊢ sInf s ≤ n
[PROOFSTEP]
simp only [this, and_self, dite_true, ge_iff_le]
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : BddBelow s
hns : n ∈ s
this : Set.Nonempty s ∧ BddBelow s
⊢ ↑(leastOfBdd (choose (_ : BddBelow s)) (_ : choose (_ : BddBelow s) ∈ lowerBounds s) (_ : Set.Nonempty s)) ≤ n
[PROOFSTEP]
exact (leastOfBdd _ _ _).2.2 n hns
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
⊢ ∀ (s : Set ℤ) (a : ℤ), Set.Nonempty s → a ∈ lowerBounds s → a ≤ sInf s
[PROOFSTEP]
intro s n hs hns
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : Set.Nonempty s
hns : n ∈ lowerBounds s
⊢ n ≤ sInf s
[PROOFSTEP]
have : s.Nonempty ∧ BddBelow s :=
  ⟨hs, ⟨n, hns⟩⟩
    -- Porting note: this was `rw [dif_pos this]`
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : Set.Nonempty s
hns : n ∈ lowerBounds s
this : Set.Nonempty s ∧ BddBelow s
⊢ n ≤ sInf s
[PROOFSTEP]
simp only [this, and_self, dite_true, ge_iff_le]
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
n : ℤ
hs : Set.Nonempty s
hns : n ∈ lowerBounds s
this : Set.Nonempty s ∧ BddBelow s
⊢ n ≤ ↑(leastOfBdd (choose (_ : BddBelow s)) (_ : choose (_ : BddBelow s) ∈ lowerBounds s) (_ : Set.Nonempty s))
[PROOFSTEP]
exact hns (leastOfBdd _ (Classical.choose_spec this.2) _).2.1
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
hs : ¬BddAbove s
⊢ sSup s = sSup Set.univ
[PROOFSTEP]
simp [hs]
[GOAL]
src✝¹ : LinearOrderedCommRing ℤ := linearOrderedCommRing
src✝ : Lattice ℤ := LinearOrder.toLattice
s : Set ℤ
hs : ¬BddBelow s
⊢ sInf s = sInf Set.univ
[PROOFSTEP]
simp [hs]
[GOAL]
s : Set ℤ
inst✝ : DecidablePred fun x => x ∈ s
b : ℤ
Hb : ∀ (z : ℤ), z ∈ s → z ≤ b
Hinh : ∃ z, z ∈ s
⊢ sSup s = ↑(greatestOfBdd b Hb Hinh)
[PROOFSTEP]
have : s.Nonempty ∧ BddAbove s := ⟨Hinh, b, Hb⟩
[GOAL]
s : Set ℤ
inst✝ : DecidablePred fun x => x ∈ s
b : ℤ
Hb : ∀ (z : ℤ), z ∈ s → z ≤ b
Hinh : ∃ z, z ∈ s
this : Set.Nonempty s ∧ BddAbove s
⊢ sSup s = ↑(greatestOfBdd b Hb Hinh)
[PROOFSTEP]
simp only [sSup, this, and_self, dite_true]
[GOAL]
s : Set ℤ
inst✝ : DecidablePred fun x => x ∈ s
b : ℤ
Hb : ∀ (z : ℤ), z ∈ s → z ≤ b
Hinh : ∃ z, z ∈ s
this : Set.Nonempty s ∧ BddAbove s
⊢ ↑(greatestOfBdd (choose (_ : BddAbove s)) (_ : choose (_ : BddAbove s) ∈ upperBounds s) (_ : Set.Nonempty s)) =
    ↑(greatestOfBdd b Hb Hinh)
[PROOFSTEP]
convert (coe_greatestOfBdd_eq Hb (Classical.choose_spec (⟨b, Hb⟩ : BddAbove s)) Hinh).symm
[GOAL]
⊢ ¬(Set.Nonempty ∅ ∧ BddAbove ∅)
[PROOFSTEP]
simp
[GOAL]
s : Set ℤ
h : ¬BddAbove s
⊢ ¬(Set.Nonempty s ∧ BddAbove s)
[PROOFSTEP]
simp [h]
[GOAL]
s : Set ℤ
inst✝ : DecidablePred fun x => x ∈ s
b : ℤ
Hb : ∀ (z : ℤ), z ∈ s → b ≤ z
Hinh : ∃ z, z ∈ s
⊢ sInf s = ↑(leastOfBdd b Hb Hinh)
[PROOFSTEP]
have : s.Nonempty ∧ BddBelow s := ⟨Hinh, b, Hb⟩
[GOAL]
s : Set ℤ
inst✝ : DecidablePred fun x => x ∈ s
b : ℤ
Hb : ∀ (z : ℤ), z ∈ s → b ≤ z
Hinh : ∃ z, z ∈ s
this : Set.Nonempty s ∧ BddBelow s
⊢ sInf s = ↑(leastOfBdd b Hb Hinh)
[PROOFSTEP]
simp only [sInf, this, and_self, dite_true]
[GOAL]
s : Set ℤ
inst✝ : DecidablePred fun x => x ∈ s
b : ℤ
Hb : ∀ (z : ℤ), z ∈ s → b ≤ z
Hinh : ∃ z, z ∈ s
this : Set.Nonempty s ∧ BddBelow s
⊢ ↑(leastOfBdd (choose (_ : BddBelow s)) (_ : choose (_ : BddBelow s) ∈ lowerBounds s) (_ : Set.Nonempty s)) =
    ↑(leastOfBdd b Hb Hinh)
[PROOFSTEP]
convert (coe_leastOfBdd_eq Hb (Classical.choose_spec (⟨b, Hb⟩ : BddBelow s)) Hinh).symm
[GOAL]
⊢ ¬(Set.Nonempty ∅ ∧ BddBelow ∅)
[PROOFSTEP]
simp
[GOAL]
s : Set ℤ
h : ¬BddBelow s
⊢ ¬(Set.Nonempty s ∧ BddBelow s)
[PROOFSTEP]
simp [h]
[GOAL]
s : Set ℤ
h1 : Set.Nonempty s
h2 : BddAbove s
⊢ sSup s ∈ s
[PROOFSTEP]
convert (greatestOfBdd _ (Classical.choose_spec h2) h1).2.1
[GOAL]
case h.e'_4
s : Set ℤ
h1 : Set.Nonempty s
h2 : BddAbove s
⊢ sSup s = ↑(greatestOfBdd (choose h2) (_ : choose h2 ∈ upperBounds s) h1)
[PROOFSTEP]
exact dif_pos ⟨h1, h2⟩
[GOAL]
s : Set ℤ
h1 : Set.Nonempty s
h2 : BddBelow s
⊢ sInf s ∈ s
[PROOFSTEP]
convert (leastOfBdd _ (Classical.choose_spec h2) h1).2.1
[GOAL]
case h.e'_4
s : Set ℤ
h1 : Set.Nonempty s
h2 : BddBelow s
⊢ sInf s = ↑(leastOfBdd (choose h2) (_ : choose h2 ∈ lowerBounds s) h1)
[PROOFSTEP]
exact dif_pos ⟨h1, h2⟩


[GOAL]
B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g h : b ⟶ c
η : g = h
⊢ f ◁ eqToHom η = eqToHom (_ : f ≫ g = f ≫ h)
[PROOFSTEP]
cases η
[GOAL]
case refl
B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ f ◁ eqToHom (_ : g = g) = eqToHom (_ : f ≫ g = f ≫ g)
[PROOFSTEP]
simp only [whiskerLeft_id, eqToHom_refl]
[GOAL]
B : Type u
inst✝ : Bicategory B
a b c : B
f g : a ⟶ b
η : f = g
h : b ⟶ c
⊢ eqToHom η ▷ h = eqToHom (_ : f ≫ h = g ≫ h)
[PROOFSTEP]
cases η
[GOAL]
case refl
B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
h : b ⟶ c
⊢ eqToHom (_ : f = f) ▷ h = eqToHom (_ : f ≫ h = f ≫ h)
[PROOFSTEP]
simp only [id_whiskerRight, eqToHom_refl]