精益的标准库已经包含了定义 各种订单 。然而,虽然 有 的定义 inf 和 sup 对于实数,我认为还没有?,或(或适用的一般定义,因为这些类型都不是 complete_lattice )。
inf
sup
complete_lattice
我不是精益用户,但这是我在Agda中定义它的方式。它可能无法直接翻译 - 类型理论有很多种 - 但它至少应该是一个指针!
我们将使用二元逻辑关系,这是这种同义词的居民:
Rel : Set -> Set1 Rel A = A -> A -> Set
我们需要命题平等:
data _==_ {A : Set} (x : A) : A -> Set where refl : x == x
人们可以说逻辑关系意味着什么 反思 , 反对称 ,和 及物 。
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 _<=_
一个 偏序集 只是一个配备部分排序关系的集合。
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 秒。
definition
record
structure
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中定义的自反性(等)的定义。我也注意到精益似乎很高兴让我省略宇宙水平 Type 在返回类型中 Rel 上面,这是一个很好的接触。
Type
Rel