Fonctions récursives primitives et récursives partielles

Documents pareils
Continuité en un point

Université Paris-Dauphine DUMI2E 1ère année, Applications

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

3 Approximation de solutions d équations

Résolution d équations non linéaires

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Chapitre 2. Eléments pour comprendre un énoncé

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Feuille TD n 1 Exercices d algorithmique éléments de correction

Chapitre 2 Le problème de l unicité des solutions

Théorème du point fixe - Théorème de l inversion locale

Les arbres binaires de recherche

L exclusion mutuelle distribuée

EXERCICE 4 (7 points ) (Commun à tous les candidats)

Présentation du langage et premières fonctions

Correction du baccalauréat S Liban juin 2007

Les indices à surplus constant

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Simulation de variables aléatoires

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

V- Manipulations de nombres en binaire

Calcul fonctionnel holomorphe dans les algèbres de Banach

1 Définition et premières propriétés des congruences

I. Ensemble de définition d'une fonction

Calcul différentiel sur R n Première partie

Image d un intervalle par une fonction continue

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

DOCM Solutions officielles = n 2 10.

Correction de l examen de la première session

Probabilités sur un univers fini

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

Comparaison de fonctions Développements limités. Chapitre 10

Exo7. Limites de fonctions. 1 Théorie. 2 Calculs

Espérance conditionnelle

Sur certaines séries entières particulières

I - PUISSANCE D UN POINT PAR RAPPORT A UN CERCLE CERCLES ORTHOGONAUX POLES ET POLAIRES

Théorèmes de Point Fixe et Applications 1

Probabilités sur un univers fini

Fiche PanaMaths Calculs avec les fonctions sous Xcas

Premiers pas avec Mathematica

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation linéaire et Optimisation. Didier Smets

NOMBRES COMPLEXES. Exercice 1 :

Optimisation des fonctions de plusieurs variables

Équations non linéaires

Suites numériques 4. 1 Autres recettes pour calculer les limites

a et b étant deux nombres relatifs donnés, une fonction affine est une fonction qui a un nombre x associe le nombre ax + b

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Introduction au pricing d option en finance

Suites numériques 3. 1 Convergence et limite d une suite

Continuité d une fonction de plusieurs variables

Cours d Analyse. Fonctions de plusieurs variables

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

STAGE IREM 0- Premiers pas en Python

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Logique : ENSIIE 1A - contrôle final

Calcul différentiel. Chapitre Différentiabilité

Correction du Baccalauréat S Amérique du Nord mai 2007

IV- Equations, inéquations dans R, Systèmes d équations

Relation d ordre. Manipulation des relations d ordre. Lycée Pierre de Fermat 2012/2013 Feuille d exercices

I. Polynômes de Tchebychev

Résolution de systèmes linéaires par des méthodes directes

Les chaînes de caractères

ASR1 TD7 : Un microprocesseur RISC 16 bits

Examen d informatique première session 2004

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Méthodes de quadrature. Polytech Paris-UPMC. - p. 1/48

Fonctions homographiques

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Logique. Plan du chapitre

Optimisation Discrète

La fonction exponentielle


Fonctions de plusieurs variables et changements de variables

Exercices - Polynômes : corrigé. Opérations sur les polynômes

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Items étudiés dans le CHAPITRE N5. 7 et 9 p 129 D14 Déterminer par le calcul l'antécédent d'un nombre par une fonction linéaire

3. Conditionnement P (B)

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Une réponse (très) partielle à la deuxième question : Calcul des exposants critiques en champ moyen

Développements limités, équivalents et calculs de limites

Calcul intégral élémentaire en plusieurs variables

Java Licence Professionnelle CISII,

I. Introduction aux fonctions : les fonctions standards


Exercices sur les interfaces

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Fonctions de plusieurs variables

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

CCP PSI Mathématiques 1 : un corrigé

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Moments des variables aléatoires réelles

Intégration et probabilités TD1 Espaces mesurés Corrigé

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Transcription:

Institut Galilée Calculabilité Année 2008-2009 L3 INFO 1 TD de calculabilité, fonctions récursives primitives Fonctions récursives primitives et récursives partielles Exercice 1. Montrer que les fonctions suivantes sont récursives primites. N N 1. la fonction Z ; x 0 2. les fonctions constantes égales à 3 d arité 0, 1 et 2 ; 3. la fonction addition : (x, y) x + y ; 4. la fonction multiplication : (x, y) x y ; 5. la fonction exposant : (x, y) x y = x y ; x 1 si x > 0 6. la fonction prédecesseur Pred : x 0 sinon ; 7. la fonction différence tronquée Diff : (x, y) x y = Exercice 2. Montrer que le prédicat x > y est récursif primitif. x y si x y 0sinon ; Exercice 3. Montrer que les constructeurs suivants sont récursifs primitifs (c est à dire que s ils sont utilisés sur des fonctions récursives primitives du bon type alors les fonctions qu ils construisent sont bien récursives primitives). 1. Pour k N, si P est un prédicat d arité k, f et g sont des fonctions d arité k, alors Si(P, f, g) est la fonction h d arité k telle que lorsque P est vrai h = f et lorsque P est faux h = g. 2. Pour k N, si f est une fonction d arité k + 1 alors Somme(f) est la fonction h d arité k + 1 telle que y h(y, x 1,..., x k ) = f(i, x 1,..., x k ) 3. Pour k N, si f est une fonction d arité k + 1 alors Produit(f) est la fonction h d arité k + 1 telle que y h(y, x 1,..., x k ) = f(i, x 1,..., x k ) Exercice 4. Montrer que les constructeurs suivants sont récursifs primitifs : 1. Minimisation bornée, version TD. Pour k N, si P est un prédicat d arité k +1 alors µ (f) est la fonction h d arité k + 1 telle que Le plus petit i y tel que P (i, x 1,..., x k ) s il en existe un h(y, x 1,..., x k ) = y + 1 sinon. On peut faire l analogie avec le code C suivant : i=0 i=0 1

unsigned h(unsigned y, unsigned x1,..., unsigned xk) int i; for (i = 0; i <= y; i++) if (P(i, x1,..., xk)) break; return i; 2. Minimisation bornée, version cours. Sous les mêmes hypothèses µ t (h) est la fonction d arité k (et non k + 1) telle que Le plus petit i t tel que P (i, x 1,..., x k ) s il en existe un 0 sinon. On peut faire l analogie avec le code C suivant : unsigned h(unsigned x1,..., unsigned xk) int i; for (i = 0; i <= t; i++) /* t constante prédéfinie */ if (P(i, x1,..., xk)) return i; return 0; Minimisation généralisée. Le constructeur de suivant n est pas récursif primitif. Pour k N, si P est un prédicat d arité k + 1 alors µ(p ) est la fonction h d arité k telle que Le plus petit i tel que P (i, x 1,..., x k ) s il en existe un (la divergence) sinon. On ajoute la minimisation générale aux constructeurs des primitives récursives, ceci forme la classe des fonctions récursives (partielles). Exercice 5. Démontrer que les fonctions suivantes sont récursives partielles : 1. la division entière x/y (question subsidiaire : en quels points cette fonction n est pas définie? Pouvez vous l étendre en une fonction récursive primitive?) 2. la racine carré entière x. 3. Le prédicat de disibilité x y (x divise y) est-il récursif partiel? Récursif primitif? 2

Corrigé Correction de l exercice 1. 1. On imagine bien que l on a besoin d utiliser la fonction constante Zero égale à 0 d arité 0. Mais la réponse reste difficile. Cela tient au fait que les projections ne servent à rien pour passer de l arité 1 à l arité 0. On est obligé d utiliser RP qui permet en particulier de mélanger une fonction d arité 0 avec une fonction d arité 2 pour obtenir une fonction d arité 1. On pose Z = RP(f, g). On résout alors en f (d arité 0) et g (d arité 2), le système obtenu à partir de la définition de RP : Z(0) = f() Z(n + 1) = g(n, Z(n)) Comme Z doit être partout nulle, on en déduit que f = Zero et g = p 2 2 conviennent. Ainsi : Z = RP(Zero, p 2 2) ; 2. Une fois la fonction Z (d arité 1) définie, ça va tout seul. La fonction trois d arité 1 est simplement Comp(Succ, Comp(Succ, Comp(Succ, Z))). À l arité 0 il suffit d utiliser Zero au lieu de Z dans l expression précédente. Pour passer à l arité 2 il suffit de précomposer avec une projection : Comp(Succ, Comp(Succ, Comp(Succ, Comp(Z, p 2 1))). 3. L addition se définit récursivement en utilisant le successeur Succ. Notons a la fonction telle que a(x, y) = x + y. On pose a = RP(f, g) où f d arité 1 et g d arité 3 sont à trouver. On obtient par définition de RP le système : a(0, y) = f(y) a(n + 1, y) = g(n, y, a(n, y)) comme a(0, x) doit être égal à 0 + y = y on prend f = p 1 1 (l identité). Comme a(n + 1, y) doit être égal à n + 1 + y et que a(n, y) devrait être égal à n + y il suffit de prendre g telle que g(x, y, z) = Succ(z). On pose donc g = Comp(Succ, p 3 3). Finalement, en posant a = RP(p 1 1, Comp(Succ, p 3 3)) on peut montrer aisément (par ce qui précède), par récurrence sur y, que a(x, y) = x + y. 4. Pour la mulitiplication on raisonne comme précedemment et on trouve que la multiplication peut être définie par la fonction m = RP(Z, Comp(a, p 3 2, p 3 3)). 5. De même pour l exponentiation on trouve e = RP(Comp(Succ, Z), Comp(m, p 3 2, p 3 3)). 6. Pour la fonction prédécesseur on distingue deux cas, selon si x est nul ou non. On applique donc une récursion Pred = RP(f, g) avec f d arité 0 et g d arité 2. On résout : Pred(0) = f() = 0 Pred(Succ(x)) = g(x, Pred(x)) = x Il vient alors que f doit être la fonction Zero et que choisir g = p 2 1 convient. Donc Pred = RP(Zero, p 2 1). 7. Il est plus facile d écrire la différence tronquée en intervertissant les arguments x y = Diff 2 (y, x) pour faire la récursion sur y (le retour à Diff est un jeu de compostion/projections). On pose Diff 2 = RP(f, g) et on résout en f (arité 1) et g (arité 3) : Diff 2 (0, x) = f(x) Diff 2 (n + 1, x) = g(n, x, Diff 2 (n, x)) Il faut f(x) = x donc f = p 1 1. Par ailleurs, on vérifie que x (n + 1) = Pred(x n) ce qui suggère de prendre g(i, j, k) = Pred(k) et ainsi g = Comp(Pred, p 3 3) convient. 3

Correction de l exercice 2. On peut, par exemple, calculer (x y) (x Succ y). D autres solutions sont bien entendu possibles. Correction de l exercice 3. 1. Soit k N, P un prédicat, et f et g deux fonctions, tous récursif primitifs et d arité k. Montrons que h = Si(P, f, g) est récursive primitive. L expression P ( x ) f( x ) + (1 P ( x )) g( x ) vaut f( x ) si P est vrai et g( x ) sinon. Elle est donc égale à h( x ). La fonction h peut donc s écrire comme composition de fonctions récursives primitives, elle est donc elle-même récursiove primitive. Formellement (c est optionnel) : h = Comp(Plus, Comp(Fois, P, f), Comp(Fois, Comp(Diff, Un k, g))) où Un k est la fonction constante égale à 1 d arité k. 2. Soient f une fonction d arité k + 1 et h la fonction Somme(f). Montrons que h est récursive primitive. On cherche f 0 et g récursives primitives telles que h = RP(f 0, g). Il faut et suffit que f( x ) = h(0, x ) = F (0, x ) et que g(y, ( x), h(y, x )) = h(y, ( x)) + F (Succ(y), ( x)). Il suffit de prendre f 0 = Comp(F, Zero k, p k 1,..., p k k) et g = Comp(Plus, p k+2 k+2, Comp(F, Comp(Succ, pk+2 1 ), p k+2 2,..., p k+2 k+1 )). 3. Le produit se traite de la même manière sans difficulté. Correction de l exercice 4. Pour démontrer que h = µ (P ) est récursive primitive on cherche f et g récursives primitives telles que h = RP(f, g). Il faut et il suffit que f( x ) = h(0, 0 si P (0, x ) x ) = 1 sinon g(y, x, h(y, x )) = h(succ(y), x ). Pour f on prend donc P. Considérons maintenant g. Dans l expression précédente, il suffit de faire deux cas. Si y h(y, x ) alors l expression doit valoir h(y, x ) qui est dans ce cas le plus petit i tel que P (i, x ). Sinon, h(y, x ) = y + 1 ce qui signifie que, pour tous les i y, P (i, x ). Dans ce second cas il faut évaluer P (y + 1, x ) et si c est vrai rendre y + 1, sinon rendre y + 2. Le raisonnement par cas et les petits calculs nécessaires sont récursif primitif. On en déduit qu un g convenable peut s écrire comme une fonction primtive (l expression formelle est technique et sans grand intérêt). Une solution alternative (plus simple) est donnée sur la page de wikipedia concernant les fonctions récursives primitives. Pour la fonction µ t la démonstration a été vue en cours et est similaire à ce qu on vient d écrire. Minimisation généralisée. Le constructeur de suivant n est pas récursif primitif. Pour k N, si P est un prédicat d arité k + 1 alors µ(p ) est la fonction h d arité k telle que Le plus petit i tel que P (i, x 1,..., x k ) s il en existe un (la divergence) sinon. On ajoute la minimisation générale aux constructeurs des primitives récursives, ceci forme la classe des fonctions récursives (partielles). 4

Correction de l exercice 5. 1. Il suffit de trouver le plus grand i tel que y i x, ou de manière équivalente le plus petit i tel que y (i + 1) > x. On aura alors i = x/y. On pose donc f(x, y) = µp (i, x, y) où P est le prédicat y (i + 1) > x (il est facile de voir que ce prédicat est récursif primitif). La division entière n est pas définie pour y = 0. (Si on pose f(x, 0) = 0, il est possible d écrire f comme une fonction récursive primitive.) 2. Il suffit de trouver le plus grand i tel que i 2 x ou de manière équivalent le plus petit i tel que (i+1) 2 > x. On peut donc poser f = µp où P est le prédicat récursif primitif (i+1) 2 > x. On peut aussi rendre f cette fonction récursive primitive en prenant f = Comp(µ P, p 1 1, p 1 1). 3. Non corrigé. 5