The construction of the group P #
We construct the group P (the Promislow or Hantzsche–Wendt group) as a Metabelian group.
This is done via the cocycle construction, using the explicit action and cocycle described in Section 3.1 of Giles Gardam's paper (https: //arxiv.org/abs/2102.11818).
The components of the group P #
The group P is constructed as a Metabelian group with kernel K := ℤ³ and
quotient Q := ℤ/2 × ℤ/2.
The kernel group
The kernel group - ℤ³, the free Abelian group on three generators.
Instances For
Equations
The quotient group
The quotient group - ℤ/2 × ℤ/2, the Klein Four group.
Equations
- LeanPool.Polylean.Q = (Fin 2 × Fin 2)
Instances For
Equations
The group elements #
The generators of the free Abelian group K.
The elements of the Klein Four group Q.
The action of Q on K by automorphisms #
The action of the group Q on the kernel K by automorphisms required for constructing P.
An abbreviation for the negation homomorphism on commutative groups.
Equations
Instances For
The action of Q on K by automorphisms.
The action can be given a component-wise description in terms of id and neg, the
identity and negation homomorphisms.
Equations
- LeanPool.Polylean.action (⟨0, ⋯⟩, ⟨0, ⋯⟩) = (AddMonoidHom.id ℤ).prodMap ((AddMonoidHom.id ℤ).prodMap (AddMonoidHom.id ℤ))
- LeanPool.Polylean.action (⟨1, ⋯⟩, ⟨0, ⋯⟩) = (AddMonoidHom.id ℤ).prodMap ((LeanPool.Polylean.neg ℤ).prodMap (LeanPool.Polylean.neg ℤ))
- LeanPool.Polylean.action (⟨0, ⋯⟩, ⟨1, ⋯⟩) = (LeanPool.Polylean.neg ℤ).prodMap ((AddMonoidHom.id ℤ).prodMap (LeanPool.Polylean.neg ℤ))
- LeanPool.Polylean.action (⟨1, ⋯⟩, ⟨1, ⋯⟩) = (LeanPool.Polylean.neg ℤ).prodMap ((LeanPool.Polylean.neg ℤ).prodMap (AddMonoidHom.id ℤ))
Instances For
A verification that the above action is indeed an action by automorphisms. This is done automatically with the machinery of decidable equality of homomorphisms on free groups.
The cocycle #
The cocycle in the construction of P.
Equations
- LeanPool.Polylean.cocycle (⟨1, ⋯⟩, ⟨0, ⋯⟩) (⟨1, ⋯⟩, ⟨0, ⋯⟩) = LeanPool.Polylean.K.x
- LeanPool.Polylean.cocycle (⟨1, ⋯⟩, ⟨0, ⋯⟩) (⟨1, ⋯⟩, ⟨1, ⋯⟩) = LeanPool.Polylean.K.x
- LeanPool.Polylean.cocycle (⟨0, ⋯⟩, ⟨1, ⋯⟩) (⟨0, ⋯⟩, ⟨1, ⋯⟩) = LeanPool.Polylean.K.y
- LeanPool.Polylean.cocycle (⟨1, ⋯⟩, ⟨1, ⋯⟩) (⟨0, ⋯⟩, ⟨1, ⋯⟩) = -LeanPool.Polylean.K.y
- LeanPool.Polylean.cocycle (⟨1, ⋯⟩, ⟨1, ⋯⟩) (⟨1, ⋯⟩, ⟨1, ⋯⟩) = LeanPool.Polylean.K.z
- LeanPool.Polylean.cocycle (⟨0, ⋯⟩, ⟨1, ⋯⟩) (⟨1, ⋯⟩, ⟨1, ⋯⟩) = -LeanPool.Polylean.K.x + -LeanPool.Polylean.K.z
- LeanPool.Polylean.cocycle (⟨1, ⋯⟩, ⟨1, ⋯⟩) (⟨1, ⋯⟩, ⟨0, ⋯⟩) = -LeanPool.Polylean.K.y + LeanPool.Polylean.K.z
- LeanPool.Polylean.cocycle (⟨0, ⋯⟩, ⟨1, ⋯⟩) (⟨1, ⋯⟩, ⟨0, ⋯⟩) = -LeanPool.Polylean.K.x + LeanPool.Polylean.K.y + -LeanPool.Polylean.K.z
- LeanPool.Polylean.cocycle x✝¹ x✝ = 0
Instances For
A verification that the cocycle function indeed satisfies the cocycle condition.
This check is performed fully automatically using previously defined decision procedures.
Equations
- One or more equations did not get rendered due to their size.
The construction of P #
The construction of the group P as a Metabelian group from the given action and cocycle.
Equations
- LeanPool.Polylean.P.instPow = { pow := fun (p : LeanPool.Polylean.K × LeanPool.Polylean.Q) (n : ℕ) => Monoid.npow n p }