ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j : ι
⊢ ∑ x_1 in Dfinsupp.support (↑(decompose 𝒜) r), ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) x_1) * x) ∈ I
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j : ι
⊢ ↑(GradedRing.proj 𝒜 j) (r * x) ∈ I
rw [← DirectSum.sum_support_decompose 𝒜 r, Finset.sum_mul, map_sum]
case a
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j : ι
⊢ ∀ (c : ι), c ∈ Dfinsupp.support (↑(decompose 𝒜) r) → ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) c) * x) ∈ I
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j : ι
⊢ ∑ x_1 in Dfinsupp.support (↑(decompose 𝒜) r), ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) x_1) * x) ∈ I
apply Ideal.sum_mem
case a
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
⊢ ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) k) * x) ∈ I
case a
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j : ι
⊢ ∀ (c : ι), c ∈ Dfinsupp.support (↑(decompose 𝒜) r) → ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) c) * x) ∈ I
intro k _
case a.intro
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
⊢ ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) k) * x) ∈ I
case a
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₁ : Homogeneous 𝒜 x
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
⊢ ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) k) * x) ∈ I
obtain ⟨i, hi⟩ := hx₁
case a.intro
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
⊢ ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) k) * x) ∈ I
case a.intro
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
⊢ ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) k) * x) ∈ I
have mem₁ : (DirectSum.decompose 𝒜 r k : A) * x ∈ 𝒜 (k + i) :=
  GradedMul.mul_mem (SetLike.coe_mem _) hi
case a.intro
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
⊢ ↑(if k + i = j then { val := ↑(↑(↑(decompose 𝒜) r) k) * x, property := mem₁ } else 0) ∈ I
case a.intro
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
⊢ ↑(GradedRing.proj 𝒜 j) (↑(↑(↑(decompose 𝒜) r) k) * x) ∈ I
erw [GradedRing.proj_apply, DirectSum.decompose_of_mem 𝒜 mem₁, coe_of_apply]
case a.intro.inl
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
h✝ : k + i = j
⊢ ↑{ val := ↑(↑(↑(decompose 𝒜) r) k) * x, property := mem₁ } ∈ I

case a.intro.inr
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
h✝ : ¬k + i = j
⊢ ↑0 ∈ I
case a.intro
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
⊢ ↑(if k + i = j then { val := ↑(↑(↑(decompose 𝒜) r) k) * x, property := mem₁ } else 0) ∈ I
split_ifs
no goals
case a.intro.inl
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
h✝ : k + i = j
⊢ ↑{ val := ↑(↑(↑(decompose 𝒜) r) k) * x, property := mem₁ } ∈ I
exact I.mul_mem_left _ hx₂
no goals
case a.intro.inr
ι : Type u_2
σ : Type u_3
R : Type ?u.63833
A : Type u_1
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I✝ I : Ideal A
r x : A
hx₂ : x ∈ I
j k : ι
a✝ : k ∈ Dfinsupp.support (↑(decompose 𝒜) r)
i : ι
hi : x ∈ 𝒜 i
mem₁ : ↑(↑(↑(decompose 𝒜) r) k) * x ∈ 𝒜 (k + i)
h✝ : ¬k + i = j
⊢ ↑0 ∈ I
exact I.zero_mem