let rec p_bool = function
    | Ttrue -> Ptrue
    | Tfalse -> Pfalse
    | Tprim(TERM.L_eq ,[a;b]) -> Prel(L_eq ,[a;b])
    | Tprim(TERM.L_neq,[a;b]) -> Prel(L_neq,[a;b])
    | Tprim(TERM.I_lt ,[a;b]) -> Prel(I_lt ,[a;b])
    | Tprim(TERM.I_leq ,[a;b]) -> Prel(I_leq ,[a;b])
    | Tprim(TERM.R_lt ,[a;b]) -> Prel(R_lt ,[a;b])
    | Tprim(TERM.R_leq ,[a;b]) -> Prel(R_leq ,[a;b])
    | Tprim(B_and,[a;b]) -> p_and (p_bool a) (p_bool b)
    | Tprim(B_or,[a;b]) -> p_or (p_bool a) (p_bool b)
    | Tprim(B_not,[a]) -> p_not (p_bool a)
    | p -> Prel(B_true,[p])