\begin{code}
module Equivariant where

open import Atom
open import Term
open import Permutation

open import Relation.Nullary
open import Relation.Binary.PropositionalEquality as PropEq hiding ([_])

EquivariantRel : (Λ  Λ  Set)  Set
EquivariantRel R = {M N : Λ}(π : Π)  R M N  R (π  M) (π  N)
--
EquivariantRel← : (Λ  Λ  Set)  Set
EquivariantRel← R = {M N : Λ}(π : Π)  R (π  M) (π  N)  R M N
--
lemmaEqRel : (R : Λ  Λ  Set)  EquivariantRel R  EquivariantRel← R
lemmaEqRel R EqR {M} {N} π RπMπN 
  with EqR (π ⁻¹) RπMπN 
... | Rπ⁻¹πMπ⁻¹πN rewrite lemmaπ⁻¹∘π≡id {π} {M} | lemmaπ⁻¹∘π≡id {π} {N} 
  = Rπ⁻¹πMπ⁻¹πN
--
EquivariantRela : (Atom  Λ  Set)  Set
EquivariantRela R = {a : Atom}{M : Λ}(π : Π)  R a M  R (π ∙ₐ a) (π  M)
--
lemma#Equiv : EquivariantRela _#_
lemma#Equiv {a} .{v b}    π (#v {b} b≢a) 
  rewrite lemmaπv {b} {π} 
  = #v (lemmaππ∙ₐinj {b} {a} {π} b≢a)
lemma#Equiv {a} .{M · N}  π ( {M} {N} a#M a#N) 
  rewrite lemmaπ· {M} {N} {π}
  =  (lemma#Equiv π a#M) (lemma#Equiv π a#N)
lemma#Equiv {a} .{ƛ a M}  π (#ƛ≡ {M}) 
  rewrite lemmaπƛ {a} {M} {π} 
  = #ƛ≡
lemma#Equiv {a} {ƛ b M}   π ( a#M)
  rewrite lemmaπƛ {b} {M} {π} 
  =  (lemma#Equiv π a#M)
--
lemma∉swap : {a b c : Atom}{M : Λ}  a ∉ₜ M   b  c )ₐ a ∉ₜ  b  c  M 
lemma∉swap {a} {b} {c}   {M} a∉M with b ≟ₐ c 
lemma∉swap {a} {b} {.b}  {M} a∉M
  | yes refl rewrite lemma(aa)M≡M {b} {M} | lemma(aa)b≡b {b} {a} 
  = a∉M 
lemma∉swap {a} {b} {c} {v d} (∉v d≢a) | no b≢c        = ∉v (lemma∙ₐinj d≢a)
lemma∉swap {a} {b} {c} {M · N} (∉· a∉M a∉N) | no b≢c  = ∉· (lemma∉swap a∉M) (lemma∉swap a∉N)
lemma∉swap {a} {b} {c} {ƛ d M} (∉ƛ d≢a a∉M) | no b≢c  = ∉ƛ (lemma∙ₐinj d≢a) (lemma∉swap a∉M)
\end{code}