Coq:添加“强归纳”策略

2024-03-16

对自然数的“强”(或“完全”)归纳意味着当证明 n 上的归纳步骤时,您可以假设该属性对于任何 k 都成立

Theorem strong_induction:
forall P : nat -> Prop,
(forall n : nat, (forall k : nat, (k < n -> P k)) -> P n) ->
forall n : nat, P n.

我没有遇到太多困难就成功地证明了这个定理。现在我想在一种新的策略中使用它,strong_induction,它应该类似于自然数上的标准“归纳n”技术。回想一下,当 n 是自然数且目标是 P(n) 时,使用“归纳 n”时,我们得到两个目标:其中一个为 P(0) 形式,第二个为 P(S(n)) 形式,对于第二个目标,我们得到 P(n) 作为假设。

所以我想,当当前目标是 P(n) 时,得到一个新目标,也是 P(n),但新假设“forall k : nat, (k P(k)))”。

问题是我不知道如何在技术上做到这一点。我的主要问题是:假设 P 是一个复杂的陈述,即

exists q r : nat, a = b * q + r

上下文中带有 b : nat ;我如何告诉 Coq 对 a 进行强归纳而不是对 b 进行强归纳?简单地执行“应用strong_induction”会导致

n : nat
H0 : forall k : nat, k < n -> exists q r : nat, a = b * q + r
______________________________________(1/2)
exists q r : nat, a = b * q + r
______________________________________(2/2)
nat

其中假设是无用的(因为 n 与 a 无关)并且我不知道第二个目标意味着什么。


在这种情况下,要apply strong_induction你需要change目标的结论,使其更好地符合定理的结论。

Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
change (forall a, (fun c => forall b, b <> 0 -> exists ! q r, c = q * b + r /\ r < b) a).
eapply strong_induction.

您还可以更直接地使用refine战术。这个策略类似于apply tactic.

Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
refine (strong_induction _ _).

But the induction策略已经处理任意归纳原则。

Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
induction a using strong_induction.

有关这些策略的更多信息here http://coq.inria.fr/refman/tactic-index.html。你可能应该使用induction before intro- 和split-ing.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Coq:添加“强归纳”策略 的相关文章

随机推荐

  • 在MySql中执行sql select的结果

    我试图让 MySql 将以下语句的结果作为进一步的 sql 语句执行 我相信在oracle sqlplus中这是使用以下实现的spool功能 这是如何实现的Mysql select concat OPTIMIZE TABLE ist TAB
  • 如何使用 VB.NET 将 JSON POST 到特定 url?

    我是 VB NET 中 Web 服务的新手 我正在制作一个可以与 JIRA 对话的桌面应用程序 http www atlassian com software jira http www atlassian com software jir
  • Angular2 ng-bootstrap 模态组件

    我有一个模态成分 https ng bootstrap github io components modal创建于ng 引导程序 https ng bootstrap github io就像下面 只是一个身体
  • 是否可以编写一个接受不同抽象的泛型参数的方法?

    As a 这个问题的后续 https stackoverflow com q 9890866 403455 是否可以编写一个添加Dog到合适的房间 在此示例中 它将接受Animal房间或Dog房间 或者我被迫编写如下两种不同的方法 由于类型
  • 将新行 /n 转换为角度换行符

    我有一个包含换行符 n 的字符串 尝试显示 字符串 它不会将 n 作为新行 而是将 n 显示为文本 scope myOutput Hello n myOutput textFormat 必需 gt 你好 在 html 页面上 Tried a
  • 在catplot中指定颜色

    我想使用seaborn catplot 指定特定观察结果的颜色 在一个虚构的例子中 import seaborn as sns import random as r name list pepe Fabrice jim Michael co
  • C++/CLI,类声明之外的静态构造函数

    如何将托管类的静态构造函数的主体放在类声明之外 这种语法似乎是可编译的 但它真的意味着静态构造函数 还是只是一个静态 在翻译单元之外不可见 函数 ref class Foo static Foo static Foo Foo 是的 这是创建
  • 如何模拟不会导致脆弱测试的实现细节

    我正在读一本关于单元测试的书 下面是引用和代码 不是完整的代码 因为很容易理解代码的作用 首先 作者展示了一个不会导致脆弱测试的嘲笑 Fact public void Successful purchase var mock new Moc
  • 在 Python 中验证 ISO-8601 日期时间字符串?

    我想编写一个接受字符串并返回的函数True如果它是有效的 ISO 8601 日期时间 精确到微秒 包括时区偏移 False否则 我已经发现other https stackoverflow com questions 969285 how
  • 将规则index.php?/controller/method/param重写为/controller/method/param

    我需要这个网址的重写规则 http localhost user frame lib index php controller method 12 22 我怎样才能重写它 我可以这样称呼它 http localhost user frame
  • 如何设置设备邮件发件人姓名?

    我正在使用 Rails 设计 gem 设计向新用户发送确认电子邮件 Actionmailer 配置为使用我的 Gmail 帐户发送电子邮件 电子邮件由发件人发送 电子邮件受保护 cdn cgi l email protection 这是我的
  • 无法在 Linux Mint 19.3 中安装 R 3.6.2 中的 httr 包

    我对 R 完全陌生 我尝试安装httr包裹 我首先安装了 pacman 然后尝试通过运行来加载 httrpacman p load httr 它没有成功 它在终端中显示以下消息 将包安装到 home 用户名 R x86 64 pc linu
  • hdfs 命令在 hadoop 中已弃用

    我正在关注这个程序 http www codeproject com Articles 757934 Apache Hadoop for Windows Platform YouTube 链接 https www youtube com w
  • 如何从文本框获取值

    我改变了我的问题 因为它可能不被理解 也对不起我的英语 动态创建文本框 将它们放入数组中 我的一段代码 public partial class NewArticleForm System Web UI Page private Label
  • 响应式 JavaScript:仅针对小设备宽度执行代码

    我有一些简单的 JavaScript 嵌入在事件中 我只想为小型设备触发它们 电话等 目前我正在做 if window width lt 606 do things 但这感觉很笨拙 有没有办法只对小于某个断点的设备执行此操作 除了设置较早的
  • 为什么在 asp.net 身份中验证电话号码后注销?

    我在我的项目中使用 asp net Identity 在VerifyPhoneNumber查看 当用户确认他的电话号码时 他已注销 AspNetApplicationCookie已移除 我从 资源 选项卡 检查 chrome 中检查了这一点
  • 对多个项目和配置有效使用 Visual Studio 项目属性

    我一直使用 Visual Studio 内置的 GUI 支持来配置我的项目 通常使用属性表 以便多个项目将使用通用集 我对此的主要抱怨之一是管理多个项目 配置和平台 如果您只是使用主 GUI 执行所有操作 右键单击项目 gt 属性 它很快就
  • 如何用 GridLayoutManager 从右到左填充 RecyclerView

    我正在尝试将一些数据填充到RecyclerView with GridLayoutManager GridLayoutManager layoutManager new GridLayoutManager this 3 GridLayout
  • Visual Studio 2012 包管理器控制台错误

    当尝试使用包管理器控制台安装任何内容时 我收到此错误 Install Package The schema version of Microsoft Bcl is incompatible with version 2 0 30625 90
  • Coq:添加“强归纳”策略

    对自然数的 强 或 完全 归纳意味着当证明 n 上的归纳步骤时 您可以假设该属性对于任何 k 都成立 Theorem strong induction forall P nat gt Prop forall n nat forall k n