证明自然数 (n) 为零
Proof a Natural (n) is Zero
我正在努力学习 idris 范式,但仍在努力。这里我有一个函数 isZero,它需要一些自然的 Nat 和 returns True 或 False。
我的问题是非相关案例。
namespace Numbers
data Nat : Type where
Zero : Numbers.Nat
Successor : Numbers.Nat -> Numbers.Nat
isZero: Numbers.Nat -> Prelude.Bool.Bool
isZero Zero = True
isZero _ = False
isNotZero: Numbers.Nat -> Prelude.Bool.Bool
isNotZero Zero = False
isNotZero _ = True
proofNIsZero : (n : Numbers.Nat) -> isZero n = Bool.True
proofNIsZero Zero = Refl
proofNIsZero (Successor _) = ?rhs
很显然,任何 Nat 的某些继承者都不能为零。但我的挣扎在于证明。 ?rhs 孔的类型是
--------------------------------------
rhs : False = True
试图导航我认为应该(并且有一天会)简单的东西已经导致 uninhabited
、Void
、absurd
和 impossible
。 None 其中我可以消除歧义。
也许这些就是密钥 - 但我无法破译!
我正在回答,因为我认为我认为可能上述证明没有正确说明。我添加了声明 n = Zero
的语句,它允许 isZero n = Bool.True
具有意义。 n = Zero
继承为 prf
并允许我声明 absurd prf
因为 isZero n = Bool.True
如果 n
是 Successor
某些 [=19] 则不能成立=].
Uninhabited (Successor _ = Zero) where
uninhabited Refl impossible
proofNIsZero : (n : Numbers.Nat) -> n = Zero -> isZero n = Bool.True
proofNIsZero Zero prf = Refl
proofNIsZero (Successor _) prf = absurd prf
是否有另一种方法或方式来考虑定义这些以避免陷入陷阱?
我正在努力学习 idris 范式,但仍在努力。这里我有一个函数 isZero,它需要一些自然的 Nat 和 returns True 或 False。
我的问题是非相关案例。
namespace Numbers
data Nat : Type where
Zero : Numbers.Nat
Successor : Numbers.Nat -> Numbers.Nat
isZero: Numbers.Nat -> Prelude.Bool.Bool
isZero Zero = True
isZero _ = False
isNotZero: Numbers.Nat -> Prelude.Bool.Bool
isNotZero Zero = False
isNotZero _ = True
proofNIsZero : (n : Numbers.Nat) -> isZero n = Bool.True
proofNIsZero Zero = Refl
proofNIsZero (Successor _) = ?rhs
很显然,任何 Nat 的某些继承者都不能为零。但我的挣扎在于证明。 ?rhs 孔的类型是
--------------------------------------
rhs : False = True
试图导航我认为应该(并且有一天会)简单的东西已经导致 uninhabited
、Void
、absurd
和 impossible
。 None 其中我可以消除歧义。
也许这些就是密钥 - 但我无法破译!
我正在回答,因为我认为我认为可能上述证明没有正确说明。我添加了声明 n = Zero
的语句,它允许 isZero n = Bool.True
具有意义。 n = Zero
继承为 prf
并允许我声明 absurd prf
因为 isZero n = Bool.True
如果 n
是 Successor
某些 [=19] 则不能成立=].
Uninhabited (Successor _ = Zero) where
uninhabited Refl impossible
proofNIsZero : (n : Numbers.Nat) -> n = Zero -> isZero n = Bool.True
proofNIsZero Zero prf = Refl
proofNIsZero (Successor _) prf = absurd prf
是否有另一种方法或方式来考虑定义这些以避免陷入陷阱?