Funkcje boolowskie
Transkrypt
Funkcje boolowskie
Matematyka Dyskretna Andrzej Szepietowski 25 czerwca 2002 roku Rozdział 1 Funkcje boolowskie 1.1 Algebra Boole’a Przykładem algebry Boole’a jest zbiór dwuelementowy: z trzema operacjami: alternatywa̧, koniunkcja̧ i negacja̧. Alternatywa, która̧ bȩdziemy też nazywać po prostu suma̧, jest operacja̧ dwuargumentowa̧, oznaczana̧ przez: lub i określona̧ przez tabelȩ: p 0 0 1 1 q 0 1 0 1 p+q 0 1 1 1 Koniunkcja (lub iloczyn) jest druga̧ operacja̧ dwuargumentowa̧, oznaczana̧ przez: lub i określona̧ przez tabelȩ: p 0 0 1 1 q 0 1 0 1 3 0 0 0 1 4 Rozdział 1. Funkcje boolowskie Podobnie jak w arytmetyce, kropkȩ bȩdziemy opuszczać, jeżeli nie bȩdzie to prowadzić do niejednoznaczności. Operacje alternatywy i koniunkcji można też zdefiniować za pomoca̧ nastȩpuja̧cych wzorów: Negacja jest operacja̧ jednoargumentowa̧, oznaczana̧ przez: lub i określona̧ przez tabelȩ: p 0 1 1 0 Algebrȩ możemy interpretować jako logikȩ zdaniowa̧. Zmienne sa̧ zdaniami, które moga̧ przyjmować wartości prawda lub fałsz. Jeżeli oznaczymy prawdȩ przez i fałsz przez , to powyżej zdefiniowane operacje odpowiadaja̧ znanym operacjom z logiki zdań. (alternatywa i koniunkcja sa̧ przemienne), (b) (alternatywa i koniunkcja sa̧ ła̧czne), (c) (alternatywa jest rozdzielna wzglȩdem koniunkcji), (d) (koniunkcja jest rozdzielna wzglȩdem alternatywy), (e) , , , , (f) , , , , (g) , (prawa pochłaniania), (h) , (prawa de’Morgana), (i) (prawo podwójnego przeczenia). Lemat 1.1 Operacje alternatywy, koniunkcji i negacji spełniaja̧ nastȩpuja̧ce tożsamości: (a) Najprostsze dowody powyższych tożsamości polegaja̧ na sprawdzeniu, że zachodza̧ one dla każdego możliwego podstawienia za zmienne wartości 1 lub 0. Na przykład, udowodnimy tożsamość: Wszystkie możliwe podstawienia zebrane sa̧ w tabeli: 1.1. Algebra Boole’a p 0 0 1 1 5 q 0 1 0 1 0 0 1 1 Ponieważ trzecia kolumna jest identyczna z pierwsza̧, wiȩc równość jest prawdziwa dla każdego podstawienia, czyli jest tożsamościa̧. Innym przykładem algebry Boole’a jest zbiór wszystkich podzbiorów jakiegoś zbioru z operacjami określonymi w nastȩpuja̧cy sposób: jest suma̧ mnogościowa̧ jest iloczynem jest uzupełnieniem zbioru, 1 jest zbiorem , 0 jest zbiorem pustym . , Także te operacje spełniaja̧ tożsamości z lematu 1.1. Udowodnimy, dla przykładu, tożsamość . Jeżeli element należy do zbioru , to należy także do sumy . Jeżeli zaś nie należy do , to nie należy także do iloczynu , a wiȩc nie należy do żadnego składnika sumy , czyli nie . Tak wiȩc zbiory i zawieraja̧ dokładnie te same elementy, należy do a wiȩc sa̧ równe. Oprócz trzech podstawowych, w algebrze Boole’a definiuje siȩ inne operacje. Dla nas ważna bȩdzie operacja xor (ang. exclusive or) albo alternatywa wykluczaja̧ca. xor jest operacja̧ dwuargumentowa̧, oznaczana̧ przez: i określona̧ przez tabelȩ: p 0 0 1 1 q 0 1 0 1 0 1 1 0 Operacja ta jest nazywana alternatywa̧ wykluczaja̧ca̧, ponieważ w logice zdaniowej zdanie jest prawdziwe, jeżeli albo , albo jest prawdziwe, ale nie jest prawdziwe, gdy i naraz sa̧ prawdziwe. Operacja ma nastȩpuja̧ce własności: (a) Lemat 1.2 (jest przemienna), 6 Rozdział 1. Funkcje boolowskie (jest ła̧czna), (c) (xor jest rozdzielne wzglȩdem koniunkcji), , , , , (d) , to . (e) Jeżeli z działaniami xor i koniunkcji tworzy ciało. (f) zbiór operacji zapewnia, że możemy opuszczać nawiasy w wyrażeniach typu Ła̧czność (b) , bez spowodowania niejednoznaczności. Operacjȩ xor można zdefiniować poprzez alternatywȩ, koniunkcjȩ i negacjȩ: W algebrze podzbiorów operacja xor odpowiada różnicy symetrycznej: 1.2 Wyrażenia boolowskie Podobnie jak wyrażenia arytmetyczne, możemy budować wyrażenia boolowskie. Wyrażeniami boolowskimi sa̧ stałe i oraz zmienne boolowskie (typu boolean). Bardziej złożone wyrażenia można budować za pomoca̧ operatorów boolowskich i nawiasów. Jeżeli i sa̧ dwoma wyrażeniami boolowskimi, to wyrażeniami boolowskimi sa̧ także nastȩpuja̧ce wyrażenia: 1.2.1 Wyrażenia boolowskie w jȩzyku Pascal W jȩzyku Pascal wyrażeniami boolowskimi sa̧ stałe true i false oraz zmienne typu boolean. Wyrażenia boolowskie można też budować z wyrażeń arytmetycznych za pomoca̧ tak zwanych operatorów relacyjnych. Jeżeli U i W sa̧ dwoma wyrażeniami arytmetycznymi, to wyrażeniem boolowskim jest wyrażenie: U op W, gdzie op oznacza dowolny operator relacyjny. Operatory relacyjne sa̧ zestawione w tabeli: operator = < > <> <= >= znaczenie równe mniejsze wiȩksze różne mniejsze lub równe wiȩksze lub równe 1.3. Funkcje boolowskie 7 Wyrażenia boolowskie można także budować za pomoca̧ operatorów boolowskich i nawiasów. Jeżeli U i W sa̧ dwoma wyrażeniami boolowskimi, to wyrażeniami boolowskimi sa̧ także nastȩpuja̧ce wyrażenia: U or W (suma lub alternatywa), not W (negacja), U and W (koniunkcja), U xor W (exclusive or lub alternatywa wykluczaja̧ca), (U) (wyrażenie U wziȩte w nawias). Przykładami wyrażeń boolowskich w jȩzyku Pascal sa̧: true or b, (0<=x) and (x<=10), b and not(x>=0), (0<x) or (x>10). gdzie b jest zmienna̧ typu boolean, a x — zmienna̧ liczbowa̧. Wyrażenia boolowskie wystȩpuja̧ w jȩzyku Pascal w instrukcjach warunkowych lub w pȩtlach while i repeat. 1.3 Funkcje boolowskie Funkcje boolowskie gdzie zmiennych to funkcje: . Mamy cztery funkcje boolowskie jednej zmiennej: równa̧ 0, identyczność , negacjȩ , funkcjȩ stała̧ równa̧ 1. funkcjȩ stała̧ Wartości tych funkcji zestawiono w tabeli: x 0 1 0 0 0 1 1 0 1 1 8 Rozdział 1. Funkcje boolowskie Sa̧ to wszystkie funkcje boolowskie jednej zmiennej, ponieważ sa̧ to funkcje ze zbioru w zbiór , a takich funkcji jest: Funkcji boolowskich dwóch zmiennych jest: Ich wartości zestawiono w tabeli: x 0 0 1 1 y 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Zauważmy, że cia̧g wartości każdej z tych funkcji czytany od góry do dołu stanowi zapis binarny jej numeru. Przyjrzyjmy siȩ bliżej tym funkcjom: jest funkcja̧ stała̧ równa̧ 0, jest funkcja̧ stała̧ równa̧ 1, jest koniunkcja̧, jest alternatywa̧, jest xorem, jest implikacja̧ z do , jest implikacja̧ z do , jest równoważnościa̧, jest rzutem na pierwsza̧ współrzȩdna̧, jest rzutem na druga̧ współrzȩdna̧, jest negacja̧ drugiej współrzȩdnej, jest negacja̧ pierwszej współrzȩdnej, jest zaprzeczeniem koniunkcji, tak zwany nand, jest zaprzeczeniem alternatywy, tak zwany nor, jest zaprzeczeniem implikacji z do , jest zaprzeczeniem implikacji z do . 1.3. Funkcje boolowskie 9 Jak widać, każda̧ z tych funkcji można przedstawić za pomoca̧ koniunkcji, alternatywy i negacji. Funkcji boolowskich trzech zmiennych jest: nie bȩdziemy ich wszystkich wypisywać. Nasuwa siȩ pytanie, czy każda̧ funkcjȩ zmiennych można przedstawić za pomoca̧ koniunkcji, alternatywy i negacji. Odpowiedź jest pozytywna. Najpierw przykład. Rozpatrzmy funkcjȩ boolowska̧ trzech zmiennych: x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 f(x,y,z) 0 1 0 1 1 1 0 0 Rozważmy wyrażenie: , , , , czyli jest przyjmuje wartość 1 tylko dla wektorów Przyjmuje ono wartość 1 tylko dla jednego wektora , czyli dla podstawienia , , . Podobnie, wyrażenie przyjmuje wartość 1 tylko dla wektora , wyrażenie — tylko dla , a wyrażenie — tylko dla . Suma tych wyrażeń: (1.1) równoważna naszej funkcji . Wyrażenie (1.1) jest w tak zwanej dysjunkcyjnej postaci normalnej (DNF). Funkcjȩ można też opisać w innej formie. Rozważmy wyrażenie: Przyjmuje ono wartość 0 tylko dla jednego wektora , czyli dla podstawienia , , . Podobnie, wyrażenie przyjmuje dla wektora wartość 0 tylko , wyrażenie , a wyrażenie — tylko — tylko dla . Iloczyn tych wyrażeń: dla , , , i , czyprzyjmuje wartość zero tylko dla wektorów li jest równoważny funkcji . Jest to tak zwana koniunkcyjna postać normalna (CNF) funkcji . 10 Rozdział 1. Funkcje boolowskie Metodȩ tȩ można uogólnić na funkcje zmiennych. Wprowadzimy oznaczenie: Dla dowolnego wektora , niech oznacza -ta̧ współrzȩdna̧ wektora . Rozważmy teraz wyrażenie: , dla każdego Zauważmy, że jest równe 1 tylko wtedy, gdy podstawimy . Widać z tego, że: , czyli dla Jest to dysjunkcyjna postać normalna (DNF) funkcji (sumowanie oznacza tutaj alternatywȩ). Aby otrzymać postać koniukcyjna̧, zaczynamy od wyrażenia: , dla każdego Zauważmy, że jest równe 0 tylko wtedy, gdy podstawimy: . Widać z tego, że: , czyli dla Jest to koniunkcyjna postać normalna (CNF) funkcji . 1.4 Sieci boolowskie Najpierw przykład. Na rysunku 1.1 przedstawiono pewna̧ sieć boolowska̧. Jest to graf skierowany z sześcioma wierzchołkami (bramkami) i piȩcioma krawȩdziami ła̧cza̧cymi niektóre bramki. W tym i nastȩpnych przykładach przyjmujemy, że krawȩdzie sa̧ skierowane od góry do dołu. Bramki maja̧ etykiety. Jedna etykietowana jest stała̧ , dwie etykietowane sa̧ zmiennymi i , a trzy etykietowane sa̧ operatorami logicznymi, , i . Bramki oznaczone stałymi lub zmiennymi sa̧ bramkami wejściowymi i żadne krawȩdzie nie prowadza̧ do nich. Bramka ma jedna̧ krawȩdź wchodza̧ca̧, a bramki i po dwie. Bramka jest bramka̧ wyjściowa̧, bo nie wychodzi z niej żadna krawȩdź. Z każda̧ bramka̧ w sieci możemy zwia̧zać wyrażenie boolowskie. W przypadku bramki etykietowanej stała̧ lub zmienna̧, tym wyrażeniem jest ta stała lub ta zmienna. Z bramka̧ zwia̧zane jest wyrażenie , z bramka̧ wyrażenie , a z bramka̧ wyrażenie . Ogólnie, sieć boolowska to graf składaja̧cy siȩ z wierzchołków, nazywanych bramkami, i skierowanych krawȩdzi ła̧cza̧cych niektóre bramki. Każda bramka ma swoja̧ etykietȩ, która̧ może być stała 1 lub 0, zmienna lub operator boolowski. W naszych rozważaniach ograniczymy siȩ do czterech operatorów: , , i , ale można rozważać sieci z innym zbiorem operatorów. Do bramek oznaczonych stałymi lub zmiennymi nie prowadza̧ żadne 1.4. Sieci boolowskie 11 Rysunek 1.1: Przykład sieci boolowskiej krawȩdzie, sa̧ to bramki wejściowe. Bramki oznaczone przez maja̧ po jednej krawȩdzi wejściowej, a bramki z pozostałymi operatorami maja̧ po dwie krawȩdzie wchodza̧ce. W sieci boolowskiej nie może być cyklu, czyli cia̧gu krawȩdzi takiego że , i dla każdego spełniaja̧cego warunek w sieci istnieje krawȩdź od wierzchołka do wierzchołka . Wierzchołek, z którego nie wychodza̧ żadne krawȩdzie, nazywamy wyjściowym. W sieci może być kilka bramek wyjściowych. Z każda̧ bramka̧ w sieci możemy zwia̧zać wyrażenie boolowskie . Robimy to przez indukcjȩ ze wzglȩdu na strukturȩ sieci: Najpierw przypisujemy wyrażenia bramkom wejściowym. W tym wypadku wyrażeniem tym jest etykieta bramki : stała lub zmienna. Jeżeli bramka jest etykietowana negacja̧ i dochodzi do niej krawȩdź od bramki oraz bramka ma już przypisane wyrażenie , to bramce przypisujemy wyrażenie . Jeżeli etykieta̧ bramki jest operator dwuargumentowy , to do prowadza̧ krawȩdzie od dwóch bramek, i . Jeżeli przypisano już wyrażenia i bramkom i , to bramce przypisujemy wyrażenie . Liczbȩ wszystkich bramek w sieci nazywamy kosztem sieci, a długość najdłuższej ścieżki w sieci nazywamy głȩbokościa̧ sieci. Jeżeli w sieci istnieje bramka wyjściowa , to możemy powiedzieć, że sieć oblicza wyrażenie . Z faktu, że każda̧ funkcjȩ boolowska̧ można przedstawić w postaci normalnej, wynika, że każda̧ funkcjȩ boolowska̧ można przedstawić za pomoca̧ sieci. Jednak konstrukcja sieci dla funkcji boolowskiej poprzez wyznaczanie postaci normalnej zazwyczaj prowadzi do sieci o dużym koszcie (liczbie bramek). Poniżej omówiono przykłady sieci o stosunkowo małym koszcie. 12 Rozdział 1. Funkcje boolowskie 1.4.1 Suma (alternatywa) kilku zmiennych Rysunek 1.2: Sieć boolowska obliczaja̧ca alternatywȩ ośmiu zmiennych Na rysunku 1.2 przedstawiono sieć obliczaja̧ca̧ alternatywȩ ośmiu zmiennych: Głȩbokość tej sieci wynosi 3. Podobnie można skonstruować sieć licza̧ca̧ alternatywȩ zmiennych, gdzie jest jaka̧ś potȩga̧ dwójki. Głȩbokość takiej sieci wynosi . Oczywiście tak samo możemy zbudować sieć dla uogólnionej koniunkcji lub operatora . 1.4.2 Funkcje progowe Funkcja gdy liczba jedynek wśród równa lub wiȩksza od w przeciwnym wypadku, jest jest funkcja̧ progowa̧ o zmiennych z progiem . Bȩdziemy zakładać, że Sieci funkcji progowych dwóch zmiennych sa̧ proste, ponieważ: Przedstawiono je na rysunku 1.3. . 1.4. Sieci boolowskie 13 Rysunek 1.3: Sieci funkcji progowych dwóch zmiennych Przypuśćmy, że mamy już sieci funkcji progowych zmiennych. Za ich pomoca̧ możemy skonstruować funkcje progowe zmiennych (rysunek 1.4). Zrobimy to posługuja̧c siȩ nastȩpuja̧cymi zależnościami: Jeżeli , to: Jeżeli zestawimy równolegle sieci funkcji progowych, tak jak zrobiono to na rysunku 1.5, to otrzymamy sieć sortuja̧ca̧. Sieć ta bierze na wejściu cia̧g czterech bitów: i zwraca na wyjściu te same bity w porza̧dku nierosna̧cym: przykład Na gdy na wejściu bȩdzie cia̧g , wówczas na wyjściu pojawi siȩ cia̧g . 1.4.3 Sumator Zastanówmy siȩ teraz, jak skonstruować sumator, czyli sieć, która bȩdzie dodawać dwie liczby -bitowe: i da w wyniku oraz bitów sumy: 14 Rozdział 1. Funkcje boolowskie Rysunek 1.4: Sieć funkcji progowej Na wejściu sumatora mamy bitów pierwszej liczby, , ... , , oraz bitów drugiej liczby, , ... , , a na wyjściu bitów sumy arytmetycznej , ... , . Nasz sumator naśladuje szkolne dodawanie opisane w rozdziale o arytmetyce. Najpierw dodaje bity i i oblicza ostatni bit sumy oraz przeniesienie , które ma być dodane do nastȩpnego dodaje bity , oraz przeniesienie bitu. Potem dla kolejnych pozycji od do z poprzedniej pozycji i oblicza -ty bit sumy oraz przeniesienie do nastȩpnej pozycji. Na rysunku 1.6 przedstawiono sieć HA (ang. half adder — półsumator), która ma na wejściu dwa bity, i , a na wyjściu — bit sumy oraz bit przeniesienia . Na rysunku 1.7 przedstawiono sieć FA (ang. full adder), która ma na wejściu trzy oraz bit przeniesienia bity, , oraz , a na wyjściu bit sumy . Na rysunku 1.8 przedstawiono schemat konstrukcji sumatora dla . Podobnie można skonstruować sumator dla dowolnego . Taki sumator bȩdzie zawierał 1.5. Operacje boolowskie na wektorach 15 Rysunek 1.5: Schemat sieci sortuja̧cej bramek i miał głȩbokość . 1.5 Operacje boolowskie na wektorach Operacje boolowskie można wykonywać także na cia̧gach bitów określonej długości, czyli na elementach zbioru oraz operacje koniunkcji, alternatywy, xor i negacji wykonywane sa̧ po współrzȩdnych: Jeżeli wektor oznaczymy przez 0, a wektor złożony z samych jedy zerowy Dla dwóch cia̧gów: nek — przez 1, to zachodza̧ wszystkie tożsamości lematu1.1 oraz tożsamości (a)—(e) z lematu 1.2. Nie jest natomiast na ogół spełniona własność (e) lematu 1.2, 16 Rozdział 1. Funkcje boolowskie Rysunek 1.6: Sieć obliczaja̧ca HA (półsumator) ponieważ jeżeli , to z działaniami i nie jest ciałem (nie ma elementu przeciwnego do ). Zbiór jest przestrzenia̧ liniowa̧ nad ciałem , z jako dodawaniem oraz mnożeniem przez skalar zdefiniowanym przez: (tutaj zero po lewej stronie jest zerem z ciała, a zero po prawej stronie jest wektorem zerowym), . 1.5.1 Operacje na wektorach w jȩzyku Pascal W jȩzyku Pascal (i w wielu innych j˛ezykach) operacje boolowskie: and, or, xor, neg, można stosować do liczb typu integer lub innych typów całkowitych (byte, shortint, word lub longint). Liczba traktowana jest wtedy jako cia̧g bitów jej przedstawienia binarnego. Na przykład: 13 and 6=4 ponieważ 13 jest reprezentowane przez: 6 przez: oraz: (0000 0000 0000 1101) and (0000 0000 0000 0110) =(0000 0000 0000 0100), a ten ostatni cia̧g reprezentuje 4 w typie integer. Podobnie zachodzi: 13 or 6=15; 13 xor 6=11; not 0=-1. 1.5. Operacje boolowskie na wektorach 17 Rysunek 1.7: Sieć obliczaja̧ca FA 1.5.2 Reprezentacja zbioru Cia̧gi bitów z moga̧ służyć do reprezentacji podzbiorów zbioru Cia̧g należy traktować jako funkcjȩ charakterystyczna̧ pewnego podzbioru. Wtedy operacje boolowskie na cia̧gach odpowiadaja̧ operacjom na zbiorach. Alternatywa odpowiada sumie zbiorów, koniunkcja czȩści wspólnej, a negacja uzupełnieniu zbioru. Operacja xor odpowiada różnicy symetrycznej. Taka reprezentacja ma dwie zalety. Zajmuje mało pamiȩci i operacje na zbiorach sa̧ wykonywane bardzo szybko, ponieważ operacje boolowskie sa̧ operacjami niskiego poziomu. Na przykład jeżeli chcemy reprezentować w pamiȩci komputera ułożenie kamieni w grze w warcaby na 64-polowej szachownicy, to wystarcza̧ dwie liczby typu longint (po 32 bity). W jednej liczbie reprezentujemy położenie czarnych, a w drugiej położenie białych kamieni (w grze w warcaby kamienie moga̧ leżeć tylko na 32 czarnych polach). 1.5.3 Szyfrowanie w systemie one-pad Operacje boolowskie na wektorach można wykorzystać do szyfrowania. W systemie szyfrowania „one-pad” wiadomość i klucz sa̧ cia̧gami bitów (Jeżeli wiadomość jest cia̧giem znaków, to kodujemy każdy znak jako 8 bitów i cały cia̧g może by ć traktowany jako ciag ˛ bitów). Zaszyfrowana wiadomość ma postać: 18 Rozdział 1. Funkcje boolowskie Rysunek 1.8: Schemat sumatora HA FA FA FA Zauważmy, że deszyfrować można według tego samego wzoru: ponieważ gdzie 0 reprezentuje wektor zerowy. Zaleta̧ tego systemu jest to, że jest on absolutnie bezpieczny. Zróbmy nastȩpuja̧cy eksperyment. Przypuśćmy, że ktoś ma zaszyfrowana̧ wiadomość i chce ja̧ odszyfrować przez odgadniȩcie samej wiadomości . Zastanówmy siȩ, dla jakich cia̧gów istnieje klucz , taki że , czyli inaczej, jakie wiadomości moga̧ być zaszyfrowane w . Okazuje siȩ, że dla każdego cia̧gu istnieje klucz , taki że . Wystarczy wzia̧ć . Mamy wtedy: 1.6. Funkcja parzystości (parity) 19 Wada̧ tego systemu jest to, że klucze musza̧ być tej samej długości co sama wiadomość i musza̧ być trzymane w sekrecie. Powoduje to kłopoty z przesyłaniem i przechowywaniem kluczy. System one-pad można stosować w nastȩpuja̧cy sposób: Najpierw przesyła siȩ bezpieczna̧ poczta̧ (na przykład kurierska̧) zapasy kluczy, na przykład notesy z kartkami, gdzie każda strona zawiera jeden klucz. Nastȩpnie szyfrowane depesze moga̧ być przesyłane mniej bezpiecznymi kanałami. Trzeba tylko przestrzegać zasady, że jedna kartka może być użyta tylko raz (sta̧d angielska nazwa systemu). Same klucze powinny być losowane, aby przeciwnik nie mógł ich odgadna̧ć. Łamia̧c szyfry czȩsto korzysta siȩ z faktu, że wiadomości, lub ich fragmenty, wystȩpuja̧ z różna̧ czȩstościa̧ (prawdopodobieństwem). Przypuśćmy dla prostoty, że szyfrujemy pojedyncze znaki i niech bȩdzie zbiorem wiadomości (kody ASCII). Dla normalnych tekstów (listów) rozkład czȩstości poszczególnych znaków jest bardzo niejednostajny. Kody jednych liter wystȩpuja̧ dużo cześciej, niż innych, a pewne znaki nie wystȩpuja̧ wcale. Gdybyśmy teraz zastosowali jakiś prymitywny sposób kodowania bez klucza, , to w zaszyfrowanej wiagdzie każdy znak zawsze jest szyfrowany za pomoca̧ domości rozkład czȩstości bȩdzie podobny (przepermutowany). Najczȩściej wystȩpuja̧cy znak w wiadomości zaszyfrowanej odpowiada najczȩściej wystȩpuja̧cemu znakowi w tekście, itd. Można to wykorzystać przy łamaniu szyfrów. Jak zaraz zobaczymy w przypadku szyfrów one-pad tak nie jest. Znaki w zaszyfrowanej wiadomości posiadaja̧ rozkład jednostajny, tak jakbyśmy losowali kolejne znaki i dlatego analiza statystyczna jest tutaj bezużyteczna. Niech bȩdzie zbiorem wiadomości z dowolnym rozkładem prawdopodobieństwa, a zbiorem kluczy z jednostajnym rozkładem prawdopodobie ństwa. Losujemy wiadomość i klucz i obliczamy wiadomość . Niech oznacza zdarzenie, że wylosowano wiadomość , , że wylosowano klucz , a zdarzenie, że otrzymano zaszyfrowana̧ wiadomość . Zgodnie ze wzorem na prawdopodobieństwo całkowite mamy , ale bo tylko dla jednego klucza 1.6 Funkcja parzystości (parity) Zdefiniujmy funkcjȩ boolowska̧ parzystości (parity): . Dlatego 20 Funkcja Rozdział 1. Funkcje boolowskie jest addytywna, to znaczy: co wynika z faktu, że operacja jest ła̧czna i przemienna. jest równa 1, jeżeli liczba jedynek w cia̧gu jest nieparzysta, oraz jest równa 0, jeżeli w cia̧gu liczba jedynek jest parzysta. Jeżeli bȩdziemy utożsamiać wektor ze zbiorem, to jest równe parzystości mocy zbioru . dla dokładnie połowy wejść. To znaczy: Twierdzenie 1.3 Pierwszy dowód. Twierdzenie wynika z faktu, że dokładnie połowa podzbiorów zbioru jest nieparzystej mocy. Drugi dowód. Weźmy wektor: który ma jedynkȩ tylko na pierwszej współrzȩdnej. Zdefiniujemy teraz funkcjȩ : Funkcja ła̧czy elementy ze zbioru . Rzeczywiście: w pary, ponieważ jeżeli , to dokładnie jedna z dwóch , a sta̧d wynika, że dla każdej pary , liczb , jest jedynka̧, czyli dla dokładnie połowy Ponadto: 1.7 Zabezpieczanie danych Funkcja jest wykorzystywana do kontroli, czy dane nie zostały przekłamane podczas przesyłania lub przechowywania. Przypuśćmy, że Małgosia chce przesłać Jasiowi wiadomość i chce choć trochȩ zabezpieczyć przed przekłamaniem. Wtedy Małgosia wysyła razem z bitem — jego podpisem. Przypuśćmy teraz, że Jaś dostał wiadomość z podpisem . Dla prostoty zakładamy, że podpis nie został przekłamany, na przykład Małgosia i Jaś moga̧ siȩ umówić, że przesyłaja̧ sobie tylko ta nie została kie wiadomości , dla których . Aby sprawdzić, czy wiadomość przekłamana, Jaś oblicza i porównuje go z . Jeżeli , to Jaś ma pewność, że . Jeżeli , to Jaś przyjmuje, że , choć 1.7. Zabezpieczanie danych 21 w tym przypadku nie może mieć pewności. Zauważmy, że jeżeli jednym bicie, to ma tylko jedna̧ jedynkȩ, wiȩc: i różnia̧ siȩ tylko na Z drugiej strony: Tak wiȩc jeżeli w przesyłanych danych (przekłamany) jeden bit, bȩdzie zostanie zmieniony można to wykryć porównuja̧c z . z czego wynika: Jest to bardzo stary system kontroli danych. Działa on dobrze, jeżeli przekłamania sa̧ przypadkowe i prawdopodobieństwo przekłamania dwóch bitów jest dużo mniejsze niż prawdopodobieństwo przekłamania jednego bitu. Funkcja jest jednak zbyt prosta, aby zabezpieczyć dane przed złośliwym przekłamywaniem. Wystarczy bowiem zawsze przekłamywać parzysta̧ liczbȩ bitów, aby rzecz siȩ nie wykryła. Pokażemy teraz bardziej złożony sposób zabezpieczania danych przed przekłamaniem. Dla dowolnego wektora zdefiniujmy funkcjȩ: oblicza parzystość liczby bitów wektora , ale Funkcja sa̧ tylko bity na to liczone pozycjach wyznaczonych przez wektor , inaczej — parzystość przekroju i . jest addytywna: Funkcja oraz , to dla dokładnie połowy Twierdzenie 1.4 Jeżeli . zachodzi , to istnieje wektor z jedna̧ jedynka̧, taki że: Dowód. Jeżeli Wektor powinien mieć jedynkȩ na pozycji, na której też ma jedynkȩ. Podobnie jak w dowodzie twierdzenia 1.3, możemy teraz określić funkcjȩ: mamy: w pary. Ponadto która „zlepia” wektory z 22 Rozdział 1. Funkcje boolowskie , a sta̧d — że dla każdej pary, , , dokładnie jedna z dwóch liczb Z tego wynika, że: jest jedynka̧. Wykorzystuja̧c funkcje , można zbudować lepszy system zabezpieczania danych. Na pocza̧tku Małgosia i Jaś zaopatruja̧ siȩ w cia̧g wylosowanych kluczy: Jeżeli teraz Małgosia Klucze te powinny być trzymane w sekrecie. przesłać Jasio chce , to z bierze kolejny klucz z cia̧gu i wysyła wi wiadomość . Jaś po odebraniu razem podpisem wiadomości razem z podpisem nie jest przekłamywane) porównuje (tak jak poprzednio zakładamy, że i . Jeżeli , to dla każdego : , to i dla połowy wektorów mamy: Jeżeli zaś a wiȩc dla połowy wektorów mamy: . Tak wiȩc z prawdopodobieństwem jedna druga Jaś wykryje, że kilka kolejnych kluczy . Aby zwiȩkszyć to prawdopodobieństwo można brać że w przypadku, Wtedy prawdopodobieństwo, gdy , mamy , dla każdego , jest równe . 1.8 Zadania 1. Udowodnij lematy 1.1 i 1.2. 2. Udowodnij, że tożsamości lematu 1.1 sa̧ tożsamościami w algebrze podzbiorów zbioru . 3. Które z poniższych równości sa̧ tożsamościami w algebrze : a) p+qr=q+pr, b) (p+q)r=p+qr, c) (r+q)r=r+qr, d) (p+q)r=p(q+r)+qr. 4. Udowodnij, że wszystkie funkcje boolowskie dwóch zmiennych można przedstawić za pomoca̧ dwóch operatorów, koniunkcji i negacji (lub alternatywy i negacji). 1.9. Problemy 23 5. Udowodnij, że wszystkie funkcje boolowskie dwóch zmiennych można przedstawić za pomoca̧ jednego operatora nand (lub nor). spełnia równanie przyjmuje wartość 1 tylko dla wektorów , . Przedstaw funkcjȩ w postaciach normalnych (dysjunkcyjnej i ko- 6. Ile funkcji 7. Funkcja oraz niunkcyjnej). 8. Narysuj sieć boolowska̧ dla funkcji z poprzedniego zadania. 9. Zaprojektuj sieć odejmuja̧ca̧ od siebie dwie liczby w postaci dwójkowej. 10. Zaprojektuj sieć, która mnoży dwie liczby dwubitowe. 11. Opisz schemat sumatora dla liczb -bitowych, którego głȩbokość jest proporcjo nalna do . 12. Oblicz wartość wyrażeń x or y, x and y, not x, x xor y: a) jeżeli zmienne x i y sa̧ typu shortint i przyjmuja̧ wartości: x=6, y=-3, . Dla jakich wektorów , ? wektory: oraz . Dla jakich wektorów sa̧ dwa 14. Dane , . b) jeżeli zmienne x i y sa̧ typu byte i przyjmuja̧ wartości: x=6, y=3. 13. Dany jest wektor 1.9 Problemy 1.9.1 System one-pad System „one-pad” może być stosowany do cia̧gów liter alfabetu łacińskiego. Wtedy utożsamiamy litery z liczbami od 0 do 25 i zamiast operacji stosujemy: czyli resztȩ z dzielenia przez 26. Jak wygla̧da wtedy operacja deszyfrowania? Pokaż, że system one-pad z literami jest równie bezpieczny jak system z dwoma cyframi 0 i 1. 1.9.2 Zabezpieczanie Zaproponuj zmiany w systemie podpisów opisanym pod koniec rozdziału, tak aby prawdopodobieństwo wykrycia błȩdu zwiȩkszyć do 0.75. 24 Rozdział 1. Funkcje boolowskie 1.9.3 Postać normalna istnieje dokładnie jeden wektor: Udowodnij, że dla każdej funkcji funkcji taki że: