(0) CHARACTERISTICS
-type specified: path
-features: deterministic, non-parameterized
-foreign types:
(1) SYNTAX
ACCESS-PROGRAMS
Arg#1 | Arg#2 | Result Type | MAKEPATH | path:O | | | ADDPATH | path:VO | char:V | | SUBPATH | path:VO | | | EMPTYPATH | path:V | | bool | GOLEFT | path:V | | bool | GORIGHT | path:V | | bool | |
---|
(2) CANONICAL TRACES
canonical(T) T = _ n:<int>; c[1]..c[n]:<char> [T = MAKEPATH(*).[ADDPATH(*, c[i])]i=1..n i:<int>1 i i n [c[i] = 'l' c[i] = 'r' ]]AUXILIARY FUNCTIONS
emptypath: <path> <bool>
emptypath(p) (length(p) > 0) = length(p) = 1
goleft: <path> <bool>
goleft(p) (length(p) > 0) = S1:<<path>> [p = MAKEPATH(*).ADDPATH(*, 'l').S1 ]
goright: <path> <bool>
goright(p) = S1:<<path>> [p = MAKEPATH(*).ADDPATH(*, 'r').S1 ]
subpath: <path> <path>
subpath(p) (length(p) > 1) = MAKEPATH(*).S1 where S1:<<path>>; c:<char> [p = MAKEPATH(*).ADDPATH(*, c).S1 ]
(3) SEMANTICS
ACCESS-PROGRAMSLegality(MAKEPATH(n)) = %legal%
MAKEPATH(n ) = MAKEPATH(*)
Legality(ADDPATH((n, p), c)) =
Condition | Value |
---|---|
p = _ | %invalidpath% |
p _ (c = 'l' c = 'r' ) | %wrongdirection% |
p _ (c 'l' c 'r') | %legal% |
ADDPATH((n, p) , c) = p.ADDPATH(*, c)
Legality(SUBPATH((n, p))) =
Condition | Value |
---|---|
p = _ | %invalidpath% |
p = MAKEPATH(*) | %emptypath% |
length(p) > 1 | %legal% |
SUBPATH((n, p) ) = subpath(p)
Legality(EMPTYPATH(p)) =
Condition | Value |
---|---|
p = _ | %invalidpath% |
p _ | %legal% |
EMPTYPATH(p) = emptypath(p)
Legality(GOLEFT(p)) =
Condition | Value |
---|---|
p = _ | %invalidpath% |
p _ | %legal% |
GOLEFT(p) = goleft(p)
Legality(GORIGHT(p)) =
Condition | Value |
---|---|
p = _ | %invalidpath% |
p _ | %legal% |
GORIGHT(p) = goright(p)