diff options
| author | Hannes Schulze <haschu0103@outlook.de> | 2025-10-29 00:40:13 +0100 |
|---|---|---|
| committer | Hannes Schulze <haschu0103@outlook.de> | 2025-10-29 00:40:13 +0100 |
| commit | 5dde77b6db9fc78094363f91e0c6643a84be513e (patch) | |
| tree | c0fecab7a2f62e13836b4e80ee4918c2c62d8d29 /Nominal/Equivariance.lean | |
| parent | 8f1d3f45f11aae5d611a66c424b6427f379a8251 (diff) | |
refactor equivariance namespaces
Diffstat (limited to 'Nominal/Equivariance.lean')
| -rw-r--r-- | Nominal/Equivariance.lean | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/Nominal/Equivariance.lean b/Nominal/Equivariance.lean index 3166e71..7087076 100644 --- a/Nominal/Equivariance.lean +++ b/Nominal/Equivariance.lean @@ -20,23 +20,19 @@ 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 := +def Function.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 := +def Set.Equivariant (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 := +def Rel.Equivariant (R : Rel X Y) : Prop := β (x : X) (y : Y) (Ο : FPerm πΈ), R x y β R (Ο β’ x) (Ο β’ y) -/-- Extended setoid definition that also requires the relation to be equivariant. -/ -class EquivariantSetoid (X : Type) [PermSet πΈ X] extends Setoid X where - equivariant : EquivariantRelation πΈ r - /-- For equivariant sets, we even have "if and only if". -/ -lemma equivariant_set_iff {S : Set X} : EquivariantSet πΈ S β β (x : X) (Ο : FPerm πΈ), x β S β Ο β’ x β S := by +lemma Set.Equivariant.iff {S : Set X} : Set.Equivariant πΈ S β β (x : X) (Ο : FPerm πΈ), x β S β Ο β’ x β S := by constructor Β· intro h x Ο; constructor Β· intro hx; exact h x Ο hx @@ -48,7 +44,7 @@ lemma equivariant_set_iff {S : Set X} : EquivariantSet πΈ S β β (x : X) (Ο exact (h x Ο).mp hx /-- For equivariant relations, we even have "if and only if". -/ -lemma equivariant_relation_iff {R : Rel X Y} : EquivariantRelation πΈ R β β (x : X) (y : Y) (Ο : FPerm πΈ), R x y β R (Ο β’ x) (Ο β’ y) := by +lemma Rel.Equivariant.iff {R : Rel X Y} : Rel.Equivariant πΈ R β β (x : X) (y : Y) (Ο : FPerm πΈ), R x y β R (Ο β’ x) (Ο β’ y) := by constructor Β· intro h x y Ο; constructor Β· intro hxy; exact h x y Ο hxy @@ -71,18 +67,18 @@ section Trivial variable {X Y Z : Type} [PermSet πΈ X] [PermSet πΈ Y] [PermSet πΈ Z] /-- The identity function is equivariant. -/ -lemma id_equivariant : Equivariant πΈ (id : X β X) := by - simp [Equivariant] +lemma id_equivariant : Function.Equivariant πΈ (id : X β X) := by + simp [Function.Equivariant] /-- The composition of two equivariant functions is equivariant. -/ -lemma comp_equivariant {f : Y β Z} {g : X β Y} : Equivariant πΈ f β Equivariant πΈ g β Equivariant πΈ (f β g) := by +lemma comp_equivariant {f : Y β Z} {g : X β Y} : Function.Equivariant πΈ f β Function.Equivariant πΈ g β Function.Equivariant πΈ (f β g) := by intro hf hg x Ο calc 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 +lemma Set.subset_equivariant : Rel.Equivariant πΈ (Set.Subset : Set X β Set X β Prop) := by intro S T Ο hST x hx rw [Set.mem_smul_set_iff_inv_smul_mem] at hx rw [Set.mem_smul_set_iff_inv_smul_mem] @@ -99,7 +95,7 @@ section Support variable {X Y : Type} [PermSet πΈ X] [PermSet πΈ Y] -namespace Equivariant +namespace Function.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 @@ -118,10 +114,10 @@ lemma preserve_support_inj {x : X} {f : X β Y} {S : Set πΈ} : Equivariant π have : Ο β’ f x = f x := hsupp hΟ contradiction -end Equivariant +end Function.Equivariant /-- HasSupport is an equivariant relation. -/ -lemma PermSet.support_equivariant : EquivariantRelation πΈ (HasSupport πΈ : X β Set πΈ β Prop) := by +lemma PermSet.support_equivariant : Rel.Equivariant πΈ (HasSupport πΈ : X β Set πΈ β Prop) := by intro x S Ο hS Ο hΟ have hfix : (Οβ»ΒΉ * Ο * Ο) β fix πΈ S := by intro a ha @@ -149,7 +145,7 @@ section Nominal variable {X Y : Type} [NominalSet πΈ X] [NominalSet πΈ Y] -namespace Equivariant +namespace Function.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 @@ -173,21 +169,21 @@ lemma preserve_fresh_inj {a : πΈ} {x : X} {f : X β Y} : Equivariant πΈ f β intro hequi hinj rw [NominalSet.IsFresh, NominalSet.IsFresh, supp_eq_if_inj πΈ hequi hinj] -end Equivariant +end Function.Equivariant /-- If there is an equivariant surjection from a nominal set into an (FPerm πΈ)-Set, then that set is nominal. -/ -def NominalSet.fromEquivariantSurjective {X Y : Type} [NominalSet πΈ X] [PermSet πΈ Y] (f : X β Y) (hequi : Equivariant πΈ f) (hsurj : Function.Surjective f) : NominalSet πΈ Y where +def NominalSet.fromEquivariantSurjective {X Y : Type} [NominalSet πΈ X] [PermSet πΈ Y] (f : X β Y) (hequi : Function.Equivariant πΈ f) (hsurj : Function.Surjective f) : NominalSet πΈ Y where fin_supp := by intro y obtain β¨x, hxβ© := hsurj y use (NominalSet.supp πΈ x) constructor Β· rw [β hx] - exact Equivariant.preserve_support πΈ hequi (supp_is_support πΈ) + exact Function.Equivariant.preserve_support πΈ hequi (supp_is_support πΈ) Β· exact supp_finite πΈ /-- supp is an equivariant function. -/ -lemma NominalSet.supp_equivariant : Equivariant πΈ (supp πΈ : X β Set πΈ) := by +lemma NominalSet.supp_equivariant : Function.Equivariant πΈ (supp πΈ : X β Set πΈ) := by intro x Ο; ext a; constructor Β· apply support_subset_supp πΈ Β· apply PermSet.support_equivariant @@ -208,7 +204,7 @@ lemma NominalSet.supp_equivariant : Equivariant πΈ (supp πΈ : X β Set πΈ exact hS.out.right /-- Freshness is an equivariant relation. -/ -lemma NominalSet.fresh_equivariant : EquivariantRelation πΈ (NominalSet.IsFresh : πΈ β X β Prop) := by +lemma NominalSet.fresh_equivariant : Rel.Equivariant πΈ (NominalSet.IsFresh : πΈ β X β Prop) := by intro x y Ο h rwa [IsFresh, supp_equivariant, Set.smul_mem_smul_set_iff] @@ -221,13 +217,13 @@ For propositions of the form `Π a, a R x`, where `R` is an equivariant relation -/ section Freshness -namespace Equivariance +namespace Rel.Equivariant variable {X : Type} [NominalSet πΈ X] {R: Rel πΈ X} {x : X} -- We continue with a circular implication chain argument to show these equivalences. -private lemma for_fresh_iffβ : EquivariantRelation πΈ R β (Π a, R a x) β (β a, a # x β§ R a x) := by +private lemma for_fresh_iffβ : Equivariant πΈ R β (Π a, R a x) β (β a, a # x β§ R a x) := by intro hequi h apply Set.Finite.infinite_compl at h simp at h @@ -236,7 +232,7 @@ private lemma for_fresh_iffβ : EquivariantRelation πΈ R β (Π a, R a x) β simp only [Set.mem_diff, Set.mem_setOf_eq] at ha use a; exact ha.symm -private lemma for_fresh_iffβ : EquivariantRelation πΈ R β (β a, a # x β§ R a x) β (β a, a # x β R a x) := by +private lemma for_fresh_iffβ : Equivariant πΈ R β (β a, a # x β§ R a x) β (β a, a # x β R a x) := by intro hequi h obtain β¨a, β¨hfresha, haβ©β© := h intro b hfreshb @@ -245,7 +241,7 @@ private lemma for_fresh_iffβ : EquivariantRelation πΈ R β (β a, a # x β rw [NominalSet.fresh_swap_fix πΈ hfresha hfreshb] at hmem exact hmem -private lemma for_fresh_iffβ : EquivariantRelation πΈ R β (β a, a # x β R a x) β (Π a, R a x) := by +private lemma for_fresh_iffβ : Equivariant πΈ R β (β a, a # x β R a x) β (Π a, R a x) := by intro hequi h have hsub : {a : πΈ | R a x}αΆ β NominalSet.supp πΈ x := by rw [Set.compl_subset_comm] @@ -256,7 +252,7 @@ private lemma for_fresh_iffβ : EquivariantRelation πΈ R β (β a, a # x β apply Set.Finite.subset (NominalSet.supp_finite πΈ) hsub /-- The quantifier in `Π a, a R x` is equivalent to "for any fresh `a`". -/ -lemma for_fresh_iff_exists : EquivariantRelation πΈ R β ((Π a, R a x) β (β a, a # x β§ R a x)) := by +lemma for_fresh_iff_exists : Equivariant πΈ R β ((Π a, R a x) β (β a, a # x β§ R a x)) := by intro hequi; constructor Β· intro h apply for_fresh_iffβ πΈ hequi @@ -267,7 +263,7 @@ lemma for_fresh_iff_exists : EquivariantRelation πΈ R β ((Π a, R a x) β ( exact h /-- The quantifier in `Π a, a R x` is equivalent to "for all fresh `a`". -/ -lemma for_fresh_iff_all : EquivariantRelation πΈ R β ((Π a, R a x) β (β a, a # x β R a x)) := by +lemma for_fresh_iff_all : Equivariant πΈ R β ((Π a, R a x) β (β a, a # x β R a x)) := by intro hequi; constructor Β· intro h apply for_fresh_iffβ πΈ hequi @@ -277,7 +273,7 @@ lemma for_fresh_iff_all : EquivariantRelation πΈ R β ((Π a, R a x) β (β apply for_fresh_iffβ πΈ hequi exact h -end Equivariance +end Rel.Equivariant end Freshness @@ -293,7 +289,7 @@ structure EquivariantMap (X Y : Type) [PermSet πΈ X] [PermSet πΈ Y] where /-- The underlying function. -/ toFun : X β Y /-- Proof of equivariance. -/ - equivariant : Equivariant πΈ toFun + equivariant : Function.Equivariant πΈ toFun /-- We write `X ββ Y` or `X ββ[πΈ] Y` for an equivariant map X β Y. -/ infixr:25 " ββ " => EquivariantMap _ @@ -331,4 +327,8 @@ lemma ext {f g : X ββ[πΈ] Y} (h : β a, f a = g a) : f = g := end EquivariantMap +/-- Extended setoid definition that also requires the relation to be equivariant. -/ +class EquivariantSetoid (X : Type) [PermSet πΈ X] extends Setoid X where + equivariant : Rel.Equivariant πΈ r + end BundledFunction |
