Agda中的可判定谓词

时间:2014-03-13 02:12:21

标签: agda decidable

我是Agda的新手,我需要帮助才能理解Decidable函数和Dec类型。

我正在尝试定义一阶逻辑谓词,我想用证明编码某种布尔值。我发现这样做的方法是使用Dec类型..

现在,据我所知,为了能够做到这一点,我必须将所有逻辑运算符重新定义为可判定类型而不是类型集。为了做到这一点,我把它嵌入到新类型中,这就是我为and运算符做的:

data _∧_ (A B : Set) : Set where 
   _&_ : A → B → A ∧ B 

Dec∧ : {A B : Set} → A ∧ B → Dec (A ∧ B) 
Dec∧ A∧B = yes (A∧B) 

是这样做的方式,还是有另一种方式?

然后,我想使用此运算符来定义Nat值的关系,所以我做了类似这样的事情:

_◆_ : ℕ → ℕ → Dec∧ (Rel ℕ lzero) (ℕ → Set) 
x ◆ y = (0 < x) ∧ (x ² ≡ 2 * y ²) 

但这会产生类型错误..

我不确定如何使用Dec,如果有人可以指导我使用它来证明逻辑陈述的教程或示例,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

基本上可判断的谓词是一个谓词,我们有一个算法终止于有限的时间,并返回一个yes和一个证明它是真的,或者没有与它的否定证明一起。例如,对于每两个自然数,我们可以证明它们是相等的或者它们不相等。

你写的不是打字。你的函数应该返回Dec(Relℕzero)(ℕ→Set),第一个参数是正确的,第二个参数不是。它应该是一个函数,例如,\ x - &gt; 2 * x。

P.S。对我来说这个功能毫无意义。你想用它做什么?