A Boole algebra a nevét George Boole angol matematikus után kapta. Felfedezése sokáig homályban maradt, azonban halála után 70 évvel rátalált Claude Shannon, aki rámutatott arra, hogy a Boole algebra segítségével optimalizálni lehet az elektromechanikus relék rendszerének tervezését. A számítástechnika fejlődésével Boole felfedezése még nagyobb jelentőséget kapott.
A Boole algebra logikai műveleteket definiál bináris számjegyeken. Ezen műveletek közül a legegyszerűbb és az egyetlen egyváltozós: a tagadás, negáció. Angolul a szakirodalomban NOT műveletnek nevezik, melynek lényege, hogy a bemeneti érték inverzét fogja eredményül adni.
| Bemenet | NOT |
|---|---|
| Hamis | Igaz |
| Igaz | Hamis |
A műveletek leírása igazságtáblázatokkal történik, amelyben fel van tüntetve az összes lehetséges bemeneti kombinációhoz a kimenet értéke. Két bemenet esetén 16 különböző művelet definiálható, azonban ezek közül három kombinációjával az összes többi megvalósítható. Ezeket nevezzük a Boole algebra alapműveleteinek. Ezek a NEM (NOT), ÉS (AND) és VAGY (OR) műveletek.
Az ÉS művelet akkor fog igaz eredményt adni, ha mind a két bemeneti változó értéke igaz. Igazságtáblázata:
| Bemenet1 | Bemenet2 | AND |
|---|---|---|
| Hamis | Hamis | Hamis |
| Hamis | Igaz | Hamis |
| Igaz | Hamis | Hamis |
| Igaz | Igaz | Igaz |
A VAGY művelet akkor fog igaz értéket adni, ha a bemeneti változók közül bármelyik igaz.
| Bemenet1 | Bemenet2 | OR |
|---|---|---|
| Hamis | Hamis | Hamis |
| Hamis | Igaz | Igaz |
| Igaz | Hamis | Igaz |
| Igaz | Igaz | Igaz |
Ezen műveleteket feltételes utasításokban, logikai típuson (bool) is tudjuk alkalmazni, vagy számokon. Ha számokon alkalmazzuk őket, akkor a két szám minden egyes bitjére helyiértékenként egyenként lefuttatjuk az adott bináris műveletet és az így kialakuló szám és az így kialakuló új szám lesz a művelet végső eredménye. Számokon van még egy művelet, amit szokás alkalmazni. Ez a KIZÁRÓ VAGY. A KIZÁRÓ VAGY művelet igaz értéket csak akkor ad, ha a bemeneti változók értéke nem azonos. Ez és az inverze az EKVIVALENCIA logikai típusok esetén nincs implementálva, pontosabban más néven: Egyenlőség és nem egyenlőség.
| Bemenet1 | Bemenet2 | XOR |
|---|---|---|
| Hamis | Hamis | Hamis |
| Hamis | Igaz | Igaz |
| Igaz | Hamis | Igaz |
| Igaz | Igaz | Hamis |
Mivel algebráról beszélünk, az alapműveletek között némi gondolkodással egy azonossági rendszer definiálható. Ezen azonosságokat 6 fő csoportba szokták sorolni, valamint az azonosságokat szokás egy sorszámmal is jelölni.
Azonban még mielőtt algebráról beszélnénk, egy jelölés rendszert kell bevezetnünk. C# esetén egész számok esetén a következő szimbólumok vannak hozzárendelve a logikai műveletekhez:
| Szimbólum | Művelet |
|---|---|
| ~ | NOT |
| & | AND |
| | | OR |
| ^ | XOR |
Logikai típus (bool) esetén a következő szimbólumok használatosak:
| Szimbólum | Művelet |
|---|---|
| ! | NOT |
| && | AND |
| || | OR |
| != | Nem egyenlő |
| == | Egyenlő |
A logikai típus minden modern típusos programozási nyelvben megtalálható. A klasszikus C esetén még nem tartották külön típusnak és lényegében úgy kezelték, hogy ami nem 0 értékű, az igaz. Ez problémákat tudott okozni, ezért már a C++ első változataiban felbukkant a bool, mint külön típus, ami a program vezérlési elágazások biztonságos és jó leírására szolgált.
Az azonosságokat szokás egy-egy sorszámmal is jelölni. Az azonosságok jelölésénél a bool típus jelöléseit alkalmaztam, de ettől függetlenül egész számok esetén is helytállnak az azonosságok, de a műveletek bitenként alkalmazódnak, így az azonosságok is egy bitre értendőek.
Az első azonossági csoport az igaz és hamis konstans értékek és a változók között fennálló azonosságokat tartalmazza:
A || false == AA || true == trueA && false == falseA && true == A
A második azonossági csoport a ponált (nem tagadott) és a negált változó azonosságait tartalmazza:
A || !A == trueA || A == AA && !A == falseA && A == A!!A == A
A harmadik csoport a műveletek közötti kommutativitásra (felcserélhetőség) vonatkozik:
A || B == B || AA && B == B && A
A negyedik csoportba az asszociativitás (csoportosíthatóság) azonosságai tartoznak:
A || B || C == (A || B) || C == A || (B || C)A && B && C == (A && B) && C == A && (B && C)
Az ötödik csoportba a disztributivitás (kiemelhetőség) azonosságai tartoznak:
A && (B || C) == (A && B) || (A && C)A || (B && C) == (A || B) && (A || C)
A hatodik csoportba a De Morgan-azonosságok tartoznak. Ezek teljes kifejezések negálására vonatkoznak:
!(A || B) == !A && !B!(A && B) == !A || !B
Az ismertetett 17 azonosságon kívül érdemes még megjegyezni a következőket:
A || (!A && B) == A || BA && (!A || B) == A && BA || (A && B) == AA && (A || B) == A