public final class TypeFinder
extends java.lang.Object
The main part of the calculation is to take elements a and b of the algebra such that Cg(a, b) is join irreducible, and a congruence alpha above the lower cover of Cg(a, b) but not above Cg(a, b) and find c and d such that Cg(c, d) = Cg(a, b) and {c, d} is a subtrace. Then it finds the type of this pair.
The algorithm used is similar to that described in J. Berman, E. W. Kiss, P. Prőhle, and Á. Szendrei The set of type of a finitely generated variety, Discrete Math. 112 (1993), 1-20. Preprint available on the second author's web site: http://www.cs.elte.hu/~ewkiss/. They define a directed graph G(A) with vertices two elements subsets of A and edges corresponding to images of unary polynomials.
Our algorithm restricts this to only those pairs x, y such that Cg(x, y) = Cg(a, b) and takes advantage of the fact that this graph is a quasiordered set and that a subtrace corresponds to a minimal element of it. This allows us to find a subtrace with only calculating part of the graph. But in the worst case analysis this is no better than the original algorithm but in most cases it is much faster.
One of the nice things about this is the calculations are really taking place in A/alpha even though we do not explicitly for that quotient. As noted above alpha can be the lower cover of Cg(a, b) but it also can be a meet irreducible of small index.
Modifier and Type | Field and Description |
---|---|
static boolean |
printSubtrace |
Constructor and Description |
---|
TypeFinder(SmallAlgebra alg) |
TypeFinder(SmallAlgebra alg,
Partition alpha) |
Modifier and Type | Method and Description |
---|---|
Subtrace |
findSubtrace(IntArray pairIA)
This looks at the image of the ordered pair under Pol_1(A).
|
Subtrace |
findSubtrace(Partition beta) |
Subtrace |
findSubtrace(Partition beta,
Partition alpha)
Find a subtrace for beta, which is assumed to be
join irreducible, over its lower cover.
|
int |
findType(Partition beta) |
int |
findType(Partition beta,
Partition alpha)
Find the type for beta, which is assumed to be
join irreducible, over its lower cover.
|
int |
findType(Subtrace subtrace)
Finds the type of a subtrace and sets the type field of the it.
|
java.util.HashSet<java.lang.Integer> |
findTypeSet()
Find the TCT type set of the algebra A.
|
void |
init() |
void |
init(Partition alpha) |
boolean |
isSubtrace(IntArray ia,
Partition beta)
Test if
ia is a beta subtrace. |
static void |
main(java.lang.String[] args) |
IntArray |
nextPairForSubtrace(IntArray pair,
java.util.Set<IntArray> univHS,
java.util.Set<IntArray> unorderedUnivHS,
java.util.List<IntArray> univ)
Looks for another pair in the subalgebra of A^2 generated by
the given pair and the constants, whose unordered pair has not been
visited before and returns it.
|
public static final boolean printSubtrace
public TypeFinder(SmallAlgebra alg)
public TypeFinder(SmallAlgebra alg, Partition alpha)
public void init()
public void init(Partition alpha)
public java.util.HashSet<java.lang.Integer> findTypeSet()
public boolean isSubtrace(IntArray ia, Partition beta)
ia
is a beta subtrace.ia
- beta
- public Subtrace findSubtrace(Partition beta, Partition alpha)
beta
- a join irreducible congruence.alpha
- a congruence whose join with the lower cover of
beta is not above beta.public Subtrace findSubtrace(IntArray pairIA)
public IntArray nextPairForSubtrace(IntArray pair, java.util.Set<IntArray> univHS, java.util.Set<IntArray> unorderedUnivHS, java.util.List<IntArray> univ)
univHS
and univ
are passed
from caller so it can check if there is an involution and save
the univ
on the subtrace object.pair
- univHS
- undorderedUnivHS
- univ
- public int findType(Partition beta)
public int findType(Partition beta, Partition alpha)
beta
- a join irreducible congruence.alpha
- a congruence whose join with the lower cover of
beta is not above beta.public int findType(Subtrace subtrace)
Let [c,d] be the subtrace. We think of quadruples as maps from {c,d}^2 into A in the row order. That is (c,c), (c,d), (d,c), (d,d). So the projections are [c,c,d,d] and [c,d,c,d]. So a (c,d) 2-snag is [c,c,c,d] and a (d,c) 2-snag is [c,d,d,d].
public static final void main(java.lang.String[] args) throws java.lang.Exception
java.lang.Exception
Copyright 2003 Ralph Freese. All Rights Reserved.