Informal Introduction
General Schema for Enumeration Type Definitions
(0) CHARACTERISTICS
-type specified: enum
-features: deterministic, parameterized
-foreign types:
-parameters: n: int
(1) SYNTAX
ACCESS-PROGRAMS
Arg#1 | Arg#2 | Result Type | ASSIGN | enum:O | enum:V | | ELEM | int:V | | enum | EQUAL | enum:V | enum:V | bool | LESS | enum:V | enum:V | bool | ORD | enum:V | | int | PRED | enum:VO | | | SUCC | enum:VO | | | |
---|
(2) CANONICAL TRACES
canonical(T) i:<int>i < n [T = [SUCC(*)]j=1..i ]AUXILIARY FUNCTIONS
less: <enum> × <enum> <bool>
less(T, U) = length(T) < length(U)
ord: <enum> <int>
ord(T) = length(T)
pred: <enum> <enum>
pred(T) (T _) = T1 where T1:<enum> [T = T1.SUCC(*) ]
succ: <enum> <enum>
succ(T) (length(T) < n - 1) = T.SUCC(*)
(3) SEMANTICS
ACCESS-PROGRAMSLegality(ASSIGN(m, U)) = %legal%
ASSIGN(m , U) = U
Legality(ELEM(k)) =
Condition | Value |
---|---|
0 > k k > n - 1 | %fatal% |
0 k k n - 1 | %legal% |
ELEM(k) = [SUCC(*)]i=1..k
Legality(EQUAL(T, U)) = %legal%
EQUAL(T, U) = T = U
Legality(LESS(T, U)) = %legal%
LESS(T, U) = less(T, U)
Legality(ORD(T)) = %legal%
ORD(T) = ord(T)
Legality(PRED((m, T))) =
Condition | Value |
---|---|
T = _ | %fatal% |
T _ | %legal% |
PRED((m, T) ) = pred(T)
Legality(SUCC((m, T))) =
Condition | Value |
---|---|
length(T) = n - 1 | %fatal% |
length(T) < n - 1 | %legal% |
SUCC((m, T) ) = succ(T)