summaryrefslogtreecommitdiff
path: root/Nominal/Equivariance.lean
blob: 4d23e56d160627ce66b101e82739969a87033661 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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