Documentation

Nominal.FinPerm

Finite Permutations #

This file defines finite permutations of atoms - permutations that only move finitely many atoms. This is the key structure for nominal set theory.

Main definitions #

Implementation notes #

Since Atom is infinite (not Fintype), we cannot use Mathlib's Perm.support directly (which requires Fintype). Instead, we define a predicate IsFinitelySupported that states a permutation has finite support, and define FinPerm as the subtype of permutations satisfying this predicate.

Key insight: in nominal set theory, we only work with finitely-supported permutations, even though the set of atoms is infinite.

References #

A permutation is finitely supported if there exists a finite set outside of which it acts as the identity.

Equations
Instances For

    The type of finitely-supported permutations of atoms.

    Equations
    Instances For
      @[implicit_reducible]

      Coercion to underlying permutation

      Equations

      Apply permutation to an atom

      Equations
      Instances For
        @[simp]
        theorem CatCrypt.Nominal.FinPerm.apply_def (π : FinPerm) (a : Atom) :
        π.apply a = π a
        theorem CatCrypt.Nominal.FinPerm.ext {π₁ π₂ : FinPerm} (h : ∀ (a : Atom), π₁.apply a = π₂.apply a) :
        π₁ = π₂
        theorem CatCrypt.Nominal.FinPerm.ext_iff {π₁ π₂ : FinPerm} :
        π₁ = π₂ ∀ (a : Atom), π₁.apply a = π₂.apply a

        A witness of finite support for a permutation

        Equations
        Instances For

          Composition of finite permutations

          Equations
          Instances For
            @[simp]
            theorem CatCrypt.Nominal.FinPerm.mul_apply (π₁ π₂ : FinPerm) (a : Atom) :
            (π₁ * π₂).apply a = π₁.apply (π₂.apply a)
            @[simp]
            theorem CatCrypt.Nominal.FinPerm.mul_val (π₁ π₂ : FinPerm) :
            ↑(π₁ * π₂) = π₁ * π₂

            Inverse of a finite permutation

            Equations
            Instances For
              @[simp]
              @[simp]
              @[implicit_reducible]

              Finite permutations form a group

              Equations
              • One or more equations did not get rendered due to their size.
              noncomputable def CatCrypt.Nominal.FinPerm.swap (a b : Atom) :

              Transposition: swap two atoms

              Equations
              Instances For
                @[simp]
                theorem CatCrypt.Nominal.FinPerm.swap_apply_of_ne_of_ne {a b c : Atom} (hca : c a) (hcb : c b) :
                (swap a b).apply c = c
                @[simp]
                @[simp]