如果我有一个So
的类型,比如So (x < y)
,通过创造的东西像在伊德里斯,我如何从一个类型中提取证据?
IsLt : Ord a => (x: a) -> (y: a) -> Type
IsLt x y = So (x < y)
我怎样才能提取(x < y)
证明了这件事?我无法在标准库中找到此功能。
So
在标准库中定义为:
data So : Bool -> Type where
Oh : So True
而且我不知道如何从提取的证据,用于在证明这样的:
ltNeNat : {x: Nat} -> {y: Nat} -> So (x < y) -> Not (x = y)
的确如此。我被证明'S x
x
Shersh
你需要“反映”布尔变成命题。 (Coq生态系统)的ssreflect广泛使用它。这样你就可以使用逻辑和计算 - 这在处理可决定的命题时非常有用。 –