Theorem: Submodule.pow_induction_on_left'
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 :
  ∀ (m : A) (hm : m ∈ M) (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → C (Nat.succ i) (m * x) (_ : m * x ∈ M * npowRec i M)
n : ℕ
x : A
hx : x ∈ M ^ n
⊢ C n x hx

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 :
  ∀ (m : A) (hm : m ∈ M) (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → C (Nat.succ i) (m * x) (_ : m * x ∈ M * npowRec i M)
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: 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 :
  ∀ (m : A) (hm : m ∈ M) (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → C (Nat.succ i) (m * x) (_ : m * x ∈ M * npowRec i M)
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 :
  ∀ (m : A) (hm : m ∈ M) (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → C (Nat.succ i) (m * x) (_ : m * x ∈ M * npowRec i M)
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 :
  ∀ (m : A) (hm : m ∈ M) (i : ℕ) (x : A) (hx : x ∈ M ^ i),
    C i x hx → C (Nat.succ i) (m * x) (_ : m * x ∈ M * npowRec i M)
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