Torino, 22 novembre 2000

Automi cellulari invertibili

Autore: Pierre Blanc

 

 

 

 

 

 

Gli automi cellulari nascono dalle ricerche di von Neumann e Ulam, poi sviluppate da Wolfram.

La proprietà fondamentale degli automi cellulari è che la trasformazione globale associata può sempre essere localizzata, e questo è utile dal punto di vista computazionale: per ottenere un risultato veloce con il calcolatore è sufficiente far eseguire in parallelo le trasformazioni locali.

Le applicazioni più frequenti sono per la crittografia, ma gli automi cellulari si usano spesso anche in simulazioni di gas. E’ noto dalla termodinamica che le trasformazioni che entrano in gioco sono microscopicamente reversibili ma macroscopicamente irreversibili. Per simulare il comportamento di un gas con gli automi cellulari bisogna trovare un’appropriata trasformazione reversibile e applicarla ripetutamente alla griglia dell’automa.

In questa sede verranno analizzate le trasformazioni invertibili di automa cellulare, che formano un gruppo, limitandosi agli automi 1-dimensionali di lunghezza finita.

Le caratteristiche fondamentali degli automi cellulari sono: località, omogeneità, parallelismo, tempo discreto. Le unità fondamentali degli automi sono le celle (o cellule).

Località: data una cella con un intorno contenente altre celle, questa scambia informazioni solo con le celle dell’intorno.

Omogeneità: la cella si evolve con la legge di transizione locale f nel tempo

t=0,1,2,..., Î N

Al tempo t, la cella C è in uno stato C(t) e passa allo stato C(t+1)=, dove sono le celle dell’intorno di C.

C’è una struttura topologica data dagli intorni. Chiamo I la funzione d’intorno.

L’insieme degli stati è A con | A |=q. A

La funzione di transizione locale f è tale che dove I(C)=

Parallelismo: passando da t a t+1 si aggiornano simultaneamente gli stati di tutte le celle.

Una legge locale è una funzione tra l’insieme di tutte le configurazioni locali e A. Esistono leggi locali.

ES.: Automi unidimensionali finiti. Ho un insieme di n celle:

Definiamo un intorno. Il più semplice è quello di raggio 1. Se numeriamo le celle ( è la cella i-esima) allora l’intorno di raggio 1 di è:

Quindi la legge di transizione locale ha solo 3 argomenti:

Se abbiamo gli automi binari.

In questo caso le configurazioni locali, e quinidi i possibili intorni, sono

Una legge assegna il valore della cella al tempo t+1 a seconda del suo intorno. Per esempio (legge 90 di Wolfram):

Gli intorni, scritti come nella tabella, possono essere visti come numeri in base q=2 tra 0 e =7. A loro volta le leggi vengono numerate tra 0 e =255 con la formula:

In questo caso 90=64+16+8+2

 

Esempio:

Automa unidimensionale con 2 colori di lunghezza n

Intorno di raggio 1

 

Evoluzione con legge 90 di Wolfram:

 

 

Wolfram ha classificato quattro tipi di evoluzione per automi cellulari finiti:

1) l’automa arriva sempre ad uno stato stazionario a partire da qualsiasi condizione iniziale.

2) l’automa giunge ad un ciclo, che può essere diverso a seconda della condizione iniziale.

3) l’automa è caotico. Per qualsiasi condizione iniziale arriva a ripetere stati dove certe condizioni appaiono distribuite a caso.

4) l’automa è sensibile alle condizioni iniziali e giunge a situazioni che presentano un alto grado di ordine e al tempo stesso complessità.

Sia K un anello. Dato un automa cellulare (CA) di lunghezza n con coefficienti in K consideriamo il gruppo con s biettiva. Sono leggi di transizione globali di automa cellulare solo quelle indotte da una legge locale. Consideriamo il gruppo delle leggi globali di CA invertibili . Il nostro scopo è determinare .

Sia T il morfismo

Si ha ; inoltre le T(g) sono biezioni. T(G) è quindi una rappresentazione permutazionale di G.

. Si dice anche che T è fedele. Studiamo in dettaglio l’azione T.

1) L’orbita di è

2) Lo stabilizzatore di è

3) Il fissato da è

PROP.:

ab

PROP.: è una relazione di equivalenza.

COROLL.: Poiché O(a) è la classe di equivalenza [a] , l’insieme delle orbite è una partizione di X.

PROP.: |O(a)|=[G:Stab(a)]

PROP.: T è un’azione di H su A

Dim.:

PROP.: Nell’azione di ci sono t(n) orbite, dove t(n) è il numero dei divisori di n.

Dim.: Dato d|n , O(d)=. , ma (ha,n)=(a,n), quindi (a,n)=(b,n).

 

 

 

 

LEMMA DI BURNSIDE: Sia T un’azione di G su X. Allora il numero delle orbite=

Dim.:

La tabella è stata costruita in modo che si trovi 1 se T(g)(a)=a, altrimenti si trova 0. Sommando gli elementi della colonna corrispondente ad a si ottiene |Stab(a)|, mentre sommando gli elementi della riga corrispondente a g si ottiene |Fix(g)|.

Si ha:

N=

dove N è il numero di 1 nella tabella.

Usiamo la proprietà |O(a)|=[G:Stab(a)]= , segue

quindi

Ma il primo termine è proprio il numero delle orbite, quindi si ottiene l’enunciato.

TEOR. (KESAVA-MENON):

Dim.: Usiamo il lemma di Burnside: t(n)= con H=. ||=. . ma congruenza lineare modulo n che ha (h-1, n) soluzioni. Quindi |Fix(h)|=(h-1,n), sostituendo nel lemma di Burnside si ottiene l’enunciato.

 

LEMMA:

Dim.: E’ la formula del binomio per =0

 

DEF.: Funzione m di Moebius.

m (1)=1,

n>1, ,

PROP.:

TEOR.: Legge di inversione di Moebius.

Date f,g definite sui naturali positivi

Dim.: Þ ) Utilizziamo la seguente osservazione:

OSS.:

Dim.: Þ )

Ü ) Il viceversa si ottiene scambiando e con d.

.
Ora, per n>1 è sempre , quindi è sempre
=0, tranne che nel caso cioè m=e, dove vale 1. Dunque rimane solo il termine

 

Studiamo l’azione dello shift sugli anelli con n elementi.

|<r >|=n, <r >

Vogliamo calcolare quante orbite ci sono con un certo numero di elementi:

Consideriamo l’azione di . Allora l’orbita

Se ho 2 colori si ritrovano gli automi cellulari binari.

Posto si può verificare che |O(t )|½ n. Infatti, data una azione T di G su X:

, |O(x)|=[G:stab(x)]=Þ |O(x)|ô |G|=n (infatti G=).

Inoltre dato d | n, allora c’è sempre almeno un’orbita che contiene d collane: sia ; (10...010...0......10....0) d blocchi lunghi n/d. Se faccio uno shift ho che tutti i blocchi si trasformano nello stesso modo e dopo d passi si torna al punto di partenza. In questa orbita ci sono d collane.

DEF.: :=numero di orbite con d elementi

Allora ogni collana è in una sola orbita (partizione).

Si consideri .

Usando la formula di inversione di Moebius dove g(m)= e f(n)=nw (n):

Il numero totale delle orbite è

 

Le trasformazioni globali appartengono all’insieme

mentre le trasformazioni locali all’insieme

Consideriamo intorni completi di lunghezza n. Le leggi vanno estese a questo caso con la relazione

num. legge nuovo=

I è l’operatore di intorno; data la configurazione

I()=, (a è lo shift)

Una F globale F: è una legge di automa cellulare se : cioè (*)

TEOR.:Una F è legge di CA (commuta con l’operatore di shift)

Dim.: Þ ) Per ipotesi esiste una funzione locale f tale che vale (*). Allora =

Ü ) La F si può sempre scrivere così dove le sono le trasformazioni locali

Prendo

e in genere

E’ vera la tesi con .

 

PROP.:CA(n) è chiuso rispetto al composto.

PROP.:

(CA(n),° ) è un monoide. gruppo degli invertibili.

COROLL.: se F (immediato)

OSS.: F manda un’orbita di lunghezza d in un’altra di lunghezza d Þ E’ una permutazione sulle orbite di lunghezza d.

 

Consideriamo un automa cellulare con q simboli, di lunghezza n. Ci sono in tutto configurazioni globali. L’insieme dei simboli in è . Indichiamo con a il contenuto di una cella, con a preso tra i q simboli. Una configurazione globale si può rappresentare con un numero tra 0 e -1, scritto in base :

Studiamo ora l’azione di <q> su .

L’effetto dello shift corrisponde all’effetto della moltiplicazione per x in .

Infatti:

Il risultato è il numero che corrisponde alla configurazione , cioè esattamente la configurazione di partenza shiftata di 1.

Le orbite dello shift nell’insieme X delle configurazioni globali con q simboli e lunghezza n sono i laterali ciclotomici (più uno).

OSS.: In X queste orbite sono distinte: (00...0)® 0

(11...1)®

Invece 0= mod , quindi due orbite distinte corrispondono allo stesso elemento in .

Þ num. orbite = num. laterali +1

 

Studiamo ora l’azione di <q> su .

Se agisce su Þ n° orbite=

Applicandolo abbiamo <q>= Þ n° di orbite dello shift=

Sia ora il gruppo delle trasformazioni globali invertibili con q simboli e lunghezza n.

FÎ : 1) F permuta tra loro le orbite della stessa lunghezza d (d | n)

2) F commuta con lo shift (a) (si deve determinare l’immagine tramite F di un elemento di un orbita per ogni orbita)

Una matrice P di permutazione è una matrice quadrata a coefficienti in che contiene uno e un solo 1 per ogni riga e per ogni colonna: P rappresenta la permutazione che manda i in j dove i è la i-esima riga e j la j-esima colonna tali che P(i,j)=1.

con il prodotto di matrici è isomorfo a .

Per definire devo decidere una permutazione tra le orbite e per ogni orbita devo scegliere l’immagine del rappresentante. La matrice P è rappresentata da sottomatrici circolanti e diagonali a blocchi.

: sono fondamentali i divisori d|n. Abbiamo w (d) orbite di lunghezza d. Se FÎ Þ F è una permutazione delle configurazioni globali che si rappresentano con numeri interi tra 0 e -1 scritti in base q. Ogni orbita è rappresentata dal suo minimo. Gli elementi dell’orbita O(s) sono nell’ordine s=min O(s), qs , s , ..., s (|O(s)|=d).

Le orbite sono ordinate secondo la grandezza del rappresentante (tra quelle con la stessa lunghezza). F è rappresentata da una matrice permutazionale dove le colonne e le righe seguono l’ordine detto. I blocchi delle orbite di lunghezza d sono ordinati secondo d crescente.

I blocchi delle orbite di lunghezza d formano una sottomatrice C (dw (d)xdw (d)).

C ha una "forma" che è una matrice di permutazione w (d)xw (d), cioè al posto i,j c’è 1 se la i-esima orbita va nella j-esima.

Ogni orbita ha una sottomatrice A di F circolante corrispondente al posto i,j della forma di C. A è dxd e si rappresenta con un , (shift di k posti).

Quindi C è determinata da una forma (individua una permutazione tra le orbite di lunghezza d) e un elenco di shift: ci sono w (d) orbite e per ciascuna va specificata la matrice circolante.

 

Chiamo (d|n) il gruppo formato da tutte le componenti dw (d)xdw (d)

C=

dove t (n) è il numero dei divisori di n.

Per rappresentare C con forma data basta sostituire gli 1 con i relativi dove gli si moltiplicano così: =

Da tutto questo segue che

Orbite:

 

ES.: Caso binario, n=6. d=1,2,3,6

Il numero di orbite di lunghezza d è rispettivamente:

w (1)=2, w (2)=1, w (3)=2, w (6)=9

Metto in ordine i rappresentanti di ogni orbita:

 

 

 

 

d=1

Ho solo 2 possibilità (permutazioni delle 2 orbite):

d=2

O(21)=

Ho un orbita sola (quindi un’unica permutazione) ma 2 forme possibili:

 

d=3

O(9)=

O(27)=

Ho 2 permutazioni e 9 forme possibili, per un totale di 18 elementi.

Ingrandiamo la forma nel caso di :

Consideriamo : ci sono w (d) orbite di lunghezza d. E’ utile trovare una C | per C= dw (d). Se prendo C=((12... w (d)),(1,1,...,x)) che manda il primo elemento di un’orbita nel primo della successiva, tranne per l’ultima orbita, in cui il primo elemento viene mandato nel secondo della prima orbita, e così via, si produce in un elemento di periodo mcm

 

Algoritmo per calcolare un’evoluzione di periodo massimo

q=2, n=6

c è il numero della configurazione

è la configurazione iniziale inserita dall’utente

Attraverso i rappresentanti f[i] si individua la permutazione tra le orbite dello shift:

f[0]® f[1] ® ...® f[8] ® f[9]

dove f[9] è il secondo elemento della prima orbita.

k=0, r=0, i=0

c=

do

{

stampa configurazione (c)

do

{

while (k<9)

{

if (c=f[k]) r=f[k+1]

k=k+1

}

i=i+1

k=0

}

while (r=0)

c=r

r=0

i=0

}

while ()

 

Output

1 1 000001

2 3 000011

3 5 000101

4 7 000111

5 11 001011

6 13 001101

7 15 001111

8 23 010111

9 31 011111

10 2 000010

11 6 000110

12 10 001010

13 14 001110

14 22 010110

15 26 011010

16 30 011110

17 46 101110

18 62 111110

19 4 000100

20 12 001100

21 20 010100

22 28 011100

23 44 101100

24 52 110100

25 60 111100

26 29 011101

27 61 111101

28 8 001000

29 24 011000

30 40 101000

31 56 111000

32 25 011001

33 41 101001

34 57 111001

35 58 111010

36 59 111011

37 16 010000

38 48 110000

39 17 010001

40 49 110001

41 50 110010

42 19 010011

43 51 110011

44 53 110101

45 55 110111

46 32 100000

47 33 100001

48 34 100010

49 35 100011

50 37 100101

51 38 100110

52 39 100111

53 43 101011

54 47 101111

55 1 000001

 

Listato C

#include <stdio.h>

#include <math.h>

int pot(int , int );

void celle(int , int *);

void main (void)

{

int f[10],c0,c,i=0,a[6],r=0,k=0,p=1;

f[0]=1;f[1]=3;f[2]=5;f[3]=7;f[4]=11;f[5]=13;f[6]=15;f[7]=23;f[8]=31;f[9]=2;

printf("Inserire configurazione iniziale ");

scanf("%d",&c);

c0=c;

do

{

celle(c,a);

printf("%d %d %d%d%d%d%d%d\n",p,c,a[5],a[4],a[3],a[2],a[1],a[0]);

do {

while(k<9)

{

if (c==((f[k]*pot(2,i))%63))

r=((f[k+1]*pot(2,i))%63);

k++;

};

i++;k=0;

} while (r==0) ;

c=r; r=0;i=0;p++;

// if (p%3==0) printf("\n");

}

while (c!=c0);

}

int pot(int x, int i)

{

int k,r=1;

for (k=0;k<i;k++)

{

r=r*x;

}

return (r);

}

void celle(int c, int *a)

{

int j;

for(j=0;j<6;j++)

{

if (c%2==0)

{

a[j]=0;

} else a[j]=1;

c=c/2;

}

}

 




Home di Teutoburgo


Copyright Pierre Blanc 2000