如何用agda写这个?

时间:2015-05-25 11:05:34

标签: agda

我想在agda中实现这个声明;

A dedekind cut is a pair (L, U) of mere predicates L : Q -> Set and R : Q -> Set which is 
 1) inhibited : exists (q : Q) . L(q) ^ exists (r : Q) . U(r)

我试过这种方式,

record cut : Set where
   field 
      L : Q -> Set
      R : Q -> Set 
      inhibited :  exists (q : Q) . L(q) ^ exists (r : Q) . U(r)

但这不起作用。我想写这个,我很高兴请帮忙。还有1)data R : Set and record R : Set and 2) data R : Set and data R : Q -> Set

之间的区别

1 个答案:

答案 0 :(得分:1)

我不知道如何定义整个 dedekind cut ,尽管我确实在同伦类型理论:单一数学基础的第369页找到了你的定义。

以下是在两个表单中定义您在问题中询问的内容的语法,一个使用标准库,另一个展开以显示它正在做什么。

open import Data.Product using (∃)

record Cut (Q : Set) : Set₁ where
  field
    L U : Q → Set  -- The two predicates
    L-inhabited : ∃ L
    U-inhabited : ∃ U

如果我们手动扩展∃(存在)的定义,我们有:

record Cut′ (Q : Set) : Set₁ where
  field
    L U : Q → Set  -- The two predicates
    q r : Q        -- Witnesses
    Lq  : L q      -- Witness satisfies predicate
    Ur  : U r      -- Witness satisfies predicate

请注意,由于字段类型Set₁L,记录的类型为U

关于记录和归纳定义数据类型的问题,存在很多差异。您可能希望从维基开始,如果遇到困难,可以提出更具体的问题:DataRecords