% %
%wnt simplified architecture
-language(spifcp).

public(beta(0.01)).
public(wnt(1.0)).
public(phos(0.2)).
public(dephos(0.1)).
public(asyn(0.012)).
public(adeg(0.00167)).
public(bsyn(0.423)).
public(bdeg(0.001)).

System(N1, N2, N3) ::= << 
	CREATE_A(N1) | CREATE_B(N2) | CREATE_R(N3) | Syn | Clock .
CREATE_A(N) ::= {N=<0}, 0 ; {N>0}, {N--} | Axin | self .
CREATE_B(N) ::= {N=<0}, 0 ; {N>0}, {N--} | Beta | self .
CREATE_R(N) ::= {N=<0}, 0 ; {N>0}, {N--} | Rec  | self >> .

Rec ::= << wrel(0.008), internal(0.008) . 
	wnt ! {wrel, internal}, RecBound . 	
RecBound ::= wrel ? [], Rec ; internal ? [], Rec >> .

Axin ::= << wrel(0.008), internal(0.008), rel(0.1), deg(5.0), rem(infinite), remB(infinite) . 
	phos ! [], AxinP ;
	adeg ! [], true  .
AxinP ::= beta ? {rel, deg, rem, remB}, AxinP_BBound ;
	wnt ? {wrel, internal}, AxinP_Wnt ;
	dephos ! [], Axin ;
	adeg ! [], true .
AxinP_BBound ::= rel ! [], AxinP ;
	deg ! [], AxinP ;
	remB ? [], AxinP ;
	adeg ! [], rem ! [], true .
AxinP_Wnt ::= internal ! [], true ;
	wrel ! [], AxinP >> .

Beta ::= << rel(0.1), deg(5.0), rem(infinite), remB(infinite).
	beta ! {rel, deg, rem, remB}, BetaA ;
	asyn ! [], (Beta | Axin) ;
	bdeg ! [], true .
BetaA ::= rel ? [], Beta ;
	rem ? [], Beta ;
	deg ? [], true ;
	bdeg ! [], true >> . 

Syn ::= bsyn ! [], (Syn | Beta) .

Clock ::= phos ? [], Clock ;
	dephos ? [], Clock ;
	asyn ? [], Clock ;
	adeg ? [], Clock ;
	bsyn ? [], Clock ;
	bdeg ? [], Clock .

%
%