
list a ::= Nil | Cons a (list a);

tp2 a b ::= Mk2 a b;

tp3 a b c ::= Mk3 a b c;

tp4 a b c d ::= Mk4 a b c d;

;;

error = error;

zip la lb
 = case la of
      Nil -> case lb of
                Nil -> Nil;
                Cons b bs -> error
             end;
      Cons a as -> case lb of
                      Nil -> error;
                      Cons b bs -> Cons (Mk2 a b) (zip as bs)
                   end
   end;

zip2 la lb
  = case la of Nil -> Nil; Cons a as ->
    case lb of Nil -> Nil; Cons b bs ->
      Cons (Mk2 a b) (zip2 as bs)
    end
    end;

zip3 la lb lc
  = case la of Nil -> Nil; Cons a as ->
    case lb of Nil -> Nil; Cons b bs ->
    case lc of Nil -> Nil; Cons c cs ->
      Cons (Mk3 a b c) (zip3 as bs cs)
    end 
    end
    end;

zip4 la lb lc ld
  = case la of Nil -> Nil; Cons a as ->
    case lb of Nil -> Nil; Cons b bs ->
    case lc of Nil -> Nil; Cons c cs ->
    case ld of Nil -> Nil; Cons d ds ->
      Cons (Mk4 a b c d) (zip4 as bs cs ds)
    end 
    end
    end
    end;

{
                            Arg  Result  Group  Total   Func   Case       Anna    Norm   Norm
   Name               Rec Points Points    Max  Nodes  Nodes  Nodes       Cost      ap     rp
------------------------------------------------------------------------------------------------

   _zip2              yes     16      7      5     21      1      2     251588  5671.3  306.2
   _zip3              yes     64     11      6     29      1      3    1726793  6487.6  177.82
   _zip4              yes    256     19      7     37      1      4   13445545  9471.6  114.35
}
