Coq案例分析和函数返回子集类型的重写

2024-04-08

我正在做一个关于使用子集类型编写经过认证的函数的简单练习。想法是先写一个前驱函数

pred : forall  (n : {n : nat | n > 0}), {m : nat | S m = n.1}.

然后使用这个定义给定一个函数

pred2 : forall (n : {n : nat | n > 1}), {m : nat | S (S m) = n.1}.

我对第一个没有问题。这是我的代码

Program Definition pred (n : {n : nat | n > 0}) : {m : nat | S m = n.1} :=
  match n with
  | O => _
  | S n' => n'
  end.
Next Obligation. elimtype False. compute in H. inversion H. Qed.

但我无法解释第二个定义。我试图写出这些定义

Program Definition pred2 (n : {n : nat | n > 1}) : {m : nat | S (S m) = n.1} 
:= pred (pred n).

我设法证明了前两个义务

Next Obligation. apply (gt_trans n 1 0). assumption. auto. Qed.
Next Obligation. 
  destruct pred.  
  simpl.
  simpl in e. 
  rewrite <- e in H.
  apply gt_S_n in H; assumption.
Qed.

但对于最后一项义务,我陷入了困境,因为当我尝试对 pred 的返回类型进行案例分析时,新的假设并未在目标中重写。

我尝试了以下策略但没有结果。

destruct (pred (n: pred2_obligation_1 (n ; H))).

destruct (pred (n; pred2_obligation_1 (n ; H))) eqn:?.
rewrite Heqs.

我知道我可以直接编写 pred2,但想法是使用和组合函数 pred。


原因destruct没有任何效果可能是因为您尝试进行案例分析的内容没有出现在目标中。该术语的隐式参数可能与目标中该术语的隐式参数不匹配。无论哪种方式,您都无法在不使目标类型错误的情况下对该术语进行案例分析。

但你可以通过案例分析来证明这一义务n.

Next Obligation.
destruct n.
inversion H.
destruct n.
inversion H.
subst.
inversion H1.
cbn.
eauto.
Qed.

我还能够证明一些辅助定理,但由于所有类型依赖性,我无法使用它们。

Theorem T1 : forall s1, S (` (pred s1)) = ` s1.
Proof. intros [[| n1] H1]. inversion H1. cbn. eauto. Qed.

Theorem T2 : forall T1 (P1 : T1 -> Prop) s1 H1, (forall x1 (H1 H2 : P1 x1), H1 = H2) -> exist P1 (` s1) H1 = s1.
Proof. intros ? ? [x1 H1] H2 H3. cbn in *. rewrite (H3 _ H1 H2). eauto. Qed.

我从未见过destruct用在函数上。我很惊讶 Coq 没有抱怨该函数不是归纳定义的。

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

Coq案例分析和函数返回子集类型的重写 的相关文章

随机推荐

  • sorl-缩略图不起作用

    我已经尝试了几个小时来让 sorl thumbnail 工作 但它就是行不通 困难的部分是它没有显示错误 所以我不知道出了什么问题 我按照说明安装了它 我的完整代码可以在这里找到 https github com samos123 Samo
  • 在同一个表上触发 INSERT 和 UPDATE

    众所周知 实体框架无法保存地理数据 所以我的想法是 在我的模型中将经度和纬度指定为十进制 执行用于创建表的 SQL 脚本后 我将启动另一个脚本来添加地理列 然后我想通过触发器在每次插入或更新 经度和纬度 时更新此列 下面的触发器是好的还是坏
  • 在新机器上部署.net应用程序并得到“系统无法执行指定的程序”

    我有一个启动 Excel 的 net 控制台应用程序 我让它在我的开发环境中运行 但我无法让它在我的生产环境中运行 当我尝试运行它时 收到以下错误 系统无法执行指定的程序 我已经在我的生产服务器上安装了 net 2 0 sp2 有任何想法吗
  • PyQT 列表视图不响应数据更改信号

    我一直在关注一些教程并尝试设置列表模型 我的主窗口有两个访问同一模型的列表视图 当我更新一个列表中的一项时 另一个列表不会自行更新 直到它获得焦点 我单击它 所以看起来 dataChanged 信号没有被发出 但我无法弄清楚我的代码与我所基
  • 旋转时使用拖动手柄调整 div 大小

    我可以找到类似的问题 涉及 jQuery UI lib 或者只有 css 没有可拖动的句柄 但没有任何纯数学问题 我尝试执行的是拥有一个可调整大小和可旋转的 div 到目前为止很容易 我可以做到 但旋转时会变得更加复杂 调整大小以相反的方式
  • JavaScript 函数是否可以将其自己的函数调用作为字符串返回?

    在 JavaScript 中 函数是否可以将其自己的函数调用作为字符串返回 function getOwnFunctionCall return the function call as a string based on the para
  • 胡萝卜2 - 我可以从文件夹中聚集文档吗?

    我正在尝试对我在研究项目中收集的文档进行聚类 我正在尝试使用 Carrot2 工作台 但无法找到如何将胡萝卜指向包含文档的文件夹 请问我该怎么做 我有少量文档 txt 需要比较 它们位于独立的研究机器上 因此我无法连接到网络并在那里处理它们
  • Symfony 存储 foreach 循环的结果

    我想知道是否可以存储 foreach 循环的结果 我不知道如何更详细地解释我的问题 所以可以说以下让我得到 3 个不同的数组 events this gt getDoctrine gt getRepository TestBundle Ev
  • IS 回收时正在运行的任务会发生什么情况

    为了帮助提高客户端的性能 我将请求的处理转移到任务上 这样做是因为处理通常需要一些时间 而且我不希望客户端等待一段时间才得到 200 响应 将工作转移到任务上的 Web 服务始终在处理帖子 public void ProcessReques
  • 即使在使用显式版本的 Pipfile 和 Pipfile.lock 后,用户之间也存在差异

    抱歉 篇幅较长 这是一个非常复杂的 Pipenv 情况 在我的公司 我们正在使用 pipelinev 同时使用Pipfile and Pipfile lock 来控制不同工程师笔记本电脑上使用的包 这对我们来说比大多数团队更重要 因为我们还
  • Django 错误:vertualenv 环境错误:找不到 mysql_config [重复]

    这个问题在这里已经有答案了 当我尝试在运行 10 8 的 MAC 上的 virtualenv 中安装 MySQL python 时 出现以下错误 vertualenv EnvironmentError mysql config not fo
  • 如何在 Go 中实现不同类型的容器? [复制]

    这个问题在这里已经有答案了 下面的代码在Go中实现了一个int列表 package main import fmt type List struct Head int Tail List func tail list List List r
  • 增加或减少添加神经元或权重的学习率?

    我有一个卷积神经网络 我修改了它的架构 我没有时间重新训练和执行交叉验证 对最佳参数进行网格搜索 我想要直观地调整学习率 我是不是该increase or decrease我的 RMS 基于 SGD 优化器的学习率 如果 I add mor
  • equenceA 如何处理成对的列表?

    分拆出来this https stackoverflow com a 64068980 5825294问题 直觉上我明白了什么sequenceA在该用例中确实如此 但不是how why它是这样工作的 所以这一切都归结为这个问题 如何sequ
  • JPA 实体和/与 DTO

    在这些情况下帮助决定何时使用 DTO 以及何时使用 Entity 的总体思路是什么 UI 服务器端java调用服务 它应该获取 发送实体还是 DTO Web 服务调用服务 服务是否应该接受实体或 DTO 我喜欢阅读传递实体的代码 传递更简单
  • Android VideoView 是否缓存流式视频?

    看起来 VideoView Mediaplayer 没有自动缓存 只有我吗 Android VideoView 是否缓存流式视频 或者每次播放时都会重新下载 没有缓存 如果需要 您可以将代理服务器插入到混合中并自行缓存
  • 如何禁用 Android AutoCompleteTextView 的拼写检查器?

    我已经搜索过这个问题 但没有找到适合我的情况的任何答案 我有一个 AutoCompleteTextView 和一些字符串作为建议 城市名称 Android 用红线标记它们 我认为这是 Android 的拼写检查器 如何防止拼写检查 找到了最
  • 如何将 TextView 绘制到位图中(无需在显示器上绘制)

    根据主题 将 TextView 截图为位图 可以找到很多帖子 嗯 与我的问题不同的是 首先将视图绘制在显示器上 所有布局和测量工作都已完成 然后绘制到连接到位图的画布中 我只想从头开始创建一个 TextView 而不显示在渲染为位图的显示器
  • Pandas DataFrame:使用 Lambda 函数将 WKT 转换为新列中的 GeoJSON

    我有一些这种格式的数据 Dep Dest geom EDDF KIAD LINESTRING 3 961389 43 583333 3 968056 43 580 其中包含飞行轨迹 geom 列包含 WKT 格式的坐标 可以通过库转换它们g
  • Coq案例分析和函数返回子集类型的重写

    我正在做一个关于使用子集类型编写经过认证的函数的简单练习 想法是先写一个前驱函数 pred forall n n nat n gt 0 m nat S m n 1 然后使用这个定义给定一个函数 pred2 forall n n nat n