sig
  val p_true : 'Fol.t_pred
  val p_false : 'Fol.t_pred
  val p_not : 'Fol.d_pred -> 'Fol.d_pred
  val p_bool : 'Fol.d_term -> 'Fol.d_pred
  val equal_terms : 'Fol.d_term -> 'Fol.d_term -> bool
  val p_and : 'Fol.t_pred -> 'Fol.t_pred -> 'Fol.t_pred
  val p_or : 'Fol.t_pred -> 'Fol.t_pred -> 'Fol.t_pred
  val p_xor : 'Fol.t_pred -> 'Fol.t_pred -> 'Fol.t_pred
  val p_eq : 'Fol.d_term -> 'Fol.d_term -> 'Fol.d_pred
  val p_neq : 'Fol.d_term -> 'Fol.d_term -> 'Fol.d_pred
  val p_implies : 'Fol.d_pred -> 'Fol.d_pred -> 'Fol.d_pred
  val p_iff : 'Fol.d_pred -> 'Fol.d_pred -> 'Fol.d_pred
  val p_conj : 'Fol.d_pred list -> 'Fol.d_pred
  val p_disj : 'Fol.d_pred list -> 'Fol.d_pred
  val p_cond :
    'Fol.d_term -> 'Fol.d_pred -> 'Fol.d_pred -> 'Fol.d_pred
  val is_true : 'Fol.t_pred -> bool
  val is_false : 'Fol.t_pred -> bool
  val p_named : string -> 'Fol.d_pred -> 'Fol.d_pred
  val eq_var : Fol.Var.t -> Fol.Var.t -> bool
  val p_forall : Fol.Var.t list -> 'Fol.d_pred -> 'Fol.d_pred
  val p_exists : Fol.Var.t list -> 'Fol.d_pred -> 'Fol.d_pred
  val p_subst :
    (Fol.Var.t -> Fol.Var.t option) ->
    Fol.Var.t -> 'Fol.d_term -> 'Fol.d_pred -> 'Fol.d_pred
  val e_subst :
    (Fol.Var.t -> Fol.Var.t option) ->
    Fol.Var.t -> 'Fol.d_term -> 'Fol.d_term -> 'Fol.d_term
  val apply : (Fol.Var.t * 'a) list -> Fol.Var.t -> 'a option
  val e_rename :
    (Fol.Var.t * Fol.Var.t) list -> 'Fol.d_term -> 'Fol.d_term
end