首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个双偏序集定义不进行类型检查

为什么这个双偏序集定义不进行类型检查
EN

Stack Overflow用户
提问于 2018-01-23 17:52:02
回答 1查看 31关注 0票数 0

我创建了以下偏序集定义,dual定义不会对反对称进行类型检查。我不知道该怎么做,有什么建议吗?

代码语言:javascript
复制
structure Poset {α : Type} (leq : α → (α → Prop)) :=  mkPoset :: 
    (reflexive: (∀x : α, (leq x x))) 
    (antisymmetric : (∀x y : α, (leq x y) → (leq y x) → x = y))
    (transitive : (∀x y z: α, (leq x y) → (leq y z) → (leq x z)))

section Poset
    parameter α : Type
    parameter leq : α → α → Prop
    parameter poset: (Poset leq)

    def geq (x: α)(y: α) := leq y x


    def dual : Poset geq := Poset.mkPoset poset.reflexive (λx y: α, poset.antisymmetric y x) (λ x y z: α, poset.transitive z y x)
end Poset
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-23 18:09:01

让我们来看一下错误消息:

代码语言:javascript
复制
term
  λ (x y : α), poset.antisymmetric y x
has type
  ∀ (x y : α), leq y x → leq x y → y = x
but is expected to have type
  ∀ (x y : α), geq x y → geq y x → x = y

虽然假设是绝对相等的,但结论是不同的。您必须在正确的位置应用eq.symm

代码语言:javascript
复制
def dual : Poset geq :=
{ reflexive := poset.reflexive,
  antisymmetric := λ x y h₁ h₂, eq.symm (poset.antisymmetric y x h₁ h₂),
  -- note, this is not quite correct yet either
  transitive := λ x y z, poset.transitive z y x }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48398700

复制
相关文章

相似问题

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