let choose_theory (std : 'a list) (xor : 'a list) (uncertain : ('a * 'a) list)
: ('a list * 'a list) list =
let rec choose_theory_rec tas (l1,l2) = function
| (n,m)::tail ->
let tas2 = choose_theory_rec tas (n::l1, m::l2) tail in
let tas3 = choose_theory_rec tas2 (m::l1, n::l2) tail in
tas3
| [] -> (l1,l2)::tas
in
choose_theory_rec [] (std, xor) uncertain