C'est un peu obscur, mais le calcul apparaît dans les types de données algébriques. Pour tout type donné, le type de ses contextes à un trou est la dérivée de ce type. Voir cet excellent exposé pour un aperçu de l’ensemble du sujet. C'est une terminologie très technique, alors expliquons.
Types de données algébriques
Vous avez peut-être rencontré des nuplets appelés types de produits (sinon, c'est parce qu'ils sont le produit cartésien de deux types). Nous allons prendre cela à la lettre et utiliser la notation:
a ∗ b
uneb
a + b
uneNunebNba + bNune+ Nb
Ces types ressemblent à des expressions algébriques normales et nous pouvons, en fait, les manipuler comme tels (jusqu'à un certain point).
Un exemple
Dans les langages fonctionnels une définition courante d'une liste (donnée ici en Haskell) est la suivante:
data List a = Empty
| Cons a List
Cela signifie qu'une liste est vide ou un tuple d'une valeur et d'une autre liste. En transformant cela en notation algébrique, nous obtenons:
L ( a ) = 1 + a ∗ L ( a )
1L ( a )
L ( a ) = 1 + a ∗ L ( a )
L ( a ) = 1 + a ∗ ( 1 + a ∗ L ( a ) )
L ( a ) = 1 + a + a2* ( 1 + a * L ( a ) )
L ( a ) = 1 + a + a2+ un3* ( 1 + a * L ( a ) )
L ( a ) = 1 + a + a2+ un3+ un4+ un5. . .
Xn
Cette définition dit alors qu'une liste est soit une unité, soit un tuple d'un élément, soit un tuple de deux éléments, ou de trois, etc., qui est la définition d'une liste!
Contextes à un trou
Passons maintenant aux contextes à un trou: un contexte à un trou est ce que vous obtenez lorsque vous «extrayez une valeur» d'un type de produit. Donnons un exemple:
une2unea + a2 a
Prendre une valeur sur un tuple donne un tuple, mais il existe trois variantes différentes:
( a , a , _ )
( a , _ , a )
( _ , a , a )
3 a2une3
Pour notre dernier exemple, utilisons une liste:
Si nous prenons notre expression originale pour une liste:
L ( a ) = 1 + a ∗ L ( a )
Nous pouvons réorganiser pour obtenir:
L ( a ) = 11 - a
(En apparence, cela peut sembler un non-sens, mais si vous prenez la série taylor de ce résultat, vous obtenez la définition que nous avons obtenue plus tôt.)
Maintenant, si nous différencions cela, nous obtenons un résultat intéressant:
∂L ( a )∂une= ( L ( a ) )2
Ainsi, une liste est devenue une paire de listes. Cela a du sens: les deux listes produites correspondent aux éléments situés au-dessus et au-dessous du trou de la liste d'origine!