next node: SetConv,
prev node: Subsystem Sets Proper,
up to node: Subsystem Sets Proper


Set

Signature of Set

List of Import References :
See BOOL
See DENOTATION
See Nat
See Option
See Seq

SIGNATURE Set [data,< :data ** data -> bool]

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

IMPORT  Nat          ONLY nat
        Seq[data]    ONLY seq
        Option[data] ONLY option

-- Parameter
SORT data
FUN <   : data**data->bool
        -- total strict-order; in 
        --   ~(x < y) AND ~(y < x) => x = y
        -- should = represent semantic equality

-- The type itself 
SORT set

 
-- non free constructors
FUN {}       : set                              -- empty set
FUN incl     : data ** set->set                 -- include

-- constructing a set from datas 

FUN % : data -> set                     
FUN % : data ** data -> set
FUN % : data ** data ** data -> set
FUN % : data ** data ** data ** data -> set
FUN % : data ** data ** data ** data ** data -> set
FUN % : data ** data ** data ** data ** data ** data -> set
FUN % : data ** data ** data ** data ** data ** data ** data -> set
FUN % : data ** data ** data ** data ** data ** data ** data ** data -> set
      --  %(d1, ..., dn) = {d1, ..., dn}

FUN incl excl: data ** set -> set        -- include/exclude

-- constructing a set from a function
FUN .. : nat ** nat -> (nat -> data) -> set
       -- (n1 .. n2)(f) = { f(n1), f(n1 + 1), ..., f(n2) }

FUN iter : data ** (data -> data) ** (data -> bool) -> set
                -- iter(start, it, P) == 
                --    {start,  it(start), ... it^n(start)}
                -- where P(it^i(start)) for 0 <= i <= n
                -- and ~(P(it^(n+1)(start)))

-- combining sets
FUN + - *    : set ** set -> set                -- union/diff./intersection

-- accessing datas in a set
FUN arb      : set -> data                      -- select arbitrary element
                                                -- undefined for empty set

-- information about a set
FUN {}?      : set -> bool                      -- test for empty set
FUN in       : data ** set -> bool              -- membership
FUN #        : set -> nat                       -- cardinality

minimum and maximum elements of a set, undefined for {}

FUN min max  : set -> data          

FUN exist?   : (data -> bool) ** set->bool      
                -- exist? (p, s)
                -- is there any element of b fulfilling predicate p?

FUN find?       : (data -> bool) ** set -> option[data]
                -- find? (p, s)
                -- return some element of s fulfilling p

FUN forall?  : (data -> bool) ** set->bool  
                -- forall? (p, s) 
                -- do all elements of s fulfill predicate p?

-- comparing sets
FUN = <= <   : set**set->bool           -- equality/subset/proper subset

FUN {<}      : set ** set -> bool       -- ordering on sets

-- not for user purpose -----------------------------------------------

-- representation 

IMPORT Seq[data] ONLY seq

FUN abs: seq -> set
    rep: set -> seq


next node: SetConv,
prev node: Subsystem Sets Proper,
up to node: Subsystem Sets Proper