Question: Why does my procedure not work?

R := PolynomialRing([x, y, z]);
p1 := x^2+5-2*x*z;
p2 := z^3*y+x*y^2;
p3 := -8*z^3+3*y^2;
F := [p1, p2, p3];
MainVariable(p1, PolynomialRing([x, y, z]));
MainVariable(p1, PolynomialRing([z, y, x]));
prem(p1, p2, x);
prem(p2, p1, z);
prem(p3, p2, y);
premcustom := proc(Fparam,Gparam, xparam)
local R, G, F, lcg, lcr, dr, dg:
R := Fparam:
G := Gparam:
F := Fparam:
if degree(G,xparam) = 0 then
 print("return 0"):
 return 0:
elif degree(F, xparam) < degree(G, xparam) then
 print("return R"):
 return R:
 lcg := coeff(G, xparam, degree(G, xparam)):
 dg := degree(G, xparam):
 while degree(R, xparam) > degree(G, xparam) do
  lcr := coeff(R, xparam, degree(R, xparam)):
  dr := degree(R, xparam):
  R := lcg * R - lcr * G * (x^(dr - dg)):
end if:
return R:
end proc:
coeff(p1, x, degree(p1, x));
coeff(p2, x, degree(p2, x));

why premcustom looping?
is this coeff(p1, x, degree(p1, x)); wrong ?
should this to get real coefficient in number instead of variable and how?
is there equivalent function as dprem?
FlessThanG := proc(Fparam, Gparam, PRing)
F := Fparam:
G := Gparam:
if leader(F,PRing) < leader(G,PRing) or (leader(F,PRing) = leader(G,PRing) and degree(F, leader(F,PRing)) < degree(G, leader(G,PRing))) then
 return True:
 return False:
end if:
end proc:
dprem := proc(Fparam, Gparam, x, PRing)
local R, theta, thetax, thetaG, F, G;
F := Fparam:
G := Gparam:
R := F:
thetax := leader(G, PRing);
while FlessThanG(R, G, PRing) or FlessThanG(G, R, PRing) do
theta := leader(R, PRing);
R := prem(R, thetaG, theta)
return R:
end proc:
R := differential_ring(ranking = [[x,y,r]], derivations = [t], field_of_constants=[m,l], notation = diff):
p1 := m*x[2] + r*x;
p2 := m*y[2] + r*y - g;
p3 := x^2 + y^2 - l^2;
dprem(p1, p3, x, R);
is x[2] = diff(x,t$2) in diffalg ?
if not how to write in this way?
i had defined constant
but got error
Error, (in DifferentialAlgebra:-Tools:-LeadingDerivative) unknown symbol (approx. error location: [m*x[2 --> ] <-- +r*x])
Please Wait...