Theorem: CompositionSeries.Equivalent.snoc_snoc_swap
File: Mathlib/Order/JordanHolder.lean

tactic: simp [Fin.castSucc_lt_last]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
x✝ : Fin s.length
⊢ ↑Fin.castSucc (↑Fin.castSucc x✝) < ↑Fin.castSucc (Fin.last s.length)

tactic: simp [Fin.castSucc_lt_last]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
x✝ : Fin s.length
⊢ ↑Fin.castSucc (↑Fin.castSucc x✝) < Fin.last (s.length + 1)

tactic: intro i
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
⊢ ∀ (i : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length),
    Iso
      (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc i),
        series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ i))
      (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂) (↑Fin.castSucc (↑e i)),
        series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂) (Fin.succ (↑e i)))

tactic: dsimp only []
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
⊢ Iso
    (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc i),
      series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ i))
    (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂) (↑Fin.castSucc (↑e i)),
      series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂) (Fin.succ (↑e i)))

tactic: refine' Fin.lastCases _ (fun i => _) i
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
⊢ Iso
    (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc i),
      series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ i))
    (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (↑Fin.castSucc (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))) i)),
      series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (Fin.succ (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))) i)))

tactic: erw [Equiv.swap_apply_left, snoc_castSucc, snoc_last, Fin.succ_last, snoc_last,
  snoc_castSucc, snoc_castSucc, Fin.succ_castSucc, snoc_castSucc, Fin.succ_last, snoc_last]
state_before: case refine'_1
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
⊢ Iso
    (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc (Fin.last (snoc s x₁ hsat₁).length)),
      series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ (Fin.last (snoc s x₁ hsat₁).length)))
    (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (↑Fin.castSucc
          (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length)))
            (Fin.last (snoc s x₁ hsat₁).length))),
      series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (Fin.succ
          (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length)))
            (Fin.last (snoc s x₁ hsat₁).length))))

tactic: exact hr₂
state_before: case refine'_1
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
⊢ Iso (x₁, y₁) (series s (Fin.last s.length), x₂)

tactic: refine' Fin.lastCases _ (fun i => _) i
state_before: case refine'_2
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i✝ : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
i : Fin (snoc s x₁ hsat₁).length
⊢ Iso
    (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc (↑Fin.castSucc i)),
      series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ (↑Fin.castSucc i)))
    (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (↑Fin.castSucc (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))) (↑Fin.castSucc i))),
      series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (Fin.succ (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))) (↑Fin.castSucc i))))

tactic: erw [Equiv.swap_apply_right, snoc_castSucc, snoc_castSucc, snoc_castSucc,
  Fin.succ_castSucc, snoc_castSucc, Fin.succ_last, snoc_last, snoc_last, Fin.succ_last,
  snoc_last]
state_before: case refine'_2.refine'_1
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i✝ : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
i : Fin (snoc s x₁ hsat₁).length
⊢ Iso
    (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc (↑Fin.castSucc (Fin.last s.length))),
      series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ (↑Fin.castSucc (Fin.last s.length))))
    (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (↑Fin.castSucc
          (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length)))
            (↑Fin.castSucc (Fin.last s.length)))),
      series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (Fin.succ
          (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length)))
            (↑Fin.castSucc (Fin.last s.length)))))

tactic: exact hr₁
state_before: case refine'_2.refine'_1
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i✝ : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
i : Fin (snoc s x₁ hsat₁).length
⊢ Iso (series s (Fin.last s.length), x₁) (x₂, y₂)

tactic: erw [Equiv.swap_apply_of_ne_of_ne h2 h1, snoc_castSucc, snoc_castSucc, snoc_castSucc,
  snoc_castSucc, Fin.succ_castSucc, snoc_castSucc, Fin.succ_castSucc, snoc_castSucc,
  snoc_castSucc, snoc_castSucc]
state_before: case refine'_2.refine'_2
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i✝¹ : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
i✝ : Fin (snoc s x₁ hsat₁).length
i : Fin s.length
⊢ Iso
    (series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (↑Fin.castSucc (↑Fin.castSucc (↑Fin.castSucc i))),
      series (snoc (snoc s x₁ hsat₁) y₁ hsaty₁) (Fin.succ (↑Fin.castSucc (↑Fin.castSucc i))))
    (series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (↑Fin.castSucc
          (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length)))
            (↑Fin.castSucc (↑Fin.castSucc i)))),
      series (snoc (snoc s x₂ hsat₂) y₂ hsaty₂)
        (Fin.succ
          (↑(Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length)))
            (↑Fin.castSucc (↑Fin.castSucc i)))))

tactic: exact (s.step i).iso_refl
state_before: case refine'_2.refine'_2
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x₁ x₂ y₁ y₂ : X
hsat₁ : IsMaximal (top s) x₁
hsat₂ : IsMaximal (top s) x₂
hsaty₁ : IsMaximal (top (snoc s x₁ hsat₁)) y₁
hsaty₂ : IsMaximal (top (snoc s x₂ hsat₂)) y₂
hr₁ : Iso (top s, x₁) (x₂, y₂)
hr₂ : Iso (x₁, y₁) (top s, x₂)
e : Fin (s.length + 1 + 1) ≃ Fin (s.length + 1 + 1) :=
  Equiv.swap (Fin.last (s.length + 1)) (↑Fin.castSucc (Fin.last s.length))
h1 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ ↑Fin.castSucc (Fin.last s.length)
h2 : ∀ {i : Fin s.length}, ↑Fin.castSucc (↑Fin.castSucc i) ≠ Fin.last (s.length + 1)
i✝¹ : Fin (snoc (snoc s x₁ hsat₁) y₁ hsaty₁).length
i✝ : Fin (snoc s x₁ hsat₁).length
i : Fin s.length
⊢ Iso (series s (↑Fin.castSucc i), series s (Fin.succ i)) (series s (↑Fin.castSucc i), series s (Fin.succ i))