# Complement

The concrete complement can be computed with the function `complement`

(with a lower-case "c").

`LazySets.Complement`

— Type`Complement{N, S<:LazySet{N}} <: LazySet{N}`

Type that represents the complement of a set, i.e., the set

\[Y = \{y ∈ \mathbb{R}^n : y ∉ X\}.\]

The complement is often denoted with the $C$ superscript, as in $Y = X^C$.

**Fields**

`X`

– set

**Notes**

If `X`

is empty, the universe, or a half-space, its complement is convex.

Since `X`

is assumed to be closed, unless `X`

is empty or the universe, its complement is open (i.e., not closed). In this library, all sets are closed, so the set is usually not represented exactly at the boundary.

The complement of the complement is the original set again.

**Examples**

```
julia> B = BallInf(zeros(2), 1.);
julia> C = Complement(B)
Complement{Float64, BallInf{Float64, Vector{Float64}}}(BallInf{Float64, Vector{Float64}}([0.0, 0.0], 1.0))
julia> Complement(C)
BallInf{Float64, Vector{Float64}}([0.0, 0.0], 1.0)
```

`LazySets.dim`

— Method`dim(C::Complement)`

Return the dimension of the complement of a set.

**Input**

`C`

– complement of a set

**Output**

The ambient dimension of the complement of a set.

`Base.:∈`

— Method`∈(x::AbstractVector, C::Complement)`

Check whether a given point is contained in the complement of a set.

**Input**

`x`

– point/vector`C`

– complement of a set

**Output**

`true`

iff the vector is contained in the complement.

**Algorithm**

\[ x ∈ X^C ⟺ x ∉ X\]

`Base.isempty`

— Method`isempty(C::Complement)`

Check whether the complement of a set is empty.

**Input**

`C`

– complement of a set

**Output**

`false`

unless the original set is universal.

**Algorithm**

We use the `isuniversal`

function.

`LazySets.constraints_list`

— Method`constraints_list(C::Complement)`

Return the list of constraints of the complement of a set.

**Input**

`C`

– complement of a set

**Output**

A vector of linear constraints.

**Notes**

The method requires that the list of constraints of the complemented set can be obtained. Then, each constraint is complemented and returned in the output vector. The set union of this array corresponds to the concrete set complement.