You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

seq.fold_left函数使用报错求助:Z3序列折叠函数调用问题排查

问题排查与修复

核心错误点

  • define-fun缺少返回类型声明:Z3要求define-fun必须明确指定返回值类型,你的代码里sum_seq函数未声明返回类型。
  • seq.fold_left参数顺序错误:Z3中seq.fold_left的正确参数顺序为(seq.fold_left <序列> <初始值> <折叠函数>),你写反了函数与序列的位置。
  • 类型不匹配:t被声明为(Seq Int),但seq.fold_left通过f(输入输出均为Int)计算后返回单个Int值,直接断言相等会导致类型冲突。

修复后的代码

(declare-const s (Seq Int))
(declare-const t Int)  ; 修正t的类型为Int,匹配fold_left的返回值
(declare-fun f (Int Int) Int)

; 补充sum_seq的返回类型Int,修正seq.fold_left的参数顺序
(define-fun sum_seq ((s (Seq Int))) Int
  (seq.fold_left s 0 (lambda (acc x) (+ acc x)))
)

; 修正seq.fold_left的参数顺序
(assert (= t (seq.fold_left s 0 f)))

(check-sat)
(get-model)

说明

  1. 修正define-fun:在参数列表后添加Int声明返回类型,同时调整seq.fold_left的参数为「序列s、初始值0、折叠lambda函数」。
  2. 修正t的类型:由于fold_left最终返回单个Int值,将t的类型从(Seq Int)改为Int。
  3. 调整assert中的seq.fold_left参数顺序,符合Z3的调用规范。

内容的提问来源于stack exchange,提问作者Tuan Minh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:25:19