Appunti di Logica Ternaria Risultati Simulazione Operatori ... · Appunti di Logica Ternaria...

Preview:

Citation preview

Appunti di Logica Ternaria

Risultati Simulazione Operatori Monadici con ScratchGiuseppe Talarico 23 Settembre 2014

Nella logica ternaria ( da alcuni indicata come Toolean Logic per assonanza conBoolean Logic), indicando con a la variabile indipendente di input e usando il sistemaeptaventesimale bilanciato per la variabile i di enumerazione, le 27 funzioni monadiche( un solo ingresso) c=fi(a) sono:

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

In questo documento, si riportano le 27 simulazioni, una per ogni funzione monadicaternaria, ottenute attraverso la realizzazione di alcuni script in Scratch 2.0. Tutte lefunzioni monadiche vengono generate attraverso un MUX ternario 3:1 come quello quiqppresso indicato:

La tabella di verità del MUX ternario è:

S=a O=c1 I-0 I01 I+

giuseppetalarico.wordpress.com 1/30

dove “a” è l'input e “c” è l'output della funzione monadica che si vuole generare.Sull'ingresso di selezione S, che costituisce l'input dell'operatore monadico, vienesimulato un segnale ternario periodico con sei intervalli temporali come nella figuraseguente:

semplicemente impostando i sei interruttori ternari di un ipotetico generatore disegnale ternario:

I tre input ternari del MUX, relativi ad una delle 27 colonne della tabella precedente,che permettono di generare la tabella di verità dell'operatore monadico, vengonosimulati con tre switches ternari, le cui tre possibili configurazioni sono:

L'output della simulazione viene visualizzato su uno pseudo-schermo di oscilloscopio.Inoltre, viene visualizzato, in decimale con segno, l'indice di enumerazione dellafunzione ternaria monadica:

La presenza dello spunto rosso su alcuni simboli sta ad indicare una miaproposta per il simbolo della funzione in questione, seguendo lo simbologiaintrodotta dal prof. Douglas W. Jones dell' università dell'IOWA(https://www.cs.u iowa .edu/~ jones /) nei suoi documenti pubblicati sull'argomento e daiquali questa mia realizzazione ha preso spunto. Le formule evidenziate in verde sonoda considerare come una mia proposta. Infine, a quattro funzioni, quelle di indice -10,-3, 3 e 10 non è stato possibile attribuire un nome ed esse possono essere ottenutetramite la cascata di altre due funzioni monadiche tra quelle introdotte.

giuseppetalarico.wordpress.com 2/30

1) Contradiction

c=fD(a) = 1

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

L'uscita è sempre False indipendentemente dal valore di ingresso a. E' evidente cheuna tale funzione non ha alcun utilizzo pratico.

giuseppetalarico.wordpress.com 3/30

2) Earthed Negative Inverter

c=fC(a) = NEG(ShiftUP(a))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

Nota: per la definizione del simbolo c=ShiftUP(a) si veda la funzione di indice 12 ( C ineptaventesimale)

giuseppetalarico.wordpress.com 4/30

3) Negative Threshold Inverter, N-Decoder

c=fB(a) = ( a = 1 )

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

Il taglietto sulla linea di uscita sta ad indicare che il segnale può assumere due solivalori ( False,True) ed è quindi binario.

giuseppetalarico.wordpress.com 5/30

4) No Name Operator

c=fA(a) = ShiftDown(( a = 0))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

Nota: per il simbolo Simbolo relativo allo ShiftDown, da me proposto, si veda la funzione diindice -4.

giuseppetalarico.wordpress.com 6/30

5) Inverted ClampUP

c=f9(a) = NEG(ClampUP( a))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

Il simbolo è ottenuto a partire dall' operatore diadico TNOR ( Ternary NOR ).

giuseppetalarico.wordpress.com 7/30

6) Inverter, STI, NEG,INV,Swap0

c=f8(a) = NEG( a)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 8/30

7) UnKnown-Decoder, Z-Decoder

c=f7(a) = ( a=0 )

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 9/30

8) Increment

c=f6(a) = INC( a )

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 10/30

9) PTI, Inverted P-Decoder

c=f5(a) = NEG(( a=+ ))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 11/30

10) Shift Down

c=f4(a) = ShiftDown(a)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 12/30

11) No Name Operator

c=f3(a) = NEG(ShiftUP((a=0)))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 13/30

12) Decrement

c=f2(a) = DEC(a)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 14/30

13) Clamp Down

c=f1(a) = ClampDown(a)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 15/30

14) Unknown

c=f0(a) =0

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

L'uscita è sempre Unknown indipendentemente dal valore di ingresso a. E' evidenteche una tale funzione non ha alcun utilizzo pratico.

giuseppetalarico.wordpress.com 16/30

15) Inverted ClampDown

c=f1(a) = NEG(ClampDown(a))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 17/30

16) Let N, Swap-

c=f2(a) = NEG(DEC(a))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 18/30

17) No Name Operator

c=f3(a) = ShiftUP((a=0))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 19/30

18) Earthed Positive Inverter

c=f4(a) = NEG(ShiftDown(a))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 20/30

19) P-Decoder

c=f5(a) = (a=1)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 21/30

20) Let P, Swap+

c=f6(a) =NEG(INC(a))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 22/30

21) Inverted Z-Decoder

c=f7(a) = NEG ((a=0))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 23/30

22) Buffer

c=f8(a) = a

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

In uscita si ha la replica del segnale di ingresso: c=a.

giuseppetalarico.wordpress.com 24/30

23) Clamp Up

c=f9(a) = ClampUP (a)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 25/30

24) No Name Operator

c=fA(a) = NEG(ShiftDown((a=0)))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 26/30

25) Inverted N-Decoder

c=fB(a) =NEG((a=1))

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 27/30

26) Shift UP

c=fC(a) = ShiftUP(a)

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

giuseppetalarico.wordpress.com 28/30

27) Tautology

c=fD(a) =1

a |i= D C B A 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 A B C D

1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1

0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

L'uscita è sempre True indipendentemente dal valore di ingresso a. E' evidente cheuna tale funzione non ha alcun utilizzo pratico.

giuseppetalarico.wordpress.com 29/30

Appendice: Primo Esperimento in Logica Ternaria

La figura mostra il segnali di input e di output del primo Inverter Ternario realizzatonei laboratori della sezione Informatica e Telecomunicazioni dell'ITST “E. Scalfaro”Catanzaro nell'a.s. 2013-2014 mediante la realizzazione di:

• un Ternary MUX che fa uso di due DG403;• un generatore sequenziale di trit basato su Arduino visibile nella figura

seguente.

giuseppetalarico.wordpress.com 30/30

Recommended