v=[0,1/3,t,y,z,[1,1/3]~, [1,1,1/3]~];
test(P) =
{ my(f, V = apply(t->iferr(nfmodpr(K,t,P),E,E),v));

  print(V);
  V = select(t->type(t)!="t_ERROR", V);
  print(K.pol, ": ", P);
  f=[(x,y)->x/y, (x,y)->x*y];
  for (i=1,#V,
    for (j=i,#V,
      print("*",[i,j],":");
      for (k=1, #f, print(iferr(f[k](V[i],V[j]), E,E)))
    )
  );
  for(i=1,#v,
    print("*",i,":");
    print(iferr(nfeltreducemodpr(K,v[i],P), E,E));
  );
}
K=nfinit(y^2+1);
P = nfmodprinit(K,idealprimedec(K,2)[1]); test(P);
P = nfmodprinit(K,idealprimedec(K,3)[1],t); test(P);
Kerr = K=nfinit(y^3-9);
Perr = P = nfmodprinit(K,idealprimedec(K,3)[1]); test(P);
nfmodpr(K, [y, 2; y^2/9, 2], P)
nfmodpr(K, [y, 3; y^2/9, 2], P)
nfmodpr(K, [y, 0; y^2/3, 2], P)
P = nfmodprinit(K,idealprimedec(K,2)[2],t); test(P);

K=nfinit(y^2-1105);
P7=nfmodprinit(K,idealprimedec(K,7)[1]);
nfmodprlift(K,nfmodpr(K,y,P7),P7)
P = nfmodprinit(K,idealprimedec(K,2)[1]);
nfeltreducemodpr(K,(-y+1)/2,P)
nffactormod(K, x^3+y*x^2+y*x+1, P)
nfmodprlift(K,1,P)

PU(x)=apply(t->nfmodpr(K,t,P),x);
LI(x)=nfmodprlift(K,x,P);

m=PU([1,y;[1/2,1/2]~,1]); v = PU([1,y]~)
LI(matker(m))
LI(matsolve(m,v))

m=PU([y,y^2;y^2,y^3])
LI(matker(m))
LI(matsolve(m,v))
LI(matsolve(m,m))

K=nfinit(charpoly(Mod(2*x+1,polcyclo(51))));
P=idealprimedec(K,2)[1];
nfeltreducemodpr(K,P.gen[2],nfmodprinit(K,P))

nfmodpr(nfinit(x),[],[]~)

nf = nfinit(y^4-2);
pr = idealprimedec(nf,3)[1]; modpr = nfmodprinit(nf,pr,t);
a = nfmodpr(nf,y^5,modpr)
nfmodprlift(nf,a,modpr)
pr = idealprimedec(nf,2)[1]; modpr = nfmodprinit(nf,pr,t);
a = nfmodpr(nf,y,modpr) \\ #2580
nfmodpr(nf, [y,3; 1+y,2], modpr)
nfmodpr(nf, [y/5,3; 1+y,2], modpr)

\\ ERRORS
nfmodpr(Kerr, [y, 2; y^2/9, 3], Perr)
nfeltmulmodpr(nfinit(x),x,x,1);
