let diff s1 s2 = let empty = copy empty in fold (fun x (y, rho) acc -> match is_equal s2 x y with | Some _ -> acc | None -> union acc (x, y, rho); acc) s1 empty