summaryrefslogtreecommitdiff
path: root/Nominal/Equivariance.lean
diff options
context:
space:
mode:
Diffstat (limited to 'Nominal/Equivariance.lean')
-rw-r--r--Nominal/Equivariance.lean52
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