我有以下Isabelle目标:
lemma "? if foo then a ? a else b ? b ? ? False"
Run Code Online (Sandbox Code Playgroud)
没有战术simp,fast,clarsimp,blast,fastforce,等作出目标任何进展,尽管它是非常简单的.
为什么伊莎贝尔只是简化了if构造的主体,以便"a≠a"和"b≠b"成为False,从而解决了目标?
我想知道Isabelle/HOL亚型.我解释一下为什么在我对上一个SO问题的部分回答中对我来说很重要:
基本上,我只有一种类型,所以如果我可以通过子类型利用HOL类型的力量,它可能对我有用.
我已经在Isabelle文档,Web和Isabelle邮件列表中进行了搜索.使用"子类型"这个词虽然不多,但它似乎并不是伊莎贝尔词汇中非常重要的一部分.
部分地,我只想知道如何正确使用"子类型"这个词.我不想在Isabelle中调用一个不属于子类型的子类型.
根据Wiki,子类型是特定于语言的:
https://en.wikipedia.org/wiki/Subtyping
有人能给我一个创建Isar子类型的Isar命令列表吗?我正在调查typedef,正如上面提到的问题所解释的那样.我倾向于称之为子类型,但isar-ref.pdf在解释命令时不使用"子类型".
如果有其他方法可以创建Isabelle/HOL亚型,我想知道.
我想了解https://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/Sequents/Sequents/Sequents.html和https://www.cl.cam.ac.uk /research/hvg/Isabelle/dist/library/Sequents/Sequents/ILL.html我对理解基本项目的含义有疑问,即:
类型o,seq'
nonterminals seq,seqobj,seqcont?
这些类型和非终结者是否有一些"现实世界"的对应物?Sequent由函数[o,seq'] => seq'表示,所以,o和seq'可能没有任何真实的对应物?
我正在阅读"Isabelle的逻辑"(特别是第4章),LNCS 828,Isabelle/Isar参考手册(特别是8.2和8.5关于mixfix符号和语法定义),但我无法理解这些符号的含义因此我无法移动向前.任何指导都会非常有帮助!
我试图在Isabelle/HOL中实现单形逻辑http://www.sciencedirect.com/science/article/pii/S1570868314000573作为对象逻辑,但是所有东西都与"现实世界"如此脱节(数学是如何形成的)在纸上完成).
我试图通过 Isabelle(定理证明者)的 Isar 章节,第一个陈述是:
lemma "¬ surj(f :: 'a ? 'a set)"
Run Code Online (Sandbox Code Playgroud)
我想了解常数surj是什么。我知道查找定理很容易:
thm notI
Run Code Online (Sandbox Code Playgroud)
显示:
(?P ? False) ? ¬ ?P
Run Code Online (Sandbox Code Playgroud)
我试过谷歌搜索,surj但没有任何有用的东西出现。
我去了文档(https://isabelle.in.tum.de/documentation.html),但我找不到一种简单的方法来搜索它(例如使用搜索栏)。
人们在做证明时如何搜索定义或一般内容?你如何以有效的方式为伊莎贝尔查找东西,而不必求助于 SO 等琐碎的东西(我应该能够自己查找)?像man命令或-help标志等?
我意识到底部有一个查询框,所以我试了一下。但它向我展示了 38 个定理。这是一个很好的进步,但我觉得这是因为当我说我的引理时,伊莎贝尔确切地知道它在使用哪个。有没有办法强制 Isabelle 透露它使用的定义(因为它显然必须知道它使用的是什么)。
我刚刚注意到:
thm surj_def
Run Code Online (Sandbox Code Playgroud)
显示:
surj ?f = (?y. ?x. y = ?f x)
Run Code Online (Sandbox Code Playgroud)
确实显示了一些东西...这个问题是值得的,因为我发现了查询框,但无论如何人们在 Isabelle 中的发展方式仍然很棒。
编辑:
如果它与解释他们做了什么或类似的事情的战术文档相关联,那也会很好......
Isabelle/HOL验证器的核心算法是什么?
我正在寻找一个计划水平评估员的水平.
我只对Verifier感兴趣,而不是自动定理证明的策略.
我想从头开始实现一个简单的验证验证器(纯粹出于教育原因,而不是用于生产用途.)
我想了解Isabelle/HOL 的核心Verifier算法.我不关心用于自动定理证明的策略/代码.
我怀疑核心Verifier算法非常简单(而且优雅).但是,我找不到它.
谢谢!
当我在伊莎贝尔中说出一个引理时,我经常打字nitpick,如果这不能给我一个反例.然后我键入sledgehammer以尝试自动查找证明.
我想知道:是否可以调用Nitpick和Sledgehammer以便它们同时运行?由于Sledgehammer已经将我的引理发送给了许多自动证明器,这些证明器中的其中一个实际上不是像Nitpick那样的反例调查器吗?
当我apply (rule)在apply-script中使用时,通常会选择适当的规则.这同样适用于proof结构化证明.我在哪里可以学习/查找所用规则的名称?
在Isar风格的Isabelle证明中,这很好用:
from `a ? b` have foo
proof
assume a
show foo sorry
next
assume b
show foo sorry
qed
Run Code Online (Sandbox Code Playgroud)
proof这里调用的隐式规则是rule conjE。但是我应该在那里放置它,以使其不止一种分离:
from `a ? b ? c` have foo
proof(?)
assume a
show foo sorry
next
assume b
show foo sorry
next
assume c
show foo sorry
qed
Run Code Online (Sandbox Code Playgroud) 到目前为止,我在Isabelle的以下风格中使用矛盾来编写证据(使用Jeremy Siek的模式):
lemma "<expression>"
proof -
{
assume "¬ <expression>"
then have False sorry
}
then show ?thesis by blast
qed
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在没有嵌套的原始校样块的情况下工作{ ... }?
我想使用Program Fixpoint或Function在Coq中定义以下函数:
Require Import Coq.Lists.List.
Import ListNotations.
Require Import Coq.Program.Wf.
Require Import Recdef.
Inductive Tree := Node : nat -> list Tree -> Tree.
Fixpoint height (t : Tree) : nat :=
match t with
| Node x ts => S (fold_right Nat.max 0 (map height ts))
end.
Program Fixpoint mapTree (f : nat -> nat) (t : Tree) {measure (height t)} : Tree :=
match t with
Node x ts => Node (f x) (map …Run Code Online (Sandbox Code Playgroud)