Coq 中的程序定点和函数有什么区别?

2024-01-05

它们似乎有相似的目的。到目前为止我注意到的一个区别是Program Fixpoint将接受复合措施,例如{measure (length l1 + length l2) }, Function似乎拒绝这一点并且只会允许{measure length l1}.

Is Program Fixpoint严格来说比Function,或者它们更适合不同的用例?


这可能不是完整的列表,但这是我迄今为止发现的:

  • 正如你已经提到的,Program Fixpoint允许该措施考虑多个论点。
  • Function创建一个foo_equation可用于重写调用的引理foo及其 RHS。对于避免诸如此类的问题非常有用用于程序修复点的 Coq simpl https://stackoverflow.com/q/36329256/946226.
  • 在某些(简单?)情况下,Function可以定义一个foo_ind引理沿着递归调用的结构执行归纳foo。再次强调,对于证明一些事情非常有用foo没有有效地重复证明中的终止论证。
  • Program Fixpoint可以被欺骗以支持嵌套递归,请参阅https://stackoverflow.com/a/46859452/946226 https://stackoverflow.com/a/46859452/946226。这也是为什么Program Fixpoint can 定义阿克曼 https://stackoverflow.com/questions/10292421/error-in-defining-ackermann-in-coq函数时Function cannot.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Coq 中的程序定点和函数有什么区别? 的相关文章

  • 如何禁止简单策略展开算术表达式?

    The simpl策略展开诸如2 a 匹配树 这看起来一点也不简单 例如 Goal forall i Z fun x gt x i 3 i 3 simpl 导致 forall i Z match i with 0 gt 3 Z pos y
  • 如何指示两种 Coq 电感类型尺寸的减小

    我正在尝试定义game组合游戏的归纳型 我想要一个比较方法来判断两个游戏是否相同lessOrEq greatOrEq lessOrConf or greatOrConf 然后我可以检查两个游戏是否相等 如果它们都是 lessOrEq and
  • Coq 平等实现

    我正在编写一种玩具语言 其中 AST 中的节点可以有任意数量的子节点 Num has 0 Arrow有 2 个 等等 您可以致电这些接线员 此外 AST 中可能只有一个节点被 聚焦 我们对数据类型进行索引Z如果它有焦点 或者H如果没有 我需
  • Coq:定义子类型

    我有一个类型 比如说 Inductive Tt a b c 定义它的子类型的最简单和 或最好的方法是什么 假设我希望子类型仅包含构造函数a and b 一种方法是对二元素类型进行参数化 例如布尔 Definition filt x bool
  • 用 Coq 重写假设,保留蕴涵

    我正在做 Coq 证明 我有P gt Q作为假设 并且 P gt Q gt Q gt P 作为引理 如何将假设转化为 Q gt P 当我尝试apply它 我只是产生新的子目标 这没有帮助 换句话说 我想从以下开始 P Prop Q Prop
  • coq 中的依赖模式匹配

    以下代码 当然不是完整的证明 尝试对依赖产品进行模式匹配 Record fail Set mkFail i nat f forall x x lt i gt nat Definition failomat forall m nat f fo
  • F# 中的命令式多态性

    OCaml 的 Hindley Milner 类型系统不允许命令式多态性 类似于 System F 除非通过最近对记录类型的扩展 这同样适用于 F 然而 有时需要将用命令式多态性 例如 Coq 编写的程序翻译成此类语言 Coq 的 OCam
  • 将假设中的 ~exists 转换为 forall

    我陷入了假设的境地 exists k k lt n 1 f k f n 2 并希望将其转换为等效的 我希望如此 假设forall k k lt n 1 gt f k lt gt f n 2 这是一个小例子 Require Import Co
  • Prop 和 Type 的不同归纳原理

    我注意到 Coq 综合了关于 Prop 和 Type 等式的不同归纳原理 有人对此有解释吗 平等定义为 Inductive eq A Type x A A gt Prop eq refl x x 与之相关的归纳原理有以下类型 eq ind
  • 如何一步步检查 Coq 中更复杂的策略的作用?

    我试图经历那些著名的和精彩的软件基础书籍 https softwarefoundations cis upenn edu lf current Basics html lab30但我举了一个例子simpl and reflexivity 只
  • 我可以在“coqtop - nois”下定义策略吗?

    coqtop nois Welcome to Coq 8 7 0 October 2017 Coq lt Ltac i idtac Toplevel input characters 0 4 gt Ltac i idtac gt Error
  • 如何在构造微积分中提取Sigma的第二个元素?

    我尝试这样做 A gt B A gt gt t r gt x a gt B x gt r gt r gt t B t A x A gt y B x gt x x A gt y B x gt y 请注意 由于该函数返回的值取决于 sigma
  • 可以在 Coq 的蕴涵中使用 destruct 吗?

    destruct可以用来分割and or在柯克 不过好像也可以用暗示 例如我想证明 P gt P Lemma test P P gt P Proof unfold not intro pffpf apply pffpf intro pff
  • 在 Coq 中,“if then else”允许非布尔第一个参数?

    我读过一些教程if a then b else c代表match a with true gt b false gt c end 然而 很奇怪的是 前者不检查类型a 而后者当然确保a是一个布尔值 例如 Coq lt Check if nil
  • Coq案例分析和函数返回子集类型的重写

    我正在做一个关于使用子集类型编写经过认证的函数的简单练习 想法是先写一个前驱函数 pred forall n n nat n gt 0 m nat S m n 1 然后使用这个定义给定一个函数 pred2 forall n n nat n
  • 为什么逻辑连接词和布尔值在 Coq 中是分开的?

    我有 JavaScript Ruby 编程背景 并且习惯了 true false 的工作方式 在 JS 中 true false false true 然后你可以使用这些真 假值 like var a true b false a b So
  • 为什么这个“with”块会破坏这个函数的整体性?

    我正在尝试在自然数上计算奇偶校验和一半的下限 data IsEven Nat gt Nat gt Type where Times2 n Nat gt IsEven n n n data IsOdd Nat gt Nat gt Type w
  • Coq:承认断言

    有没有办法在 Coq 中承认断言 假设我有一个这样的定理 Theorem test forall m n nat m n n m Proof intros n m assert H1 m m n m S n Admitted Abort 上
  • 为什么 Coq 中实数公理化?

    我想知道 Coq 是否将实数定义为柯西序列或 Dedekind 切割 所以我检查了 Coq Reals Raxioms 这两个都不是 实数及其运算被公理化 如Parameters and Axioms 为什么会这样呢 此外 实数紧密依赖于子
  • 尝试使用 Case 时出现 coq 错误。软件基础书籍中的示例

    我正在尝试通过在线软件基础书籍来学习 Coq http www cis upenn edu bcpierce sf http www cis upenn edu bcpierce sf 我正在使用交互式命令行 Coq 解释器coqtop 在

随机推荐