summaryrefslogtreecommitdiff
path: root/Nominal/Equivariance.lean
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2025-10-23 10:43:50 +0200
committerHannes Schulze <haschu0103@outlook.de>2025-10-23 10:43:50 +0200
commitfe96f2d6674bda67b66d5c8c5ce7eea4e2b26031 (patch)
tree45eabe1aca52186b84c65df167bba7c9a01c5ceb /Nominal/Equivariance.lean
parent7a4e25ebbc9e470650851299659860b4c07bff6b (diff)
define equivariance
Diffstat (limited to 'Nominal/Equivariance.lean')
-rw-r--r--Nominal/Equivariance.lean93
1 files changed, 93 insertions, 0 deletions
diff --git a/Nominal/Equivariance.lean b/Nominal/Equivariance.lean
new file mode 100644
index 0000000..4d23e56
--- /dev/null
+++ b/Nominal/Equivariance.lean
@@ -0,0 +1,93 @@
+import Mathlib
+import Nominal.Permutations
+import Nominal.Support
+
+/-!
+# Definitions and Properties for Equivariance
+
+We define equivariance for functions, sets, and binary relations.
+-/
+
+variable (๐”ธ : Type) [Infinite ๐”ธ] [Countable ๐”ธ] [DecidableEq ๐”ธ]
+
+/-!
+## Definitions
+
+Basic definitions for equivariance.
+-/
+section Definition
+
+variable {X Y : Type} [PermSet ๐”ธ X] [PermSet ๐”ธ Y]
+
+/-- A function is equivariant if it is invariant to applying a permutation before or after the function. -/
+def Equivariant (f : X โ†’ Y) : Prop :=
+ โˆ€ (x : X) (ฯ€ : FPerm ๐”ธ), f (ฯ€ โ€ข x) = ฯ€ โ€ข f x
+
+/-- A set is equivariant if it is closed under permutations. -/
+def EquivariantSet (S : Set X) : Prop :=
+ โˆ€ (x : X) (ฯ€ : FPerm ๐”ธ), x โˆˆ S โ†’ ฯ€ โ€ข x โˆˆ S
+
+/-- A binary relation is equivariant if it is closed under permutations. -/
+def EquivariantRelation (R : Rel X Y) : Prop :=
+ โˆ€ (x : X) (y : Y) (ฯ€ : FPerm ๐”ธ), R x y โ†’ R (ฯ€ โ€ข x) (ฯ€ โ€ข y)
+
+end Definition
+
+/-!
+## Support
+
+Propositions relating equivariance to support in (FPerm ๐”ธ)-sets.
+-/
+section Support
+
+variable {X Y : Type} [PermSet ๐”ธ X] [PermSet ๐”ธ Y]
+
+namespace Equivariant
+
+/-- Equivariant functions preserve supports. -/
+lemma preserve_support {x : X} {f : X โ†’ Y} {S : Set ๐”ธ} : Equivariant ๐”ธ f โ†’ PermSet.HasSupport ๐”ธ x S โ†’ PermSet.HasSupport ๐”ธ (f x) S := by
+ intro hequi hsupp ฯ€ hฯ€
+ calc
+ ฯ€ โ€ข f x = f (ฯ€ โ€ข x) := by rw [โ† hequi]
+ _ = f x := by rw [hsupp hฯ€]
+
+/-- Equivariant injective functions exactly preserve supports. -/
+lemma preserve_support_inj {x : X} {f : X โ†’ Y} {S : Set ๐”ธ} : Equivariant ๐”ธ f โ†’ f.Injective โ†’ (PermSet.HasSupport ๐”ธ x S โ†” PermSet.HasSupport ๐”ธ (f x) S) := by
+ intro hequi hinj; constructor
+ ยท exact preserve_support ๐”ธ hequi
+ ยท intro hsupp ฯ€ hฯ€
+ by_contra h
+ have : ฯ€ โ€ข f x โ‰  f x := by rw [โ† hequi]; exact fun a => h (hinj a)
+ have : ฯ€ โ€ข f x = f x := hsupp hฯ€
+ contradiction
+
+end Equivariant
+
+end Support
+
+/-!
+## Nominal Sets
+
+Properties about equivariance relating to nominal sets.
+-/
+section Nominal
+
+variable {X Y : Type} [NominalSet ๐”ธ X] [NominalSet ๐”ธ Y]
+
+namespace Equivariant
+
+/-- If f is equivariant, then supp (f x) โІ supp x. -/
+lemma supp_subset {x : X} {f : X โ†’ Y} : Equivariant ๐”ธ f โ†’ NominalSet.supp ๐”ธ (f x) โІ NominalSet.supp ๐”ธ x := by
+ intro hequi
+ apply NominalSet.support_subset_supp
+ ยท exact preserve_support ๐”ธ hequi (NominalSet.supp_is_support ๐”ธ)
+ ยท exact NominalSet.supp_finite ๐”ธ
+
+/-- If f is equivariant and injective, then supp (f x) = supp x. -/
+lemma supp_eq_if_inj {x : X} {f : X โ†’ Y} : Equivariant ๐”ธ f โ†’ Function.Injective f โ†’ NominalSet.supp ๐”ธ (f x) = NominalSet.supp ๐”ธ x := by
+ intro hequi hinj
+ simp [NominalSet.supp, preserve_support_inj ๐”ธ hequi hinj]
+
+end Equivariant
+
+end Nominal