coq相关内容
我想证明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
..
我的奇数定义如下: 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.
..
我知道OCaml中的语法 let x = val in exp 表示x在表达式exp中具有值v。 但像 let add_left_red := eval red in add_left in (* reduce add_left, but leave goal alone *) idtac add_left_red. 我假设它是这样做的: 为add_left_
..
我想在证明的顶部断言一些引理,并在未来的每个目标中重复使用它们。我做到了: Theorem add_comm_eauto_using: forall n m: nat, n + m = m + n. Proof. intros. induction n. assert (H: forall n, n + 0 = n) by eauto
..
我想证明以下术语: 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
..
我正在查看this: Theorem eq_add_1 : forall n m, n + m == 1 -> n == 1 / m == 0 / n == 0 / m == 1. Proof. intros n m. rewrite one_succ. intro H. assert (H1 : exists p, n + m == S p) by now exists 0. appl
..
在Haskell中寻找一个可以展平任意深度嵌套列表的函数,即递归地应用concat并在最后一次迭代时停止(使用非嵌套列表)的函数时,我注意到这需要有一个更灵活的类型系统,因为随着列表深度的变化,输入类型也会有所不同。事实上,有几个堆栈溢出问题--例如this一个--其中响应指出,不存在将在不同深度‘查看’不同嵌套列表的函数。 编辑:有些答案在Haskell中提供了解决办法,用于自定义数据类型,或
..
作为我的一般问题的最小示例,假设我们有以下内容: Parameter C: Prop. Definition blah := C. 我要实施一种自动展开blah目标的所有假设的策略。 我尝试过: Ltac my_auto_unfold := repeat match goal with | [ H: ?P |- ?P ] => unfold blah in H end
..
除了this great discussion in SO之外,我还在Adam Chlipala的书中遇到了Set,我一直在试图理解Set是什么。他的第一个示例使用Set定义二进制操作: Inductive binop : Set := Plus | Times. 在那本书里他说: Second, there is the : Set fragment, which declare
..
在HOTT和CoQ中都不能证明UIP,即 Prod_{p:a=a}p=refl a 但可以证明: Prod_{p:a=a}(a,p)=(a,refl a) 为什么这样定义? 是不是因为一个人想要有一个好的同伦解释? 或者,这个定义有什么自然的、更深层次的原因吗? 推荐答案 今天我们知道拒绝uIP的一个很好的理由:它与同伦类型理论中的单价性原理不相容,后者粗略地说同构类型
..
当您熟悉项目时,表示法很方便,但当您刚开始使用代码库时,可能会感到困惑。我知道您可以关闭所有带有白话Set Printing All的符号。但是,我希望保留一些打印功能,例如隐含参数。打印所有内容如下: Require Import Utf8_core. Set Printing All. Theorem contradiction_implies_anything : forall P
..
在以前的Coq版本中,使用符号@in Reine命令允许我创建一个循序渐进的证明。(每个参数都是单独的目标。) 我希望避免像“?goal0?goal1”这样的隐式参数。现在我做不到了。 我应该怎么做才能获得这种可能性? (这对我来说非常不舒服,尤其是当我尝试处理递归函数时。) 推荐答案 您正在寻找simple refine。 在8.5中,可以通过统一(所谓的隐式)解决的目
..
我最近在OPAM上安装了Coq版本8.12.2。我已经使用以下命令安装了Coq的所有包: Opam Repo Add Coq-Releasehttps://coq.inria.fr/opam/released 但当我尝试在Coqide中编译包时,它无法识别coquelicot。 From Coq Require Import Lia Reals Lra List. From Co
..
我有一个关于Coq中类型检查定义的问题。我遇到了一种情况,我有两个T1和T2类型的项,从定义上我知道T1和T2是相等的(T1=T2)。但是,我不能同时使用这两个术语,因为类型检查器认为这两个类型不相等。我试图分离出一个模拟情况的最小示例(是的,我知道这是一个愚蠢的属性,但我只想检查它的类型;): Require Import Coq.Lists.List. Lemma myLemma :
..
自然数上的“强”(或“完全”)归纳法是指,当证明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. 我已经设法证明了这个定理,没有太多困难。现
..
我来自 JavaScript/Ruby 编程背景,并且习惯于 true/false 的工作方式(在 JS 中): !true//错误的!错误的//真的 然后您可以将这些真/假值与 && 类似 var a = true, b = false;一个&&!b; 所以 and 和 not(以及其他逻辑/布尔运算符)是单个系统的一部分;看起来“逻辑"系统和“布尔"系统是一回事. 然而,在 Co
..
我陷入了这样的目标平等的困境(我认为细节无关紧要): tcast tc0[取i(s_bs bs)++降i.+ 1(s_bs bs)++ [:: [ffun⇒0]]的元组]=... 如何摆脱 tcast 和 tuple 回到简单的 seq (我尝试了 val_inj 技巧,但这似乎并没有删除类型转换)? 谢谢. 再见 皮埃尔 解决方案 给出准确的答案有些困难,因为您
..
在此文档链接中,有一些有用的定理分配.我尝试使用CoqIDE 8.9.0中的 Require Import 导入它,但是,虽然导入成功,但以下代码失败,并显示在当前环境中找不到参考div_lt_upper_bound. 需要导入Coq.Numbers.NatInt.NZDiv.检查div_lt_upper_bound. 我尝试下载文件的源代码并通过 Load 手动导入,但是随后得到以下消息,
..
我不熟悉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)=>错误
..
在用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:表达式)(
..