%Processos com canais com comunicações complexas. Apesar de as sincronizações serem simples, o canal chan deverá ter dimensão 1.

\begin{circus}
	\circchannel chan, chan2: \nat \cross \nat \cross \nat
\end{circus}

\begin{circus}
	\circchannel chan3: \nat \cross \{ 0, 3 \}
\end{circus}

\begin{circus}
	\circchannel chan4: \{ 0, 2 \} \cross \{ 0, 3 \}
\end{circus}

\begin{circus}
	\circchannel chan5: \{ 0, 2 \} \cross \nat \cross \{ 0, 3 \}
\end{circus}

%\begin{circus}
%	\circchannel a
%\end{circus}

\begin{circus}
	\circprocess SCC0 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		chan4?x?y
		\then \Skip
\end{circusaction}

\begin{circus}	
	\circend
\end{circus}

\begin{circus}
	\circprocess SCC1 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		chan?x?y.1
		%\then chan.5.6.7 
		\then \Skip
\end{circusaction}

\begin{circus}	
	\circend
\end{circus}

%%RESULTADO DA EXECUÇÃO:

%%(!!V!!)SEM ERROS DE COMPILAÇÃO
%%Quando é colocado como input na GUI a sequencia chan.2.3.1 -> chan.2.3.1, o resultado é:

%%%%%%%%TELA DE CONSOLE%%%%%%%%%%%%%%%%%%%%%%%
%%Barrier 0 synchronized
%%x = 2
%%y = 3
%%Barrier 1 did NOT synchronize. Try another
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{circus}
	\circprocess SCC2 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		chan.3?z?w
		\then \Skip
\end{circusaction}

\begin{circus}	
	\circend
\end{circus}

%%(!!V!!)SEM ERROS DE COMPILAÇÃO
%%Quando é colocado como input na GUI a sequencia chan.2.2.2 -> chan.3.8.1, o resultado é:

%%%%%%%%%%%%%TELA DE CONSOLE%%%%%%%%%%%%%%%
%Barrier 1 did NOT synchronize. Try another
%Barrier 0 synchronized
%z = 8
%w = 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%A comunicação chan.2.2.2 não ocorre inicialmente porque o primeiro campo precisa ser obrigatoriamente 3. Já na segunda, como a comunicação é chan.3.8.1, com 3 no primeiro campo, a sincronização ocorre, com z = 8, e w = 1.

\begin{circus}
	\circprocess SCC3 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		(chan.3?z?w \then \Skip) 
		\extchoice
		(chan2.1?a?b \then \Skip)
\end{circusaction}

%%(!!V!!)SEM ERROS DE COMPILAÇÃO
%%Quando é colocado como input na GUI a sequencia chan.3.6.1 -> chan.3.8.1, o resultado é:

%%%%%%%%%%%TELA DE CONSOLE%%%%%%%%%%%%%%%%%%
%Barrier 0 synchronized
%z = 6
%w = 1
%Barrier 1 did NOT synchronize. Try another
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%Quando é colocado como input na GUI a sequencia chan2.3.1.1 -> chan2.1.8.1, o resultado é:

%%%%%%%%%%%TELA DE CONSOLE%%%%%%%%%%%%%%%%%%
%Barrier 1 did NOT synchronize. Try another
%Barrier 0 synchronized
%a = 8
%b = 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%As duas telas de console exibem resultados esperados, uma vez que chan só sincroniza uma vez, e com uma sequencia de valores cujo primeiro valor seja 3. No caso de chan2, este também sincroniza apenas uma vez, e com valores cujo primeiro é 1.

\begin{circus}
	\circend
\end{circus}

\begin{circus}
	\circprocess SCC4 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		(chan.3?z?w \then \Skip) 
		\intchoice
		(chan2.1?a?b \then \Skip)
\end{circusaction}

\begin{circus}
	\circend
\end{circus}

%%%%%%%%%%%%ERRO: NullPointerException porque só chan3 está sendo enxergado como canal principal de SCC5... Se der tempo, resolver este problema
%%%%%%%%%SCC6 e SingleCC tem problemas similares
\begin{circus}
	\circprocess SCC5 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		((chan.3?z?w \then \Skip)
		\lpar | \lchanset chan, chan2 \rchanset | \rpar
		(chan2.1?a?b \then \Skip))
		\intchoice
		(chan3?d!3 \then \Skip)
\end{circusaction}

\begin{circus}
	\circend
\end{circus}

\begin{circus}
	\circprocess SCC6 \circdef \circbegin
\end{circus}

\begin{circusaction}
	\circspot 
		(chan.3?z?w \then \Skip)
		\extchoice
		(chan2.1?a?b \then \Skip)
		\extchoice
		(chan3?d!3 \then \Skip)
\end{circusaction}

%\begin{circus}
	\circend
%\end{circus}