Theorem: CompositionSeries.ext_fun
File: Mathlib/Order/JordanHolder.lean

tactic: cases s₁
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₁ s₂ : CompositionSeries X
hl : s₁.length = s₂.length
h : ∀ (i : Fin (s₁.length + 1)), series s₁ i = series s₂ (↑(Fin.cast (_ : Nat.succ s₁.length = Nat.succ s₂.length)) i)
⊢ s₁ = s₂

tactic: cases s₂
state_before: case mk
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₂ : CompositionSeries X
length✝ : ℕ
series✝ : Fin (length✝ + 1) → X
step'✝ : ∀ (i : Fin length✝), IsMaximal (series✝ (↑Fin.castSucc i)) (series✝ (Fin.succ i))
hl : { length := length✝, series := series✝, step' := step'✝ }.length = s₂.length
h :
  ∀ (i : Fin ({ length := length✝, series := series✝, step' := step'✝ }.length + 1)),
    series { length := length✝, series := series✝, step' := step'✝ } i =
      series s₂
        (↑(Fin.cast
              (_ : Nat.succ { length := length✝, series := series✝, step' := step'✝ }.length = Nat.succ s₂.length))
          i)
⊢ { length := length✝, series := series✝, step' := step'✝ } = s₂

tactic: dsimp at hl h
state_before: case mk.mk
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
length✝¹ : ℕ
series✝¹ : Fin (length✝¹ + 1) → X
step'✝¹ : ∀ (i : Fin length✝¹), IsMaximal (series✝¹ (↑Fin.castSucc i)) (series✝¹ (Fin.succ i))
length✝ : ℕ
series✝ : Fin (length✝ + 1) → X
step'✝ : ∀ (i : Fin length✝), IsMaximal (series✝ (↑Fin.castSucc i)) (series✝ (Fin.succ i))
hl :
  { length := length✝¹, series := series✝¹, step' := step'✝¹ }.length =
    { length := length✝, series := series✝, step' := step'✝ }.length
h :
  ∀ (i : Fin ({ length := length✝¹, series := series✝¹, step' := step'✝¹ }.length + 1)),
    series { length := length✝¹, series := series✝¹, step' := step'✝¹ } i =
      series { length := length✝, series := series✝, step' := step'✝ }
        (↑(Fin.cast
              (_ :
                Nat.succ { length := length✝¹, series := series✝¹, step' := step'✝¹ }.length =
                  Nat.succ { length := length✝, series := series✝, step' := step'✝ }.length))
          i)
⊢ { length := length✝¹, series := series✝¹, step' := step'✝¹ } =
    { length := length✝, series := series✝, step' := step'✝ }

tactic: subst hl
state_before: case mk.mk
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
length✝¹ : ℕ
series✝¹ : Fin (length✝¹ + 1) → X
step'✝¹ : ∀ (i : Fin length✝¹), IsMaximal (series✝¹ (↑Fin.castSucc i)) (series✝¹ (Fin.succ i))
length✝ : ℕ
series✝ : Fin (length✝ + 1) → X
step'✝ : ∀ (i : Fin length✝), IsMaximal (series✝ (↑Fin.castSucc i)) (series✝ (Fin.succ i))
hl : length✝¹ = length✝
h : ∀ (i : Fin (length✝¹ + 1)), series✝¹ i = series✝ (↑(Fin.cast (_ : Nat.succ length✝¹ = Nat.succ length✝)) i)
⊢ { length := length✝¹, series := series✝¹, step' := step'✝¹ } =
    { length := length✝, series := series✝, step' := step'✝ }

tactic: simpa [Function.funext_iff] using h
state_before: case mk.mk
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
length✝ : ℕ
series✝¹ : Fin (length✝ + 1) → X
step'✝¹ : ∀ (i : Fin length✝), IsMaximal (series✝¹ (↑Fin.castSucc i)) (series✝¹ (Fin.succ i))
series✝ : Fin (length✝ + 1) → X
step'✝ : ∀ (i : Fin length✝), IsMaximal (series✝ (↑Fin.castSucc i)) (series✝ (Fin.succ i))
h : ∀ (i : Fin (length✝ + 1)), series✝¹ i = series✝ (↑(Fin.cast (_ : Nat.succ length✝ = Nat.succ length✝)) i)
⊢ { length := length✝, series := series✝¹, step' := step'✝¹ } =
    { length := length✝, series := series✝, step' := step'✝ }