<div class="notebook open-fullscreen"> <div class="nb-cell markdown" name="md1"> # Travail maison à faire pour le lundi 22 avril ## Exercice 1: les entiers 1. On suppose qu'on a un symbole de constante z/0 et un symbole de fonction s/1 permettant de représenter les entiers "en unaire" (représentation de Peano). Comment s'écrit l'entier 2? 2. Axiomatisez la relation binaire `est_predecesseur(X,Y)` qui est vraie si X est le prédécesseur de Y (ex: `est_predecesseur(z,s(z))`. 3. On suppose qu'on a un symbole d'arité unaire `minus` (moins). de sorte qu'on peut représenter -1 par `minus(s(z))`. Donnez un autre terme qui pourrait représenter le nombre -1. Est-ce que les deux termes sont unifiables? 4. Définissez le prédicat `est_positif(X)` qui est vrai si `X` est un terme clos qui représente un entier positif ou nul. </div> <div class="nb-cell markdown" name="md2"> --- </div> <div class="nb-cell program" data-background="true" name="p1"> /* code à compléter pour la question 2 */ est_predecesseur(...,...). est_predecesseur(...,...) :- ... </div> <div class="nb-cell query" name="q1"> /* test : doit renvoyer `true` */ est_predecesseur(s(z), s(s(z))). </div> <div class="nb-cell query" name="q2"> /* test : doit renvoyer `false` */ est_predecesseur(s(z), z). </div> <div class="nb-cell query" name="q3"> /* question : que doit renvoyer cette requête? */ est_predecesseur(s(X), Y). </div> <div class="nb-cell query" name="q4"> /* question : que doit renvoyer cette requête? */ est_predecesseur(s(X), Y). </div> <div class="nb-cell program" data-background="true" name="p2"> /* code à compléter pour la question 4 */ est_positif(...). est_positif(...) :- ... /* et éventuellement (ou alors utiliser la coupure) */ est_negatif(...) </div> <div class="nb-cell query" name="q5"> /* test : doit renvoyer `true` */ est_positif(s(z)). </div> <div class="nb-cell query" name="q6"> /* test : doit renvoyer `true` */ est_positif(minus(z)). </div> <div class="nb-cell query" name="q7"> /* test : doit renvoyer `false` */ est_positif(minus(s(z))). </div> <div class="nb-cell query" name="q8"> /* test : doit renvoyer `true` */ est_positif(minus(s(minus(z)))). </div> <div class="nb-cell markdown" name="md3"> ## Exercice 2 : les listes 1. Axiomatisez la relation binaire `longueur(L,N)` qui relie une liste à sa longueur codée par un entier de Peano. L peut être représentée soit par les fonctions `cons/2` et `nil/0` soit par des listes Prolog (ex: `[1,2,3]`, `[1 | [2 | [3| []]]]`, cf cours). 2. Axiomatisez la relation `appartient(X,L)` qui est vraie si X apparait au moins une fois dans L 3. Axiomatisez la relation `inf_ou_eq(N,M)` qui relie tout couple d'entiers de Peano N,M tels que N ≤ M. 4. Ecrivez un programme Prolog qui trie une liste </div> </div>