Macaulay2 Engine
Loading...
Searching...
No Matches

◆ lift()

bool FractionField::lift ( const Ring * R,
const ring_elem f,
ring_elem & result ) const
virtual

Implements Ring.

Definition at line 325 of file frac.cpp.

328{
329 // Rg = R ---> frac R
330 // f is an element of frac R.
331
332 ring_elem
333 hdenom; // used in the case when the denominator can be a unit, but not 1
334 // e.g. when this = frac (QQ[x,y,z]). Is an element of
335 if (Rg == R_)
336 {
337 frac_elem *h = FRAC_VAL(f);
338 if (R_->is_equal(h->denom, R_->one()))
339 {
340 result = R_->copy(h->numer);
341 return true;
342 }
343 else
344 {
345 if (R_->is_field())
346 {
347 // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
348 // try to lift denominator. If can, can lift, otherwise not.
349 if (R_->lift(R_, h->denom, hdenom))
350 {
351 ring_elem hinv = R_->invert(hdenom);
352 result = R_->mult(hinv, h->numer);
353 return true;
354 }
355 }
356 }
357 }
358 return false;
359}
const PolyRingFlat * R_
Definition frac.hpp:63
#define FRAC_VAL(f)
Definition frac.cpp:14
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem numer
Definition frac.hpp:43
ring_elem denom
Definition frac.hpp:44

References frac_elem::denom, FRAC_VAL, frac_elem::numer, R_, result(), and Ring::Ring().