S2_Legality_STACK(...) Module Interface Specification

(0) CHARACTERISTICS

-type specified: s2_stack

-features: deterministic, parameterized

-foreign types:

-parameters: elems

(1) SYNTAX

ACCESS-PROGRAMS

Program Name
Arg#1Arg#2Result Type
PUSHs2_stack:VOelems:V 
POPs2_stack:VO   
TOPs2_stack:V  elems

(2) CANONICAL TRACES

canonical(T) n:<int>; a[1]..a[n]:<elems> [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:<s2_stack>; a:<elems> [T = T1.PUSH(*, a) ]

Legality(TOP(T)) =

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

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