(0) CHARACTERISTICS
-type specified: birthday
-features: deterministic, non-parameterized
(1) SYNTAX
ACCESS-PROGRAMS
Arg#1 | Arg#2 | Arg#3 | Result Type | INIT | birthday:VO | | | | ADD | birthday:VO | name:V | date:V | | FIND | birthday:V | name:V | | date | REMOVE | birthday:VO | name: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-PROGRAMSLegality(INIT((b, T))) = %legal%
INIT((b, T) ) = INIT(*)
Legality(ADD((b, T), n, d)) =
Condition | Value |
---|---|
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)) =
Condition | Value |
---|---|
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)) =
Condition | Value |
---|---|
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 ]