В вашем доказательстве есть три проблемы, но в основном это синтаксис c.
Синтаксис Case "Q"
и Case "P"
исходит из Фондов программного обеспечения. Вам нужно будет импортировать некоторую конкретную библиотеку , чтобы иметь возможность использовать ее. Если вы не хотите этого делать, это не обязательно. Чтобы сфокусировать цели, вы можете использовать маркеры (обычно -
, +
или *
). Есть и другие способы, но это наиболее типичный.
imply
tacti c не существует (по крайней мере, в стандартной библиотеке). Однако то, как вы его используете, заставляет меня думать, что вы имели в виду apply
.
В inversion H as {HP HQ].
обе скобки должны быть квадратными скобками.
Внесение этих изменений позволяет теореме работать, но я бы также предложил несколько изменений для идиоматичности.
Использование inversion
, вероятно, здесь излишне. Все, что вы делаете, это уничтожаете соединение на его части, поэтому destruct H as [HP HQ].
будет работать так же хорошо.
Я бы также настоятельно рекомендовал разделить ваше доказательство с переносами строк, а не просто помещать все в одну строку ( это могло быть просто артефактом того, как вы отформатировали свой вопрос. Если это так, игнорируйте это). Можно поместить некоторые тактики в одну строку, но их следует сгруппировать в логические разделы.
Наконец, второстепенный: я бы предложил поставить пробелы вокруг ->
. Это немного облегчает чтение.
Theorem shugouonajidesho: forall P Q : Prop, P/\Q -> Q/\P.
Proof.
intros P Q H.
split.
- inversion H as [HP HQ].
apply HQ.
- inversion H as [HP HQ].
apply HP.
Qed.