Я только начал играть с библиотекой математики-классов, и я бы хотел, чтобы доказать следующую лемму:математические классы: Докажите, что MUNIT является его собственным отрицанием
Require Import
MathClasses.interfaces.abstract_algebra MathClasses.interfaces.vectorspace MathClasses.interfaces.canonical_names.
Lemma Munit_is_its_own_negation `{Module R M} : Munit = - Munit.
Я планировал доказать это так:
- Добавить MUNIT в правую сторону, используя
right_identity
:Munit = - Munit & Munit
- Используйте
left_inverse
на правой стороне:Munit = Munit
- Используйте
reflexivity
.
Однако, когда я пытаюсь применить rewrite <- right_inverse
, я получаю следующее сообщение об ошибке:
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 M
или MonUnit M
, которые находятся в окружающей среде? Возможно ли завершить это доказательство? Если да, то как?
Просто подсказка: есть краткий способ импортировать все модули, нужно: 'От MathClasses.interfaces Требовать импорт abstract_algebra VectorSpace canonical_names.' –