Theorem: aleph0_le_rank_of_isEmpty_oreSet
File: Mathlib/LinearAlgebra/Dimension/Localization.lean

tactic: rw [← not_nonempty_iff, OreLocalization.nonempty_oreSet_iff_of_noZeroDivisors] at hS
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
hS : IsEmpty (OreLocalization.OreSet R⁰)
⊢ ℵ₀ ≤ Module.rank R R
state_after: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
hS : ¬∀ (r : R) (s : ↥R⁰), ∃ r' s', ↑s' * r = r' * ↑s
⊢ ℵ₀ ≤ Module.rank R R

tactic: push_neg at hS
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
hS : ¬∀ (r : R) (s : ↥R⁰), ∃ r' s', ↑s' * r = r' * ↑s
⊢ ℵ₀ ≤ Module.rank R R
state_after: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
hS : ∃ r s, ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
⊢ ℵ₀ ≤ Module.rank R R

tactic: obtain ⟨r, s, h⟩ := hS
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
hS : ∃ r s, ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
⊢ ℵ₀ ≤ Module.rank R R
state_after: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
⊢ ℵ₀ ≤ Module.rank R R

tactic: refine Cardinal.aleph0_le.mpr fun n ↦ ?_
state_before: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
⊢ ℵ₀ ≤ Module.rank R R
state_after: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
⊢ ↑n ≤ Module.rank R R

tactic: suffices LinearIndependent R (fun (i : Fin n) ↦ r * s ^ (i : ℕ)) by
  simpa using this.cardinal_lift_le_rank
state_before: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
⊢ ↑n ≤ Module.rank R R
state_after: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
⊢ LinearIndependent R fun i => r * ↑s ^ ↑i

tactic: suffices ∀ (g : ℕ → R) (x), (∑ i ∈ Finset.range n, g i • (r * s ^ (i + x))) = 0 →
    ∀ i < n, g i = 0 by
  refine Fintype.linearIndependent_iff.mpr fun g hg i ↦ ?_
  simpa only [dif_pos i.prop] using this (fun i ↦ if h : i < n then g ⟨i, h⟩ else 0) 0
    (by simp [← Fin.sum_univ_eq_sum_range, ← hg]) i i.prop
state_before: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
⊢ LinearIndependent R fun i => r * ↑s ^ ↑i
state_after: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
⊢ ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0

tactic: intro g x hg i hin
state_before: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
⊢ ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
state_after: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
g : ℕ → R
x : ℕ
hg : ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0
i : ℕ
hin : i < n
⊢ g i = 0

tactic: induction' n with n IH generalizing g x i
state_before: case intro.intro
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
g : ℕ → R
x : ℕ
hg : ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0
i : ℕ
hin : i < n
⊢ g i = 0
state_after: case intro.intro.zero
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
g : ℕ → R
x : ℕ
hg : ∑ i ∈ Finset.range 0, g i • (r * ↑s ^ (i + x)) = 0
i : ℕ
hin : i < 0
⊢ g i = 0

case intro.intro.succ
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ i ∈ Finset.range (n + 1), g i • (r * ↑s ^ (i + x)) = 0
i : ℕ
hin : i < n + 1
⊢ g i = 0

tactic: simpa using this.cardinal_lift_le_rank
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
this : LinearIndependent R fun i => r * ↑s ^ ↑i
⊢ ↑n ≤ Module.rank R R
state_after: no goals

tactic: refine Fintype.linearIndependent_iff.mpr fun g hg i ↦ ?_
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
this : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
⊢ LinearIndependent R fun i => r * ↑s ^ ↑i
state_after: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
this : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : Fin n → R
hg : ∑ i : Fin n, g i • (r * ↑s ^ ↑i) = 0
i : Fin n
⊢ g i = 0

tactic: simpa only [dif_pos i.prop] using this (fun i ↦ if h : i < n then g ⟨i, h⟩ else 0) 0
  (by simp [← Fin.sum_univ_eq_sum_range, ← hg]) i i.prop
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
this : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : Fin n → R
hg : ∑ i : Fin n, g i • (r * ↑s ^ ↑i) = 0
i : Fin n
⊢ g i = 0
state_after: no goals

tactic: simp [← Fin.sum_univ_eq_sum_range, ← hg]
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
this : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : Fin n → R
hg : ∑ i : Fin n, g i • (r * ↑s ^ ↑i) = 0
i : Fin n
⊢ ∑ i ∈ Finset.range n, (fun i => if h : i < n then g ⟨i, h⟩ else 0) i • (r * ↑s ^ (i + 0)) = 0
state_after: no goals

tactic: exact (hin.not_le (zero_le i)).elim
state_before: case intro.intro.zero
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
g : ℕ → R
x : ℕ
hg : ∑ i ∈ Finset.range 0, g i • (r * ↑s ^ (i + x)) = 0
i : ℕ
hin : i < 0
⊢ g i = 0
state_after: no goals

tactic: rw [Finset.sum_range_succ'] at hg
state_before: case intro.intro.succ
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ i ∈ Finset.range (n + 1), g i • (r * ↑s ^ (i + x)) = 0
i : ℕ
hin : i < n + 1
⊢ g i = 0
state_after: case intro.intro.succ
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ k ∈ Finset.range n, g (k + 1) • (r * ↑s ^ (k + 1 + x)) + g 0 • (r * ↑s ^ (0 + x)) = 0
i : ℕ
hin : i < n + 1
⊢ g i = 0

tactic: by_cases hg0 : g 0 = 0
state_before: case intro.intro.succ
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ k ∈ Finset.range n, g (k + 1) • (r * ↑s ^ (k + 1 + x)) + g 0 • (r * ↑s ^ (0 + x)) = 0
i : ℕ
hin : i < n + 1
⊢ g i = 0
state_after: case pos
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ k ∈ Finset.range n, g (k + 1) • (r * ↑s ^ (k + 1 + x)) + g 0 • (r * ↑s ^ (0 + x)) = 0
i : ℕ
hin : i < n + 1
hg0 : g 0 = 0
⊢ g i = 0

case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ k ∈ Finset.range n, g (k + 1) • (r * ↑s ^ (k + 1 + x)) + g 0 • (r * ↑s ^ (0 + x)) = 0
i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
⊢ g i = 0

tactic: simp only [MulOpposite.smul_eq_mul_unop, zero_add, ← add_comm _ x, pow_add _ _ x,
  ← mul_assoc, pow_succ, ← Finset.sum_mul, pow_zero, one_mul, smul_eq_mul] at hg
state_before: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ k ∈ Finset.range n, g (k + 1) • (r * ↑s ^ (k + 1 + x)) + g 0 • (r * ↑s ^ (0 + x)) = 0
i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
⊢ g i = 0
state_after: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x + g 0 * r * ↑s ^ x = 0
⊢ g i = 0

tactic: rw [← neg_eq_iff_add_eq_zero, ← neg_mul, ← neg_mul] at hg
state_before: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x + g 0 * r * ↑s ^ x = 0
⊢ g i = 0
state_after: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x = g 0 * r * ↑s ^ x
⊢ g i = 0

tactic: have := mul_right_cancel₀ (mem_nonZeroDivisors_iff_ne_zero.mp (s ^ x).prop) hg
state_before: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x = g 0 * r * ↑s ^ x
⊢ g i = 0
state_after: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x = g 0 * r * ↑s ^ x
this : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s = g 0 * r
⊢ g i = 0

tactic: exact (h _ ⟨(g 0), mem_nonZeroDivisors_iff_ne_zero.mpr (by simpa)⟩ this.symm).elim
state_before: case neg
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x = g 0 * r * ↑s ^ x
this : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s = g 0 * r
⊢ g i = 0
state_after: no goals

tactic: simp only [hg0, zero_smul, add_zero, add_assoc] at hg
state_before: case pos
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg : ∑ k ∈ Finset.range n, g (k + 1) • (r * ↑s ^ (k + 1 + x)) + g 0 • (r * ↑s ^ (0 + x)) = 0
i : ℕ
hin : i < n + 1
hg0 : g 0 = 0
⊢ g i = 0
state_after: case pos
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : g 0 = 0
hg : ∑ x_1 ∈ Finset.range n, g (x_1 + 1) • (r * ↑s ^ (x_1 + (1 + x))) = 0
⊢ g i = 0

tactic: cases i
state_before: case pos
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : g 0 = 0
hg : ∑ x_1 ∈ Finset.range n, g (x_1 + 1) • (r * ↑s ^ (x_1 + (1 + x))) = 0
⊢ g i = 0
state_after: case pos.zero
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg0 : g 0 = 0
hg : ∑ x_1 ∈ Finset.range n, g (x_1 + 1) • (r * ↑s ^ (x_1 + (1 + x))) = 0
hin : 0 < n + 1
⊢ g 0 = 0

case pos.succ
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg0 : g 0 = 0
hg : ∑ x_1 ∈ Finset.range n, g (x_1 + 1) • (r * ↑s ^ (x_1 + (1 + x))) = 0
n✝ : ℕ
hin : n✝ + 1 < n + 1
⊢ g (n✝ + 1) = 0

tactic: exacts [hg0, IH _ _ hg _ (Nat.succ_lt_succ_iff.mp hin)]
state_before: case pos.zero
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg0 : g 0 = 0
hg : ∑ x_1 ∈ Finset.range n, g (x_1 + 1) • (r * ↑s ^ (x_1 + (1 + x))) = 0
hin : 0 < n + 1
⊢ g 0 = 0

case pos.succ
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x : ℕ
hg0 : g 0 = 0
hg : ∑ x_1 ∈ Finset.range n, g (x_1 + 1) • (r * ↑s ^ (x_1 + (1 + x))) = 0
n✝ : ℕ
hin : n✝ + 1 < n + 1
⊢ g (n✝ + 1) = 0
state_after: no goals

tactic: simpa
state_before: R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
S : Submonoid R
r : R
s : ↥R⁰
h : ∀ (r' : R) (s' : ↥R⁰), ↑s' * r ≠ r' * ↑s
n : ℕ
IH : ∀ (g : ℕ → R) (x : ℕ), ∑ i ∈ Finset.range n, g i • (r * ↑s ^ (i + x)) = 0 → ∀ i < n, g i = 0
g : ℕ → R
x i : ℕ
hin : i < n + 1
hg0 : ¬g 0 = 0
hg : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s * ↑s ^ x = g 0 * r * ↑s ^ x
this : (-∑ i ∈ Finset.range n, g (i + 1) * r * ↑s ^ i) * ↑s = g 0 * r
⊢ g 0 ≠ 0
state_after: no goals