• Aucun résultat trouvé

Exemples de dérivation

2 Théorie des types pour les ω-catégories faibles

2.4 Exemples de dérivation

Pour comprendre ces règles de cohérences que l’on vient d’introduire, donnons quelques exemples de dérivations. On utilisera la syntaxe concrète de notre assistant de preuve. Par exemple, dans celui-ci la composition des 1-cellules formalisée à la section précédente est définie par

coh comp (x:*) (y:*) (f:x->y) (z:*) (g:y->z) : x->z

Ici, coh est un mot-clé indiquant qu’on va définir une cohérence, comp est le nom de la cohérence, la liste d’arguments typés (x, y, f, z, g) est une notation pour le contexte de composition Γ figuré en3et le type x->z à droite de « : » indique que l’on utilise la règle(op)avec t = x et

u =z. De même l’associativité, sera obtenue par

coh assoc (x:*) (y:*) (f:x->y) (z:*) (g:y->z) (w:*) (h:z->w) : comp x z (comp x y f z g) w h -> comp x y f w (comp y z g w h)

dont la typabilité sera vérifié en utilisant la règle (eq). On voit que de nombreux arguments

dans le type de retour sont redondants et en pratique celui-ci peut être simplement noté comp (comp f g) h -> comp f (comp g h)

les autres arguments étant inférés automatiquement. Notons d’autre part que la notation comp t u permet de spécifier la substitution σ utilisée dans la cohérence comp : celle-ci rem- place f par le terme t et g par u (encore une fois, la valeur des autres variables est inférée automatiquement).

Une entrée de l’assistant de preuve consiste en une suite de telles déclarations, et notre programme va automatiquement vérifier qu’elles peuvent bien être inférées dans le système de types décrit ci-dessus. Notons qu’un séquent ne peut jamais être dérivé à la fois par les règles

(op)et(eq), il n’y a donc pas d’ambiguïté sur ce point.

Quelques cohérences d’opérations. La règle (op) permet définir d’autres compositions ; donnons quelques exemples à titre d’illustration. La composition verticale de deux 2-cellules est obtenue par

coh vcomp (x:*) (y:*) (f:x->y) (g:x->y) (a:f->g) (h:x->y) (b:g->h) : f->h la composition horizontale par

coh hcomp (x:*) (y:*) (f:x->y) (f’:x->y) (a:f->f’) (z:*) (g:y->z) (g’:y->z) (b:g->g’) : comp f g -> comp f’ g’

le moustachement à droite par

coh rwhisk (x:*) (y:*) (f:x->y) (f’:x->y) (a:f->f’) (z:*) (g:y->z) : comp f g -> comp f’ g

Graphiquement, ces opérations correspondent respectivement aux compositions des diagrammes suivants : x y f ⇓α g ⇓β h x y z f ⇓α f0 g ⇓β g0 x y z f ⇓α f0 g

Suspension et Fonctorialité dans CaTT T. Benjamin et S. Mimram

Quelques cohérences d’égalité. À titre d’illustration, les identités peuvent être définies en utilisant la règle(eq):

coh id (x:*) : x->x

coh id2 (x:*) (y:*) (f:x->y) : f->f

et on peut de même montrer qu’elle sont des éléments neutres à gauche pour la composition (de façon cohérente)

coh unitl (x:*) (y:*) (f:x->y) : f -> comp (id x) f coh unitl’ (x:*) (y:*) (f:x->y) : comp (id x) f -> f

coh unitl’’ (x:*) (y:*) (f:x->y) : vcomp (unitl f) (unitl’ f) -> id2 f etc.

Règle de coupure. La règle de coupure

Γ` t : A` σ : Γ` t[σ] : A[σ] (cut)

est admissible. Dans la pratique, notre implémentation ajoute cette règle comme primitive, ce qui permet de faire des déclarations qui sont indiquées par le mot-clé let ; par exemple, la composition d’un endomorphisme avec lui-même peut être définie par

let square (x:*) (f:x->x) : x->x = comp f f

Au passage, ce morphisme ne peut pas directement être défini comme une cohérence car le contexte Γ = (x : ?, f : x → x) n’est pas un contexte de composition.

3 Suspension

Dans l’exemple en fin de section précédente, nous avons dû définir deux fois la cohérence identité : sur les 1-cellules (id) et sur les 2-cellules (id2). De même, la composition des 1-cellules (comp) et la composition verticale des 2-cellules (vcomp) sont des opérations très similaires. Plus généralement, dans la pratique, on est souvent amené à effectuer les « mêmes » développements plusieurs fois afin qu’ils s’appliquent à des cellules de dimensions différentes, ce qui freine consi- dérablement le développement dès que la dimension des cellules augmente, voir [1] pour un exemple concret. On souhaiterait bien sûr automatiser ce processus de « généralisation à des cellules de dimension supérieure » : nous expliquons ici comment mener à bien cette tâche que nous appelons la suspension des morphismes.

Afin de comprendre le principe de la suspension, comparons les définitions de comp et de vcomp, où l’on a renommé les variables de la seconde pour mettre en avant la similitude :

coh comp (x:*) (y:*) (f:x->y) (z:*) (g:y->z) : x->z coh vcomp (a:*) (b:*) (x:a->b) (y:a->b) (f:x->y) (z:a->b) (g:y->z) : x->z On remarque que la définition de la seconde peut essentiellement être obtenue à partir de celle de la première en ajoutant deux variables a et b et en remplaçant les occurrences du type * par a->b. La suspension consiste à effectuer (automatiquement) cette transformation à un morphisme. En pratique, cela signifie que l’on pourra définir une fois la composition comp et l’appliquer à une paire de 1-cellules, de 2-cellules, ou de n-cellules, notre outil calculant la bonne suspension à la volée.

Suspension et Fonctorialité dans CaTT T. Benjamin et S. Mimram

3.1 Définition

Définissons maintenant formellement cette transformation et montrons qu’elle est admissible dans notre système, c’est-à-dire qu’elle ne modifie pas fondamentalement notre théorie des types. Étant données deux variables fraîches a et b, on définit la suspension Σt, ΣA, ΣΓ et Σσ d’un terme t, d’un type A, d’un contexte Γ et d’une substitution σ par induction par

Σx = x Σ(cohΓ,A(σ)) =cohΣΓ,ΣA(Σσ)

Σ? = a

? b Σ(x−→A y) = Σx−−→ΣA Σy

Σ∅ = (a : ?, b : ?) Σ(Γ, x : A) = (ΣΓ, x : ΣA) Σhi = ha, bi Σ(hσ, ti) = hΣσ, Σti

La validité de cette transformation réside dans le fait qu’elle préserve la prouvabilité :

Théorème 1. Pour tout jugement Γ ` t : A dérivable, le jugement ΣΓ ` Σt : ΣA est aussi dérivable.

Démonstration. La preuve se fait par induction mutuelle sur les règles d’inférences. On montre l’admissibilité des règles suivantes :

Γ` ΣΓ` Γ` A ΣΓ` ΣA` σ : Γ Σ∆` Σσ : ΣΓ Γ`ps ΣΓ`ps Γ` t : A ΣΓ` Σt : ΣA ainsi que les égalités ∂−(ΣΓ) = Σ(∂(Γ))et ∂+(ΣΓ) = Σ(∂+(Γ))

3.2 Application

Nous venons de définir une transformation sur les expressions de cette théorie des types. À tout jugement de typage bien formé Γ ` t : A, cette transformation associe un nouveau jugement de typage ΣΓ ` Σt : ΣA, qui est lui aussi bien formé, et dont l’arbre de dérivation se déduit de celui du jugement original. Toutes ces définitions peuvent être implémentées. L’utilité de ce principe réside dans le fait qu’il permet de générer automatiquement de nouveaux termes de la théorie, sans avoir à les définir. En pratique, l’implémentation calcule combien de fois appliquer la transformation de suspension en regardant la différence entre la dimension de l’argument fourni et celle de l’argument attendu.

Dimension. La dimension d’un type est définie inductivement par

dim(?) = 0 dim(t−→

A u) = 1 + dim A

On parlera plus généralement de la dimension d’un terme dans un contexte pour parler de la dimension de son type dans ce contexte : dans les modèles, un terme de dimension n sera inter- prété par une n-cellule. Par induction, on montre alors que l’opération de suspension incrémente de 1 la dimension d’un terme. Remarquons que, pour être valide, une substitution doit toujours associer à chaque variable un terme de la même dimension que cette variable.

Suspension et Fonctorialité dans CaTT T. Benjamin et S. Mimram

Implémentation. On peut maintenant donner une version modifiée de la règle (cut), qui

prend en compte les suspensions

Γ` t : A ∆` σ : ΣnΓ

∆` (Σnt) [σ] : (ΣnA) [σ](cutn)

Lors de la recherche de preuve, une seule valeur de n est susceptible de convenir (c’est-à-dire de mener à une dérivation correcte). En effet, étant donnée la substitution σ, considérons le terme u qu’elle associe à une variable x quelconque de son domaine : l’entier n est nécessairement égal à la différence entre la dimension de x dans Γ et la dimension u. Notre système utilise ce principe lors de la vérification de type. Par ailleurs, afin de rester le plus possible fidèle à la théorie originale, nous avons séparé un noyau, qui calcule sans utiliser la suspension ni la fonctorialité, et une interface pour les gérer de façon externe.

Utilisation. Si l’on reprend quelques définitions données en Section2.4, en prenant en compte la suspension, on peut redéfinir la composition, l’identité, ainsi qu’un témoin que l’identité est un élément neutre pour la composition :

coh comp (x:*) (y:*) (f:x->y) (z:*) (g:y->z) : x -> z coh id (x:*) : x -> x

coh unitl (x:*) (y:*) (f:x->y) : f -> comp (id x) f coh unitl’ (x:*) (y:*) (f:x->y) : comp (id x) f -> f

coh unitl’’ (x:*) (y:*) (f:x->y) : comp (unitl f) (unitl’ f) -> id f

Comparé à l’exemple précédent, pour la définition de unitl”, il n’est plus nécessaire de définir id2 : il suffit de suspendre la cohérence id. De plus, comme id attend une 1-cellule en argument, et qu’on lui fournit une 2-cellule, le système vérifie la dérivation en suspendant une fois. Il en va de même pour vcomp, qui est une suspension de comp. Par ailleurs, la suspension permet de transférer immédiatement toutes les cohérences d’égalité faisant intervenir cette comp à des égalité sur vcomp. Par exemple, on avait défini un témoin d’associativité

coh assoc (x:*) (y:*) (f:x->y) (z:*) (g:y->z) (w:*) (h:z->w) : comp (comp f g) h -> comp f (comp g h)

Si maintenant on souhaite obtenir un témoin d’associativité pour la composition verticale des 2-cellules, par exemple dans le contexte correspondant au diagramme

x y f ⇓a g ⇓b h ⇓c k

il suffira d’écrire l’expression suivante assoc a b c et la suspension se chargera de générer un témoin d’associativité pour la composition verticale.

4 Fonctorialisation

L’idée de cette section est similaire à celle de la précédente, il s’agit de refléter par un calcul méta-théorique un certain principe que l’on souhaite pouvoir utiliser afin de raccourcir 54

Suspension et Fonctorialité dans CaTT T. Benjamin et S. Mimram

les preuves. Elle aboutit cependant à des généralisations différentes des opérations de celles de la partie précédente. La transformation que nous étudions ici est fondée sur l’observation que les cohérences dans les ω-catégories se comportent de façon analogue aux foncteurs usuels entre catégories. En effet, un foncteur F : C → D entre deux catégories C et D associe à tout objet c de C un objet F c de D et à tout morphisme f : c → d de C un morphisme F f : F c → F d de D. Ceci peut être figuré par le diagramme :

c F c

d F d

f F f

Par analogie, on peut représenter une cohérence, par exemple la composition, comme une asso- ciation (f, g) 7→ comp f g et l’opération de fonctorialisation, par rapport à la première variable, permet, pour toute cellule α : f → f0, de définir une composition

comp α g : comp f g → comp f0 g

On peut bien sûr définir une généralisation analogue vis-à-vis de la seconde variable, ou des deux à la fois :

f, g comp f g

f0, g0 comp f0 g0

α,β comp α β

En pratique, nous allons noter entre crochets [] les variables par rapport auxquelles ont fonc- torialise. Notre but est donc de définir la signification de l’instruction suivante :

let comp2 (x:*) (y:*) (f:x->y) (f’:x->y) (a:f->f’) (z:*) (g:y->z) (g’:y->z) (b:g->g’) : comp f g -> comp f’ g’

= comp [a] [b]

Au passage, on voit la différence avec l’opération de suspension de la section précédente qui permet de définir la composition verticale à partir de comp : on cherche ici à définir la composi- tion horizontale. Notre but, dans cette section, est de généraliser cette observation à toutes les cohérences d’opérations et de formaliser la transformation associée.