Theorem: Submodule.pow_induction_on_right'
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: induction' n with n n_ih generalizing x
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n : ℕ
x : A
hx : x ∈ M ^ n
⊢ C n x hx

tactic: revert hx
state_before: case succ
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝¹ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n✝ : ℕ
x✝ : A
hx✝ : x✝ ∈ M ^ n✝
n : ℕ
n_ih : ∀ {x : A} (hx : x ∈ M ^ n), C n x hx
x : A
hx : x ∈ M ^ Nat.succ n
⊢ C (Nat.succ n) x hx

tactic: suffices h_lean4_1926 : ∀ (hx' : x ∈ M ^ n * M), C (Nat.succ n) x (by rwa [pow_succ']) from
  fun hx => h_lean4_1926 (by rwa [← pow_succ'])
state_before: case succ
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝¹ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n✝ : ℕ
x✝ : A
hx : x✝ ∈ M ^ n✝
n : ℕ
n_ih : ∀ {x : A} (hx : x ∈ M ^ n), C n x hx
x : A
⊢ ∀ (hx : x ∈ M ^ Nat.succ n), C (Nat.succ n) x hx

tactic: intro hx
state_before: case succ
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝¹ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n✝ : ℕ
x✝ : A
hx : x✝ ∈ M ^ n✝
n : ℕ
n_ih : ∀ {x : A} (hx : x ∈ M ^ n), C n x hx
x : A
⊢ ∀ (hx' : x ∈ M ^ n * M), C (Nat.succ n) x (_ : x ∈ M ^ Nat.succ n)

tactic: exact
  Submodule.mul_induction_on' (fun m hm x ih => hmul _ _ hm (n_ih _) _ ih)
    (fun x hx y hy Cx Cy => hadd _ _ _ _ _ Cx Cy) hx
state_before: case succ
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝¹ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n✝ : ℕ
x✝ : A
hx✝ : x✝ ∈ M ^ n✝
n : ℕ
n_ih : ∀ {x : A} (hx : x ∈ M ^ n), C n x hx
x : A
hx : x ∈ M ^ n * M
⊢ C (Nat.succ n) x (_ : x ∈ M ^ Nat.succ n)

tactic: rw [pow_zero] at hx
state_before: case zero
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n : ℕ
x✝ : A
hx✝ : x✝ ∈ M ^ n
x : A
hx : x ∈ M ^ Nat.zero
⊢ C Nat.zero x hx

tactic: obtain ⟨r, rfl⟩ := hx
state_before: case zero
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n : ℕ
x✝ : A
hx✝¹ : x✝ ∈ M ^ n
x : A
hx✝ : x ∈ M ^ Nat.zero
hx : x ∈ 1
⊢ C Nat.zero x hx✝

tactic: exact hr r
state_before: case zero.intro
ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n : ℕ
x : A
hx✝ : x ∈ M ^ n
r : R
hx : ↑(Algebra.linearMap R A) r ∈ M ^ Nat.zero
⊢ C Nat.zero (↑(Algebra.linearMap R A) r) hx

tactic: rwa [pow_succ']
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝¹ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n✝ : ℕ
x✝ : A
hx : x✝ ∈ M ^ n✝
n : ℕ
n_ih : ∀ {x : A} (hx : x ∈ M ^ n), C n x hx
x : A
hx' : x ∈ M ^ n * M
⊢ x ∈ M ^ Nat.succ n

tactic: rwa [← pow_succ']
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝¹ : A
C : (n : ℕ) → (x : A) → x ∈ M ^ n → Prop
hr : ∀ (r : R), C 0 (↑(algebraMap R A) r) (_ : ↑(algebraMap R A) r ∈ 1)
hadd : ∀ (x y : A) (i : ℕ) (hx : x ∈ M ^ i) (hy : y ∈ M ^ i), C i x hx → C i y hy → C i (x + y) (_ : x + y ∈ M ^ i)
hmul :
  ∀ (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → ∀ (m : A) (hm : m ∈ M), C (Nat.succ i) (x * m) (_ : x * m ∈ M ^ (i + 1))
n✝ : ℕ
x✝ : A
hx✝ : x✝ ∈ M ^ n✝
n : ℕ
n_ih : ∀ {x : A} (hx : x ∈ M ^ n), C n x hx
x : A
h_lean4_1926 : ∀ (hx' : x ∈ M ^ n * M), C (Nat.succ n) x (_ : x ∈ M ^ Nat.succ n)
hx : x ∈ M ^ Nat.succ n
⊢ x ∈ M ^ n * M