background image

Matematyka Dyskretna

Andrzej Szepietowski

25 czerwca 2002 roku

background image
background image

Rozdział 1

Funkcje boolowskie

1.1

Algebra Boole’a

Przykładem algebry Boole’a jest zbiór dwuelementowy:

z trzema operacjami: alternatyw¸a, koniunkcj¸a i negacj¸a.

Alternatywa, któr¸a b¸edziemy te˙z nazywa´c po prostu sum¸a, jest operacj¸a dwuargumentow¸a,

oznaczan¸a przez:

lub

i okre´slon¸a przez tabel¸e:

p

q

p+q

0

0

0

0

1

1

1

0

1

1

1

1

Koniunkcja (lub iloczyn) jest drug¸a operacj¸a dwuargumentow¸a, oznaczan¸a przez:

lub

i okre´slon¸a przez tabel¸e:

p

q

0

0

0

0

1

0

1

0

0

1

1

1

3

background image

4

Rozdział 1. Funkcje boolowskie

Podobnie jak w arytmetyce, kropk¸e b¸edziemy opuszcza ´c, je˙zeli nie b¸edzie to prowadzi´c
do niejednoznaczno´sci.

Operacje alternatywy i koniunkcji mo˙zna te˙z zdefiniowa´c za pomoc¸a nast¸epuj¸acych

wzorów:

Negacja jest operacj¸a jednoargumentow¸a, oznaczan¸a przez:

lub

i okre´slon¸a przez tabel¸e:

p

0

1

1

0

Algebr¸e

mo˙zemy interpretowa´c jako logik¸e zdaniow¸a. Zmienne s¸a zdaniami,

które mog¸a przyjmowa´c warto´sci prawda lub fałsz. Je˙zeli oznaczymy prawd¸e przez

i

fałsz przez

, to powy˙zej zdefiniowane operacje odpowiadaj¸a znanym operacjom z logiki

zda´n.

Lemat 1.1 Operacje alternatywy, koniunkcji i negacji spełniaj¸a nast¸epuj¸ace to˙zsamo´sci:

(a)

(alternatywa i koniunkcja s¸a przemienne),

(b)

(alternatywa i koniunkcja s¸a

ł¸aczne),

(c)

(alternatywa jest rozdzielna wzgl¸edem koniunkcji),

(d)

(koniunkcja jest rozdzielna wzgl¸edem alternatywy),

(e)

,

,

,

,

(f)

,

,

,

,

(g)

,

(prawa pochłaniania),

(h)

,

(prawa de’Morgana),

(i)

(prawo podwójnego przeczenia).

Najprostsze dowody powy˙zszych to˙zsamo´sci polegaj¸a na sprawdzeniu, ˙ze zachodz¸a one
dla ka˙zdego mo˙zliwego podstawienia za zmienne warto´sci 1 lub 0. Na przykład, udowod-
nimy to˙zsamo´s´c:

Wszystkie mo˙zliwe podstawienia zebrane s¸a w tabeli:

background image

1.1. Algebra Boole’a

5

p

q

0

0

0

0

1

0

1

0

1

1

1

1

Poniewa˙z trzecia kolumna jest identyczna z pierwsz¸a, wi¸ec równo´s´c

jest

prawdziwa dla ka˙zdego podstawienia, czyli jest to˙zsamo´sci¸a.

Innym przykładem algebry Boole’a jest zbiór wszystkich podzbiorów jakiego´s zbioru

z operacjami okre´slonymi w nast¸epuj¸acy sposób:

jest sum¸a mnogo´sciow¸a

jest iloczynem

jest uzupełnieniem zbioru,

,

1

jest zbiorem

,

0

jest zbiorem pustym

.

Tak˙ze te operacje spełniaj¸a to˙zsamo´sci z lematu 1.1.

Udowodnimy, dla przykładu, to˙zsamo´s´c

. Je˙zeli element

nale˙zy do

zbioru

, to nale˙zy tak˙ze do sumy

. Je˙zeli za´s

nie nale˙zy do

, to nie nale˙zy

tak˙ze do iloczynu

, a wi¸ec

nie nale˙zy do ˙zadnego składnika sumy

, czyli nie

nale˙zy do

. Tak wi¸ec zbiory

i

zawieraj¸a dokładnie te same elementy,

a wi¸ec s¸a równe.

Oprócz trzech podstawowych, w algebrze Boole’a definiuje si¸e inne operacje. Dla nas

wa˙zna b¸edzie operacja xor (ang. exclusive or) albo alternatywa wykluczaj¸aca. xor jest
operacj¸a dwuargumentow¸a, oznaczan¸a przez:

i okre´slon¸a przez tabel¸e:

p

q

0

0

0

0

1

1

1

0

1

1

1

0

Operacja ta jest nazywana alternatyw¸a wykluczaj¸ac¸a, poniewa˙z w logice zdaniowej

zdanie

jest prawdziwe, je˙zeli albo

, albo

jest prawdziwe, ale nie jest prawdziwe,

gdy

i

naraz s¸a prawdziwe. Operacja

ma nast¸epuj¸ace własno´sci:

Lemat 1.2

(a)

(jest przemienna),

background image

6

Rozdział 1. Funkcje boolowskie

(b)

(jest ł¸aczna),

(c)

(xor jest rozdzielne wzgl¸edem koniunkcji),

(d)

,

,

,

,

(e) Je˙zeli

, to

.

(f) zbiór

z działaniami xor i koniunkcji tworzy ciało.

ُaczno´s´c operacji

zapewnia, ˙ze mo˙zemy opuszcza´c nawiasy w wyra˙zeniach typu

, bez spowodowania niejednoznaczno´sci.

Operacj¸e xor mo˙zna zdefiniowa´c poprzez alternatyw¸e, koniunkcj¸e i negacj¸e:

W algebrze podzbiorów operacja xor odpowiada ró˙znicy symetrycznej:

1.2

Wyra˙zenia boolowskie

Podobnie jak wyra˙zenia arytmetyczne, mo˙zemy budowa ´c wyra˙zenia boolowskie. Wyra-

˙zeniami boolowskimi s¸a stałe

i

oraz zmienne boolowskie (typu boolean). Bardziej

zło˙zone wyra˙zenia mo˙zna budowa´c za pomoc¸a operatorów boolowskich i nawiasów. Je-

˙zeli

i

s¸a dwoma wyra˙zeniami boolowskimi, to wyra˙zeniami boolowskimi s¸a tak˙ze

nast¸epuj¸ace wyra˙zenia:

1.2.1

Wyra˙zenia boolowskie w j¸ezyku Pascal

W j¸ezyku Pascal wyra˙zeniami boolowskimi s¸a stałe

true

i

false

oraz zmienne ty-

pu

boolean

. Wyra˙zenia boolowskie mo˙zna te˙z budowa´c z wyra˙ze´n arytmetycznych za

pomoc¸a tak zwanych operatorów relacyjnych. Je˙zeli

U

i

W

s¸a dwoma wyra˙zeniami aryt-

metycznymi, to wyra˙zeniem boolowskim jest wyra˙zenie:

U op W,

gdzie

op

oznacza dowolny operator relacyjny. Operatory relacyjne s¸a zestawione w tabeli:

operator

znaczenie

=

równe

<

mniejsze

>

wi¸eksze

<>

ró˙zne

<=

mniejsze lub równe

>=

wi¸eksze lub równe

background image

1.3. Funkcje boolowskie

7

Wyra˙zenia boolowskie mo˙zna tak˙ze budowa´c za pomoc¸a operatorów boolowskich i na-
wiasów. Je˙zeli

U

i

W

s¸a dwoma wyra˙zeniami boolowskimi, to wyra˙zeniami boolowskimi

s¸a tak˙ze nast¸epuj¸ace wyra˙zenia:

U or W

(suma lub alternatywa),

U and W

(koniunkcja),

not W

(negacja),

U xor W

(exclusive or lub alternatywa wykluczaj¸aca),

(U)

(wyra˙zenie

U

wzi¸ete w nawias).

Przykładami wyra˙ze ´n boolowskich w j¸ezyku Pascal s¸a:

true or b

,

b and not(x>=0)

,

(0<=x) and (x<=10)

,

(0<x) or (x>10)

.

gdzie

b

jest zmienn¸a typu boolean, a

x

— zmienn¸a liczbow¸a.

Wyra˙zenia boolowskie wyst¸epuj¸a w j¸ezyku Pascal w instrukcjach warunkowych lub

w p¸etlach while i repeat.

1.3

Funkcje boolowskie

Funkcje boolowskie

zmiennych to funkcje:

gdzie

. Mamy cztery funkcje boolowskie jednej zmiennej:

funkcj¸e stał¸a

równ¸a 0,

identyczno´s´c

,

negacj¸e

,

funkcj¸e stał¸a

równ¸a 1.

Warto´sci tych funkcji zestawiono w tabeli:

x

0

0

0

1

1

1

0

1

0

1

background image

8

Rozdział 1. Funkcje boolowskie

S¸a to wszystkie funkcje boolowskie jednej zmiennej, poniewa˙z s¸a to funkcje ze zbioru
w zbiór

, a takich funkcji jest:

Funkcji boolowskich dwóch zmiennych jest:

Ich warto´sci zestawiono w tabeli:

x

y

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

1

0

0

0

0

1

1

1

1

0

0

0

0

1

1

1

1

1

0

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

1

1

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Zauwa˙zmy, ˙ze ci¸ag warto´sci ka˙zdej z tych funkcji czytany od góry do dołu stanowi zapis
binarny jej numeru. Przyjrzyjmy si¸e bli˙zej tym funkcjom:

jest funkcj¸a stał¸a równ¸a 0,

jest funkcj¸a stał¸a równ¸a 1,

jest koniunkcj¸a,

jest alternatyw¸a,

jest xorem,

jest implikacj¸a z

do

,

jest implikacj¸a z

do

,

jest równowa˙zno´sci¸a,

jest rzutem na pierwsz¸a współrz¸edn¸a,

jest rzutem na drug¸a współrz¸edn¸a,

jest negacj¸a drugiej współrz¸ednej,

jest negacj¸a pierwszej współrz¸ednej,

jest zaprzeczeniem koniunkcji, tak zwany nand,

jest zaprzeczeniem alternatywy, tak zwany nor,

jest zaprzeczeniem implikacji z

do

,

jest zaprzeczeniem implikacji z

do

.

background image

1.3. Funkcje boolowskie

9

Jak wida´c, ka˙zd¸a z tych funkcji mo˙zna przedstawi´c za pomoc¸a koniunkcji, alternatywy i
negacji.

Funkcji boolowskich trzech zmiennych jest:

nie b¸edziemy ich wszystkich wypisywa´c.

Nasuwa si¸e pytanie, czy ka˙zd¸a funkcj¸e

zmiennych mo˙zna przedstawi ´c za pomoc¸a

koniunkcji, alternatywy i negacji. Odpowied´z jest pozytywna. Najpierw przykład. Roz-
patrzmy funkcj¸e boolowsk¸a trzech zmiennych:

x

y

z

f(x,y,z)

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

1

1

1

0

Rozwa˙zmy wyra˙zenie:

Przyjmuje ono warto´s´c 1 tylko dla jednego wektora

, czyli dla podstawienia

,

,

. Podobnie, wyra˙zenie

przyjmuje warto´s´c 1 tylko dla wektora

,

wyra˙zenie

— tylko dla

, a wyra˙zenie

— tylko dla

. Suma tych

wyra˙ze´n:

(1.1)

przyjmuje warto´s´c 1 tylko dla wektorów

,

,

,

, czyli jest

równowa˙zna naszej funkcji

. Wyra˙zenie (1.1) jest w tak zwanej dysjunkcyjnej postaci

normalnej (DNF).

Funkcj¸e

mo˙zna te˙z opisa´c w innej formie. Rozwa˙zmy wyra˙zenie:

Przyjmuje ono warto´s´c 0 tylko dla jednego wektora

, czyli dla podstawienia

,

,

. Podobnie, wyra˙zenie

przyjmuje warto´s´c 0 tylko dla wektora

, wyra˙zenie

— tylko dla

, a wyra˙zenie

— tylko

dla

. Iloczyn tych wyra˙ze ´n:

przyjmuje warto´s´c zero tylko dla wektorów

,

,

, i

, czy-

li jest równowa˙zny funkcji

. Jest to tak zwana koniunkcyjna posta´c normalna (CNF)

funkcji

.

background image

10

Rozdział 1. Funkcje boolowskie

Metod¸e t¸e mo˙zna uogólni´c na funkcje

zmiennych. Wprowadzimy oznaczenie:

Dla dowolnego wektora

, niech

oznacza

-t¸a współrz¸edn¸a wektora .

Rozwa˙zmy teraz wyra˙zenie:

Zauwa˙zmy, ˙ze

jest równe 1 tylko wtedy, gdy podstawimy

, dla ka˙zdego

, czyli dla

. Wida´c z tego, ˙ze:

Jest to dysjunkcyjna posta´c normalna (DNF) funkcji

(sumowanie oznacza tutaj alternatyw¸e).

Aby otrzyma´c posta´c koniukcyjn¸a, zaczynamy od wyra˙zenia:

Zauwa˙zmy, ˙ze

jest równe 0 tylko wtedy, gdy podstawimy:

, dla ka˙zdego

, czyli dla

. Wida´c z tego, ˙ze:

Jest to koniunkcyjna posta´c normalna (CNF) funkcji

.

1.4

Sieci boolowskie

Najpierw przykład. Na rysunku 1.1 przedstawiono pewn¸a sie ´c boolowsk¸a. Jest to graf
skierowany z sze´scioma wierzchołkami (bramkami) i pi¸ecioma kraw¸edziami ł¸acz¸acymi
niektóre bramki. W tym i nast¸epnych przykładach przyjmujemy, ˙ze kraw¸edzie s¸a skiero-
wane od góry do dołu. Bramki maj¸a etykiety. Jedna etykietowana jest stał¸a

, dwie ety-

kietowane s¸a zmiennymi

i

, a trzy etykietowane s¸a operatorami logicznymi,

,

i

.

Bramki oznaczone stałymi lub zmiennymi s¸a bramkami wej´sciowymi i ˙zadne kraw¸edzie
nie prowadz¸a do nich. Bramka

ma jedn¸a kraw¸ed´z wchodz¸ac¸a, a bramki

i

po dwie.

Bramka

jest bramk¸a wyj´sciow¸a, bo nie wychodzi z niej ˙zadna kraw¸ed´z. Z ka˙zd¸a bramk¸a

w sieci mo˙zemy zwi¸aza´c wyra˙zenie boolowskie. W przypadku bramki etykietowanej stał¸a
lub zmienn¸a, tym wyra˙zeniem jest ta stała lub ta zmienna. Z bramk¸a

zwi¸azane jest wy-

ra˙zenie

, z bramk¸a

wyra˙zenie

, a z bramk¸a

wyra˙zenie

.

Ogólnie, sie´c boolowska to graf składaj¸acy si¸e z wierzchołków, nazywanych bramka-

mi, i skierowanych kraw¸edzi ł¸acz¸acych niektóre bramki. Ka˙zda bramka ma swoj¸a etykiet¸e,
któr¸a mo˙ze by´c stała 1 lub 0, zmienna lub operator boolowski. W naszych rozwa˙zaniach
ograniczymy si¸e do czterech operatorów:

,

,

i

, ale mo˙zna rozwa˙za ´c sieci z innym

zbiorem operatorów. Do bramek oznaczonych stałymi lub zmiennymi nie prowadz¸a ˙zadne

background image

1.4. Sieci boolowskie

11

Rysunek 1.1: Przykład sieci boolowskiej

kraw¸edzie, s¸a to bramki wej´sciowe. Bramki oznaczone przez

maj¸a po jednej kraw¸edzi

wej´sciowej, a bramki z pozostałymi operatorami maj¸a po dwie kraw¸edzie wchodz¸ace. W
sieci boolowskiej nie mo˙ze by´c cyklu, czyli ci¸agu kraw¸edzi

takiego ˙ze

, i dla ka˙zdego

spełniaj¸acego warunek

w sieci istnieje

kraw¸ed´z od wierzchołka

do wierzchołka

. Wierzchołek, z którego nie wychodz¸a

˙zadne kraw¸edzie, nazywamy wyj´sciowym. W sieci mo˙ze by´c kilka bramek wyj´sciowych.

Z ka˙zd¸a bramk¸a

w sieci mo˙zemy zwi¸aza´c wyra˙zenie boolowskie

. Robimy to

przez indukcj¸e ze wzgl¸edu na struktur¸e sieci:

Najpierw przypisujemy wyra˙zenia bramkom wej´sciowym. W tym wypadku wyra-

˙zeniem tym jest etykieta bramki

: stała lub zmienna.

Je˙zeli bramka

jest etykietowana negacj¸a

i dochodzi do niej kraw¸ed´z od bramki

oraz bramka

ma ju˙z przypisane wyra˙zenie

, to bramce

przypisujemy

wyra˙zenie

.

Je˙zeli etykiet¸a bramki

jest operator dwuargumentowy

, to do

prowadz¸a kraw¸edzie

od dwóch bramek,

i

. Je˙zeli przypisano ju˙z wyra˙zenia

i

bramkom

i

, to bramce

przypisujemy wyra˙zenie

.

Liczb¸e wszystkich bramek w sieci nazywamy kosztem sieci, a długo´s´c najdłu˙zszej ´scie˙zki
w sieci nazywamy gł¸eboko´sci¸a sieci. Je˙zeli w sieci istnieje bramka wyj´sciowa

, to mo-

˙zemy powiedzie´c, ˙ze sie´c oblicza wyra˙zenie

. Z faktu, ˙ze ka˙zd¸a funkcj¸e boolowsk¸a

mo˙zna przedstawi´c w postaci normalnej, wynika, ˙ze ka˙zd¸a funkcj¸e boolowsk¸a mo˙zna
przedstawi´c za pomoc¸a sieci. Jednak konstrukcja sieci dla funkcji boolowskiej

poprzez

wyznaczanie postaci normalnej zazwyczaj prowadzi do sieci o du˙zym koszcie (liczbie
bramek). Poni˙zej omówiono przykłady sieci o stosunkowo małym koszcie.

background image

12

Rozdział 1. Funkcje boolowskie

1.4.1

Suma (alternatywa) kilku zmiennych

Rysunek 1.2: Sie´c boolowska obliczaj¸aca alternatyw¸e o´smiu zmiennych

Na rysunku 1.2 przedstawiono sie´c obliczaj¸ac¸a alternatyw¸e o´smiu zmiennych:

Gł¸eboko´s´c tej sieci wynosi 3.

Podobnie mo˙zna skonstruowa´c sie´c licz¸ac¸a alternatyw¸e

zmiennych, gdzie

jest

jak¸a´s pot¸eg¸a dwójki. Gł¸eboko´s´c takiej sieci wynosi

. Oczywi´scie tak samo mo˙zemy

zbudowa´c sie´c dla uogólnionej koniunkcji lub operatora

.

1.4.2

Funkcje progowe

Funkcja

gdy liczba jedynek w´sród

jest

równa lub wi¸eksza od

w przeciwnym wypadku,

jest funkcj¸a progow¸a o

zmiennych z progiem

. B¸edziemy zakłada ´c, ˙ze

.

Sieci funkcji progowych dwóch zmiennych s¸a proste, poniewa˙z:

Przedstawiono je na rysunku 1.3.

background image

1.4. Sieci boolowskie

13

Rysunek 1.3: Sieci funkcji progowych dwóch zmiennych

Przypu´s´cmy, ˙ze mamy ju˙z sieci funkcji progowych

zmiennych. Za ich pomoc¸a

mo˙zemy skonstruowa´c funkcje progowe

zmiennych (rysunek 1.4). Zrobimy to

posługuj¸ac si¸e nast¸epuj¸acymi zale˙zno´sciami:

Je˙zeli

, to:

Je˙zeli zestawimy równolegle sieci funkcji progowych, tak jak zrobiono to na rysun-

ku 1.5, to otrzymamy sie´c sortuj¸ac¸a. Sie´c ta bierze na wej´sciu ci¸ag czterech bitów:

i zwraca na wyj´sciu te same bity w porz¸adku nierosn¸acym:

Na przykład gdy na wej´sciu b¸edzie ci¸ag

, wówczas na wyj´sciu pojawi si¸e ci¸ag

.

1.4.3

Sumator

Zastanówmy si¸e teraz, jak skonstruowa´c sumator, czyli sie´c, która b¸edzie dodawa´c dwie
liczby -bitowe:

oraz

i da w wyniku

bitów sumy:

background image

14

Rozdział 1. Funkcje boolowskie

Rysunek 1.4: Sie´c funkcji progowej

Na wej´sciu sumatora mamy

bitów pierwszej liczby,

, ... ,

, oraz

bitów drugiej

liczby,

, ... ,

, a na wyj´sciu

bitów sumy arytmetycznej

, ... ,

. Nasz sumator

na´sladuje szkolne dodawanie opisane w rozdziale o arytmetyce. Najpierw dodaje bity

i

i oblicza ostatni bit sumy

oraz przeniesienie

, które ma by´c dodane do nast¸epnego

bitu. Potem dla kolejnych pozycji

od

do

dodaje bity

,

oraz przeniesienie

z poprzedniej pozycji i oblicza

-ty bit sumy

oraz przeniesienie

do nast¸epnej

pozycji.

Na rysunku 1.6 przedstawiono sie´c HA (ang. half adder — półsumator), która ma na

wej´sciu dwa bity,

i

, a na wyj´sciu — bit sumy

oraz bit przeniesienia

.

Na rysunku 1.7 przedstawiono sie´c FA (ang. full adder), która ma na wej´sciu trzy

bity,

,

oraz

, a na wyj´sciu bit sumy

oraz bit przeniesienia

.

Na rysunku 1.8 przedstawiono schemat konstrukcji sumatora dla

. Podobnie

mo˙zna skonstruowa´c sumator dla dowolnego

. Taki sumator b¸edzie zawierał

background image

1.5. Operacje boolowskie na wektorach

15

Rysunek 1.5: Schemat sieci sortuj¸acej

bramek i miał gł¸eboko´s´c

.

1.5

Operacje boolowskie na wektorach

Operacje boolowskie mo˙zna wykonywa´c tak˙ze na ci¸agach bitów okre´slonej długo´sci, czy-
li na elementach zbioru

Dla dwóch ci¸agów:

oraz

operacje koniunkcji, alternatywy, xor i negacji wykonywane s¸a po współrz¸ednych:

Je˙zeli wektor zerowy

oznaczymy przez 0, a wektor zło˙zony z samych jedy-

nek

— przez 1, to zachodz¸a wszystkie to˙zsamo´sci lematu1.1 oraz to˙zsamo-

´sci (a)—(e) z lematu 1.2. Nie jest natomiast na ogół spełniona własno´s´c (e) lematu 1.2,

background image

16

Rozdział 1. Funkcje boolowskie

Rysunek 1.6: Sie´c obliczaj¸aca HA (półsumator)

poniewa˙z je˙zeli

, to

z działaniami

i

nie jest ciałem (nie ma elementu prze-

ciwnego do

). Zbiór

jest przestrzeni¸a liniow¸a nad ciałem

, z

jako

dodawaniem oraz mno˙zeniem 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¸ezyku Pascal

W j¸ezyku Pascal (i w wielu innych j˛ezykach) operacje boolowskie:

and, or, xor,

neg

, mo˙zna stosowa´c do liczb typu integer lub innych typów całkowitych (byte, shor-

tint, word lub longint). Liczba traktowana jest wtedy jako ci¸ag bitów jej przedstawienia
binarnego. Na przykład:

13 and 6=4

poniewa˙z 13 jest reprezentowane przez:

6 przez:

oraz:

(0000 0000 0000 1101)

and

(0000 0000 0000 0110) =(0000 0000 0000 0100),

a ten ostatni ci¸ag reprezentuje 4 w typie integer. Podobnie zachodzi:

13 or 6=15; 13 xor 6=11; not 0=-1.

background image

1.5. Operacje boolowskie na wektorach

17

Rysunek 1.7: Sie´c obliczaj¸aca FA

1.5.2

Reprezentacja zbioru

Ci¸agi bitów z

mog¸a słu˙zy´c do reprezentacji podzbiorów zbioru

Ci¸ag

nale˙zy traktowa´c jako funkcj¸e charakterystyczn¸a pewnego podzbioru.

Wtedy operacje boolowskie na ci¸agach odpowiadaj¸a operacjom na zbiorach. Alternaty-
wa odpowiada sumie zbiorów, koniunkcja cz¸e´sci wspólnej, a negacja uzupełnieniu zbio-
ru. Operacja xor odpowiada ró˙znicy symetrycznej. Taka reprezentacja ma dwie zalety.
Zajmuje mało pami¸eci i operacje na zbiorach s¸a wykonywane bardzo szybko, poniewa˙z
operacje boolowskie s¸a operacjami niskiego poziomu.

Na przykład je˙zeli chcemy reprezentowa´c w pami¸eci komputera uło˙zenie kamieni w

grze w warcaby na 64-polowej szachownicy, to wystarcz¸a dwie liczby typu longint (po 32
bity). W jednej liczbie reprezentujemy poło˙zenie czarnych, a w drugiej poło˙zenie białych
kamieni (w grze w warcaby kamienie mog¸a le˙ze´c tylko na 32 czarnych polach).

1.5.3

Szyfrowanie w systemie one-pad

Operacje boolowskie na wektorach mo˙zna wykorzysta´c do szyfrowania. W systemie szy-
frowania „one-pad” wiadomo´s´c

i klucz

s¸a ci¸agami bitów

(Je˙zeli wia-

domo´s´c jest ci¸agiem znaków, to kodujemy ka˙zdy znak jako 8 bitów i cały ci¸ag mo˙ze by ´c
traktowany jako ci ˛

ag bitów). Zaszyfrowana wiadomo´s´c ma posta´c:

background image

18

Rozdział 1. Funkcje boolowskie

Rysunek 1.8: Schemat sumatora

HA

FA

FA

FA

Zauwa˙zmy, ˙ze deszyfrowa´c mo˙zna według tego samego wzoru:

poniewa˙z

gdzie 0 reprezentuje wektor zerowy. Zalet¸a tego systemu jest to, ˙ze jest on absolutnie bez-
pieczny. Zróbmy nast¸epuj¸acy eksperyment. Przypu´s´cmy, ˙ze kto´s ma zaszyfrowan¸a wia-
domo´s´c

i chce j¸a odszyfrowa´c przez odgadni¸ecie samej wiadomo´sci

. Zastanówmy si¸e,

dla jakich ci¸agów

istnieje klucz

, taki ˙ze

, czyli inaczej, jakie wiadomo´sci

mog¸a by´c zaszyfrowane w

. Okazuje si¸e, ˙ze dla ka˙zdego ci¸agu

istnieje klucz

, taki ˙ze

. Wystarczy wzi¸a´c

. Mamy wtedy:

background image

1.6. Funkcja parzysto´sci (parity)

19

Wad¸a tego systemu jest to, ˙ze klucze musz¸a by´c tej samej długo´sci co sama wiadomo´s´c i
musz¸a by´c trzymane w sekrecie. Powoduje to kłopoty z przesyłaniem i przechowywaniem
kluczy.

System one-pad mo˙zna stosowa´c w nast¸epuj¸acy sposób: Najpierw przesyła si¸e bezpieczn¸a

poczt¸a (na przykład kuriersk¸a) zapasy kluczy, na przykład notesy z kartkami, gdzie ka˙zda
strona zawiera jeden klucz. Nast¸epnie szyfrowane depesze mog¸a by ´c przesyłane mniej
bezpiecznymi kanałami. Trzeba tylko przestrzega´c zasady, ˙ze jedna kartka mo˙ze by´c u˙zy-
ta tylko raz (st¸ad angielska nazwa systemu). Same klucze powinny by ´c losowane, aby
przeciwnik nie mógł ich odgadn¸a´c.

Łami¸ac szyfry cz¸esto korzysta si¸e z faktu, ˙ze wiadomo´sci, lub ich fragmenty, wyst¸epuj¸a

z ró˙zn¸a cz¸esto´sci¸a (prawdopodobie ´nstwem). Przypu´s´cmy dla prostoty, ˙ze szyfrujemy po-
jedyncze znaki i niech

b¸edzie zbiorem wiadomo´sci (kody ASCII). Dla normal-

nych tekstów (listów) rozkład cz¸esto´sci poszczególnych znaków jest bardzo niejednostaj-
ny. Kody jednych liter wyst¸epuj¸a du˙zo cze´sciej, ni˙z innych, a pewne znaki nie wyst¸epuj¸a
wcale. Gdyby´smy teraz zastosowali jaki´s prymitywny sposób kodowania bez klucza,
gdzie ka˙zdy znak

zawsze jest szyfrowany za pomoc¸a

, to w zaszyfrowanej wia-

domo´sci rozkład cz¸esto´sci b¸edzie podobny (przepermutowany). Najcz¸e´sciej wyst¸epuj¸acy
znak w wiadomo´sci zaszyfrowanej odpowiada najcz¸e´sciej wyst¸epuj¸acemu znakowi w tek-
´scie, itd. Mo˙zna to wykorzysta´c przy łamaniu szyfrów.

Jak zaraz zobaczymy w przypadku szyfrów one-pad tak nie jest. Znaki w zaszyfro-

wanej wiadomo´sci posiadaj¸a rozkład jednostajny, tak jakby´smy losowali kolejne znaki i
dlatego analiza statystyczna jest tutaj bezu˙zyteczna.

Niech

b¸edzie zbiorem wiadomo´sci z dowolnym rozkładem prawdopo-

dobie´nstwa, a

zbiorem kluczy z jednostajnym rozkładem prawdopodobie ´n-

stwa. Losujemy wiadomo´s´c

i klucz

i obliczamy wiadomo´s´c

. Niech

oznacza zdarzenie, ˙ze wylosowano wiadomo´s´c

,

, ˙ze wylosowano

klucz

, a

zdarzenie, ˙ze otrzymano zaszyfrowan¸a wiadomo´s´c

. Zgodnie ze wzorem

na prawdopodobie ´nstwo całkowite mamy

ale

bo tylko dla jednego klucza

,

. Dlatego

1.6

Funkcja parzysto´sci (parity)

Zdefiniujmy funkcj¸e boolowsk¸a parzysto´sci (parity):

background image

20

Rozdział 1. Funkcje boolowskie

Funkcja

jest addytywna, to znaczy:

co wynika z faktu, ˙ze operacja

jest ł¸aczna i przemienna.

jest równa 1, je˙zeli liczba jedynek w ci¸agu

jest nieparzysta, oraz jest równa

0, je˙zeli w ci¸agu

liczba jedynek jest parzysta. Je˙zeli b¸edziemy uto˙zsamia ´c wektor

ze

zbiorem, to

jest równe parzysto´sci mocy zbioru

.

Twierdzenie 1.3

dla dokładnie połowy wej´s´c. To znaczy:

Pierwszy dowód. Twierdzenie wynika z faktu, ˙ze dokładnie połowa podzbiorów zbioru

jest nieparzystej mocy.

Drugi dowód. We´zmy wektor:

który ma jedynk¸e tylko na pierwszej współrz¸ednej. Zdefiniujemy teraz funkcj¸e

:

Funkcja

ł¸aczy elementy ze zbioru

w pary, poniewa˙z je˙zeli

, to

. Rzeczywi´scie:

Ponadto:

a st¸ad wynika, ˙ze dla ka˙zdej pary

,

dokładnie jedna z dwóch liczb

,

jest jedynk¸a, czyli dla dokładnie połowy

,

1.7

Zabezpieczanie danych

Funkcja

jest wykorzystywana do kontroli, czy dane nie zostały przekłamane podczas

przesyłania lub przechowywania. Przypu´s´cmy, ˙ze Małgosia chce przesła´c Jasiowi wiado-
mo´s´c

i chce cho´c troch¸e zabezpieczy´c

przed przekłamaniem. Wtedy Mał-

gosia wysyła

razem z bitem

— jego podpisem. Przypu´s´cmy teraz, ˙ze Ja´s dostał

wiadomo´s´c

z podpisem

. Dla prostoty zakładamy, ˙ze podpis

nie został

przekłamany, na przykład Małgosia i Ja´s mog¸a si¸e umówi´c, ˙ze przesyłaj¸a sobie tylko ta-
kie wiadomo´sci

, dla których

. Aby sprawdzi´c, czy wiadomo´s´c nie została

przekłamana, Ja´s oblicza

i porównuje go z

. Je˙zeli

, to

Ja´s ma pewno´s´c, ˙ze

. Je˙zeli

, to Ja´s przyjmuje, ˙ze

, cho´c

background image

1.7. Zabezpieczanie danych

21

w tym przypadku nie mo˙ze mie´c pewno´sci. Zauwa˙zmy, ˙ze je˙zeli

i

ró˙zni¸a si¸e tylko na

jednym bicie, to

ma tylko jedn¸a jedynk¸e, wi¸ec:

Z drugiej strony:

z czego wynika:

Tak wi¸ec je˙zeli w przesyłanych danych zostanie zmieniony (przekłamany) jeden bit, b¸edzie
mo˙zna to wykry´c porównuj¸ac

z

.

Jest to bardzo stary system kontroli danych. Działa on dobrze, je˙zeli przekłamania s¸a

przypadkowe i prawdopodobie ´nstwo przekłamania dwóch bitów jest du˙zo mniejsze ni˙z
prawdopodobie ´nstwo przekłamania jednego bitu. Funkcja

jest jednak zbyt prosta,

aby zabezpieczy´c dane przed zło´sliwym przekłamywaniem. Wystarczy bowiem zawsze
przekłamywa´c parzyst¸a liczb¸e bitów, aby rzecz si¸e nie wykryła.

Poka˙zemy teraz bardziej zło˙zony sposób zabezpieczania danych przed przekłama-

niem. Dla dowolnego wektora

zdefiniujmy funkcj¸e:

Funkcja

oblicza parzysto´s´c liczby bitów wektora

, ale liczone s¸a tylko bity na

pozycjach wyznaczonych przez wektor

, inaczej —

to parzysto´s´c przekroju

i

.

Funkcja

jest addytywna:

Twierdzenie 1.4 Je˙zeli

oraz

, to dla dokładnie połowy

zachodzi

.

Dowód. Je˙zeli

, to istnieje wektor

z jedn¸a jedynk¸a, taki ˙ze:

Wektor

powinien mie´c jedynk¸e na pozycji, na której

te˙z ma jedynk¸e. Podobnie jak w

dowodzie twierdzenia 1.3, mo˙zemy teraz okre´sli´c funkcj¸e:

która „zlepia” wektory z

w pary. Ponadto mamy:

background image

22

Rozdział 1. Funkcje boolowskie

Z tego wynika, ˙ze:

a st¸ad — ˙ze dla ka˙zdej pary,

,

, dokładnie jedna z dwóch liczb

,

jest jedynk¸a.

Wykorzystuj¸ac funkcje

, mo˙zna zbudowa´c lepszy system zabezpieczania da-

nych. Na pocz¸atku Małgosia i Ja´s zaopatruj¸a si¸e w ci¸ag wylosowanych kluczy:

Klucze te powinny by´c trzymane w sekrecie. Je˙zeli teraz Małgosia chce przesła´c Jasio-
wi wiadomo´s´c

, to bierze kolejny klucz

z ci¸agu

i wysyła

razem z

podpisem

. Ja´s po odebraniu wiadomo´sci

razem z podpisem

(tak

jak poprzednio zakładamy, ˙ze

nie jest przekłamywane) porównuje

i

.

Je˙zeli

, to dla ka˙zdego

:

Je˙zeli za´s

, to

i dla połowy wektorów

mamy:

a wi¸ec dla połowy wektorów

mamy:

Tak wi¸ec z prawdopodobie ´nstwem jedna druga Ja´s wykryje, ˙ze

.

Aby zwi¸ekszy´c to prawdopodobie ´nstwo mo˙zna bra´c kilka kolejnych kluczy

.

Wtedy prawdopodobie ´nstwo, ˙ze w przypadku, gdy

, mamy

,

dla ka˙zdego

, jest równe

.

1.8

Zadania

1. Udowodnij lematy 1.1 i 1.2.

2. Udowodnij, ˙ze to˙zsamo´sci lematu 1.1 s¸a to˙zsamo´sciami w algebrze podzbiorów

zbioru

.

3. Które z poni˙zszych równo´sci s¸a to˙zsamo´sciami 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, ˙ze wszystkie funkcje boolowskie dwóch zmiennych mo˙zna przedsta-

wi´c za pomoc¸a dwóch operatorów, koniunkcji i negacji (lub alternatywy i negacji).

background image

1.9. Problemy

23

5. Udowodnij, ˙ze wszystkie funkcje boolowskie dwóch zmiennych mo˙zna przedsta-

wi´c za pomoc¸a jednego operatora nand (lub nor).

6. Ile funkcji

spełnia równanie

7. Funkcja

przyjmuje warto´s´c 1 tylko dla wektorów

,

oraz

. Przedstaw funkcj¸e

w postaciach normalnych (dysjunkcyjnej i ko-

niunkcyjnej).

8. Narysuj sie´c boolowsk¸a dla funkcji z poprzedniego zadania.

9. Zaprojektuj sie´c odejmuj¸ac¸a od siebie dwie liczby w postaci dwójkowej.

10. Zaprojektuj sie´c, która mno˙zy dwie liczby dwubitowe.

11. Opisz schemat sumatora dla liczb

-bitowych, którego gł¸eboko´s´c jest proporcjo-

nalna do

.

12. Oblicz warto´s´c wyra˙ze´n

x or y, x and y, not x, x xor y

:

a) je˙zeli zmienne

x

i

y

s¸a typu shortint i przyjmuj¸a warto´sci:

x=6, y=-3

,

b) je˙zeli zmienne

x

i

y

s¸a typu byte i przyjmuj¸a warto´sci:

x=6, y=3

.

13. Dany jest wektor

. Dla jakich wektorów

,

?

14. Dane s¸a dwa wektory:

oraz

. Dla jakich wektorów

,

.

1.9

Problemy

1.9.1

System one-pad

System „one-pad” mo˙ze by´c stosowany do ci¸agów liter alfabetu łaci ´nskiego. Wtedy uto˙z-
samiamy litery z liczbami od 0 do 25 i zamiast operacji

stosujemy:

czyli reszt¸e z dzielenia

przez 26. Jak wygl¸ada wtedy operacja deszyfrowania?

Poka˙z, ˙ze 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 praw-
dopodobie ´nstwo wykrycia bł¸edu zwi¸ekszy´c do 0.75.

background image

24

Rozdział 1. Funkcje boolowskie

1.9.3

Posta´c normalna

Udowodnij, ˙ze dla ka˙zdej funkcji funkcji

istnieje dokładnie jeden wektor:

taki ˙ze: