Algèbre de Boole

I/ Transistor à effet de champ

1) Canal N

Un cristal de Si est de type P; on y a créé deux zones de type N. Entre ces deux zones N, on a oxydé le silicium. Puis déposé une couche de cuivre.

Acronymes :

P N N

Tension de grille: 0 V

P N N source drain grille

2) Interrupteur

Dans un circuit numérique, on ne considère que deux niveaux de tension:

Le courant passe De 3 V à 5 V Niveau logique 1 true
Le courant ne passe pas De 0 V à 0,05 V Niveau logique 0 false

Pour ces niveaux, le FET a une résistance pratiquement infinie (niveau 0) ou pratiquement nulle (niveau 1). On utilise donc le circuit simplifié suivant :

II/ Portes logiques

1) Négation

On considère le circuit suivant, avec une résistance entre le MOSFET et le "+" de l'alimentation, et l'autre côté du MOSFET relié à la masse.

5 V 0 V

Lorsque l'interrupteur est ouvert (niveau logique 0), il n'y a pas de courant et la tension de sortie est 5 V; lorsque l'interrupteur est fermé, le MOSFET est en court-circuit et la tension de sortie est nulle. La fonction logique représentée effectue les transformations suivantes: 0→1 et 1→0. C'est la négation logique, que Boole notait 1-x. En effet, voici le tableau de valeurs de cette fonction :

x 0 1
1-x 1 0

En Python, la négation se note not. Par exemple, not True est la même chose que False. Le schéma logique d'une porte "non" est un cercle :

2) Conjonction

On branche deux MOSFETs canal N en série :

Le courant ne passe que si les deux entrées sont au niveau logique 1: On réalise l'opération "et" que George Boole notait x×y. En Python, la conjonction s'écrit and; par exemple True and False donne False... La porte AND se dessine ainsi :

3) Disjonction inclusive

Si on branche deux MOSFETs en parallèle, le courant passe dès que l'un au moins des deux niveaux logiques d'entrée vaut 1 : On réalise alors un "ou inclusif" que George Boole notait "+". Voici la table de cette opération:

+ 0 1
0 0 1
1 1 1

On constate que, pour Boole, 1+1=1; Jean-Claude Van Damme est donc fondamentalement booléen ! Dans l'algèbre de Boole, 1+1 ne peut pas être égal à 2 parce qu'un booléen ne peut être égal qu'à 0 ou 1. Par contre, en Python, True or True donne bien True. La porte OR se dessine ainsi:

4) Ou exclusif

Le "ou exclusif" ou XOR est presque le même que le ou inclusif. Sauf lorsque les deux entrées sont au niveau logique 1, auquel cas la sortie est nulle ("exclusif" veut dire qu'on ne doit pas avoir les deux entrées vraies). Voici la table de cette opération :

0 1
0 0 1
1 1 0

En Python, le "ou exclusif" se note is not. Ainsi, True is not True est False... La porte XOR se dessine ainsi:

III/ Algèbre de Boole

1) Double négation

La négation d'une négation équivaut à une affirmation. Par exemple, not not 2+2==4 revient à 2+2==4 (soit True). Autrement dit, cette porte ne fait que recopier l'entrée sur la sortie: C'est une porte "oui"...

2) Lois de DeMorgan

(hors programme)

La négation échange les conjonctions et disjonctions. Plus précisément:

3) Propriétés algébriques

a. Conjonction

La conjonction se comporte presque comme la multiplication, par exemple 0×x=0, 1×x=x et x×y=y×x...

b. Disjonction

La disjonction se comporte beaucoup comme l'addition, par exemple x+0=x et x+y=y+x. Mais x+1=x ce qui surprend un peu...

c. Distributivité

Comme a×(b+c)=a×b+a×c, on peut développer ou factoriser des expressions booléennes. Mais on peut intervertir les conjonctions et disjonctions: a+(b×c)=(a+b)×(a+c). Par exemple, (1+1==1) or (2+2==4 and 2<3) et (1+1==1 or 2+2==4) and (1+1==1 or 2<3) sont équivalents.

d. Idempotence

Boole a appelé "idempotence" le fait que x×x=x et x+x=x

IV/ Utilisation des booléens

1) Tests

Un test est un algorithme qui ne s'exécute que si un booléen est vrai :

if 2+2==4:
	print("ouf!!!")
else:
	print("Allo Houston nous avons un problème")

Boucles

Une boucle à condition de sortie s'exécute tant qu'un booléen est vrai. Le script suivant ne s'arrête donc jamais :

while 2+2==4:
	print("c'est toujours vrai")

Webographie
Wikipedia