首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当有证据表明转换将起作用时为natToFin

当有证据表明转换将起作用时为natToFin
EN

Stack Overflow用户
提问于 2015-04-28 09:28:01
回答 1查看 98关注 0票数 5

标准库中的natToFin函数具有以下签名:

代码语言:javascript
运行
复制
natToFin : Nat -> (n : Nat) -> Maybe (Fin n)

natToFin 4 5返回Just (FS (FS (FS (FS FZ)))) : Maybe (Fin 5),而natToFin 5 5返回Nothing

我想要一个具有以下签名的函数:

代码语言:javascript
运行
复制
myNatToFin : (m : Nat) -> (n : Nat) -> { auto p : n `GT` m } -> Fin n

它的行为与标准lib函数相同,但不需要返回Maybe,因为如果m大于m,则始终可以从n生成Fin n

如何实现myNatToFin

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 09:43:02

您可以通过同时递归mnn `GT` m的证据来直接完成此操作:

代码语言:javascript
运行
复制
import Data.Fin

myNatToFin : (m : Nat) -> (n : Nat) -> {auto p : n `GT` m} -> Fin n
myNatToFin Z (S n) = FZ
myNatToFin (S m) (S n) {p = LTESucc _} = FS $ myNatToFin m n

请注意,在第二种情况下,您需要对p进行模式匹配(即使在右侧没有使用它的值),以便可以填充递归调用的自动参数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29908731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档