Extended_stack Module Interface Specification

(0) CHARACTERISTICS

-type specified: example

-features: deterministic, non-parameterized

-foreign types:

(1) SYNTAX

ACCESS-PROGRAMS

Program Name
Arg#1Arg#2Result Type
PUSHexample:VOint:V 
POPexample:VOint:V 
SHIFTexample:VOint:V 
JOINexample:VOexample:VO 
PLUSexample:VO   
NEGexample:VO   
MULTexample:VO   
TOPexample:V  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), x)) = %legal%

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

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

ConditionValue
i < 0%fatal%
i 0 length(T) < i%too low%
i 0 length(T) i%legal%

POP((n, T) , i) = B where B,E:<example> [T = B.E length(E) = i ]

Legality(SHIFT((n, T), i)) =

ConditionValue
i < 0%fatal%
i 0 length(T) < 2 * i%too low%
i 0 length(T) 2 * i%legal%

SHIFT((n, T) , i) = B.E2 where B,E1,E2:<example> [T = B.E1.E2 length(E1) = i length(E2) = i ]

Legality(JOIN((n, T), (m, U))) = %legal%

JOIN((n, T) , (m, U)) = T.U

JOIN((n, T), (m, U) ) =

ConditionValue
n mU
n = m T.U

Legality(PLUS((n, T))) =

ConditionValue
length(T) < 2%too low%
length(T) 2%legal%

PLUS((n, T) ) = B.PUSH(*, x + y) where B:<example>; x,y:<int> [T = B.PUSH(*, x).PUSH(*, y) ]

Legality(NEG((n, T))) =

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

NEG((n, T) ) = B.PUSH(*, int::NEG(*1, x) ) where B:<example>; x:<int> [T = B.PUSH(*, x) ]

Legality(MULT((n, T))) =

ConditionValue
length(T) < 2%too low%
length(T) 2%legal%

MULT((n, T) ) = B.PUSH(*, int::TIMES(x, y) ) where B:<example>; x,y:<int> [T = B.PUSH(*, x).PUSH(*, y) ]

Legality(TOP(T)) =

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

TOP(T) = x where B:<example>; x:<int> [T = B.PUSH(*, x) ]