在 ACL2 中添加倒数
Adding Reciprocals in ACL2
我是 ACL2 的新手,所以我知道你们中的一些人可能觉得这是一个如此简单的解决方案,以至于您会对我的外展寻求帮助表示不满。我想弄清楚如何让我的代码加起来达到第 N 个倒数平方(即,如果 n=4,那么我正在寻找 1/1 + 1/4 + 1/9 + 1/16)
我有一个加起来为 n 的函数,它可以正常工作,看起来像这样
(defun sum-up-to-n (n)
(if (zp n)
0
(+ n (sum-up-to-n (- n 1)))))
倒数平方看起来像这样
(defun sum-up-to-nSqRecip (n)
(if (zp n)
0
(+ (sum-up-to-nSqRecip (- n 1))) 1/n^2) ))
我收到这个错误“正文
SUM-UP-TO-NSQRECIP 包含变量符号的自由出现
|1/N^2|。请注意 |1/N^2|发生在条件 (NOT (ZP N)) 的上下文中
来自周围的 IF 测试。”我不知道如何解决这个错误。
包含内容
(encapsulate nil
(set-state-ok t)
(program)
(defun check-expect-fn (left right sexpr state)
(if (equal left right)
(mv nil (cw "check-expect succeeded: ~x0~%" sexpr) state)
(er soft nil "check-expect failed: ~x0
Expected: ~x1
Actual: ~x2" sexpr right left)))
(defmacro check-expect (&whole sexpr left right)
`(check-expect-fn ,left ,right (quote ,sexpr) state))
(logic))
(include-book "doublecheck" :uncertified-okp t :dir :teachpacks)
(include-book "arithmetic-5/top" :uncertified-okp t :dir :system)
ACL2 使用 LISP 语法,这意味着您需要前缀运算符。所以 1/n^2 应该是 (/ 1 (* n n)).
LISP 允许很多字符出现在名称中,您的示例中的 1/n^2 被视为变量的名称,它没有绑定到任何东西(也不是输入)。这就是您收到 "free occurrence of the variable" 错误的原因。
我是 ACL2 的新手,所以我知道你们中的一些人可能觉得这是一个如此简单的解决方案,以至于您会对我的外展寻求帮助表示不满。我想弄清楚如何让我的代码加起来达到第 N 个倒数平方(即,如果 n=4,那么我正在寻找 1/1 + 1/4 + 1/9 + 1/16)
我有一个加起来为 n 的函数,它可以正常工作,看起来像这样
(defun sum-up-to-n (n)
(if (zp n)
0
(+ n (sum-up-to-n (- n 1)))))
倒数平方看起来像这样
(defun sum-up-to-nSqRecip (n)
(if (zp n)
0
(+ (sum-up-to-nSqRecip (- n 1))) 1/n^2) ))
我收到这个错误“正文 SUM-UP-TO-NSQRECIP 包含变量符号的自由出现 |1/N^2|。请注意 |1/N^2|发生在条件 (NOT (ZP N)) 的上下文中 来自周围的 IF 测试。”我不知道如何解决这个错误。
包含内容
(encapsulate nil
(set-state-ok t)
(program)
(defun check-expect-fn (left right sexpr state)
(if (equal left right)
(mv nil (cw "check-expect succeeded: ~x0~%" sexpr) state)
(er soft nil "check-expect failed: ~x0
Expected: ~x1
Actual: ~x2" sexpr right left)))
(defmacro check-expect (&whole sexpr left right)
`(check-expect-fn ,left ,right (quote ,sexpr) state))
(logic))
(include-book "doublecheck" :uncertified-okp t :dir :teachpacks)
(include-book "arithmetic-5/top" :uncertified-okp t :dir :system)
ACL2 使用 LISP 语法,这意味着您需要前缀运算符。所以 1/n^2 应该是 (/ 1 (* n n)).
LISP 允许很多字符出现在名称中,您的示例中的 1/n^2 被视为变量的名称,它没有绑定到任何东西(也不是输入)。这就是您收到 "free occurrence of the variable" 错误的原因。