Opérations logiques
Il existe une équivalence entre les opérations logiques et les opérations sur les ensembles. Prenons par exemple l'instruction logique suivante :
"Il pleut implique qu'il y a des nuages dans le ciel."
Il n'y aurait pas de pluie sans nuages. On peut prendre deux ensembles de lieux, « l'ensemble des endroits où il pleut » et « l'ensemble des endroits où il y a des nuages », et montrer que le premier ensemble est strictement inclus dans le second ensemble.
De même en informatique, l'inférence de type repose sur des opérations logiques entre les types et un type peut être considéré comme l'ensemble de tous les objets appartenant à ce type (s'il existe au moins un objet de ce type, vous pouvez dire que le type est peuplé sinon il est vide. )
L'inférence de type utilise des preuves logiques et vise à trouver des types peuplés , puisque les programmes manipulent des objets dont on veut trouver le type.
En raison de l'équivalence ci-dessus, je vais illustrer les opérations logiques en utilisant des ensembles dans l'esprit de Boole . Chaque opération sur les ensembles sera exprimée à l'aide d'un connecteur logique et d'une notation logique.
Pour la discussion, j'utiliserai deux intervalles sur des nombres entiers A et B comme ensembles d'entrée.
R : 0…10
B : 5…18
Complément
Connecteur : non
Le résultat contient tous les éléments qui ne sont pas dans A .
¬A : …-1, 11…
syndicat
Connecteur : ou
Le résultat contient tous les éléments qui sont dans A ou B .
A ∨ B : 0…18
Intersection
Connecteur : et
Le résultat ne contient que les éléments qui sont à la fois dans A et dans B .
A ∧ B : 5…10
Union disjonctive
Connecteur : autre (xor)
Le résultat contient les éléments qui sont uniquement dans A sinon sont uniquement dans B .
A ⊕ B : 0…4, 11…18
Implication
Connecteur : uniquement si (implique)
Le résultat contient les éléments qui sont dans A seulement s'ils sont dans B .
C'est un peu plus difficile à comprendre que les opérations précédentes. Il est facile de voir que le résultat contient l'intersection des deux ensembles : ses éléments sont dans A et dans B , ce qui satisfait la condition.
Mais qu'en est-il du reste de B ?
Vous pouvez voir que les éléments de B en dehors de l'intersection ne sont pas dans A . Est-ce à dire qu'ils remplissent la condition ? Cela dépend de la façon dont vous le lisez :
- Le résultat contient les éléments qui sont dans A ( seulement s'ils sont dans B ).
- Le résultat contient les éléments (qui ne sont dans A que s'ils sont dans B ).
A ⇒ B : …-1, 5…
Un autre exemple serait "Il ne pleut que s'il y a des nuages". S'il existe un endroit où il pleut mais où il n'y a pas de nuages, la condition n'est pas satisfaite . La phrase ne met pas de condition sur les endroits où il ne pleut pas, donc ils peuvent être nuageux ou non, soit c'est bien.
Différence
Connecteur : mais pas
Le résultat ne contient que les éléments qui sont dans A mais pas dans B .
Fait intéressant, il n'y a pas de lecture spéciale cette fois mais la différence est en fait le complément de l'implication ! Notez également que l'ordre de A et B est important.
A - B : 0…4
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































