【发布时间】:2023-03-15 21:55:01
【问题描述】:
在 Isabelle 中,我想定义接受谓词 'a => bool 的运算符,并根据“谓词的归纳结构”修改它们。例如,有人可能想要在这些谓词上计算 Disjunctive Normal Form (DNF),例如D (λ x. P x --> Q x) = (λ x. ¬ P x \/ Q x).
这里的问题是bool 不是归纳数据类型。我想到了两种可能的解决方案:
- 创建一个归纳数据类型,允许我在它们上定义我的运算符。为这个数据类型提供谓词 (
P::'a => bool) 语义,然后用它来证明我要检查的引理。 - 证明每个可能的归纳情况的定理。然后展示一个使用上述所有规则的一般案例。
作为第三种选择,我(希望)希望更有经验的 Isabelle 用户可以用一个绕过这个“归纳问题”的秘密函数/typedef 来启发我的方法。所以这里的问题是:
还有其他更简单的选择吗?如果是,是哪些?如果没有,我的任何方法是否看起来有缺陷或注定失败?
警告:我举了一个例子,DNF,但是,运算符不一定保留谓词的真值的一般情况对我来说更感兴趣,例如D 可以这样做:D (λ x. P x /\ Q x) = (λ x. P x \/ Q x)。
【问题讨论】:
标签: types boolean predicate definition isabelle