agda - 找出所有函数参数模式匹配
问题描述
有:
data Bin : Set where
nil : Bin
x0_ : Bin → Bin
x1_ : Bin → Bin
data One : Bin → Set where
one : One (x1 nil)
y0_ : ∀ {bin : Bin} → One bin → One (x0 bin)
y1_ : ∀ {bin : Bin} → One bin → One (x1 bin)
one-ident : ∀ {x : Bin} → One x → to (from x) ≡ x
生成所有函数参数模式匹配的逻辑是什么?
one-ident one = {! !}
one-ident {x0 x} (y0 o) = {! !}
one-ident {x1 x} (y1 o) = {! !}
例如,知道第一个参数是{x0 x}
为什么第二个参数必须是(y0 o)
?为什么第二个论点不能是(y1 o)
?
代码示例取自此处。
解决方案
one-ident : ∀ {x : Bin} → One x → to (from x) ≡ x
one-ident one = {! !}
one-ident {x0 xx} (y0 o) = {! !}
one-ident {x1 xx} (y1 o) = {! !}
当您知道它x
是x0 xx
one-ident 时,您就知道第二个参数的类型是One (x0 xx)
。只有 1 个构造函数One
可以具有该类型,即y0_
.
推荐阅读
- azure-data-factory-2 - Azure Synapse Analytics - 运行数据流的异常
- excel - 用于更改图表标题的 VBA 代码
- python - 如何对混淆矩阵中的列进行排序?
- python - OpenCV + gym-retro:输入图像中的通道数无效
- angular - 请问它们在创建 nx 应用程序中的含义
- google-api - Spreadsheets.get 在获取所选文档时返回 404
- pytorch - 在不创建终端节点的情况下使用 AWS Sagemaker 进行模型性能
- selenium - Selenium Hub 未连接到应用程序服务器
- javascript - 使用蹦床从嵌套数组创建树并将其转换为字符串
- git - 如何仅使用影响某些文件的提交来变基?