sparse-tensor-0.2.1.2: typesafe tensor algebra library

Copyright (c) 2019 Tobias Reinhart and Nils Alex MIT tobi.reinhart@fau.de, nils.alex@fau.de None Haskell2010

Math.Tensor.LorentzGenerator

Description

This module supplements the sparse-tensor package with the functionality of constructing bases of the space of Lorentz invariant tensors of arbitrary rank and symmetry.

It can be shown that all $$SO(3,1)$$ invariant tensors must be given by expressions that are solely composed of the Minkowski metric $$\eta_{ab}$$, its inverse $$\eta^{ab}$$ and the covariant and contravariant Levi-Civita symbols $$\epsilon_{abcd}$$ and $$\epsilon^{abcd}$$. Any such an expression can be written as a sum of products of these tensors, with the individual products containing the appropriate number of factors ensuring the required rank of the expression and the sum further enforcing the required symmetry. In the following such an expression is simply called an ansatz. Thus the goal of the following functions is the computation of a set of ansätze of given rank and symmetry that are linear independent and allow one to express any further Lorentz invariant tensor with the same rank and symmetry as appropriate linear combination of them.

Considering tensors with 4 contravariant spacetime indices $$T^{abcd}$$ that further satisfy the symmetry property $$T^{abcd} = T^{cdab} = T^{bacd}$$ as an example, there only exist two linear independent ansätze namely:

• $$\eta^{ab} \eta^{cd}$$
• $$\eta^{c(a} \eta^{b)d}$$.

If the tensors are required to have 6 contravariant spacetime indices $$Q^{abcdpq}$$ and satisfy the symmetry property $$Q^{abcdpq} = Q^{cdabpq} = - Q^{bacdpq} = Q^{abcdqp}$$ there exist three linear independent ansätze:

• $$\eta^{ac}\eta^{bd}\eta^{pq} - \eta^{ad}\eta^{bc}\eta^{pq}$$
• $$\eta^{ac}\eta^{bp}\eta^{dq} + \eta^{ac}\eta^{bq}\eta^{dp} - \eta^{bc}\eta^{ap}\eta^{dq} - \eta^{bc}\eta^{aq}\eta^{dp} - \eta^{ad}\eta^{bp}\eta^{cq} - \eta^{ad}\eta^{bq}\eta^{cp} + \eta^{bd}\eta^{ap}\eta^{cq} + \eta^{bd}\eta^{aq}\eta^{cp}$$
• $$\epsilon^{abcd}\eta^{pq}$$.

One can further show that any Lorentz invariant tensor must include in each of its individual products either exactly one or no Levi-Civita symbol. Further there exist no linear dependencies between those ansätze that contain an $$\epsilon^{abcd}$$ or $$\epsilon_{abcd}$$ and those that do not. Hence the problem actually decouples into two sub problems, the construction of all linear independent ansätze that do not contain an Levi-Civita symbol and the construction of all those linear independent ansätze that do contain exactly one Levi-Civita symbol.

This module specifically defines data types AnsatzForestEta and AnsatzForestEpsilon that are internally implemented as ordered expression tailored towards linear combinations of the two types of ansätze.

Currently the computation of ansatz bases is limited to the case where all indices are contravariant spacetime indices. Minor changes should nevertheless also allow the computation of ansatz bases for arbitrary mixed rank spacetime tensors and even bases for tensors that are invariant under the action of any $$\mathrm{SO}(p,q)$$, i.e. in arbitrary dimension and for arbitrary signature of the inner product.

Synopsis

# Expression Forest Data Types

## Node Types

data Eta Source #

Data type that represents the individual $$\eta^{ab}$$ tensor. The indices are labeled not by characters but by integers.

Constructors

 Eta !Int !Int
Instances
 Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods(==) :: Eta -> Eta -> Bool #(/=) :: Eta -> Eta -> Bool # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methodscompare :: Eta -> Eta -> Ordering #(<) :: Eta -> Eta -> Bool #(<=) :: Eta -> Eta -> Bool #(>) :: Eta -> Eta -> Bool #(>=) :: Eta -> Eta -> Bool #max :: Eta -> Eta -> Eta #min :: Eta -> Eta -> Eta # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator MethodsshowsPrec :: Int -> Eta -> ShowS #show :: Eta -> String #showList :: [Eta] -> ShowS # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Associated Typestype Rep Eta :: Type -> Type # Methodsfrom :: Eta -> Rep Eta x #to :: Rep Eta x -> Eta # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methodsrnf :: Eta -> () # type Rep Eta Source # Instance detailsDefined in Math.Tensor.LorentzGenerator type Rep Eta = D1 (MetaData "Eta" "Math.Tensor.LorentzGenerator" "sparse-tensor-0.2.1.2-5t3AWNPJ0YtAucphGlrflx" False) (C1 (MetaCons "Eta" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int) :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int)))

data Epsilon Source #

Data type that represents the individual $$\epsilon^{abcd}$$ tensor. The indices are labeled not by characters but by integers.

Constructors

 Epsilon !Int !Int !Int !Int
Instances
 Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods(==) :: Epsilon -> Epsilon -> Bool #(/=) :: Epsilon -> Epsilon -> Bool # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods(<) :: Epsilon -> Epsilon -> Bool #(<=) :: Epsilon -> Epsilon -> Bool #(>) :: Epsilon -> Epsilon -> Bool #(>=) :: Epsilon -> Epsilon -> Bool # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator MethodsshowList :: [Epsilon] -> ShowS # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Associated Typestype Rep Epsilon :: Type -> Type # Methodsto :: Rep Epsilon x -> Epsilon # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methodsrnf :: Epsilon -> () # type Rep Epsilon Source # Instance detailsDefined in Math.Tensor.LorentzGenerator type Rep Epsilon = D1 (MetaData "Epsilon" "Math.Tensor.LorentzGenerator" "sparse-tensor-0.2.1.2-5t3AWNPJ0YtAucphGlrflx" False) (C1 (MetaCons "Epsilon" PrefixI False) ((S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int) :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int)) :*: (S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int) :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int))))

data Var Source #

Data type that represents variables that multiply the individual ansätze to form a general linear combination. The 2nd Int argument labels the variables the first Int is a factor that multiplies the variable.

Constructors

 Var !Int !Int
Instances
 Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods(==) :: Var -> Var -> Bool #(/=) :: Var -> Var -> Bool # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methodscompare :: Var -> Var -> Ordering #(<) :: Var -> Var -> Bool #(<=) :: Var -> Var -> Bool #(>) :: Var -> Var -> Bool #(>=) :: Var -> Var -> Bool #max :: Var -> Var -> Var #min :: Var -> Var -> Var # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator MethodsshowsPrec :: Int -> Var -> ShowS #show :: Var -> String #showList :: [Var] -> ShowS # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Associated Typestype Rep Var :: Type -> Type # Methodsfrom :: Var -> Rep Var x #to :: Rep Var x -> Var # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methodsrnf :: Var -> () # type Rep Var Source # Instance detailsDefined in Math.Tensor.LorentzGenerator type Rep Var = D1 (MetaData "Var" "Math.Tensor.LorentzGenerator" "sparse-tensor-0.2.1.2-5t3AWNPJ0YtAucphGlrflx" False) (C1 (MetaCons "Var" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int) :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 Int)))

## Forest types

Data type that represents a general linear combination of ansätze that involve one $$\epsilon^{abcd}$$ in each individual product.

Data type that represents a general linear combination of ansätze that involve no $$\epsilon^{abcd}$$.

Constructors

 ForestEta (Map Eta AnsatzForestEta) Leaf !Var EmptyForest
Instances
 Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator MethodsshowList :: [AnsatzForestEta] -> ShowS # Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Associated Typestype Rep AnsatzForestEta :: Type -> Type # Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator Methods Source # Instance detailsDefined in Math.Tensor.LorentzGenerator type Rep AnsatzForestEta = D1 (MetaData "AnsatzForestEta" "Math.Tensor.LorentzGenerator" "sparse-tensor-0.2.1.2-5t3AWNPJ0YtAucphGlrflx" False) (C1 (MetaCons "ForestEta" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Map Eta AnsatzForestEta))) :+: (C1 (MetaCons "Leaf" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Var)) :+: C1 (MetaCons "EmptyForest" PrefixI False) (U1 :: Type -> Type)))

## Conversions of AnsatzForests

### List of Branches

flattenForest :: AnsatzForestEta -> [([Eta], Var)] Source #

Flatten an AnsatzForestEta to a list that contains the individual branches.

Flatten an AnsatzForestEpsilon to a list that contains the individual branches.

Return one representative, i.e. one individual product for each of the basis ansätze in an AnsatzForestEta. The function thus returns the contained individual ansätze without their explicit symmetrization.

forestEpsList :: AnsatzForestEpsilon -> [(Epsilon, [Eta])] Source #

Return one representative, i.e. one individual product for each of the basis ansätze in an AnsatzForestEpsilon. The function thus returns the contained individual ansätze without their explicit symmetrization.

Outputs the forestEtaList in $$\LaTeX$$ format. The String argument is used to label the individual indices.

Outputs the forestEpsList in $$\LaTeX$$ format. The String argument is used to label the individual indices.

### ASCII drawing

Returns an ASCII drawing of the AnsatzForestEta in the fashion explained in Data.Tree. The ansatz $$x_1 \cdot 8 \{ \eta^{ac}\eta^{bd}\eta^{pq} - \eta^{ad}\eta^{bc}\eta^{pq} \} + x_2 \cdot 2 \{\eta^{ac}\eta^{bp}\eta^{dq} + \eta^{ac}\eta^{bq}\eta^{dp} - \eta^{bc}\eta^{ap}\eta^{dq} - \eta^{bc}\eta^{aq}\eta^{dp} - \eta^{ad}\eta^{bp}\eta^{cq} - \eta^{ad}\eta^{bq}\eta^{cp} + \eta^{bd}\eta^{ap}\eta^{cq} + \eta^{bd}\eta^{aq}\eta^{cp} \}$$ is drawn to

(1,3)
|
+---- (2,4)
|  |
|  ---- (5,6) * (8) * x[1]
|
+---- (2,5)
|  |
|  ---- (4,6) * (2) * x[2]
|
---- (2,6)
|
---- (4,5) * (2) * x[2]

(1,4)
|
+---- (2,3)
|  |
|  ---- (5,6) * (-8) * x[1]
|
+---- (2,5)
|  |
|  ---- (3,6) * (-2) * x[2]
|
---- (2,6)
|
---- (3,5) * (-2) * x[2]

(1,5)
|
+---- (2,3)
|  |
|  ---- (4,6) * (-2) * x[2]
|
---- (2,4)
|
---- (3,6) * (2) * x[2]

(1,6)
|
+---- (2,3)
|  |
|  ---- (4,5) * (-2) * x[2]
|
---- (2,4)
|
---- (3,5) * (2) * x[2]

Returns an ASCII drawing of the AnsatzForestEpsilon in the fashion explained in Data.Tree. The ansatz $$x_3 \cdot 16 \epsilon^{abcd}\eta^{pq}$$ is drawn as:

(1,2,3,4)
|
---- (5,6) * (16) * x[3]

## Utility functions

### Modifying Variables

Return a list of the labels of all variables that are contained in the AnsatzForestEta.

Return a list of the labels of all variables that are contained in the AnsatzForestEpsilon.

Remove the branches with variable label contained in the argument Int list from the AnsatzForestEta.

Remove the branches with variable label contained in the argument Int list from the AnsatzForestEpsilon.

Shift the variable labels of all variables that are contained in the AnsatzForestEta by the amount specified.

Shift the variable labels of all variables that are contained in the AnsatzForestEpsilon by the amount specified.

Map a general function over all variables that are contained in the AnsatzForestEta.

Map a general function over all variables that are contained in the AnsatzForestEpsilon.

### Ansatz Rank

Return the rank, i.e. the number of different variables that is contained in the AnsatzForestEta.

Return the rank, i.e. the number of different variables that is contained in the AnsatzForestEpsilon.

Encode an AnsatzForestEta employing the Serialize instance.

Encode an AnsatzForestEpsilon employing the Serialize instance.

Decode an AnsatzForestEta employing the Serialize instance.

Decode an AnsatzForestEpsilon employing the Serialize instance.

# Construction of Ansatz Bases

## The Fast Way

The following functions construct the basis of Lorentz invariant tensors of given rank and symmetry by using an algorithm that is optimized towards fast computation times. This is achieved at the cost of memory swelling of intermediate results.

The output of each of the following functions is given by a triplet that consists of (AnsatzForestEta, AnsatzForestEpsilon, Tensor AnsVarR). The Tensor is obtained by explicitly providing the the components of the ansätze with individual ansätze given by individual variables of type AnsVar.

mkAnsatzTensorFastSym :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> [[Int]] -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

The function computes all linear independent ansätze that have rank specified by the first integer argument and further satisfy the symmetry specified by the Symmetry value. The additional argument of type [[Int]] is used to provide the information of all (by means of the symmetry at hand) independent components of the ansätze. Explicit examples how this information can be computed are provided by the functions for areaList4, ... and also by metricList2, ... . The output is given as spacetime tensor STTens and is explicitly symmetrized.

mkAnsatzTensorFast :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> [[Int]] -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

This function provides the same functionality as mkAnsatzTensorFast but without explicit symmetrization of the result. In other words from each symmetrization sum only the first summand is returned. This is advantageous as for large expressions explicit symmetrization might be expensive and further is sometime simply not needed as the result might for instance be contracted against a symmetric object, which thus enforces the symmetry, in further steps of the computation.

mkAnsatzTensorFastAbs :: Int -> Symmetry -> [([Int], Int, [IndTupleAbs n1 0 n2 0 n3 0])] -> (AnsatzForestEta, AnsatzForestEpsilon, ATens n1 0 n2 0 n3 0 AnsVarR) Source #

This function provides the same functionality as mkAnsatzTensorFast but returns the result as tensor of type ATens AnsVarR. This is achieved by explicitly providing not only the list of individual index combinations but also their representation using more abstract index types as input. The input list consists of triplets where the first element as before labels the independent index combinations, the second element labels the corresponding multiplicity under the present symmetry. The multiplicity simply encodes how many different combinations of spacetime indices correspond to the same abstract index tuple. The last element of the input triplets labels the individual abstract index combinations that then correspond to the provided spacetime indices. If some of the initial symmetries are still present when using abstract indices this last element might consists of more then one index combination. The appropriate value that is retrieved from the two ansatz forests is then written to each of the provided index combinations.

mkAnsatzTensorFastSym' :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

Provides the same functionality as mkAnsatzTensorFastSym with the difference that the list of independent index combinations is automatically computed form the present symmetry. Note that this yields slightly higher computation costs.

mkAnsatzTensorFast' :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

Provides the same functionality as mkAnsatzTensorFast with the difference that the list of independent index combinations is automatically computed form the present symmetry. Note that this yields slightly higher computation costs.

## The Memory Optimized Way

mkAnsatzTensorIncrementalSym :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> [[Int]] -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

The function is similar to mkAnsatzTensorFastSym yet it uses an algorithm that prioritizes memory usage over fast computation times.

mkAnsatzTensorIncremental :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> [[Int]] -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

The function is similar to mkAnsatzTensorFast yet it uses an algorithm that prioritizes memory usage over fast computation times.

mkAnsatzTensorIncrementalAbs :: Int -> Symmetry -> [([Int], Int, [IndTupleAbs n1 0 n2 0 n3 0])] -> (AnsatzForestEta, AnsatzForestEpsilon, ATens n1 0 n2 0 n3 0 AnsVarR) Source #

The function is similar to mkAnsatzTensorFastAbs yet it uses an algorithm that prioritizes memory usage over fast computation times.

mkAnsatzTensorIncrementalSym' :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

The function is similar to mkAnsatzTensorFastSym' yet it uses an algorithm that prioritizes memory usage over fast computation times.

mkAnsatzTensorIncremental' :: forall (n :: Nat). KnownNat n => Int -> Symmetry -> (AnsatzForestEta, AnsatzForestEpsilon, STTens n 0 AnsVarR) Source #

The function is similar to mkAnsatzTensorFast' yet it uses an algorithm that prioritizes memory usage over fast computation times.

## Symmetry Type

type Symmetry = ([(Int, Int)], [(Int, Int)], [([Int], [Int])], [[Int]], [[[Int]]]) Source #

Type alias to encode the symmetry information. The individual Int values label the individual spacetime indices, the Symmetry type is the compromised of (SymPairs, ASymPairs, BlockSyms, CyclicSyms, CyclicBlockSyms).

## Evaluation Lists

### Area Metric

The following provides an example of evaluation lists.

areaList4 :: [([Int], Int, [IndTupleAbs 1 0 0 0 0 0])] Source #

Evaluation list for $$a^A$$.

areaList6 :: [([Int], Int, [IndTupleAbs 1 0 1 0 0 0])] Source #

Evaluation list for $$a^{AI}$$.

areaList8 :: [([Int], Int, [IndTupleAbs 2 0 0 0 0 0])] Source #

Evaluation list for $$a^{A B}$$. Note that also when using the abstract indices this ansatz still features the $$A \leftrightarrow B$$ symmetry.

areaList10_1 :: [([Int], Int, [IndTupleAbs 2 0 0 0 2 0])] Source #

Evaluation list for $$a^{Ap Bq}$$. Note that also when using the abstract indices this ansatz still features the $$(Ap) \leftrightarrow (Bq)$$ symmetry.

areaList10_2 :: [([Int], Int, [IndTupleAbs 2 0 1 0 0 0])] Source #

Evaluation list for $$a^{ABI}$$.

areaList12 :: [([Int], Int, [IndTupleAbs 3 0 0 0 0 0])] Source #

Evaluation list for $$a^{ABC}$$. Note that also when using the abstract indices this ansatz still features the symmetry under arbitrary permutations of $$ABC$$.

areaList14_1 :: [([Int], Int, [IndTupleAbs 3 0 0 0 2 0])] Source #

Evaluation list for $$a^{ABp Cq}$$. Note that also when using the abstract indices this ansatz still features the $$(Bp) \leftrightarrow (Cq)$$ symmetry.

areaList14_2 :: [([Int], Int, [IndTupleAbs 3 0 1 0 0 0])] Source #

Evaluation list for $$a^{A B C I}$$. Note that also when using the abstract indices this ansatz still features the $$(A) \leftrightarrow (B)$$ symmetry.

### Metric

In the documentation of the following further provided exemplary evaluation lists index labels $$A, B, C, ...$$ also refers to indices of type Ind9.

metricList2 :: [([Int], Int, [IndTupleAbs 0 0 1 0 0 0])] Source #

Evaluation list for $$a^{A}$$.

metricList4_1 :: [([Int], Int, [IndTupleAbs 0 0 2 0 0 0])] Source #

Evaluation list for $$a^{AI}$$.

metricList4_2 :: [([Int], Int, [IndTupleAbs 0 0 2 0 0 0])] Source #

Evaluation list for $$a^{A B}$$. Note that also when using the abstract indices this ansatz still features the $$A \leftrightarrow B$$ symmetry.

metricList6_1 :: [([Int], Int, [IndTupleAbs 0 0 2 0 2 0])] Source #

Evaluation list for $$a^{Ap Bq}$$. Note that also when using the abstract indices this ansatz still features the $$(Ap) \leftrightarrow (Bq)$$ symmetry.

metricList6_2 :: [([Int], Int, [IndTupleAbs 0 0 3 0 0 0])] Source #

Evaluation list for $$a^{ABI}$$.

metricList6_3 :: [([Int], Int, [IndTupleAbs 0 0 3 0 0 0])] Source #

Evaluation list for $$a^{ABC}$$. Note that also when using the abstract indices this ansatz still features the symmetry under arbitrary permutations of $$ABC$$.

metricList8_1 :: [([Int], Int, [IndTupleAbs 0 0 3 0 2 0])] Source #

Evaluation list for $$a^{ABp Cq}$$. Note that also when using the abstract indices this ansatz still features the $$(Bp) \leftrightarrow (Cq)$$ symmetry.

metricList8_2 :: [([Int], Int, [IndTupleAbs 0 0 4 0 0 0])] Source #

Evaluation list for $$a^{A B C I}$$. Note that also when using the abstract indices this ansatz still features the $$(A) \leftrightarrow (B)$$ symmetry.

## Symmetry Lists

### Area Metric

The following are examples of symmetry lists.

Symmetry list for areaList4.

Symmetry list for areaList6.

Symmetry list for areaList8.

Symmetry list for areaList10_1.

Symmetry list for areaList10_2.

Symmetry list for areaList12.

Symmetry list for areaList14_1.

Symmetry list for areaList14_2.

### Metric

The following are examples of symmetry lists.

Symmetry list for metricList2.

Symmetry list for metricList4_1.

Symmetry list for metricList4_2.

Symmetry list for metricList6_1.

Symmetry list for metricList6_2.

Symmetry list for metricList6_3.

Symmetry list for metricList8_1.

Symmetry list for metricList8_2`.

areaList16_1 :: [([Int], Int, [IndTupleAbs 3 0 1 0 2 0])] Source #