This structure defines the data type of mappings from a domain to a codomain.
This implementation is based on ordered sequences, which in general has good performance on operations on whole maps. Use this family of structures, if you absolutely want to rely on this implementation; otherwise you are advised to use the standard implementation of maps.
List of Import References :
See BOOL
See DENOTATION
See Nat
See Option
See Pair
See Seq
See Set
SIGNATURE MapByOS [dom:SORT,< : dom ** dom -> bool,codom :SORT]
$Date: 2010-09-30 18:24:17 +0200 (Do, 30. Sep 2010) $ ($Revision: 616 $)
IMPORT Nat ONLY nat Option[codom] ONLY option Set[dom,<] ONLY set Seq[dom] ONLY seq Seq[codom] ONLY seq Pair[dom, codom] ONLY pair Option[pair] ONLY option
dom
is the type of the domain, codom
the type of
the codomain. <
is a total strict
order: the formula ALL x y. ~(x < y) AND ~(y < x) => x === y must
hold.
SORT dom codom FUN < : dom ** dom -> bool
SORT map
The empty map.
FUN {} : map
(Re)define map at point.
FUN def : dom ** codom ** map -> map
(Re)define resp. undefine map at point.
FUN def : dom ** codom ** map -> map undef : dom ** map -> map
In upd (d, f, m)
, redefine m
at d
by f(m!d)
FUN upd : dom ** (codom -> codom) ** map -> map
Best explained informally: extend (M, <d1, ..., dn>, <c1,
..., cn>)
results def(...def(M,d1,c1)...,dn,cn)
.
FUN extend : map ** seq[dom] ** seq[codom]->map
(n1 .. n2)(f,g) == {f(n1) -> g(f(n1)), ... , f(n2) -> g(f(n2))
}
FUN .. : nat ** nat -> (nat -> dom) ** (dom -> codom) -> map
Generate elements of the domain from start
upto (excluding)
the first element, for which P(it^x(start))
does not hold. The
function f
assigns to each element of the domain the associated
codom element.
FUN iter : dom ** (dom -> dom) ** (dom -> bool) -> (dom -> codom) -> map
Add for every element d of the set the maplet d -> f(d)
to the map
FUN init : set[dom, <] ** (dom -> codom) -> map
Lifting of def
to maps. Informally, M <+
{d1->c1,...,dn -> cn
= def(...def(M,d1,c1)...,dn,cn)}
FUN <+ : map ** map -> map
Lifting of undef to sets. Informally, M <- {d1,...,dn
=
undef(...undef(M,d1)...,dn)}.
FUN <- : map ** set[dom,<] -> map
m!d
: give associated value to d
in m
which must exist
FUN ! : map ** dom -> codom
m ?! d
: give associated value to d
in m
, if
it exists, else nil
FUN !? : map ** dom -> option[codom]
test for empty map
FUN {}? : map -> bool
test for definedness
FUN def? : dom ** map -> bool
domain of the map. Informally, dom ( {d1->c1,...,dn -> cn
) = {d1, ..., dn}}
FUN dom : map -> set[dom,<]
Codomain of the map. Note that this is a sequence and not a set!
FUN codom : map -> seq[codom]
cardinality of dom(m)
FUN # : map -> nat
exist?(P, M)
: is there d
in dom(M)
with
P(d, M!d)
?
FUN exist? : (dom ** codom -> bool) ** map -> bool
find?(P, M)
: return avail(c, d)
for some c->d
in M
for which P
holds
FUN find? : (dom ** codom -> bool) ** map -> option[pair]
forall?(P, M)
: does P
hold for every (d, r)
in M
?
FUN forall? : (dom ** codom -> bool) ** map -> bool
-- representation IMPORT Pair[dom, codom] ONLY pair Set[pair[dom, codom], less] ONLY set FUN less : pair ** pair -> bool FUN abs: set[pair, less] -> map FUN rep: map -> set[pair, less]
next node: MapByOSConv,
prev node: Subsystem Maps By Ordered Sequences,
up to node: Subsystem Maps By Ordered Sequences