从 case 语句证明两个值相等
Prove two values are equal from case statement
以下示例使用 Bi
package 中的 Data.Bin
:
import Data.Bin
foo : (x, y : Bin) -> Dec (binCompare x y = LT)
foo x y = case binCompare x y of
LT => Yes (C1 ?hole1)
EQ => ...
GT => ...
:t ?hole1
binCompare x y = LT
在处理 LT
案件时,如何获得 binCompare x y = LT
的证明?
您需要使用 view 而不是 case
:
Since types can depend on values, the form of some arguments can be determined by the value of others.
因此以下版本按预期工作:
foo : (x, y : Bin) -> Dec (binCompare x y = LT)
foo x y with (binCompare x y)
foo x y | LT = Yes Refl
foo x y | EQ = ?q_2
foo x y | GT = ?q_3
以下示例使用 Bi
package 中的 Data.Bin
:
import Data.Bin
foo : (x, y : Bin) -> Dec (binCompare x y = LT)
foo x y = case binCompare x y of
LT => Yes (C1 ?hole1)
EQ => ...
GT => ...
:t ?hole1
binCompare x y = LT
在处理 LT
案件时,如何获得 binCompare x y = LT
的证明?
您需要使用 view 而不是 case
:
Since types can depend on values, the form of some arguments can be determined by the value of others.
因此以下版本按预期工作:
foo : (x, y : Bin) -> Dec (binCompare x y = LT)
foo x y with (binCompare x y)
foo x y | LT = Yes Refl
foo x y | EQ = ?q_2
foo x y | GT = ?q_3