netket.symmetry.canonical_representation

netket.symmetry.canonical_representation#

netket.symmetry.canonical_representation(hilbert, group, warn=True)[source]#

Construct the representation of a permutation group on a many-body Hilbert space where each permutation is mapped to the permutation operator that permutes the local operators.

This function creates a representation of a permutation group that acts on the physical sites of a lattice or graph, extended to act on the full many-body Hilbert space. The representation operators depend on the Hilbert space type.

More precisely, on a spin Hilbert space, the permutation operator associated to the permutation \(\sigma\) is the operator \(P_\sigma\) such that for any local operator \(A_k\) acting on site \(k\), the permutation operator transforms it as \(P_\sigma A_k P_\sigma^\dagger = A_{\sigma(k)}\). For a fermionic Hilbert space, the operator \(P_\sigma\) is defined such that for any site \(k\), the creation operator \(c_k^\dagger\) transforms as \(P_\sigma c_k^\dagger P_\sigma^\dagger = c_{\sigma(k)}^\dagger\). The relevant permutation operators are therefore different depending on the type of Hilbert space. For more details, see Representation theory in NetKet.

Note

This function is experimental and its API may change in future releases.

Warning

This function constructs the specific representation of a permutation group described above and in the documentation. For other non-spatial symmetries, the appropriate representation can be constructed manually using the constructor of Representation. To safeguard against mistaken uses of this function, passing a PermutationGroup that is not also an instance of a subclass designed specifically to describe a subgroup of the space group, that is, SpaceGroup, PointGroup, or TranslationGroup, will raise a warning.

Parameters:
Return type:

LabeledRepresentation

Returns:

A TranslationRepresentation if group is a TranslationGroup (with Bloch-momentum indexing via projector()), or a LabeledRepresentation for all other groups (with automatic irrep labels derived from the character table).

Examples

Get the representation of the translation group on a spin system:

>>> import netket as nk
>>> lattice = nk.graph.Square(4)
>>> hilbert = nk.hilbert.Spin(0.5, N=lattice.n_nodes)
>>> trans_group = lattice.translation_group()
>>> rep = nk.symmetry.canonical_representation(hilbert, trans_group)

Get the representation of a partial symmetry (translations along x only):

>>> trans_x = lattice.translation_group(dim=0)
>>> rep_x = nk.symmetry.canonical_representation(hilbert, trans_x)

Use a point group symmetry (e.g., C4 rotations):

>>> pg = lattice.point_group(nk.symmetry.group.planar.C(4))
>>> rep_c4 = nk.symmetry.canonical_representation(hilbert, pg)

Use the full space group (translations + point group):

>>> sg = lattice.space_group()
>>> rep_sg = nk.symmetry.canonical_representation(hilbert, sg)

This approach works with any PermutationGroup, allowing you to construct representations for specific subgroups of the full symmetry group or even use custom permutation groups, though in the latter case, care should be taken to only use this function when intending to construct the specific representation of that custom permutation group detailed above.

For fermionic systems, the permutations are automatically extended to account for multiple spin species:

>>> fermion_hilbert = nk.hilbert.SpinOrbitalFermions(
...     n_orbitals=lattice.n_nodes,
...     s=1/2,
...     n_fermions_per_spin=(4, 4)
... )
>>> rep_fermion = nk.symmetry.canonical_representation(
...     fermion_hilbert, trans_group
... )

See also