let split meth p =
let nb = Wp_parameters.SplitDim.get()
in let max_depth = if nb < 0 then 0 else (2 + nb)
and max_split =
try
Big_int.int_of_big_int (Big_int.power_int_positive_int 2 (if nb < 0 then -nb else nb))
with (Invalid_argument _ | Failure _) ->
Wp_parameters.debug ~dkey "Invalid value for option %s@." Wp_parameters.SplitDim.name;
0
in
let bag =
match meth with
| Mcfg.EffectAssigns -> dispatch max_depth max_split (p_unfold Env.empty p)
| _ -> dispatch max_depth max_split p
in let nb = Bag.length bag
in if nb > 1 then
Wp_parameters.debug ~dkey "Predicate splited into %d parts@." nb;
bag