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

◆ lift()

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

Implements Ring.

Definition at line 267 of file localring.cpp.

268{
269 // Rg = R ---> frac R
270 // f is an element of frac R.
271
272 ring_elem
273 hdenom; // used in the case when the denominator can be a unit, but not 1
274 // e.g. when this = frac (QQ[x,y,z]). Is an element of
275 if (Rg == mRing)
276 {
277 const local_elem *h = f.get_local_elem();
278 if (mRing->is_equal(h->denom, mRing->one()))
279 {
280 result = mRing->copy(h->numer);
281 return true;
282 }
283 else
284 {
285 if (mRing->is_field())
286 {
287 // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
288 // try to lift denominator. If can, can lift, otherwise not.
289 if (mRing->lift(mRing, h->denom, hdenom))
290 {
291 ring_elem hinv = mRing->invert(hdenom);
292 result = mRing->mult(hinv, h->numer);
293 return true;
294 }
295 }
296 }
297 }
298 return false;
299}
const PolyRing * mRing
Definition localring.hpp:69
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem numer
Definition localring.hpp:48
ring_elem denom
Definition localring.hpp:49
const local_elem * get_local_elem() const
Definition ringelem.hpp:136

References local_elem::denom, ring_elem::get_local_elem(), mRing, local_elem::numer, result(), and Ring::Ring().