ProCGroups/WreathProducts.lean
1import Mathlib.GroupTheory.SemidirectProduct
2import ProCGroups.ProC.Subgroups.Products
4/-
5PUBLIC_PAGE_SNAPSHOT
6generated_at: 2026-05-27T09:47:29+09:00
7lean_source: lean4/ProCGroups/WreathProducts.lean
8translation_root: data/translation
9purpose: identifies the local data snapshot used to build pages/
10placement: after imports, never before imports
11-/
12/-!
13# Permutational wreath products
15Constructs permutational wreath products with the continuity and action formulas needed for finite quotient and solvable quotient arguments.
16-/
18open scoped Pointwise
20namespace ProCGroups.WreathProducts
22universe u v w
24section RightCosets
26variable {G : Type u} [Group G]
28/-- Right multiplication on right cosets, expressed as a left action by
29`g • [a] = [a * g⁻¹]`. -/
30def rightCosetMulAction (H : Subgroup G) :
31 MulAction G (Quotient (QuotientGroup.rightRel H)) where
32 smul g :=
33 Quotient.map' (fun a => a * g⁻¹) fun a b hab => by
34 rw [QuotientGroup.rightRel_apply] at hab ⊢
35 simpa [mul_assoc] using hab
36 one_smul q := by
37 refine Quotient.inductionOn' q ?_
38 intro a
39 apply Quotient.sound'
40 rw [QuotientGroup.rightRel_apply]
41 simp only [inv_one, mul_one, mul_inv_cancel, one_mem]
42 mul_smul g h q := by
43 refine Quotient.inductionOn' q ?_
44 intro a
45 apply Quotient.sound'
46 rw [QuotientGroup.rightRel_apply]
49@[simp 900] theorem rightCosetMulAction_mk_smul
50 (H : Subgroup G) (g a : G) :
51 letI := rightCosetMulAction H
52 g • (Quotient.mk'' a : Quotient (QuotientGroup.rightRel H)) =
53 Quotient.mk'' (a * g⁻¹) :=
54 rfl
56@[simp 900] theorem rightCosetMulAction_inv_mk_smul
57 (H : Subgroup G) (g a : G) :
58 letI := rightCosetMulAction H
59 g⁻¹ • (Quotient.mk'' a : Quotient (QuotientGroup.rightRel H)) =
60 Quotient.mk'' (a * g) := by
61 rw [rightCosetMulAction_mk_smul (H := H) g⁻¹ a]
64end RightCosets
66section RightCosetTopology
68variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
70/-- For an open subgroup, the orbit map to the discrete right-coset space is continuous. -/
72 (H : Subgroup G) (hH : IsOpen (H : Set G))
73 [TopologicalSpace (Quotient (QuotientGroup.rightRel H))]
74 [DiscreteTopology (Quotient (QuotientGroup.rightRel H))]
75 (q : Quotient (QuotientGroup.rightRel H)) :
76 letI := rightCosetMulAction H
77 Continuous fun g : G => g⁻¹ • q := by
78 letI := rightCosetMulAction H
79 rw [continuous_discrete_rng]
80 intro q'
81 classical
82 let a : G := q.out
83 let b : G := q'.out
84 have hpre :
85 (fun g : G => g⁻¹ • q) ⁻¹' (Set.singleton q') =
86 (fun g : G => b * g⁻¹ * a⁻¹) ⁻¹' (H : Set G) := by
87 ext g
88 constructor
89 · intro hg
90 have hEq :
91 (Quotient.mk'' (a * g) : Quotient (QuotientGroup.rightRel H)) =
92 Quotient.mk'' b := by
93 calc
94 (Quotient.mk'' (a * g) : Quotient (QuotientGroup.rightRel H))
95 = g⁻¹ • (Quotient.mk'' a : Quotient (QuotientGroup.rightRel H)) := by
96 rw [rightCosetMulAction_inv_mk_smul (H := H) g a]
97 _ = g⁻¹ • q := by rw [Quotient.out_eq' q]
98 _ = q' := by simpa using hg
99 _ = Quotient.mk'' b := by simp only [Quotient.out_eq, b]
100 have hrel : QuotientGroup.rightRel H (a * g) b := Quotient.eq''.mp hEq
101 simpa [mul_inv_rev, mul_assoc] using (QuotientGroup.rightRel_apply.mp hrel)
102 · intro hg
103 have hrel : QuotientGroup.rightRel H (a * g) b := by
104 rw [QuotientGroup.rightRel_apply]
105 simpa [mul_inv_rev, mul_assoc] using hg
106 calc
107 g⁻¹ • q = g⁻¹ • (Quotient.mk'' a : Quotient (QuotientGroup.rightRel H)) := by
108 rw [Quotient.out_eq' q]
109 _ = Quotient.mk'' (a * g) := by
110 rw [rightCosetMulAction_inv_mk_smul (H := H) g a]
111 _ = Quotient.mk'' b := Quotient.eq''.mpr hrel
112 _ = q' := Quotient.out_eq' q'
113 rw [show ((fun g : G => g⁻¹ • q) ⁻¹' ({q'} : Set (Quotient (QuotientGroup.rightRel H)))) =
114 (fun g : G => b * g⁻¹ * a⁻¹) ⁻¹' (H : Set G) by
115 simpa using hpre]
116 exact hH.preimage ((continuous_const.mul continuous_inv).mul continuous_const)
118end RightCosetTopology
120section BasicDefinitions
122variable (A : Type u) (S : Type v) (G : Type w)
123variable [Group A] [Group G] [MulAction G S]
125/-- The permutational wreath product attached to a `G`-set `Σ`. -/
126abbrev PermutationalWreathProduct :=
127 (S → A) ⋊[(mulAutArrow (G := G) (A := S) (M := A))] G
129end BasicDefinitions
131section Topology
133variable {A : Type u} {S : Type v} {G : Type w}
134variable [Group A] [Group G] [MulAction G S]
135variable [TopologicalSpace A] [TopologicalSpace G]
138 TopologicalSpace (PermutationalWreathProduct A S G) :=
139 TopologicalSpace.induced
140 (SemidirectProduct.equivProd :
141 PermutationalWreathProduct A S G ≃ (S → A) × G)
142 inferInstance
144/-- The topology on a permutational wreath product is the one transported from the product of the
145function factor and the right factor. -/
146@[simps!]
148 PermutationalWreathProduct A S G ≃ₜ (S → A) × G where
149 toEquiv := SemidirectProduct.equivProd
150 continuous_toFun := continuous_induced_dom
151 continuous_invFun := by
152 rw [continuous_induced_rng]
153 simpa using (continuous_id : Continuous fun x : (S → A) × G => x)
155@[continuity] theorem continuous_permutationalWreathProduct_equivProd :
156 Continuous
157 (SemidirectProduct.equivProd :
158 PermutationalWreathProduct A S G → (S → A) × G) :=
159 continuous_induced_dom
161@[continuity] theorem continuous_permutationalWreathProduct_left :
162 Continuous (fun x : PermutationalWreathProduct A S G => x.left) :=
163 continuous_fst.comp continuous_permutationalWreathProduct_equivProd
165@[continuity] theorem continuous_permutationalWreathProduct_right :
166 Continuous (fun x : PermutationalWreathProduct A S G => x.right) :=
167 continuous_snd.comp continuous_permutationalWreathProduct_equivProd
169@[continuity] theorem continuous_permutationalWreathProduct_left_apply (s : S) :
170 Continuous (fun x : PermutationalWreathProduct A S G => x.left s) :=
171 (continuous_apply s).comp continuous_permutationalWreathProduct_left
173instance instT2SpacePermutationalWreathProduct [T2Space A] [T2Space G] :
174 T2Space (PermutationalWreathProduct A S G) :=
175 (permutationalWreathProductHomeomorphProd (A := A) (S := S) (G := G)).symm.t2Space
177instance instCompactSpacePermutationalWreathProduct [CompactSpace A] [CompactSpace G] :
178 CompactSpace (PermutationalWreathProduct A S G) :=
179 (permutationalWreathProductHomeomorphProd (A := A) (S := S) (G := G)).symm.compactSpace
182 [TotallyDisconnectedSpace A] [TotallyDisconnectedSpace G] :
183 TotallyDisconnectedSpace (PermutationalWreathProduct A S G) :=
184 Homeomorph.totallyDisconnectedSpace
185 ((permutationalWreathProductHomeomorphProd (A := A) (S := S) (G := G)).symm)
187/-- Precomposition by the inverse permutation coming from the `G`-action on `S`. This is the
188action appearing in `mulAutArrow`. -/
189def functionPrecomp (g : G) (f : S → A) : S → A :=
190 fun s => f (g⁻¹ • s)
192omit [Group A] [TopologicalSpace A] [TopologicalSpace G] in
193@[simp] theorem functionPrecomp_apply (g : G) (f : S → A) (s : S) :
194 functionPrecomp g f s = f (g⁻¹ • s) :=
195 rfl
197omit [TopologicalSpace A] [TopologicalSpace G] in
198@[simp] theorem mulAutArrow_apply_eq_functionPrecomp (g : G) (f : S → A) :
199 mulAutArrow (G := G) (A := S) (M := A) g f = functionPrecomp g f :=
200 rfl
202section DiscreteIndex
204variable [TopologicalSpace S] [DiscreteTopology S]
205variable [ContinuousSMul G S] [ContinuousInv G]
207omit [Group A] in
208/-- Evaluation is jointly continuous on the product of a function space with a discrete index
209space. -/
210theorem continuous_eval_of_discreteIndex :
211 Continuous (fun p : (S → A) × S => p.1 p.2) := by
212 rw [continuous_iff_continuousAt]
213 intro p
214 have hs :
215 Prod.snd ⁻¹' ({p.2} : Set S) ∈ nhds p := by
216 refine IsOpen.mem_nhds ((isOpen_discrete ({p.2} : Set S)).preimage continuous_snd) ?_
217 simp only [Set.mem_preimage, Set.mem_singleton_iff]
218 have hEq :
219 (fun q : (S → A) × S => q.1 q.2) =ᶠ[nhds p] fun q => q.1 p.2 := by
220 refine Filter.eventuallyEq_iff_exists_mem.mpr ?_
221 refine ⟨Prod.snd ⁻¹' ({p.2} : Set S), hs, ?_⟩
222 intro q hq
223 simp only [Set.mem_preimage, Set.mem_singleton_iff] at hq
224 simp only [hq]
225 exact ContinuousAt.congr
226 (((continuous_apply p.2).comp continuous_fst).continuousAt) hEq.symm
228omit [Group A] in
229/-- The precomposition action on the function factor is continuous when the index space is
230discrete. -/
231theorem continuous_functionPrecomp :
232 Continuous (fun p : G × (S → A) => functionPrecomp p.1 p.2) := by
233 refine continuous_pi ?_
234 intro s
235 simpa [functionPrecomp] using
236 (continuous_eval_of_discreteIndex (A := A) (S := S)).comp
237 (continuous_snd.prodMk
238 (((continuous_inv.comp continuous_fst).smul continuous_const) :
239 Continuous (fun p : G × (S → A) => p.1⁻¹ • s)))
241omit [TopologicalSpace A] [TopologicalSpace G] [TopologicalSpace S] [DiscreteTopology S]
242 [ContinuousSMul G S] [ContinuousInv G] in
243@[simp 900] theorem permutationalWreathProduct_mul_left
244 (x y : PermutationalWreathProduct A S G) :
245 (x * y).left = x.left * functionPrecomp x.right y.left :=
246 rfl
248omit [TopologicalSpace A] [TopologicalSpace G] [TopologicalSpace S] [DiscreteTopology S]
249 [ContinuousSMul G S] [ContinuousInv G] in
250@[simp 900] theorem permutationalWreathProduct_inv_left
251 (x : PermutationalWreathProduct A S G) :
252 x⁻¹.left = functionPrecomp x.right⁻¹ x.left⁻¹ :=
253 rfl
256 [ContinuousMul A] [ContinuousMul G] [ContinuousSMul G S] :
257 ContinuousMul (PermutationalWreathProduct A S G) where
258 continuous_mul := by
259 refine continuous_induced_rng.2 ?_
260 change Continuous
261 (fun p : PermutationalWreathProduct A S G × PermutationalWreathProduct A S G =>
262 ((p.1 * p.2).left, (p.1 * p.2).right))
263 have hleft :
264 Continuous
265 (fun p : PermutationalWreathProduct A S G × PermutationalWreathProduct A S G =>
266 p.1.left * functionPrecomp p.1.right p.2.left) :=
267 (continuous_permutationalWreathProduct_left.comp continuous_fst).mul
268 (continuous_functionPrecomp.comp
269 ((continuous_permutationalWreathProduct_right.comp continuous_fst).prodMk
270 (continuous_permutationalWreathProduct_left.comp continuous_snd)))
271 have hright :
272 Continuous
273 (fun p : PermutationalWreathProduct A S G × PermutationalWreathProduct A S G =>
274 p.1.right * p.2.right) :=
275 (continuous_permutationalWreathProduct_right.comp continuous_fst).mul
276 (continuous_permutationalWreathProduct_right.comp continuous_snd)
277 simpa using hleft.prodMk hright
280 [ContinuousInv A] [ContinuousInv G] [ContinuousSMul G S] :
281 ContinuousInv (PermutationalWreathProduct A S G) where
282 continuous_inv := by
283 refine continuous_induced_rng.2 ?_
284 change Continuous
285 (fun x : PermutationalWreathProduct A S G => (x⁻¹.left, x⁻¹.right))
286 have hleft :
287 Continuous
288 (fun x : PermutationalWreathProduct A S G =>
289 functionPrecomp x.right⁻¹ x.left⁻¹) :=
290 continuous_functionPrecomp.comp
291 ((continuous_permutationalWreathProduct_right.inv).prodMk
292 (continuous_permutationalWreathProduct_left.inv))
293 have hright :
294 Continuous (fun x : PermutationalWreathProduct A S G => x.right⁻¹) :=
295 continuous_permutationalWreathProduct_right.inv
296 simpa using hleft.prodMk hright
299 [IsTopologicalGroup A] [IsTopologicalGroup G] [ContinuousSMul G S] :
300 IsTopologicalGroup (PermutationalWreathProduct A S G) :=
301 { }
303end DiscreteIndex
305/-- The canonical inclusion of the function factor is continuous. -/
307 (S → A) →ₜ* PermutationalWreathProduct A S G where
308 toMonoidHom := SemidirectProduct.inl
309 continuous_toFun := by
310 refine continuous_induced_rng.2 ?_
311 change Continuous
312 (fun f : S → A =>
313 ((SemidirectProduct.inl f : PermutationalWreathProduct A S G).left,
314 (SemidirectProduct.inl f : PermutationalWreathProduct A S G).right))
315 simpa using (continuous_id.prodMk continuous_const)
317/-- The canonical inclusion of the right factor is continuous. -/
319 G →ₜ* PermutationalWreathProduct A S G where
320 toMonoidHom := SemidirectProduct.inr
321 continuous_toFun := by
322 refine continuous_induced_rng.2 ?_
323 change Continuous
324 (fun g : G =>
325 ((SemidirectProduct.inr g : PermutationalWreathProduct A S G).left,
326 (SemidirectProduct.inr g : PermutationalWreathProduct A S G).right))
327 simpa using (continuous_const.prodMk continuous_id)
329/-- The projection to the right factor is a continuous homomorphism. -/
331 PermutationalWreathProduct A S G →ₜ* G where
332 toMonoidHom := SemidirectProduct.rightHom
333 continuous_toFun := continuous_permutationalWreathProduct_right
335end Topology
337section ProCStructure
339open ProCGroups.ProC
341variable {C : FiniteGroupClass.{u}}
342variable {A : Type u} {S : Type u} {G : Type u}
343variable [Group A] [Group G] [MulAction G S] [Fintype S]
344variable [TopologicalSpace A] [TopologicalSpace S] [TopologicalSpace G]
345variable [IsTopologicalGroup A] [IsTopologicalGroup G]
346variable [ContinuousSMul G S]
348/-- The kernel of the right projection on a permutational wreath product. -/
350 Subgroup (PermutationalWreathProduct A S G) :=
351 (SemidirectProduct.rightHom : PermutationalWreathProduct A S G →* G).ker
353/-- The canonical inclusion of the function factor, with codomain restricted to the kernel of the
354right projection. -/
356 (S → A) →ₜ* permutationalWreathProductRightKernel (A := A) (S := S) (G := G) where
357 toMonoidHom :=
358 { toFun := fun f => ⟨SemidirectProduct.inl f, by simp only [permutationalWreathProductRightKernel, MonoidHom.mem_ker, SemidirectProduct.rightHom_inl]⟩
359 map_one' := by
360 apply Subtype.ext
362 map_mul' := by
363 intro f g
364 apply Subtype.ext
366 continuous_toFun :=
367 by
368 exact Continuous.subtype_mk
369 (permutationalWreathProductInlContinuousHom (A := A) (S := S) (G := G)).continuous_toFun
370 (by
371 intro f
372 change (permutationalWreathProductInlContinuousHom (A := A) (S := S) (G := G) f).right = 1
373 rfl)
375omit [Fintype S] [TopologicalSpace S] [IsTopologicalGroup A] [IsTopologicalGroup G]
376 [ContinuousSMul G S] in
378 Function.Bijective
379 ((permutationalWreathProductInlToKernelContinuousHom (A := A) (S := S) (G := G)) :
380 (S → A) → permutationalWreathProductRightKernel (A := A) (S := S) (G := G)) := by
381 constructor
382 · intro f g hfg
383 funext s
384 have hs := congrArg
385 (fun x : permutationalWreathProductRightKernel (A := A) (S := S) (G := G) =>
386 ((x : PermutationalWreathProduct A S G).left s)) hfg
387 simpa using hs
388 · intro x
389 refine ⟨x.1.left, ?_⟩
390 have hmem :
391 (SemidirectProduct.rightHom : PermutationalWreathProduct A S G →* G)
392 x.1 = 1 := by
393 exact x.2
394 have hright : x.1.right = 1 := by
395 simpa using hmem
396 apply Subtype.ext
397 apply SemidirectProduct.ext
398 · rfl
399 · change (SemidirectProduct.inl x.1.left : PermutationalWreathProduct A S G).right =
400 x.1.right
401 simp only [SemidirectProduct.right_inl, hright]
403/-- The kernel of the right projection is topologically isomorphic to the function factor. -/
404noncomputable def permutationalWreathProductInlKernelContinuousMulEquiv
405 [CompactSpace A] [T2Space A]
406 [CompactSpace G] [T2Space G]
407 [DiscreteTopology S] :
408 (S → A) ≃ₜ* permutationalWreathProductRightKernel (A := A) (S := S) (G := G) :=
409 ContinuousMulEquiv.ofBijectiveCompactToT2
410 (permutationalWreathProductInlToKernelContinuousHom (A := A) (S := S) (G := G))
411 (permutationalWreathProductInlToKernelContinuousHom (A := A) (S := S) (G := G)).continuous_toFun
412 (permutationalWreathProductInlToKernel_bijective (A := A) (S := S) (G := G))
414omit [Fintype S] in
415/-- A permutational wreath product over a finite right factor is pro-`C` whenever both factors are
418 (hForm : FiniteGroupClass.Formation C)
419 (hIso : FiniteGroupClass.IsomClosed C)
420 (hExt : FiniteGroupClass.ExtensionClosed C)
421 [Finite S]
422 [DiscreteTopology S]
423 (hA : IsProCGroup C A)
424 (hG : IsProCGroup C G) :
425 IsProCGroup C (PermutationalWreathProduct A S G) := by
426 let hFunc : IsProCGroup C (S → A) :=
427 IsProCGroup.pi (C := C) (α := S) (β := fun _ : S => A) hForm (fun _ => hA)
428 letI : CompactSpace A := IsProCGroup.compactSpace hA
429 letI : T2Space A := IsProCGroup.t2Space hA
430 letI : TotallyDisconnectedSpace A := IsProCGroup.totallyDisconnectedSpace hA
431 letI : CompactSpace G := IsProCGroup.compactSpace hG
432 letI : T2Space G := IsProCGroup.t2Space hG
433 letI : TotallyDisconnectedSpace G := IsProCGroup.totallyDisconnectedSpace hG
434 have hKernel :
435 IsProCGroup C (permutationalWreathProductRightKernel (A := A) (S := S) (G := G)) := by
436 let e :=
437 permutationalWreathProductInlKernelContinuousMulEquiv (A := A) (S := S) (G := G)
438 exact IsProCGroup.ofContinuousMulEquiv (C := C) hIso hForm.quotientClosed hFunc e
439 have hProf :
440 IsProfiniteGroup (PermutationalWreathProduct A S G) := by
441 exact ⟨inferInstance, inferInstance, inferInstance, inferInstance⟩
442 have hQuot :
443 IsProCGroup C
444 ((PermutationalWreathProduct A S G) ⧸
445 permutationalWreathProductRightKernel (A := A) (S := S) (G := G)) := by
446 let α : PermutationalWreathProduct A S G →* G :=
447 SemidirectProduct.rightHom
448 have hα : Continuous α := continuous_permutationalWreathProduct_right
449 have hαbar :
450 Continuous (QuotientGroup.kerLift α :
451 (PermutationalWreathProduct A S G) ⧸ α.ker →* G) := by
452 simpa [QuotientGroup.kerLift, QuotientGroup.lift] using
453 hα.quotient_lift (fun a b hab => by
454 simpa [QuotientGroup.con_ker_eq_conKer α, Con.ker_rel] using hab)
455 let αbar : ((PermutationalWreathProduct A S G) ⧸ α.ker) →ₜ* G :=
456 { toMonoidHom := QuotientGroup.kerLift α
457 continuous_toFun := hαbar }
458 have hαbar_bij : Function.Bijective αbar := by
459 constructor
460 · exact QuotientGroup.kerLift_injective α
461 · intro g
462 rcases (SemidirectProduct.rightHom_surjective
463 (N := (S → A)) (G := G)
464 (φ := mulAutArrow (G := G) (A := S) (M := A)) g) with ⟨x, rfl⟩
465 refine ⟨QuotientGroup.mk' α.ker x, ?_⟩
466 change α x = x.right
467 rfl
468 let e : ((PermutationalWreathProduct A S G) ⧸ α.ker) ≃ₜ* G :=
469 ContinuousMulEquiv.ofBijectiveCompactToT2 αbar αbar.continuous_toFun hαbar_bij
470 exact IsProCGroup.ofContinuousMulEquiv (C := C) hIso hForm.quotientClosed hG e.symm
471 exact IsProCGroup.extension (C := C) hIso hForm.quotientClosed hExt hProf
472 (permutationalWreathProductRightKernel (A := A) (S := S) (G := G))
473 hKernel hQuot
475end ProCStructure
477section BasicLemmas
479variable {A : Type u} {S : Type v} {G : Type w}
480variable [Group A] [Group G] [MulAction G S]
482/-- Pointwise multiplication formula in the permutational wreath product. -/
483@[simp] theorem permutationalWreathProduct_mul_left_apply
484 (x y : PermutationalWreathProduct A S G) (s : S) :
485 (x * y).left s = x.left s * y.left (x.right⁻¹ • s) :=
486 rfl
488/-- Pointwise inversion formula in the permutational wreath product. -/
489@[simp] theorem permutationalWreathProduct_inv_left_apply
490 (x : PermutationalWreathProduct A S G) (s : S) :
491 x⁻¹.left s = (x.left (x.right • s))⁻¹ := by
492 change ((mulAutArrow (G := G) (A := S) (M := A) x.right⁻¹) (x.left⁻¹)) s =
493 (x.left (x.right • s))⁻¹
494 change x.left⁻¹ ((x.right⁻¹)⁻¹ • s) = (x.left (x.right • s))⁻¹
497@[simp] theorem permutationalWreathProduct_inl_left_apply
498 (f : S → A) (s : S) :
499 (SemidirectProduct.inl f : PermutationalWreathProduct A S G).left s = f s :=
500 rfl
502@[simp] theorem permutationalWreathProduct_inr_left_apply
503 (g : G) (s : S) :
504 (SemidirectProduct.inr g : PermutationalWreathProduct A S G).left s = 1 :=
505 rfl
507@[simp] theorem permutationalWreathProduct_rightHom_comp_inr :
508 (SemidirectProduct.rightHom :
509 PermutationalWreathProduct A S G →* G).comp SemidirectProduct.inr =
510 MonoidHom.id G := by
511 ext g
512 rfl
514end BasicLemmas
516section LeftFactorFunctoriality
518variable {A : Type u} {B : Type v} {S : Type w} {G : Type*}
519variable [Group A] [Group B] [Group G] [MulAction G S]
521/-- Pointwise application of a group homomorphism to the function factor of a wreath product. -/
522def permutationalWreathProductMapFun (α : A →* B) : (S → A) →* (S → B) where
523 toFun f := α ∘ f
524 map_one' := by
525 funext s
527 map_mul' f g := by
528 funext s
531/-- Functoriality of the permutational wreath product in the left factor. -/
532def permutationalWreathProductMapLeft (α : A →* B) :
533 PermutationalWreathProduct A S G →* PermutationalWreathProduct B S G :=
534 SemidirectProduct.map (permutationalWreathProductMapFun (S := S) α) (MonoidHom.id G) fun g => by
535 ext f s
536 rfl
538@[simp] theorem permutationalWreathProductMapLeft_left_apply
539 (α : A →* B) (x : PermutationalWreathProduct A S G) (s : S) :
540 (permutationalWreathProductMapLeft (S := S) (G := G) α x).left s = α (x.left s) :=
541 rfl
543@[simp] theorem permutationalWreathProductMapLeft_right
544 (α : A →* B) (x : PermutationalWreathProduct A S G) :
545 (permutationalWreathProductMapLeft (S := S) (G := G) α x).right = x.right :=
546 rfl
548/-- Injectivity of the left-factor map is inherited by the wreath-product map. -/
550 (α : A →* B) (hα : Function.Injective α) :
551 Function.Injective (permutationalWreathProductMapLeft (S := S) (G := G) α) := by
552 intro x y hxy
553 ext s
554 · apply hα
555 simpa using congrArg (fun z : PermutationalWreathProduct B S G => z.left s) hxy
556 · simpa using congrArg (fun z : PermutationalWreathProduct B S G => z.right) hxy
558/-- Surjectivity of the left-factor map is inherited by the wreath-product map. -/
560 (α : A →* B) (hα : Function.Surjective α) :
561 Function.Surjective (permutationalWreathProductMapLeft (S := S) (G := G) α) := by
562 classical
563 intro x
564 let f : S → A := fun s => Classical.choose (hα (x.left s))
565 refine ⟨⟨f, x.right⟩, ?_⟩
566 ext s
567 · exact Classical.choose_spec (hα (x.left s))
568 · rfl
570/-- If the wreath-product left-factor map is injective, then the original left-factor map is
571injective. A chosen point of `Σ` extracts the relevant coordinate. -/
573 (α : A →* B) (s : S)
574 (hα : Function.Injective (permutationalWreathProductMapLeft (S := S) (G := G) α)) :
575 Function.Injective α := by
576 intro a b hab
577 have hEq :
578 permutationalWreathProductMapLeft (S := S) (G := G) α
579 (SemidirectProduct.inl (fun _ : S => a) : PermutationalWreathProduct A S G) =
580 permutationalWreathProductMapLeft (S := S) (G := G) α
581 (SemidirectProduct.inl (fun _ : S => b) : PermutationalWreathProduct A S G) := by
582 ext t
583 · exact hab
584 · rfl
585 have hPre := hα hEq
586 have := congrArg (fun z : PermutationalWreathProduct A S G => z.left s) hPre
587 simpa using this
589/-- If the wreath-product left-factor map is surjective, then the original left-factor map is
590surjective. A chosen point of `Σ` extracts the relevant coordinate. -/
592 (α : A →* B) (s : S)
593 (hα : Function.Surjective (permutationalWreathProductMapLeft (S := S) (G := G) α)) :
594 Function.Surjective α := by
595 intro b
596 obtain ⟨x, hx⟩ :=
597 hα (SemidirectProduct.inl (fun _ : S => b) : PermutationalWreathProduct B S G)
598 refine ⟨x.left s, ?_⟩
599 have := congrArg (fun z : PermutationalWreathProduct B S G => z.left s) hx
600 simpa using this
602end LeftFactorFunctoriality
604section LeftFactorFunctorialityTopological
606variable {A : Type u} {B : Type v} {S : Type w} {G : Type*}
607variable [Group A] [Group B] [Group G] [MulAction G S]
608variable [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace G]
610/-- Functoriality of the permutational wreath product in the left factor, upgraded to a continuous
611homomorphism. -/
613 (α : A →ₜ* B) :
614 PermutationalWreathProduct A S G →ₜ* PermutationalWreathProduct B S G where
615 toMonoidHom := permutationalWreathProductMapLeft (S := S) (G := G) α.toMonoidHom
616 continuous_toFun := by
617 refine continuous_induced_rng.2 ?_
618 change Continuous
619 (fun x : PermutationalWreathProduct A S G =>
620 ((permutationalWreathProductMapLeft (S := S) (G := G) α.toMonoidHom x).left,
621 (permutationalWreathProductMapLeft (S := S) (G := G) α.toMonoidHom x).right))
622 have hleft :
623 Continuous
624 (fun x : PermutationalWreathProduct A S G =>
625 (permutationalWreathProductMapLeft (S := S) (G := G) α.toMonoidHom x).left) := by
626 refine continuous_pi ?_
627 intro s
628 simpa using α.continuous_toFun.comp
629 ((continuous_apply s).comp continuous_permutationalWreathProduct_left)
630 have hright :
631 Continuous
632 (fun x : PermutationalWreathProduct A S G =>
633 (permutationalWreathProductMapLeft (S := S) (G := G) α.toMonoidHom x).right) := by
634 simpa using continuous_permutationalWreathProduct_right
635 exact hleft.prodMk hright
637end LeftFactorFunctorialityTopological
639section StandardEmbedding
641variable {G : Type u} [Group G]
642variable (H : Subgroup G)
644instance instMulActionRightCosetStandardEmbedding :
645 MulAction G (Quotient (QuotientGroup.rightRel H)) :=
646 rightCosetMulAction H
648/-- The underlying section attached to a right transversal. -/
649noncomputable def rightTransversalSection {T : Set G}
650 (hT : Subgroup.IsComplement (H : Set G) T) :
651 Quotient (QuotientGroup.rightRel H) → G :=
652 fun q => (hT.rightQuotientEquiv q : G)
654@[simp] theorem rightTransversalSection_spec {T : Set G}
655 (hT : Subgroup.IsComplement (H : Set G) T)
656 (q : Quotient (QuotientGroup.rightRel H)) :
657 Quotient.mk'' (rightTransversalSection (H := H) hT q) = q :=
658 hT.mk''_rightQuotientEquiv q
660/-- The cocycle attached to a section of the right quotient by `H`. -/
661noncomputable def rightQuotientSectionCocycle
662 (τ : Quotient (QuotientGroup.rightRel H) → G)
663 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
664 (g : G) :
665 Quotient (QuotientGroup.rightRel H) → H := by
666 letI := rightCosetMulAction H
667 intro q
668 refine ⟨τ q * g * (τ (g⁻¹ • q))⁻¹, ?_⟩
669 have hq :
670 Quotient.mk'' (τ q * g) = g⁻¹ • q := by
671 calc
672 Quotient.mk'' (τ q * g)
673 = g⁻¹ • (Quotient.mk'' (τ q) : Quotient (QuotientGroup.rightRel H)) := by
674 symm
675 rw [rightCosetMulAction_inv_mk_smul (H := H) g (τ q)]
676 _ = g⁻¹ • q := by rw [hτ q]
677 have hEq :
678 (Quotient.mk'' (τ q * g) : Quotient (QuotientGroup.rightRel H)) =
679 Quotient.mk'' (τ (g⁻¹ • q)) := by
680 calc
681 (Quotient.mk'' (τ q * g) : Quotient (QuotientGroup.rightRel H))
682 = g⁻¹ • q := hq
683 _ = Quotient.mk'' (τ (g⁻¹ • q)) := by symm; exact hτ (g⁻¹ • q)
684 have hrel : QuotientGroup.rightRel H (τ q * g) (τ (g⁻¹ • q)) := Quotient.exact' hEq
685 rw [QuotientGroup.rightRel_apply] at hrel
686 simpa [mul_inv_rev] using H.inv_mem hrel
688/-- The standard wreath-product embedding attached to a section of the right quotient by `H`. -/
689noncomputable def rightQuotientSectionEmbedding
690 (τ : Quotient (QuotientGroup.rightRel H) → G)
691 (hτ : ∀ q, Quotient.mk'' (τ q) = q) :
692 G →* PermutationalWreathProduct H (Quotient (QuotientGroup.rightRel H)) G where
693 toFun g := ⟨rightQuotientSectionCocycle (H := H) τ hτ g, g⟩
694 map_one' := by
695 apply SemidirectProduct.ext
696 · funext q
697 apply Subtype.ext
698 simp only [rightQuotientSectionCocycle, mul_one, inv_one, one_smul, mul_inv_cancel,
699 SemidirectProduct.one_left, Pi.one_apply, OneMemClass.coe_one]
700 · rfl
701 map_mul' g₁ g₂ := by
702 apply SemidirectProduct.ext
703 · funext q
704 apply Subtype.ext
705 simp only [rightQuotientSectionCocycle, mul_inv_rev, mul_smul, mul_assoc, SemidirectProduct.mk_eq_inl_mul_inr,
706 permutationalWreathProduct_mul_left_apply, permutationalWreathProduct_inl_left_apply, SemidirectProduct.right_inl,
707 inv_one, one_smul, permutationalWreathProduct_inr_left_apply, SemidirectProduct.right_inr, mul_one, one_mul,
708 MulMemClass.mk_mul_mk, inv_mul_cancel_left]
709 · rfl
711/-- Pointwise formula for the standard wreath-product embedding attached to a right-quotient
712section. -/
713@[simp] theorem rightQuotientSectionEmbedding_left_apply
714 (τ : Quotient (QuotientGroup.rightRel H) → G)
715 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
716 (g : G) (q : Quotient (QuotientGroup.rightRel H)) :
717 (rightQuotientSectionEmbedding (H := H) τ hτ g).left q =
718 rightQuotientSectionCocycle (H := H) τ hτ g q :=
719 rfl
721@[simp] theorem rightQuotientSectionEmbedding_right
722 (τ : Quotient (QuotientGroup.rightRel H) → G)
723 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
724 (g : G) :
725 (rightQuotientSectionEmbedding (H := H) τ hτ g).right = g :=
726 rfl
728@[simp] theorem rightQuotientSectionEmbedding_rightHom
729 (τ : Quotient (QuotientGroup.rightRel H) → G)
730 (hτ : ∀ q, Quotient.mk'' (τ q) = q) :
731 (SemidirectProduct.rightHom :
732 PermutationalWreathProduct H (Quotient (QuotientGroup.rightRel H)) G →* G).comp
733 (rightQuotientSectionEmbedding (H := H) τ hτ) = MonoidHom.id G := by
734 ext g
735 rfl
737/-- The standard embedding attached to a right-quotient section is injective. -/
739 (τ : Quotient (QuotientGroup.rightRel H) → G)
740 (hτ : ∀ q, Quotient.mk'' (τ q) = q) :
741 Function.Injective (rightQuotientSectionEmbedding (H := H) τ hτ) := by
742 intro g₁ g₂ hEq
743 simpa using congrArg
744 (fun z :
745 PermutationalWreathProduct H (Quotient (QuotientGroup.rightRel H)) G => z.right) hEq
747end StandardEmbedding
749section StandardEmbeddingTopological
751variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
752variable (H : Subgroup G)
755 MulAction G (Quotient (QuotientGroup.rightRel H)) :=
756 rightCosetMulAction H
759 [TopologicalSpace (Quotient (QuotientGroup.rightRel H))]
760 [DiscreteTopology (Quotient (QuotientGroup.rightRel H))]
761 (hH : IsOpen (H : Set G))
762 (τ : Quotient (QuotientGroup.rightRel H) → G)
763 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
764 (hτcont : Continuous τ) :
765 Continuous
766 (rightQuotientSectionEmbedding (H := H) τ hτ :
767 G → PermutationalWreathProduct H (Quotient (QuotientGroup.rightRel H)) G) := by
768 refine continuous_induced_rng.2 ?_
769 change Continuous fun g : G =>
770 ((rightQuotientSectionEmbedding (H := H) τ hτ g).left,
771 (rightQuotientSectionEmbedding (H := H) τ hτ g).right)
772 have hleft :
773 Continuous fun g : G =>
774 (rightQuotientSectionEmbedding (H := H) τ hτ g).left := by
775 refine continuous_pi ?_
776 intro q
777 refine Continuous.subtype_mk ?_ ?_
778 have hqcont :
779 Continuous fun g : G => (g⁻¹ • q : Quotient (QuotientGroup.rightRel H)) :=
780 continuous_rightCosetMulAction_inv_smul_of_open (G := G) H hH q
781 have hcont :
782 Continuous fun g : G => τ q * g * (τ (g⁻¹ • q))⁻¹ := by
783 exact (continuous_const.mul continuous_id).mul ((hτcont.comp hqcont).inv)
784 simpa [rightQuotientSectionEmbedding, rightQuotientSectionCocycle, mul_assoc] using hcont
785 have hright :
786 Continuous fun g : G =>
787 (rightQuotientSectionEmbedding (H := H) τ hτ g).right := by
788 simpa using (continuous_id : Continuous fun g : G => g)
789 exact hleft.prodMk hright
791end StandardEmbeddingTopological
793section CocycleFormulas
795variable {A : Type u} {S : Type v} {G : Type w}
796variable [Group A] [Group G] [MulAction G S]
798/-- The left coordinate of an element of a wreath product, viewed as a function of the group
799element on the source. -/
801 (ψ : G →* PermutationalWreathProduct A S G) (s : S) : G → A :=
802 fun g => (ψ g).left s
804/-- The cocycle formula for the left coordinates of a homomorphism into a wreath product whose
805right factor is the identity. -/
806theorem wreathLeftCoordinate_mul
807 (ψ : G →* PermutationalWreathProduct A S G)
808 (hψ :
809 (SemidirectProduct.rightHom : PermutationalWreathProduct A S G →* G).comp ψ =
810 MonoidHom.id G)
811 (s : S) (g₁ g₂ : G) :
812 wreathLeftCoordinate ψ s (g₁ * g₂) =
813 wreathLeftCoordinate ψ s g₁ *
814 wreathLeftCoordinate ψ (g₁⁻¹ • s) g₂ := by
815 have hright : (ψ g₁).right = g₁ := by
816 simpa using congrArg (fun f : G →* G => f g₁) hψ
817 simp only [wreathLeftCoordinate, map_mul, permutationalWreathProduct_mul_left_apply, hright]
819/-- Inversion formula for the left coordinates of a homomorphism into a wreath product whose
820right factor is the identity. -/
821theorem wreathLeftCoordinate_inv
822 (ψ : G →* PermutationalWreathProduct A S G)
823 (hψ :
824 (SemidirectProduct.rightHom : PermutationalWreathProduct A S G →* G).comp ψ =
825 MonoidHom.id G)
826 (s : S) (g : G) :
827 wreathLeftCoordinate ψ s g⁻¹ =
828 (wreathLeftCoordinate ψ (g • s) g)⁻¹ := by
829 have hright : (ψ g).right = g := by
830 simpa using congrArg (fun f : G →* G => f g) hψ
831 simp only [wreathLeftCoordinate, map_inv, permutationalWreathProduct_inv_left_apply, hright]
833end CocycleFormulas
835section RightQuotientCoordinateRecovery
837variable {A : Type u} {G : Type v}
838variable [Group A] [Group G]
839variable (H : Subgroup G)
841instance instMulActionRightCosetCoordinateRecovery :
842 MulAction G (Quotient (QuotientGroup.rightRel H)) :=
843 rightCosetMulAction H
845/-- Basepoint form: if a homomorphism into the wreath product has identity right
846factor and sends the chosen section to elements whose basepoint coordinate is trivial, then the
849 (τ : Quotient (QuotientGroup.rightRel H) → G)
850 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
851 (ψ : G →* PermutationalWreathProduct A (Quotient (QuotientGroup.rightRel H)) G)
852 (hψ :
853 (SemidirectProduct.rightHom :
854 PermutationalWreathProduct A (Quotient (QuotientGroup.rightRel H)) G →* G).comp ψ =
855 MonoidHom.id G)
856 (hτpure :
857 ∀ q : Quotient (QuotientGroup.rightRel H),
859 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) (τ q) = 1)
860 (g : G) (q : Quotient (QuotientGroup.rightRel H)) :
862 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))
863 (rightQuotientSectionCocycle (H := H) τ hτ g q) =
864 wreathLeftCoordinate ψ q g := by
865 let q' : Quotient (QuotientGroup.rightRel H) := g⁻¹ • q
866 have hτq :
867 (τ q)⁻¹ • (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) = q := by
868 rw [rightCosetMulAction_inv_mk_smul (H := H) (τ q) 1]
869 simpa using hτ q
870 have hτq' :
871 τ q' • q' = (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) := by
872 calc
873 τ q' • q' = τ q' • (Quotient.mk'' (τ q') : Quotient (QuotientGroup.rightRel H)) := by
874 rw [hτ q']
875 _ = Quotient.mk'' (1 : G) := by
876 rw [rightCosetMulAction_mk_smul (H := H) (τ q') (τ q')]
877 simp only [mul_inv_cancel]
878 have hinv :
879 wreathLeftCoordinate ψ q' (τ q')⁻¹ = 1 := by
880 rw [wreathLeftCoordinate_inv (ψ := ψ) hψ q' (τ q')]
881 simpa [hτq'] using hτpure q'
882 have hq' :
883 (Quotient.mk'' (τ q * g) : Quotient (QuotientGroup.rightRel H)) = q' := by
884 calc
885 (Quotient.mk'' (τ q * g) : Quotient (QuotientGroup.rightRel H))
886 = (τ q * g)⁻¹ • (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) := by
888 _ = g⁻¹ • ((τ q)⁻¹ • (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))) := by
890 _ = g⁻¹ • q := by rw [hτq]
891 _ = q' := rfl
892 change
894 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))
895 ((τ q * g) * (τ q')⁻¹) =
896 wreathLeftCoordinate ψ q g
897 rw [wreathLeftCoordinate_mul (ψ := ψ) hψ
898 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))
899 (τ q * g) (τ q')⁻¹]
900 rw [wreathLeftCoordinate_mul (ψ := ψ) hψ
901 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))
902 (τ q) g]
903 simp only [hτpure, hτq, one_mul, mul_inv_rev, rightCosetMulAction_mk_smul, inv_inv, hq', hinv, mul_one, q']
905/-- Basepoint evaluation on the stabilizer subgroup of the trivial right coset, expressed for a
906homomorphism into the wreath product whose right factor is the identity. -/
908 (ψ : G →* PermutationalWreathProduct A (Quotient (QuotientGroup.rightRel H)) G)
909 (hψ :
910 (SemidirectProduct.rightHom :
911 PermutationalWreathProduct A (Quotient (QuotientGroup.rightRel H)) G →* G).comp ψ =
912 MonoidHom.id G) :
913 H →* A where
914 toFun h :=
916 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) h.1
917 map_one' := by
918 simp only [wreathLeftCoordinate, OneMemClass.coe_one, map_one, SemidirectProduct.one_left, Pi.one_apply]
919 map_mul' a b := by
920 change
922 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))
923 (a.1 * b.1) =
925 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) a.1 *
927 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) b.1
928 rw [wreathLeftCoordinate_mul (ψ := ψ) hψ
929 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) a.1 b.1]
930 have ha :
931 a.1⁻¹ • (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) =
932 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) := by
933 rw [rightCosetMulAction_inv_mk_smul (H := H) a.1 1]
934 apply Quotient.sound'
935 rw [QuotientGroup.rightRel_apply]
936 simp only [one_mul, H.inv_mem a.2]
937 simp only [ha]
939/-- The basepoint projection on `H` evaluates the section cocycle by the corresponding left
940coordinate, provided the chosen section has trivial basepoint coordinate. -/
942 (τ : Quotient (QuotientGroup.rightRel H) → G)
943 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
944 (ψ : G →* PermutationalWreathProduct A (Quotient (QuotientGroup.rightRel H)) G)
945 (hψ :
946 (SemidirectProduct.rightHom :
947 PermutationalWreathProduct A (Quotient (QuotientGroup.rightRel H)) G →* G).comp ψ =
948 MonoidHom.id G)
949 (hτpure :
950 ∀ q : Quotient (QuotientGroup.rightRel H),
952 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) (τ q) = 1)
953 (g : G) (q : Quotient (QuotientGroup.rightRel H)) :
954 rightQuotientBasepointProjectionHom (H := H) ψ hψ
955 (rightQuotientSectionCocycle (H := H) τ hτ g q) =
956 wreathLeftCoordinate ψ q g :=
958 (H := H) τ hτ ψ hψ hτpure g q
960end RightQuotientCoordinateRecovery
962section StabilizerProjection
964variable {A : Type u} {S : Type v} {G : Type w}
965variable [Group A] [Group G] [MulAction G S]
967/-- Evaluation at a fixed point is a homomorphism on the wreath product over the stabilizer of
968that point. -/
969def wreathStabilizerProjection (s : S) :
970 PermutationalWreathProduct A S (MulAction.stabilizer G s) →* A where
971 toFun x := x.left s
972 map_one' := rfl
973 map_mul' x y := by
974 have hx : x.right⁻¹ • s = s := by
975 exact MulAction.mem_stabilizer_iff.mp x.right⁻¹.2
976 simp only [permutationalWreathProduct_mul_left_apply, hx]
978@[simp] theorem wreathStabilizerProjection_apply
979 (s : S) (x : PermutationalWreathProduct A S (MulAction.stabilizer G s)) :
980 wreathStabilizerProjection (A := A) (G := G) s x = x.left s :=
981 rfl
983/-- The stabilizer projection is natural in the left factor. -/
984@[simp] theorem wreathStabilizerProjection_mapLeft
985 {B : Type*} [Group B]
986 (α : A →* B) (s : S)
987 (x : PermutationalWreathProduct A S (MulAction.stabilizer G s)) :
988 wreathStabilizerProjection (A := B) (G := G) s
990 (S := S) (G := MulAction.stabilizer G s) α x) =
991 α (wreathStabilizerProjection (A := A) (G := G) s x) := by
992 rfl
994section RightQuotientBasepoint
996variable {H : Subgroup G}
998/-- Basepoint form: on the subgroup `H`, the left coordinate of the standard
999embedding at the trivial right coset is the given element, provided the section is normalized at
1000the basepoint. -/
1001@[simp 900] theorem rightQuotientSectionEmbedding_left_basepoint_of_mem
1002 (τ : Quotient (QuotientGroup.rightRel H) → G)
1003 (hτ : ∀ q, Quotient.mk'' (τ q) = q)
1004 (hτ1 : τ (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) = 1)
1005 {g : G} (hg : g ∈ H) :
1006 (rightQuotientSectionEmbedding (H := H) τ hτ g).left
1007 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) =
1008 ⟨g, hg⟩ := by
1009 letI := rightCosetMulAction H
1010 apply Subtype.ext
1011 have hq :
1012 (g⁻¹ •
1013 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H))) =
1014 (Quotient.mk'' (1 : G) : Quotient (QuotientGroup.rightRel H)) := by
1015 rw [rightCosetMulAction_mk_smul (H := H) g⁻¹ 1]
1016 apply Quotient.sound'
1017 rw [QuotientGroup.rightRel_apply]
1018 simpa using hg
1019 simp only [rightQuotientSectionEmbedding, SemidirectProduct.mk_eq_inl_mul_inr, MonoidHom.coe_mk,
1020 OneHom.coe_mk, permutationalWreathProduct_mul_left_apply, permutationalWreathProduct_inl_left_apply,
1021 rightQuotientSectionCocycle, hτ1, one_mul, hq, inv_one, mul_one, SemidirectProduct.right_inl, one_smul,
1024end RightQuotientBasepoint
1026end StabilizerProjection
1028end ProCGroups.WreathProducts