Theorem: Ideal.rank_eq
File: Mathlib/LinearAlgebra/Dimension/StrongRankCondition.lean

tactic: obtain ⟨a, ha⟩ := Submodule.nonzero_mem_of_bot_lt (bot_lt_iff_ne_bot.mpr hI)
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
⊢ Fintype.card m = Fintype.card n
state_after: case intro
R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
⊢ Fintype.card m = Fintype.card n

tactic: have : LinearIndependent R fun i => b i • a := by
  have hb := b.linearIndependent
  rw [Fintype.linearIndependent_iff] at hb ⊢
  intro g hg
  apply hb g
  simp only [← smul_assoc, ← Finset.sum_smul, smul_eq_zero] at hg
  exact hg.resolve_right ha
state_before: case intro
R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
⊢ Fintype.card m = Fintype.card n
state_after: case intro
R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
this : LinearIndependent R fun i => b i • a
⊢ Fintype.card m = Fintype.card n

tactic: exact le_antisymm
  (b.card_le_card_of_linearIndependent (c.linearIndependent.map' (Submodule.subtype I)
    ((LinearMap.ker_eq_bot (f := (Submodule.subtype I : I →ₗ[R] S))).mpr Subtype.coe_injective)))
  (c.card_le_card_of_linearIndependent this)
state_before: case intro
R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
this : LinearIndependent R fun i => b i • a
⊢ Fintype.card m = Fintype.card n
state_after: no goals

tactic: have hb := b.linearIndependent
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
⊢ LinearIndependent R fun i => b i • a
state_after: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : LinearIndependent R ⇑b
⊢ LinearIndependent R fun i => b i • a

tactic: rw [Fintype.linearIndependent_iff] at hb ⊢
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : LinearIndependent R ⇑b
⊢ LinearIndependent R fun i => b i • a
state_after: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
⊢ ∀ (g : n → R), ∑ i : n, g i • b i • a = 0 → ∀ (i : n), g i = 0

tactic: intro g hg
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
⊢ ∀ (g : n → R), ∑ i : n, g i • b i • a = 0 → ∀ (i : n), g i = 0
state_after: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
g : n → R
hg : ∑ i : n, g i • b i • a = 0
⊢ ∀ (i : n), g i = 0

tactic: apply hb g
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
g : n → R
hg : ∑ i : n, g i • b i • a = 0
⊢ ∀ (i : n), g i = 0
state_after: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
g : n → R
hg : ∑ i : n, g i • b i • a = 0
⊢ ∑ i : n, g i • b i = 0

tactic: simp only [← smul_assoc, ← Finset.sum_smul, smul_eq_zero] at hg
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
g : n → R
hg : ∑ i : n, g i • b i • a = 0
⊢ ∑ i : n, g i • b i = 0
state_after: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
g : n → R
hg : ∑ i : n, g i • b i = 0 ∨ a = 0
⊢ ∑ i : n, g i • b i = 0

tactic: exact hg.resolve_right ha
state_before: R✝ : Type u
M : Type v
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R✝ M
ι : Type w
ι' : Type w'
inst✝⁷ : StrongRankCondition R✝
R : Type u_1
S : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Ring S
inst✝³ : IsDomain S
inst✝² : Algebra R S
n : Type u_3
m : Type u_4
inst✝¹ : Fintype n
inst✝ : Fintype m
b : Basis n R S
I : Ideal S
hI : I ≠ ⊥
c : Basis m R ↥I
a : ↥I
ha : a ≠ 0
hb : ∀ (g : n → R), ∑ i : n, g i • b i = 0 → ∀ (i : n), g i = 0
g : n → R
hg : ∑ i : n, g i • b i = 0 ∨ a = 0
⊢ ∑ i : n, g i • b i = 0
state_after: no goals