protocol

# `interval_relation_set_protocol`

Allen interval relation-set protocol using canonical ordered duplicate-free lists of base relation atoms.

Availability:
`logtalk_load(intervals(loader))`
Author: Paulo Moura
Version: 1:0:0
Date: 2026-05-13
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

## Public predicates

### `relation_set/1`

True if RelationSet is a canonical ordered duplicate-free list of Allen base relation atoms.

Compilation flags:
`static`
Template:
`relation_set(RelationSet)`
Mode and number of proofs:
`relation_set(?list(atom))` - `zero_or_more`

### `empty/1`

Returns the empty Allen relation set.

Compilation flags:
`static`
Template:
`empty(RelationSet)`
Mode and number of proofs:
`empty(?list(atom))` - `one`

### `universal/1`

Returns the universal Allen relation set containing all 13 base relation atoms.

Compilation flags:
`static`
Template:
`universal(RelationSet)`
Mode and number of proofs:
`universal(?list(atom))` - `one`

### `singleton/2`

Relates an Allen base relation atom with its singleton relation set.

Compilation flags:
`static`
Template:
`singleton(Relation,RelationSet)`
Mode and number of proofs:
`singleton(?atom,?list(atom))` - `zero_or_more`

### `normalize/2`

Normalizes a list of Allen base relation atoms into canonical ordered duplicate-free form.

Compilation flags:
`static`
Template:
`normalize(Relations,RelationSet)`
Mode and number of proofs:
`normalize(+list(atom),-list(atom))` - `zero_or_one`

### `member/2`

True if Relation is a member of RelationSet.

Compilation flags:
`static`
Template:
`member(Relation,RelationSet)`
Mode and number of proofs:
`member(?atom,+list(atom))` - `zero_or_more`

### `subset/2`

True if RelationSet1 is a subset of RelationSet2.

Compilation flags:
`static`
Template:
`subset(RelationSet1,RelationSet2)`
Mode and number of proofs:
`subset(+list(atom),+list(atom))` - `zero_or_one`

### `intersection/3`

Computes the intersection of two relation sets.

Compilation flags:
`static`
Template:
`intersection(RelationSet1,RelationSet2,Intersection)`
Mode and number of proofs:
`intersection(+list(atom),+list(atom),-list(atom))` - `zero_or_one`

### `union/3`

Computes the union of two relation sets.

Compilation flags:
`static`
Template:
`union(RelationSet1,RelationSet2,Union)`
Mode and number of proofs:
`union(+list(atom),+list(atom),-list(atom))` - `zero_or_one`

### `converse/2`

Maps a relation set to the canonical ordered set of converse relations.

Compilation flags:
`static`
Template:
`converse(RelationSet,ConverseSet)`
Mode and number of proofs:
`converse(+list(atom),-list(atom))` - `zero_or_one`

### `compose/3`

Computes the canonical ordered relation set resulting from composing two relation sets.

Compilation flags:
`static`
Template:
`compose(RelationSet1,RelationSet2,Composition)`
Mode and number of proofs:
`compose(+list(atom),+list(atom),-list(atom))` - `zero_or_one`

## Protected predicates

(none)

## Private predicates

(none)

## Operators

(none)

See also

interval_algebra_protocol, interval_algebra, interval_relation_set