Theorem: SimpleGraph.Subgraph.IsMatching.iSup
File: Mathlib/Combinatorics/SimpleGraph/Matching.lean

Proof steps:
state_before: V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v w : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
⊢ (⨆ i, f i).IsMatching
state_after: V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
⊢ ∃! w, (⨆ i, f i).Adj v w
tactic: intro v hv
state_before: V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
⊢ ∃! w, (⨆ i, f i).Adj v w
state_after: case intro
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
⊢ ∃! w, (⨆ i, f i).Adj v w
tactic: obtain ⟨i , hi⟩ := Set.mem_iUnion.mp (verts_iSup ▸ hv)
state_before: case intro
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
⊢ ∃! w, (⨆ i, f i).Adj v w
state_after: case intro.intro
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
⊢ ∃! w, (⨆ i, f i).Adj v w
tactic: obtain ⟨w , hw⟩ := hM i hi
state_before: case intro.intro
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
⊢ ∃! w, (⨆ i, f i).Adj v w
state_after: case h
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
⊢ (fun w => (⨆ i, f i).Adj v w) w ∧ ∀ (y : V), (fun w => (⨆ i, f i).Adj v w) y → y = w
tactic: use w
state_before: case h
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
⊢ (fun w => (⨆ i, f i).Adj v w) w ∧ ∀ (y : V), (fun w => (⨆ i, f i).Adj v w) y → y = w
state_after: case h
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
⊢ ∀ (y : V), (fun w => (⨆ i, f i).Adj v w) y → y = w
tactic: refine ⟨iSup_adj.mpr ⟨i, hw.1⟩, ?_⟩
state_before: case h
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
⊢ ∀ (y : V), (fun w => (⨆ i, f i).Adj v w) y → y = w
state_after: case h
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
y : V
hy : (⨆ i, f i).Adj v y
⊢ y = w
tactic: intro y hy
state_before: case h
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
y : V
hy : (⨆ i, f i).Adj v y
⊢ y = w
state_after: case h.intro
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
y : V
hy : (⨆ i, f i).Adj v y
i' : ι
hi' : (f i').Adj v y
⊢ y = w
tactic: obtain ⟨i' , hi'⟩ := iSup_adj.mp hy
state_before: case h.intro
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
y : V
hy : (⨆ i, f i).Adj v y
i' : ι
hi' : (f i').Adj v y
⊢ y = w
state_after: case pos
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
y : V
hy : (⨆ i, f i).Adj v y
i' : ι
hi' : (f i').Adj v y
heq : i = i'
⊢ y = w

case neg
V : Type u_1
G G' : SimpleGraph V
M M' : G.Subgraph
v✝ w✝ : V
ι : Type u_2
f : ι → G.Subgraph
hM : ∀ (i : ι), (f i).IsMatching
hd : Pairwise fun i j => Disjoint (f i).support (f j).support
v : V
hv : v ∈ (⨆ i, f i).verts
i : ι
hi : v ∈ (f i).verts
w : V
hw : (fun w => (f i).Adj v w) w ∧ ∀ (y : V), (fun w => (f i).Adj v w) y → y = w
y : V
hy : (⨆ i, f i).Adj v y
i' : ι
hi' : (f i').Adj v y
heq : ¬i = i'
⊢ y = w
tactic: by_cases heq : i = i'