(0) CHARACTERISTICS
-type specified: example
-features: deterministic, non-parameterized
-foreign types:
(1) SYNTAX
ACCESS-PROGRAMS
Arg#1 | Arg#2 | Result Type | PUSH | example:VO | int:V | | POP | example:VO | int:V | | SHIFT | example:VO | int:V | | JOIN | example:VO | example:VO | | PLUS | example:VO | | | NEG | example:VO | | | MULT | example:VO | | | TOP | example:V | | int | |
---|
(2) CANONICAL TRACES
canonical(T) n:<int>; a[1]..a[n]:<int> [T = [PUSH(*, a[i])]i=1..n ](3) SEMANTICS
ACCESS-PROGRAMSLegality(PUSH((n, T), x)) = %legal%
PUSH((n, T) , x) = T.PUSH(*, x)
Legality(POP((n, T), i)) =
Condition | Value |
---|---|
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)) =
Condition | Value |
---|---|
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) ) =
Condition | Value |
---|---|
n m | U |
n = m | T.U |
Legality(PLUS((n, T))) =
Condition | Value |
---|---|
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))) =
Condition | Value |
---|---|
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))) =
Condition | Value |
---|---|
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)) =
Condition | Value |
---|---|
T = _ | %empty% |
T _ | %legal% |
TOP(T) = x where B:<example>; x:<int> [T = B.PUSH(*, x) ]