# Sequences

- [Introduction](introduction.md)

  - [Enumerated Sequences](introduction.md#enumerated-sequences)

  - [Formal Sequences](introduction.md#formal-sequences)

  - [Compatibility](introduction.md#compatibility)

- [Creating Sequences](creation.md)

  - [The Formal Sequence Constructor](creation.md#the-formal-sequence-constructor)

    - [`[! x in F | P(x) !]`](creation.md#literal-literal-x-in-f-p-x)

  - [The Enumerated Sequence Constructor](creation.md#the-enumerated-sequence-constructor)

    - [`[ ]: Null → ESeqEnum`](creation.md#literal-literal-null-eseqenum)

    - [`[ U | ]: Str → SeqEnum`](creation.md#literal-literal-u-str-seqenum)

    - [`[ e₁, e₂, ..., eₙ ]: Elt, ..., Elt → SeqEnum`](creation.md#literal-literal-e1-e2-en-elt-elt-seqenum)

    - [`[ U |  e₁, e₂, ..., eₘ ]: Str, Elt, ..., Elt → SeqEnum`](creation.md#literal-literal-u-e1-e2-em-str-elt-elt-seqenum)

    - [`[ e(x) : x in E | P(x) ]`](creation.md#literal-literal-e-x-x-in-e-p-x)

    - [`[ U |  e(x) : x in E | P(x) ]`](creation.md#literal-literal-u-e-x-x-in-e-p-x)

    - [`[ e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) ]`](creation.md#literal-literal-e-x1-xk-x1-in-e1-xk-in-ek-p-x1-xk)

    - [`[ U | e(x₁,...,xₖ) : x₁ in E₁, ..., xₖ in Eₖ | P(x₁, ..., xₖ) ]`](creation.md#literal-literal-u-e-x1-xk-x1-in-e1-xk-in-ek-p-x1-xk)

  - [The Arithmetic Progression Constructors](creation.md#the-arithmetic-progression-constructors)

    - [`[ i..j ]: RngIntElt, RngIntElt → SeqEnum`](creation.md#literal-literal-i-j-rngintelt-rngintelt-seqenum)

    - [`[ U | i..j ]: Str, RngIntElt, RngIntElt → SeqEnum`](creation.md#literal-literal-u-i-j-str-rngintelt-rngintelt-seqenum)

    - [`[ i .. j by k ]: RngIntElt, RngIntElt, RngIntElt → SeqEnum`](creation.md#literal-literal-i-j-by-k-rngintelt-rngintelt-rngintelt-seqenum)

    - [`[ U | i .. j by k ]: Str, RngIntElt, RngIntElt, RngIntElt → SeqEnum`](creation.md#literal-literal-u-i-j-by-k-str-rngintelt-rngintelt-rngintelt-seqenum)

    - [`Example: Progression`](creation.md#example-ex-264a9e)

  - [Literal Sequences](creation.md#literal-sequences)

    - [`\[ m₁, ..., mₙ ]: RngIntElt, ..., RngIntElt → [ RngIntElt ]`](creation.md#literal-literal-m1-mn-rngintelt-rngintelt-rngintelt)

- [Power Sequences](power-sequence.md)

  - [`PowerSequence(R): Str → PowSeqEnum`](power-sequence.md#function-powersequence-str)

  - [`S in P: SeqEnum, PowSeqEnum → BoolElt`](power-sequence.md#operation-op-in-seqenum-powseqenum)

  - [`P ! S: PowSeqEnum, SeqEnum → SeqEnum`](power-sequence.md#operation-op-powseqenum-seqenum)

  - [`Example: Power Sequence`](power-sequence.md#example-ex-e8f60b)

- [Operators on Sequences](operation.md)

  - [Access Functions](operation.md#access-functions)

    - [`# S: SeqEnum → RngIntElt`](operation.md#operation-operation-seqenum-rngintelt)

    - [`Parent(S): SeqEnum → Str`](operation.md#function-parent-seqenum)

    - [`Universe(S): SeqEnum → Str`](operation.md#function-universe-seqenum)

    - [`S[i]: SeqEnum, RngIntElt → Elt`](operation.md#literal-literal-s-i-seqenum-rngintelt-elt)

  - [Selection Operators on Enumerated Sequences](operation.md#selection-operators-on-enumerated-sequences)

    - [`S[I]: SeqEnum, [RngIntElt] → SeqEnum`](operation.md#literal-literal-s-i-seqenum-rngintelt-seqenum)

    - [`Minimum(S): SeqEnum → Elt, RngIntElt`](operation.md#function-minimum-seqenum)

    - [`Min(S): SeqEnum → Elt, RngIntElt`](operation.md#function-min-seqenum)

    - [`Maximum(S): SeqEnum → Elt, RngIntElt`](operation.md#function-maximum-seqenum)

    - [`Max(S): SeqEnum → Elt, RngIntElt`](operation.md#function-max-seqenum)

    - [`Index(S, x): SeqEnum, Elt → RngIntElt`](operation.md#function-index-seqenum-elt)

    - [`Index(S, x, f): SeqEnum, Elt, RngIntElt → RngIntElt`](operation.md#function-index-seqenum-elt-rngintelt)

    - [`Position(S, x): SeqEnum, Elt → RngIntElt`](operation.md#function-position-seqenum-elt)

    - [`Position(S, x, f): SeqEnum, Elt, RngIntElt → RngIntElt`](operation.md#function-position-seqenum-elt-rngintelt)

    - [`Representative(R): SeqEnum → Elt`](operation.md#function-representative-seqenum)

    - [`Rep(R): SeqEnum → Elt`](operation.md#function-rep-seqenum)

    - [`Random(R): SeqEnum → Elt`](operation.md#function-random-seqenum)

    - [`Explode(R): SeqEnum → List`](operation.md#function-explode-seqenum)

    - [`Eltseq(R): SeqEnum → SeqEnum`](operation.md#function-eltseq-seqenum)

  - [Modifying Enumerated Sequences](operation.md#modifying-enumerated-sequences)

    - [`Append(~S, x): SeqEnum, Elt`](operation.md#function-append-seqenum-elt-ref)

    - [`Append(S, x): SeqEnum, Elt → SeqEnum`](operation.md#function-append-seqenum-elt)

    - [`Exclude(~S, x): SeqEnum, Elt`](operation.md#function-exclude-seqenum-elt-ref)

    - [`Exclude(S, x): SeqEnum, Elt → SeqEnum`](operation.md#function-exclude-seqenum-elt)

    - [`Include(~S, x): SeqEnum, Elt`](operation.md#function-include-seqenum-elt-ref)

    - [`Include(S, x): SeqEnum, Elt → SeqEnum`](operation.md#function-include-seqenum-elt)

    - [`Insert(~S, i, x): SeqEnum, RngIntElt, Elt`](operation.md#function-insert-seqenum-rngintelt-elt-ref)

    - [`Insert(S, i, x): SeqEnum, RngIntElt, Elt → SeqEnum`](operation.md#function-insert-seqenum-rngintelt-elt)

    - [`Insert(~S, k, m, T): SeqEnum, RngIntElt, RngIntElt, SeqEnum`](operation.md#function-insert-seqenum-rngintelt-rngintelt-seqenum-ref)

    - [`Insert(S, k, m, T): SeqEnum, RngIntElt, RngIntElt, SeqEnum → SeqEnum`](operation.md#function-insert-seqenum-rngintelt-rngintelt-seqenum)

    - [`Prune(~S): SeqEnum`](operation.md#function-prune-seqenum-ref)

    - [`Prune(S): SeqEnum → SeqEnum`](operation.md#function-prune-seqenum)

    - [`Remove(~S, i): SeqEnum, RngIntElt`](operation.md#function-remove-seqenum-rngintelt-ref)

    - [`Remove(S, i): SeqEnum, RngIntElt → SeqEnum`](operation.md#function-remove-seqenum-rngintelt)

    - [`Reverse(~S): SeqEnum`](operation.md#function-reverse-seqenum-ref)

    - [`Reverse(S): SeqEnum → SeqEnum`](operation.md#function-reverse-seqenum)

    - [`Rotate(~S, p): SeqEnum, RngIntElt`](operation.md#function-rotate-seqenum-rngintelt-ref)

    - [`Rotate(S, p): SeqEnum, RngIntElt → SeqEnum`](operation.md#function-rotate-seqenum-rngintelt)

    - [`Sort(~S): SeqEnum`](operation.md#function-sort-seqenum-ref)

    - [`Sort(S): SeqEnum → SeqEnum`](operation.md#function-sort-seqenum)

    - [`Sort(~S, C): SeqEnum, UserProgram`](operation.md#function-sort-seqenum-userprogram-ref)

    - [`Sort(~S, C, ~p): SeqEnum, UserProgram, GrpPermElt`](operation.md#function-sort-seqenum-userprogram-grppermelt-ref)

    - [`Sort(S, C): SeqEnum, UserProgram → SeqEnum`](operation.md#function-sort-seqenum-userprogram)

    - [`ParallelSort(~S, ~T): SeqEnum, SeqEnum`](operation.md#function-parallelsort-seqenum-seqenum-ref)

    - [`Undefine(~S, i): SeqEnum, RngIntElt`](operation.md#function-undefine-seqenum-rngintelt-ref)

    - [`Undefine(S, i): SeqEnum, RngIntElt → SeqEnum`](operation.md#function-undefine-seqenum-rngintelt)

    - [`ChangeUniverse(S, V): SeqEnum, Str`](operation.md#function-changeuniverse-seqenum-str)

    - [`ChangeUniverse(S, V): SeqEnum, Str → SeqEnum`](operation.md#function-changeuniverse-seqenum-str-2)

    - [`CanChangeUniverse(S, V): SeqEnum, Str → Bool, SeqEnum`](operation.md#function-canchangeuniverse-seqenum-str)

    - [`Example: Farey`](operation.md#example-ex-67d3e0)

  - [Creating New Enumerated Sequences from Existing Ones](operation.md#creating-new-enumerated-sequences-from-existing-ones)

    - [`S cat T: SeqEnum, SeqEnum → SeqEnum`](operation.md#operation-operation-cat-seqenum-seqenum-seqenum)

    - [`S cat:= T: SeqEnum, SeqEnum`](operation.md#operation-operation-cat-seqenum-seqenum)

    - [`Partition(S, p): SeqEnum, RngIntElt → SeqEnum(SeqEnum)`](operation.md#function-partition-seqenum-rngintelt)

    - [`Partition(S, P): SeqEnum, [RngIntElt] → SeqEnum(SeqEnum)`](operation.md#function-partition-seqenum-rngintelt-2)

    - [`Setseq(S): SetEnum → SeqEnum`](operation.md#function-setseq-setenum)

    - [`SetToSequence(S): SetEnum → SeqEnum`](operation.md#function-settosequence-setenum)

    - [`Seqset(S): SeqEnum → SetEnum`](operation.md#function-seqset-seqenum)

    - [`SequenceToSet(S): SeqEnum → SetEnum`](operation.md#function-sequencetoset-seqenum)

    - [`Example: Egyptian Fractions`](operation.md#example-ex-1c4c84)

    - [Operations on Sequences of Booleans](operation.md#operations-on-sequences-of-booleans)

      - [`And(S, T): [ BoolElt ], [ BoolElt ] → [BoolElt]`](operation.md#function-and-boolelt-boolelt)

      - [`And(~S, T): [ BoolElt ], [ BoolElt ]`](operation.md#function-and-boolelt-boolelt-ref)

      - [`Or(S, T): [ BoolElt ], [ BoolElt ] → [ BoolElt ]`](operation.md#function-or-boolelt-boolelt)

      - [`Or(~S, T): [ BoolElt ], [ BoolElt ]`](operation.md#function-or-boolelt-boolelt-ref)

      - [`Xor(S, T): [ BoolElt ], [ BoolElt ] → [ BoolElt ]`](operation.md#function-xor-boolelt-boolelt)

      - [`Xor(~S, T): [ BoolElt], [ BoolElt ]`](operation.md#function-xor-boolelt-boolelt-ref)

      - [`Not(S): [ BoolElt ] → [ BoolElt ]`](operation.md#function-not-boolelt)

      - [`Not(~S): [ BoolElt ]`](operation.md#function-not-boolelt-ref)

- [Predicates on Sequences](Boolean.md)

  - [`IsComplete(S): SeqEnum → BoolElt`](Boolean.md#function-iscomplete-seqenum)

  - [`IsDefined(S, i): SeqEnum, RngIntElt → BoolElt`](Boolean.md#function-isdefined-seqenum-rngintelt)

  - [`IsEmpty(S): SeqEnum → BoolElt`](Boolean.md#function-isempty-seqenum)

  - [`IsNull(S): SeqEnum → BoolElt`](Boolean.md#function-isnull-seqenum)

  - [Membership Testing](Boolean.md#membership-testing)

    - [`x in S: Elt, SeqEnum → BoolElt`](Boolean.md#operation-op-in-elt-seqenum)

    - [`x notin S: Elt, SeqEnum → BoolElt`](Boolean.md#operation-op-notin-elt-seqenum)

    - [`IsSubsequence(S, T): SeqEnum, SeqEnum → BoolElt`](Boolean.md#function-issubsequence-seqenum-seqenum)

    - [`IsSubsequence(S, T: Kind := option): SeqEnum, SeqEnum, MonStgElt → BoolElt`](Boolean.md#function-issubsequence-seqenum-seqenum-monstgelt)

    - [`S eq T: SeqEnum, SeqEnum → BoolElt`](Boolean.md#operation-op-eq-seqenum-seqenum)

    - [`S ne T: SeqEnum, SeqEnum → BoolElt`](Boolean.md#operation-op-ne-seqenum-seqenum)

  - [Testing Order Relations](Boolean.md#testing-order-relations)

    - [`S lt T: SeqEnum, SeqEnum → BoolElt`](Boolean.md#operation-op-lt-seqenum-seqenum)

    - [`S le T: SeqEnum, SeqEnum → BoolElt`](Boolean.md#operation-op-le-seqenum-seqenum)

    - [`S ge T: SeqEnum, SeqEnum → BoolElt`](Boolean.md#operation-op-ge-seqenum-seqenum)

    - [`S gt T: SeqEnum, SeqEnum → BoolElt`](Boolean.md#operation-op-gt-seqenum-seqenum)

- [Recursion, Reduction, and Iteration](recursion-reduction-iteration.md)

  - [Recursion](recursion-reduction-iteration.md#recursion)

    - [`Self(n): RngIntElt → Elt`](recursion-reduction-iteration.md#function-self-rngintelt)

    - [`Self() → SeqEnum`](recursion-reduction-iteration.md#function-self)

    - [`Example: Self`](recursion-reduction-iteration.md#example-ex-5ee4f8)

  - [Reduction](recursion-reduction-iteration.md#reduction)

    - [`& ∘ S: Op, SeqEnum → Elt`](recursion-reduction-iteration.md#operation-operation-op-seqenum-elt)

  - [Iteration](recursion-reduction-iteration.md#iteration)

    - [`x in S`](recursion-reduction-iteration.md#literal-literal-in-x-in-s)

    - [`i -> x in S`](recursion-reduction-iteration.md#literal-literal-in-i-x-in-s)

    - [`Example: Nested Iteration`](recursion-reduction-iteration.md#example-ex-c6e3f6)

    - [`Example: Dual Iteration`](recursion-reduction-iteration.md#example-ex-13375d)
