- List of Backups
- View the diff current.
- View the source.
- View the backup.
- Go to Syntax.
- 1 (2004-10-22 (Fri) 09:58:17)
- 2 (2004-11-30 (Tue) 11:15:00)
- 3 (2006-01-07 (Sat) 16:56:50)
- 4 (2006-01-21 (Sat) 17:02:46)
*5 (2006-03-14 (Tue) 16:08:57)*- 6 (2006-05-13 (Sat) 15:33:14)
- 7 (2006-05-29 (Mon) 02:27:45)
- 8 (2006-07-23 (Sun) 05:04:00)
- 9 (2006-11-02 (Thu) 10:18:38)
- 10 (2006-11-02 (Thu) 10:18:38)
- 11 (2010-06-10 (Thu) 04:31:49)
- 12 (2010-06-10 (Thu) 04:31:49)
- 13 (2010-06-10 (Thu) 04:31:49)
- 14 (2010-06-10 (Thu) 04:31:49)
- 15 (2010-06-16 (Wed) 15:18:28)
- 16 (2010-06-16 (Wed) 15:18:28)
- 17 (2012-05-10 (Thu) 06:33:37)
- 18 (2012-05-10 (Thu) 16:34:28)
- 19 (2012-05-11 (Fri) 02:32:29)
- 20 (2012-05-11 (Fri) 02:32:29)

- The added line is THIS COLOR.
- The deleted line is THIS COLOR.

[[Documentation]] *Syntax **Processes An LMNtal process is a multiset (unordered sequence) of the following: +''atoms'' --- &math(p(X_{1}, \ldots , X_{n})); --- a graph node with a symbolic ''name'' &math(p); and an ordered sequence of ''links'' &math(X_i);, +''cells'' --- { '''Process''' } --- a process recursively enclosed with a ''membrane'' (curly braces,) +''rules'' --- ( '''Head''' :- '''Guard''' | '''Body''' ) --- a rewrite rule for processes, explained below. | ''atoms'' | '''p'''('''X'''&size(10){1};, ..., '''X'''&size(10){'''n'''};) | a graph node with a symbolic ''name'' '''p''' and an ordered sequence of ''links'' '''X'''&size(10){'''i'''}; | | ''cells'' | { '''Process''' } | a process enclosed with a ''membrane'' (curly braces) | | ''rules'' | ( '''Head''' :- '''Body''' ) | a rewrite rule for processes, explained below | Both periods and commas can be used to sequence the elements of a multiset. An LMNtal program is written as an LMNtal process. Links are written using alphanumeric tokens starting with capital letters (e.g. X, Res.) (e.g., X, Res). The other alpha-numeric tokens are treated as names (e.g. foo, 123.) Additionally, quoted symbols can also be used for atom names (e.g. "foo", 'bar'.) (e.g., foo, 123). Quoted symbols can also be used for atom names (e.g., "foo", 'bar', [:baz:]). **Term Abbreviation Scheme All links in LMNtal have at most two occurrences. This enables us to abbreviate '''p'''('''s'''&size(10){1};, ..., '''s'''&size(10){'''m'''};), '''q'''('''t'''&size(10){1};, ..., '''t'''&size(10){'''n'''};) to '''p'''('''s'''&size(10){1};, ..., '''s'''&size(10){'''k'''-1};, '''q'''('''t'''&size(10){1};, ..., '''t'''&size(10){'''n'''-1};), '''s'''&size(10){'''k'''+1};, ..., '''s'''&size(10){'''m'''};) ; // &math(p(s_1,\ldots,s_m), q(t_1,\ldots,t_n)); to // &math(p(s_1,\ldots,s_{k-1},q(t_1,\ldots,t_{n-1}), s_{k+1},\ldots,s_m)); if '''t'''&size(10){'''n'''}; and '''s'''&size(10){'''k'''}; are the same '''link'''. &math(p(s_1,\ldots,s_m), q(t_1,\ldots,t_n)); to &math(p(s_1,\ldots,s_{k-1},q(t_1,\ldots,t_{n-1}), s_{k+1},\ldots,s_m)); if &math(t_{n}); and &math(s_{k}); are the same '''link'''. For example, c(1,c(2,n),L0) is an abbreviated form of c(A,L1,L0),c(B,L2,L1),n(L2),1(A),2(B). c(1,c(2,n),L0) can be written also as L0=c(1,c(2,n)) . For an atom name '''p''' and a membrane, '''p'''(..., {...}, ...) stands for a molecule '''p'''(..., X, ...), {+X, ...} . ***List Notation The Prolog list syntax is available. List constructor atoms have three arguments and the name '.' . X=[A,B|Rest], Rest=[] and X=[A,B] are abbreviated forms of '.'(A,Tmp,Rest), '.'(B,Rest,Tmp), '[]'(Rest). For some reason, the process [A,B|Rest] is parsed as '.'(A,Tmp), '.'(B,Rest,Tmp). These two atoms have different arities. **Connector Atoms Binary atoms with the name = of the form X=Y are called ''connector atoms''. Connector atoms state that the two links in the arguments are identical (in the sense of structural equivalence. Another instance of structural equivalence is the reordering of multiset elements.) For example, ( p(A,X,C),X=B ) is always equivalent to p(A,B,C), as well as to ( p(A,B,X),C=X ), and, finally, to C=p(A,B). The typical usage of connector atoms can be found in the following example: ( append([],Y,Res) :- Res=Y ), ( Res=append([],Y) :- Res=Y ), ( Res=append([A|X],Y) :- Res=[A|append(X,Y)] ) **Rules The basic syntax of a rule is: ( '''Head''' :- '''Body''' ). The enclosing parentheses can be omitted if periods are used to delimit 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 '''Guard''' part will be explained later in [[a separate section>Guards]]. ***Process Templates A process template is a multiset of the following: +''atoms'' --- &math(p(X_{1}, \ldots ,X_{n})); --- same as in a process, +''cells'' --- { '''Template''' } or { '''Template''' }/ --- a process template enclosed with a membrane, +''rules'' --- ( '''Head''' :- '''Guard''' | '''Body''' ) --- allowed only in a Body, +''process contexts'' --- $p or &math(\$p[X_1,\ldots,X_n]); or &math(\$p[X_1,\ldots,X_n|\mathrm{*}X]); --- matches with a multiset of atoms and cells, +''rule contexts'' --- &math(@p); --- matches with a multiset of rules. | ''atoms'' | '''p'''('''X'''&size(10){1};, ..., '''X'''&size(10){'''n'''};) | same as in a process | | ''cells'' | { '''Template''' } or { '''Template''' }/ | a process template enclosed with a membrane | | ''rules'' | ( '''Head''' :- '''Body''' ) | allowed only in a Body | | ''process contexts'' | $p or $'''p'''['''X'''&size(10){1};, ..., '''X'''&size(10){'''n'''};] or $'''p'''['''X'''&size(10){1};, ..., '''X'''&size(10){'''n'''};|*'''X'''] | matches with a multiset of atoms and cells | | ''rule contexts'' | @'''p''' | matches with a multiset of rules | A membrane template with / (the stable flag) can only match with a ''stable'' cell (i.e., a cell containing no applicable rules). The link arguments of a process context specify the set of free links that must exist in the matched process. The &math(\mathrm{*}X); represents an arbitrary number of extra free links. We cam abbreviate &math(p(s_1,\ldots,s_{k-1},X, s_{k+1},\ldots,s_m),\$q[X]); to &math(p(s_1,\ldots,s_{k-1},\$q,s_{k+1},\ldots,s_m));. We can abbreviate '''p'''('''s'''&size(10){1};, ..., '''s'''&size(10){'''k'''-1};, '''X''', '''s'''&size(10){'''k'''+1};, ..., '''s'''&size(10){'''m'''};), $'''q'''['''X'''] to '''p'''('''s'''&size(10){1};, ..., '''s'''&size(10){'''k'''-1};, $'''q''', '''s'''&size(10){'''k'''+1};, ..., '''s'''&size(10){'''m'''};), //&math(p(s_1,\ldots,s_{k-1},X, s_{k+1},\ldots,s_m),\$q[X]); to //&math(p(s_1,\ldots,s_{k-1},\$q,s_{k+1},\ldots,s_m));. //Note that the current implementation does not fully // support process contexts with explicit arguments. //* Any Comments? //-the expressions need to be fixed. -- [[nakajima]] &new{2004-02-01 // (Sun) 21:43:32}; //-fixed the expression using math.inc.php -- [[nakajima]] &new{2004-02-02 // (Mon) 21:33:38}; //-fixed math.inc.php. no warnings any more. -- [[nakajima]] &new{2004-02-10 // (Tue) 12:35:06}; #comment