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

Isabelle中带过滤条件的nat类型集合推导式求值报错如何解决?

问题原因

你遇到的排序错误是Isabelle的value命令默认求值策略导致的:

  • 无过滤条件的集合推导式可以被正常识别为「遍历给定有限集合映射取值」,无需枚举整个类型
  • 添加∧连接的过滤条件后,默认的求值器不会自动识别到约束仅作用于给定的有限集合,会尝试枚举整个nat × nat类型来匹配谓词,而nat是无限类型,没有实现enum(可枚举)类型类,因此抛出错误。
无需更换set类型的解决方案

方案1:改写集合推导式结构

将过滤条件内化为给定集合的子集约束,让求值器明确只需遍历有限范围:

value "{fst x | x. x ∈ {y ∈ {(1::nat,2::nat),(2,4),(3,4)}. snd y = 4}}"

这种写法与你原有的带过滤条件的推导式完全等价,可直接正常求值得到结果{2, 3}。

方案2:指定value命令的code求值模式

不需要修改推导式写法,仅需给value命令加上[code]参数,启用代码生成器模式的求值逻辑,该模式可以正确识别有限集合的约束范围,不会触发全类型枚举逻辑:

value [code] "{fst x | x. x ∈ {(1::nat,2::nat),(2,4),(3,4)} ∧ snd x = 4}"

执行后可直接得到正确的求值结果。

以上两种方案都不需要将set替换为fset或list类型,可直接满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:09:00