Base permutations #
In this file, we define base permutations, their group structure, and their actions on atoms, litters, and near-litters.
Main declarations #
ConNF.BasePerm
: The type of base permutations.ConNF.BasePerm.smul_nearLitter_coe
: The action of a base permutation on a near-litter agrees with the pointwise action that treats it as a set of atoms.ConNF.BasePerm.smul_nearLitter_eq_smul_symmDiff_smul
: We can determine the action of a base permutation on a near-litter by knowing its precise action on the relevant litter, as well as the action on all atoms in the symmetric difference between that near-litter and its corresponding litter.
A base permutation is a permutation of atoms which sends near-litters to near-litters. Then, the images of near-litters near the same litter must be near the same litter. Hence a base permutation induces a permutation of litters, and we keep that as data for simplicity.
This is sometimes called a -1-allowable permutation.
The proposition near
can be interpreted as saying that if s
is an L
-near-litter, then its
image under the permutation (atomPerm
) is near the litter that L
is mapped to under the litter
permutation (litterPerm
).
The definition ↑atomPerm⁻¹ ⁻¹' s
is used instead of ↑atomPerm '' s
because it has better
definitional properties. For instance, x ∈ ↑atomPerm⁻¹ ⁻¹' s
is definitionally equal to
atomPerm⁻¹ x ∈ s
.
- atomPerm : Equiv.Perm ConNF.Atom
- litterPerm : Equiv.Perm ConNF.Litter
- near : ∀ ⦃L : ConNF.Litter⦄ ⦃s : Set ConNF.Atom⦄, ConNF.IsNearLitter L s → ConNF.IsNearLitter (self.litterPerm L) (⇑self.atomPerm⁻¹ ⁻¹' s)
Instances For
This is the condition that relates the atomPerm
and the litterPerm
. This is essentially
the field near
in the structure BasePerm
, but presented here as a lemma.
The map from the type of base permutations to the type of permutations of atoms is injective. That is, if two base permutations have the same action on atoms, they are equal.
An extensionality result for base permutations. If two base permutations have the same action on atoms, they are equal.
We are going to show that the set of base permutations forms a group. To do this, we construct several instances, such as the existence of an identity element or inverse elements.
The identity base permutation.
Equations
- ConNF.BasePerm.instOne = { one := { atomPerm := 1, litterPerm := 1, near := ⋯ } }
Any base permutation admits an inverse, which is also a base permutation.
Base permutations can be composed.
Dividing two permutations π / π'
can be interpreted as π * π'⁻¹
.
We can raise base permutations to a natural power since we can do this to permutations of atoms and litters.
We can raise base permutations to an integer power since we can do this to permutations of atoms and litters.
Equations
- ConNF.BasePerm.instInhabited = { default := 1 }
The following lemmas describe how the group of base permutations interacts with the group of base type permutations and the group of litter permutations. In particular, many group operations, such as taking the inverse, can be moved out of the near-litter context and into the (simpler) base permutation or litter permutation context.
The @[simp]
attribute teaches these results to the simp
tactic. This means that simp
will (for
example) prefer group operations to be applied after extracting the base permutation, not before.
Base permutations form a group.
Equations
- ConNF.BasePerm.instGroup = Function.Injective.group ConNF.BasePerm.atomPerm ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Base permutations act on atoms via the atom permutation.
Equations
- ConNF.BasePerm.instMulActionAtom = MulAction.mk ⋯ ⋯
Base permutations act on litters via the litter permutation.
Equations
- ConNF.BasePerm.instMulActionLitter = MulAction.mk ⋯ ⋯
Base permutations act on near-litters.
Equations
- ConNF.BasePerm.instMulActionNearLitter = MulAction.mk ⋯ ⋯
The action of a base permutation on a near-litter agrees with the pointwise action on its atoms.