首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除subst以证明相等

消除subst以证明相等
EN

Stack Overflow用户
提问于 2012-02-12 13:35:21
回答 1查看 255关注 0票数 5

我试图将mod-n计数器表示为区间[0, ..., n-1]的一部分,分为两部分:

代码语言:javascript
复制
data Counter : ℕ → Set where
  cut : (i j : ℕ) → Counter (suc (i + j))

使用这一点,定义两个关键操作非常简单(为简洁起见,省略了一些证明):

代码语言:javascript
复制
_+1 : ∀ {n} → Counter n → Counter n
cut i zero    +1 = subst Counter {!!} (cut zero i)
cut i (suc j) +1 = subst Counter {!!} (cut (suc i) j)

_-1 : ∀ {n} → Counter n → Counter n
cut zero    j -1 = subst Counter {!!} (cut j zero)
cut (suc i) j -1 = subst Counter {!!} (cut i (suc j))

当试图证明+1-1是相反的时候,问题就来了。我总是遇到这样的情况,即我需要为引入的这些subst创建一个消除器,比如

代码语言:javascript
复制
subst-elim : {A : Set} → {B : A → Set} → {x x′ : A} → {x=x′ : x ≡ x′} → {y : B x} → subst B x=x′ y ≡ y
subst-elim {A} {B} {x} {.x} {refl} = refl

但事实证明这是一个问题:它不被类型检查器接受,因为subst B x=x' y : B x'y : B x……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-14 05:07:27

如果您在stdlib中使用Relation.Binary.HeterogeneousEquality,则可以声明subst-elim的类型。然而,我可能只是在with或rewrite子句中对x≡x‘的最终证明进行模式匹配,所以您不必显式地创建消除符,也就没有输入问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9246705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档