Theorem: SimpleGraph.extend_finset_to_connected
File: Mathlib/Combinatorics/SimpleGraph/Connectivity/Subgraph.lean

tactic: obtain ⟨u, ut⟩ := tn
state_before: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
tn : t.Nonempty
⊢ ∃ t', t ⊆ t' ∧ (induce (↑t') G).Connected
state_after: case intro
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ ∃ t', t ⊆ t' ∧ (induce (↑t') G).Connected

tactic: refine ⟨t.biUnion (fun v => (Gpc u v).some.support.toFinset), fun v vt => ?_, ?_⟩
state_before: case intro
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ ∃ t', t ⊆ t' ∧ (induce (↑t') G).Connected
state_after: case intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
vt : v ∈ t
⊢ v ∈ t.biUnion fun v => (Nonempty.some ⋯).support.toFinset

case intro.refine_2
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ (induce (↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)) G).Connected

tactic: simp only [Finset.mem_biUnion, List.mem_toFinset, exists_prop]
state_before: case intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
vt : v ∈ t
⊢ v ∈ t.biUnion fun v => (Nonempty.some ⋯).support.toFinset
state_after: case intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
vt : v ∈ t
⊢ ∃ a ∈ t, v ∈ (Nonempty.some ⋯).support

tactic: exact ⟨v, vt, Walk.end_mem_support _⟩
state_before: case intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
vt : v ∈ t
⊢ ∃ a ∈ t, v ∈ (Nonempty.some ⋯).support
state_after: no goals

tactic: apply G.induce_connected_of_patches u
state_before: case intro.refine_2
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ (induce (↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)) G).Connected
state_after: case intro.refine_2.hu
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ u ∈ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)

case intro.refine_2.patches
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ ∀ {v : V},
    v ∈ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset) →
      ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
        ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩

tactic: intros v hv
state_before: case intro.refine_2.patches
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ ∀ {v : V},
    v ∈ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset) →
      ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
        ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩
state_after: case intro.refine_2.patches
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
hv : v ∈ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)
⊢ ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
    ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩

tactic: simp only [Finset.mem_coe, Finset.mem_biUnion, List.mem_toFinset, exists_prop] at hv
state_before: case intro.refine_2.patches
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
hv : v ∈ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)
⊢ ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
    ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩
state_after: case intro.refine_2.patches
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
hv : ∃ a ∈ t, v ∈ (Nonempty.some ⋯).support
⊢ ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
    ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩

tactic: obtain ⟨w, wt, hw⟩ := hv
state_before: case intro.refine_2.patches
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v : V
hv : ∃ a ∈ t, v ∈ (Nonempty.some ⋯).support
⊢ ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
    ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩
state_after: case intro.refine_2.patches.intro.intro
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
    ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩

tactic: refine ⟨{x | x ∈ (Gpc u w).some.support}, ?_, ?_⟩
state_before: case intro.refine_2.patches.intro.intro
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ ∃ s' ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset),
    ∃ (hu' : u ∈ s') (hv' : v ∈ s'), (induce s' G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩
state_after: case intro.refine_2.patches.intro.intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ {x | x ∈ (Nonempty.some ⋯).support} ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)

case intro.refine_2.patches.intro.intro.refine_2
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ ∃ (hu' : u ∈ {x | x ∈ (Nonempty.some ⋯).support}) (hv' : v ∈ {x | x ∈ (Nonempty.some ⋯).support}),
    (induce {x | x ∈ (Nonempty.some ⋯).support} G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩

tactic: simp only [Finset.coe_biUnion, Finset.mem_coe, List.coe_toFinset, Set.mem_iUnion,
           Set.mem_setOf_eq, Walk.start_mem_support, exists_prop, and_true]
state_before: case intro.refine_2.hu
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ u ∈ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)
state_after: case intro.refine_2.hu
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ ∃ i, i ∈ t

tactic: exact ⟨u, ut⟩
state_before: case intro.refine_2.hu
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
⊢ ∃ i, i ∈ t
state_after: no goals

tactic: simp only [Finset.coe_biUnion, Finset.mem_coe, List.coe_toFinset]
state_before: case intro.refine_2.patches.intro.intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ {x | x ∈ (Nonempty.some ⋯).support} ⊆ ↑(t.biUnion fun v => (Nonempty.some ⋯).support.toFinset)
state_after: case intro.refine_2.patches.intro.intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ {x | x ∈ (Nonempty.some ⋯).support} ⊆ ⋃ x ∈ t, {a | a ∈ (Nonempty.some ⋯).support}

tactic: exact fun x xw => Set.mem_iUnion₂.mpr ⟨w,wt,xw⟩
state_before: case intro.refine_2.patches.intro.intro.refine_1
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ {x | x ∈ (Nonempty.some ⋯).support} ⊆ ⋃ x ∈ t, {a | a ∈ (Nonempty.some ⋯).support}
state_after: no goals

tactic: simp only [Set.mem_setOf_eq, Walk.start_mem_support, exists_true_left]
state_before: case intro.refine_2.patches.intro.intro.refine_2
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ ∃ (hu' : u ∈ {x | x ∈ (Nonempty.some ⋯).support}) (hv' : v ∈ {x | x ∈ (Nonempty.some ⋯).support}),
    (induce {x | x ∈ (Nonempty.some ⋯).support} G).Reachable ⟨u, hu'⟩ ⟨v, hv'⟩
state_after: case intro.refine_2.patches.intro.intro.refine_2
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ ∃ (h : v ∈ (Nonempty.some ⋯).support), (induce {x | x ∈ (Nonempty.some ⋯).support} G).Reachable ⟨u, ⋯⟩ ⟨v, ⋯⟩

tactic: refine ⟨hw, Walk.connected_induce_support _ _ _⟩
state_before: case intro.refine_2.patches.intro.intro.refine_2
V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
Gpc : G.Preconnected
t : Finset V
u : V
ut : u ∈ t
v w : V
wt : w ∈ t
hw : v ∈ (Nonempty.some ⋯).support
⊢ ∃ (h : v ∈ (Nonempty.some ⋯).support), (induce {x | x ∈ (Nonempty.some ⋯).support} G).Reachable ⟨u, ⋯⟩ ⟨v, ⋯⟩
state_after: no goals