STRUCTURE zero:number 
          succ(pred:number):number.

STRUCTURE empty:list 
          add(head:number,tail:list):list.

STRUCTURE True:boolean 
          False:boolean.

FUNCTION Equal(x,y:number):Boolean;
BEGIN
if ( (x = zero) And (y = zero) )   Then True;
if ( (x = zero) And (y != zero) )  Then False;
if ( (x != zero) And (y = zero) )  Then False;
if ( (x != zero) And (y != zero) ) Then Equal(pred(x),pred(y));
END.


FUNCTION Leq(x,y:number):Boolean;
BEGIN
if ( (Less(x,y) = True) Or (Equal(x,y) = True) ) Then True;
if ( (Less(x,y) != True) And (Equal(x,y) != True) ) Then False;
END.


FUNCTION DeleteMinimum(x:list):list;
BEGIN

If (x = empty) Then empty;

If ( (x != empty) And (tail(x) = empty) ) Then empty;

If ( (x != empty) And (tail(x) != empty) And (Leq(head(x),head(tail(x))) = True) ) 
                  Then add(head(tail(x)),DeleteMinimum(add(head(x),tail(tail(x)))));

If ( (x != empty) And (tail(x) != empty) And (Leq(head(x),head(tail(x))) = False) ) 
                  Then add(head(x),DeleteMinimum(tail(x)));

END.

