From fe96f2d6674bda67b66d5c8c5ce7eea4e2b26031 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Thu, 23 Oct 2025 10:43:50 +0200 Subject: define equivariance --- Nominal/Equivariance.lean | 93 +++++++++++++++++++++++++++++++++++++++++++++++ Nominal/Instances.lean | 1 - 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 Nominal/Equivariance.lean 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 diff --git a/Nominal/Instances.lean b/Nominal/Instances.lean index 215f3f9..e28fe28 100644 --- a/Nominal/Instances.lean +++ b/Nominal/Instances.lean @@ -1,5 +1,4 @@ import Mathlib -import Nominal.Permutations import Nominal.Support /-! -- cgit v1.3.1