let rec root n ({ints = l; is_int = is_int; expl = e} as u) = if n mod 2 = 0 then root (n/2) (sqrt u) else let l = List.fold_left (fun l' bs -> (root_interval is_int bs n)@l' ) [] l in union { ints = l; is_int = is_int; expl = e }