Kempe chains for partial edge colourings #
Given a partial proper edge colouring c and two colours a b, the Kempe graph consists of
the edges coloured a or b. Swapping the two colours on the connected component of a vertex
x produces another partial proper edge colouring, colouring exactly the same edges.
def
LeanPool.Vizing.PEC.kempeGraph
{V : Type u_1}
{C : Type u_2}
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
:
The subgraph consisting of the edges coloured a or b.
Equations
Instances For
theorem
LeanPool.Vizing.PEC.kempeGraph_adj_of_col
{V : Type u_1}
{C : Type u_2}
{G : SimpleGraph V}
{c : PEC G C}
{a b : C}
{u v : V}
(h : c.col u v = some a ∨ c.col u v = some b)
:
(c.kempeGraph a b).Adj u v
theorem
LeanPool.Vizing.PEC.reachable_of_col
{V : Type u_1}
{C : Type u_2}
{G : SimpleGraph V}
{c : PEC G C}
{a b : C}
{x u v : V}
(hu : (c.kempeGraph a b).Reachable x u)
(h : c.col u v = some a ∨ c.col u v = some b)
:
(c.kempeGraph a b).Reachable x v
Reachability in the Kempe graph propagates along edges coloured a or b.
noncomputable def
LeanPool.Vizing.PEC.kempeSwapFun
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
(x : V)
:
V → V → Option C
The colour function after swapping a and b on the Kempe component of x.
Equations
- c.kempeSwapFun a b x u v = if (c.kempeGraph a b).Reachable x u ∧ (c.kempeGraph a b).Reachable x v then Option.map (⇑(Equiv.swap a b)) (c.col u v) else c.col u v
Instances For
theorem
LeanPool.Vizing.PEC.kempeSwapFun_of_reachable
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
{x u : V}
(hu : (c.kempeGraph a b).Reachable x u)
(v : V)
:
theorem
LeanPool.Vizing.PEC.kempeSwapFun_of_not_reachable
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
{x u : V}
(hu : ¬(c.kempeGraph a b).Reachable x u)
(v : V)
:
theorem
LeanPool.Vizing.PEC.kempeSwapFun_isSome
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
(x u v : V)
:
noncomputable def
LeanPool.Vizing.PEC.kempeSwap
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
(x : V)
:
PEC G C
Swapping the colours a and b on the Kempe component of x.
Equations
- c.kempeSwap a b x = { col := c.kempeSwapFun a b x, col_symm := ⋯, col_adj := ⋯, col_proper := ⋯ }
Instances For
@[simp]
theorem
LeanPool.Vizing.PEC.kempeSwap_col
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
(x : V)
:
theorem
LeanPool.Vizing.PEC.extends_kempeSwap
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
(x : V)
:
theorem
LeanPool.Vizing.PEC.isFree_kempeSwap_of_reachable
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
{x v : V}
(hv : (c.kempeGraph a b).Reachable x v)
(γ : C)
:
On the Kempe component the free colours get swapped.
theorem
LeanPool.Vizing.PEC.isFree_kempeSwap_of_not_reachable
{V : Type u_1}
{C : Type u_2}
[DecidableEq C]
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
{x v : V}
(hv : ¬(c.kempeGraph a b).Reachable x v)
(γ : C)
:
Off the Kempe component the free colours are unchanged.
Degrees in the Kempe graph #
theorem
LeanPool.Vizing.PEC.kempe_degree_le_two
{V : Type u_1}
[Fintype V]
{C : Type u_2}
{G : SimpleGraph V}
(c : PEC G C)
(a b : C)
[DecidableRel (c.kempeGraph a b).Adj]
(v : V)
:
theorem
LeanPool.Vizing.PEC.kempe_degree_le_one_of_isFree
{V : Type u_1}
[Fintype V]
{C : Type u_2}
{G : SimpleGraph V}
(c : PEC G C)
{a b : C}
[DecidableRel (c.kempeGraph a b).Adj]
{v : V}
{γ : C}
(hγ : γ = a ∨ γ = b)
(hfree : c.IsFree v γ)
: