如何在精益中定义部分有序集?

时间:2016-03-27 18:48:53

标签: set dependent-type theorem-proving lean

我希望在精益定理证明中证明this theorem。首先,我需要定义像部分有序集这样的东西,以便我可以定义infimum / supremum。这是如何在精益中完成的? The tutorial提到了setoids,它们是一种类型的 相关的等价关系。但我不清楚这有何帮助。

2 个答案:

答案 0 :(得分:4)

我不是精益用户,但这是我在Agda中定义它的方式。它可能不会直接翻译 - 类型理论有很多种 - 但它至少应该是一个指针!

我们将使用二元逻辑关系,这是这种同义词的居民:

Rel : Set -> Set1
Rel A = A -> A -> Set

我们需要命题平等:

data _==_ {A : Set} (x : A) : A -> Set where
  refl : x == x

可以说逻辑关系对reflexiveantisymmetrictransitive意味着什么。

Refl : {A : Set} -> Rel A -> Set
Refl {A} _~_ = {x : A} -> x ~ x

Antisym : {A : Set} -> Rel A -> Set
Antisym {A} _~_ = {x y : A} -> x ~ y -> y ~ x -> x == y

Trans : {A : Set} -> Rel A -> Set
Trans {A} _~_ = {x y z : A} -> x ~ y -> y ~ z -> x ~ z

要成为部分订单,必须全部三个。

record IsPartialOrder {A : Set} (_<=_ : Rel A) : Set where
  field
    reflexive : Refl _<=_
    antisymmetric : Antisym _<=_
    transitive : Trans _<=_

poset只是一个配有部分排序关系的集合。

record Poset : Set1 where
  field
    carrier : Set
    _<=_ : Rel carrier
    isPartialOrder : IsPartialOrder _<=_

对于记录(哈哈),以下是本教程中的setoid示例如何转换为Agda:

Sym : {A : Set} -> Rel A -> Set
Sym {A} _~_ = {x y : A} -> x ~ y -> y ~ x

record IsEquivalence {A : Set} (_~_ : Rel A) : Set where
  field
    reflexive : Refl _~_
    symmetric : Sym _~_
    transitive : Trans _~_

record Setoid : Set1 where
  field
    carrier : Set
    _~_ : Rel carrier
    isEquivalence : IsEquivalence _~_

更新:我安装了Lean,犯了大量语法错误,并最终达到了这个(可能不是惯用,但直截了当)翻译。函数变为definition s,record变为structure s。

definition Rel (A : Type) : Type := A -> A -> Prop

definition IsPartialOrder {A : Type}(P : Rel A) :=
  reflexive P ∧ anti_symmetric P ∧ transitive P

structure Poset :=
  (A : Type)
  (P : Rel A)
  (ispo : IsPartialOrder P)

我正在使用我在Agda上面定义的反身性(等)定义的built-in versions。我还注意到Lean似乎很高兴让我在Type的返回类型中省略Rel的宇宙级别,这是一个很好的接触。

答案 1 :(得分:1)

精益的标准库已包含various orders的定义。但是,对于实际的infsup的{​​{3}}定义,我认为还没有(或适用的一般定义,因为这些类型都不是complete_lattice)。