Theorem: monomial_mem_adjoin_monomial
File: Mathlib/RingTheory/ReesAlgebra.lean

tactic: induction' n with n hn generalizing r
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n : ℕ
r : R
hr : r ∈ I ^ n
⊢ ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: exact Subalgebra.algebraMap_mem _ _
state_before: case zero
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n
r : R
hr : r ∈ I ^ Nat.zero
⊢ ↑(monomial Nat.zero) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: rw [pow_succ] at hr
state_before: case succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I ^ Nat.succ n
⊢ ↑(monomial (Nat.succ n)) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: apply Submodule.smul_induction_on
  (p := fun r => (monomial (Nat.succ n)) r ∈ Algebra.adjoin R (Submodule.map (monomial 1) I)) hr
state_before: case succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I * I ^ n
⊢ ↑(monomial (Nat.succ n)) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: intro r hr s hs
state_before: case succ.Hb
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I * I ^ n
⊢ ∀ (r : R),
    r ∈ I →
      ∀ (n_1 : R), n_1 ∈ I ^ n → ↑(monomial (Nat.succ n)) (r • n_1) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: rw [Nat.succ_eq_one_add, smul_eq_mul, ← monomial_mul_monomial]
state_before: case succ.Hb
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝¹ : R
hr✝¹ : r✝¹ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r✝ : R
hr✝ : r✝ ∈ I * I ^ n
r : R
hr : r ∈ I
s : R
hs : s ∈ I ^ n
⊢ ↑(monomial (Nat.succ n)) (r • s) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: exact Subalgebra.mul_mem _ (Algebra.subset_adjoin (Set.mem_image_of_mem _ hr)) (hn hs)
state_before: case succ.Hb
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝¹ : R
hr✝¹ : r✝¹ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r✝ : R
hr✝ : r✝ ∈ I * I ^ n
r : R
hr : r ∈ I
s : R
hs : s ∈ I ^ n
⊢ ↑(monomial 1) r * ↑(monomial n) s ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: intro x y hx hy
state_before: case succ.H1
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I * I ^ n
⊢ ∀ (x y : R),
    ↑(monomial (Nat.succ n)) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) →
      ↑(monomial (Nat.succ n)) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) →
        ↑(monomial (Nat.succ n)) (x + y) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: rw [monomial_add]
state_before: case succ.H1
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I * I ^ n
x y : R
hx : ↑(monomial (Nat.succ n)) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
hy : ↑(monomial (Nat.succ n)) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
⊢ ↑(monomial (Nat.succ n)) (x + y) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: exact Subalgebra.add_mem _ hx hy
state_before: case succ.H1
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n✝ : ℕ
r✝ : R
hr✝ : r✝ ∈ I ^ n✝
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → ↑(monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I * I ^ n
x y : R
hx : ↑(monomial (Nat.succ n)) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
hy : ↑(monomial (Nat.succ n)) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
⊢ ↑(monomial (Nat.succ n)) x + ↑(monomial (Nat.succ n)) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)