Theorem: ExteriorAlgebra.ιMulti_span_fixedDegree
File: Mathlib/LinearAlgebra/ExteriorAlgebra/Basic.lean

Proof steps:
state_before: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
⊢ Submodule.span R (Set.range ⇑(ιMulti R n)) = ⋀[R]^n M
state_after: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
⊢ ⋀[R]^n M ≤ Submodule.span R (Set.range ⇑(ιMulti R n))
tactic: refine le_antisymm (Submodule.span_le.2 (ιMulti_range R n)) ?_
state_before: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
⊢ ⋀[R]^n M ≤ Submodule.span R (Set.range ⇑(ιMulti R n))
state_after: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
⊢ ↑(LinearMap.range (ι R)) ^ n ⊆ ↑(Submodule.span R (Set.range ⇑(ιMulti R n)))
tactic: rw [exteriorPower, Submodule.pow_eq_span_pow_set, Submodule.span_le]
state_before: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
⊢ ↑(LinearMap.range (ι R)) ^ n ⊆ ↑(Submodule.span R (Set.range ⇑(ιMulti R n)))
state_after: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
u : ExteriorAlgebra R M
hu : u ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ u ∈ Set.range ⇑(ιMulti R n)
tactic: refine fun u hu ↦ Submodule.subset_span ?_
state_before: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
u : ExteriorAlgebra R M
hu : u ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ u ∈ Set.range ⇑(ιMulti R n)
state_after: case intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ (List.ofFn fun i => ↑(f i)).prod ∈ Set.range ⇑(ιMulti R n)
tactic: obtain ⟨f, rfl⟩ := Set.mem_pow.mp hu
state_before: case intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ (List.ofFn fun i => ↑(f i)).prod ∈ Set.range ⇑(ιMulti R n)
state_after: case intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ ((ιMulti R n) fun i => ιInv ↑(f i)) = (List.ofFn fun i => ↑(f i)).prod
tactic: refine ⟨fun i => ιInv (f i).1, ?_⟩
state_before: case intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ ((ιMulti R n) fun i => ιInv ↑(f i)) = (List.ofFn fun i => ↑(f i)).prod
state_after: case intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ (List.ofFn fun i => (ι R) (ιInv ↑(f i))).prod = (List.ofFn fun i => ↑(f i)).prod
tactic: rw [ιMulti_apply]
state_before: case intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
⊢ (List.ofFn fun i => (ι R) (ιInv ↑(f i))).prod = (List.ofFn fun i => ↑(f i)).prod
state_after: case intro.e_a.e_f.h
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
i : Fin n
⊢ (ι R) (ιInv ↑(f i)) = ↑(f i)
tactic: congr with i
state_before: case intro.e_a.e_f.h
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
i : Fin n
⊢ (ι R) (ιInv ↑(f i)) = ↑(f i)
state_after: case intro.e_a.e_f.h.intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
i : Fin n
v : M
hv : (ι R) v = ↑(f i)
⊢ (ι R) (ιInv ↑(f i)) = ↑(f i)
tactic: obtain ⟨v, hv⟩ := (f i).prop
state_before: case intro.e_a.e_f.h.intro
R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
n : ℕ
f : Fin n → ↑↑(LinearMap.range (ι R))
hu : (List.ofFn fun i => ↑(f i)).prod ∈ ↑(LinearMap.range (ι R)) ^ n
i : Fin n
v : M
hv : (ι R) v = ↑(f i)
⊢ (ι R) (ιInv ↑(f i)) = ↑(f i)
state_after: no goals
tactic: rw [← hv, ι_leftInverse]