Isabelle是否具有以下平等性:
setprod f (UNIV :: 'n∷finite set) = setprod (λx. x) (f ` (UNIV :: 'n∷finite set))
如果是,我如何证明
(* tested with Isabelle2013-2 *)
theory Notepad
imports
Main
"~~/src/HOL/Library/Polynomial"
begin
notepad
begin{
fix f :: "'n∷finite
这是我从伊莎贝尔教程中得到的一个理论。它有方法证明定理,但我想知道如何用两个列表调用下面的app函数
theory ToyList
imports Main
begin
datatype 'a list = Nil | Cons 'a "'a list"
fun app :: "'a list ⇒ 'a list ⇒ 'a list" where
"app Nil ys = ys" |
"app
我试图定义有效的四倍⊨ {P} Isabelle/HOL中霍尔逻辑的c×c'{Q},其中c和c'是命令,P和Q是断言。断言定义为:
type_synonym assn = "state × state ⇒ bool"
我已将有效的四倍定义如下:
definition
rel_hoare_valid :: "assn ⇒ com × com ⇒ assn ⇒ bool" ("⊨ {(1_)}/ (_)/ {(1_)}" 50)
where "⊨ {P}c×c'{Q} = ..."
Type
在以下方面:
(i,1)|i
(i, 1) | i <- [7,7,7,8,8,8,2,2,1,1]
[(i, 1) . i <- [7,7,7,8,8,8,2,2,1,1]]
map (λi. (i, 1)) [7, 7, 7, 8, 8, 8, 2, 2, 1, 1]
假设add是一个函数,{(x,y).exy=0}是一个确定的集合。我想(示意性地)说明:
所以在一定条件下,集合和运算给出了一个群。我的疑问是如何用伊莎贝尔来表达这一点。我正在阅读文档的语言环境教程,但我不太清楚如何编写它。以下是编写方法:
lemma group_law:
assumes "∃ b. 1/c = b^2" "¬ (∃ b. b ≠ 0 ∧ 1/d = b^2)"
shows "comm_group ⦇carrier = {(x,y). e x y = 0}, mult
我正在伊莎贝尔身上正式化。第4.1节描述了以下设置:
context
fixes c d :: real
assumes "c ≠ 0" "∃ b. c = b^2" "∃ b'. d = b'^2"
begin
definition t where "t = sqrt(d/c)"
definition e' where "e' x y = x^2 + y^2 - 1 - t^2 * x^2 * y^2"
definition ρ where "ρ x y = (-y,x
我有一个梅蒂斯证据,是用大锤用紫色突出显示的。突出显示的确切含义是什么?证据似乎有效;真的吗?紫色表示metis呼叫仍在运行。有三种可能的结果:
metis完成:证明有效(无背景)
metis失败:证明无效(红色背景)
梅蒂斯没有终止:证据无效(紫色背景永远保留)
Isabelle是多线程的,只有在所有之前的策略完成后,您才是安全的
您决定等待的时间由您决定,但超过几秒钟通常意味着您必须重新运行Sledgehammer…紫色表示metis呼叫仍在运行。有三种可能的结果:
metis完成:证
我试图在Isabelle(2021)中找到一个定理,大意如下:
lemma "A ⟹ B ⟹ A ∧ B"
到目前为止,我已尝试使用以下模式:
find_theorems "_ ⟹ _ ⟹ _ ∧ _"
但是它显然返回了很多结果,因为模式太抽象了。不同的占位符\uu可以表示彼此非常不同的事物
我想知道是否有任何方法可以在搜索中更加具体,以表示某些占位符是相同的。例如,在Isabelle的搜索设施中是否可以实现以下假设示例
find_theorems &
我先问我的问题
问题:我需要num数据类型的二进制和十六进制语法。有什么地方我可以轻松适应吗?有人能为我提供吗?或者,它已经存在了吗
数字类型类允许使用二进制和十六进制表示法,例如0b0101和0xAA。但是,num没有被实例化为numeric,我只看到直接使用的构造函数,比如这个源代码:
primrec sqr :: "num => num" where
"sqr One = One" |
"sqr (Bit0 n) = Bit0
我正在用codatatype做我的第一个实验,但是我很早就被卡住了。我从分支树(可能是无限树)的定义开始:
codatatype (lset: 'a) ltree = Node (lnext : "'a ⇒ 'a ltree option")
有些定义很管用:
primcorec lempty :: "'a ltree"
where "lnext lempty = (λ _ . None)"
primcorec single :: "'a ⇒ 'a ltree"
where "lne
我在理论中写了一个定义,比如:
定义mycmd::string,其中
“mycmd==”外部可执行文件“
然后我需要在ML代码块中使用mycmd“外部可执行文件”的值作为Isabelle\u System.bash\u output的参数,但我不知道如何获得mycmd的值。有什么建议吗
谢谢大家! 我认为这就是你想要的,尽管我并不真正理解你想要做什么:
ML {* Thm.concl_of @{thm mycmd_def}
|> Term.dest_comb |> snd
我是伊莎贝尔的新手,这是我第一个程序的简化
theory Scratch
imports Main
begin
record flow =
Src :: "nat"
Dest :: "nat"
record diagram =
DataFlows :: "flow set"
Transitions :: "nat set"
Markings :: "flow set"
fun consume :: "diagram × (nat
我有伊莎贝尔的定义:
definition two_integer_max_case_def :: "nat ⇒ nat ⇒ nat" where
"two_integer_max_case_def a b = (case a > b of True ⇒ a | False ⇒ b)"
value "two_integer_max_case_def 3 4"
lemma spec_1:
assumes "a: n
我试图用量词MOST扩充FOL.thy,我打算将其定义为简单多数,即
(MOST x. P(x)) ==> card P(x) > card ~P(x).
我不知道如何修改FOL.thy文件。
在公理化下,我想添加:
Most :: "('a => o) => o" (binder "MOST " 10)
在where子句下面:
specM: "(ALL x. P(x)) ==> (MOST x. P(x))" and
mostI: "(MOST x. P(x
有人试图在Linux ARM上构建Isabelle吗?
armv7hl上有Fedora 21。
我能建造纯净的,但不能建造。
这似乎是记忆的问题,但我不确定。
有没有办法一步一步地建立它?
heaps/polyml-5.5.2u armv7l-linux的内容只包含纯编译后的内容
更新:
臂板是
联想IdeaPadA10,1GB内存
Android版本4.2.2
内核3.0.36
Fedora 21是使用chroot安装的
错误消息是:
* * * Failed to load theory "
我需要使用一些等式推理,但我对重新定义所有基础理论不感兴趣。我的目标是像sledgehammer那样使用现有的SMT解算器。例如,假设这个等式理论有一些简单的算术
datatype expr = Var string
| Const nat
datatype constraint = Eq "expr * expr" (* E1 = E2 *)
fun SAT :: "constraint list ⇒ bool" where
"SAT L = undefin
假设我想证明引理∃ n m k。[n,m,k]=[2,3,5]在伊莎贝尔/Isar中。如果我按照第45页Isabelle/HOL教程中的建议进行,我的证明如下:
lemma "∃ n m k . [n, m, k] = [2, 3, 5]"
proof
show "∃ m k . [2, m, k] = [2, 3, 5]"
proof
show "∃ k . [2, 3, k] = [2, 3, 5]"
proof
show "[2, 3, 5] = [2,
我有以下记录语言:
datatype "term" = Rcd "string ⇀ term"
fun id_term :: "term ⇒ term"
where "id_term (Rcd vals) = Rcd (map_option id_term ∘ vals)"
这不会通过终止检查器,因为类型的size函数始终为0。我也不知道如何在不将映射约束到有限域的情况下提供可计算的度量
那么:我如何证明上述定义的终止?我怀疑我必须证明某些归纳谓词在术语上的良好基础,但我不确定如何做到
在Isabelle中是否可以访问数据类型的各个元素?假设我有以下数据类型:
datatype foo = mat int int int int
和(例如,在引理中)
是否可以访问一个数据库的单个元素?或者,修复单个元素(fixabcd::int),然后将a定义为matabcd 在逻辑级别上,您可以使用case语法来解构数据类型(即mat a b c d的case a)⇒ …)。您还可以使用fun或primrec定义自己的投影函数,例如:
primrec foo1 where "foo1 (
有谁能帮我用下面的方程组(一阶逻辑)在Isabelle/HOL中证明X=M
N>=M
forall n. 0=<n<N --> n<M
X=N
N>=M
福尔。0=只有当变量是自然变量而不是整数时,才能进行证明,例如,使用此证明:
theory Scratch
imports Main
begin
theorem
fixes N M X :: nat
assumes "N ≥ M"
assumes "∀ n. (0 ≤ n ∧ n < N)
我将子类和子类型关系定义为类Java语言的归纳谓词,并希望为这些关系生成代码。定义和生成子类型关系的代码没有问题:
type_synonym class_name = string
record class_def =
cname :: class_name
super :: "class_name option"
interfaces :: "class_name list"
type_synonym program = "cl
我看到Isabelle/HOL中的许多定理更倾向于元级蕴涵:
==>
而不是
-->
对象逻辑层,即高阶逻辑蕴涵
粗略地说,在规则陈述中,应该使用元级含义来分离假设和结论
除此之外,关于对象和元级含义的使用,我应该知道什么?我看到后者被广泛使用。什么时候以及为了什么我应该使用HOL?我认为简短的答案是:尽可能使用==>,因为它比-->更容易使用
也就是说,您不应该在编写的代码中经常看到==>
编写引理时,最好使用假设和显示语法
对于带有have的中间步骤,有一个带有if的语法:
我想在区域设置中创建一个可执行的归纳。没有语言环境一切正常:
definition "P a b = True"
inductive test :: "'a ⇒ 'a ⇒ bool" where
"test a a" |
"test a b ⟹ P b c ⟹ test a c"
code_pred test .
但是,当我在区域设置中尝试相同操作时,它不起作用:
locale localTest
begin
definition "P' a b = True"
inducti
我在伊莎贝尔身上有以下两种表达:
consts drives ::"(Person × Car) set"
type_synonym drives="(Person × Car) set"
它们在语义上有什么不同
我认为type\u同义词只是前面指定类型的一个简短名称。对吧?
但是const的作用是什么呢?(伊莎贝尔教程文档——第119页——说:“这是伊莎贝尔在不定义常量的情况下声明常量的方式。”但在什么意义上,上面的表达式可以是常量?!)
谢谢事实上,type_同义词只是指定类型的同义词,
如果对某个区域设置的参数有某种定义,使该区域设置的假设更易于编写和/或读取和/或理解(因为函数非常复杂,因此会简化假设语句,或者其名称使假设更易于阅读和理解),定义该函数的最佳方法是什么
作为一个人为的例子,假设我们想要将函数fg合并到假设的陈述中(当然这里没有实际用途):
人们可能会认为使用定义:
locale defined_during =
fixes f :: "'a ⇒ 'b ⇒ 'c"
and g :: "'b ⇒ 'a"
and fg :: "'b ⇒ 'c"
我对伊莎贝尔的补充如下:
function proj_add :: "(real × real) × bit ⇒ (real × real) × bit ⇒ (real × real) × bit" where
"proj_add ((x1,y1),l) ((x2,y2),j) = ((add (x1,y1) (x2,y2)), l+j)"
if "delta x1 y1 x2 y2 ≠ 0 ∧ (x1,y1) ∈ e_aff ∧ (x2,y2) ∈ e_aff"
| "proj_
在Isabelle(2020)理论文件中键入证据陈述时,例如
from ‹prime p › have p: "1 < p "
fromèprime p›have p:“1
我想知道为什么在Isabelle/HOL(2021)中,函数的逆函数是用非确定性的SOME定义的:
definition inv_into :: "'a set ⇒ ('a ⇒ 'b) ⇒ ('b ⇒ 'a)" where
"inv_into A f = (λx. SOME y. y ∈ A ∧ f y = x)"
这意味着函数f(即inv_进入(范围f)f)的逆函数可以是不确定的(即具有未定义的值)
所以在普通数学中,inv_进入(范围f)f实际上不是
如何通过thf在Isabelle中创建对象逻辑
关于在文档中创建对象逻辑,我发现
2.3 Example: First-Order Logic
在Isabelle/Isar参考手册中
关于对象逻辑和使用thf,我还应该读些什么
THF是以论文中的高阶形式键入的。简短的回答是:目前,您不能
在Isabelle中,没有任何工具仅通过THF定义对象逻辑。对象逻辑仍然是在纯逻辑的基础上定义的,如您引用的示例所示 请详细说明:什么是thf?我不太明白你的目标。您能澄清一下吗?创建对象逻辑的传统方法是用纯
关于《伊莎贝尔》中的子类型问题非常冗长。因此,我的简单问题是,如果我定义a如下,如何将类型B定义为a的子类型:
typedecl A
通过这样做,我想让类型B的元素可以访问在A上定义的所有操作和关系(这里不打印它们)
一个更复杂的例子是将B和C定义为A的子类型,这样B和C是不相交的,A的每个元素要么是B类型,要么是C类型
谢谢Isabelle没有子类型,尽管子类型的某些方面可以按照解释进行模拟。如果您想在不同类型上使用相同的操作,您可能需要查看Isabelle的类型类。谢谢,是否有基于支持子类
几周前我刚开始和伊莎贝尔一起工作,我很难做一些工作。我刚刚使用规则“less_inclut”在列表中显示属性
theorem cuenta_ordena_1:
"cuenta (ordena xs) y = cuenta xs y"
proof(induct "length xs" arbitrary: xs rule: less_induct)
case less
show ?case
proof(cases xs)
assume "xs=[]"
then show ?thesis by
我想使用简化器来替换不是等式的子项。我将通过一个例子来说明这一点,而不是对我的问题的一般定义:
假设我有一个简单的编程语言和一个霍尔逻辑。假设我们有if,while和sequence操作。另外,我们还有表示法,它给出了一个程序的表示法,还有hoare P c Q。以下是Isabelle/HOL中的签名示例:
(* A simple language and Hoare logic *)
typedecl program
typedecl memory
consts
seq :: "progr
我有一组有限的不同的'a×'b集;我想从每个'b集合a/distinct/'b中获得选择。也就是说,我想了解如何在下面定义选择,以便证明这两个引理:
context
fixes X :: ‹('a × 'b set) set›
assumes ‹finite X›
assumes ‹(a, B) ∈ X ⟹ infinite B›
assumes ‹(a, B⇩1) ∈ X ⟹ (a, B⇩2) ∈ X ⟹ B⇩1 = B⇩2›
begin
definition choice
我尝试了新的类型、记录和递归函数,但没有成功。我需要真值表来证明一组连接词的功能完整性。我该怎么做?
我只知道与真值表最密切相关的类型是bool list:这是不够的,因为我希望它们有n列和2^n行,其中n是一个自然数
编辑:我正在关注Elliot Mendelson对这个定理的证明
合取、析取和否定是一组功能完备算子
证明是这样的:首先我们假设一个函数有n个参数(n个变量的n个真值)和一个真值。
此函数确定真值表。现在,对于每一行i,我们构建一个C_i布尔表达式,它由命题U_j的共轭组成,其中
以语句p为例⟹ Q⟹ P∧ Q作为示例。您可以通过以下方式证明:
lemma dummy: "P ⟹ Q ⟹ P ∧ Q"
proof
assume "P" "Q"
show "P" by fact
show "Q" by fact
qed
这里,proof命令选择一些证明方法,该方法生成两个子任务,一个是p的证明,然后是Q的证明
有没有什么方法可以让我知道proof选择了哪种方法
假设我正在证明一个假设“n≥ m(两者都是自然数),我对n应用归纳法。在基本情况下,假设为“n=0”。有了这两个,我们可以得出结论,在基本情况下,“m=0”
但是,我在使用语句“n=0”时遇到问题:
lemmafoo:
假设“(n::nat)≥ (m::nat)
显示。。。
证明(导入n)
案例0
在调用inclupt时,使用假设“m=0”,假设您需要成为归纳的一部分,则需要成为证明状态的一部分。特别是,这应该是所有包含您在归纳过程中所做事情的假设(即,在您的案例中,所有包含n)
因此,您应该在
GC44免费小提示:thm lem2向您展示了我的lem2的证明语句。我使用了假定/显示样式,而不是像您使用的A==>B==>C样式,但是这两种样式的证明语句都是相同的,可以使用thm来显示
subst公理是HOL替换的核心
如果有价值的话,我会增加更多的价值
因为问题是关于替换的,我证明了公理substit是能够基于HOL等式操作符=进行替换的最底层,并且我使用基于表达式的术语来具体说明substit公式
我之所以这样做,部分原因是因为上面我说的是“我想”,这让我很烦
HOL公理subst位于
直到几天前,我总是定义一个类型,然后直接证明关于该类型的定理。现在我尝试使用类型类
问题
问题是,我无法为下面的类型myD实例化cNAT,这似乎是因为simp对抽象函数cNAT没有影响,我用primrec函数cNAT\u myD将其具体化。我只能猜测发生了什么,因为在实例验证之后发生了自动化
问题
Q1:下面,在语句实例化myD::(type)cNAT处,您能告诉我如何完成证明,以及为什么我可以证明以下定理,但不能证明类型类证明,这需要内射的
theorem dNAT_1_to_1: "(dNA
我正在努力证明我的归纳集满足必要的单调性要求。有人能告诉我我做错了什么吗
theory Scratch导入主开始
consts foo::“'a set⇒ '“一套”
引理foo_mono[mono]:
“x⊆ Y⟶ 福克斯⊆ “福伊”
很抱歉
归纳集合布拉赫::“‘集合’
哪里
“x∈ 福布拉⟹ x∈ 废话“
莫诺斯福乌莫诺酒店
结束
如果你像这样陈述你的单调引理,它就会起作用:
lemma foo_mono [mono_set]:
"A ⊆ B ⟹ x ∈ foo A ⟶ x ∈ foo
我正在阅读伊莎贝尔教程,并试图澄清我对primrec和fun使用的概念。用我迄今为止所寻找的,包括答案;我知道primrec中的构造函数只能有一个等式,primrec默认有[simp],而fun可以有多个等式,需要明确指定自动化策略。然而,我仍然难以清楚地理解它
有人愿意用一些例子来解释吗?primrec对代数数据类型(或设置为类似于自然数的数据类型;我不太了解它的内部结构)进行解释。这意味着在递归方案中有很多限制:
左侧只能有一个非变量参数(即,只有一个参数可以进行模式匹配)。您不能执行类似
我试图证明列表元素上的传递关系等价于列表上的传递关系(在某些条件下)
这是第一个引理:
lemma list_all2_rtrancl1:
"(list_all2 P)⇧*⇧* xs ys ⟹
list_all2 P⇧*⇧* xs ys"
apply (induct rule: rtranclp_induct)
apply (simp add: list.rel_refl)
by (smt list_all2_trans rtranclp.rtrancl_into_rtra
我在Isabelle src/HOL中复制了理论文件Test_Func.thy,它定义了函数add_123:
theory Test_Func
imports Main
begin
fun add_123 :: "nat ⇒ nat ⇒ nat" where
"add_123 0 n = n" |
"add_123 (Suc m) n = Suc(add_123 m n)"
end
然后我有Test_1.thy文件,它有imp
我对Coq进行了一些研究,包括它的依赖类型。关于这一切我只有一个模糊的想法,但现在我想到我想要一个位向量作为bool列表,其中向量的长度是类型的一部分
(这个问题可能是另一个问题的前导。在下一个问题中,如果我问这个问题,我会问当我使用下面的typedef时,我是否可以恢复我丢失的东西。)
(对于这个问题,问题在底部)
以下是我想要的类型的要求:
它必须使用bool list,以便我可以直接或间接地对列表进行模式匹配和递归,以及
必须在类型中指定向量的长度
以下是我所拥有的:
typedef
我试图证明在Isabelle中,对于一些(概念上)简单的算术语句,有一个大的区别。在验证过程中,我偶然发现了以下子目标
⋀d l k. 0 < d ⟹
¬ 2 * k + 1 ≤ 2 * l ⟹
2 * l ≠ 1 ⟹ - (2 * l) < 2 * k - 1 ⟹ k ≤ l ⟹ d * (2 * k - 2) + d * (2 * l) + d = d * (4 * k - 1)
我收到一个奇怪的“类型统一失败”错误
有人知道吗?也许从整体
我试图证明在线性时间内将整数列表拆分为等和子列表的算法是正确的。你可以看到我选择的算法
我想得到一些关于以下方面的反馈:
我对拆分函数定义的方便性
在我的情况下使用的“归纳”假设
请记住,到目前为止,我只使用apply脚本,没有使用Isar证明
以下是算法的初步实现和正确性定义:
definition
"ex_balanced_sum xs = (∃ ys zs. sum_list ys = sum_list zs ∧
x
以下是一个示例理论:
datatype t1 = A | B t2
and t2 = C | D t1
inductive rel1 and rel2 where
"rel1 A 0"
| "rel2 x n ⟹
rel1 (B x) n"
| "rel2 C 1"
| "rel1 x n ⟹
rel2 (D x) n"
lemma rel1_det:
"rel1 x n ⟹ rel1 x m ⟹ n = m"
apply (induct x, auto)
假设有一个具有多个排序变量的数据类型,可用于指定以下示例中类的实例化,partial_order:
theory X imports "HOL-Lattice.Orders" begin
datatype X = A | B | C
definition poA :: "X ⇒ X ⇒ bool" where [iff]: "poA x y ⟷ x = y ∨ y = A"
definition poB :: "X ⇒ X ⇒ bool" where [iff]: "
我有一个关于伊莎贝尔/霍尔的初学者问题:
我想证明以下引理:
引理
显示“{(x,y).x∈ {0..集合理解{(x,y)…}中的(x,y)绑定变量名。编写{(x,x).x
我做了这个:
abbreviation "preimage f y ≡ { x . f x = y }"
是否有一个内置的定义,我可以用它来代替?我怎么会发现呢
f -` {a}
阿卡
我通过搜索带有名称图像的定理,并希望找到带有符号的正确定理来发现:
find_theorems name:image
我很幸运,它出现在第一个定理中。。。通常,更好的方法是了解类型和使用find_const:
find_consts "('a ⇒ 'b) ⇒ 'b set ⇒ 'a set"
阿卡
我通过
假设我有一个二进制运算符f::“sT=>sT=>sT”。我想定义f,以便它为Klein four组实现一个4x4乘法表,如Wiki上所示:
在这里,我所要做的就是创建一个包含16个条目的表。首先,我定义了如下四个常量:
consts
k_1::sT
k_a::sT
k_b::sT
k_ab::sT
definition k4oC :: "kT => kT => kT" (infixl "**" 70) where
"k4oC x y = (case
1 2 3 4 5 6 ...
下一页 最后一页 共 16 页