#coq #coqide #gallina
#coq #coqide #галлина
Вопрос:
Я использую Coq 8.10.0. Следующий сценарий проверки, похоже, работает на Mac (игнорируя предупреждение):
Lemma plus_comm : forall (n m : nat), n m = m n.
Proof.
intros.
- admit.
Qed.
Но один и тот же сценарий проверки не принимается в Linux (Ubuntu) и Windows. Он выдает следующую ошибку:
(в proof plus_comm): попытка сохранить доказательство с отказом от целей. Если это действительно то, что вы хотите сделать, используйте Допущенный вместо Qed .
Есть какие-нибудь идеи, что здесь происходит?
PS: Я знаю, что в идеале доказательства с допусками должны заканчиваться Допущенными вместо Qed / Defined . Я пытаюсь отладить сценарий проверки.
Ответ №1:
Вы уверены, что используете одну и ту же версию Coq на macOS и на Windows / Linux? Я точно не помню, какая версия внесла изменения в поведение, но теперь по умолчанию запрещено Qed
использовать неполное доказательство.
Если вы все еще хотите отладить доказательство и вам нужно использовать Qed
, я бы предложил использовать временную аксиому:
Axiom todo : forall {A}, A.
Tactic Notation "todo" := (exact todo).
Теперь вы можете использовать todo
в качестве тактики вместо admit
и это позволит вам использовать Qed
.
Комментарии:
1. Да, в моем случае это работоспособное решение. Спасибо, что поделились.
Ответ №2:
Я только что понял, что это не из-за операционной системы. Это из-за LibTactics от Software Foundations (https://softwarefoundations.cis.upenn.edu/plf-current/LibTactics.html ). Если у нас есть LibTactics, импортированные в Coq proof script, это позволяет нам поместить Qed в конец леммы с допусками.
Комментарии:
1. Тогда, возможно, они переопределяют
admit
, используя метод, который я предлагаю в своем ответе.2. Возможно, они используют то же самое в LibTactics. Мне нужно изучить LibTactics для деталей.
3. Обновление: я использую более старую версию LibTactics. Последняя версия LibTactics не имеет такого специального допустимого поведения admit и Qed.