Theorem: Submodule.rank_sup_add_rank_inf_eq
File: Mathlib/LinearAlgebra/Dimension.lean

tactic: rw [← map_le_map_iff' (ker_subtype <| s ⊔ t), Submodule.map_sup, Submodule.map_top, ←
  LinearMap.range_comp, ← LinearMap.range_comp, subtype_comp_ofLe, subtype_comp_ofLe,
  range_subtype, range_subtype, range_subtype]
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1002876
inst✝¹⁰ : DivisionRing K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
inst✝⁷ : AddCommGroup V'
inst✝⁶ : Module K V'
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : Module K V₁
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : AddCommGroup V₃
inst✝ : Module K V₃
s t : Submodule K V
⊢ ⊤ ≤ LinearMap.range (ofLe (_ : s ≤ s ⊔ t)) ⊔ LinearMap.range (ofLe (_ : t ≤ s ⊔ t))

tactic: ext ⟨x, hx⟩
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1002876
inst✝¹⁰ : DivisionRing K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
inst✝⁷ : AddCommGroup V'
inst✝⁶ : Module K V'
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : Module K V₁
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : AddCommGroup V₃
inst✝ : Module K V₃
s t : Submodule K V
⊢ LinearMap.comp (ofLe (_ : s ≤ s ⊔ t)) (ofLe (_ : s ⊓ t ≤ s)) =
    LinearMap.comp (ofLe (_ : t ≤ s ⊔ t)) (ofLe (_ : s ⊓ t ≤ t))

tactic: rfl
state_before: case h.mk.a
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1002876
inst✝¹⁰ : DivisionRing K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
inst✝⁷ : AddCommGroup V'
inst✝⁶ : Module K V'
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : Module K V₁
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : AddCommGroup V₃
inst✝ : Module K V₃
s t : Submodule K V
x : V
hx : x ∈ s ⊓ t
⊢ ↑(↑(LinearMap.comp (ofLe (_ : s ≤ s ⊔ t)) (ofLe (_ : s ⊓ t ≤ s))) { val := x, property := hx }) =
    ↑(↑(LinearMap.comp (ofLe (_ : t ≤ s ⊔ t)) (ofLe (_ : s ⊓ t ≤ t))) { val := x, property := hx })

tactic: rintro ⟨b₁, hb₁⟩ ⟨b₂, hb₂⟩ eq
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1002876
inst✝¹⁰ : DivisionRing K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
inst✝⁷ : AddCommGroup V'
inst✝⁶ : Module K V'
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : Module K V₁
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : AddCommGroup V₃
inst✝ : Module K V₃
s t : Submodule K V
⊢ ∀ (d : { x // x ∈ s }) (e : { x // x ∈ t }),
    ↑(ofLe (_ : s ≤ s ⊔ t)) d = ↑(ofLe (_ : t ≤ s ⊔ t)) e →
      ∃ c, ↑(ofLe (_ : s ⊓ t ≤ s)) c = d ∧ ↑(ofLe (_ : s ⊓ t ≤ t)) c = e

tactic: obtain rfl : b₁ = b₂ := congr_arg Subtype.val eq
state_before: case mk.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1002876
inst✝¹⁰ : DivisionRing K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
inst✝⁷ : AddCommGroup V'
inst✝⁶ : Module K V'
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : Module K V₁
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : AddCommGroup V₃
inst✝ : Module K V₃
s t : Submodule K V
b₁ : V
hb₁ : b₁ ∈ s
b₂ : V
hb₂ : b₂ ∈ t
eq : ↑(ofLe (_ : s ≤ s ⊔ t)) { val := b₁, property := hb₁ } = ↑(ofLe (_ : t ≤ s ⊔ t)) { val := b₂, property := hb₂ }
⊢ ∃ c,
    ↑(ofLe (_ : s ⊓ t ≤ s)) c = { val := b₁, property := hb₁ } ∧
      ↑(ofLe (_ : s ⊓ t ≤ t)) c = { val := b₂, property := hb₂ }

tactic: exact ⟨⟨b₁, hb₁, hb₂⟩, rfl, rfl⟩
state_before: case mk.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1002876
inst✝¹⁰ : DivisionRing K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
inst✝⁷ : AddCommGroup V'
inst✝⁶ : Module K V'
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : Module K V₁
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : AddCommGroup V₃
inst✝ : Module K V₃
s t : Submodule K V
b₁ : V
hb₁ : b₁ ∈ s
hb₂ : b₁ ∈ t
eq : ↑(ofLe (_ : s ≤ s ⊔ t)) { val := b₁, property := hb₁ } = ↑(ofLe (_ : t ≤ s ⊔ t)) { val := b₁, property := hb₂ }
⊢ ∃ c,
    ↑(ofLe (_ : s ⊓ t ≤ s)) c = { val := b₁, property := hb₁ } ∧
      ↑(ofLe (_ : s ⊓ t ≤ t)) c = { val := b₁, property := hb₂ }