Syntax †Processes †An LMNtal program is written as an LMNtal process that represents hierarchical graphs (consisting of atoms, links and membranes) with rewrite rules for them. An LMNtal process is a multiset (bag) of the following:
The elements of a multiset are either separated by commas (e.g., a(X), b(X)) or terminated by periods (e.g., a(X). b(X).). Links names are written using alphanumeric tokens starting with capital letters (e.g., X, Res). The other alphanumeric tokens are treated as atom or membrane names (e.g., foo, 123). Quoted symbols can also be used for atom or membrane names (e.g., "foo", 'bar', [:baz:]). Since link names stand for endpoints of onetoone links, each link name in a wellformed process must occur at most twice, and each link name in a wellformed rule must occur exactly twice. A link occurring only once in a process is called a free link. A process with no free link is called a closed process. For instance, the first example below is a wellformed process with one free link Y, and the second and the third examples are wellformed closed processes. plus(AX,B,Y), times(A,X,AX), a(A), x(X). p(X,Y), p(Y,Z), p(Z,X), p(U,U). out(X), { in(X), out(Y), { in(Y), a, b }}. LMNtal comes with a special atom '=', called a connector, as will be described later. Term Notation †Atoms with n links are often used to represent (n1)ary terms, where the nth link of the atom represents the "entry point" of the term. Since each link name occurs at most twice, we can abbreviate
to
if \( t_n \) and \( s_k \) are the same link name. For example, c(A,L1,L0),c(B,L2,L1),n(L2),1(A),2(B) can be abbreviated to c(1,c(2,n),L0). This can be written also as L0=c(1,c(2,n)) because LMNtal regards c(1,c(2,n),L0) and L0=L1, c(1,c(2,n),L1) as identical (see Connectors below) and we can use the term notation for the latter to obtain L0=c(1,c(2,n)) . Abbreviated form is provided also for membranes. For an atom name p and a membrane, \( p(\dots, \{\dots\}, \dots) \) stands for a process \( p(\dots, X, \dots), \{\texttt{+}X, \dots\} \) . List Notation †The Prolog list syntax can be used in LMNtal. List constructor atoms have three arguments and the name '.' . For example, '.'(A,Tmp,X), '.'(B,Rest,Tmp), '[]'(Rest) can be abbreviated to both of the following: X=[A,BRest], Rest=[] X=[A,B] Connectors †Binary atoms of the form X=Y are called connectors. A connector states that the two links are interconnected (in zero steps). For example, ( p(A,X,C), X=B ) is equivalent to p(A,B,C) as well as to ( p(A,B,X), C=X ) and C=p(A,B). Connectors are typically used in the base case of a recursive definition: ( append([],Y,Res) : Res=Y ), ( append([AX],Y,Res) : Res=[AR], append(X,Y,R)] ) Rules †The basic syntax of a rule is
The enclosing parentheses can be omitted if periods are used to terminate the rule. Both of Head and Body are process templates. Head specifies processes to be rewritten and Body specifies the result of rewriting. Rules work only for the processes residing in the same membrane. The full syntax of a rule that contains Guards will be explained in a separate section. Process Templates †A process template is a multiset of the following:
A cell template with a membrane name only matches a cell with the same membrane name. A cell template with '/' (the stable flag) only matches a stable cell, i.e., a cell containing no applicable rules inside it. Process Contexts †A process context is a 'wildcard' for processes and represents a multiset of atoms and cells. The arguments \( X_1,\dots,X_n \) specify the set of free links that must exist in the matched process. The optional \( *X \) represents an arbitrary number of extra free links. The form \( \texttt{\$}p \) is an abbreviation of \( \texttt{\$} p\texttt{[*}X\texttt{]} \), i.e., a multiset of atoms and cells with no constraints on the occurrences of free links. A process context must occur within a membrane in a head. Alternatively, it may either occur
Process contexts of the latter kinds are called typed process contexts; see Guards for details. You can abbreviate
to
