coq相关内容

程序定点代码中的析构IF条件

我想证明Use proof of if expression = true in then part coq 中因子函数的正确性 Require Import ZArith Znumtheory. Local Open Scope Z_scope. Require Coq.Program.Tactics. Require Coq.Program.Wf. Lemma divgt0 ( a ..
发布时间:2022-08-20 12:53:46 其他开发

如何证明奇数是COQ中NAT的双倍继承者?

我的奇数定义如下: Definition Odd n := exists k, n = 2*k+1. 我有一个奇数定义,即一个数字是否为奇数。 Fixpoint oddb (n : nat) { struct n } : bool := match n with | 0 => false | 1 => true | S (S n) => oddb n end. ..
发布时间:2022-08-20 12:44:42 其他开发

简化假设

我想证明以下术语: Goal forall x y, andb x y = true -> x = true. 相当于 Goal forall x y, ((andb x y) = true) -> (x = true). 因此,我在纸上的方法是遍历x和y的所有选项,并表明只要左侧为真(TRUE=TRUE),右侧也为真(TRUE=TRUE),这将满足隐含的要求。 Proo ..
发布时间:2022-08-20 12:12:09 其他开发

在依赖类型的函数式编程语言中,展平列表是否更容易?

在Haskell中寻找一个可以展平任意深度嵌套列表的函数,即递归地应用concat并在最后一次迭代时停止(使用非嵌套列表)的函数时,我注意到这需要有一个更灵活的类型系统,因为随着列表深度的变化,输入类型也会有所不同。事实上,有几个堆栈溢出问题--例如this一个--其中响应指出,不存在将在不同深度‘查看’不同嵌套列表的函数。 编辑:有些答案在Haskell中提供了解决办法,用于自定义数据类型,或 ..
发布时间:2022-08-20 11:39:27 其他开发

我如何实现迭代这些假设的COQ策略?

作为我的一般问题的最小示例,假设我们有以下内容: Parameter C: Prop. Definition blah := C. 我要实施一种自动展开blah目标的所有假设的策略。 我尝试过: Ltac my_auto_unfold := repeat match goal with | [ H: ?P |- ?P ] => unfold blah in H end ..
发布时间:2022-08-20 11:28:14 其他开发

类型`Set`的具体示例是什么?`Set`的含义是什么?

除了this great discussion in SO之外,我还在Adam Chlipala的书中遇到了Set,我一直在试图理解Set是什么。他的第一个示例使用Set定义二进制操作: Inductive binop : Set := Plus | Times. 在那本书里他说: Second, there is the : Set fragment, which declare ..
发布时间:2022-08-20 11:21:43 其他开发

COQ和HOTT中平等定义的理由

在HOTT和CoQ中都不能证明UIP,即 Prod_{p:a=a}p=refl a 但可以证明: Prod_{p:a=a}(a,p)=(a,refl a) 为什么这样定义? 是不是因为一个人想要有一个好的同伦解释? 或者,这个定义有什么自然的、更深层次的原因吗? 推荐答案 今天我们知道拒绝uIP的一个很好的理由:它与同伦类型理论中的单价性原理不相容,后者粗略地说同构类型 ..
发布时间:2022-08-20 11:10:48 其他开发

如何临时禁用Coq中的符号

当您熟悉项目时,表示法很方便,但当您刚开始使用代码库时,可能会感到困惑。我知道您可以关闭所有带有白话Set Printing All的符号。但是,我希望保留一些打印功能,例如隐含参数。打印所有内容如下: Require Import Utf8_core. Set Printing All. Theorem contradiction_implies_anything : forall P ..
发布时间:2022-08-20 11:03:15 其他开发

代码8.5pl1中的精炼和@(At)符号

在以前的Coq版本中,使用符号@in Reine命令允许我创建一个循序渐进的证明。(每个参数都是单独的目标。) 我希望避免像“?goal0?goal1”这样的隐式参数。现在我做不到了。 我应该怎么做才能获得这种可能性? (这对我来说非常不舒服,尤其是当我尝试处理递归函数时。) 推荐答案 您正在寻找simple refine。 在8.5中,可以通过统一(所谓的隐式)解决的目 ..
发布时间:2022-08-20 10:56:04 其他开发

CoQ:对定义中的术语进行类型检查时使用类型相等

我有一个关于Coq中类型检查定义的问题。我遇到了一种情况,我有两个T1和T2类型的项,从定义上我知道T1和T2是相等的(T1=T2)。但是,我不能同时使用这两个术语,因为类型检查器认为这两个类型不相等。我试图分离出一个模拟情况的最小示例(是的,我知道这是一个愚蠢的属性,但我只想检查它的类型;): Require Import Coq.Lists.List. Lemma myLemma : ..
发布时间:2022-08-20 10:33:33 其他开发

COQ:添加强归纳策略

自然数上的“强”(或“完全”)归纳法是指,当证明n上的归纳步时,可以假定对任何k都成立 Theorem strong_induction: forall P : nat -> Prop, (forall n : nat, (forall k : nat, (k P k)) -> P n) -> forall n : nat, P n. 我已经设法证明了这个定理,没有太多困难。现 ..
发布时间:2022-08-20 10:25:51 其他开发

为什么 Coq 中的逻辑连接词和布尔值是分开的?

我来自 JavaScript/Ruby 编程背景,并且习惯于 true/false 的工作方式(在 JS 中): !true//错误的!错误的//真的 然后您可以将这些真/假值与 && 类似 var a = true, b = false;一个&&!b; 所以 and 和 not(以及其他逻辑/布尔运算符)是单个系统的一部分;看起来“逻辑"系统和“布尔"系统是一回事. 然而,在 Co ..
发布时间:2022-01-19 17:01:39 其他开发

删除元组的tcast

我陷入了这样的目标平等的困境(我认为细节无关紧要): tcast tc0[取i(s_bs bs)++降i.+ 1(s_bs bs)++ [:: [ffun⇒0]]的元组]=... 如何摆脱 tcast 和 tuple 回到简单的 seq (我尝试了 val_inj 技巧,但这似乎并没有删除类型转换)? 谢谢. 再见 皮埃尔 解决方案 给出准确的答案有些困难,因为您 ..
发布时间:2021-04-24 20:08:07 其他开发

如何从Coq.Numbers.NatInt.NZDiv中导入定理?

在此文档链接中,有一些有用的定理分配.我尝试使用CoqIDE 8.9.0中的 Require Import 导入它,但是,虽然导入成功,但以下代码失败,并显示在当前环境中找不到参考div_lt_upper_bound. 需要导入Coq.Numbers.NatInt.NZDiv.检查div_lt_upper_bound. 我尝试下载文件的源代码并通过 Load 手动导入,但是随后得到以下消息, ..
发布时间:2021-04-24 20:08:04 其他开发

如何处理"false = true";证明定理中的命题

我不熟悉coq并试图证明这个定理 归纳表达式:类型:=|Var(n:nat)..定理variable_equality:forall x:nat,forall n:nat,((等于x n)= true)->(Var x = Var n). 这是对等的定义 固定点等于(n1:nat)(n2:nat):=匹配(n1,n2)与|(O,O)=>真的|(O,S n)=>错误的|(S n,O)=>错误 ..
发布时间:2021-04-24 20:08:01 其他开发

证明定理时循环

在用Debruijn指数形式化Lambda演算并在Coq中进行替换之后,我试图证明以下定理. 定理atom_equality:forall e:expression,forall x:nat,(beta_reduction(Var x)e)->(e = Var x). 这些是表达和减少beta的定义 归纳表达式:类型:=|Var(n:nat)|抽象(e:表达式)|应用程序(e1:表达式)( ..
发布时间:2021-04-24 20:07:58 其他开发