240{
241 const FreeModule *F =
nodes[0]->output_free_module();
243 {
244 ERROR(
"expected matrices to have same number of rows");
245 return nullptr;
246 }
248 MatrixConstructor mat_lift(
nodes[1]->output_free_module(), m->
cols(),
nullptr);
249
250 for (
int i = 0; i < m->
n_cols(); i++)
251 {
252 const FreeModule *Fsyz =
nodes[1]->output_free_module();
253
254 ring_elem denom;
255 gbvector *f =
originalR->translate_gbvector_from_vec(F, (*m)[i], denom);
256 gbvector *fsyz =
GR->gbvector_zero();
257
258 nodes[1]->reduce(f, fsyz);
259
260 vec fv =
originalR->translate_gbvector_to_vec_denom(F, f, denom);
261 GR->get_flattened_coefficients()->negate_to(denom);
262 vec fsyzv =
originalR->translate_gbvector_to_vec_denom(Fsyz, fsyz, denom);
263 mat_red.set_column(i, fv);
264 mat_lift.set_column(i, fsyzv);
265 }
266 lift = mat_lift.to_matrix();
267 return mat_red.to_matrix();
268}
const_monomial degree_shift() const
const FreeModule * rows() const
const FreeModule * cols() const
const PolynomialRing * originalR