Isabelle 如何为类型类名创建同义词?

我想缩写为类型类名创建一个同义词。我现在是这样做的: class fooC = linordered_idom instance int :: fooC proof qed definition foof :: "'a::fooC ⇒ 'a" where "foof x = x" term "foof (x::int)" value "foof (x::int)" 如果没有更好的方法,这很好用。缺

Isabelle 在存在证明中如何使用获得?

我试图证明一个存在定理 lemma "∃ x. x * (t :: nat) = t" proof obtain y where "y * t = t" by (auto) 但我无法完成证明。所以我有必要的y,但我怎样才能把它输入到最初的目标中呢?自然演绎的合理性要求你在打开存在量词之前先抓住证人。这就是为什么不允许在show语句中使用获取的变量。在您的示例中,证明步骤隐式地应用规则exI。这将存在量化变量x转换为原理图变量?x,可以稍后实例化,但实例化可能只引用?x出现时在范围内的变量。

Isabelle 带索引/下标的函数定义

我正在尝试定义函数: Fi(xi)=真实 然而,我发现很难在函数中实现下标。下标i必须是自然数,而x是实数,输出也是实数 我尝试过用两个参数定义函数,但是没有成功 我怎样才能在Isabelle中显示具有索引的函数?我不太清楚你的意思。据我所知,索引通常只是一个附加的nat参数。例如,无限序列f_0、f_2、f_3,…将由Isabelle/HOL中类型为nat=>'a的函数f表示。还是你在谈论下标语法?@chris谢谢你的评论。很抱歉造成混淆,我指的是索引,而不是下标本身。我知道索引是一个附加的n

Isabelle-字符和字符串文字支持

如何在Isabelle中声明字符和字符串文本?我想在Isabelle教程的trie示例中使用字符节点值(声明为'v option) 有表示8位字符的char类型和定义为字符列表的string类型。还有一些用于字符和字符串文本的语法和漂亮的打印设置: typ string (* char list *) term "''foobar''" (* ''foobar'' :: char list *) value "hd ''foobar''" (* CHR ''f'' :: char *) 请

在Isabelle中定义常量之间的函数

我是一名数学家,刚刚开始适应伊莎贝尔,而一些本应该非常简单的事情却令人沮丧。如何在两个常量之间定义函数?比如,函数f:{1,2,3}\to{1,2,4}映射1到1,2到4,3到2 我想我成功地将这些集合定义为常数t1和t2,但(我猜因为它们不是数据类型),我不能尝试类似的方法 definition f ::"t1 => t2" where "f 1 = 1" | "f 2 = 4" | "f 3 = 2" 我相信在这个困难背后一定有一个基本的误解,所以我很感谢你的指导。你的问

Isabelle 伊莎贝尔的二次公式?

我正在寻找一个包含二次公式的理论文件: 当然,知道引理的名字也会很有帮助 我已经找到了这篇论文: 我可以复制粘贴校样,但是我必须重写它(因为它复制得不完美)。最好有一个可以直接使用的工具:如果有人知道匹配这篇论文的理论文件在哪里可以找到?你链接的论文很旧,如果没有重大更改,它的证据将无法使用 下面是该定理的一个简短证明: theory Scratch imports Complex_Main begin lemma real_sqrt_unique': "(x::real) ^ 2

Isabelle 查找simp/auto/clearify使用的引理

我如何找到simp、auto方法等使用的引理 在一个具体案例中,我的目标如下: lemma "x ∉ dom S ⟹ Something" apply auto 在应用了auto之后,我得到了:,一些东西⟹ ∃Ysx=一些y。我想找出为什么整个目标是这样颠倒的,这样我就可以从重写中删除相应的规则 我已经尝试过使用[[simp_trace\u new mode=full]]apply auto和使用[[simp_trace]]apply auto的,但没有找到导致auto进行此转换的确切原因。我

Isabelle 实域上向量和矩阵的时间导数

我在寻找实数上有限维向量的时间导数的引理(有限维实向量空间,如ℝ^n),并且在矩阵上也使用ℝ^nxn。我找到了矩阵的雅可比导数Cartesian\u Euclidean\u空间。有谁能告诉我理论名称,或者如何用向量和矩阵实现时间导数吗?好的,我简要介绍了伊莎贝尔的理论,这就是我提出的: 在Isabelle中,你要寻找的概念被称为向量导数 该操作本身称为向量_导数,定义在任何实赋范向量空间上 实际上,您几乎从不使用向量导数,而是使用has\u向量导数 例如,您可以证明以下内容: lemma

Isabelle 扩展标准类型和操作是一个好主意吗?

我需要定义一个扩展bool类型(ebool=bool)∪ {⊥})和类型的一组操作(连词等) 理论是这样的: theory EboolTest imports Main "~~/src/HOL/Library/Adhoc_Overloading" begin notation bot ("⊥") declare [[coercion_enabled]] typedef ebool = "UNIV :: bool option set" .. definition ebool ::

Isabelle 命题逻辑有证明者吗

我尝试使用axiomatization命令以语法方式实现LTL逻辑,目的是自动找到定理的证明(证明程序属性的动机) 然而,自动校准仪(如cvc4、z3、e等)都使用某种量词。例如,使用FOL-one可以证明F(p)-->G(p),这显然是错误的 我的问题是,是否存在一个证明者,就像前面提到的那些证明者一样,但它是为命题逻辑而设计的,即,它只能访问MP和命题逻辑公理 我是伊莎贝尔的新手,所以可能有一个更简单的方法来做这件事 编辑:我正在寻找一个希尔伯特式的演绎证明,而不是SAT,因为这将解决在公理

为什么我们需要证明这两个命题才能在Isabelle中应用析取消元法?

我看到了析取消除的证明规则,我注意到我们必须证明这两个语句才能使用它: ?P ∨ ?Q ⟹ (?P ⟹ ?R) ⟹ (?Q ⟹ ?R) ⟹ ?R 为什么呢?就像在正常逻辑中,如果我知道一个是真的,那么我就知道整个事情都是真的,所以谁在乎另一个的真值是什么。同样,如果我至少能证明一次,为什么我不能消除析取/或 就上下文而言,我试图证明: proof (prove) goal (1 subgoal): 1. ∀s. P s ∨ Q s ⟹ ∀s. P s ⟶ R s ⟹ ∀s. Q s ⟶ R

Isabelle 如何对伊莎贝尔理论进行多行评论?

Rosetta仅为Isabelle的单行注释提供文档 我阅读了第2.2.4节,其中建议多行注释使用文本{*..}或--{…*},但它们在我的理论中不起作用: theory Max_Of_Two_Integers imports Main begin function two_integer_max :: "nat ⇒ nat ⇒ nat" where "two_integer_max first second = (if (first >

Isabelle 拓宽部分函数的域

为不准确的标题道歉 我定义了一个计算不动点的函数,比如 function (domintros) "fix" :: "(env ⇒ env) ⇒ env ⇒ env" where "fix f m n = (if f m n = m n then m n else fix f (f m) n)" by pat_completeness blast 其中type\u同义词env=char列表⇀ val只是一个常用的(显式)局部函数(map) 我设法证明了在某些条件下的终止性,但现在我想证明以

Isabelle中的完全证明输出

如果Isabelle没有找到引理的证明,那么是否有可能输出所有证明方法所做的一切,以达到子目标,而这些子目标是他们无法继续的?这将帮助我看到,他们被困在哪条道路上,这将帮助我为他们指明正确的方向 (对于已完成的证明,我会发现有一个完整的证明日志,其中显示了证明某些引理所执行的所有基本推论,这很有趣。)这个问题听起来与我几天前回答的问题类似。部分答案在这里也适用。无论如何,具体回答这个问题: 不是真的。对于大多数基本的证明方法(规则等,介绍,事实,案例,归纳),它们所做的相对简单,当它们失败时,几

Isabelle函数用于查找关系中最长的成员序列

我有一个关系R::w=>w=>bool,它既是传递的又是不可逆的 我有Ax1公理:“有限{x::w.True}”。因此,对于每个x,总是有一个最长的wn R序列。。。Rw2 Rw1 Rx 我需要一个函数F::w=>nat,对于给定的x,它返回这个序列的“lenght”(如果没有y,则返回0,从而返回xRy)。我该如何在伊莎贝尔建造一座 另外:Ax1是将“w类型的有限性”公理化的一个好方法还是有更好的方法?首先,编写{x::w.True}的一种更惯用的方法是UNIV::w set。我建议编写fin

Isabelle 收敛与向量理论

Isabelle/HOL中是否存在收敛理论?我需要定义∥x(t)∥ ⟶ 0为t⟶ ∞ 另外,我在寻找向量理论,我找到了一个矩阵理论,但我找不到向量理论,在伊莎贝尔/霍尔中有这样的理论吗 干杯 收敛等用Isabelle中的过滤器表示。(见相应的附录) 在你的情况下,那可能是 filterlim (λt. norm (x t)) (nhds 0) at_top 或者,使用tendsto缩写 ((λt. norm (x t)) ⤏ 0) at_top 其中⤏是伊莎贝尔符号\,可以使用缩写-->输入

用Isabelle中的归纳法证明~pvq形式的定理

我有一个叫做反馈的函数,它计算3的幂 反馈(t)=3^t 我想证明这一点 如果t>5,则反馈(t)>200 使用归纳法 lemma th2: "¬(t>5) ∨ ((feedback t) > 200)" (is "?H(t)" is "?P(t)∨?Q(t)" is "(?P(t))∨(?F(t) > 200)") proof(induct t) case 0 show "?P 0 ∨ ?Q 0" by simp next assume a:" ?F(t)

用Isabelle/ML编写变量模式

我在研究旅行的方法: apply(rewrite in "_ / ⌑" some_theorem) 在ML中,我得出了以下结论: apply(tactic ‹ let val pat = [ Rewrite.In, Rewrite.Term (@{const divide(real)} $ Var (("c", 0), \<^typ>‹real›) $ Rewrite.mk_hole 1 (\&l

在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

如何在练习中证明引理 ;4.6英寸“;Isabelle/HOL”;中的编程与证明;?

我正在尝试解决“Isabelle/HOL中的编程和证明”中的练习4.6。它要求定义一个函数elems::“'a list⇒ '一个集合“,它将一个列表转换成一个集合,并证明引理”x∈ 元素xs⟹ ∃ ys zs.xs=ys@x#zs∧ x∉ elems ys“。到目前为止,我已经走了这么远: fun elems :: "'a list ⇒ 'a set" where "elems [] = {}" | "elems (x # xs) = {x} ∪ elems xs" lemma fi

在本例中,在Isabelle/HOL中证明存在

我正试图学习如何将伊莎贝尔/伊萨尔与霍尔结合使用,我决定一个好方法是发展一些基本的数论。我定义了自己的plus和times操作,这样证明方法就不会为我做所有的工作,因为已经有很多关于+,*的证明。我的版本定义为: fun p:: "nat ⇒ nat ⇒ nat" (infix "⊕" 80) where p_0: "0 ⊕ n =n" | p_rec: " (Suc m) ⊕ n = Suc (m ⊕ n)" fun t:: "nat ⇒ nat ⇒ nat" (infix "⊗"

在Isabelle中使用simprocs重写正弦

我想实现一个simproc,它能够将sin的参数重写为x+k*pi+k'*pi/2的线性组合(理想情况下,k'=0或k'=1),然后应用现有的引理来增加sine中的参数 步骤如下: 模式匹配提取sin(expr)参数的目标: 证明对于某些x,k,k':expr=x+k*pi+k'*pi/2 使用现有引理重写为更简单的三角函数: 我被困在第二步。其思想是使用代数简化来获得定理成立的x,k,k′。我相信图解目标应该做到这一点,但我从未使用过它们 我的想法 我是否可以假设表达式是这种形式,并让简化程序

在Isabelle中提取BNF数据

我在研究Isabelle对(co)数据类型的编码。我想知道是否有一种定义数据类型的方法,比如: datatype 'a tree = Node 'a ('a tree fset) 然后检查它生成的BNF 您可以使用命令print\u bnfs。此外,当然,您可以在数据类型定义之后立即使用print_定理查看所有生成的定理。也许,如果您需要进一步了解,您可以尝试探索与BNF相关联的ML基础设施 作为旁注,可以使用命令print\u commands查看所有可用命令的列表。您可以使用命令print

Isabelle术语之间使用某些

我有点惊讶 value "let x = SOME n. n ∈ {1::int,2} in x = x" 返回True。在β-扩展和α-重命名之后,该术语与: value "(SOME na. na ∈ {1::int,2}) = (SOME nb. nb ∈ {1::int,2})" 我不明白为什么这种平等应该成立。为什么为na选择的值应与为nb选择的值相同 左侧的项与右侧的项完全相同(模-α转换)。因此,它们也具有相同的值。相等(或者更确切地说,α等价)项在HOL中总是产生相等的值,因

Isabelle 如何从归纳声明中证明假设的结论?

以下是简单语言的定义: theory SimpleLang imports Main begin type_synonym vname = "string" datatype exp = BConst bool | IConst int | Let vname exp exp | Var vname | And exp exp datatype type = BType | IType type_synonym tenv = "vname ⇒ type option" inductiv

Isabelle 如何使用类或区域设置?

我试图为编程语言定义一个通用操作: type_synonym vname = "string" type_synonym 'a env = "vname ⇒ 'a option" locale language = fixes big_step :: "'exp × 'val env ⇒ 'val ⇒ bool" (infix "⇒" 55) fixes typing :: "'type env ⇒ 'exp ⇒ 'type ⇒ bool" ("(1_/ ⊢/ (_ :/ _))" [

Isabelle 代码方程左侧的部分应用常数

我需要使用nat\u plus\u communion.fold\u set\u fold\u remdupscode方程而不是Finite\u set.fold\u def: interpretation nat_plus_commute: comp_fun_commute "plus :: nat ⇒ nat ⇒ nat" by standard auto declare Finite_Set.fold_def [code del] declare nat_plus_commute.f

如何从Isabelle上的文档输出中删除引号/卡通画?

考虑一下这个片段: lemma no_lift: assumes ‹∀L . ⟦γ L⟧ ≠ set L› ― ‹Miner \<^term>‹γ› is non-trivial.› defines ‹γ' P N ≡ γ P› shows ‹∀P. ∃N. set N ∩ ⟦γ' P N⟧ ≠ {}› 当我在本地生成latex或HTML输出时,Cartouche仍保留在输出中。当我看法新社的证明文件时,似乎连漫画和引

上一页 1 2 ...  12   13    14   15   16   17  ... 下一页 共 17 页