この時点で、 coqとタグ付けされた 81 の質問のすべてではないにしても、ほとんどを読んだと思います。coq に非常に慣れていないので、この非常に単純な質問に対する答えを見つけることができませんでした (SO は非常に基本的なものであるため、SO で質問されていないことは確かです)。
私は宿題に取り組んでいます。そのためには、coq を使用して次のことを証明する必要があります。
- 与えられた: P/Q. ~Q
- 証明: P
これは、私が紙の上で行うのに十分簡単な証明ですが、coq にこれを実行させることはできないようです。
私の戦略は、 と のそれぞれを仮定してP
、Q
を示し、したがってが成り立つ必要がP
あると結論付けることです。P
- P/Q [前提]
~Q [前提]
- P [仮定]
P [前の行をコピー]
問【仮定】
- ~Q [前の行をコピー]
- [矛盾]
- P【矛盾解消】
- P [ の消去
\/
]
これが紙の上で証明する方法だとすれば、coq で証明する次の coq コードを思い付くことができました。P
悲しいことに、 、Q
、または~P
実現しないと仮定する私の努力:
Section Q5.
Variables P Q : Prop.
Hypothesis premise1 : P \/ Q.
Hypothesis premise2 : ~Q.
Goal P.
次の行の試行と、それらが生成するエラーを次に示します。
+-----------------+---------------------------------------------------------------------+
| Code | Error |
+-----------------+---------------------------------------------------------------------+
| assumption. | Error: No such assumption. |
| exact P. | The term "P" has type "Prop" while it is expected to have type "P". |
| apply premise1. | Error: Impossible to unify "P \/ Q" with "P". |
| apply P. | Error: Impossible to unify "Prop" with "P". |
+-----------------+---------------------------------------------------------------------+
この時点で考えられることはすべて使い果たしたので、これについて何か助けていただければ幸いです。