HAM-CYCLE - P systems with Symport/Antiport Rules and Membrane Division Rules¶
Description¶
Well-known problem SAT, solved with P systems with Symport/Antiport Rules and Membrane Separation Rules.
Model in P-Lingua¶
The corresponding P-Lingua file is presented below. This is an ad-hoc version of the model, to run with pLinguaCore or the general application of MeCoSim, applicable to the formula hard-coded in the model file (.pli):
@model<infEnv_symport_antiport>
def main()
{
let n = 3; /* nodes */
let p = 3; /* edges */
call module_init_conf(n);
call module_rules(n,p);
call module_input_instance();
}
def module_init_conf(n)
{
@mu = [[ []'2 []'3 []'4 []'5 []'6 []'7 []'8 []'9 []'10 []'11
[]'a{1,1} []'a{1,2} []'a{1,3} []'a{2,1} []'a{2,2} []'a{2,3}
[]'e{1,1,1} []'e{1,1,2} []'e{1,1,3} []'e{1,2,1} []'e{1,2,2}
[]'e{1,2,3} []'e{1,3,1} []'e{1,3,2} []'e{1,3,3}
[]'e{2,1,1} []'e{2,1,2} []'e{2,1,3} []'e{2,2,1} []'e{2,2,2}
[]'e{2,2,3} []'e{2,3,1} []'e{2,3,2} []'e{2,3,3}
[]'e{3,1,1} []'e{3,1,2} []'e{3,1,3} []'e{3,2,1} []'e{3,2,2}
[]'e{3,2,3} []'e{3,3,1} []'e{3,3,2} []'e{3,3,3}
]'1]'environment;
@msInfEnv += alpha{r} : 1 <= r <= n^3 + 6;
@ms(1) += alpha{0};
@ms(1) += beta{r} : 1 <= r <= n^3 + 7;
@ms(1) += bp{r},bpp{r},bppp{r} : 1 <= r <= n^3 - 1;
@ms(1) += cp{r},cpp{r},cppp{r},cpppp{r} : 1 <= r <= n^3 - 1;
@ms(2) += a*n,b,c;
@ms(3) += bp{n^3};
@ms(4) += bpp{n^3};
@ms(5) += bppp{n^3};
@ms(6) += cp{n^3};
@ms(7) += cpp{n^3};
@ms(8) += cppp{n^3};
@ms(9) += cpppp{n^3};
@ms(10) += yes;
@ms(11) += no,beta{0};
@ms(a{1,j}) = ap{n^3} : 1 <= j <= n;
@ms(a{2,j}) = app{n^3} : 1 <= j <= n;
@ms(e{i,j,k}) = epp{i,j,k,n^3} : 1<=i<=n, 1<=j<=n, 1<=k<=n;
}
def module_rules(n,p)
{
/* R1 */
alpha{r+1}[alpha{r}]'1 --> alpha{r}[alpha{r+1}]'1 : 0 <= r <= n^3+5;
[yes]'1 --> yes[]'1;
[no,alpha{n^3+6}]'1 --> no,alpha{n^3+6}[]'1;
/* R2 */
[e{i,j,k}]'2 --> [ep{i,j,k}]'2 [sharp]'2 :
1 <= i <= n, 1 <= j <= n, 1 <= k <= n;
ap[a]'2 --> a[ap]'2;
app[ap]'2 --> ap[app]'2;
bp[b]'2 --> b[bp]'2;
bpp[bp]'2 --> bp[bpp]'2;
bppp[bpp]'2 --> bpp[bppp]'2;
cp[c]'2 --> c[cp]'2;
cpp[cp]'2 --> cp[cpp]'2;
cppp[cpp]'2 --> cpp[cppp]'2;
cpppp[cppp]'2 --> cppp[cpppp]'2;
[app,bppp]'2 --> app,bppp[]'2;
[bppp,cpppp]'2 --> bppp,cpppp[]'2;
epp{i,j,k}[ep{i,j,k}]'2 --> ep{i,j,k}[epp{i,j,k}]'2 :
1 <= i <= n, 1 <= ip <= n, 1 <= j <= n, 1 <= jp <= n,
1 <= k <= n, 1 <= kp <= n;
[epp{i,j,k},epp{i,jp,kp}]'2 --> epp{i,j,k},epp{i,jp,kp}[]'2 :
1 <= i <= n, 1 <= ip <= n, 1 <= j <= n, 1 <= jp <= n,
1 <= k <= n, 1 <= kp <= n;
[epp{i,j,k},epp{ip,j,kp}]'2 --> epp{i,j,k},epp{ip,j,kp}[]'2 :
1 <= i <= n, 1 <= ip <= n, 1 <= j <= n, 1 <= jp <= n,
1 <= k <= n, 1 <= kp <= n;
[epp{i,j,k},epp{ip,jp,k+1}]'2 --> epp{i,j,k},epp{ip,jp,k+1}[]'2 :
1 <= i <= n, j <> ip, 1 <= ip <= n, 1 <= j <= n, 1 <= jp <= n,
1 <= k <= n, 1 <= kp <= n;
[epp{i,j,k},epp{ip,jp,k}]'2 --> epp{i,j,k},epp{ip,jp,k}[]'2 :
1 <= i <= n, 1 <= ip <= n, 1 <= j <= n, 1 <= jp <= n,
1 <= k <= n, 1 <= kp <= n;
[app,epp{i,j,k}]'2 --> app,epp{i,j,k}[]'2 : 1 <= i <= n,
1 <= j <= n, 1 <= k <= n;
/* R3 */
bp{r-1}[bp{r}]'3 --> bp{r}[bp{r-1}]'3 : n*p + 1 <= r <= n^3;
[bp{r}]'3 --> [bp{r-1}]'3 [bp{r-1}]'3 : 2 <= r <= n*p;
[bp{1}]'3 --> [bp]'3 [bp]'3;
[bp]'3 --> bp[]'3;
/* R4 */
bpp{r-1}[bpp{r}]'4 --> bpp{r}[bpp{r-1}]'4 : n*p + 1 <= r <= n^3;
[bpp{r}]'4 --> [bpp{r-1}]'4 [bpp{r-1}]'4 : 2 <= r <= n*p;
[bpp{1}]'4 --> [bpp]'4 [bpp]'4;
[bpp]'4 --> bpp[]'4;
/* R5 */
bppp{r-1}[bppp{r}]'5 --> bppp{r}[bppp{r-1}]'5 : n*p + 1 <= r <= n^3;
[bppp{r}]'5 --> [bppp{r-1}]'5 [bppp{r-1}]'5 : 2 <= r <= n*p;
[bppp{1}]'5 --> [bppp]'5 [bppp]'5;
[bppp]'5 --> bppp[]'5;
/* R6 */
cp{r-1}[cp{r}]'6 --> cp{r}[cp{r-1}]'6 : n*p + 1 <= r <= n^3;
[cp{r}]'6 --> [cp{r-1}]'6 [cp{r-1}]'6 : 2 <= r <= n*p;
[cp{1}]'6 --> [cp]'6 [cp]'6;
[cp]'6 --> cp[]'6;
/* R7 */
cpp{r-1}[cpp{r}]'7 --> cpp{r}[cpp{r-1}]'7 : n*p + 1 <= r <= n^3;
[cpp{r}]'7 --> [cpp{r-1}]'7 [cpp{r-1}]'7 : 2 <= r <= n*p;
[cpp{1}]'7 --> [cpp]'7 [cpp]'7;
[cpp]'7 --> cpp[]'7;
/* R8 */
cppp{r-1}[cppp{r}]'8 --> cppp{r}[cppp{r-1}]'8 : n*p + 1 <= r <= n^3;
[cppp{r}]'8 --> [cppp{r-1}]'8 [cppp{r-1}]'8 : 2 <= r <= n*p;
[cppp{1}]'8 --> [cppp]'8 [cppp]'8;
[cppp]'8 --> cppp[]'8;
/* R9 */
cpppp{r-1}[cpppp{r}]'9 --> cpppp{r}[cpppp{r-1}]'9 : n*p + 1 <= r <= n^3;
[cpppp{r}]'9 --> [cpppp{r-1}]'9 [cpppp{r-1}]'9 : 2 <= r <= n*p;
[cpppp{1}]'9 --> [cpppp]'9 [cpppp]'9;
[cpppp]'9 --> cpppp[]'9;
/* R10 */
alpha{n^3+6},cpppp[]'10 --> [alpha{n^3+6},cpppp]'10;
[cpppp,yes]'10 --> cpppp,yes[]'10;
/* R11 */
beta{r+1}[beta{r}]'11 --> beta{r}[beta{r+1}]'11 : 0 <= r <= n^3 + 6;
[beta{n^3+7},no]'11 --> beta{n^3+7},no[]'11;
/* Ra{1,j} : 1 <= j <= n */
[ap{r}]'a{1,j} --> [ap{r-1}]'a{1,j} [ap{r-1}]'a{1,j} : 2 <= r <= n^3, 1 <= j <= n;
[ap{1}]'a{1,j} --> [ap]'a{1,j} [ap]'a{1,j} : 1 <= j <= n;
[ap]'a{1,j} --> ap[]'a{1,j} : 1 <= j <= n;
/* Ra{2,j} : 1 <= j <= n */
[app{r}]'a{2,j} --> [app{r-1}]'a{2,j} [app{r-1}]'a{2,j} : 2 <= r <= n^3, 1 <= j <= n;
[app{1}]'a{2,j} --> [app]'a{2,j} [app]'a{2,j} : 1 <= j <= n;
[app]'a{2,j} --> app[]'a{2,j} : 1 <= j <= n;
/* Re{i,j,k} : 1 <= i,j,k <= n */
[epp{i,j,k,r}]'e{i,j,k} --> [epp{i,j,k,r-1}]'e{i,j,k} [epp{i,j,k,r-1}]'e{i,j,k} :
2 <= r <= n^3, 1 <= i <= n, 1 <= j <= n, 1 <= k <= n;
[epp{i,j,k,1}]'e{i,j,k} --> [epp{i,j,k}]'e{i,j,k} [epp{i,j,k}]'e{i,j,k} :
1 <= i <= n, 1 <= j <= n, 1 <= k <= n;
[epp{i,j,k}]'e{i,j,k} --> epp{i,j,k}[]'e{i,j,k} :
1 <= i <= n, 1 <= j <= n, 1 <= k <= n;
}
def module_input_instance()
{
@ms(2) += e{1,2,1},e{1,2,2},e{1,2,3},e{3,1,1},e{3,1,2},e{3,1,3},e{3,2,1},e{3,2,2},e{3,2,3};
}
Files¶
- The example does not need input data from any user nor speficic interesting outputs, so it can be run from the general app yet available and pre-loaded in MeCoSim.
- Model file, P-Lingua file with the code above.
- As in the case of the app, no scenario file with specific input is needed, so the general dummy scenario file can also be used.