birthday Module Interface Specification

(0) CHARACTERISTICS

-type specified: birthday

-features: deterministic, non-parameterized

-foreign types: date, name

(1) SYNTAX

ACCESS-PROGRAMS

Program Name
Arg#1Arg#2Arg#3Result Type
INITbirthday:VO     
ADDbirthday:VOname:Vdate:V 
FINDbirthday:Vname:V  date
REMOVEbirthday:VOname:V   

(2) CANONICAL TRACES

canonical(T) T = _ max:<int>; n[1]..n[max]:<name>; d[1]..d[max]:<date> [T = INIT(*).[ADD(*, n[i], d[i])]i=1..max max 50 i,j:<int> [1 i i < j j max n[i] < n[j]]]

AUXILIARY FUNCTIONS

is_in: <name> × <birthday> <bool>

is_in(m, a) = k,max:<int>; n[1]..n[max]:<name>; d[1]..d[max]:<date> [a = INIT(*).[ADD(*, n[i], d[i])]i=1..k - 1.ADD(*, m, d[k]).[ADD(*, n[i], d[i])]i=k + 1..max ]

full: <birthday> <bool>

full(a) = length(a) 51

(3) SEMANTICS

ACCESS-PROGRAMS

Legality(INIT((b, T))) = %legal%

INIT((b, T) ) = INIT(*)

Legality(ADD((b, T), n, d)) =

ConditionValue
T = _ %birthday_not_init%
T _ full(T)%birthday_full%
T _ ¬full(T) is_in(n, T)%name_already_known%
T _ ¬full(T) ¬is_in(n, T)%legal%

ADD((b, T) , n, d) = T1.ADD(*, n, d).T2 where T1,T2:<birthday> [T = T1.T2 canonical(T1.ADD(*, n, d).T2)]

Legality(FIND(T, n)) =

ConditionValue
T = _ %birthday_not_init%
T _ is_in(n, T)%legal%
T _ ¬is_in(n, T)%unknown_name%

FIND(T, n) = d where T1,T2:<birthday>; d:<date> [T = T1.ADD(*, n, d).T2 ]

Legality(REMOVE((b, T), n)) =

ConditionValue
T = _ %birthday_not_init%
T _ is_in(n, T)%legal%
T _ ¬is_in(n, T)%unknown_name%

REMOVE((b, T) , n) = T1.T2 where T1,T2:<birthday>; d:<date> [T = T1.ADD(*, n, d).T2 ]