sig
  type satisfaction = Sat | Unsat of (int * bool array) | NeverSat
  type wexample_t = Data.wexample_t
  type example_t = Data.example_t
  type schema_t = Data.schema_t
  type valgrad_callback = float array -> float array -> float
  type pll_cache_t
  val build_pll_cache : Mn.network -> Pll.wexample_t array -> Pll.pll_cache_t
  val pll_val_and_grad_cached : Pll.pll_cache_t -> Pll.valgrad_callback
  val build_pll_minicache :
    Mn.network -> Pll.wexample_t array -> Pll.pll_cache_t
  val pll_val_and_grad : Pll.pll_cache_t -> Pll.valgrad_callback
  val pll_cache_to_mn : Pll.pll_cache_t -> float array -> Mn.network
  val fa_pll :
    Pll.schema_t -> Mn.Factor.feature array -> Pll.example_t -> float
  type mn_t
  val create_mn : int array -> Mn.Factor.feature array -> Pll.mn_t
  external pll_mn : Pll.mn_t -> int array -> float = "ocaml_c_pll_mn"
  type minicache_c_t
  val build_pll_minicache_c :
    Mn.network -> Pll.wexample_t array -> Pll.minicache_c_t
  val pll_val_and_grad_c : Pll.minicache_c_t -> Pll.valgrad_callback
  type cache_c_t
  val build_pll_cache_c : Mn.network -> Pll.wexample_t array -> Pll.cache_c_t
  val pll_val_and_grad_cached_c : Pll.cache_c_t -> Pll.valgrad_callback
end