diff options
| author | Hannes Schulze <haschu0103@outlook.de> | 2025-10-23 22:32:44 +0200 |
|---|---|---|
| committer | Hannes Schulze <haschu0103@outlook.de> | 2025-10-23 22:32:44 +0200 |
| commit | 4cb79d58996f2601f886a7185e89fa6dd71579e1 (patch) | |
| tree | c47f846649a2b9e7fddab12ecd3f30f1e79e64b8 /Nominal/Equivariance.lean | |
| parent | f95c4f2bd8a88c4b4b35e77fc45f0f1036d10c9e (diff) | |
add forgetful functors
Diffstat (limited to 'Nominal/Equivariance.lean')
| -rw-r--r-- | Nominal/Equivariance.lean | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/Nominal/Equivariance.lean b/Nominal/Equivariance.lean index c9a5261..ac50519 100644 --- a/Nominal/Equivariance.lean +++ b/Nominal/Equivariance.lean @@ -71,11 +71,11 @@ lemma id_equivariant : Equivariant πΈ (id : X β X) := by simp [Equivariant] /-- The composition of two equivariant functions is equivariant. -/ -lemma comp_equivariant {f : X β Y} {g : Y β Z} : Equivariant πΈ f β Equivariant πΈ g β Equivariant πΈ (g β f) := by +lemma comp_equivariant {f : Y β Z} {g : X β Y} : Equivariant πΈ f β Equivariant πΈ g β Equivariant πΈ (f β g) := by intro hf hg x Ο calc - g (f (Ο β’ x)) = g (Ο β’ f x) := by rw [hf] - _ = Ο β’ (g (f x)) := by rw [hg] + f (g (Ο β’ x)) = f (Ο β’ g x) := by rw [hg] + _ = Ο β’ (f (g x)) := by rw [hf] /-- The subset relation is equivariant. -/ lemma subset_equivariant : EquivariantRelation πΈ (Set.Subset : Set X β Set X β Prop) := by @@ -183,3 +183,49 @@ lemma NominalSet.supp_equivariant : Equivariant πΈ (supp πΈ : X β Set πΈ exact hS.out.right end Nominal + +/-! +## Bundled Functions + +In the following, we also define a bundled function type for equivariant functions. +-/ +section BundledFunction + +/-- A function carrying a proof of its equivariance. -/ +structure EquivariantMap (X Y : Type) [PermSet πΈ X] [PermSet πΈ Y] where + /-- The underlying function. -/ + toFun : X β Y + /-- Proof of equivariance. -/ + equivariant : Equivariant πΈ toFun + +/-- We write `X ββ Y` or `X ββ[πΈ] Y` for an equivariant map X β Y. -/ +infixr:25 " ββ " => EquivariantMap _ + +/-- We write `X ββ Y` or `X ββ[πΈ] Y` for an equivariant map X β Y. -/ +notation:25 X " ββ[" A "] " Y => EquivariantMap A X Y + +variable {X Y Z : Type} [PermSet πΈ X] [PermSet πΈ Y] [PermSet πΈ Z] + +instance : FunLike (X ββ[πΈ] Y) X Y where + coe := EquivariantMap.toFun + coe_injective' f g h := by cases f; cases g; congr + +namespace EquivariantMap + +/-- The identity function. -/ +def id : X ββ[πΈ] X := β¨_root_.id, id_equivariant πΈβ© + +/-- Function composition. -/ +def comp (f : Y ββ[πΈ] Z) (g : X ββ[πΈ] Y) : X ββ[πΈ] Z := β¨f β g, comp_equivariant πΈ f.equivariant g.equivariantβ© + +@[simp] +lemma toFun_eq_coe {f : X ββ[πΈ] Y} : f.toFun = (f : X β Y) := + rfl + +@[ext] +lemma ext {f g : X ββ[πΈ] Y} (h : β a, f a = g a) : f = g := + DFunLike.ext _ _ h + +end EquivariantMap + +end BundledFunction |
