为什么在使用区分大小写时,Agda有时会抱怨它自己编写的代码?

时间:2019-03-05 15:31:49

标签: agda

我不确定该问题的最小复制是什么,但是this Gist复制了它。注意文件末尾的preservation函数:

preservation : ∀ n Γ t t' T → t ~ t' → Γ ⊢ t ∷ T → Γ ⊢ t' ∷ T
preservation n Γ t t' T eq an = ?

如果我们要求Agda在eq上进行大小写分割,它将编写以下代码:

preservation : ∀ n Γ t t' T → t ~ t' → Γ ⊢ t ∷ T → Γ ⊢ t' ∷ T
preservation n Γ .(app (lam _ _) _) .(subst (λ v → _) _) T ~β an = {!   !}
preservation n Γ .(app _ _) .(app _ _) T (~app eq eq₁) an = {!   !}
preservation n Γ .(lam _ _) .(lam _ _) T (~lam eq eq₁) an = {!   !}
preservation n Γ t .t T ~refl an = {!   !}
preservation n Γ t t' T (~sym eq) an = {!   !}
preservation n Γ t t' T (~trans eq eq₁) an = {!   !}

由于以下错误,导致编译失败:

Failed to solve the following constraints:
  [543] subst (λ v → _331 n Γ T an v) (_t_332 n Γ T an)
          = subst (λ v → .x) .f
          : Term (_n_321 n)
when checking that the given dot pattern subst (λ v → _) _ matches
the inferred value subst (λ v → .x) .f

这种情况经常发生,非常烦人。有趣的是,如果我将~类型重构为不再使用隐式,那么再次尝试使用大小写分隔即可!因此,看起来好像与隐式参数有关。为什么会发生这种情况,我可以避免吗?

0 个答案:

没有答案