let pp p fmt = function
    | Cons, [a; b] -> 
        Pretty.apply p fmt ("cons", [a; b])
    | Car, [a] -> 
        Pretty.apply p fmt ("car", [a])
    | Cdr, [a] -> 
        Pretty.apply p fmt ("cdr", [a])
    | _ ->
        invalid_arg "Ill-formed application in product theory"