coq - coq 中的通用平等提升
问题描述
是否有任何策略或事实或其他东西将相等性提升为归纳和反向的构造函数,将归纳构造函数的相等性提升为构造函数参数的相等性,即:
forall T: Type, forall t1 t2: T, Some t1 = Some t2 -> t1 = t2
forall T: Type, forall t1 t2: T, t1 = t2 -> Some t1 = Some t2
解决方案
第一个原则通常被称为构造函数的注入性,并且有多种策略可以使用它。一种选择是injection
策略:
Goal forall T: Type, forall t1 t2: T, Some t1 = Some t2 -> t1 = t2.
intros T t1 t2 H. injection H as H. apply H.
Qed.
另一个原则适用于任何函数,而不仅仅是构造函数。您可以使用以下f_equal
策略:
Goal forall T: Type, forall t1 t2: T, t1 = t2 -> Some t1 = Some t2.
intros T t1 t2 H. f_equal. exact H.
Qed.
请注意,在这种情况下,简单地用等式重写通常更容易,因为当您有一个多参数函数时,它可以避免生成多个目标:
Goal forall T: Type, forall t1 t2: T, t1 = t2 -> Some t1 = Some t2.
intros T t1 t2 H. rewrite H. trivial.
Qed.
推荐阅读
- c++ - 请解释以下函数模板声明中的问题(根本原因)
- amazon-web-services - AWS Lambda EFS | EACCES:权限被拒绝
- postgresql - 选择已排序子组的最大行数
- java - 我收到此错误严重:无法处理 Jar 中的 Jar 条目 [module-info.class]
- javascript - 机器人回应自己的反应
- flutter-bloc - Flutter bloc 状态在更新列表/数组索引时不更新状态
- laravel - 如何获取当前登录用户的模型?
- c# - 为什么 IdentityServer4 ApiResource 不能与 JwtBearerOption.Audience 一起使用?
- node.js - Dockerfile - 为多个 Node.js 应用程序构建 docker 映像
- javascript - 为什么 vue 计算函数可以在没有参数的情况下解构分配参数?