我同意 Dominique Unruh 提供的有见地的评论。但是,我想提一下,在 Isabelle/HOL 的主库的源代码中已经存在一个定理,该定理捕捉了您试图证明的定理背后的想法。事实上,它至少以两种不同的格式存在:让我将它们命名为传统的 Isabelle/HOL 格式和规范的FuncSet 格式。前者见定理bij_betw_iff_bijections:
"bij_betw f A B ⟷ (∃g. (∀x ∈ A. f x ∈ B ∧ g(f x) = x) ∧ (∀y ∈ B. g y ∈ A ∧ f(g y) = y))"
FuncSet 的情况稍微复杂一些。似乎不存在一个单一的定理来捕捉这个想法。然而,定理bij_betwI、bij_betw_imp_funcset 和inv_into_funcset 几乎等同于您试图陈述的定理。让我提供一个草图,说明如何以一种在FuncSet 意义上被认为是合理规范的方式表达这个定理(尝试自己证明):
lemma bij_betw_iff:
shows "bij_betw f A B ⟷
(
∃g.
(∀x. x∈A ⟶ g (f x) = x) ∧
(∀y. y∈B ⟶ f (g y) = y) ∧
f ∈ A → B ∧
g ∈ B → A
)"
sorry
我还想重复 Dominique Unruh 的建议,并提供几点补充意见:
我的建议:首先尝试使用 bij 而不是 bij_betw 进行证明。
确实,这是一个非常好的主意。通常,通过尝试将问题限制在明确定义的集合A 和B,而不是直接使用类型,您触及了逻辑上称为相对化 的主题。例如,对于一个温和的外行人的介绍,请参阅https://leanprover.github.io/logic_and_proof/first_order_logic.html [1],对于在集合论的上下文中稍微更彻底的介绍,请参阅 [2,第 12 章]。正如您现在可能已经注意到的那样,在 Isabelle/HOL 中将定理相对化并不容易,并且需要额外的证明工作。
然而,存在 Isabelle/HOL 的扩展,它允许定理相对化过程的自动化。有关此扩展的更多信息,请参阅 Ondřej Kunčar 和 Andrei Popescu [3] 的文章From Types to Sets by Local Type Definition in Higher-Order Logic。该框架还存在一个大规模应用示例[4]。独立地,我正在努力使这个扩展更加用户友好,并且非常缓慢地接近我努力的最后阶段:请参阅https://gitlab.com/user9716869/tts_extension。因此,原则上,如果你知道如何使用 Types-To-Sets 并且你接受它的公理,那么用bij 证明这个定理就足够了,例如,
"bij f ⟷ (∃g. (∀x. g (f x) = x) ∧ (∀y. f (g y) = y))",
然后,定理像
bij_betw_iff_bijections 和 bij_betw_iff 可以通过单击按钮自动免费合成(几乎......)。
最后,为了完整起见,让我就您的疑问提出自己的建议(尽管正如我所提到的,我同意 Dominique Unruh 所说的一切)
如何扩展相关定义,然后将其简化为
功能应用。我关注了一些伊莎贝尔(2021)
关于 apply 风格的 simp 和结构化的示例/教程
风格 Isar 证明,但不能流利地使用 Isar 证明。有一次,我
启动了证明命令,我不知道如何简化或移动任何
进一步。
我相信,学习您正在尝试学习的内容的最佳方法是遵循 Tobias Nipkow 和 Gerwin Klein [5] 所著的具体语义一书中的练习。此外,我还会查看 Tobias Nipkow 等人 [6] 的 A Proof Assistant for Higher-Order Logic(它有点过时了,但我发现它特别适合学习 apply-样式脚本/直接规则应用程序)。顺便说一句,我主要是从这些书中自学 Isabelle,而没有任何正式方法方面的经验。
Isar 有一种新的方式来假设...显示...来陈述定理。
像上面的例子一样,是否有类似的支持来证明 iff 的 (⟷)?
没有它,就无法访问 assms 等,是否有必要
在证明过程中假设除了结论之外的所有内容。
我会让 Dominique Unruh 给出的建议更加明确:为此使用 rule iffI 或 intro iffI。
编辑。当你使用rule iffI(或类似的)来开始你的结构化Isar证明时,你需要为每个子目标明确地陈述你的假设(使用assume ... show ...范式)。但是,有一个工具可以自动生成这样的样板 Isar 代码。它被称为 Sketch-and-Explore,您可以在 Isabelle/HOL 主库的目录HOL/ex 中找到它。在这种情况下,您只需输入sketch(rule iffI),就会为每个子目标自动生成assume/show 范式。
参考文献
- Avigad J、Lewis RY 和 van Doorn F. 逻辑与证明。
- Jech T. 集合论。第三版。海德堡:斯普林格; 2006.(纯数学和应用数学,一系列专着和教科书)。
- Kunčar O, Popescu A. 在高阶逻辑中通过局部类型定义从类型到集合。自动推理杂志。 2019;62(2):237–60。
- Immler F, Zhan B. Isabelle/HOL 中线性代数的平滑流形和类型集。在:关于认证程序和证明的第 8 届 ACM SIGPLAN 国际会议。纽约:ACM; 2019 页。 65-77。 (CPP 2019)。
- Nipkow T,Klein G. 与 Isabelle/HOL 的具体语义。海德堡:施普林格出版社; 2017. (http://concrete-semantics.org/)
- Nipkow T、Paulson LC、Wenzel M. 高阶逻辑证明助手。海德堡:施普林格出版社; 2017 年。