Theorem: CliffordAlgebra.evenOdd_mul_le
File: Mathlib/LinearAlgebra/CliffordAlgebra/Grading.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ evenOdd Q i * evenOdd Q j ≤ evenOdd Q (i + j)
state_after: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ Submodule.span R ((⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1)) * ⋃ i, ↑(LinearMap.range (ι Q) ^ ↑i)) ≤
    Submodule.span R (⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1))
tactic: simp_rw [evenOdd, Submodule.iSup_eq_span, Submodule.span_mul_span]
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ Submodule.span R ((⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1)) * ⋃ i, ↑(LinearMap.range (ι Q) ^ ↑i)) ≤
    Submodule.span R (⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1))
state_after: case h
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ (⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1)) * ⋃ i, ↑(LinearMap.range (ι Q) ^ ↑i) ⊆ ⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1)
tactic: apply Submodule.span_mono
state_before: case h
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ (⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1)) * ⋃ i, ↑(LinearMap.range (ι Q) ^ ↑i) ⊆ ⋃ i_1, ↑(LinearMap.range (ι Q) ^ ↑i_1)
state_after: case h
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ ∀ (i_1 : { n // ↑n = i }) (i_2 : { n // ↑n = j }),
    ∀ x ∈ ↑(LinearMap.range (ι Q) ^ ↑i_1),
      ∀ y ∈ ↑(LinearMap.range (ι Q) ^ ↑i_2), x * y ∈ ⋃ i_3, ↑(LinearMap.range (ι Q) ^ ↑i_3)
tactic: simp_rw [Set.iUnion_mul, Set.mul_iUnion, Set.iUnion_subset_iff, Set.mul_subset_iff]
state_before: case h
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
i j : ZMod 2
⊢ ∀ (i_1 : { n // ↑n = i }) (i_2 : { n // ↑n = j }),
    ∀ x ∈ ↑(LinearMap.range (ι Q) ^ ↑i_1),
      ∀ y ∈ ↑(LinearMap.range (ι Q) ^ ↑i_2), x * y ∈ ⋃ i_3, ↑(LinearMap.range (ι Q) ^ ↑i_3)
state_after: case h.mk.mk
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
xi yi : ℕ
x : CliffordAlgebra Q
hx : x ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi, ⋯⟩)
y : CliffordAlgebra Q
hy : y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨yi, ⋯⟩)
⊢ x * y ∈ ⋃ i, ↑(LinearMap.range (ι Q) ^ ↑i)
tactic: rintro ⟨xi, rfl⟩ ⟨yi, rfl⟩ x hx y hy
state_before: case h.mk.mk
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
xi yi : ℕ
x : CliffordAlgebra Q
hx : x ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi, ⋯⟩)
y : CliffordAlgebra Q
hy : y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨yi, ⋯⟩)
⊢ x * y ∈ ⋃ i, ↑(LinearMap.range (ι Q) ^ ↑i)
state_after: case h.mk.mk
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
xi yi : ℕ
x : CliffordAlgebra Q
hx : x ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi, ⋯⟩)
y : CliffordAlgebra Q
hy : y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨yi, ⋯⟩)
⊢ x * y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi + yi, ⋯⟩)
tactic: refine Set.mem_iUnion.mpr ⟨⟨xi + yi, Nat.cast_add _ _⟩, ?_⟩
state_before: case h.mk.mk
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
xi yi : ℕ
x : CliffordAlgebra Q
hx : x ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi, ⋯⟩)
y : CliffordAlgebra Q
hy : y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨yi, ⋯⟩)
⊢ x * y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi + yi, ⋯⟩)
state_after: case h.mk.mk
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
xi yi : ℕ
x : CliffordAlgebra Q
hx : x ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi, ⋯⟩)
y : CliffordAlgebra Q
hy : y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨yi, ⋯⟩)
⊢ x * y ∈ ↑(LinearMap.range (ι Q) ^ xi * LinearMap.range (ι Q) ^ yi)
tactic: simp only [Subtype.coe_mk, Nat.cast_add, pow_add]
state_before: case h.mk.mk
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
xi yi : ℕ
x : CliffordAlgebra Q
hx : x ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨xi, ⋯⟩)
y : CliffordAlgebra Q
hy : y ∈ ↑(LinearMap.range (ι Q) ^ ↑⟨yi, ⋯⟩)
⊢ x * y ∈ ↑(LinearMap.range (ι Q) ^ xi * LinearMap.range (ι Q) ^ yi)
state_after: no goals
tactic: exact Submodule.mul_mem_mul hx hy