Complement (set theory)

      In set theory, a complement of a set A refers to things not in (that is, things outside of) A. The relative complement of A with respect to a set B, is the set of elements in B but not in A. When all sets under consideration are considered to be subsets of a given set U, the absolute complement of A is the set of all elements in U but not in A.

      Relative complement

      If A and B are sets, then the relative complement of A in B,[1] also termed the set-theoretic difference of B and A,[2] is the set of elements in B, but not in A.

      The relative complement of A (left circle) in B (right circle):
      A^c \cap B~~~~=~~~~B \smallsetminus A

      The relative complement of A in B is denoted BA according to the ISO 31-11 standard (sometimes written BA, but this notation is ambiguous, as in some contexts it can be interpreted as the set of all ba, where b is taken from B and a from A).

      Formally

      B \smallsetminus A = \{ x\in B \, | \, x \notin A \}.

      Examples:

      The following lists some notable properties of relative complements in relation to the set-theoretic operations of union and intersection.

      If A, B, and C are sets, then the following identities hold:

      • C ∖ (A ∩ B)  =  (C ∖ A)∪(C ∖ B)
      • C ∖ (A ∪ B)  =  (C ∖ A)∩(C ∖ B)
      • C ∖ (B ∖ A)  =  (A ∩ C)∪(C ∖ B)
      • (B ∖ A) ∩ C  =  (B ∩ C) ∖ A  =  B∩(C ∖ A)
      • (B ∖ A) ∪ C  =  (B ∪ C) ∖ (A ∖ C)
      • A ∖ A  =  Ø
      • Ø ∖ A  =  Ø
      • A ∖ Ø  =  A
      ↑Jump back a section

      Absolute complement

      The complement of A in U:
      A^c=U \smallsetminus A

      If a universe U is defined, then the relative complement of A in U is called the absolute complement (or simply complement) of A, and is denoted by Ac or sometimes A′, also the same set often[citation needed] is denoted by \complement_U A or \complement A if U is fixed, that is:

      Ac  = U ∖ A.

      For example, if the universe is the set of integers, then the complement of the set of odd numbers is the set of even numbers.

      The following lists some important properties of absolute complements in relation to the set-theoretic operations of union and intersection.

      If A and B are subsets of a universe U, then the following identities hold:

      De Morgan's laws:[1]
      • \left(A \cup B \right)^{c}=A^{c} \cap B^{c} .
      • \left(A \cap B \right)^{c}=A^{c} \cup B^{c} .
      Complement laws:[1]
      • A \cup A^{c} =U .
      • A \cap A^{c} =\empty .
      • \empty ^{c} =U.
      •  U^{c} =\empty.
      • \text{If }A\subset B\text{, then }B^{c}\subset A^{c}.
        (this follows from the equivalence of a conditional with its contrapositive)
      Involution or double complement law:
      • \left(A^{c}\right)^{c}=A.
      Relationships between relative and absolute complements:
      • A ∖ B = A ∩ Bc
      • (A ∖ B)c = Ac ∪ B

      The first two complement laws above shows that if A is a non-empty, proper subset of U, then {A, Ac} is a partition of U.

      ↑Jump back a section

      Notation

      In the LaTeX typesetting language, the command \setminus is usually used for rendering a set difference symbol, which is similar to a backslash symbol. When rendered the \setminus command looks identical to \backslash except that it has a little more space in front and behind the slash, akin to the LaTeX sequence \mathbin{\backslash}. A variant \smallsetminus is available in the amssymb package.

      ↑Jump back a section

      Complements in various programming languages

      Some programming languages allow for manipulation of sets as data structures, using these operators or functions to construct the difference of sets a and b:

      .NET Framework
      a.Except(b);
      C++
      set_difference(a.begin(), a.end(), b.begin(), b.end(), result.begin());
      Clojure
      (clojure.set/difference a b)[3]
      Common Lisp
      set-difference, nset-difference[4]
      Haskell
      a \\ b [5]
      Java
      diff = a.clone();
      diff.removeAll(b);[6]
      Mathematica
      Complement[7]
      MATLAB
      setdiff[8]
      OCaml
      Set.S.diff[9]
      Pascal
      SetDifference := a - b;
      Perl
      #for perl version >= 5.10
      @a = grep {not $_ ~~ @b} @a;
      PHP
      array_diff($a, $b);[10]
      Prolog
      a(X),\+ b(X).
      Python
      diff = a.difference(b)[11]
      diff = a - b[11]
      R
      setdiff[12]
      Ruby
      diff = a - b[13]
      Scala
      diff = a -- b[14]
      SQL
      SELECT * FROM A
      MINUS
      SELECT * FROM B
      Unix shell
      comm -23 a b[15]
      grep -vf b a # less efficient, but works with small unsorted sets
      ↑Jump back a section

      References

      1. ^ a b c Halmos (1960) p.17
      2. ^ Devlin (1979) p.6
      3. ^ [1] clojure.set API reference
      4. ^ Common Lisp HyperSpec, Function set-difference, nset-difference. Accessed on September 8, 2009.
      5. ^ Data.Set (Haskell)
      6. ^ Set (Java 2 Platform SE 5.0). JavaTM 2 Platform Standard Edition 5.0 API Specification, updated in 2004. Accessed on February 13, 2008.
      7. ^ Complement. Mathematica Documentation Center for version 6.0, updated in 2008. Accessed on March 7, 2008.
      8. ^ Setdiff. MATLAB Function Reference for version 7.6, updated in 2008. Accessed on May 19, 2008.
      9. ^ Set.S (OCaml).
      10. ^ PHP: array_diff, PHP Manual
      11. ^ a b [2]. Python v2.7.3 documentation. Accessed on January 17, 2013.
      12. ^ R Reference manual p. 410.
      13. ^ Class: Array Ruby Documentation
      14. ^ scala.collection.Set. Scala Standard Library release 2.8.1, Accessed on December 09, 2010.
      15. ^ comm(1), Unix Seventh Edition Manual, 1979.
      ↑Jump back a section
      Last modified on 20 April 2013, at 12:16