Ejemplo n.º 1
0
// condition |is_central(roots,t)| means $t=\exp(2pi\pi)$ with $<p,roots>$ int
bool is_central(const WeightList& alpha, const TorusElement& t)
{
  const RatWeight& rw = t.as_Qmod2Z(); // using $\exp(i\pi.)$ is faster, but
  arithmetic::Numer_t d = 2*rw.denominator(); // it requires even pairings
  for (weyl::Generator s=0; s<alpha.size(); ++s)
    if (rw.numerator().dot(alpha[s])%d != 0) // see if division is exact
      return false;

  return true;
}
Ejemplo n.º 2
0
bool is_central(const WeightList& alpha, const TorusElement& t)
{
  RatWeight rw = t.as_Qmod2Z();
  arithmetic::Numer_t d = 2*rw.denominator();
  for (weyl::Generator s=0; s<alpha.size(); ++s)
    if (alpha[s].dot(rw.numerator())%d != 0) // see if division is exact
      return false;

  return true;
}
Ejemplo n.º 3
0
// For a $\xi$-stable torus element, find $\xi$-stable pre-image by $\exp_1$
// We need to correct t.log_2pi, shifting by $X_*$ to make it $\xi$-stable
// Return elected choice for the class of rational coweights representing $t$
RatCoweight stable_log(const TorusElement& t, CoweightInvolution xi)
{
  xi+=1; // we just need xi+1, and this is why it was passed by-value
  CoeffList diagonal;
  const int_Matrix B = matreduc::adapted_basis(xi,diagonal);
  const int_Matrix B_inv = B.inverse();
  const auto d=diagonal.size(), n=B.numRows();

  // Get coordinates on $\xi$-stable part of $B$, and convert back to original
  // By doing reduction modulo 1 half-way, ensure elected result is produced
  return B.block(0,0,n,d)*( B_inv.block(0,0,d,n)*t.log_2pi() %=1);
}