Sets
- Introduction
- Creating Sets
- The Enumerated Set Constructor
{ }: Null → Set
{ U | }: Str → Set
{ e₁, e₂, ..., eₙ }: Elt, ..., Elt → Set
Example: Universe
{ U | e₁, e₂, ..., eₙ }: Str, Elt, ..., Elt → Set
{ e(x) : x in E | P(x) }
{ U | e(x) : x in E | P(x) }
{ e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) }
{ U | e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) }
Example: Almost Fermat
- The Indexed Set Constructor
{ @ @}: Null → SetIndx
{ @ U | @}: Str → SetIndx
{ @ e₁, e₂, ..., eₙ @}: Elt, ..., Elt → SetIndx
{ @ U | e₁, e₂, ..., eₘ @}: Str, Elt, ..., Elt → SetIndx
{ @ e(x) : x in E | P(x) @}
{ @ U | e(x) : x in E | P(x) @}
{ @ e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) @}
{ @ U | e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ)@}
Example: Almost Fermat Indexed
- The Multiset Constructor
{* *}: Null → SetMulti
{* U | *}: Str → SetMulti
{* e₁, e₂, ..., eₙ *}: Elt, ..., Elt → SetMulti
{* U | e₁, e₂, ..., eₘ *}: Str, Elt, ..., Elt → SetMulti
{* e(x) : x in E | P(x) *}
{* U | e(x) : x in E | P(x) *}
{* e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) *}
{* U | e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) *}
Example: Multiset
- The Arithmetic Progression Constructors
- Power Sets
- Sets from Structures
- Accessing and Modifying Sets
- Accessing Sets and their Associated Structures
- Selecting Elements of Sets
Random(R): SetIndx → Elt
Random(R): SetEnum → Elt
random{ e(x) : x in E | P(x) }
random{ e(x₁, ..., xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) }
Example: Random
Representative(R): SetIndx → Elt
Rep(R): SetIndx → Elt
Representative(R): SetEnum → Elt
Rep(R): SetEnum → Elt
ExtractRep(~R, ~r): SetEnum, Elt
rep{ e(x) : x in E | P(x) }
rep{ e(x₁, ..., xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) }
Example: Extract Rep
Minimum(S): SetIndx → Elt, RngIntElt
Min(S): SetIndx → Elt, RngIntElt
Minimum(S): SetEnum → Elt
Min(S): SetEnum → Elt
Minimum(S): SetMulti → Elt
Min(S): SetMulti → Elt
Maximum(S): SetIndx → Elt, RngIntElt
Max(S): SetIndx → Elt, RngIntElt
Maximum(S): SetEnum → Elt
Max(S): SetEnum → Elt
Maximum(S): SetMulti → Elt
Max(S): SetMulti → Elt
Hash(x): Elt → RngIntElt
- Modifying Sets
Include(~S, x): SetEnum, Elt
Include(S, x): SetEnum, Elt → SetEnum
Include(~S, x): SetIndx, Elt
Include(S, x): SetIndx, Elt → SetIndx
Include(~S, x): SetMulti, Elt
Include(S, x): SetMulti, Elt → SetMulti
Exclude(~S, x): SetEnum, Elt
Exclude(S, x): SetEnum, Elt → SetEnum
Exclude(~S, x): SetMulti, Elt
Exclude(S, x): SetMulti, Elt → SetMulti
ChangeUniverse(~S, V): SetEnum, Str
ChangeUniverse(S, V): SetEnum, Str → SetEnum
ChangeUniverse(~S, V): SetIndx, Str
ChangeUniverse(S, V): SetIndx, Str → SetIndx
ChangeUniverse(~S, V): SetMulti, Str
ChangeUniverse(S, V): SetMulti, Str → SetMulti
CanChangeUniverse(S, V): SetEnum, Str → Bool, SeqEnum
CanChangeUniverse(S, V): SetIndx, Str → Bool, SeqEnum
CanChangeUniverse(S, V): SetMulti, Str → Bool, SeqEnum
Example: Include
SetToIndexedSet(E): SetEnum → SetIndx
IndexedSetToSet(S): SetIndx → SetEnum
Isetset(S): SetIndx → SetEnum
IndexedSetToSequence(S): SetIndx → SeqEnum
Isetseq(S): SetIndx → SeqEnum
MultisetToSet(S): SetMulti → SetEnum
SetToMultiset(E): SetEnum → SetMulti
SequenceToMultiset(Q): SeqEnum → SetMulti
- Operations on Sets
- Boolean Functions and Operators
IsNull(R): SetEnum → BoolElt
IsNull(R): SetIndx → BoolElt
IsNull(R): SetMulti → BoolElt
IsEmpty(R): SetEnum → BoolElt
IsEmpty(R): SetIndx → BoolElt
IsEmpty(R): SetMulti → BoolElt
x eq y: Elt, Elt → BoolElt
x ne y: Elt, Elt → BoolElt
x in R: Elt, Set → BoolElt
x notin R: Elt, Set → BoolElt
R subset S: SetEnum, Set → BoolElt
R subset S: SetIndx, Set → BoolElt
R subset S: SetMulti, Set → BoolElt
R notsubset S: SetEnum, Set → BoolElt
R notsubset S: SetIndx, Set → BoolElt
R notsubset S: SetMulti, Set → BoolElt
R eq S: Set, Set → BoolElt
R ne S: Set, Set → BoolElt
IsDisjoint(R, S): SetEnum, SetEnum → BoolElt
IsDisjoint(R, S): SetIndx, SetIndx → BoolElt
IsDisjoint(R, S): SetMulti, SetMulti → BoolElt
- Binary Set Operators
R join S: SetEnum, SetEnum → SetEnum
R join S: SetIndx, SetIndx → SetIndx
R join S: SetMulti, SetMulti → SetMulti
R meet S: SetEnum, SetEnum → SetEnum
R meet S: SetIndx, SetIndx → SetIndx
R meet S: SetMulti, SetMulti → SetMulti
R diff S: SetEnum, SetEnum → SetEnum
R diff S: SetIndx, SetIndx → SetIndx
R diff S: SetMulti, SetMulti → SetMulti
R sdiff S: SetEnum, SetEnum → SetEnum
R sdiff S: SetIndx, SetIndx → SetIndx
R sdiff S: SetMulti, SetMulti → SetMulti
Example: Join
- Other Set Operations
Multiplicity(S, x): SetMulti, Elt → RngIntElt
Multiplicities(S): SetMulti → SeqEnum
Subsets(S): SetEnum → SetEnum
Subsets(S, k): SetEnum, RngIntElt → SetEnum
RandomSubset(S, k): SetEnum, RngIntElt → SetEnum
Multisets(S, k): SetEnum, RngIntElt → SetEnum
Subsequences(S, k): SetEnum, RngIntElt → SetEnum
Permutations(S): SetEnum → SetEnum;
Permutations(S, k): SetEnum, RngIntElt → SetEnum;
- Quantifiers
exists(t){ e(x): x in E | P(x) }
exists(t₁, ..., tᵣ){ e(x) : x in E | P(x) }
exists(t){ e(x₁, ..., xₖ): x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ)}
exists(t₁, ..., tᵣ){ e(x₁, ..., xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P }
Example: Exists
forall(t){ e(x) : x in E | P(x) }
forall(t₁, ..., tᵣ){ e(x) : x in E | P(x) }
forall(t){ e(x₁, ..., xₖ): x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ)}
forall(t₁, ..., tᵣ){ e(x₁, ..., xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P }
Example: Nested Exists
- Reduction and Iteration