• Aucun résultat trouvé

TD : Ensembles récursivement énumérables

N/A
N/A
Protected

Academic year: 2022

Partager "TD : Ensembles récursivement énumérables "

Copied!
4
0
0

Texte intégral

(1)

TD : Ensembles récursivement énumérables

Exercice 1 (corrigé ci-dessous). Soit une fonction f calculable, un ensemble B, et son image réciproque par f, A :

A = f -1 (B) = { x | f (x) appartient à B } 1. A-t-on : ( B décidable ) implique ( A décidable ) ?

2. Montrer que ( B récursivement énumérable ) implique ( A récursivement énumérable ).

Exercice 2 (corrigé ci-dessous).

1. Soit E un ensemble récursivement énumérable, énuméré par une fonction calculable f strictement croissante ; montrer que E est décidable.

2. En déduire que tout ensemble récursivement énumérable infini contient un ensemble décidable infini.

Exercice 3 (corrigé ci-dessous). Soit E l'ensemble Val ( f ), où f est calculable partielle. Montrer que E est récursivement énumérable, c'est-à-dire construire g calculable totale telle que E = Val ( g ).

Conseil : utiliser le temps.

Exercice 4 (corrigé ci-dessous). Montrer que tout ensemble E récursivement énumérable et infini peut être énuméré sans répétition, c'est-à-dire construire g calculable et injective telle que E = Val ( g ).

Exercice 10 (corrigé ci-dessous). Soient A et B deux ensembles décidables quelconques.

1. Est-on sûr que le complémentaire de A est décidable ? 2. Est-on sûr que l'union de A et B est décidable ?

3. Est-on sûr que l'intersection de A et B est décidable ?

Soient A et B deux ensembles récursivement énumérables quelconques.

1. Est-on sûr que le complémentaire de A est récursivement énumérable ? 2. Est-on sûr que l'union de A et B est récursivement énumérable ?

3. Est-on sûr que l'intersection de A et B est récursivement énumérable ? Exercice 11 (corrigé ci-dessous).

1. Soit A un ensemble décidable de couples d'entiers (x, y) ; montrer que la (première) projection de A, à savoir :

E = { x | il existe y tel que (x, y) appartient à A } est récursivement énumérable.

2. Montrer que réciproquement tout ensemble récursivement énumérable est la projection d'un ensemble décidable.

Exercice 20 (corrigé ci-dessous). (Devoir 1999). A tout ensemble d'entiers A on associe deux ensembles de procédures, notés P ( A ) et Q ( A ), et définis par :

p appartient à P ( A ) si et seulement si l'intersection de Val ( p ) et de A est non vide ; p appartient à Q ( A ) si et seulement si Val ( p ) est inclus dans A.

Note : Val ( p ) est une abréviation pour Val ( f ), où f désigne la fonction N N calculée par p.

Chapitre 4 : Ensembles récursivement énumérables

(2)

1. Soit B le complémentaire de A ; comparer P ( A ) et Q ( B ).

2. Quels sont les ensembles décidables A tels que P ( A ) soit récursivement énumérable ? 3. Quels sont les ensembles décidables A tels que Q ( A ) soit récursivement énumérable ?

Solutions

Exercice 1 (énoncé ci-dessus).

1. C'est vrai si f est totale : pour décider si x appartient à A, il suffit de tester si f (x) appartient à B.

Sinon on peut simplement affirmer que A est récursivement énumérable, comme ci-dessous.

2. B = domaine ( g ), donc A = domaine ( g • f ).

Exercice 2 (énoncé ci-dessus).

1. Si f est strictement croissante, la fonction caractéristique de E = Val ( f ) est calculable :

int f (int n) { … } int fc (int x) { int n, y;

for (n = 0; ; n++) { y = f(n);

if (x == y) return 1;

if (x < y) return 0;

} }

Remarque. Le résultat reste vrai en supprimant le mot "strictement", mais alors il faut distinguer le cas où E est fini, avec les complications qui s'en suivent.

2. Pour extraire un ensemble décidable infini d'un ensemble récursivement énumérable infini, énuméré par f, il suffit d'extraire une sous-suite strictement croissante de la suite des f(n) :

int f (int n) { … } int y, max = 0;

for (n = 0; ; n++) { y = f(n);

if (max < y) { max = y;

afficher f(n);

} }

L'ensemble A énuméré par cette procédure est manifestement un sous-ensemble de E ; si E est infini, il n'est pas borné, donc on passe une infinité de fois "à l'intérieur" du if, et A est infini ; enfin, par construction, A est énuméré en ordre croissant, donc est décidable.

Exercice 3 (énoncé ci-dessus). Algorithme d'énumération en version abrégée :

pour tout couple (x, t)

si h (f, x, t) "afficher" f(x)

Exercice 4 (énoncé ci-dessus). Algorithme d'énumération en version abrégée :

int f (int n) { … } int nouveau (int n) { int i, x = f(n);

for (i = 0; i < n; i++) if (x == f(i)) return 0;

return 1;

}

(3)

for (n = 0; ; n++)

if (nouveau (n)) afficher f(n);

Remarque : si l'on modifie la procédure nouveau pour qu'elle filtre les éléments supérieurs à tous les précédents (au lieu des éléments différents de tous les précédents), en remplaçant le test d'égalité (==) par un test de comparaison (<=) :

int nouveau (int n) { int i, x = f(n);

for (i = 0; i < n; i++) if (x <= f(i)) return 0;

return 1;

}

l'ensemble A énuméré par cet algorithme est un sous-ensemble de E énuméré en ordre (strictement) croissant, comme dans l'exercice 2 (A est décidable, et si E est infini, A l'est aussi).

Exercice 10 (énoncé ci-dessus). Les réponses (positives) à la première partie sont évidentes, et permettent de réviser les rapports entre opérateurs ensemblistes et opérateurs logiques.

Non, le complémentaire d'un ensemble récursivement énumérable n'est pas forcément récursivement énumérable, c'est l'objet de la section 3 du cours. Voici une procédure d'énumération de l'union de deux ensembles énumérés respectivement par f et g :

int f (int n) { … } int g (int n) { … } int enumUnion (int n) { if (n % 2 == 0)

return f (n / 2);

else

return g (n / 2);

}

Pour l'intersection, le plus simple est de calculer la fonction semi-caractéristique, par exemple :

int scA (int x) { … } int scB (int x) { … }

int scIntersection (int x) { int y = scA(x);

return scB(x);

}

L'intersection de A et B est donc semi-décidable, et par conséquent récursivment énumérable.

Enumérer efffectivement l'intersection est plus délicat qu'énumérer l'union, on peut procéder comme suit :

1. initialiser n à une valeur arbitraire, par exemple 100 ;

2. calculer (et afficher) l'intersection des ensembles finis { f (1), f (2), … f (n) } et { g (1), g (2), … g (n) } ;

3. incrémenter n (par exemple en multipliant n par 2), et retourner à l'étape précédente.

Chaque élément de Val ( f ) Val ( g ) est énuméré une infinité de fois par cet algorithme…

Exercice 11 (énoncé ci-dessus).

1. Voici une procédure (en format abrégé) qui énumère les éléments de E :

pour tout couple (x, y) si (x, y) appartient à A "afficher" x

(4)

Ou bien voici une procédure qui calcule la fonction semi-caractéristique de E, en utilisant la fonction caract

int (int x, int y) { … } int sc (int x) {

int y;

for (y = 0; ; y++)

if ( (x, y) ) return 1;

}

2. E est énuméré par une fonction calculable totale f, c'est donc la (seconde) projection du graphe G de G = { (n, f (n) ) | n appartient à N }

et G est décidable : tester si (x, y) appartient à G équivaut à tester si y = f (x) (si f n'est pas totale, ce test peut boucler, mais ici Exercice 20 (énoncé ci-dessus).

1. p appartient à P ( A ) si et seulement si il existe x tel que p (x) appartient à A ; donc par négation p appartient au compl 2. Si A est décidable, P ( A ) est récursivement énumérable ; voici un algorithme qui l'énumère :

pour tout triplet (p, x, t) si h (p, x, t)

si p(x) appartient à A afficher p

3. Si A est décidable, et si Q ( A ) est récursivement énumérable, son complémentaire aussi, d'après les deux questions pr

Q ( A ) n'est jamais vide, même si A est vide ; dans ce cas Q ( A ) est l'ensemble des procédures qui calculent la fonction Q ( N ) contient toutes les procédures, N est donc le seul ensemble décidable qui réponde à la question.

Références

Documents relatifs

Le but du probl`eme ci-dessous est de d´efinir une classe de mots (les grands Dycks) de deux mani`eres (par une condition num´erique, par une grammaire) et de donner

autour de 1930, les logiciens (Church, Gödel, etc.) ont défini un modèle de calcul, où les fonctions calculables sont définies par application répétée de

Dans cette nouvelle écriture, l'ensemble d'indices ρ(I ) est une partie de N alors que I ne l'est pas forcément au départ.. Quitte à remplacer la première écriture de U par la

[r]

Si ABCD est un rectangle alors AC=BD est une implication vraie (tous les rectangles ont des diagonales de même longueur). D'une façon générale, le fait qu'une proposition soit

Décrire l’organisation spatiale de cette cité et préciser la fonction des lieux que vous connaissez.. Aux Ve et

La diagonale AC traverse des carrés et délimite à l'intérieur de certains d'entre eux des petits triangles rectangles (voir un exemple supra) dont la somme des périmètres est un

La puissance nécessaire pour pomper le sang à travers cette artère est très faible devant le métabolisme (qui est de 10 W ).. IV- On a 3