let add_disjoint_behaviors_props config ki spec acc =
match spec.spec_disjoint_behaviors with [] -> acc
| l ->
let mk_disj_bhv b1 b2 =
let p = Logic_const.pands [b1; b2] in
Logic_const.pnot p
in
let add_disj acc bhv_names =
let id = (config.kf, ki, bhv_names) in
let id = mk_disj_bhv_id id in
let bhv_names = match bhv_names with
| [] ->
get_behavior_names ~with_default:false spec
| _ -> bhv_names
in
let bhv_assumes = get_bhv_assumes spec bhv_names in
let do_one_with_list prop b lb =
let lp = List.map (mk_disj_bhv b) lb in
Logic_const.pands (prop::lp)
in
let rec do_list prop l = match l with [] -> prop
| b::tl ->
let prop = do_one_with_list prop b tl in
do_list prop tl
in let prop = do_list Logic_const.ptrue bhv_assumes in
add_prop config acc Agoal (prepare_behaviors_spec ki id prop)
in List.fold_left add_disj acc l