gpt4 book ai didi

agda - 无法解析左侧 (m + 1) * n

转载 作者:行者123 更新时间:2023-12-05 01:36:48 24 4
gpt4 key购买 nike

我刚开始学习 Agda 阅读 Programming Language Foundations in Agda .在第一章中有乘法的定义,其中一种情况是 (suc m) * n = n + (m * n)。我认为它可以更好地表达为 (m + 1) * n = n + (m * n),但显然情况并非如此。以下程序:

data ℕ : Set where
zero : ℕ
suc : ℕ → ℕ

_+_ : ℕ → ℕ → ℕ
zero + n = n
(suc m) + n = suc (m + n)

{-# BUILTIN NATURAL ℕ #-}

_*_ : ℕ → ℕ → ℕ
zero * n = zero
-- This is fine:
-- (suc m) * n = n + (m * n)
-- This is not:
(m + 1) * n = n + (m * n)

失败:

Could not parse the left-hand side (m + 1) * n
Operators used in the grammar:
* (infix operator, level 20) [_*_ (/Users/proxi/Documents/Projekty/Agda/multiply.agda:11,1-4)]
+ (infix operator, level 20) [_+_ (/Users/proxi/Documents/Projekty/Agda/multiply.agda:5,1-4)]
when scope checking the left-hand side (m + 1) * n in the
definition of _*_

我相信 Agda 的术语可以说使用构造函数的定义工作正常,但使用运算符的定义却不行。为什么呢?这是永远不可能的,还是取决于运算符(函数)的定义方式?

最佳答案

在模式中使用函数是 not supported .

另请注意,如果模式中允许使用函数,它将是 (1 + m) * n 而不是 (m + 1) * n,因为 _+_ 由第一个参数的模式匹配定义,因此 1 + m 简化为 suc mm + 1 卡住了。

关于agda - 无法解析左侧 (m + 1) * n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61703232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com