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)
state_after: case zero
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
r : R
hr : r ∈ I ^ 0
⊢ (monomial 0) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

case succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
n : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → (monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I ^ (n + 1)
⊢ (monomial (n + 1)) 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
r : R
hr : r ∈ I ^ 0
⊢ (monomial 0) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: no goals

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 : ℕ
hn : ∀ {r : R}, r ∈ I ^ n → (monomial n) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
r : R
hr : r ∈ I ^ (n + 1)
⊢ (monomial (n + 1)) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: case succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 (n + 1)) 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 : ℕ
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 (n + 1)) r ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: case succ.smul
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 ∈ I, ∀ n_1 ∈ I ^ n, (monomial n.succ) (r • n_1) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

case succ.add
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) →
      (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) →
        (monomial n.succ) (x + y) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: intro r hr s hs
state_before: case succ.smul
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 ∈ I, ∀ n_1 ∈ I ^ n, (monomial n.succ) (r • n_1) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: case succ.smul
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) (r • s) ∈ 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.smul
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) (r • s) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: case succ.smul
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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: exact Subalgebra.mul_mem _ (Algebra.subset_adjoin (Set.mem_image_of_mem _ hr)) (hn hs)
state_before: case succ.smul
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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)
state_after: no goals

tactic: intro x y hx hy
state_before: case succ.add
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) →
      (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) →
        (monomial n.succ) (x + y) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: case succ.add
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
hy : (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
⊢ (monomial n.succ) (x + y) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: rw [monomial_add]
state_before: case succ.add
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
hy : (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
⊢ (monomial n.succ) (x + y) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: case succ.add
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
hy : (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
⊢ (monomial n.succ) x + (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: exact Subalgebra.add_mem _ hx hy
state_before: case succ.add
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ I : Ideal R
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 n.succ) x ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
hy : (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
⊢ (monomial n.succ) x + (monomial n.succ) y ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
state_after: no goals