我对伊德里斯很陌生,我试图抓住基本的概念和语法。
即使这听起来毫无意义,我也试图定义一个将half
函数减半的函数。
我想提出类似的事情:
half : (n : Nat) -> (k : Nat) -> (n = k + k) -> (k : Nat)
但当然它不起作用。具体来说,我得到:
错误:预期:依赖类型签名
half : (n : Nat) -> (k : Nat) -> (n = k + k) -> (k : Nat)
有可能吗?
感谢。
答案 0 :(得分:6)
您想要表达的是half n
是Nat
个号码k
,n = k + k
成立k
。这样做的方法是使用sigma type,即数字n = k + k
的依赖对和证明n = k + k
(它是依赖对,因为类型第二个坐标k
取决于第一个坐标{em}的值。half : (n : Nat) -> (k ** n = k + k)
)。
Idris标准库为从属对定义DPair
,包括允许你编写的一些语法糖
half
但请注意,您将无法实施half 1
(作为总功能),因为没有好的答案,例如half : (n : Nat) -> (k ** Either (n = k + k) (n = k + k + 1))
。也许你想要的是
{{1}}
答案 1 :(得分:0)
你不应该使用两次k。 一半:(n:Nat) - > (k:Nat) - > (n = k + k) - >纳特 是对的,但没用。 我想你需要 一半:(n:Nat) - >也许(k ** n = k + k)