Programmation logique : TP1

1 Algèbre relationnel en Prolog

Soit la base de données suivante :
table vin1
Numéro Cru Millésime Degré
100 Chablis 1974 12
110 Mercurey 1978 13
120 Macon 1977 12
table vin2
Numéro Cru Millésime Degré
100 Chablis 1974 12
200 Sancerre 1979 11
210 Pouilly 1980 12
230 Pouilly 1981 12

table viticulteurs
Patronyme Ville Région
Nicolas Pouilly Bourgogne
Martin Bordeaux Bordelais
  1. Définir les prédicats vin1, vin2 et viticulteurs correspondants aux tables ci-dessus.
  2. Interrogez la base : quels sont les vins de la table vin2 du Cru 'Pouilly'? Quels sont les vins de la table de vin2 de degré 12?

  3. L'union de deux relations R et S de même schéma est une relation T de même schéma contenant l'ensemble des tuples appartenant à R ou S ou aux deux relations.

    Définir la table vin3 comme l'union de vin1 et vin2. Quels sont les crus de degré 12 dans la table vin3?

    table vin3 = vin1 $\cup$ vin2
    Numéro Cru Millésime Degré
    100 Chablis 1974 12
    110 Mercurey 1978 13
    120 Macon 1977 12
    200 Sancerre 1979 11
    210 Pouilly 1980 12
    230 Pouilly 1981 12
  4. Négation par l'échec :
    1. écrire une question qui renvoie vrai si la table vin2 ne contient rien
    2. écrire une question qui renvoie vrai si la table vin2 ne contient aucun vin de 1978
    3. donnez les noms des crus présents dans la base mais non représentés dans la table vin2.

  5. La différence $R \setminus S$ de deux relations R et S de même schéma est une relation T de même schéma contenant les tuples appartenant à R et n'appartenant pas à S.

    Définir la table vin4 comme la différence entre vin1 et vin2.

    table vin4 = vin1 $\setminus$ vin2
    Numéro Cru Millésime Degré
    110 Mercurey 1978 13
    120 Macon 1977 12
  6. Le produit cartésien de deux relations R et S est une relation ayant pour attributs la concaténation de ceux de R et S et dont les tuples sont toutes les concaténations d'un tuple de R à un tuple de S.

    Définir la table vignoble comme le produit cartésien de la table vin4 et des viticulteurs.

    table vignoble = vin4 x viticulteurs
    Numéro Cru Millésime Degré Patronyme Ville Régions
    110 Mercurey 1978 13 Nicolas Pouilly Bourgogne
    110 Mercurey 1978 13 Martin Bordeaux Bordelais
    120 Macon 1977 12 Nicolas Pouilly Bourgogne
    120 Macon 1977 12 Martin Bordeaux Bordelais
  7. La projection d'une relation R de schéma R(A1,A2,..,An) sur les attributs $A_{i1},\ldots,A_{ip}$ (avec ij $\neq$ ik et p<n) est une relation R'= $\pi_{A_{i1},\ldots,A_{ip}} (R)$ de schéma $R'(A_{i1},\ldots,A_{ip})$ dont les tuples sont obtenus par élimination des valeurs des attributs de R n'appartenant pas au schéma de R' et par suppression des tuples en double.

    Définir la table vin5 comme la projection de la table vin4 sur les attributs Cru et Millésime.

    table vin5 = $\pi_{\mbox{Cru,Millésime}} (vin4)$
    Cru Millésime
    Mercurey 1978
    Macon 1977
  8. La restriction de la relation R par une qualification Q est une relation R'=$\sigma_Q(R)$ de même schéma dont les tuples sont ceux de R satisfaisant la qualification Q.

    Définir la table vin6 comme la restriction de la table vin3 aux Millésimes compris strictement entre 1975 et 1980.

    table vin6 = $\sigma_{\mbox{Millésime > 1975 et Millésime < 1980}}(vin3)$
    Numéro Cru Millésime Degré
    110 Mercurey 1978 13
    120 Macon 1977 12
    200 Sancerre 1979 11
  9. La jointure de deux relations R et S selon une qualification multi-attributs Q est l'ensemble des tuples du produit cartésien R fois S satisfaisant la qualification Q.

    Définir la table vin7 comme la jointure des tables vin3 et viticulteurs sur égalité des attributs Ville et Cru.

    table vin7 = vin3 $\Join_{Ville=Cru}$ viticulteurs
    Numéro Cru Millésime Degré Patronyme Ville Région
    210 Pouilly 1980 12 Nicolas Pouilly Bourgogne
    230 Pouilly 1981 12 Nicolas Pouilly Bourgogne

  10. L'intersection de deux relations R et S de même schéma est une relation T de même schéma contenant les tuples appartenant à la fois à R et S.

    Définir la table vin8 comme l'intersection des tables vin1 et vin2.

    table vin8 = vin1 $\cap$ vin2
    Numéro Cru Millésime Degré
    100 Chablis 1974 12
  11. Le quotient de la relation R de schéma R(A1,A2,...,An) par la sous-relation S de schéma S(Ap+1,...,An) est la relation Q de schéma Q(A1,...,Ap) formée de tous les tuples qui concaténés à chacun des tuples S donne toujours un tuple de R. ( $R \div S = (\pi_{A1,...,Ap}(R) \setminus
(\pi_{A1,...,Ap} [(\pi_{A1,...,Ap}(R) \times S) \setminus R)]$)

    Définir les tables vin9 et type comme suit. Puis définir la table cru comme la division de la table vin9 par la table type (crus ayant des vins de tous les types de la table type).
    table vin9
    Cru Millésime Degré
    Macon 1977 12
    Macon 1979 14
    Macon 1980 12
    Saumur 1977 12
    Saumur 1979 14
    Chablis 1977 12
    table type
    Millésime Degré
    1977 12
    1979 14

    cru = vin9 div type
    Cru
    Macon
    Saumur

2 Histoire de famille

On considère la dynastie de François Ier :
  1. Définir les prédicats homme, femme et parent. Le prédicat homme (resp. femme) permet de retrouver tous les hommes (resp. toutes les femmes) de la figure ci-dessus. Le prédicat parent(X,Y) est vrai si X est parent de Y.
  2. À partir des prédicats ci-dessus, définir les prédicats pere(X,Y) vrai si X est père de Y et mere(X,Y) vrai si X est mère de Y. Qui est le père d'Henri II ?
  3. Définir le prédicat fille(X,Y) vrai si X est fille de Y.
  4. Définir le prédicat prédicat procreer(X,Y) vrai si X et Y ont procréé ensemble.
  5. Définir le prédicat gdparent(X,Y) vrai si X est un grand parent de Y.
  6. Définir les prédicats gdpere(X,Y) et gdmere(X,Y).
  7. Définir le prédicat ancetre(X,Y) vrai si X est un ancêtre de Y. Quels sont les ancêtres de la reine Margot? Quels sont les ancêtres de Victor Amédée?
  8. Définir le prédicat frere(X,Y) vrai si X est un frère de Y, définir soeur(X,Y). Henri II est le frère de qui?
  9. Définir le prédicat oncle(X,Y) vrai si X est un oncle de Y, définir tante(X,Y). Quels sont les couples oncles neveux ?
  10. Définir le prédicat cousins(X,Y) vrai si X et Y sont cousins (ou cousines).
  11. Définir le prédicat issusdegermains(X,Y) vrai si X et Y sont cousins issus-de-germains.

À propos de ce document...

This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.61)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 sujtp1.tex

The translation was initiated by Florence Bannay on 2003-01-08


Florence Bannay 2003-01-08