Constructing positive red/black sets #
The first two constructions in Monien and Preis's core lemma join black components by red edges, or attach three black components to a short black path. Adding a set with no black boundary cannot increase the black cut. Three internal red edges therefore suffice when the connecting set has at most two external black edges.
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.mem_internalEdges
{V E : Type}
[Fintype E]
(R : Multigraph V E)
{X : Finset V}
{e : E}
:
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.internalEdges_mono
{V E : Type}
[Fintype E]
(R : Multigraph V E)
{X Y : Finset V}
(h : X ⊆ Y)
:
internalEdges R X ⊆ internalEdges R Y
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.cut_component_eq_empty
{V : Type}
[Fintype V]
(B : SimpleGraph V)
(C : B.ConnectedComponent)
:
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.exists_positive_of_component_edge
{V E : Type}
[Fintype V]
[Fintype E]
(B : SimpleGraph V)
(R : Multigraph V E)
(C D : B.ConnectedComponent)
(M : ℕ)
(smallC : Fintype.card ↥C ≤ M)
(smallD : Fintype.card ↥D ≤ M)
{e : E}
(hfst : R.fst e ∈ C.supp)
(hsnd : R.snd e ∈ D.supp)
:
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.exists_positive_of_attachments
{V E : Type}
[Fintype V]
[Fintype E]
(B : SimpleGraph V)
(R : Multigraph V E)
(P : Finset V)
(edges : Finset E)
(A : E → Finset V)
(M : ℕ)
(cut : (B.cutFinset P).card < edges.card)
(closed : ∀ e ∈ edges, B.cutFinset (A e) = ∅)
(small : ∀ e ∈ edges, (A e).card ≤ M)
(attached : ∀ e ∈ edges, R.fst e ∈ P ∧ R.snd e ∈ A e ∨ R.snd e ∈ P ∧ R.fst e ∈ A e)
:
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.exists_positive_of_three_attachments
{V E : Type}
[Fintype V]
[Fintype E]
(B : SimpleGraph V)
(R : Multigraph V E)
(P : Finset V)
(edges : Finset E)
(A : E → Finset V)
(M : ℕ)
(connected : (SimpleGraph.induce {v : V | v ∈ P} B).Connected)
(degree : ∀ v ∈ P, B.degree v ≤ 2)
(three : edges.card = 3)
(closed : ∀ e ∈ edges, B.cutFinset (A e) = ∅)
(small : ∀ e ∈ edges, (A e).card ≤ M)
(attached : ∀ e ∈ edges, R.fst e ∈ P ∧ R.snd e ∈ A e ∨ R.snd e ∈ P ∧ R.fst e ∈ A e)
:
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.exists_positive_of_walk_attachments
{V E : Type}
[Fintype V]
[Fintype E]
(B : SimpleGraph V)
(R : Multigraph V E)
{u v : V}
(p : B.Walk u v)
(edges : Finset E)
(A : E → Finset V)
(M : ℕ)
(degree : ∀ w ∈ p.support, B.degree w ≤ 2)
(three : edges.card = 3)
(closed : ∀ e ∈ edges, B.cutFinset (A e) = ∅)
(small : ∀ e ∈ edges, (A e).card ≤ M)
(attached : ∀ e ∈ edges, R.fst e ∈ p.support ∧ R.snd e ∈ A e ∨ R.snd e ∈ p.support ∧ R.fst e ∈ A e)
:
theorem
Algebraic.Cutwidth.Bisection.RedBlack.Internal.exists_positive_of_thin_walk
{V E : Type}
[Fintype V]
[Fintype E]
(B : SimpleGraph V)
(R : Multigraph V E)
{u v : V}
(p : B.Walk u v)
{n : ℕ}
(edge : Fin (n + 3) ↪ E)
(pos : Fin (n + 3) → ℕ)
(A : E → Finset V)
(M : ℕ)
(ordered : Monotone pos)
(within : ∀ (i : Fin (n + 3)), pos i ≤ p.length)
(degree : ∀ w ∈ p.support, B.degree w ≤ 2)
(thin : p.length ≤ M * (n + 3))
(closed : ∀ (i : Fin (n + 3)), B.cutFinset (A (edge i)) = ∅)
(small : ∀ (i : Fin (n + 3)), (A (edge i)).card ≤ M)
(attached :
∀ (i : Fin (n + 3)),
R.fst (edge i) = p.getVert (pos i) ∧ R.snd (edge i) ∈ A (edge i) ∨ R.snd (edge i) = p.getVert (pos i) ∧ R.fst (edge i) ∈ A (edge i))
: