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 #
FinPerm- Finite permutations (bijections on atoms with finite support)FinPerm.swap- Transposition of two atoms
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 #
- Pitts, Nominal Sets: Names and Symmetry in Computer Science, Cambridge University Press, 2013, Chapter 2.
- Larsen and Schürmann, Nominal State-Separating Proofs, IACR ePrint 2025/598 — the SSProve
Nominal/layer this development ports. - SSProve
theories/Crypt/nominal/Nominal.v
A permutation is finitely supported if there exists a finite set outside of which it acts as the identity.
Equations
- CatCrypt.Nominal.IsFinitelySupported π = ∃ (s : Finset CatCrypt.Nominal.Atom), ∀ a ∉ s, π a = a
Instances For
The type of finitely-supported permutations of atoms.
Equations
Instances For
Coercion to underlying permutation
Equations
A witness of finite support for a permutation
Equations
Instances For
Identity permutation
Instances For
Equations
Equations
Equations
Finite permutations form a group
Equations
- One or more equations did not get rendered due to their size.
Transposition: swap two atoms
Equations
- CatCrypt.Nominal.FinPerm.swap a b = ⟨Equiv.swap a b, ⋯⟩