A 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 but est d'augmenter le pouvoir expressif et c'est gagné car on peut programmer facilement 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
Selon le formalisme de Martin-Löf on peut écrire les termes du système T par récurrence
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.
Notre fameuse fonction d'Ackermann que l'on ne peut pas programmer en récursion primitive est définie par les équations suivantes :
Ces équations n'ont pas la forme voulue mais en modifiant un peu on obtient la forme désirée :
Il n'y a plus qu'à écrire cela sous forme de terme :
Ack = λn.recN→N(n, λp.S(p), (mN, fN→N)λp.recN(p, f S(0), (qN, gN)f g)))
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.
Equations intuitives :
En transformant un peu on obtient des équations utilisant le schéma souhaité :
Le terme voulu est :
Min = λn.recN→N(n, λp.0, (mN, fN→N)λp.recN( p, 0, (qN, gN) S(f q))))
De la même manière on peut obtenir facilement un programme optimisé pour l'addition et la soustraction.