-- File: optlib/Optlib/Algorithm/GD/GradientDescent.lean
Theorem statement:
theorem extracted_formal_statement_11.{u_1} {E : Type u_1} {xm : E} {f : E → ℝ} {g : ℕ → E}
  (mono : ∀ (k : ℕ), f (g (k + 1)) ≤ f (g k)) (j : ℕ)
  (a : f (g (j + 1)) - f xm ≤ (∑ k ∈ Finset.range (j + 1), (f (g (k + 1)) - f xm)) / (↑j + 1)) :
  (∑ x ∈ Finset.range (2 + j), f (g (x + 1))) / (↑j + 1 + 1) =
    (∑ x ∈ Finset.range (2 + j), f (g (x + 1))) / (↑j + 2) := sorry

Tactic state before:
E : Type u_1
xm : E
f : E → ℝ
g : ℕ → E
mono : ∀ (k : ℕ), f (g (k + 1)) ≤ f (g k)
j : ℕ
a✝ : f (g (j + 1)) - f xm ≤ (∑ k ∈ Finset.range (j + 1), (f (g (k + 1)) - f xm)) / (↑j + 1)
⊢ (∑ x ∈ Finset.range (2 + j), f (g (x + 1))) / (↑j + 1 + 1) = (∑ x ∈ Finset.range (2 + j), f (g (x + 1))) / (↑j + 2)

Tactic: rw [add_assoc, one_add_one_eq_two]

Tactic state after:

Premises used:
add_assoc : ∀ {G : Type u_1} [inst : AddSemigroup G] (a b c : G), a + b + c = a + (b + c)
one_add_one_eq_two : ∀ {R : Type u_1} [inst : AddMonoidWithOne R], 1 + 1 = 2