public interface GroupElementExpression extends Expression
Expression that evaluates to a GroupElement.| Modifier and Type | Method and Description |
|---|---|
default GroupElement |
evaluate()
Evaluates the expression.
|
GroupElement |
evaluate(Substitution substitutions)
Evaluates the expression after substituting contained variables.
|
default GroupOpExpr |
flatten()
Returns an equivalent expression of the form \(y \cdot \prod(g_i^{x_i})\), where \(y\) doesn't contain any variables.
|
GroupOpExpr |
flatten(ExponentExpr exponent)
Linearizes the expression \(\text{this}^\text{exponent}\).
|
Group |
getGroup()
Returns the group such that this expression evaluates to an element of this group, or null if group is unknown
(for example, if expression consists only of variables).
|
default GroupElementExpression |
inv() |
default GroupEqualityExpr |
isEqualTo(GroupElement other) |
default GroupEqualityExpr |
isEqualTo(GroupElementExpression other) |
default GroupEqualityExpr |
isEqualTo(java.lang.String other) |
GroupOpExpr |
linearize()
Returns an equivalent expression of the form
y * f(groupVariables, exponentVariables),
where y is constant (no variables), and the expression f is linear. |
default GroupElementExpression |
op(GroupElement rhs) |
default GroupElementExpression |
op(GroupElementExpression rhs) |
default GroupElementExpression |
op(java.lang.String rhs) |
default GroupElementExpression |
opPow(GroupElement rhs,
java.math.BigInteger exponentOfRhs)
Applies the group operation to this expression and the given group element raised to the given power.
|
default GroupElementExpression |
opPow(GroupElement rhs,
ExponentExpr exponentOfRhs)
Applies the group operation to this expression and the given group element raised to the given power.
|
default GroupElementExpression |
opPow(GroupElementExpression rhs,
java.math.BigInteger exponentOfRhs)
Applies the group operation to this expression and the given expression raised to the given power.
|
default GroupElementExpression |
opPow(GroupElementExpression rhs,
ExponentExpr exponentOfRhs)
Applies the group operation to this expression and the given expression raised to the given power.
|
default GroupElementExpression |
opPow(GroupElementExpression rhs,
java.lang.String exponentOfRhs)
Applies the group operation to this expression and the given expression raised to the given power variable.
|
default GroupElementExpression |
opPow(GroupElementExpression rhs,
Zn.ZnElement exponentOfRhs)
Applies the group operation to this expression and the given expression raised to the given power.
|
default GroupElementExpression |
opPow(GroupElement rhs,
java.lang.String exponentOfRhs)
Applies the group operation to this expression and the given group element raised to the given power variable.
|
default GroupElementExpression |
opPow(GroupElement rhs,
Zn.ZnElement exponentOfRhs)
Applies the group operation to this expression and the given group element raised to the given power.
|
default GroupElementExpression |
pow(java.math.BigInteger exponent) |
default GroupElementExpression |
pow(ExponentExpr exponent) |
default GroupElementExpression |
pow(java.lang.Long exponent) |
default GroupElementExpression |
pow(RingElement exponent) |
default GroupElementExpression |
pow(java.lang.String exponent) |
default GroupElementExpression |
precompute()
Prepares this expression for more efficient evaluation by sacrificing memory instead similar to
GroupElement.precomputePow(). |
default GroupElementExpression |
substitute(java.lang.String variable,
Expression substitution) |
GroupElementExpression |
substitute(Substitution substitutions)
Substitutes variables using the given function.
|
default GroupElementExpression |
substitute(VariableExpression variable,
Expression substitution)
Substitutes a specific variable with the given expression.
|
accumulate, containsExprMatchingPredicate, containsVariables, forEachChild, getVariables, treeWalkdefault GroupElement evaluate()
Expressionevaluate in interface ExpressionGroupElement evaluate(Substitution substitutions)
Expressionevaluate in interface Expressionsubstitutions - a function mapping variables to expressions that can be evaluatedGroupElementExpression substitute(Substitution substitutions)
Expressionsubstitute in interface Expressionsubstitutions - a function mapping variable expressions to their replacement expressionsdefault GroupElementExpression substitute(java.lang.String variable, Expression substitution)
substitute in interface Expressiondefault GroupElementExpression substitute(VariableExpression variable, Expression substitution)
Expressionsubstitute in interface Expressionvariable - the variable to replacesubstitution - the expression to substitutedefault GroupElementExpression op(GroupElementExpression rhs)
default GroupElementExpression op(GroupElement rhs)
default GroupElementExpression op(java.lang.String rhs)
default GroupElementExpression pow(ExponentExpr exponent)
default GroupElementExpression pow(java.math.BigInteger exponent)
default GroupElementExpression pow(java.lang.Long exponent)
default GroupElementExpression pow(RingElement exponent)
default GroupElementExpression pow(java.lang.String exponent)
default GroupElementExpression opPow(GroupElementExpression rhs, ExponentExpr exponentOfRhs)
default GroupElementExpression opPow(GroupElementExpression rhs, java.math.BigInteger exponentOfRhs)
default GroupElementExpression opPow(GroupElementExpression rhs, Zn.ZnElement exponentOfRhs)
default GroupElementExpression opPow(GroupElementExpression rhs, java.lang.String exponentOfRhs)
exponentOfRhs - the power variable's namedefault GroupElementExpression opPow(GroupElement rhs, ExponentExpr exponentOfRhs)
default GroupElementExpression opPow(GroupElement rhs, java.math.BigInteger exponentOfRhs)
default GroupElementExpression opPow(GroupElement rhs, Zn.ZnElement exponentOfRhs)
default GroupElementExpression opPow(GroupElement rhs, java.lang.String exponentOfRhs)
exponentOfRhs - the power variable's namedefault GroupElementExpression inv()
default GroupEqualityExpr isEqualTo(GroupElementExpression other)
default GroupEqualityExpr isEqualTo(GroupElement other)
default GroupEqualityExpr isEqualTo(java.lang.String other)
Group getGroup()
default GroupElementExpression precompute()
GroupElement.precomputePow().
First linearizes this expression via linearize() and then calls GroupElement.precomputePow()
on each GroupElementConstantExpr found in the base of each GroupPowExpr as these will be
exponentiated later and can use the precomputations.
GroupOpExpr linearize() throws java.lang.IllegalArgumentException
y * f(groupVariables, exponentVariables),
where y is constant (no variables), and the expression f is linear.
Linearity means that
f(groupVariables, exponentVariables) * f(groupVariables2, exponentVariables2) = f(groupVariables * groupVariables2, exponentVariables + exponentVariables2)The exact result is a
GroupOpExpr where the left-hand-side y fulfills
y.containsVariables() == false and the right-hand side is linear.java.lang.IllegalArgumentException - if it's not possible to form the desired output
(e.g., the input is something like \(g^{x_1 \cdot x_2}\) for variables \(x_1, x_2\)).default GroupOpExpr flatten()
GroupOpExpr
where the left-hand side is a GroupElementConstantExpr y and the right-hand side is an expression tree
where each inner nodes is a GroupOpExpr or a PairingExpr whose children are flattened.GroupOpExpr flatten(ExponentExpr exponent)