Isabelle 证明A==>;B==>;C==>;B在伊莎贝尔

我对证明感到困惑 A ==> B ==> C ==> B 在伊莎贝尔。显然你可以 apply simp 但我如何用规则来证明这一点呢 或者,是否有方法转储使用的规则simp?谢谢。您可以启用简化器跟踪;一般来说,你可以和伊莎贝尔一起做→ 设置→ 追踪→ 追踪简化者,我不知道杰迪特的事 编辑:在这种情况下,simp跟踪没有多大帮助,因为simp不使用重写规则来解决这个问题,相反,它“看到”前提中的A、B和C,并得出结论,在该语句的上下文中,它可以重写A=True,B=Tru

在Isabelle中需要一个定义来说明两个分部函数永远不会产生相同的输出

我正在使用HOL-Z中的数学工具箱来释放一些Isabelle谓词。具体来说,我使用部分函数定义来定义我正在编写的Z规范中的一些关系,在这里我将模式的语句转换为规范语句,以便生成简单的HOL谓词 HOL-Z工具包中的定义 type_synonym ('a,'b) lts = "('a*'b) set" (infixr "<=>" 20) prodZ ::"['a set,'b set] => ('a <=> 'b) "

Isabelle Can';t获取变量

我试图证明我提出的以下简单定理: 如果围绕该点的任何足够小的球都包含S内和S外的点,则该点位于边界上 下面我已经设法做了向前的方向,但我被困在向后的方向 使用相同的方法在最后一步失败,目标很接近,但还不完全达到,我不确定该怎么办: lemma frontier_ball: "x ∈ frontier S ⟷ (∃r>0. (∀δ>0. δ<r ⟶ ((ball x δ) ∩ S ≠ {} ∧ (ball x δ) ∩ -S ≠ {})))" (is "?lhs = ?r

Isabelle 为什么我的simproc没有按规定的模式激活?

我正在为正弦简化编写simproc。下面是将sin(x+8pi+pi/2)重写为cos(x)的示例: 到目前为止,一切正常,但一旦我设置了simproc: simproc_setup sine1 ("sin (x + 8 * pi + pi / 2)") = ‹K rewrite_sine› (* this should be handled by sine1 only, but is not *) lemma "sin (x + 8 * pi + pi / 2) = cos(x)" ap

Isabelle 关注Eisbach中的新子目标

在艾斯巴赫,我可以使用将方法应用于由方法创建的所有新子目标。 但是,我经常知道创建了多少子目标,并且希望对新的子目标应用不同的方法。 有没有一种说法像“将方法X应用于第一个新的子目标,将方法Y应用于第二个新的子目标” 下面是一个简单的用例: 我想开发一种方法,可以处理任意长度但结构相同的两个连接。 该方法应可用于显示连词1暗示连词2,通过显示该暗示对每个组件有效。 它应该是这样使用的: lemma example: assumes c: "a 0 ∧ a 1 ∧ a 2 ∧ a 3"

Isabelle 在伊莎贝尔身上能找到解决方案的证据吗?

使用[[simp\u trace]]让我们看看使用了哪些简化规则,使用[[unified\u trace\u failure]]让我们看看遇到了哪些统一问题。我想知道分辨率证明是否同样可以追溯。这将使伊莎贝尔有效地证明。我认为没有人能追踪自动、爆炸,。。。一步一步或从他们那里得到证明脚本。(邮件列表线程对您来说应该很有趣)。你能做的是得到一个使用过的事实的列表,更多细节请参见davidgs在线程中的回答。我发现可以通过扫描isabelle/isar手册中的(simp_trace,linarith

用Isabelle中的重写证明一个简单的算术语句

我试图证明在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) 我收到一个奇怪的“类型统一失败”错误 有人知道吗?也许从整体

Isabelle中划分列表算法正确性的证明

我试图证明在线性时间内将整数列表拆分为等和子列表的算法是正确的。你可以看到我选择的算法 我想得到一些关于以下方面的反馈: 我对拆分函数定义的方便性 在我的情况下使用的“归纳”假设 请记住,到目前为止,我只使用apply脚本,没有使用Isar证明 以下是算法的初步实现和正确性定义: definition "ex_balanced_sum xs = (∃ ys zs. sum_list ys = sum_list zs ∧ x

Isabelle 如何证明相互递归类型的引理?

以下是一个示例理论: 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)

在Isabelle/HOL中模拟多个类实例化

假设有一个具有多个排序变量的数据类型,可用于指定以下示例中类的实例化,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]: "

Isabelle/HOL关于元组集的问题

我有一个关于伊莎贝尔/霍尔的初学者问题: 我想证明以下引理: 引理 显示“{(x,y).x∈ {0..集合理解{(x,y)…}中的(x,y)绑定变量名。编写{(x,x).x

Isabelle中函数的前像

我做了这个: abbreviation "preimage f y ≡ { x . f x = y }" 是否有一个内置的定义,我可以用它来代替?我怎么会发现呢 f -` {a} 阿卡 我通过搜索带有名称图像的定理,并希望找到带有符号的正确定理来发现: find_theorems name:image 我很幸运,它出现在第一个定理中。。。通常,更好的方法是了解类型和使用find_const: find_consts "('a ⇒ 'b) ⇒ 'b set ⇒ 'a set" 阿卡 我通过

Isabelle 为什么我对从有限集中选择元素的函数的定义不一致?

我想对从有限集中选择一个元素的函数进行推理 我试图定义一个谓词,告诉我某个给定函数是否是这样一个“选择器”函数: definition chooser :: "('a set ⇒ 'a) ⇒ bool" where "chooser f ⟷ (∀ A . finite A ⟶ f A ∈ A)" 实际上,我想从中选择元素的有限集是具体类型的,但将具体类型放在'a的位置会导致同样的问题 我还试图省略有限A,但是我处理的集合是有限的,我甚至不想在这里考虑选择公理 现在这个定义似乎不一致: lemm

Isabelle 伊莎贝尔:使用;导入“;或;导入“tac”;方法

假设我有一个关于简单归纳定义集的引理: inductive_set foo :: "'a ⇒ 'a list set" for x :: 'a where "[] ∈ foo x" | "[x] ∈ foo x" lemma "⋀x y. y ∈ foo x ⟹ qux x y ⟹ baz x y" (对我来说,重要的是⋀XY“位保持,因为引理实际上陈述了我的证据的状态在长的应用链的中间。”< /P> 我很难开始证明这个引理。我想按规则进行归纳 第一次尝试 我试着写作 apply (in

Isabelle 利用代数simps实现算术表达式的等价性

在练习2.4中,建议对简单的算术表达式使用“代数simps”,表示为“数据类型exp”。有人能举一个例子,如何用代数simps证明这些表达式的一些简单性质吗?例如'Mult a b=Mult b a' 一般来说,我试图证明以类似形式表示的简单算术表达式(具有有限的运算符集)的等价性。如果您已正确定义了eval函数,您可以证明示例中给出的属性,如下所示: lemma Mult_comm: "eval (Mult a b) x = eval (Mult b a) x" by simp 代数\u

Isabelle 伊莎贝尔:两个列表之间差异的证明

我不熟悉定理证明和伊莎贝尔。我试图证明伊莎贝尔关于列表的一个简单定理 理论是这样的: theory Scratch imports Main Option String begin fun list_difference :: "string list => string list => nat" where "list_difference [] [] = 0" | "list_difference [] x = length x" | "list_differe

Isabelle ';案例';非数据类型常量args,simps_of_case

我正在查看案例操作符,看看它能为我做些什么 没问题。考虑到我正在使用的例子,我接受“它做它做的”,但我会问一些问题,以防有更多的东西需要学习 似乎case运算符不能接受常量参数,除非它们是数据类型常量。如果不是,则会给出非信息性消息:“case表达式中的错误:类型不匹配”。 我可以让case在非数据类型常量上进行模式匹配吗 关键字simps\u of_case有时会从case生成simp规则,有时则不会。 关于下面的示例,我是否应该知道它只是将yield2_def复制为simp规则 我举

Isabelle 引理中的自由变量与图解变量

这三个引理(在它们的意义上,在可能的用法上)有什么区别 变量名称不同,但逻辑上相同。如果您实例化了原理图变量,那么差异就开始发挥作用,在这种情况下,您必须使用定理中提供的名称。这就是为什么他们告诉我们使用不依赖于变量名称的证明技术。如果分发证明中的名称发生变化,它将破坏我们的证明 请参阅标题为“通用量词vs.原理图变量”、奇怪错误消息”,x是一个特殊变量”,本月伊莎贝尔用户列表上的电子邮件: 自由变量被meta-all操作符隐式地普遍量化,C.Sternagel不久前就证明了这一点。您显式

Isabelle 枚举集合元素的归纳谓词

可以让下面的示例工作吗 inductive elems where "x |∈| xs ⟹ elems xs x" code_pred [show_modes] elems . values "{x. elems {|1::nat,2,3|} x}" 默认情况下,谓词编译器对有限集和成员操作符|∈|。但是,如果添加以下代码段,则它可以工作 lemma fmember_code_predI [code_pred_intro]: "x |∈| xs" if "Predicate_

有没有办法通过python与Isabelle定理证明者通信?

我想为Isabelle构建一个python API。我想知道这是否可能?有没有可能通过Python发送证据、战术、命令以及杰迪特将要做的一切,并对证据进行类型检查?非常肯定没有。你可以看看拉尔斯·赫佩尔的《利比莎贝尔》是如何做到的;这是一个类似的问题,但是使用Scala而不是Python:@ManuelEberl为什么不可能?啊,对不起,我没有正确阅读您的问题。我以为你问过这样的事情是否已经存在。这当然是/可能的/,尽管我担心这将是相当多的工作,需要深入了解Isabelle的内部结构。最简单的方

Isabelle 《伊莎贝尔》导论

我对《伊莎贝尔》中的所有介绍元规则感到困惑。报纸说应该是: 从p推导⋀ 十,。当x不是方程中的自由变量时 这让我很困惑。我更了解: 从(py)推断⋀ 十,。当y在(隐式)假设中不自由且x在P中不自由时,px meta forall规则在Isabelle中是如何编码的?以下是源代码: (*Forall introduction. The Free or Var x must not be free in the hypotheses. [x] : A ------

Isabelle 尝试泛化使用typedef、bool list和nat长度的位向量

我对Coq进行了一些研究,包括它的依赖类型。关于这一切我只有一个模糊的想法,但现在我想到我想要一个位向量作为bool列表,其中向量的长度是类型的一部分 (这个问题可能是另一个问题的前导。在下一个问题中,如果我问这个问题,我会问当我使用下面的typedef时,我是否可以恢复我丢失的东西。) (对于这个问题,问题在底部) 以下是我想要的类型的要求: 它必须使用bool list,以便我可以直接或间接地对列表进行模式匹配和递归,以及 必须在类型中指定向量的长度 以下是我所拥有的: typedef

在Isabelle中引入类型缩写

我知道如何在Isabelle中使用“术语缩写”,但我能用同样的方式使用“类型缩写”吗 我可以使用 缩写“foo==True” 此后,输出中所有出现的True将打印为foo。例如,命令 术语“True”⟶ 假“ 输出“foo⟶ False“。我想定义一个具有相同行为的“类型缩写”。我知道type\u同义词命令,但是当我键入 type_同义词baz=“int list” 然后,在将来的输出中,int list的出现不会像我希望的那样被baz所取代。如果它还没有以某种形式存在,我认为当定义的右侧

Isabelle的区域设置声明中的实例

我已经声明了一个特定的语言环境,它修复了多个问题,并且正在尝试为第一个语言环境的变体声明一个新的语言环境。这里是第一个区域设置: locale presheaf = topology + Ring + fixes opcatopensets ::" ('a) PosetalCategory" and objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme" and restrictionsmap:: "('a set ×'a set) ⇒ ('a ⇒ 'a)

Isabelle 关于解析器组合子的一个定理的证明

我已经编写了一些简单的解析器组合器(没有回溯等)。以下是我的问题的重要定义 type_synonym ('a, 's) parser = "'s list ⇒ ('a * 's list) option" definition sequenceP :: "('a, 's) parser ⇒ ('b, 's) parser ⇒ ('b, 's) parser" (infixl ">>P" 60

在Isabelle中定义乘法的基本递归

我是伊莎贝尔的新手,我正在尝试定义基本的递归函数。我试过加法,但乘法有困难 datatype nati = Zero | Suc nati primrec add :: "nati ⇒ nati ⇒ nati" where "add Zero n = n" | "add (Suc m) n = Suc(add m n)" primrec mult :: "nati ⇒ nati ⇒ nati" where "mult Suc(Zero) n = n" | "mult (Suc m) n =

我有Isabelle/HOL理论,如何继续应用它?

我试图理解伊莎贝尔/霍尔理论的用途。我已经编写并保存了一个理论文件: theory MonoidalLogic imports sequents begin consts Test :: "test" axiomatization where identity "φ⊢φ" and cut "φ⊢ψ;ψ⊢ρ⟹φ⊢ρ" l "φ⊢⊤⨂ψ⟺φ⊢ψ" r "φ⊢ψ⨂⊤⟺φ⊢ψ" end 现在我想得到一些关于这个理论的反馈——伊莎贝尔是否接受它,以某种方式编译它——我如何才能做到

Isabelle 数据类型转换函数需要很长时间来证明

Isabelle需要很多时间来证明(在我看来)相当简单的数据类型转换函数的正确性。例如,我创建了数据类型来表示数学和布尔表达式,以及一个简化此类表达式的函数 datatype 'a math_expr = Num int | Add "'a math_expr" "'a math_expr" | Mul "'a math_expr" "'a math_expr" | Sub "'a math_expr" "'a math_expr" | Div "'a math_expr"

Isabelle 艾斯巴赫项参数和子目标

我目前正试图进入艾斯巴赫 我如何在子目标(见下文)中实现该值 是否使用了参数A的名称,而A不被解释为某个变量名?是否有一些通用的方法来实现这一点,或者是否需要对子目标战术进行特殊裁剪 theory Scratch (* Isabelle2019 *) imports Main "HOL-Eisbach.Eisbach" begin method test for A :: nat = subgoal_tac "A = 5" lemma "True" apply (test 1) (*

Simp不使用Isabelle中提供的引理

我正在做书中的练习2.6: 从“文本中定义的树”类型开始,定义函数内容::“树”⇒ '以任何顺序收集列表中树中所有值而不删除重复项的列表。然后定义一个函数sum_tree::nat tree⇒ 对自然数树中的所有值求和并证明sum_tree t=sum_list(contents t)(其中sum_list是预定义的)的nat 我已经开始证明这个定理,不是用auto,而是指导Isabelle使用必要的定理: theory Minimal imports Main begin datatyp

Isabelle 避免匹配(λ;x.x)

以理论为例 theory Scratch imports Main begin notepad begin fix P and f g h :: "int ⇒ int" assume prems: "P f" "P g" "P h" assume comp: "⋀ f g. P f ⟹ P g ⟹ P (λ x. f (g x))" have "P (λ x. f (g (h x)))" sorry end end 但这只是循环。原因是comp与目标的一个可能统一是f

Isabelle 如何用偏函数证明引理?

你能建议如何证明这个简单引理吗 datatype val = BVal bool | IVal int lemma the_unif: "the (x :: val option) = the (y :: val option) ⟹ x = y" apply (induct x; induct y) apply simp 我试图用归纳法证明它,但我坚持用case⋀选项None=(某些选项)⟹ 无=某些选项 选项可以等于BVal x或IVal x。它永远不会等于无。因此,在这种情况下,

Isabelle 仅使用一个定义进行简化

Isabelle/HOL中的简化器(simp)使用系统中的所有引理/定理/定义等进行重写。我知道我们可以从简化器中删除定义。例如,像这样: by (simp del:less_imp_le_nat) 我只需要使用引理来简化。如何删除简化器中的所有定理,只添加引理集 比如: by (simp del_all del:set_rec) 您可以使用apply(仅simp:set\u rec)您可以使用apply(仅simp:set\u rec)

Isabelle 有没有办法自动拆分连词?

我想在伊莎贝尔身上证明A/\B/\C/\D/\E/\F。如何在证明(规则…中自动将子目标拆分为6个单独的子目标,以便以后可以单独证明它们 当然,我可以写proof(rule congi)5次,但也许有一种更优雅的方法可以一步完成拆分?使用intro方法:proof(intro congi)另一种证明此类目标的方法是使用原始证明块。例如,如下所示 lemma "A & B & C & D & E & F" proof - { have "A" ... }

Isabelle 简化器不';不能与大于10的常数一起工作?

为什么伊莎贝尔简化者拒绝证明下面的引理 lemma "n ≠ counter ⟹ n ≠ Suc counter ⟹ n ≠ Suc (Suc counter) ⟹ n ≠ counter + 3 ⟹ n ≠ counter + 4 ⟹ n ≠ counter + 5 ⟹ n ≠ counter + 6 ⟹ n ≠ counter + 7 ⟹ n ≠ counter + 8 ⟹ n ≠ counter + 9 ⟹ counter ≤ n ⟹ n <

Isabelle 伊莎贝尔:在另一台机器上运行sledgehammer,然后在伊莎贝尔/杰迪特运行的普通PC上运行

我正在我的labtop上与伊莎贝尔/杰迪特合作 我的笔记本电脑有4个核心,即4个CPU。但我在隔壁房间还有一台服务器电脑。服务器有20多个CPU 通常我并行运行sledgehammer和try,因为有时候try结果会在sledgehammer本身失败时给出sledgehammer结果(请参阅) 所以我想有相当多的进程可以并行运行 但是,我不能在我的服务器上使用或运行Isabelle/jEdit,因为服务器是“无头的”,因此没有安装X或window manager 所以我需要我的Isabelle/

如何在Isabelle ML中执行简单的多线程?

我发现想要启动多个Isabelle\u System.bash进程是很有用的 在下一个源代码中,我使用了3个bash命令。举个简单的例子,我想在单独的线程中启动它们,这样它们就可以并发运行,而不是按顺序运行 ML {* Isabelle_System.bash ("echo '1. Call script to compile in the PIDE console.'"); Isabelle_System.bash ("echo '2. Call script to compile in

从Isabelle/HOL将字符串输出到文件中

我想将字符串从Isabelle/HOL理论输出到文件中 我提出的解决方案涉及在ML级别执行文件和字符串操作 例如,假设下面的Isabele/HOL代码定义了一种非常简单的表达式语言的抽象语法: datatype Exp = expid string | exppar Exp | expplus Exp Exp | expminus Exp Exp | expnum int 我想将这个简单语言的表达式打印输出到一个文件中。例如,表达式,例如: definition ex

Isabelle中的所有可用谓词

有没有可能从Isabelle中得到我可以使用的所有谓词和函数的列表 因为经常发生的情况是,我开始手工定义一个我需要证明的谓词(比如,互质),只是为了意识到它已经存在。有查找常量,它可以按类型或名称搜索定义的常量,类似于查找定理,例如查找常量“'a list=>nat”或find_consts name:“lim”。显然,这也可以找到类似互质的缩写(这是gcd a b=1) 当然,这只能找到您实际加载的某个理论中定义的常量(直接或间接)。您所需的概念可能已经在~~/src/HOL/Library或

Isabelle 《伊莎贝尔》中重叠归纳定义的推理

我想证明伊莎贝尔的下列引理: lemma "T (Open # xs) ⟹ ¬ S (Open # xs) ⟹ count xs Close ≤ count xs Open" 请查找以下定义: datatype paren = Open | Close inductive S where S_empty: "S []" | S_append: "S xs ⟹ S ys ⟹ S (xs @ ys)" | S_paren: "S xs ⟹ S (Open # xs @ [Close]

Isabelle 带计数器求和函数的正确性证明

给定以下求和函数: function sum :: "nat ⇒ nat ⇒ nat" where "sum i N = (if i > N then 0 else i + sum (Suc i) N)" by pat_completeness auto termination sum apply (relation "measure (λ(i,N). N + 1 - i)") apply auto done 停止条件基于N和i。我通常在列表上执行归纳,所以我不知道如何证明这个函数 你能

替换Isabelle/HOL Isar证明中的变量

我正在Isabelle2020内部编写Isar证据,并与当地人合作。 在某一点上,我想使用来自语言环境的公理,它指出 ((A.par x y) ∧ (F x ≃ F y)) → (x ≃ y) 其中“A”是另一个区域设置,作为存储上述公理的区域设置的信息,“A.par”只是一个谓词。 Axiom中的所有谓词和函数都使用多态类型,自由变量“x”本身属于“a”类型,例如,函数“F”属于“a=>”b类型,“G”属于“b=>”c类型: 一般来说,我必须使用这种形式的公理:一个用于区域设置“F”(如上所

Isabelle 如何使typedef类型从其类型类的母类型继承运算符

回答后续问题后发布 Brian给出了一个答案,并建议使用提升和转移。然而,我找不到足够的关于举重和转移的教程信息,不知道如何调整他的答案来完成我需要做的事情 在这里,我在黑暗中工作,并使用给出的答案作为即插即用模板来问这个后续问题 我的初始代码中的命令,typedef trivAlg=“{x::sT.x=emS}”为我提供了一个新类型,它是母类型sT的子集 我有我的成员操作符consts inP::“sT=>sT=>bool”,因此在我关于提升和转移的天真观点中,因为我的monoid\u add

Isabelle 伊莎贝尔的商型模式是什么?

伊莎贝尔的“商型模式”是什么 我在网上找不到任何解释。如果你能从你看到这个短语的地方引用一点,那就更好了。我知道“模式匹配”,我知道“商类型”,但我不知道“商类型模式” 我不想要求澄清,然后等待,所以我从三个词中选择了两个,“商类型”。如果我走错了方向,它仍然是一个有价值的主题,也是伊莎贝尔/霍尔的重要组成部分 有quotium\u type关键字,它允许您使用 它是商包的一部分,从isar-ref.pdf第248页开始描述。碰巧有一个Wiki页面 Brian Hufmann和Ondřej Ku

Isabelle 伊莎贝尔的融合

我最近开始与伊莎贝尔合作,我一直在尝试探索它的不同部分。有没有可能证明在伊莎贝尔身上整合是可能的?例如[0,1]和dx之间的积分x。如果可能的话,请告诉我相关的Isabelle.thy文件,甚至是一个简短的教程 我试着四处看看,但没有成功 谢谢。相关的理论都在里面,特别是理论集成和以下内容 免责声明:我根本没有使用过这些定义,只是知道它们的存在。还有IntervalIntegral.thy来自。这具有丰富的测量理论背景的优势,不久将并入伊莎贝尔的测量理论库。如果你想证明从某个地方到某个地方的积分

使用加减结合性的Isabelle/HOL

我正试图证明某种形式的东西 lemma assoc: "b + (c - d) = (b + c) - d" 好吧,结合性定理是库的一部分,但没有标记为简化,所以我需要手动添加它们。这些目标的确切名称是什么/它们在哪些理论中定义了?这些目标通常通过定理集合代数\u simps来解决。只需通过(simp add:algebra\u simps)编写 请注意,按照您陈述定理的方式,您将无法证明它,因为您没有指定b、c和d是组的元素。你需要写一些类似的东西 lemma assoc: "(b :: '

Isabelle 在《伊莎贝尔》中,尖括号和双星号是什么意思?

我在试着理解,有些语法我不懂。我没有在教程中看到它们,包括与Isabelle 2017发行版捆绑在一起的两个版本,“Isabelle/HOL中的编程和证明”和“Isabelle/Isar参考手册”。事实上,这些都是符号,再加上伊莎贝尔的用户群非常小,这意味着答案很难在谷歌上找到 第一个是高尖括号⟨⟩,第二个是双星号***,在输出控制台中显示为∧*(与ASCII^明显不同) 这是一个例子 尖括号似乎总是围绕着一个命题。三元组函数的定义意味着(a**b**c**d)类型为状态元素集⇒ bool,其中

Isabelle 带扭曲的递归函数的归纳

我试图证明一个定理,如果n>0,那么gnb=True(见下文)。这是因为g(Suc n)b只调用g0 True。不幸的是,当我试图证明g0b时,我在归纳中没有这个事实。如何完成校样(我需要用什么来替换对不起 您忘记在归纳中使用假设n>0 例如,你可以写信 theorem fixes n::nat and b::bool assumes "n > 0" shows "g n b" using assms (* this is important *) proof (induct

Isabelle 将'o'用作变量/函数名时出现内部语法错误

在与Isabelle(2016-1版)玩耍时,我遇到了以下奇怪的情况:我不能在各种(大多数/所有?)上下文中将字母o用作变量或函数名。以下示例尽管适用于英语字母表中的大多数(全部?)其他字母,但均失败: value o (* quoted version doesn't work either *) definition invert :: ‹bool ⇒ bool› where ‹invert o = (¬ o)› definition o :: ‹bool ⇒ bool› where

Isabelle 为什么伊莎贝尔·普罗弗可以';你不能识别一个已定义的类吗?

代码修复了K::“semigroup”提示“未定义类型名称:semigroup”错误。类是排序,即类型属性,而不是类型属性。使用它们时,这有两个主要优点。首先,类型可以在多个类中。第二,一个类中可以有两种类型。但是,Isabelle不允许在同一个类中多次使用一种类型 这对您意味着什么: class semigroup= fixes mult::"'a⇒'a⇒'a" (infixl "⊗" 70) assumes assoc: "(x⊗y)

  1    2   3   4   5   6  ... 下一页 共 6 页