如何修复“代码方程左侧的部分应用常量”?

丹尼斯

我正在尝试定义代码方程式:

datatype t = A | B | C

inductive less_t :: "t ⇒ t ⇒ bool" where
  "less_t A B"
| "less_t B C"

code_pred [show_modes] less_t .

fun less_t_fun :: "t ⇒ t ⇒ bool" where
  "less_t_fun A A = False"
| "less_t_fun A B = True"
| "less_t_fun A C = True"
| "less_t_fun B C = True"
| "less_t_fun B _ = False"
| "less_t_fun C _ = False"

lemma tancl_less_t_code [code]:
  "less_t⇧+⇧+ x y ⟷ less_t_fun x y"
  apply (rule iffI)
  apply (erule tranclp_trans_induct)
  apply (erule less_t.cases; simp)
  apply (metis less_t_fun.elims(2) less_t_fun.simps(3) t.simps(4))
  apply (induct rule: less_t_fun.induct; simp)
  using less_t.intros apply auto
  done

value "less_t A B"
value "less_t_fun A C"
value "less_t⇧+⇧+ A C"

并得到以下警告:

Partially applied constant "less_t" on left hand side of equation, in theorem:
less_t⇧+⇧+ ?x ?y ≡ less_t_fun ?x ?y

这个问题与传递闭包无关。对于不同的定理,我已经收到这样的警告:

我只需要了解此警告的含义以及如何解决它。也许我应该定义一个不同的引理?

雷内·蒂曼(RenéThiemann)

问题在于引理的结构tancl_less_t_code确实不适合用作代码等式。请注意,等式左侧的最外层常量是可传递闭包谓词tranclp因此,这告诉代码生成器使用引理来实现tranclp但是,使用引理只能知道如何tranclp为一个特定谓词(即)实现less_t因此,您会收到Isabelle的抱怨,即您的实现过于具体。

至少有两种解决方法。

首先,[code]可以使用代替声明[code unfold]然后,每次出现tranclp less_t x y都会less_t_fun在代码生成过程中被替换为了使该规则更加适用,我将把引理重新配置为tranclp less = less_t_fun,以便即使tranclp less_t未完全应用,也可能发生。

其次,您可以采用引理的对称形式并将其声明为[simp]然后,在实现中,您只需调用less_t_fun而不是,tranclp less_t在证明中,简化器将切换到后者。

有关详细信息,[code][code_unfold]看看到代码生成的文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Visual Studio代码左侧栏中删除部分?

如何用相应方程式的左侧部分替换表达式的一部分?

如何修复sed组捕获以取消嵌套LaTeX代码部分?

如何从代码中应用部分迁移?

如何为WPF应用程序修复此代码?

如何修复导致应用程序崩溃的代码中的指令

如何修复我的 haskell 值代码并返回列表的其余部分?

罗斯林:应用代码修复后如何移动插入符号

如何获得方程式的特定代码

如何在JNLP应用程序中修复“缺少代码库,权限和应用程序名称清单属性”?

Java代码质量批量修复-检查是否相等时,字符串文字应放在左侧

如何修复'NameError:未初始化的常量Mongo :: ConnectionFailure

如何修复Go中的“常量x oveflows字节”错误?

如何修复或初始化常量CsvImporter :: Report

当字典被覆盖时,如何修复类变量/常量?

如何限制仅使用QueryOver联接的左侧部分的行数?

如何让“文件部分”显示在 Oracle SQL Developer 的左侧?

如何删除字符串的左侧部分?

如何自动完成表达式/等式的左侧部分

如何修复Linux内核部分不匹配?

如何修复部分视图以返回结果

如何修复部分删除的损坏内核

Visual Studio代码-如何永久禁用左侧栏?

无法修复左侧边栏

如何在浏览本地 Web 应用程序时跟踪和跟踪已执行的部分代码?

如何重用应用于文本视图的部分代码(识别器、工具栏)?

如何对所有工作表应用代码的最后一部分

如何修复“/”应用程序中的服务器错误。Visual Studio mysql c# 中的错误。下面是我的代码

基于Swift NSLayoutConstraint方程的常量