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
  • 使用自反性

  • 然而,当我尝试应用
    rewrite
    Munit
    时,它是参数化的
    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.