path Module Interface Specification

(0) CHARACTERISTICS

-type specified: path

-features: deterministic, non-parameterized

-foreign types:

(1) SYNTAX

ACCESS-PROGRAMS

Program Name
Arg#1Arg#2Result Type
MAKEPATHpath:O   
ADDPATHpath:VOchar:V 
SUBPATHpath:VO   
EMPTYPATHpath:V  bool
GOLEFTpath:V  bool
GORIGHTpath: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-PROGRAMS

Legality(MAKEPATH(n)) = %legal%

MAKEPATH(n ) = MAKEPATH(*)

Legality(ADDPATH((n, p), c)) =

ConditionValue
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))) =

ConditionValue
p = _ %invalidpath%
p = MAKEPATH(*) %emptypath%
length(p) > 1%legal%

SUBPATH((n, p) ) = subpath(p)

Legality(EMPTYPATH(p)) =

ConditionValue
p = _ %invalidpath%
p _%legal%

EMPTYPATH(p) = emptypath(p)

Legality(GOLEFT(p)) =

ConditionValue
p = _ %invalidpath%
p _%legal%

GOLEFT(p) = goleft(p)

Legality(GORIGHT(p)) =

ConditionValue
p = _ %invalidpath%
p _%legal%

GORIGHT(p) = goright(p)