Bonjour tout le monde,
J’aimerais signaler ce qui me semble être un bug. Il s’agit d’une boucle infinie lors du typechecking.
Je n’arrive pas à reproduire le bug en construisant un exemple plus simple, ce qui indique que je
n’ai toujours pas bien compris la chose exacte qui déclenche ce bug. Donc, je vous invite à aller
voir le code sur ma branche qui s’appelle `quot-types/normalisation`. Je précise que j’ai contourné
le problème dans la version actuelle du code, je vais vous expliquer comment le reproduire. C’est
la fonction `ee'≡id` dans le fichier `samples/quotient_normalisation.typer` qui pose problème. Le problème
se trouve dans l’annotation de type de cette fonction, pour une raison x ou y, le calcul de la WHNF de
l’expression suivante pourrait nous mener à une boucle infinie:
```
Eq (e (p := isSetA) (r := r) (i := i)
(e' (p := isSetA) (r := r) (i := i) s))
s
```
En investiguant davantage, je me suis rendu compte que le vrai coupable est la fonction `Sigma_η` que
j’ai définie dans `btl/pervasive.typer`. Voici la ‘chaîne de dépendance entre `ee’≡id` et `Sigma_η`:
```
ee'≡id ⇨ e ⇨ Qnorm_eq ⇨ Σ≡Prop ⇨ Sigma_η
```
Maintenant, regardons la fonction `Sigma_η`, elle contient un `case` qui fait une élimination
dépendante en utilisant la preuve d’égalité qui est insérée dans le contexte, on peut y accéder avec
`##DeBruijn 0`. Le problème se produit lorsqu’on met cette preuve d’égalité dans une variable d’un
`let`. Par exemple, si on définit `Sigma_η` comme suit,
```
Sigma_η : (A : Type_ ?) ≡> (P : (a : A) -> Type_ ?)
≡> (p : Sigma A P) -> Eq p (sigma (B := P) p.fst p.snd);
Sigma_η p = case p
| sigma x y =>
let
branch≡p : Eq (sigma (B := P) x y) p;
branch≡p = ##DeBruijn 0;
in
Eq_cast (x := sigma (B := P) x y) (y := p)
(p := branch≡p) %% Proof of Eq (sigma x y) p
(f := lambda x -> Eq x (sigma (B := P) x.fst x.snd))
%% Proof of Eq (sigma x y) (sigma x y).fst (sigma x y).snd
Eq_refl;
```
on se retrouve avec une boucle infinie lors du typechecking de `ee’≡id`, ça ne nuit pas au typechecking
des autres fonctions par contre.
Pour l’instant, je suis toujours pas sûr pourquoi le calcul de la WHNF de la fonction ci-dessus pourrait être
problématique, ça pourrait être lié à la façon dont on insère la preuve d’égalité dans l’environnement.
J'investiguerai davantage quand j’aurai le temps. Est-ce que vous avez déjà rencontré quelque chose de
similaire?
James