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
Afficher les réponses par date
Salut James,
Merci pour ton exemple. Je nage dans un océan d'éxamens mais j'espère trouver un peu de temps cette fin de semaine pour reproduire ton problème.
Stefan