.. index:: single: partitions_protocol
.. _partitions_protocol/0:

.. rst-class:: right

**protocol**

``partitions_protocol``
=======================

Protocol for set partition operations over lists.

| **Availability:** 
|    ``logtalk_load(partitions(loader))``

| **Author:** Paulo Moura
| **Version:** 1:0:0
| **Date:** 2026-05-12

| **Compilation flags:**
|    ``static``


| **Dependencies:**
|   (none)


| **Remarks:**
|    (none)

| **Inherited public predicates:**
|    (none)

.. contents::
   :local:
   :backlinks: top

Public predicates
-----------------

.. index:: partitions/2
.. _partitions_protocol/0::partitions/2:

``partitions/2``
^^^^^^^^^^^^^^^^

Generates all set partitions of a list using default order. Partitions are represented as lists of non-empty blocks. The empty list has one partition, represented by the empty list of blocks.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partitions(List,Partitions)``
| **Mode and number of proofs:**
|    ``partitions(+list,-list)`` - ``one``


------------

.. index:: partition/2
.. _partitions_protocol/0::partition/2:

``partition/2``
^^^^^^^^^^^^^^^

True iff the second argument is a set partition of a list using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partition(List,Partition)``
| **Mode and number of proofs:**
|    ``partition(+list,-list)`` - ``one_or_more``


------------

.. index:: partitions/3
.. _partitions_protocol/0::partitions/3:

``partitions/3``
^^^^^^^^^^^^^^^^

Generates either all set partitions with the given order (when the second argument is ``default`` or ``lexicographic``) or all set partitions with an exact number of blocks using default order (when the first argument is an integer).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partitions(ListOrK,OrderOrList,Partitions)``
| **Mode and number of proofs:**
|    ``partitions(+list,+atom,-list)`` - ``one``
|    ``partitions(+integer,+list,-list)`` - ``one``


------------

.. index:: partition/3
.. _partitions_protocol/0::partition/3:

``partition/3``
^^^^^^^^^^^^^^^

True iff the third argument is a set partition generated either in the given order or with the given exact number of blocks using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partition(ListOrK,OrderOrList,Partition)``
| **Mode and number of proofs:**
|    ``partition(+list,+atom,-list)`` - ``one_or_more``
|    ``partition(+integer,+list,-list)`` - ``one_or_more``


------------

.. index:: partitions/4
.. _partitions_protocol/0::partitions/4:

``partitions/4``
^^^^^^^^^^^^^^^^

Generates all set partitions with an exact number of blocks and the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partitions(K,List,Order,Partitions)``
| **Mode and number of proofs:**
|    ``partitions(+integer,+list,+atom,-list)`` - ``one``


------------

.. index:: partition/4
.. _partitions_protocol/0::partition/4:

``partition/4``
^^^^^^^^^^^^^^^

True iff the fourth argument is a set partition with an exact number of blocks and the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partition(K,List,Order,Partition)``
| **Mode and number of proofs:**
|    ``partition(+integer,+list,+atom,-list)`` - ``one_or_more``


------------

.. index:: distinct_partitions/2
.. _partitions_protocol/0::distinct_partitions/2:

``distinct_partitions/2``
^^^^^^^^^^^^^^^^^^^^^^^^^

Generates all distinct set partitions of a list (deduplicating equal-valued partitions after canonicalizing block order) using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partitions(List,Partitions)``
| **Mode and number of proofs:**
|    ``distinct_partitions(+list,-list)`` - ``one``


------------

.. index:: distinct_partition/2
.. _partitions_protocol/0::distinct_partition/2:

``distinct_partition/2``
^^^^^^^^^^^^^^^^^^^^^^^^

True iff the second argument is a distinct set partition of a list using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partition(List,Partition)``
| **Mode and number of proofs:**
|    ``distinct_partition(+list,-list)`` - ``one_or_more``


------------

.. index:: distinct_partitions/3
.. _partitions_protocol/0::distinct_partitions/3:

``distinct_partitions/3``
^^^^^^^^^^^^^^^^^^^^^^^^^

Generates either all distinct set partitions with the given order (when the second argument is ``default`` or ``lexicographic``) or all distinct set partitions with an exact number of blocks using default order (when the first argument is an integer).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partitions(ListOrK,OrderOrList,Partitions)``
| **Mode and number of proofs:**
|    ``distinct_partitions(+list,+atom,-list)`` - ``one``
|    ``distinct_partitions(+integer,+list,-list)`` - ``one``


------------

.. index:: distinct_partition/3
.. _partitions_protocol/0::distinct_partition/3:

``distinct_partition/3``
^^^^^^^^^^^^^^^^^^^^^^^^

True iff the third argument is a distinct set partition generated either in the given order or with the given exact number of blocks using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partition(ListOrK,OrderOrList,Partition)``
| **Mode and number of proofs:**
|    ``distinct_partition(+list,+atom,-list)`` - ``one_or_more``
|    ``distinct_partition(+integer,+list,-list)`` - ``one_or_more``


------------

.. index:: distinct_partitions/4
.. _partitions_protocol/0::distinct_partitions/4:

``distinct_partitions/4``
^^^^^^^^^^^^^^^^^^^^^^^^^

Generates all distinct set partitions with an exact number of blocks and the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partitions(K,List,Order,Partitions)``
| **Mode and number of proofs:**
|    ``distinct_partitions(+integer,+list,+atom,-list)`` - ``one``


------------

.. index:: distinct_partition/4
.. _partitions_protocol/0::distinct_partition/4:

``distinct_partition/4``
^^^^^^^^^^^^^^^^^^^^^^^^

True iff the fourth argument is a distinct set partition with an exact number of blocks and the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partition(K,List,Order,Partition)``
| **Mode and number of proofs:**
|    ``distinct_partition(+integer,+list,+atom,-list)`` - ``one_or_more``


------------

.. index:: count_partitions/2
.. _partitions_protocol/0::count_partitions/2:

``count_partitions/2``
^^^^^^^^^^^^^^^^^^^^^^

Counts the number of set partitions of a list.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``count_partitions(List,Count)``
| **Mode and number of proofs:**
|    ``count_partitions(+list,-integer)`` - ``one``


------------

.. index:: nth_partition/3
.. _partitions_protocol/0::nth_partition/3:

``nth_partition/3``
^^^^^^^^^^^^^^^^^^^

Returns the set partition at a given zero-based index using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``nth_partition(List,Index,Partition)``
| **Mode and number of proofs:**
|    ``nth_partition(+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: nth_partition/4
.. _partitions_protocol/0::nth_partition/4:

``nth_partition/4``
^^^^^^^^^^^^^^^^^^^

Returns either the set partition at a given zero-based index in the given order (when the second argument is ``default`` or ``lexicographic``) or the set partition with an exact number of blocks at a given zero-based index using default order (when the first argument is an integer).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``nth_partition(ListOrK,OrderOrList,Index,Partition)``
| **Mode and number of proofs:**
|    ``nth_partition(+list,+atom,+integer,-list)`` - ``zero_or_one``
|    ``nth_partition(+integer,+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: nth_partition/5
.. _partitions_protocol/0::nth_partition/5:

``nth_partition/5``
^^^^^^^^^^^^^^^^^^^

Returns the set partition with an exact number of blocks at a given zero-based index in the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``nth_partition(K,List,Order,Index,Partition)``
| **Mode and number of proofs:**
|    ``nth_partition(+integer,+list,+atom,+integer,-list)`` - ``zero_or_one``


------------

.. index:: partition_index/3
.. _partitions_protocol/0::partition_index/3:

``partition_index/3``
^^^^^^^^^^^^^^^^^^^^^

Returns the zero-based index of a set partition using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partition_index(List,Partition,Index)``
| **Mode and number of proofs:**
|    ``partition_index(+list,+list,-integer)`` - ``zero_or_one``


------------

.. index:: partition_index/4
.. _partitions_protocol/0::partition_index/4:

``partition_index/4``
^^^^^^^^^^^^^^^^^^^^^

Returns either the zero-based index of a set partition in the given order (when the second argument is ``default`` or ``lexicographic``) or the zero-based index of a set partition with an exact number of blocks using default order (when the first argument is an integer).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partition_index(ListOrK,OrderOrList,Partition,Index)``
| **Mode and number of proofs:**
|    ``partition_index(+list,+atom,+list,-integer)`` - ``zero_or_one``
|    ``partition_index(+integer,+list,+list,-integer)`` - ``zero_or_one``


------------

.. index:: partition_index/5
.. _partitions_protocol/0::partition_index/5:

``partition_index/5``
^^^^^^^^^^^^^^^^^^^^^

Returns the zero-based index of a set partition with an exact number of blocks in the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``partition_index(K,List,Order,Partition,Index)``
| **Mode and number of proofs:**
|    ``partition_index(+integer,+list,+atom,+list,-integer)`` - ``zero_or_one``


------------

.. index:: count_partitions/3
.. _partitions_protocol/0::count_partitions/3:

``count_partitions/3``
^^^^^^^^^^^^^^^^^^^^^^

Counts the number of set partitions of a list with an exact number of blocks.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``count_partitions(K,List,Count)``
| **Mode and number of proofs:**
|    ``count_partitions(+integer,+list,-integer)`` - ``zero_or_one``


------------

.. index:: count_distinct_partitions/2
.. _partitions_protocol/0::count_distinct_partitions/2:

``count_distinct_partitions/2``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Counts the number of distinct set partitions of a list (deduplicating equal-valued partitions).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``count_distinct_partitions(List,Count)``
| **Mode and number of proofs:**
|    ``count_distinct_partitions(+list,-integer)`` - ``one``


------------

.. index:: nth_distinct_partition/3
.. _partitions_protocol/0::nth_distinct_partition/3:

``nth_distinct_partition/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns the distinct set partition at a given zero-based index using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``nth_distinct_partition(List,Index,Partition)``
| **Mode and number of proofs:**
|    ``nth_distinct_partition(+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: nth_distinct_partition/4
.. _partitions_protocol/0::nth_distinct_partition/4:

``nth_distinct_partition/4``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns either the distinct set partition at a given zero-based index in the given order (when the second argument is ``default`` or ``lexicographic``) or the distinct set partition with an exact number of blocks at a given zero-based index using default order (when the first argument is an integer).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``nth_distinct_partition(ListOrK,OrderOrList,Index,Partition)``
| **Mode and number of proofs:**
|    ``nth_distinct_partition(+list,+atom,+integer,-list)`` - ``zero_or_one``
|    ``nth_distinct_partition(+integer,+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: nth_distinct_partition/5
.. _partitions_protocol/0::nth_distinct_partition/5:

``nth_distinct_partition/5``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns the distinct set partition with an exact number of blocks at a given zero-based index in the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``nth_distinct_partition(K,List,Order,Index,Partition)``
| **Mode and number of proofs:**
|    ``nth_distinct_partition(+integer,+list,+atom,+integer,-list)`` - ``zero_or_one``


------------

.. index:: distinct_partition_index/3
.. _partitions_protocol/0::distinct_partition_index/3:

``distinct_partition_index/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns the zero-based index of a distinct set partition using default order.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partition_index(List,Partition,Index)``
| **Mode and number of proofs:**
|    ``distinct_partition_index(+list,+list,-integer)`` - ``zero_or_one``


------------

.. index:: distinct_partition_index/4
.. _partitions_protocol/0::distinct_partition_index/4:

``distinct_partition_index/4``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns either the zero-based index of a distinct set partition in the given order (when the second argument is ``default`` or ``lexicographic``) or the zero-based index of a distinct set partition with an exact number of blocks using default order (when the first argument is an integer).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partition_index(ListOrK,OrderOrList,Partition,Index)``
| **Mode and number of proofs:**
|    ``distinct_partition_index(+list,+atom,+list,-integer)`` - ``zero_or_one``
|    ``distinct_partition_index(+integer,+list,+list,-integer)`` - ``zero_or_one``


------------

.. index:: distinct_partition_index/5
.. _partitions_protocol/0::distinct_partition_index/5:

``distinct_partition_index/5``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns the zero-based index of a distinct set partition with an exact number of blocks in the given order: ``default`` or ``lexicographic``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``distinct_partition_index(K,List,Order,Partition,Index)``
| **Mode and number of proofs:**
|    ``distinct_partition_index(+integer,+list,+atom,+list,-integer)`` - ``zero_or_one``


------------

.. index:: count_distinct_partitions/3
.. _partitions_protocol/0::count_distinct_partitions/3:

``count_distinct_partitions/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Counts the number of distinct set partitions of a list with an exact number of blocks.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``count_distinct_partitions(K,List,Count)``
| **Mode and number of proofs:**
|    ``count_distinct_partitions(+integer,+list,-integer)`` - ``zero_or_one``


------------

.. index:: random_partition/2
.. _partitions_protocol/0::random_partition/2:

``random_partition/2``
^^^^^^^^^^^^^^^^^^^^^^

Returns a random set partition of a list.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``random_partition(List,Partition)``
| **Mode and number of proofs:**
|    ``random_partition(+list,-list)`` - ``one``


------------

.. index:: random_partition/3
.. _partitions_protocol/0::random_partition/3:

``random_partition/3``
^^^^^^^^^^^^^^^^^^^^^^

Returns a random set partition of a list with an exact number of blocks.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``random_partition(K,List,Partition)``
| **Mode and number of proofs:**
|    ``random_partition(+integer,+list,-list)`` - ``zero_or_one``


------------

.. index:: sample_partitions/3
.. _partitions_protocol/0::sample_partitions/3:

``sample_partitions/3``
^^^^^^^^^^^^^^^^^^^^^^^

Returns SampleCount random set partitions of a list, sampled with replacement.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``sample_partitions(List,SampleCount,Samples)``
| **Mode and number of proofs:**
|    ``sample_partitions(+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: sample_partitions/4
.. _partitions_protocol/0::sample_partitions/4:

``sample_partitions/4``
^^^^^^^^^^^^^^^^^^^^^^^

Returns SampleCount random set partitions of a list with an exact number of blocks, sampled with replacement.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``sample_partitions(K,List,SampleCount,Samples)``
| **Mode and number of proofs:**
|    ``sample_partitions(+integer,+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: random_distinct_partition/2
.. _partitions_protocol/0::random_distinct_partition/2:

``random_distinct_partition/2``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns a random distinct set partition of a list (deduplicating equal-valued partitions).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``random_distinct_partition(List,Partition)``
| **Mode and number of proofs:**
|    ``random_distinct_partition(+list,-list)`` - ``one``


------------

.. index:: random_distinct_partition/3
.. _partitions_protocol/0::random_distinct_partition/3:

``random_distinct_partition/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns a random distinct set partition of a list with an exact number of blocks (deduplicating equal-valued partitions).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``random_distinct_partition(K,List,Partition)``
| **Mode and number of proofs:**
|    ``random_distinct_partition(+integer,+list,-list)`` - ``zero_or_one``


------------

.. index:: sample_distinct_partitions/3
.. _partitions_protocol/0::sample_distinct_partitions/3:

``sample_distinct_partitions/3``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns SampleCount random distinct set partitions of a list, sampled with replacement after deduplicating equal-valued partitions.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``sample_distinct_partitions(List,SampleCount,Samples)``
| **Mode and number of proofs:**
|    ``sample_distinct_partitions(+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: sample_distinct_partitions/4
.. _partitions_protocol/0::sample_distinct_partitions/4:

``sample_distinct_partitions/4``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Returns SampleCount random distinct set partitions of a list with an exact number of blocks, sampled with replacement after deduplicating equal-valued partitions.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``sample_distinct_partitions(K,List,SampleCount,Samples)``
| **Mode and number of proofs:**
|    ``sample_distinct_partitions(+integer,+list,+integer,-list)`` - ``zero_or_one``


------------

.. index:: next_partition/3
.. _partitions_protocol/0::next_partition/3:

``next_partition/3``
^^^^^^^^^^^^^^^^^^^^

Returns the next distinct set partition value in lexicographic order induced by the first argument.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``next_partition(List,Partition,Next)``
| **Mode and number of proofs:**
|    ``next_partition(+list,+list,-list)`` - ``zero_or_one``


------------

.. index:: next_partition/4
.. _partitions_protocol/0::next_partition/4:

``next_partition/4``
^^^^^^^^^^^^^^^^^^^^

Returns the next distinct set partition value with an exact number of blocks in lexicographic order induced by the second argument.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``next_partition(K,List,Partition,Next)``
| **Mode and number of proofs:**
|    ``next_partition(+integer,+list,+list,-list)`` - ``zero_or_one``


------------

.. index:: previous_partition/3
.. _partitions_protocol/0::previous_partition/3:

``previous_partition/3``
^^^^^^^^^^^^^^^^^^^^^^^^

Returns the previous distinct set partition value in lexicographic order induced by the first argument.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``previous_partition(List,Partition,Previous)``
| **Mode and number of proofs:**
|    ``previous_partition(+list,+list,-list)`` - ``zero_or_one``


------------

.. index:: previous_partition/4
.. _partitions_protocol/0::previous_partition/4:

``previous_partition/4``
^^^^^^^^^^^^^^^^^^^^^^^^

Returns the previous distinct set partition value with an exact number of blocks in lexicographic order induced by the second argument.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``previous_partition(K,List,Partition,Previous)``
| **Mode and number of proofs:**
|    ``previous_partition(+integer,+list,+list,-list)`` - ``zero_or_one``


------------

Protected predicates
--------------------

(none)

Private predicates
------------------

(none)

Operators
---------

(none)

