public bool IsSubset(PowerSet <T> set2)
 {
     // возвращает true, если set2 есть
     // подмножество текущего множества,
     // иначе false
     foreach (var value2 in set2.GetValues())
     {
         if (_values.Contains(value2) == false)
         {
             return(false);
         }
     }
     return(true);;
 }
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            // разница текущего множества и set2
            var difference = new PowerSet <T>();

            foreach (var value in this.GetValues())
            {
                difference.Put(value);
            }
            foreach (var value2 in set2.GetValues())
            {
                difference.Remove(value2);
            }
            return(difference);
        }
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            // пересечение текущего множества и set2
            var intersection = new PowerSet <T>();

            foreach (var value in _values)
            {
                if (set2.Get(value))
                {
                    intersection.Put(value);
                }
            }

            return(intersection);
        }
        public PowerSet <T> Union(PowerSet <T> set2)
        {
            // объединение текущего множества и set2
            var union = new PowerSet <T>();

            foreach (var value in _values)
            {
                union.Put(value);
            }

            foreach (var value2 in set2.GetValues())
            {
                union.Put(value2);
            }

            return(union);
        }