public CompiledTerms compileTerms()

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);
    }
  }