Theorem: GradedRing.projZeroRingHom_apply
File: Mathlib/RingTheory/GradedAlgebra/Basic.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ (↑{ toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯, map_mul' := ⋯ }).toFun 0 = 0
state_after: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ↑(((decompose 𝒜) 0) 0) = 0
tactic: simp only
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ↑(((decompose 𝒜) 0) 0) = 0
state_after: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ↑(0 0) = 0
tactic: rw [decompose_zero]
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ↑(0 0) = 0
state_after: no goals
tactic: rfl
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
x✝¹ x✝ : A
⊢ (↑{ toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯, map_mul' := ⋯ }).toFun (x✝¹ + x✝) =
    (↑{ toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯, map_mul' := ⋯ }).toFun x✝¹ +
      (↑{ toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯, map_mul' := ⋯ }).toFun x✝
state_after: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
x✝¹ x✝ : A
⊢ ↑(((decompose 𝒜) (x✝¹ + x✝)) 0) = ↑(((decompose 𝒜) x✝¹) 0) + ↑(((decompose 𝒜) x✝) 0)
tactic: simp only
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
x✝¹ x✝ : A
⊢ ↑(((decompose 𝒜) (x✝¹ + x✝)) 0) = ↑(((decompose 𝒜) x✝¹) 0) + ↑(((decompose 𝒜) x✝) 0)
state_after: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
x✝¹ x✝ : A
⊢ ↑(((decompose 𝒜) x✝¹ + (decompose 𝒜) x✝) 0) = ↑(((decompose 𝒜) x✝¹) 0) + ↑(((decompose 𝒜) x✝) 0)
tactic: rw [decompose_add]
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
x✝¹ x✝ : A
⊢ ↑(((decompose 𝒜) x✝¹ + (decompose 𝒜) x✝) 0) = ↑(((decompose 𝒜) x✝¹) 0) + ↑(((decompose 𝒜) x✝) 0)
state_after: no goals
tactic: rfl
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ∀ (x y : A),
    { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun (x * y) =
      { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun x *
        { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun y
state_after: case refine_1
ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
x : A
⊢ { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun (0 * x) =
    { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun 0 *
      { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun x

case refine_2
ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ∀ {i : ι} (m : ↥(𝒜 i)) (y : A),
    { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun (↑m * y) =
      { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun ↑m *
        { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun y

case refine_3
ι : Type u_1
R : Type u_2
A : Type u_3
σ : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : CanonicallyOrderedAddCommMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
⊢ ∀ (m m' : A),
    (∀ (y : A),
        { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun (m * y) =
          { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun m *
            { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun y) →
      (∀ (y : A),
          { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun (m' * y) =
            { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun m' *
              { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun y) →
        ∀ (y : A),
          { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun ((m + m') * y) =
            { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun (m + m') *
              { toFun := fun a => ↑(((decompose 𝒜) a) 0), map_one' := ⋯ }.toFun y
tactic: refine DirectSum.Decomposition.inductionOn 𝒜 (fun x => ?_) ?_ ?_