首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数学课:证明Munit是它自己的否定

数学课:证明Munit是它自己的否定
EN

Stack Overflow用户
提问于 2016-11-14 05:29:57
回答 1查看 45关注 0票数 1

我刚刚开始玩数学课库,我想证明以下引理:

代码语言:javascript
复制
Require Import
    MathClasses.interfaces.abstract_algebra MathClasses.interfaces.vectorspace MathClasses.interfaces.canonical_names. 

Lemma Munit_is_its_own_negation `{Module R M} : Munit = - Munit.

我本来打算证明这一点的:

  1. 使用right_identityMunit = - Munit & Munit将Munit添加到右侧
  2. 右侧使用left_inverseMunit = Munit
  3. 使用reflexivity

但是,当我尝试应用rewrite <- right_inverse时,会出现以下错误:

代码语言:javascript
复制
Error:
Unable to satisfy the following constraints:
In environment:
R : Type
M : Type
Re : Equiv R
Rplus : Plus R
Rmult : Mult R
Rzero : Zero R
Rone : One R
Rnegate : Negate R
Me : Equiv M
Mop : SgOp M
Munit : MonUnit M
Mnegate : Negate M
sm : ScalarMult R M
H : Module R M

?A : "Type"

?B : "Type"

?H : "Equiv (MonUnit M)"

?op : "?A → ?B → MonUnit M"

?inv : "?A → ?B"

?RightInverse : "RightInverse ?op ?inv Munit"

为什么Coq要寻找Equiv (MonUnit M)而不是环境中的Equiv MMonUnit M?有可能完成这个证明吗?如果是这样的话,是怎么做的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 10:17:43

Munit是参数化MonUnit类型集的一个实例。这意味着Munit本质上是一条记录(只有一个字段-- mon_unit),但是我认为您希望有关于M类型的单元元素的声明,因为通常否定记录没有多大意义。

我认为,原则上可以让Coq解压缩Munit并做正确的事情,但如果我们能够重新描述这个引理,为什么还要挣扎呢?

代码语言:javascript
复制
Lemma mon_unit_is_its_own_negation `{Module R M} :
  mon_unit = - mon_unit.

然后一切都如你所描述的那样:

代码语言:javascript
复制
Proof.
  rewrite <- (right_identity (- mon_unit)).
  now rewrite left_inverse.
Qed.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40582391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档