Если я правильно понимаю ваш вопрос, вы хотите программно вычислить пересечение 3 множеств, верно? Вы хотите узнать, существует ли элемент в A, который существует на пересечении B и C, или, другими словами, вы хотите знать, является ли пересечение A, B и C непустым.
На многих языках установлены контейнеры и алгоритмы пересечения, так что вы должны просто иметь возможность их использовать. Ваш пример в OCaml:
module Int = struct
type t = int
let compare i j = if i<j then -1 else if i=j then 0 else 1
end;;
module IntSet = Set.Make(Int);;
let a = List.fold_left (fun a b -> IntSet.add b a) IntSet.empty [4;5;6;7;8;9;10];;
let b = List.fold_left (fun a b -> IntSet.add b a) IntSet.empty [0;1;2;3;4;5;6];;
let c = IntSet.add 5 IntSet.empty;;
let aIbIc = IntSet.inter (IntSet.inter b c) a;;
IntSet.is_empty aIbIc;;
Выводит false, поскольку пересечение a b и c непусто (содержит 5). Это, конечно, зависит от того, что элементы набора сравнимы (в этом примере функция сравнения определяет это свойство в модуле Int).
В качестве альтернативы в C ++:
#include<iostream>
#include<set>
#include<algorithm>
#include<iterator>
int main()
{
std::set<int> A, B, C;
for(int i=10; i>3; --i)
A.insert(i);
for(int i=0; i<7; ++i)
B.insert(i);
C.insert(5);
std::set<int> ABC, BC;
std::set_intersection(B.begin(), B.end(), C.begin(), C.end(), std::inserter(BC, BC.begin()));
std::set_intersection(BC.begin(), BC.end(), A.begin(), A.end(), std::inserter(ABC, ABC.begin()));
for(std::set<int>::iterator i = ABC.begin(); i!=ABC.end(); ++i)
{
std::cout << *i << " ";
}
std::cout << std::endl;
return 0;
}