in meta/src/main/java/org/arend/lib/meta/linear/TermCompiler.java [74:107]
public CompiledTerms compileTerms(CoreExpression expr1, CoreExpression expr2) {
MyCompiledTerm term1 = compileTerm(expr1);
MyCompiledTerm term2 = compileTerm(expr2);
if (kind == RingKind.RAT || kind == RingKind.RAT_ALG) {
BigInteger lcm = BigInteger.ONE;
List<BigRational> list1 = (List<BigRational>) (List<?>) term1.coefficients;
List<BigRational> list2 = (List<BigRational>) (List<?>) term2.coefficients;
for (BigRational rat : list1) {
lcm = lcm.divide(lcm.gcd(rat.denom)).multiply(rat.denom);
}
for (BigRational rat : list2) {
lcm = lcm.divide(lcm.gcd(rat.denom)).multiply(rat.denom);
}
List<BigInteger> coefs1 = new ArrayList<>(list1.size());
for (BigRational rat : list1) {
coefs1.add(rat.nom.multiply(lcm.divide(rat.denom)));
}
List<BigInteger> coefs2 = new ArrayList<>(list2.size());
for (BigRational rat : list2) {
coefs2.add(rat.nom.multiply(lcm.divide(rat.denom)));
}
return new CompiledTerms(new CompiledTerm(term1.concrete, coefs1, term1.vars), new CompiledTerm(term2.concrete, coefs2, term2.vars), lcm);
} else {
List<BigInteger> coefs1 = new ArrayList<>(term1.coefficients.size());
for (Ring ring : term1.coefficients) {
coefs1.add(((IntRing) ring).number);
}
List<BigInteger> coefs2 = new ArrayList<>(term2.coefficients.size());
for (Ring ring : term2.coefficients) {
coefs2.add(((IntRing) ring).number);
}
return new CompiledTerms(new CompiledTerm(term1.concrete, coefs1, term1.vars), new CompiledTerm(term2.concrete, coefs2, term2.vars), BigInteger.ONE);
}
}