Math 数学课:证明Munit是它自己的否定
我刚刚开始玩数学类库,我想证明以下引理:Math 数学课:证明Munit是它自己的否定,math,typeclass,coq,Math,Typeclass,Coq,我刚刚开始玩数学类库,我想证明以下引理: Require Import MathClasses.interfaces.abstract_algebra MathClasses.interfaces.vectorspace MathClasses.interfaces.canonical_names. Lemma Munit_is_its_own_negation `{Module R M} : Munit = - Munit. 我打算这样证明: 使用right\u identity
Require Import
MathClasses.interfaces.abstract_algebra MathClasses.interfaces.vectorspace MathClasses.interfaces.canonical_names.
Lemma Munit_is_its_own_negation `{Module R M} : Munit = - Munit.
我打算这样证明:
right\u identity
:Munit=-Munit&Munit
Munit=Munit
然而,当我尝试应用
rewriteMunit
时,它是参数化的MonUnit
typeclass的一个实例。这意味着Munit
本质上是一个记录(只有一个字段--mon\u unit
),但我想您希望得到关于M
类型的unit元素的声明,因为通常否定记录没有多大意义
我相信,原则上,让Coq解包并做正确的事情是可能的,但如果我们能重述这个引理,为什么还要挣扎呢:
Lemma mon_unit_is_its_own_negation `{Module R M} :
mon_unit = - mon_unit.
然后一切都如您所述:
Proof.
rewrite <- (right_identity (- mon_unit)).
now rewrite left_inverse.
Qed.
证明。
重写提示:有一种简洁的方法可以导入您需要的所有模块:来自MathClass。接口需要导入抽象的\u代数向量空间规范的\u名称。
感谢您澄清记录与字段,这也让我在其他地方绊倒了!这一事实对于在Coq中使用类型类来说确实非常有用。快乐的黑客!另一个快速问题-我发现现在使用可以避免使用自反性。这是怎么回事?我似乎在中找不到它。now
在Coq.Init.tractics
中定义如下:战术符号“now”战术(t):=t;容易。
和容易
只要能通过自反性
解决目标,就总能解决它easy
是一种auto
小兄弟,但有时可以解决auto
无法解决的问题。
Proof.
rewrite <- (right_identity (- mon_unit)).
now rewrite left_inverse.
Qed.