Multiple_Unbounded_Integer_Stack Module Interface Specification

(0) CHARACTERISTICS

-type specified: stack

-features: deterministic, non-parameterized

-foreign types:

(1) SYNTAX

ACCESS-PROGRAMS

Program Name
Arg#1Arg#2Result Type
CREATESTACKstack:O   
PUSHstack:VOint:V 
POPstack:VO   
TOPstack:V  int

(2) CANONICAL TRACES

canonical(T) T = _ n:<int>; a[1]..a[n]:<int> [T = CREATESTACK(*).[PUSH(*, a[i])]i=1..n ]

(3) SEMANTICS

ACCESS-PROGRAMS

Legality(CREATESTACK(n)) = %legal%

CREATESTACK(n ) = CREATESTACK(*)

Legality(PUSH((n, T), a)) =

ConditionValue
T = _ %invalidstack%
T _%legal%

PUSH((n, T) , a) = T.PUSH(*, a)

Legality(POP((n, T))) =

ConditionValue
T = _ %invalidstack%
length(T) = 1 %empty%
length(T) > 1%legal%

POP((n, T) ) = T1 where T1:<stack>; a:<int> [T = T1.PUSH(*, a) ]

Legality(TOP(T)) =

ConditionValue
T = _ %invalidstack%
length(T) = 1 %empty%
length(T) > 1%legal%

TOP(T) = a where T1:<stack>; a:<int> [T = T1.PUSH(*, a) ]