Theorem: hasSliceRankLE_iff_exists_sum (LeanCamCombi/SliceRank.lean)

State before:
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m n : ℕ
f f₁ f₂ : ((i : ι) → α i) → R
⊢ HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
Tactic:
induction' n with n ih generalizing f
State after:
case zero
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ f : ((i : ι) → α i) → R
⊢ HasSliceRankLE 0 f ↔ ∃ i g h, f = ∑ k : Fin 0, fun x => g k (x (i k)) * h k fun j x_1 => x j

case succ
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ HasSliceRankLE (n + 1) f ↔ ∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j

State before:
case succ
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ HasSliceRankLE (n + 1) f ↔ ∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j
Tactic:
simp_rw [hasSliceRankLE_succ, ih]
State after:
case succ
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ (∃ f' i g h,
      (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
        f = f' + fun x => g (x i) * h fun j x_1 => x j) ↔
    ∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j

State before:
case succ
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ (∃ f' i g h,
      (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
        f = f' + fun x => g (x i) * h fun j x_1 => x j) ↔
    ∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j
Tactic:
constructor
State after:
case succ.mp
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ (∃ f' i g h,
      (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
        f = f' + fun x => g (x i) * h fun j x_1 => x j) →
    ∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j

case succ.mpr
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ (∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) →
    ∃ f' i g h,
      (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
        f = f' + fun x => g (x i) * h fun j x_1 => x j

State before:
case zero
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ f : ((i : ι) → α i) → R
⊢ HasSliceRankLE 0 f ↔ ∃ i g h, f = ∑ k : Fin 0, fun x => g k (x (i k)) * h k fun j x_1 => x j
Tactic:
simp
State after:
no goals

State before:
case succ.mp
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ (∃ f' i g h,
      (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
        f = f' + fun x => g (x i) * h fun j x_1 => x j) →
    ∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j
Tactic:
rintro ⟨f', iₙ, gₙ, hₙ, ⟨i, g, h, rfl⟩, rfl⟩
State after:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
⊢ ∃ i_1 g_1 h_1,
    ((∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) + fun x => gₙ (x iₙ) * hₙ fun j x_1 => x j) =
      ∑ k : Fin (n + 1), fun x => g_1 k (x (i_1 k)) * h_1 k fun j x_1 => x j

State before:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
⊢ ∃ i_1 g_1 h_1,
    ((∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) + fun x => gₙ (x iₙ) * hₙ fun j x_1 => x j) =
      ∑ k : Fin (n + 1), fun x => g_1 k (x (i_1 k)) * h_1 k fun j x_1 => x j
Tactic:
refine ⟨Fin.cons iₙ i, Fin.cons gₙ g, Fin.cons hₙ h, ?_⟩
State after:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
⊢ ((∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) + fun x => gₙ (x iₙ) * hₙ fun j x_1 => x j) =
    ∑ k : Fin (n + 1), fun x => Fin.cons gₙ g k (x (Fin.cons iₙ i k)) * Fin.cons hₙ h k fun j x_1 => x j

State before:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
⊢ ((∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) + fun x => gₙ (x iₙ) * hₙ fun j x_1 => x j) =
    ∑ k : Fin (n + 1), fun x => Fin.cons gₙ g k (x (Fin.cons iₙ i k)) * Fin.cons hₙ h k fun j x_1 => x j
Tactic:
ext x
State after:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ ((∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) + fun x => gₙ (x iₙ) * hₙ fun j x_1 => x j) x =
    (∑ k : Fin (n + 1), fun x => Fin.cons gₙ g k (x (Fin.cons iₙ i k)) * Fin.cons hₙ h k fun j x_1 => x j) x

State before:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ ((∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) + fun x => gₙ (x iₙ) * hₙ fun j x_1 => x j) x =
    (∑ k : Fin (n + 1), fun x => Fin.cons gₙ g k (x (Fin.cons iₙ i k)) * Fin.cons hₙ h k fun j x_1 => x j) x
Tactic:
simp only [ne_eq, Pi.add_apply, Finset.sum_apply, add_comm (_ * _), Fin.sum_univ_succ,
  Fin.cons_zero, Fin.cons_succ]
State after:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ ((∑ c : Fin n, g c (x (i c)) * h c fun j x_1 => x j) + gₙ (x iₙ) * hₙ fun j x_1 => x j) =
    (∑ x_1 : Fin n, g x_1 (x (Fin.cons iₙ i x_1.succ)) * h x_1 fun j x_2 => x j) +
      gₙ (x (Fin.cons iₙ i 0)) * hₙ fun j x_1 => x j

State before:
case succ.mp.intro.intro.intro.intro.intro.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
iₙ : ι
gₙ : α iₙ → R
hₙ : ((j : ι) → j ≠ iₙ → α j) → R
i : Fin n → ι
g : (k : Fin n) → α (i k) → R
h : (k : Fin n) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ ((∑ c : Fin n, g c (x (i c)) * h c fun j x_1 => x j) + gₙ (x iₙ) * hₙ fun j x_1 => x j) =
    (∑ x_1 : Fin n, g x_1 (x (Fin.cons iₙ i x_1.succ)) * h x_1 fun j x_2 => x j) +
      gₙ (x (Fin.cons iₙ i 0)) * hₙ fun j x_1 => x j
Tactic:
congr
State after:
no goals

State before:
case succ.mpr
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
f : ((i : ι) → α i) → R
⊢ (∃ i g h, f = ∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) →
    ∃ f' i g h,
      (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
        f = f' + fun x => g (x i) * h fun j x_1 => x j
Tactic:
rintro ⟨i, g, h, rfl⟩
State after:
case succ.mpr.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
⊢ ∃ f' i_1 g_1 h_1,
    (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
      (∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) =
        f' + fun x => g_1 (x i_1) * h_1 fun j x_1 => x j

State before:
case succ.mpr.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
⊢ ∃ f' i_1 g_1 h_1,
    (∃ i g h, f' = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j) ∧
      (∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) =
        f' + fun x => g_1 (x i_1) * h_1 fun j x_1 => x j
Tactic:
refine ⟨_, i 0, g 0, h 0, ⟨Fin.tail i, Fin.tail g, Fin.tail h, rfl⟩, ?_⟩
State after:
case succ.mpr.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
⊢ (∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) =
    (∑ k : Fin n, fun x => Fin.tail g k (x (Fin.tail i k)) * Fin.tail h k fun j x_1 => x j) + fun x =>
      g 0 (x (i 0)) * h 0 fun j x_1 => x j

State before:
case succ.mpr.intro.intro.intro
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
⊢ (∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) =
    (∑ k : Fin n, fun x => Fin.tail g k (x (Fin.tail i k)) * Fin.tail h k fun j x_1 => x j) + fun x =>
      g 0 (x (i 0)) * h 0 fun j x_1 => x j
Tactic:
ext x
State after:
case succ.mpr.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ (∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) x =
    ((∑ k : Fin n, fun x => Fin.tail g k (x (Fin.tail i k)) * Fin.tail h k fun j x_1 => x j) + fun x =>
        g 0 (x (i 0)) * h 0 fun j x_1 => x j)
      x

State before:
case succ.mpr.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ (∑ k : Fin (n + 1), fun x => g k (x (i k)) * h k fun j x_1 => x j) x =
    ((∑ k : Fin n, fun x => Fin.tail g k (x (Fin.tail i k)) * Fin.tail h k fun j x_1 => x j) + fun x =>
        g 0 (x (i 0)) * h 0 fun j x_1 => x j)
      x
Tactic:
simp only [ne_eq, Pi.add_apply, Finset.sum_apply, add_comm (_ * _), Fin.sum_univ_succ,
  Fin.cons_zero, Fin.cons_succ]
State after:
case succ.mpr.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ ((∑ i_1 : Fin n, g i_1.succ (x (i i_1.succ)) * h i_1.succ fun j x_1 => x j) + g 0 (x (i 0)) * h 0 fun j x_1 => x j) =
    (∑ c : Fin n, Fin.tail g c (x (Fin.tail i c)) * Fin.tail h c fun j x_1 => x j) +
      g 0 (x (i 0)) * h 0 fun j x_1 => x j

State before:
case succ.mpr.intro.intro.intro.h
ι : Type u_1
R : Type u_2
inst✝¹ : DecidableEq ι
α : ι → Type u_3
inst✝ : Semiring R
m : ℕ
f₁ f₂ : ((i : ι) → α i) → R
n : ℕ
ih :
  ∀ {f : ((i : ι) → α i) → R},
    HasSliceRankLE n f ↔ ∃ i g h, f = ∑ k : Fin n, fun x => g k (x (i k)) * h k fun j x_1 => x j
i : Fin (n + 1) → ι
g : (k : Fin (n + 1)) → α (i k) → R
h : (k : Fin (n + 1)) → ((j : ι) → j ≠ i k → α j) → R
x : (i : ι) → α i
⊢ ((∑ i_1 : Fin n, g i_1.succ (x (i i_1.succ)) * h i_1.succ fun j x_1 => x j) + g 0 (x (i 0)) * h 0 fun j x_1 => x j) =
    (∑ c : Fin n, Fin.tail g c (x (Fin.tail i c)) * Fin.tail h c fun j x_1 => x j) +
      g 0 (x (i 0)) * h 0 fun j x_1 => x j
Tactic:
congr
State after:
no goals