next node: RelNotForUserPurpose,
prev node: Subsystem Binary Relations,
up to node: Subsystem Binary Relations


Rel

The data type of binary relations. Every pair has an element of an arbitrary data type associated.

Signature of Rel

List of Import References :
See BOOL
See DENOTATION
See Nat
See Option
See Pair
See Seq
See Set
See Triple

SIGNATURE Rel[dom:SORT, < : dom ** dom -> bool, 

$Date: 2010-09-30 18:24:17 +0200 (Do, 30. Sep 2010) $ ($Revision: 616 $)

              codom:SORT, < : codom ** codom -> bool,
              data]

Parameter

dom and codom are the domain and codomain of the relation, data is the data type of the associated elements. The functions < are assumed to be total orders.

SORT dom codom data
FUN < : dom ** dom -> bool
FUN < : codom ** codom -> bool

Imports

IMPORT Set[dom,<] ONLY set
       Set[codom,<] ONLY set
       Pair[dom, codom] ONLY pair
       Triple[dom, codom, data] ONLY triple
       Option[data] ONLY option
       Option[pair] ONLY option
       Option[triple] ONLY option
       Seq[dom] ONLY seq
       Seq[codom] ONLY seq
       Seq[data] ONLY seq
       Nat ONLY nat

The Type Itself

SORT rel

Non-Free Constructors

Empty relation

FUN {} : rel

Add element to relation. If pair is already in the relation, old associated data is dicarded.

FUN incl: dom ** codom ** data ** rel -> rel
FUN incl: dom ** codom ** (dom ** codom -> data) ** rel -> rel

Construct a Relation From Datas

The singleton relation (d :-> c)(#).

FUN :-> : dom ** codom -> data -> rel
FUN :-> : dom ** codom -> (dom ** codom -> data) -> rel

Add element to relation

FUN incl: dom ** codom ** data ** rel -> rel

Remove element from relation

FUN excl: dom ** codom ** rel -> rel

Extend relation by pairs of corresponding sequences.Supply data either by a third sequence or by a function.

FUN extend: rel ** seq[dom] ** seq[codom] ** seq[data] -> rel
FUN extend: rel ** seq[dom] ** seq[codom] ** (dom ** codom -> data) -> rel

Construct a Relation From Sets

Add all pairs A x B to the relation, use function to compute associated data.

FUN x : set[dom, <] ** set[codom, <] -> (dom ** codom -> data) -> rel
FUN x : dom ** set[codom, <] -> (dom ** codom -> data) -> rel
FUN x : set[dom, <] ** codom -> (dom ** codom -> data) -> rel

Combining Relations

Lift the set operations union, difference, intersection. Associated data is not considered. If a pair (d, c) is element of both relations, but has different data associated, one of the data is chosen arbitrarily.

FUN + : rel ** rel -> rel
FUN - : rel ** rel -> rel
FUN * : rel ** rel -> rel

Restricting Relations

Restrict relation to elements whose domain/codomain is element of the given set.

FUN <| : set[dom, <] ** rel -> rel
FUN |> : rel ** set[codom, <] -> rel

Restrict relation to elements whose domain/codomain is not element of the given set.

FUN <~| : set[dom, <] ** rel -> rel
FUN |~> : rel ** set[codom, <] -> rel

Accessing Data

Pick one element of the relation, with or without data.

FUN arb: rel -> dom ** codom 
FUN arb: rel -> dom ** codom ** data

Get all elements which are in relation with given domain element(s).

FUN ! : rel ** dom -> set[codom, <]
FUN ! : rel ** set[dom,<] -> set[codom, <]

Get all elements which are in relation with given codomain element(s).

FUN !_c : rel ** codom -> set[dom, <]
FUN !_c : rel ** set[codom,<] -> set[dom, <]

Get associated data.

FUN ! : rel ** dom ** codom -> data
FUN !? : rel ** dom ** codom -> option[data]

Information About a Relation

Empty relation?

FUN {}? : rel -> bool

Pair contained in relation?

FUN in : dom ** codom ** rel -> bool

Is (co)domain element related to some (co)domain element?

FUN def? : rel ** dom -> bool
FUN def_c? : rel ** codom -> bool

Size of the relation

FUN # : rel -> nat

Actual domain and codomain of the relation

FUN dom: rel -> set[dom, <]
FUN codom: rel -> set[codom, <]

Is relation a bijection or a function?

FUN bijective? : rel -> bool
FUN function? : rel -> bool

Minimum and maximum element of the relation

FUN min: rel -> dom ** codom
FUN max: rel -> dom ** codom

Check properties of elements, with and without data

FUN exist? : (dom ** codom -> bool) ** rel -> bool
FUN find? :  (dom ** codom -> bool) ** rel -> option[pair[dom, codom]]
FUN forall? :(dom ** codom -> bool) ** rel -> bool

FUN exist? : (dom ** codom ** data -> bool) ** rel -> bool
FUN find? :  (dom ** codom ** data -> bool) ** rel ->
                option[triple[dom, codom, data]]
FUN forall? :(dom ** codom ** data -> bool) ** rel -> bool

Comparing Relations

Equality, proper subset and subset. Associated data is not considered.

FUN = : rel ** rel -> bool
FUN < : rel ** rel -> bool
FUN <= :rel ** rel -> bool

Test for disjointness.

FUN disjoint? : rel ** rel -> bool

Total ordering of relations; associated data is not considered.

FUN {<} : rel ** rel -> bool


next node: RelNotForUserPurpose,
prev node: Subsystem Binary Relations,
up to node: Subsystem Binary Relations