# 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* in *B* is denoted *B* ∖ *A* according to the ISO 31-11 standard (sometimes written *B* – *A*, but this notation is ambiguous, as in some contexts it can be interpreted as the set of all *b* – *a*, where *b* is taken from *B* and *a* from *A*).

Formally

Examples:

- {1,2,3} ∖ {2,3,4} = {1}
- {2,3,4} ∖ {1,2,3} = {4}
- If is the set of real numbers and is the set of rational numbers, then is the set of irrational numbers.

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*) = (*C*∩*A*)∪(*C*∖*B*)

[ Alternately written: *A* ∖ (*B* ∖ *C*) = (*A* ∖ *B*)∪(*A* ∩ *C*) ]

- (
*B*∖*A*) ∩*C*= (*B*∩*C*) ∖*A*=*B*∩(*C*∖*A*) - (
*B*∖*A*) ∪*C*= (*B*∪*C*) ∖ (*A*∖*C*) *A*∖*A*= Ø- Ø ∖
*A*= Ø *A*∖ Ø =*A*

- (

## Absolute complement

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 *A*^{c} or sometimes *A*′. The same set often^{[3]} is denoted by or if **U** is fixed, that is:

*A*^{c}=**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]} - Complement laws:
^{[1]}-
- (this follows from the equivalence of a conditional with its contrapositive)

- Involution or double complement law:
- Relationships between relative and absolute complements:
*A*∖*B*=*A*∩*B*^{c}- (
*A*∖*B*)^{c}=*A*^{c}∪*B*

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

## Notation

In the LaTeX typesetting language, the command `\setminus`

^{[4]} 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.

## 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)`

^{[5]}

- Common Lisp
`set-difference, nset-difference`

^{[6]}

- Falcon
`diff = a - b`

^{[7]}

- Haskell
`difference a b`

`a \\ b`

^{[8]}

- Java
`diff = a.clone();`

`diff.removeAll(b);`

^{[9]}

```
```

- Julia
`setdiff`

^{[10]}

- Mathematica
`Complement`

^{[11]}

- MATLAB
`setdiff`

^{[12]}

- OCaml
`Set.S.diff`

^{[13]}

- Octave
`setdiff`

^{[14]}

- Pascal
`SetDifference := a - b;`

- Perl 5
`#for perl version >= 5.10`

`@a = grep {not $_ ~~ @b} @a;`

- Perl 6
`$A ∖ $B`

`$A (-) $B # texas version`

- PHP
`array_diff($a, $b);`

^{[15]}

- Prolog
`a(X),\+ b(X).`

- Python
`diff = a.difference(b)`

^{[16]}`diff = a - b`

^{[16]}

- R
`setdiff`

^{[17]}

- Ruby
`diff = a - b`

^{[18]}

- Scala
`diff = a—b`

^{[19]}

- Smalltalk (Pharo)
`a difference: b`

- SQL
`SELECT * FROM A`

EXCEPT
SELECT * FROM B

```
```

- Unix shell
`comm -23 a b`

^{[20]}`grep -vf b a`

# less efficient, but works with small unsorted sets

## See also

## References

- ↑
^{1.0}^{1.1}^{1.2}Halmos (1960) p.17 - ↑ Devlin (1979) p.6
- ↑ Bourbaki p. E II.6
- ↑ [1] The Comprehensive LaTeX Symbol List
- ↑ [2] clojure.set API reference
- ↑ Common Lisp HyperSpec, Function set-difference, nset-difference. Accessed on September 8, 2009.
- ↑ Array subtraction, data structures. Accessed on July 28, 2014.
- ↑ Data.Set (Haskell)
- ↑ Set (Java 2 Platform SE 5.0).
*JavaTM 2 Platform Standard Edition 5.0 API Specification*, updated in 2004. Accessed on February 13, 2008. - ↑ [3]. The Standard Library--Julia Language documentation. Accessed on September 24, 2014
- ↑ Complement.
*Mathematica Documentation Center*for version 6.0, updated in 2008. Accessed on March 7, 2008. - ↑ Setdiff.
*MATLAB Function Reference*for version 7.6, updated in 2008. Accessed on May 19, 2008. - ↑ Set.S (OCaml).
- ↑ [4].
*GNU Octave Reference Manual* - ↑ PHP: array_diff, PHP Manual
- ↑
^{16.0}^{16.1}[5].*Python v2.7.3 documentation*. Accessed on January 17, 2013. - ↑ R Reference manual p. 410.
- ↑ Class: Array Ruby Documentation
- ↑ scala.collection.Set.
*Scala Standard Library*release 2.8.1, Accessed on December 09, 2010. - ↑ comm(1), Unix Seventh Edition Manual, 1979.

- {{#invoke:citation/CS1|citation

|CitationClass=book }}

- {{#invoke:citation/CS1|citation

|CitationClass=book }}

- {{#invoke:citation/CS1|citation

|CitationClass=book }}