Enumeration(...) Module Interface Specification

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

Program Name
Arg#1Arg#2Result Type
ASSIGNenum:Oenum:V 
ELEMint:V  enum
EQUALenum:Venum:Vbool
LESSenum:Venum:Vbool
ORDenum:V  int
PREDenum:VO   
SUCCenum: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-PROGRAMS

Legality(ASSIGN(m, U)) = %legal%

ASSIGN(m , U) = U

Legality(ELEM(k)) =

ConditionValue
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))) =

ConditionValue
T = _ %fatal%
T _%legal%

PRED((m, T) ) = pred(T)

Legality(SUCC((m, T))) =

ConditionValue
length(T) = n - 1 %fatal%
length(T) < n - 1%legal%

SUCC((m, T) ) = succ(T)