我是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
,如果有人可以指导我使用它来证明逻辑陈述的教程或示例,我将不胜感激。
答案 0 :(得分:1)
基本上可判断的谓词是一个谓词,我们有一个算法终止于有限的时间,并返回一个yes和一个证明它是真的,或者没有与它的否定证明一起。例如,对于每两个自然数,我们可以证明它们是相等的或者它们不相等。
你写的不是打字。你的函数应该返回Dec(Relℕzero)(ℕ→Set),第一个参数是正确的,第二个参数不是。它应该是一个函数,例如,\ x - &gt; 2 * x。
P.S。对我来说这个功能毫无意义。你想用它做什么?