S3_Names_STACK Module Interface Specification

(0) CHARACTERISTICS

-type specified: s3_stack

-features: deterministic, non-parameterized

-foreign types:

(1) SYNTAX

ACCESS-PROGRAMS

Program Name
Arg#1Arg#2Result Type
PUSHs3_stack:VOint:V 
POPs3_stack:VO   
TOPs3_stack:VO  int

(2) CANONICAL TRACES

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

(3) SEMANTICS

ACCESS-PROGRAMS

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

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

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

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

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

Legality(TOP((n, T))) =

ConditionValue
T = _ %empty%
T _%legal%

TOP((n, T) ) = T

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