Theorem: Submodule.exists_le_ker_of_lt_top
File: Mathlib/LinearAlgebra/Basis/VectorSpace.lean

tactic: rcases SetLike.exists_of_lt hp with ⟨v, -, hpv⟩
state_before: ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
p : Submodule K V
hp : p < ⊤
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
hp : p < ⊤
v : V
hpv : v ∉ p
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f

tactic: clear hp
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
hp : p < ⊤
v : V
hpv : v ∉ p
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f

tactic: rcases (LinearPMap.supSpanSingleton ⟨p, 0⟩ v (1 : K) hpv).toFun.exists_extend with ⟨f, hf⟩
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f

tactic: refine ⟨f, ?_, ?_⟩
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ ∃ f, f ≠ 0 ∧ p ≤ ker f
state_after: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ f ≠ 0

case intro.intro.intro.refine_2
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ p ≤ ker f

tactic: rintro rfl
state_before: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ f ≠ 0
state_after: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
hf :
  0 ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ False

tactic: rw [LinearMap.zero_comp] at hf
state_before: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
hf :
  0 ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ False
state_after: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
hf : 0 = ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ False

tactic: have := LinearPMap.supSpanSingleton_apply_mk ⟨p, 0⟩ v (1 : K) hpv 0 p.zero_mem 1
state_before: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
hf : 0 = ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ False
state_after: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
hf : 0 = ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
this :
  ↑({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv) ⟨0 + 1 • v, ⋯⟩ = ↑{ domain := p, toFun := 0 } ⟨0, ⋯⟩ + 1 • 1
⊢ False

tactic: simpa using (LinearMap.congr_fun hf _).trans this
state_before: case intro.intro.intro.refine_1
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
hf : 0 = ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
this :
  ↑({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv) ⟨0 + 1 • v, ⋯⟩ = ↑{ domain := p, toFun := 0 } ⟨0, ⋯⟩ + 1 • 1
⊢ False
state_after: no goals

tactic: refine fun x hx => mem_ker.2 ?_
state_before: case intro.intro.intro.refine_2
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
⊢ p ≤ ker f
state_after: case intro.intro.intro.refine_2
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x✝ y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
x : V
hx : x ∈ p
⊢ f x = 0

tactic: have := LinearPMap.supSpanSingleton_apply_mk ⟨p, 0⟩ v (1 : K) hpv x hx 0
state_before: case intro.intro.intro.refine_2
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x✝ y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
x : V
hx : x ∈ p
⊢ f x = 0
state_after: case intro.intro.intro.refine_2
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x✝ y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
x : V
hx : x ∈ p
this :
  ↑({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv) ⟨x + 0 • v, ⋯⟩ = ↑{ domain := p, toFun := 0 } ⟨x, hx⟩ + 0 • 1
⊢ f x = 0

tactic: simpa using (LinearMap.congr_fun hf _).trans this
state_before: case intro.intro.intro.refine_2
ι : Type u_1
ι' : Type u_2
K : Type u_3
V : Type u_4
V' : Type u_5
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x✝ y z : V
p : Submodule K V
v : V
hpv : v ∉ p
f : V →ₗ[K] K
hf :
  f ∘ₗ ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).domain.subtype =
    ({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv).toFun
x : V
hx : x ∈ p
this :
  ↑({ domain := p, toFun := 0 }.supSpanSingleton v 1 hpv) ⟨x + 0 • v, ⋯⟩ = ↑{ domain := p, toFun := 0 } ⟨x, hx⟩ + 0 • 1
⊢ f x = 0
state_after: no goals