@@ -126,3 +126,48 @@ instance isVertexTransitive : IsVertexTransitive G (G ⧸ H) (cosetGraph H D hD)
126126 pretransitive := MulAction.isPretransitive_quotient G H
127127
128128end SimpleGraph.cosetGraph
129+
130+ /-! ## Coset projection
131+
132+ When `H ≤ K`, the natural projection `G ⧸ H → G ⧸ K` sends `gH ↦ gK`.
133+ If `D` is a connection set for both `H` and `K`, this projection is a
134+ graph homomorphism: adjacency in `Sab(G, H, D)` implies adjacency in
135+ `Sab(G, K, D)`.
136+
137+ This is the Sabidussi analogue of quotient by a block system: the orbits
138+ of `K` on `G ⧸ H` form a system of blocks of size `[K : H]`, and the
139+ quotient graph is `Sab(G, K, D)`. -/
140+
141+ /-- The natural projection `G ⧸ H → G ⧸ K` when `H ≤ K`. -/
142+ def cosetProjection (H K : Subgroup G) (hle : H ≤ K) :
143+ G ⧸ H → G ⧸ K :=
144+ Quotient.map id fun _ _ hab => by
145+ change (QuotientGroup.leftRel K).r _ _
146+ have hab' : (QuotientGroup.leftRel H).r _ _ := hab
147+ rw [QuotientGroup.leftRel_apply] at hab' ⊢
148+ exact hle hab'
149+
150+ @[simp]
151+ theorem cosetProjection_mk (H K : Subgroup G) (hle : H ≤ K)
152+ (g : G) : cosetProjection H K hle ⟦g⟧ = ⟦g⟧ :=
153+ rfl
154+
155+ /-- **Coset projection is a graph homomorphism** : if `H ≤ K` and `D` is a
156+ connection set for both, then adjacency in `Sab(G, H, D)` implies
157+ adjacency in `Sab(G, K, D)`.
158+
159+ The proof is trivial: adjacency is `x⁻¹y ∈ D` in both graphs.
160+ The subgroup only determines the coset equivalence, not the adjacency test. -/
161+ theorem SimpleGraph.cosetGraph.proj_adj
162+ {H K : Subgroup G} (hle : H ≤ K) {D : Set G}
163+ (hDH : IsConnectionSet H D) (hDK : IsConnectionSet K D)
164+ (q₁ q₂ : G ⧸ H) :
165+ (cosetGraph H D hDH).Adj q₁ q₂ →
166+ (cosetGraph K D hDK).Adj (cosetProjection H K hle q₁)
167+ (cosetProjection H K hle q₂) :=
168+ Quotient.inductionOn₂ q₁ q₂ fun _ _ h => h
169+
170+ /-- The coset projection is surjective. -/
171+ theorem cosetProjection_surjective (H K : Subgroup G) (hle : H ≤ K) :
172+ Function.Surjective (cosetProjection H K hle) :=
173+ fun q => Quotient.inductionOn q fun g => ⟨⟦g⟧, rfl⟩
0 commit comments