我不确定该问题的最小复制是什么,但是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
这种情况经常发生,非常烦人。有趣的是,如果我将~
类型重构为不再使用隐式,那么再次尝试使用大小写分隔即可!因此,看起来好像与隐式参数有关。为什么会发生这种情况,我可以避免吗?