isabelle - 枚举集合元素的归纳谓词
问题描述
是否可以使以下示例起作用?
inductive elems where
"x |∈| xs ⟹
elems xs x"
code_pred [show_modes] elems .
values "{x. elems {|1::nat,2,3|} x}"
解决方案
默认情况下,谓词编译器对有限集和成员运算符一无所知|∈|
。但是,如果您添加以下代码段,则它可以工作。
lemma fmember_code_predI [code_pred_intro]:
"x |∈| xs" if "Predicate_Compile.contains (fset xs) x"
using that by(simp add: Predicate_Compile.contains_def fmember.rep_eq)
code_pred fmember
by(simp add: Predicate_Compile.contains_def fmember.rep_eq)
这就是它起作用的原因:常量Predicate_Compile.contains
实现了普通集合的枚举,谓词编译器知道它。具有属性的引理code_pred_intro
告诉谓词编译器将成员资格fset
视为好像它被定义为以引理语句作为引入规则的归纳谓词。在code_pred
命令本身,您必须证明相应的排除规则。这两个规则(引入规则和排除规则)足以让谓词编译器进行模态分析并编译方程并证明它们是正确的。
您甚至不需要定义自己的 predicate elems
。直接加入fset
作品:
values "{x. x |∈| {|1::nat,2,3|}}"
推荐阅读
- python - 绘制 3D 矢量场
- php - 登录后PHP重定向到register.php
- android - 如何在android drawable中设置具有动态大小和spect ratio的联合形状
- python - 将所有 unicode 表情符号打印到文件中
- machine-learning - 训练数据的高精度召回,但分类问题中的测试数据非常差
- xtext - 如何使用 JvmModelInferrer 为 Xbase XExpression 生成 Java 代码?
- javascript - 在对象 JavaScript 中添加对象数组
- laravel - 使用 Laravel Backpack 上传文件(类型 => 上传)在编辑中不可见
- excel - 如何在 Excel 公式中的斜线之间搜索和提取?
- javascript - 如何正确添加图层控件?