Fonctions et booléens

Fonctions ET, OU, NON.

La fonction Et est une fonction de {0;1}⨯{0;1} dans {0;1} définie par :

  • Et(0,0)=0
  • Et(0,1)=0
  • Et(1,0)=0
  • Et(1,1)=1

La fonction Ou est une fonction de {0;1}⨯{0;1} dans {0;1} définie par :

  • Ou(0,0)=0
  • Ou(0,1)=1
  • Ou(1,0)=1
  • Ou(1,1)=1

La fonction Non est une fonction de {0;1} dans {0;1} définie par :

  • Non(0)=1
  • Non(1)=0

Donner une expression algébrique des fonctions Et, Ou, Non. Définir les fonctions python correspondantes.

Une solution de l'exercice "Fonctions ET, OU, NON".


def Et(a,b) :
	return a*b
	
def Ou(a,b) :
	return a+b-a*b  # penser à P(A union B)=P(A)+P(B)- P(A inter B)
	
def Non(a) :
	 return 1-a
	 
	 
def tableUneVar(f) :
	""" f est une fonction de {0;1} dans {0;1}.
	tableUneVar imprime la table de valeurs de f."""
	for a in (0,1) :
		print("{}({}) = {}.".format(f.__name__,a,f(a)) )
	print()
		
def tableDeuxVar(f) :
	""" f est une fonction de {0;1}x{0;1} dans {0;1}.
	tableDeuxVar imprime la table de valeurs de f."""
	for a in (0,1) :
		for b in (0,1) :
			print("{}({},{}) = {}.".format(f.__name__,a,b,f(a,b)) )
	print()
		
tableUneVar(Non) 
tableDeuxVar(Et)
tableDeuxVar(Ou)

Ce qui donne :

 Non(0) = 1.
 Non(1) = 0.

 Et(0,0) = 0.
 Et(0,1) = 0.
 Et(1,0) = 0.
 Et(1,1) = 1.

 Ou(0,0) = 0.
 Ou(0,1) = 1.
 Ou(1,0) = 1.
 Ou(1,1) = 1.

Fonctions ET, OU, XOR.

a et b étant deux variables de type int, min(a,b) retourne le plus petit des nombres a et b et max(a,b) retourne le plus grand.

La fonction Xor (ou exclusif)) est une fonction de {0;1}⨯{0;1} dans {0;1} définie par :

  • Xor(0,0)=0
  • Xor(0,1)=1
  • Xor(1,0)=1
  • Xor(1,1)=0

Définir les fonctions Et, Ou, Xor à l'aide des fonctions min et max. Donner le code python correspondant.

Une solution de l'exercice "Fonctions ET, OU, XOR".


def Et(a,b) :
	return min(a,b)
	
def Ou(a,b) :
	return max(a,b)
	
def Xor(a,b) :
	 return max(a,b)-min(a,b)
	 
 		
def tableDeuxVar(f) :
	""" f est une fonction de {0;1}x{0;1} dans {0;1}.
	tableDeuxVar imprime la table de valeurs de f."""
	for a in (0,1) :
		for b in (0,1) :
			print("{}({},{}) = {}.".format(f.__name__,a,b,f(a,b)) )
	print()
		
tableDeuxVar(Xor) 
tableDeuxVar(Et)
tableDeuxVar(Ou)
 Xor(0,0) = 0.
 Xor(0,1) = 1.
 Xor(1,0) = 1.
 Xor(1,1) = 0.

 Et(0,0) = 0.
 Et(0,1) = 0.
 Et(1,0) = 0.
 Et(1,1) = 1.

 Ou(0,0) = 0.
 Ou(0,1) = 1.
 Ou(1,0) = 1.
 Ou(1,1) = 1.

Fonction XOR.

a étant une variable de type int ou float, abs(a) est la valeur absolue de a.

Définir la fonction Xor à l'aide de la fonction abs. Donner le code python correspondant.

Une solution de l'exercice "Fonction XOR".


def Xor(a,b) :
	 return abs(a-b)
	 
 		
def tableDeuxVar(f) :
	""" f est une fonction de {0;1}x{0;1} dans {0;1}.
	tableDeuxVar imprime la table de valeurs de f."""
	for a in (0,1) :
		for b in (0,1) :
			print("{}({},{}) = {}.".format(f.__name__,a,b,f(a,b)) )
	print()
		
tableDeuxVar(Xor) 
 Xor(0,0) = 0.
 Xor(0,1) = 1.
 Xor(1,0) = 1.
 Xor(1,1) = 0.

Fonction Equiv.

La fonction Equiv (équivalence) est une fonction de {0;1}⨯{0;1} dans {0;1} définie par :

  • Equiv(0,0)=1
  • Equiv(0,1)=0
  • Equiv(1,0)=0
  • Equiv(1,1)=1

Donner une expression algébrique de la fonction Equiv. Donner un code python de cette fonction.

Une solution de l'exercice "Fonction Equiv".

On remarque que Equiv(a,b)=Non(Xor(a,b)).

On a donc Equiv(a,b)= 1-Xor(a,b).


def Equiv(a,b) :
	 return 1-abs(a-b)
	 
 		
def tableDeuxVar(f) :
	""" f est une fonction de {0;1}x{0;1} dans {0;1}.
	tableDeuxVar imprime la table de valeurs de f."""
	for a in (0,1) :
		for b in (0,1) :
			print("{}({},{}) = {}.".format(f.__name__,a,b,f(a,b)) )
	print()
		
tableDeuxVar(Equiv) 
Equiv(0,0) = 1.
Equiv(0,1) = 0.
Equiv(1,0) = 0.
Equiv(1,1) = 1.

Fonction Impliq.

La fonction Impliq (implication, si ... alors...) est une fonction de {0;1}⨯{0;1} dans {0;1} définie par :

  • Impliq(0,0)=1
  • Impliq(0,1)=1
  • Impliq(1,0)=0
  • Impliq(1,1)=1

  1. Vérifier que pour tous booléens a et b, on a Impliq(a;b)=non(a) ou b (c'est à dire Ou(Non(a);b) avec les fonctions précédemment définies).
  2. Donner un code python de cette fonction Impliq.
  3. Écrire une fonction python prenant en entrée deux fonctions de {0;1}⨯{0;1} dans {0;1} et retournant True ou False suivant que les deux fonctions données en argument sont égales ou non. Utiliser cette fonction pour confirmer l'égalité des fonctions Impliq et (a;b) ⟼ Ou(Non(a);b).

Une solution de l'exercice "Fonction Impliq".

Pour vérifier l'égalité de deux fonctions de {0;1}⨯{0;1} dans {0;1}, il suffit de vérifier que les quatre couples (0;0), (0;1); (1;0); (1;1) ont la même image par les deux fonctions.

Dressons pour cela la table des valeurs de la fonction définie par f(a;b)=Ou(Non(a);b) :

abnon(a)non(a) ou b
0011
0111
1000
1101

Cette table est bien identique à celle qui définit notre fonction Impliq.

On peut également utiliser python pour dresser cette table :


def Ou(a,b) :
	return max(a,b)
	
def Non(a) :
	return 1-a
	
def Impliq1(a,b) :
	""" fonction Impliq définie à partir
	des fonctions Ou et Non."""
	return Ou(Non(a), b)
	
def tableDeuxVar(f) :
	""" f est une fonction de {0;1}x{0;1} dans {0;1}.
	tableDeuxVar imprime la table de valeurs de f."""
	for a in (0,1) :
		for b in (0,1) :
			print("{}({},{}) = {}.".format(f.__name__,a,b,f(a,b)) )
	print()
		
	
	
tableDeuxVar(Impliq1) 

Ce qui donne :

Impliq1(0,0) = 1.
Impliq1(0,1) = 1.
Impliq1(1,0) = 0.
Impliq1(1,1) = 1.

Vérification à l'aide de python de l'égalité de Impliq et (a;b) ⟼ Ou(Non(a);b) :


def Ou(a,b) :
	return max(a,b)
	
def Non(a) :
	return 1-a
	
def Impliq1(a,b) :
	""" fonction Impliq définie à partir
	des fonctions Ou et Non."""
	return Ou(Non(a), b)
	
def Impliq2(a,b) :
	""" Définition de l'énoncé de la fonction
	Impliq."""
	if (a,b)==(0,0) : return 1
	if (a,b)==(0,1) : return 1
	if (a,b)==(1,0) : return 0
	if (a,b)==(1,1) : return 1
	
def EgaliteFonctionsDeuxVar( f, g) :
	""" retourne True ssi les fonctions f et g 
	(fonctions de B*B dans B)
	sont égales."""
	for a in (0,1) :
		for b in (0,1) :
			if f(a,b)!=g(a,b) :
				return False
	return True
	
print(EgaliteFonctionsDeuxVar( Impliq1, Impliq2) )