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

tactic: apply IsConnected.of_induct
state_before: J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ IsConnected J

tactic: intro p hp hjp j
state_before: case h
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ ∀ (p : Set J), ?j₀ ∈ p → (∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)) → ∀ (j : J), j ∈ p

case j₀
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ J

tactic: rwa [this j (Classical.arbitrary J) (h _ _)]
state_before: case h
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j : J
this : ∀ (j₁ j₂ : J), Zigzag j₁ j₂ → (j₁ ∈ p ↔ j₂ ∈ p)
⊢ j ∈ p

case j₀
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
⊢ J

tactic: introv k
state_before: J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j : J
⊢ ∀ (j₁ j₂ : J), Zigzag j₁ j₂ → (j₁ ∈ p ↔ j₂ ∈ p)

tactic: induction' k with _ _ _ zag k_ih
state_before: J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ : J
k : Zigzag j₁ j₂
⊢ j₁ ∈ p ↔ j₂ ∈ p

tactic: rfl
state_before: case refl
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ : J
⊢ j₁ ∈ p ↔ j₁ ∈ p

tactic: rw [k_ih]
state_before: case tail
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ b✝ c✝ : J
a✝ : Relation.ReflTransGen Zag j₁ b✝
zag : Zag b✝ c✝
k_ih : j₁ ∈ p ↔ b✝ ∈ p
⊢ j₁ ∈ p ↔ c✝ ∈ p

tactic: cases' zag with zag zag
state_before: case tail
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ b✝ c✝ : J
a✝ : Relation.ReflTransGen Zag j₁ b✝
zag : Zag b✝ c✝
k_ih : j₁ ∈ p ↔ b✝ ∈ p
⊢ b✝ ∈ p ↔ c✝ ∈ p

tactic: apply hjp (Nonempty.some zag)
state_before: case tail.inl
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ b✝ c✝ : J
a✝ : Relation.ReflTransGen Zag j₁ b✝
k_ih : j₁ ∈ p ↔ b✝ ∈ p
zag : Nonempty (b✝ ⟶ c✝)
⊢ b✝ ∈ p ↔ c✝ ∈ p

case tail.inr
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ b✝ c✝ : J
a✝ : Relation.ReflTransGen Zag j₁ b✝
k_ih : j₁ ∈ p ↔ b✝ ∈ p
zag : Nonempty (c✝ ⟶ b✝)
⊢ b✝ ∈ p ↔ c✝ ∈ p

tactic: exact (hjp (Nonempty.some zag)).symm
state_before: case tail.inr
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : Nonempty J
h : ∀ (j₁ j₂ : J), Zigzag j₁ j₂
p : Set J
hp : ?j₀ ∈ p
hjp : ∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j j₁ j₂ b✝ c✝ : J
a✝ : Relation.ReflTransGen Zag j₁ b✝
k_ih : j₁ ∈ p ↔ b✝ ∈ p
zag : Nonempty (c✝ ⟶ b✝)
⊢ b✝ ∈ p ↔ c✝ ∈ p