ALGEBRA E LOGICA (v1.4.2) Iniettività e suriettività: Per dimostrare che una funzione è iniettiva basta provare che se a1 = a2 => f(a1) = f(a2) per ogni valore di a (la cardinalità del codominio è maggiore o uguale di quella del dominio B >= A ) Per dimostrare che è suriettiva basta dimostrare che il numero di elementi del codominio è minore o uguale del dominio B <= A La funzione è biiettiva quando B = A ed è sia suriettiva che iniettiva. Relazioni Una relazione tra insiemi A e B è un sottoinsieme del prodotto cartesiano R c (A x B) Due elementi della relazione si indicano con arb relazione di equivalenza: i. riflessiva se ara ii. simmetrica se arb => bra iii. transitiva arb brc => arc negli esercizi sono abbastanza facili da provare; di solito basta testare le proprietà con tutti gli elementi relazione d ordine: i. riflessiva (come sopra) ii. antisimmetrica arb e bra => b=a iii. transitiva (come sopra) esempio: relazione >= è d ordine perchè a>=a per qualsiasi a in R (riflessiva); a>=b e b>=a => che a=b (antisimmetrica); a>=b e b>=c implica che a>=c (transitiva) Diagramma di Hasse a breve, appena capisco come disegnarlo... comunque si fa mettendo dal basso verso l alto gli elementi in modo che quello in basso si relazioni con tutti e tutti siano relazionati con quello più in alto (nel caso di >= se a è l elemento più piccolo, sarà quello più in basso nel diagramma) Maggioranti e minoranti L insieme dei maggioranti è l insieme degli elementi con cui è in relazione l elemento (esempio: magg(a)={tutti di elementi tali che arx } ) L insieme dei minoranti è l insieme degli elementi che si relazionano con l elemento (esempio: min(a)={tutti gli elementi tali che xra } )
Sup(a) è il più piccolo dei maggioranti. Se sup(a) c A allora si chiama Max(a) inf(a) è il più grande dei minoranti. Se inf(a) c A allora si chiama Min(a) Algoritmo di Euclide Si usa per calcolare mcd(m,n) e si usa così: m=(q0)n+r1 n=(q1)r1+r2 r1=(q2)r2+r3...ecc. ecc. fino ad ottenere rk=(qh)rh+rc rh=qrc + 0 in questo caso rc=mcd(m,n) Esempio: mcd(1567, 311) 1567=5*311 + 12 (dove 12 è 1567-3*311) 311= 25*12 + 11 12= 1*11 + 1 11= 11*1 + 0 L algoritmo finisce qui e l ultimo resto prima dello 0 è 1, quindi mcd(1567, 311)= 1 Equazioni del tipo mx+ny=c Le equazioni di questo tipo sono risolvibili solo se mcd (m,n) divide c I coefficienti m, n e c vanno semplificati dividendo per mcd(m,n) Si esegue poi l algoritmo di Euclide appuntandosi di volta in volta i quozienti, poi si procede così: 1*m + 0*n = m 0*m + 1*n = n da qui in poi, i fattori che moltiplicano m e n sono quello di due equazioni precedenti meno quello dell equazione precedente moltiplicato per il quoziente: [1-(0*q0)]*m + [0-(1*q0)]n = r1 ecc. ecc. finchè non si ottiene l equazione x*m+y*n=1 la soluzione generale a questo punto diventa: (cx+am, cy+an) dove A è un numero
intero esempio: 1567x+311y=3 mcd(1567,311)=1 e 1 divide 3 (semplificare a questo punto è inutile); l equazione ammette soluzioni 1*1567 + 0*311 = 1567 0*1567 + 1*311 = 311 1*1567-5*311 = 12 (poichè q0=5) -25*1567 + 126*311 = 11 (q1=25) 26*1567-131*311 = 1 (q2=1) a questo punto l algoritmo è finito e la soluzione generale si scrive come (3*26+1567A, 3*131+311A) ovvero (78+1567A, 393+311A) con A numero intero arbitrario. Congruenze x y mod n La relazione modulo n ammette come classe di equivalenza le CLASSI RESTO ovvero numeri che, divisi per n, danno lo stesso resto. La relazione scritta sopra indica che x/ n e y/n hanno lo stesso resto. proprietà importanti delle congruenze: se a b mod n, c d mod n allora a+c b+d mod n e a*c b*d mod n Risolvere ed analizzare congruenze Una congruenza del tipo: ax b mod n ammette soluzioni solo se mcd(a,n) divide b In questo caso il calcolo si riduce all uso dell algoritmo di euclide: a=q0*n+r1 (mettere prima a o n è indifferente, dipende da quale è la maggiore tra le due) fino ad ottenere rk=1 a questo punto si riscrive l algoritmo nella forma: a*x + n*y = c e si procede come per le equazioni fino ad ottenere a*x1 + n*y1 = 1 e x1 sarà il risultato di una congruenza del tipo a*x1 1 mod n La soluzione generale della nostra congruenza sarà: (b*x1 + Mn) Esempio:
101x 2 mod 103 mcd(101,103)= 1 e 1 divide 2 103= 1* 101 + 2 101= 50 * 2 + 1 2 = 2*1 + 0 1*103 + 0*101 = 103 0*103 + 1*101 = 101 1*103-1* 101 = 2-50*103 + 51*101 = 1 a questo punto 51 è una delle soluzioni della congruenza 101x 1 mod 103. Per ottenere le soluzioni della congruenza con 2, devo moltiplicare per 2 il risultato. La soluzione generale sarà dunque: x=102+103m Osservazione: un risultato nella forma x=102+103m, equivale a dire che x 102 mod 103 pertanto è possibile scrivere ogni congruenza di questo genere come: x x0 mod n Sistemi di congruenze e teorema cinese del resto { ax b mod n { cx d mod m (considerate le due graffe come fossero un sistema unico) Per prima cosa si risolvono singolarmente le due congruenze fino ad ottenere le rispettive soluzioni generali (chiamiamole s1 e s2), poi, per l osservazione precedente, si riscrive il sistema come: {x s1 mod n {x s2 mod m a questo punto il sistema ammette soluzioni solo se mcd(m,n) divide s2-s1 Ora scriviamo la prima congruenza in forma esplicita come: x=s1+nk e sostituiamo la x nella seconda congruenza fino ad ottenere: s1+nk s2 mod m spostiamo s1 dall altra parte e otteniamo: nk s2-s1 mod m e risolviamo, con l algoritmo di euclide, questa congruenza in k ottenendo una
soluzione del tipo: k=k0+mm ora sostituiamo il k nella prima congruenza in forma esplicita per ottenere: x= s1 +n(k0+mm) e svolgiamo le moltiplicazioni: x=(s1+nk0)+mnm Osservazione: un sistema del tipo {x a mod n {x b mod m con mcd(m,n)=1 può essere scritto come una singola congruenza x x0 mod m*n e viceversa. Questo può essere comodo in alcuni casi per semplificare dei calcoli che vedremo più in seguito. Tabella delle operazioni mod n L insieme delle classi resto di un numero n contiene n elementi, ovvero le classi resto da 0 a n-1 Esempio: per n=4, Z4 = {0,1,2,3} Su questi insiemi è possibile effettuare delle operazioni che possono essere messe in tabella. per n=4, operazione di addizione: 0 1 2 3 0 0 1 2 3 1 1 2 3 0 2 2 3 0 1 3 3 0 1 2 operazione di moltiplicazione: 0 1 2 3 0 0 0 0 0
1 0 1 2 3 2 0 2 0 2 3 0 3 2 1 Come si può notare, la classe resto 4 equivale a 0, la classe resto 5 equivale a 1 dato che, essendo la congruenza un operazione di divisione, dividere qualcosa per 4 e ottenere resto 4 e quoziente q equivale a dividere la stessa cosa per 4 ottenendo quoziente q+1 e resto 0. Gruppi Un gruppo è un insieme e un operazione binaria con la proprietà associativa, l elemento neutro e l inverso. Se il gruppo ammette la proprietà commutativa si dice Abeliano. Cardinalità e inverso moltiplicativo La cardinalità di un insieme è il numero di elementi dell insieme. Particolarmente importante è la cardinalità di Zn* che permette di calcolare gli inversi moltiplicativi delle classi resto e si applica ai teoremi di Lagrange e Fermat. Zn* è l insieme delle classi resto di n che ammettono l inverso moltiplicativo. Una classe resto ammette l inverso moltiplicativo quando mcd (x,n)=1 per x classe resto cercata. L inverso moltiplicativo di q è quel numero che, moltiplicato per q è congruo a 1 mod n. Per calcolare l inverso moltiplicativo di un numero basta risolvere la congruenza: qx 1 mod n Mentre la cardinalità di Zn* è n ( Zn* = n), la cardinalità di Zn* si può calcolare tramite la funzione di eulero φ(n)=n (1-1/p) prodotto di tutti i divisori primi distinti di n. Esempio: dove è la produttoria, ovvero il Z60*=60(1-1/2)(1-1/3)(1-1/5)=16 vuol dire che 60 ha 16 classi resto che ammettono l inverso moltiplicativo.il calcolo della cardinalità delle classi resto può essere semplificato in varie maniere: 1. per p primo, φ(p)=p-1 2. per p primo φ(p^k)=p^k-p^(k-1)
3. siano r, s due divisori di n tali che mcd(r,s)=1, allora φ(n)=φ(r*s)=φ(r)*φ(s) Teorema di Lagrange (G, *) gruppo abeliano FINITO di cardinalità G =n (* è una generica operazione) allora, per ogni g contenuto in G vale che: g^n=g*g*g*...*g=e Dove e è l elemento neutro dell operazione binaria del gruppo Esempio: (Zn, +) per ogni classe resto x in Zn, x+x+x+..+x n-volte si ha che x+x+...+x=0 Piccolo teorema di Fermat sia p un numero primo e x un intero tale che mcd(x,p)=1 allora x^(p-1) 1 mod p Questo permette di risolvere potenze enormi con classi resto: 5^124789 mod11 = 5^(10*12478 + 9) mod 11 = 5^(10*12478)*5^9 mod 11 (fino ad ora ho applicato solo proprietà delle potenze per ricondurre 5 ad una potenza di φ(11) =10) Ora, 5^10 1 mod 11 per Fermat, quindi la potenza diventa: 1^12478 * 5^9 mod 11 1 può essere quindi tolto e rimane da calcolare 5^9 mod 11 5^9 = (5^2)*(5^2)*(5^2)*(5^2)*5 mod 11 ma poichè 5^2=25 3 mod 11 (25=11*2 + 3), la potenza si riduce ancora a: 3*3*3*3*5 mod 11 ma 3^3 = 27 5 mod 11, quindi semplifico ancora come 5*3*5 mod 11. Inoltre 5*5 3 mod 11, quindi in definitiva rimane 3*3 mod 11 = 9 mod 11 Il teorema di Fermati ci permette di capire dunque che il resto della divisione di 5^124789 per 11 è 9: 5^124789 9 mod 11 Test di primalità (Miller-Rabin) e numeri di Carmichael
per esaminare un numero n si prende un opportuno numero a tale che mcd(n,a)=1 Poi si procede calcolando la congruenza: a^(n-1) mod n in caso il risultato sia diverso da 1, allora n è un numero composto, in caso contrario si procede così: n-1=m*2^k (esempio: se n-1=20, m*2^k =5*2^2) e si scrive a^(n-1) come (a^m)^2^k A questo punto se a^m 1 mod n, n ha passato il test ed è con buona probabilità un numero primo, altrimenti il test continua ponendo a^m=b. A questo punto se b^2^k 1 mod n, allora il numero è con buona probabilità primo, altrimenti è composto. Ci sono numeri che tuttavia passano il test di Miller-Rabin pur essendo composti: i numeri di Carmichael. Questi numeri hanno tre proprietà: 1. sono prodotto diretto di 3 o più numeri primi (n=p1*p2*...*pk) 2. i numeri primi sono a potenza 1 3. per ogni numero primo p che divide n, p-1 divide n-1 Alcuni numeri di Carmichael: 561=3*11*17 1729= 7*13*19 2465=5*17*29 2821=7*13*31 8911=7*19*67 Criptosistema a chiave pubblica RSA siano N, E, D interi con le seguenti proprietà: N = p*q dove p e q sono numeri primi molto grandi E*D 1 mod (p-1)(q-1) (ovvero E e D sono i rispettivi inversi moltiplicativi modulo (p-1)(q-1)) Osservazione: φ(n)=(p-1)(q-1) Sia m il messaggio da spedire. Esso viene criptato inviando il messaggio: m^e mod N (questo passaggio genera una stringa di lunghezza massima N) Il destinatario, una volta ricevuta la stringa, la eleva a potenza D, in tal modo viene
che: m^(e*d) 1 mod N (piccolo teorema di Fermat) a questo punto, poichè E*D 1 mod (p-1)(q-1), la potenza si scrive come: m^(1+k(p-1)(q-1)) mod N = m*m^(k(p-1)(q-1)) mod N Di nuovo per il piccolo teorema di Fermat, m^(k(p-1)(q-1)) 1 mod N quindi m*1 m mod N Algebra di Boole Un algebra di Boole è un insieme dotato di due operazioni binarie e di un operazione unaria o mappa (A,, v, ) Le operazioni hanno la proprietà distributiva, hanno l elemento neutro e un complemento (a complemento di a tale che a a = 1 e a v a = 0 Esempio: (P(x) insieme delle parti di x, U =, = v, CxA (complementare) = ) l elemento neutro di U = ø poichè A U ø = A l elemento neutro di = P(x) poichè A P(x)= A Proprietà delle algebre di boole: 1. idempotenza: a a = a; a v a = a 2. limitateza: siano 1 l elemento neutro di v e 0 l elemento neutro di (si, sono opposti -> ) a 1 = 1; a v 0 = 0 3. associatività: a b c = a (b c) = (a b) c a v b v c = a v (b v c) = (a v b) v c 4. il complemento è unico 5. involutività: (a ) = a 6. leggi di De Morgan: (a b) = a v b (a v b) = a b Calcolo proposizionale una particolare algebra Booleana è il calcolo proposizionale. Esso ha due operazioni: = and; v = or; Una mappa: =not E due possibili valori: V = vero (o true) F = falso (o false)
Con questi valori possiamo costruire le tabelle di verità delle varie operazioni: A B A A v B A B V V F V V V F F V F F V V V F F F V F F Ci sono poi altri operatori composti, ad esempio => che equivale a A v B Due operatori sono equivalenti se hanno la stessa tabella di verità. Si definisce tautologia una proposizione la cui tabella di verità è tutta vera Si definisce contraddizione una proposizione la cui tabella di verità è tutta falsa. Per risolvere una proposizione si procede in questo modo: A B => A v B Si fanno le tabelle di verità dei singoli pezzi dell operatore, poi si riunisce tutto in un unica tabella fino ad ottenere: A B A A v B A B A B => A v B V V F V V V V F F V F V F V V V F V F F V F F V In questo caso il nostro operatore è una Tautologia.