Package edu.jas.poly

Class RelationTable<C extends RingElem<C>>

java.lang.Object
edu.jas.poly.RelationTable<C>
All Implemented Interfaces:
Serializable

public class RelationTable<C extends RingElem<C>> extends Object implements Serializable
RelationTable for solvable polynomials. This class maintains the non-commutative multiplication relations of solvable polynomial rings. The table entries are initialized with relations of the form xj * xi = pij. During multiplication the relations are updated by relations of the form xjk * xil = pijkl. If no relation for xj * xi is found in the table, this multiplication is assumed to be commutative xi xj. Can also be used for relations between coefficients and main variables.
See Also:
  • Field Details

    • table

      public final Map<List<Integer>,List> table
      The data structure for the relations.
    • ring

      public final GenSolvablePolynomialRing<C extends RingElem<C>> ring
      The factory for the solvable polynomial ring.
    • coeffTable

      public final boolean coeffTable
      Usage indicator: table or coeffTable.
    • logger

      private static final org.apache.logging.log4j.Logger logger
    • debug

      private static final boolean debug
  • Constructor Details

    • RelationTable

      public RelationTable(GenSolvablePolynomialRing<C> r)
      Constructor for RelationTable requires ring factory. Note: This constructor is called within the constructor of the ring factory, so methods of this class can only be used after the other constructor has terminated.
      Parameters:
      r - solvable polynomial ring factory.
    • RelationTable

      public RelationTable(GenSolvablePolynomialRing<C> r, boolean coeffTable)
      Constructor for RelationTable requires ring factory. Note: This constructor is called within the constructor of the ring factory, so methods of this class can only be used after the other constructor has terminated.
      Parameters:
      r - solvable polynomial ring factory.
      coeffTable - indicator for coeffTable.
  • Method Details

    • equals

      public boolean equals(Object p)
      RelationTable equals. Tests same keySets and base relations.
      Overrides:
      equals in class Object
      See Also:
    • fromListDeg2

      Map<ExpVectorPair,GenPolynomial<C>> fromListDeg2(List a)
      Convert mixed list to map for base relations.
      Parameters:
      a - mixed list
    • fromListDeg2HashCode

      int fromListDeg2HashCode(List a)
      Hash code for base relations.
      Parameters:
      a - mixed list
    • equalMaps

      boolean equalMaps(Map<ExpVectorPair,GenPolynomial<C>> m1, Map<ExpVectorPair,GenPolynomial<C>> m2)
      Equals for special maps.
      Parameters:
      m1 - first map
      m2 - second map
    • hashCode

      public int hashCode()
      Hash code for this relation table.
      Overrides:
      hashCode in class Object
      See Also:
    • isEmpty

      public boolean isEmpty()
      Test if the table is empty.
      Returns:
      true if the table is empty, else false.
    • toString

      public String toString()
      Get the String representation.
      Overrides:
      toString in class Object
      See Also:
    • toString

      public String toString(String[] vars)
      Get the String representation.
      Parameters:
      vars - names for the variables.
      See Also:
    • toScript

      public String toScript()
      Get a scripting compatible string representation.
      Returns:
      script compatible representation for this relation table.
    • update

      public void update(ExpVector e, ExpVector f, GenSolvablePolynomial<C> p)
      Update or initialize RelationTable with new relation. relation is e * f = p.
      Parameters:
      e - first term.
      f - second term.
      p - solvable product polynomial.
    • update

      public void update(GenPolynomial<C> E, GenPolynomial<C> F, GenSolvablePolynomial<C> p)
      Update or initialize RelationTable with new relation. relation is e * f = p.
      Parameters:
      E - first term polynomial.
      F - second term polynomial.
      p - solvable product polynomial.
    • update

      public void update(GenPolynomial<C> E, GenPolynomial<C> F, GenPolynomial<C> p)
      Update or initialize RelationTable with new relation. relation is e * f = p.
      Parameters:
      E - first term polynomial.
      F - second term polynomial.
      p - product polynomial.
    • update

      public void update(ExpVector e, ExpVector f, GenPolynomial<C> p)
      Update or initialize RelationTable with new relation. relation is e * f = p.
      Parameters:
      e - first term.
      f - second term.
      p - solvable product polynomial.
    • lookup

      public TableRelation<C> lookup(ExpVector e, ExpVector f)
      Lookup RelationTable for existing relation. Find p with e * f = p. If no relation for e * f is contained in the table then return the symmetric product p = 1 e f.
      Parameters:
      e - first term.
      f - second term.
      Returns:
      t table relation container, contains e' and f' with e f = e' lt(p) f'.
    • makeKey

      protected List<Integer> makeKey(ExpVector e, ExpVector f)
      Construct a key for (e,f).
      Parameters:
      e - first term.
      f - second term.
      Returns:
      k key for (e,f).
    • size

      public int size()
      Size of the table.
      Returns:
      n number of non-commutative relations.
    • extend

      public void extend(RelationTable<C> tab)
      Extend variables. Used e.g. in module embedding. Extend all ExpVectors and polynomials of the given relation table by i elements and put the relations into this table, i.e. this should be empty.
      Parameters:
      tab - a relation table to be extended and inserted into this.
    • contract

      public void contract(RelationTable<C> tab)
      Contract variables. Used e.g. in module embedding. Contract all ExpVectors and polynomials of the given relation table by i elements and put the relations into this table, i.e. this should be empty.
      Parameters:
      tab - a relation table to be contracted and inserted into this.
    • recursive

      public void recursive(RelationTable tab)
      Recursive representation. Split all ExpVectors and polynomials of the given relation table to lower elements and upper elements and put the relations into this table or this as coefficient table, i.e. this should be empty.
      Parameters:
      tab - a relation table to be contracted and inserted into this.
    • reverse

      public void reverse(RelationTable<C> tab)
      Reverse variables and relations. Used e.g. in opposite rings. Reverse all ExpVectors and polynomials of the given relation table and put the modified relations into this table, i.e. this should be empty.
      Parameters:
      tab - a relation table to be reverted and inserted into this.
    • relationList

      public List<GenSolvablePolynomial<C>> relationList()
      Convert relation table to list of polynomial triples.
      Returns:
      rel = (e1,f1,p1, ...) where ei * fi = pi are solvable relations.
    • addSolvRelations

      public void addSolvRelations(List<GenSolvablePolynomial<C>> rel)
      Add list of polynomial triples as relations.
      Parameters:
      rel - = (e1,f1,p1, ...) where ei * fi = pi are solvable relations. Note: Only because of type erasure, equivalent to addRelations().
    • addRelations

      public void addRelations(List<GenPolynomial<C>> rel)
      Add list of polynomial triples as relations.
      Parameters:
      rel - = (e1,f1,p1, ...) where ei * fi = pi are solvable relations.