Theorem: Submodule.LinearDisjoint.rank_inf_le_one_of_commute_of_flat
File: Mathlib/LinearAlgebra/LinearDisjoint.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
⊢ Module.rank R ↥(M ⊓ N) ≤ 1
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
⊢ Module.rank R ↥(M ⊓ N) ≤ 1
tactic: nontriviality R
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
⊢ Module.rank R ↥(M ⊓ N) ≤ 1
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
⊢ s.card ≤ 1
tactic: refine rank_le fun s h ↦ ?_
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
⊢ s.card ≤ 1
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : ¬s.card ≤ 1
⊢ False
tactic: by_contra hs
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : ¬s.card ≤ 1
⊢ False
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
⊢ False
tactic: rw [not_le, ← Fintype.card_coe, Fintype.one_lt_card_iff_nontrivial] at hs
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
⊢ False
state_after: case intro.intro
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
⊢ False
tactic: obtain ⟨a, b, hab⟩ := hs.exists_pair_ne
state_before: case intro.intro
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
⊢ False
state_after: case intro.intro
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
⊢ LinearIndependent R ![↑a, ↑b]
tactic: refine H.not_linearIndependent_pair_of_commute_of_flat hf a.1 b.1 (hc a.1 b.1) ?_
state_before: case intro.intro
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
this : LinearIndependent R ((fun i => ↑i) ∘ ![a, b])
⊢ LinearIndependent R ![↑a, ↑b]
state_after: case h.e'_4
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
this : LinearIndependent R ((fun i => ↑i) ∘ ![a, b])
⊢ ![↑a, ↑b] = (fun i => ↑i) ∘ ![a, b]
tactic: convert this
state_before: case h.e'_4
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
this : LinearIndependent R ((fun i => ↑i) ∘ ![a, b])
⊢ ![↑a, ↑b] = (fun i => ↑i) ∘ ![a, b]
state_after: case h.e'_4.h.a
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
this : LinearIndependent R ((fun i => ↑i) ∘ ![a, b])
i : Fin (Nat.succ 0).succ
⊢ ↑(![↑a, ↑b] i) = ↑(((fun i => ↑i) ∘ ![a, b]) i)
tactic: ext i
state_before: case h.e'_4.h.a
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
inst✝ : Algebra R S
M N : Submodule R S
H : M.LinearDisjoint N
hf : Module.Flat R ↥M ∨ Module.Flat R ↥N
hc : ∀ (m n : ↥(M ⊓ N)), Commute ↑m ↑n
a✝ : Nontrivial R
s : Finset ↥(M ⊓ N)
h : LinearIndependent R fun i => ↑i
hs : Nontrivial { x // x ∈ s }
a b : { x // x ∈ s }
hab : a ≠ b
this : LinearIndependent R ((fun i => ↑i) ∘ ![a, b])
i : Fin (Nat.succ 0).succ
⊢ ↑(![↑a, ↑b] i) = ↑(((fun i => ↑i) ∘ ![a, b]) i)
state_after: no goals
tactic: fin_cases i <;> simp