# Singular

##### 7.5.21.0. ensureLeftNcfrac
Procedure from library `ncfrac.lib` (see ncfrac_lib).

Usage:
ensureLeftNcfrac(frac), ncfrac frac

Purpose:
ensures that frac has a left representation (by computing it if not alreaDy known)

Return:
ncfrac, a representation of frac which has a left representation

Example:
 ```LIB "ncfrac.lib"; ==> // ** redefining testNcfrac (LIB "ncfrac.lib";) ==> // ** redefining testNcloc ( LIB "ncloc.lib";) ring R = 0,(x,y,Dx,Dy),dp; def S = Weyl(); setring S; S; ==> // coefficients: QQ ==> // number of vars : 4 ==> // block 1 : ordering dp ==> // : names x y Dx Dy ==> // block 2 : ordering C ==> // noncommutative relations: ==> // Dxx=x*Dx+1 ==> // Dyy=y*Dy+1 // monoidal localization poly g1 = x+3; poly g2 = x*y; list L = g1,g2; ncloc loc0 = L; poly g = g1^2*g2; poly f = Dx; ncfrac frac0 = [0,0,f,g]; frac0.loc = loc0; ncfrac rm = ensureLeftNcfrac(frac0); print(rm); ==> left repr.: (x^8*y^4+12*x^7*y^4+54*x^6*y^4+108*x^5*y^4+81*x^4*y^4,x^5*y^3\ *Dx+6*x^4*y^3*Dx-3*x^4*y^3+9*x^3*y^3*Dx-12*x^3*y^3-9*x^2*y^3) ==> right repr.: (Dx,x^3*y+6*x^2*y+9*x*y) rm.lnum*g-rm.lden*f; ==> 0 // geometric localization ncloc loc1 = ideal(x-1,y-3); f = Dx; g = x^2+y; ncfrac frac1 = [0,0,f,g]; frac1.loc = loc1; ncfrac rg = ensureLeftNcfrac(frac1); print(rg); ==> left repr.: (x^4+2*x^2*y+y^2,x^2*Dx+y*Dx-2*x) ==> right repr.: (Dx,x^2+y) rg.lnum*g-rg.lden*f; ==> 0 // rational localization intvec rat = 1; ncloc loc2 = rat; f = Dx+Dy; g = x; ncfrac frac2 = [0,0,f,g]; frac2.loc = loc2; ncfrac rr = ensureLeftNcfrac(frac2); print(rr); ==> left repr.: (x^2,x*Dx+x*Dy-1) ==> right repr.: (Dx+Dy,x) rr.lnum*g-rr.lden*f; ==> 0 ```