Theorem: CategoryTheory.zigzag_isPreconnected
File: Mathlib/CategoryTheory/IsConnected.lean

tactic: apply IsPreconnected.of_constant_of_preserves_morphisms
state_before: J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ IsPreconnected J
state_after: case h
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ ∀ {α : Type u₁} (F : J → α), (∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂) → ∀ (j j' : J), F j = F j'

tactic: intro α F hF j j'
state_before: case h
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ ∀ {α : Type u₁} (F : J → α), (∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂) → ∀ (j j' : J), F j = F j'
state_after: case h
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' : J
⊢ F j = F j'

tactic: specialize h j j'
state_before: case h
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' : J
⊢ F j = F j'
state_after: case h
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' : J
h : Zigzag j j'
⊢ F j = F j'

tactic: induction' h with j₁ j₂ _ hj ih
state_before: case h
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' : J
h : Zigzag j j'
⊢ F j = F j'
state_after: case h.refl
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' : J
⊢ F j = F j

case h.tail
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
hj : Zag j₁ j₂
ih : F j = F j₁
⊢ F j = F j₂

tactic: rfl
state_before: case h.refl
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' : J
⊢ F j = F j
state_after: no goals

tactic: rw [ih]
state_before: case h.tail
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
hj : Zag j₁ j₂
ih : F j = F j₁
⊢ F j = F j₂
state_after: case h.tail
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
hj : Zag j₁ j₂
ih : F j = F j₁
⊢ F j₁ = F j₂

tactic: rcases hj with (⟨⟨hj⟩⟩|⟨⟨hj⟩⟩)
state_before: case h.tail
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
hj : Zag j₁ j₂
ih : F j = F j₁
⊢ F j₁ = F j₂
state_after: case h.tail.inl.intro
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
ih : F j = F j₁
hj : j₁ ⟶ j₂
⊢ F j₁ = F j₂

case h.tail.inr.intro
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
ih : F j = F j₁
hj : j₂ ⟶ j₁
⊢ F j₁ = F j₂

tactic: exacts [hF hj, (hF hj).symm]
state_before: case h.tail.inl.intro
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
ih : F j = F j₁
hj : j₁ ⟶ j₂
⊢ F j₁ = F j₂

case h.tail.inr.intro
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
α : Type u₁
F : J → α
hF : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂
j j' j₁ j₂ : J
a✝ : Relation.ReflTransGen Zag j j₁
ih : F j = F j₁
hj : j₂ ⟶ j₁
⊢ F j₁ = F j₂
state_after: no goals