我正在尝试使用异构相等来证明涉及此索引数据类型的语句:
data Counter : ℕ → Set where
cut : (i j : ℕ) → Counter (suc i + j)
我能够使用以下方式编写我的证明Relation.Binary.HeterogenousEquality.≅-Reasoning
,但仅通过假设以下同余性质:
Counter-cong : ∀ {n n′} {k : Counter n} {k′ : Counter n′} →
{A : ℕ → Set} → (f : ∀{n} → Counter n → A n) →
k ≅ k′ → f k ≅ f k′
Counter-cong f k≅k′ = {!!}
但是,我无法进行模式匹配k≅k′
being refl
没有从类型检查器收到以下错误消息:
Refuse to solve heterogeneous constraint
k : Counter n =?= k′ : Counter n′
如果我尝试做一个案例分析k≅k′
(即通过使用C-c C-c
来自 Emacs 前端),以确保所有隐式参数都与其施加的约束正确匹配refl
, I get
Cannot decide whether there should be a case for the constructor
refl, since the unification gets stuck on unifying the
inferred indices
[{.Level.zero}, {Counter n}, k]
with the expected indices
[{.Level.zero}, {Counter n′}, k′]
(如果您有兴趣,这里有一些不相关的背景:消除subst来证明平等 https://stackoverflow.com/questions/9246705)