1predicate fzn_if_then_else_float(array[int] of var bool: c, array[int] of float: x, var float: y) =
2 let {
3 array[index_set(c)] of var 0..1: d;
4 } in
5 forall (i in index_set(c)) (sum(j in 1..i-1)(c[j])+d[i] >= c[i]) /\
6 sum(d)=1 /\
7 y = sum (i in index_set(c)) ( d[i]*x[i] );
8