CSTRS Format
The format for context-sensitive term rewrite systems is an extension of the basic TRS format, according to the following grammar:
csrs ::= [(VAR idlist)] (REPLACEMENT-MAP cslist) (RULES rulelist) [(COMMENT string)] idlist ::= ε | id idlist rulelist ::= ε | rule rulelist rule ::= term -> term term ::= id | id() | id(termlist) termlist ::= term | term, termlistThe restrictions on
id
and
string
are the same as in the
TRS format and cslist
specifies the replacement map:
cslist ::= fun | fun cslist fun ::= (id intlist) intlist ::= ε | int, intlistHere
int
is a nonempty sequence of digits, denoting
an argument position. Function symbols declared in
cslist
must appear as function symbols in
(RULES rulelist)
and may not appear as variables in
(VAR idlist)
.
The intlist
declaration is a list of strictly
increasing positive integers corresponding to the active (replacing)
argument positions of function symbol id
. Function
symbols may appear only once in
(REPLACEMENT-MAP cslist)
. If a function symbol in
(RULES rulelist)
is not listed in the
(REPLACEMENT-MAP cslist)
, all its argument
positions are considered active.
Example
(VAR L X) (REPLACEMENT-MAP (cons 1) ) (RULES incr(nil) -> nil incr(cons(X,L)) -> cons(s(X),incr(L)) adx(nil) -> nil adx(cons(X,L)) -> incr(cons(X,adx(L))) nats -> adx(zeros) zeros -> cons(0,zeros) head(cons(X,L)) -> X tail(cons(X,L)) -> L )