1-- Images of sets and powers under a group action commute with2-- conjugation, in general and for SO3 acting on the sphere3-- Part of Cumulus, the Grace17 mathematics library.4-- Copyright (c) 2026 Grant Passmore.5-- Released under the Apache License 2.0. See LICENSE in the repository root.6-- Authors: Grant Passmore78module Grace.Cumulus.Geometry.Sphere.Conjugate9import Geometry.Absorption.Pieces1011section Images12variable (act G X : Set)13hypothesis action : act : G ↷ X1415theorem actImage.mul (g h : G) (D : Set)16requires subset : D ⊆ X17shows actImage(act, g * h, D) = actImage(act, g, actImage(act, h, D))18proof19have group := Action.group with action20have inner := actImage.subset at act, G, X, h, D with action, subset21have merged := translate.mul at act, G, X, g, h, D with action, subset22have outer := actImage.eq_translate at act, G, X, g * h, D with action, subset23have first := actImage.eq_translate at act, G, X, h, D with action, subset24have second := actImage.eq_translate at act, G, X, g, actImage(act, h, D)25with action, inner26rw [← outer, ← second, ← first]27exact merged2829theorem actImage.inv_image (g : G) (D : Set)30requires subset : D ⊆ X31shows actImage(act, g⁻¹, actImage(act, g, D)) = D32proof33have group := Action.group with action34have inner := actImage.subset at act, G, X, g, D with action, subset35have cancel := translate.inv_translate at act, G, X, g, D with action, subset36have first := actImage.eq_translate at act, G, X, g, D with action, subset37have second := actImage.eq_translate at act, G, X, g⁻¹, actImage(act, g, D)38with action, inner39rw [← second, ← first]40exact cancel4142theorem actImage.disjoint (g : G) (A B : Set)43requires subsetA : A ⊆ X44requires subsetB : B ⊆ X45requires disjoint : Disjoint(A, B)46shows Disjoint(actImage(act, g, A), actImage(act, g, B))47proof48have moved := translate.disjoint at act, G, X, g, A, B49with action, subsetA, subsetB, disjoint50have first := actImage.eq_translate at act, G, X, g, A with action, subsetA51have second := actImage.eq_translate at act, G, X, g, B with action, subsetB52rw [← first, ← second]53exact moved5455theorem actImage.conjugation (g x : G) (D : Set)56requires subset : D ⊆ X57shows actImage(act, g⁻¹ * x * g, D) =58 actImage(act, g⁻¹, actImage(act, x, actImage(act, g, D)))59proof60have group := Action.group with action61have inverse : g⁻¹ ∈ G.carrier := Group.inv_mem with group62have product : g⁻¹ * x ∈ G.carrier := Group.mul_mem with group63have inner := actImage.subset at act, G, X, g, D with action, subset64have first := actImage.mul at act, G, X, g⁻¹ * x, g, D with action, subset65have second := actImage.mul at act, G, X, g⁻¹, x, actImage(act, g, D)66with action, inner67rw [first, second]68rfl6970end Images7172section Powers73variable (G : Set)74hypothesis group : Group(G)7576theorem pow.conjugation (g x : G) (n : Nat)77shows (g⁻¹ * x * g) ^ n = g⁻¹ * x ^ n * g78proof79induction n80| zero =>81have inverse : g⁻¹ ∈ G.carrier := Group.inv_mem with group82have product : g⁻¹ * x ∈ G.carrier := Group.mul_mem with group83have conjugate : g⁻¹ * x * g ∈ G.carrier := Group.mul_mem with group84haveleft:= pow_zero at G, g⁻¹ * x * g with group85haveright:= pow_zero at G, x with group86have unit := mul_one at G, g⁻¹ with group87have cancel := Group.inv_mul at G, g with group88rw [left, right, unit, cancel]89rfl90| k +1using ih =>91have inverse : g⁻¹ ∈ G.carrier := Group.inv_mem with group92have product : g⁻¹ * x ∈ G.carrier := Group.mul_mem with group93have conjugate : g⁻¹ * x * g ∈ G.carrier := Group.mul_mem with group94have power : x ^ k ∈ G.carrier := Group.pow_mem with group95have powerG : x ^ k * g ∈ G.carrier := Group.mul_mem with group96haveleft:= pow_succ_left at G, g⁻¹ * x * g, k with group97haveright:= pow_succ_left at G, x, k with group98rw [left, right, ih]99have assoc1 := mul_assoc at G, g⁻¹ * x, g, g⁻¹ * x ^ k * g with group100have assoc2 := mul_assoc at G, g⁻¹, x ^ k, g with group101have cancel := mul_inv_cancel_left at G, g, x ^ k * g with group102have assoc3 := mul_assoc at G, g⁻¹, x, x ^ k * g with group103have assoc4 := mul_assoc at G, x, x ^ k, g with group104have assoc5 := mul_assoc at G, g⁻¹, x * x ^ k, g with group105rw [assoc1, assoc2, cancel, assoc3, ← assoc4, ← assoc5]106rfl107108end Powers109110-- Conjugation in SO3 acting on the sphere: the image of D ⊆ S² under111-- σ⁻¹ ρ σ, and the powers of a conjugate.112theorem actImage.conjugate (σ ρ D : Set)113requires hσ : σ ∈ so3Matrices114requires hρ : ρ ∈ so3Matrices115requires subset : D ⊆ S²116shows actImage(sphereAction, SO3.mul(SO3.mul(SO3.inv(σ), ρ), σ), D) =117 actImage(sphereAction, SO3.inv(σ),118 actImage(sphereAction, ρ, actImage(sphereAction, σ, D)))119proof120have action := sphereAction.action121have σIn : σ ∈ Group.carrier(SO3)122rw SO3.carrierOf123exact hσ124have ρIn : ρ ∈ Group.carrier(SO3)125rw SO3.carrierOf126exact hρ127exact actImage.conjugation at sphereAction, SO3, S², σ, ρ, D128with action, subset129130theorem so3.pow_conjugate (σ ρ : Set) (n : Nat)131requires hσ : σ ∈ so3Matrices132requires hρ : ρ ∈ so3Matrices133shows groupPow(SO3, SO3.mul(SO3.mul(SO3.inv(σ), ρ), σ), n) =134 SO3.mul(SO3.mul(SO3.inv(σ), groupPow(SO3, ρ, n)), σ)135proof136have group := SO3.group137have σIn : σ ∈ Group.carrier(SO3)138rw SO3.carrierOf139exact hσ140have ρIn : ρ ∈ Group.carrier(SO3)141rw SO3.carrierOf142exact hρ143exact pow.conjugation at SO3, σ, ρ, n with group144