Theorem: SimplexCategory.eq_σ_comp_of_not_injective
File: Mathlib/AlgebraicTopology/SimplexCategory.lean

tactic: simp only [Function.Injective, exists_prop, not_forall] at hθ
state_before: n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ¬Function.Injective ↑(Hom.toOrderHom θ)
⊢ ∃ i θ', θ = σ i ≫ θ'

tactic: rcases hθ₂ with ⟨x, y, ⟨h₁, h₂⟩⟩
state_before: n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
hθ₂ : ∃ x y, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y ∧ x < y
⊢ ∃ i θ', θ = σ i ≫ θ'

tactic: let z := x.castPred
state_before: case intro.intro.intro
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : x < y
⊢ ∃ i θ', θ = σ i ≫ θ'

tactic: use z
state_before: case intro.intro.intro
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : x < y
z : Fin (n + 1) := Fin.castPred x
⊢ ∃ i θ', θ = σ i ≫ θ'

tactic: rw [← show Fin.castSucc z = x from
  Fin.castSucc_castPred (lt_of_lt_of_le h₂ (Fin.le_last y))] at h₁ h₂
state_before: case intro.intro.intro
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : x < y
z : Fin (n + 1) := Fin.castPred x
⊢ ∃ θ', θ = σ z ≫ θ'

tactic: apply eq_σ_comp_of_not_injective'
state_before: case intro.intro.intro
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
z : Fin (n + 1) := Fin.castPred x
h₂ : ↑Fin.castSucc z < y
h₁ : ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) y
⊢ ∃ θ', θ = σ z ≫ θ'

tactic: rw [Fin.castSucc_lt_iff_succ_le] at h₂
state_before: case intro.intro.intro.hi
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
z : Fin (n + 1) := Fin.castPred x
h₂ : ↑Fin.castSucc z < y
h₁ : ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) y
⊢ ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) (Fin.succ z)

tactic: apply le_antisymm
state_before: case intro.intro.intro.hi
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
z : Fin (n + 1) := Fin.castPred x
h₂ : Fin.succ z ≤ y
h₁ : ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) y
⊢ ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) (Fin.succ z)

tactic: rcases hθ with ⟨x, y, ⟨h₁, h₂⟩⟩
state_before: n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
⊢ ∃ x y, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y ∧ x < y

tactic: by_cases h : x < y
state_before: case intro.intro.intro
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
⊢ ∃ x y, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y ∧ x < y

tactic: exact ⟨x, y, ⟨h₁, h⟩⟩
state_before: case pos
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
h : x < y
⊢ ∃ x y, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y ∧ x < y

tactic: refine' ⟨y, x, ⟨h₁.symm, _⟩⟩
state_before: case neg
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
h : ¬x < y
⊢ ∃ x y, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y ∧ x < y

tactic: cases' lt_or_eq_of_le (not_lt.mp h) with h' h'
state_before: case neg
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
h : ¬x < y
⊢ y < x

tactic: exact h'
state_before: case neg.inl
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
h : ¬x < y
h' : y < x
⊢ y < x

tactic: exfalso
state_before: case neg.inr
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
h : ¬x < y
h' : y = x
⊢ y < x

tactic: exact h₂ h'.symm
state_before: case neg.inr.h
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
x y : Fin (len [n + 1] + 1)
h₁ : ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) y
h₂ : ¬x = y
h : ¬x < y
h' : y = x
⊢ False

tactic: exact θ.toOrderHom.monotone (le_of_lt (Fin.castSucc_lt_succ z))
state_before: case intro.intro.intro.hi.a
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
z : Fin (n + 1) := Fin.castPred x
h₂ : Fin.succ z ≤ y
h₁ : ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) y
⊢ ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) ≤ ↑(Hom.toOrderHom θ) (Fin.succ z)

tactic: rw [h₁]
state_before: case intro.intro.intro.hi.a
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
z : Fin (n + 1) := Fin.castPred x
h₂ : Fin.succ z ≤ y
h₁ : ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) y
⊢ ↑(Hom.toOrderHom θ) (Fin.succ z) ≤ ↑(Hom.toOrderHom θ) (↑Fin.castSucc z)

tactic: exact θ.toOrderHom.monotone h₂
state_before: case intro.intro.intro.hi.a
n : ℕ
Δ' : SimplexCategory
θ : [n + 1] ⟶ Δ'
hθ : ∃ x x_1, ↑(Hom.toOrderHom θ) x = ↑(Hom.toOrderHom θ) x_1 ∧ ¬x = x_1
x y : Fin (n + 2)
z : Fin (n + 1) := Fin.castPred x
h₂ : Fin.succ z ≤ y
h₁ : ↑(Hom.toOrderHom θ) (↑Fin.castSucc z) = ↑(Hom.toOrderHom θ) y
⊢ ↑(Hom.toOrderHom θ) (Fin.succ z) ≤ ↑(Hom.toOrderHom θ) y