Isabelle 在会计准则专家组中,人们可以假设什么,什么是值得假设的?

在Isar中,一个人在目标的前提下使用假设,这样她就可以用它得出结论 说 这是否是假设的唯一用途,即从目标的前提中获取事实 更新:因为有些人认为这太宽了,我不明白,我试着去做。 重新提出问题 本手册介绍了假设的逻辑内容。但是它的用途是什么呢?这是否仅限于当我从目标的前提中得到一个事实时的情况?我看到假设关键字的两个用法,当然是同一过程的两个实例:说明待证明属性的前提 如果我们举一个愚蠢的例子: lemma "∀A B C D. A ⟶ B ⟶ C ⟶ D ⟶ (A ∧ B) ∧ (C ∧ D)

替换Isabelle中的lambda表达式

给定函数f: definition f :: "real => real" where "f x = x" 我可以通过下面的引理证明,当n趋向于0时,fx+n趋向于fx lemma "(λn. f(x+n)) -- 0 --> f x" unfolding f_def apply (auto intro!: tendsto_eq_intros) done 作为进一步的步骤,我想说明当y-x趋于0时,fx+y-x趋于fx。本质上,让n=y-x 我很难解决这个问题,因为我不能代替la

Isabelle 伊莎贝尔/荷兰基金会

我看过很多关于Isabelle语法和证明策略的文档。然而,我对它的基础知之甚少。我有几个问题,如果有人能抽出时间回答,我将不胜感激: 为什么Isabelle/HOL不承认不终止的函数?许多其他语言,如Haskell,都允许使用非终止函数 什么符号是伊莎贝尔元语言的一部分?我读到元语言中有符号用于通用量化(/\)和含义(==>)。但是,这些符号在对象级语言中有对应的符号(∀ 和-->)。我知道-->是类型为bool=>bool=>bool的对象级函数。但是,你是怎么做到的∀ 及∃ 定义它们是对象级

Isabelle-挑剔反例用法

我想完成这个证明 我如何轻松/优雅地使用通过挑剔找到的值?(在…部分写什么?) 或者,我如何利用吹毛求疵找到反例的事实来完成证明 lemma Nitpick_test: "¬(((a+b) = 5) ∧ ((a-b) = (1::int)))" (is "?P") proof (rule ccontr) assume "¬ ?P" nitpick (* Nitpicking formula... Nitpick found a counterexamp

Isabelle 使用集合理解的函数终止证明

考虑以下愚蠢的Isabelle树和子树定义: datatype tree = Leaf int | Node tree tree fun children :: "tree ⇒ tree set" where "children (Leaf _) = {}" | "children (Node a b) = {a, b}" lemma children_decreasing_size: assumes "c ∈ children t" shows "s

使用Isabelle的多播

我正在尝试向代理列表发送消息。为此,我编写了以下函数: fun multicast :: "[msg, agent, agent list]=> event set" where multicast_Nil: " multicast M A [] ={}" | multicast_Cons: " multicast M A (x#xs) = {Says x A M} Un multicast M A xs" fun knows :: "[agent, e

Isabelle 归纳两个变量?

给定一个生成相同项列表的函数,我想证明生成的列表在所有位置都由给定的自然数组成,与列表长度无关 fun pattern_n :: "nat ⇒ nat ⇒ nat list" where "pattern_n _ 0 = []" | "pattern_n n lng = n # (pattern_n n (lng - 1))" lemma pattern_n_1: "lng > 0 ∧ pos ≥ 0 ∧ pos < lng ∧ n ≥ 0 ⟹ (pattern_n n lng

Isabelle/jEdit中的色码是什么意思?

伊莎贝尔/杰迪特身上的色码是什么意思?我在地图上找不到他们的描述。它写的唯一的东西是 Prover反馈通过颜色、方框、扭曲下划线和超链接来工作- 链接,弹出窗口,图标,可点击输出-所有基于语义 背景中由Isabelle生成的标记 颜色用作校对脚本背景,并位于滚动条旁边的垂直条上 您能指出一些文档或在这里解释一下吗?您可以在“插件/插件选项”和“Isabelle/Rendering”中看到它们的名称并更改它们。这些名称给出了相对清晰的解释,您可以从名称中使用的术语中参考手册 有很多种颜色,所以我不

Isabelle 如何为归纳数据类型定义Sup?

这是一个简单的类型系统,包含以下类型:any、void、integer、real、set datatype ty = AType | VType | IType | RType | SType ty 类型形成具有上确界的半格: notation sup (infixl "⊔" 65) instantiation ty :: semilattice_sup begin inductive less_ty where "τ ≠ VType ⟹ VType < τ" | "τ ≠

Isabelle 生成列表的性质证明

我的目标是证明包含生成模式的列表的属性。 在第一个示例中,模式只是一个0序列,引理模式_0_len证明生成列表的长度确实等于生成函数的长度参数 theory pattern_0 imports Main begin fun pattern_0 :: "nat ⇒ nat list" where "pattern_0 0 = []" | "pattern_0 len = (pattern_0 (len - 1)) @ [0]" lemma pattern_0_len [simp]: "len

Isabelle/HOL中权利取消的定义

我试图在伊莎贝尔理论中定义函数合成的权利取消性质,但是 有些错误我无法修复 我想在Isabelle中指定的定义如下: f:A→ B具有权利撤销的性质 ∀ C:(∀ g、 h:B→ C):g◦ f=h◦ f=⇒ g=h 可能吗?或者更准确地说,是否有可能对一种类型进行量化 提前感谢不可能显式地量化多个类型。如果用类型变量证明引理,则该引理对于该类型的所有实例化都是隐式证明的 在某些情况下,您可以使用变通方法并使用AFP条目中的类型V。这种类型的V基本上是一种元素太多的类型,以至于有一个从(几乎?)

Isabelle代码生成,用于终止可能非终止函数的使用

在Isabelle中,是否可以为一个函数f生成代码,该函数是使用某个递归函数f_helper定义的,其中f_helper通常不终止,但总是为f中应用于它的输入终止 例如,我目前正在尝试使用一个非常类似于以下函数的函数f_helper,该函数在有限自动机上执行powerset构造-在每个递归步骤中,从自动机的转换集计算(转换)在这一步骤中考虑的幂集结构的一组状态( todo>代码>)源于“ todo/中的状态的幂集结构的转换以及由这些转换所达到的状态(结果> 参数携带中间结果): 该函数当然不会因

Isabelle 固定元组参数的归纳谓词

让我们假设我们有一些谓词 definition someP :: "('a × 'a) ⇒ 'a ⇒ 'a ⇒ bool" 和一个感应式 inductive my_inductive :: "('a × 'a) ⇒ 'a ⇒ bool" for "a_b" where basecase: "fst a_b = a ⟹ my_inductive a_b a" | stepcase: "someP a_b x y ⟹ my_inductive a_b x ⟹ my_inductive a_b

Isabelle 伊莎贝尔:如何打印1+;2.

这是一个初学者的问题 我正在学习“Isabelle/HOL中的编程和证明”教程 我想打印“1+2”的结果 于是我写道: value "1 + 2" 其中: "1 + (1 + 1)" :: "'a" 我希望看到结果,即“3”。我怎么能在伊莎贝尔身上做到这一点? 如果我在定理证明器中规范化“1+2”,则显示结果3。我只想在伊莎贝尔身上做同样的事 请注意,我昨天开始使用Isabelle。这是我的问题。从一个初学者到另一个初学者,多么幸运 我不知道所有的细节,但是如果你没有为常数1和2指定类型,

Isabelle 认识到子目标已被证明

我想了解Isar虚拟机的状态机 提供了良好的概述,但没有在输出面板中详细说明其消息。这很可能是该系统的后续补充 我有一个简单的Isar证明: theory Propositional imports Main begin lemma nj2: assumes p: P and q: Q shows "P ∧ (Q ∧ P)" proof - from q p have qp: "Q ∧ P" by (rule conjI) from p qp show "P ∧ (Q ∧ P)" b

Isabelle (暂时)在Eisbach方法中禁用回溯

我有一个方法可以生成大量可能的状态,当使用,与(有条件的)失败或策略no_tac链接时,最终的组合方法需要很长时间才能终止,并导致Isabelle接口延迟。但是,当使用两个applys分别应用相同的方法时,终止非常快。有没有办法强迫艾斯巴赫方法在失败时不要回溯,而是立即失败?(本质上,作为apply cond_fail而不是apply(,cond_fail)?)我不认为在vanilla Eisbach中有直接实现这一点的方法,但定义新的组合方法(即高阶方法)相对容易 我们现在有一些。具体来说,d

Isabelle 伊莎贝尔有重写的策略吗?

例如,在Coq中有重写,我们也可以使用箭头`我不认为它像Coq版本那样强大,但是 及 重写定理。但是,您不能轻松地以应用样式重写假设 关于自反性呢?最接近自反性的可能是apply(simp(no_asm)),但使用它而不是apply simp,这是非常不自然的。这只是一个旁注:对于皮诺奇的特定应用程序,似乎最好使用apply(rule refl)或干脆。而不是simp(无ams)或simp,因为通过应用重写获得的两个术语将完全相同。当然,总的来说,simp(no_asm)似乎确实与Coq的

Isabelle 伊莎贝尔:公理化和快速检查与自动求解

又是一个小例子,结果出乎意料 theory Scratch imports Main begin datatype test = aa | bb | plus test test axiomatization where testIdemo : "x == plus x x" lemma test1 : "y == plus y y" 现在我收到以下消息: Auto solve_direct: The current goal can be solved directly with

Isabelle 未能应用初始证明方法。证明空跟踪不包含任何消息

我试图证明,在协议运行的跟踪中,消息不会出现在空跟踪中。最终的目标是证明没有主机会向自己发送消息。这看起来很简单,所以我不确定到底发生了什么。我收到的错误是 Failed to apply initial proof method⌂: using this: [] ∈ ns_public goal (1 subgoal): 1. ∀A B X. Says A B X ∉ set_of_list [] 这是有问题的代码 inductive_set ns_public :: "event l

Isabelle 简单伊莎贝尔/荷尔理论:内部词汇错误⌂;无法分析属性

我正试图创建我的第一个伊莎贝尔/霍尔理论,该理论编码了单像逻辑,但我已经被第一个公理——身份公理卡住了。我不明白我的代码出了什么问题,因为错误消息并没有给出解释。我的理论是: theory MonoidalLogic imports "~~/src/ZF/Main" Sequents begin consts Mult :: "[o, o]⇒o" axiomatization where identity: "P ⊢ P" (* and cut: "φ⊢ψ;ψ⊢ρ⟹φ⊢ρ"

Isabelle 如何使用fmmap_键定义函数的终止顺序?

我试图基于fmap为数据类型定义上确界操作: datatype t = A | B | C "(nat, t) fmap" abbreviation "supc f xs ys ≡ fmmap_keys (λk x. f x (the (fmlookup ys k))) (fmfilter (λk. k |∈| fmdom ys) xs)" fun sup_t (infixl "⊔" 65) where "A ⊔ _ = A" | "B ⊔ B = B

Isabelle 与伊莎贝尔重温高斯和

我对论证的一个变化感兴趣,它确立了: "(∑ i=1..k . i) = k*(k+1) div 2" 我们从一个简单的归纳中知道这一点,但插管有点不同。看这个公式的一个方法是,如果你对数字序列1..k的极值求和,你得到 1+k=2+(k-1)=…… 然后你只需要乘以正确的次数就可以得到完整的和 我想重复这一论点,以表明以下不平等: "(∑n = 1..k - 1. cmod (f (int n))) ≤ 2 * (∑n ≤ k div 2. cmod (f (int n)))" 这里我知道

{0,1}作为Isabelle中的函数类型

我正在尝试编写一个函数,该函数接受第二个参数,该参数可以是0或1: typedef f_2 = "{0::nat,1}" function proj_add :: "(real × real) × f_2 ⇒ (real × real) × f_2 ⇒ (real × real) × f_2" where "proj_add ((x1,y1),l) ((x2,y2),j) = ((add (x1,y1) (x2,y2)), (l+j) mod 2)" if "delta x1 y

Isabelle 如何证明对象不解释区域设置?

我想将“大”自然数定义为大于10的自然数,“小”自然数定义为小于5的自然数。我可以将这些定义表示为区域设置: locale Big = fixes k :: ‹nat› assumes ‹k > 10› locale Small = fixes k :: ‹nat› assumes ‹k < 5› 但是我如何表达和证明7不是小的呢?我可以证明它不小于5,但证明不令人满意,因为它根本没有提到小的区域: lemma ‹¬ ((7 :: nat) < (5 ::

Isabelle 想翻译语法吗;F&引用;至;真的,真的,真的,真的”;并将其用在;“布尔列表”;

这代表了我想要的,但不起作用: syntax "_F_hex" :: "any => any" ("F;") translations "F;" => "True,True,True,True" 我会使用F如下所示: [F;,F;] == [True,True,True,True,True,True,True,True] Isabelle必须能够解析翻译的右侧,但是True,True,…不能生成有效的语法树。如果使用F仅在列表枚举中,您可以扩展列表枚举的语法转换规则,如下

Isabelle 什么';这是空排序和#x27;a::{},还有一种;“类型”';a::类型

下面的注释显示了术语命令的输出: declare[[show_sorts]] term "x" (* "x::'a::{}" :: "'a::{}" *) term "x::'a" (* "x::'a::type" :: "'a::type" *) 在关于类型类的部分标题中,我使用了短语“nat to type”,我的意思是“nat to'a”(我不使用它,因为单词通常在标题中工作得更好) 我需要简洁,但如果我在技术上也合理正确,那就更好了 更新:在这里,我试图澄清我的问题。我想我是这

Isabelle 列表和简化规则:使用@而不是#时更困难?

在完成Isabelle教程中的练习时,我遇到了一个让我困惑的情况。为什么下面这个涉及列表前置的引理很容易被证明: lemma ‹count_list xs x = n ⟹ count_list (x # xs) x = Suc n› by simp 而这个涉及追加的不是吗 lemma ‹count_list xs x = n ⟹ count_list (xs @ [x]) x = Suc n› apply auto (* just does some minor rewriting *

如何在Isabelle中将规则归纳与变量泛化相结合?

在Isabelle中,我可以使用任意关键字在归纳证明中概括变量。这显然适用于普通归纳法,如apply(归纳法n任意:m)。我还可以进行规则归纳,如apply(归纳规则:R.induct)。但在使用规则归纳法时,我如何概括变量呢 在我的特定用例中,我需要证明rx形式的定理⟹ S y⟹ ⟨…⟩。谓词R是归纳定义的,我想对其使用规则归纳。变量y不能在证明中固定,但必须是任意的。作为解决方法,我已经证明了定理rx⟹ (∀ 是的,是的⟶ ⟨…⟩)相反,但如果不借助大锤,我无法证明这一点,我还猜测使用∀和⟶

Isabelle 如何定义fset上的归纳谓词?

我定义了两种值和一个强制转换函数: theory FSetIndTest imports Main "~~/src/HOL/Library/FSet" begin datatype val1 = A | B datatype val2 = C | D inductive cast_val :: "val1 ⇒ val2 ⇒ bool" where "cast_val A C" | "cast_val B D" 此外,我还为值列表定义了cast函数: inductive cast_l

Isabelle 搜索ML常量

在Isabelle中搜索ML常量是否有类似于查找常量的功能 例如,我希望找到这种类型的常量:“term=>cterm”。当然,“Thm.cterm_Of”可以完成这项工作,但一般来说,使用它会很方便

Isabelle/HOL规则反转证明

我从Isabelle/HOL开始,通过发行版中包含的prog-prove.pdf教程进行工作。我在第4.4.5节“规则反转”中被难住了。本教程(基本上)给出了以下示例: theory Structured imports Main begin inductive ev :: "nat ⇒ bool" where ev0: "ev 0" | evSS: "ev n ⟹ ev (Suc (Suc n))" notepad begin assume "ev n" from this ha

Isabelle 如何为BNF生成代码?

我正在尝试定义自定义集类型: notation bot ("⊥") typedef 'a myset = "UNIV :: 'a fset option set" .. definition myset :: "'a fset ⇒ 'a myset" where "myset b = Abs_myset (Some b)" instantiation myset :: (type) bot begin definition "⊥ = Abs_myset None" instance .

Isabelle 伊莎贝尔

在伊莎贝尔身上有什么工具可以描述战术吗 我基本上有一个战术的形式 REPEAT ( tac1 ORELSE ... ORELSE tacN ) 我想计算出每种战术的持续时间,以确定 优化的热点 我可能需要以嵌套方式执行此操作,例如 tac1 = tac12 THEN simp_tac ... 我想知道在简化上花了多少时间。不确定这是否是您要找的,但是有timeit在ML中,您可以围绕函数进行包装。这是一个艾斯巴赫包装: ML \<open>fun method_evaluate

Isabelle/HOL中的计算推理

在书的第77页,有一个例子显示: 本例中使用的证明结构用于计算推理。然后,最新的等式右侧应等于当前等式的左侧,如下所示: 您能解释一下示例1中发生了什么吗?欢迎!你的问题相当含糊。你到底有什么问题?

如何用ASCII编写isabelle迭代含义

在学习Isabelle(2020)时,我试图将其文档(PDF)中的一个示例复制到一个.thy文件中,该文件包含一个迭代的含义。由于文档是PDF格式的,我不知道它的正确ASCII应该是什么。我能得到的最接近的结果是: lemma "[[ xs @ ys = ys @ xs ; length xs = length ys]] ==> xs = ys" 但伊莎贝尔抱怨说“内部语法错误”。我试图使用“[…;…]”,但伊莎贝尔似乎将其视为一个列表,并抱怨列表和布尔之间的冲突

如何在Isabelle中定义部分函数?

我试图用partial\u函数关键字定义一个分部函数。它不起作用。下面是一个最能表达直觉的例子: partial_function (tailrec) oddity :: "nat => nat" where "oddity Zero = Zero " | "oddity (Succ (Succ n)) = n" 然后我尝试了以下方法: partial_function (tailrec) oddity :: "nat => nat" where "oddity arg =

在Isabelle/HOLCF中对列表进行部分排序

我想制作一个列表数据类型,作为HOLCF中Porder.thy中偏序集的一个实例。我的尝试如下: theory Scratch imports Porder Representable begin datatype 'a myList = Nil | Cons 'a "'a myList" instantiation myList :: (below) below begin definition below_list_def: "(x ⊑ y) = (case x o

使用where属性实例化以数字结尾的变量(Isabelle)

在Isabelle中,给定一个定理thm,其中包含一个自由变量x(更准确地说,是一个原理图变量),可以使用where-属性实例化x 例如,thm[其中x=5] 如果变量名以数字结尾,例如,thm[where x1=5],则无法实现此功能。这似乎是由于该变量在定理中表示为“?x1.0”,而不是“?x1” 下面的理论给出了一个例子 我的问题是:如何在这样一个定理中实例化x1?(例如,下面理论中的定理。) 我知道的“解决方案”: -使用thm[of 1]而不是thm[其中x1=1]。这在某些情况下是可

Isabelle 什么样的函数保持闭包的属性?

我试图证明以下引理: lemma tranclp_fun_preserve: "(⋀x y. x ≠ y ⟹ f x ≠ f y) ⟹ (⋀x y. f x ≠ f y ⟹ x ≠ y) ⟹ (⋀x y. f x = f y ⟹ x = y) ⟹ (λ x y. P x y)⇧+⇧+ (f x) (f y) ⟹ (λ x y. P (f x) (f y))⇧+⇧+ x y" apply (erule tranclp.cases) apply blast lemma

Isabelle/HOL中带的类型的句法缩写?

有没有办法定义Isabelle/HOL中类型的语法替换 我想这样做: syntax my_short_list :: "type" ("my-list") translations "my_short_list" ⇌ (type) "'a list" ― ‹Could not find syntax to express this ...› locale foo = fixes blub :: "my-list ⇒ my-list" 我想这样解释: locale foo = fix

Isabelle 这个伊莎贝尔的证据怎么了?

此模式生成器在给定位置生成一个具有给定数字的列表,所有其他值均为零 fun pattern_one_value :: "nat ⇒ nat ⇒ nat ⇒ nat ⇒ nat list" where "pattern_one_value _ _ _ 0 = []" | "pattern_one_value pos pos1 val lng = (if pos = pos1 then val else 0) # (pattern_one_value pos (pos1

如何描述Isabelle中(| |)内部的不准确点?

我知道在Isabelle中,y=x(| I:=1 |)意味着x和y有而且只有一个不同的点,那就是I。非常精确 但是如果我不知道I在y中的值,或者我不能轻松地写出它,该怎么办 我尝试了所有项目的我y=x,但是当有大量的i时,它是丑陋的 我的问题是,我能得到一个像(| |)这样的“精确”表达式吗?,只有几个不准确的点,这样我就不需要为所有项目编写我y=x?我认为您的“所有项目”方法在这里似乎相当合理。也许这比绝对必要的时间要长一点,但至少你的意思很清楚。使用Isabelle语法,您可以编写: "∀i

Isabelle 使用所有传入事实的初始证明方法

假设我有一个目标a⟹ B⟹ C⟹ G目标很难实现(由一些证明义务产生),并且在我的开发过程中多次出现(形状类似) 因此,我创建了一个引理foo,以简化形状a的目标⟹ C⟹ (P⟹ Q)⟹ G 我想能够写作 case goal42 thus ?case proof (rule foo) assume P show Q sorry qed 但是这失败了,因为foo不使用B。有效的是 case goal42 thus ?case apply - app

Isabelle 《伊莎贝尔》中存在量化的元符号

在Isabelle/Pure(⟹和⋀),其行为与对应的HOL不同(∀ 及→). 存在量化是否有一个元符号?如果没有,这一决定是否有具体原因?纯粹是基于直觉主义逻辑,在这个逻辑中没有存在量化 大致相当于获得: lemma assumes "P" obtains x where "Q x" 生成的引理是p⟹ (⋀x、 Q x⟹ 论文)⟹ 论文。它不包含一个存在量词,只包含一个蕴涵。但是它起着一个类似的规则:通过将论文与任何其他目标实例化,你可以展示x

  1    2   3   4   5   6  ... 下一页 最后一页 共 9 页