AccueilđŸ‡«đŸ‡·Chercher

SystĂšme T

À l'instar de la rĂ©cursion primitive ou le lambda-calcul, le SystĂšme T est un langage de programmation thĂ©orique. Il a Ă©tĂ© inventĂ© par le logicien Kurt Gödel.

Ce systÚme consiste en une fusion de la récursion primitive et du lambda-calcul simplement typé. Le systÚme T est plus expressif que les deux précédemment cités étant donné qu'il permet par exemple de définir la fonction d'Ackermann.

Le principe est simple : on garde les schémas récursifs primitifs :

La diffĂ©rence majeure c'est que l'on autorise les paramĂštres Ă  ĂȘtre des fonctions. Par rapport Ă  la rĂ©cursion primitive, il est alors possible, par exemple, de faire une rĂ©currence sur plusieurs paramĂštres.

Formalisme

Le formalisme de Martin-Löf utilise (entre autres) les notations suivantes :

  • Une expression peut ĂȘtre simple (en : single) ou combinĂ©e (en : combined). Une expression simple correspond Ă  un 1-uplet, une expression multiple Ă  un n-uplet.
  • Une expression peut ĂȘtre saturĂ©e (en : satured) ou non-saturĂ©e (en : unsatured). Une expression saturĂ©e est une variable ou une constante. Inversement, une expression non-saturĂ©e est un opĂ©rateur qui attend qu'on lui fournisse des paramĂštres de maniĂšre Ă  pouvoir ĂȘtre -rĂ©duit en une variable ou une constante.
  • Une notion d'aritĂ©, dont il est dit : "D'un certain point de vue ça ressemble au lambda calcul simplement typĂ©" [Programming in Martin-Löf type theory, page 21].

DĂ©finition :

  • 0 est une aritĂ© ; l'aritĂ© d'une expression simple et saturĂ©e.
  • si sont des aritĂ©s, alors est une aritĂ© ; l'aritĂ© des expressions combinĂ©es.
  • si et sont des aritĂ©s, alors est une aritĂ© ; l'aritĂ© des expressions non saturĂ©es.
  • Le type d'un Ă©lĂ©ment est notĂ© en exposant. Ex :
  • Les arguments attendus par un opĂ©rateur (une expression non-saturĂ©e) sont notĂ©s entre deux parenthĂšses prĂ©cĂ©dant l'opĂ©rateur. Ex :

Selon le formalisme de Martin-Löf on peut écrire les termes du systÚme T par récurrence

  • : de type
  • si est un terme de type alors est un terme de type
  • les variables de type sont des termes de type
  • si est une variable de type et un terme de type alors est un terme de type (abstraction)
  • si est un terme de type et un terme de type alors est un terme de type (application)
  • si un terme de type et que et sont des termes de type alors est un terme de type

Pour comprendre comment fonctionne ce systÚme il faut naturellement des rÚgles de réduction.

On garde les notions de substitution du lambda-calcul et de la récursion primitive, ainsi que les « rÚgles additionnelles » qui permettent de réduire « à l'intérieur » d'un terme.

Quelques théorÚmes importants

  • tous les termes clos (sans variables libres) de type N sont des numĂ©raux (un Sn(0))
  • tous les termes clos de type N sont normalisables

Exemples

La fonction d'Ackermann

La fonction d'Ackermann que l'on ne peut pas programmer en récursion primitive est définie par les équations suivantes :

  • Ack 0 p = S(p)
  • Ack S(n) 0 = Ack n S(0)
  • Ack S(n) S(p) = Ack n (Ack S(n) p)

Ces équations n'ont pas la forme voulue mais en modifiant un peu on obtient la forme désirée :

  • Ack 0 = λp.S(p)
  • Ack S(n) = λp.Ack' p (Ack n)
  • Ack' 0 f = f S(0)
  • Ack' S(p) f = f (Ack' p f)

Il n'y a plus qu'Ă  Ă©crire cela sous forme de terme :

Un minimum efficace

En rĂ©cursion primitive, on ne peut pas faire une fonction qui retourne le minimum de deux entiers en temps de calcul minimum de ces deux entiers. C'est trĂšs contraignant par exemple si on calcule le minimum de 2 et 1 000 000. Comme avec le systĂšme T on peut s'arranger pour faire des rĂ©cursions sur plusieurs paramĂštres, ne nous gĂȘnons pas.

Équations intuitives :

  • Min 0 p = 0
  • Min S(n) 0 = 0
  • Min S(n) S(p) = S(Min n p)

En transformant un peu on obtient des équations utilisant le schéma souhaité :

  • Min 0 = λp.0
  • Min S(n) = λp.Min' p (Min n)
  • Min' 0 f = 0
  • Min' S(p) f = S(f p)

Le terme voulu est :

De la mĂȘme maniĂšre, on peut obtenir facilement un programme optimisĂ© pour l'addition et la soustraction.

Le prédécesseur


pred 0=0

pred s(n)=n

ecriture avec le rec

pred=λx(rec x 0 λxλh x)

Articles connexes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.