From 4cb79d58996f2601f886a7185e89fa6dd71579e1 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Thu, 23 Oct 2025 22:32:44 +0200 Subject: add forgetful functors --- Nominal/Equivariance.lean | 52 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'Nominal/Equivariance.lean') 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 -- cgit v1.3.1