Graph products #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines the box product of graphs and other product constructions. The box product of G
and H
is the graph on the product of the vertices such that x
and y
are related iff they agree
on one component and the other one is related via either G
or H
. For example, the box product of
two edges is a square.
Main declarations #
simple_graph.box_prod
: The box product.
Notation #
G □ H
: The box product ofG
andH
.
TODO #
Define all other graph products!
Box product of simple graphs. It relates (a₁, b)
and (a₂, b)
if G
relates a₁
and a₂
,
and (a, b₁)
and (a, b₂)
if H
relates b₁
and b₂
.
The box product is commutative up to isomorphism. equiv.prod_comm
as a graph isomorphism.
Equations
- G.box_prod_comm H = {to_equiv := equiv.prod_comm α β, map_rel_iff' := _}
The box product is associative up to isomorphism. equiv.prod_assoc
as a graph isomorphism.
Equations
- G.box_prod_assoc H I = {to_equiv := equiv.prod_assoc α β γ, map_rel_iff' := _}
The embedding of G
into G □ H
given by b
.
Equations
- G.box_prod_left H b = {to_embedding := {to_fun := λ (a : α), (a, b), inj' := _}, map_rel_iff' := _}
The embedding of H
into G □ H
given by a
.
Equations
- G.box_prod_right H a = {to_embedding := {to_fun := prod.mk a, inj' := _}, map_rel_iff' := _}
Turn a walk on G
into a walk on G □ H
.
Equations
Turn a walk on H
into a walk on G □ H
.
Equations
Project a walk on G □ H
to a walk on G
by discarding the moves in the direction of H
.
Equations
- (simple_graph.walk.cons h w).of_box_prod_left = or.by_cases h (λ (hG : G.adj x.fst a_6.fst ∧ x.snd = a_6.snd), simple_graph.walk.cons _ w.of_box_prod_left) (λ (hH : H.adj x.snd a_6.snd ∧ x.fst = a_6.fst), show G.walk x.fst z.fst, from _.mpr w.of_box_prod_left)
- simple_graph.walk.nil.of_box_prod_left = simple_graph.walk.nil
Project a walk on G □ H
to a walk on H
by discarding the moves in the direction of G
.
Equations
- (simple_graph.walk.cons h w).of_box_prod_right = _.by_cases (λ (hH : H.adj x.snd a_15.snd ∧ x.fst = a_15.fst), simple_graph.walk.cons _ w.of_box_prod_right) (λ (hG : G.adj x.fst a_15.fst ∧ x.snd = a_15.snd), show H.walk x.snd z.snd, from _.mpr w.of_box_prod_right)
- simple_graph.walk.nil.of_box_prod_right = simple_graph.walk.nil
Equations
- simple_graph.box_prod_fintype_neighbor_set x = fintype.of_equiv ↥((G.neighbor_finset x.fst ×ˢ {x.snd}).disj_union ({x.fst} ×ˢ H.neighbor_finset x.snd) _) ((equiv.refl (α × β)).subtype_equiv _)