L'expression logique ( a && b )
(les deux a
et b
ont des valeurs booléennes) peut être écrite comme !(!a || !b)
, par exemple. Cela ne veut-il pas dire que &&
c'est "inutile"? Est-ce à dire que toutes les expressions logiques ne peuvent être faites qu'en utilisant ||
et !
?
logic
logical-operators
JakeTheSnake
la source
la source
A and B == !A nor !B == !(!A or !B)
. De mêmeA or B == !A nand !B == !(!A and !B)
. Évidemment, passer la même valeur aux deux entrées d'un NAND ou d'un NOR donnera le même résultat qu'un simple NOT. XOR et XNOR sont également possibles mais plus complexes. Voir le théorème de De MorganRéponses:
Oui, comme l'ont souligné les autres réponses, l'ensemble des opérateurs comprenant
||
et!
est fonctionnellement complet . Voici une preuve constructive de cela, montrant comment les utiliser pour exprimer les seize connecteurs logiques possibles entre les variables booléennesA
etB
:A || !A
!A || !B
!B || A
!A || B
A || B
!B
!A
!(!A || B) || !(A || !B)
!(!A || !B) || !(A || B)
A
B
!(A || B)
!(!A || B)
!(!B || A)
!(!A || !B)
!(A || !A)
Notez que NAND et NOR sont en eux-mêmes fonctionnellement complets (ce qui peut être prouvé en utilisant la même méthode ci-dessus), donc si vous voulez vérifier qu'un ensemble d'opérateurs est fonctionnellement complet, il suffit de montrer que vous pouvez exprimer NAND ou NOR avec ça.
Voici un graphique montrant les diagrammes de Venn pour chacun des connecteurs répertoriés ci-dessus:
[ source ]
la source
||
plutôt que|
) ni des effets secondaires (pertinents car l'expansion de true, false, XOR et XNOR évalue leurs arguments plus de fois que la constante ou l'opérateur d'origine).!(!A || !B)
ont le même nombre de court-circuits et d'évaluations queA && B
). Je ne pense pas que vous puissiez le faire pour XOR et XNOR sans constructions supplémentaires (par exemplea ? !b : b
), et true ou false n'est pas un problème si vous pouvez enregistrer des valeurs, car vous pouvez démarrer votre programme en définissanttrue
et enfalse
utilisant une variable booléenne factice.Ce que vous décrivez est l'exhaustivité fonctionnelle .
Ceci décrit un ensemble d'opérateurs logiques qui sont suffisants pour "exprimer toutes les tables de vérité possibles". Votre ensemble d'opérateurs Java, {
||
,!
}, est suffisant; il correspond à l'ensemble {∨, ¬}, qui est répertorié dans la section "Ensembles d'opérateurs fonctionnellement minimaux".L'ensemble de toutes les tables de vérité signifie tous les ensembles possibles de 4 valeurs booléennes qui peuvent être le résultat d'une opération entre 2 valeurs booléennes. Puisqu'il y a 2 valeurs possibles pour un booléen, il y a 2 4 ou 16 tables de vérité possibles.
Voici un tableau des numéros de table de vérité (0-15), les combinaisons
||
et!
qui le produisent, et une description.Il existe de nombreux autres ensembles fonctionnellement complets, y compris les ensembles d'éléments {NAND} et {NOR}, qui n'ont pas d'opérateurs uniques correspondants en Java.
la source
Oui.
Toutes les portes logiques peuvent être réalisées à partir de portes NOR.
Puisqu'une porte NOR peut être faite à partir d'un NON et d'un OU, le résultat suit.
la source
[citation-needed]
marque juste là.Prenez le temps de lire sur les lois de DeMorgan si vous le pouvez.
Vous y trouverez la réponse dans la lecture, ainsi que des références aux preuves logiques.
Mais essentiellement, la réponse est oui.
EDIT : Pour explicitation, mon point est que l'on peut logiquement déduire une expression OR d'une expression AND, et vice-versa. Il existe également d'autres lois pour l'équivalence et l'inférence logiques, mais je pense que celle-ci est tout à fait appropriée.
EDIT 2 : Voici une preuve via la table de vérité montrant l'équivalence logique de l'expression suivante.
Loi de DeMorgan:
!(!A || !B) -> A && B
la source
NAND et NOR sont universels, ils peuvent être utilisés pour créer n'importe quelle opération logique que vous voulez n'importe où; d'autres opérateurs sont disponibles dans les langages de programmation pour faciliter l'écriture et la lisibilité des codes.
Toutes les opérations logiques qui doivent être câblées en circuit sont également développées en utilisant des circuits intégrés NAND ou NOR uniquement.
la source
Oui, selon l'algèbre booléenne, toute fonction booléenne peut être exprimée comme une somme de minterms ou un produit de maxterms, qui est appelé forme normale canonique . Il n'y a aucune raison pour laquelle une telle logique ne pourrait pas être appliquée aux mêmes opérateurs utilisés en informatique.
https://en.wikipedia.org/wiki/Canonical_normal_form
la source