package body Degrees_in_Sets_of_Unknowns is
function Degree ( t : Term; s : Set ) return integer is
sum : integer := 0;
begin
if Extent_Of(s) > 0
then for i in t.dg'range loop
if Is_In(s,i)
then sum := sum + t.dg(i);
end if;
end loop;
end if;
return sum;
end Degree;
function Degree ( p : Poly; s : Set ) return integer is
res : integer := -1;
procedure Degree_Term ( t : in Term; continue : out boolean ) is
sum : integer := Degree(t,s);
begin
if sum > res
then res := sum;
end if;
continue := true;
end Degree_Term;
procedure Degree_Terms is new Visiting_Iterator(Degree_Term);
begin
Degree_Terms(p);
return res;
end Degree;
function Degree_Table ( p : Poly_Sys; z : Partition ) return matrix is
res : matrix(p'range,z'range);
begin
for i in p'range loop
for j in z'range loop
res(i,j) := Degree(p(i),z(j));
end loop;
end loop;
return res;
end Degree_Table;
end Degrees_in_Sets_of_Unknowns;