Theorem: Fin.repeat_succ
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: generalize_proofs h
state_before: m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
⊢ repeat m.succ a = append a (repeat m a) ∘ cast ⋯
state_after: m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
⊢ repeat m.succ a = append a (repeat m a) ∘ cast h

tactic: apply funext
state_before: m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
⊢ repeat m.succ a = append a (repeat m a) ∘ cast h
state_after: case h
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
⊢ ∀ (x : Fin (m.succ * n)), repeat m.succ a x = (append a (repeat m a) ∘ cast h) x

tactic: rw [(Fin.rightInverse_cast h.symm).surjective.forall]
state_before: case h
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
⊢ ∀ (x : Fin (m.succ * n)), repeat m.succ a x = (append a (repeat m a) ∘ cast h) x
state_after: case h
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
⊢ ∀ (x : Fin (n + m * n)), repeat m.succ a (cast ⋯ x) = (append a (repeat m a) ∘ cast h) (cast ⋯ x)

tactic: refine Fin.addCases (fun l => ?_) fun r => ?_
state_before: case h
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
⊢ ∀ (x : Fin (n + m * n)), repeat m.succ a (cast ⋯ x) = (append a (repeat m a) ∘ cast h) (cast ⋯ x)
state_after: case h.refine_1
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
l : Fin n
⊢ repeat m.succ a (cast ⋯ (castAdd (m * n) l)) = (append a (repeat m a) ∘ cast h) (cast ⋯ (castAdd (m * n) l))

case h.refine_2
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
r : Fin (m * n)
⊢ repeat m.succ a (cast ⋯ (natAdd n r)) = (append a (repeat m a) ∘ cast h) (cast ⋯ (natAdd n r))

tactic: simp [modNat, Nat.mod_eq_of_lt l.is_lt]
state_before: case h.refine_1
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
l : Fin n
⊢ repeat m.succ a (cast ⋯ (castAdd (m * n) l)) = (append a (repeat m a) ∘ cast h) (cast ⋯ (castAdd (m * n) l))
state_after: no goals

tactic: simp [modNat]
state_before: case h.refine_2
m✝ n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
m : ℕ
h : m.succ * n = n + m * n
r : Fin (m * n)
⊢ repeat m.succ a (cast ⋯ (natAdd n r)) = (append a (repeat m a) ∘ cast h) (cast ⋯ (natAdd n r))
state_after: no goals