let mk_app f l =
    match l with
    | [] -> 
        mk_const f
    | [a] -> 
        App(f, l , (14007 + (Sym.hash f) + hash a) land 0x3FFFFFFF)
    | [a; b] -> 
        App(f, l, (19007 + (Sym.hash f) + hash a + hash b) land 0x3FFFFFFF)
    | [a; b; c] -> 
        App(f, l, (17007 + (Sym.hash f) + hash a + hash b + hash c) land 0x3FFFFFFF)
    | l -> 
        App(f, l, (27007 + (Sym.hash f) + (List.fold_left (fun h a -> h+hash a) 1 l)) land 0x3FFFFFFF)