Coq入門 - 2.1
進捗ありません。
疑問メモ
矛盾を示すのが難しい
forall n:nat, S n <= 0
と forall n:nat, S n > 0
があれば矛盾を示すのは簡単に見える
けど、どうやるのかわからない
forall n: nat, S n <= 0
はProp
ということでいいんだよな・・
Check
してみるとProp
となるからやはりPropのはずだ
forall n : nat, S n > 0 : Prop
と思ったけど、これはforall n:nat
が付いた時で、仮定に
H : S n <= 0
とあるとこのS n <= 0
はそういう型ということになのか
何かしらProp
に対する操作をしようとすると
The term "H" has type "S n <= 0" which should be Set, Prop or Type.
というエラーがでる。
ということはなんか矛盾を示そうってのがそもそもなんか違うのかな
追記
ここにちゃんと↓こう書いてあった
Coq では "False_ind : forall (P : Prop), False -> P" という定理を使います。 ... ~ P は P -> False の別の書き方だったことを思い出せば、lt_n_O はサブゴールに apply できることに気付きます。n に 0 を代入すると 0 < 0 -> False となるので、H を lt_n_O に渡せば False が証明されます。
False -> P
ということになるのか。
全然意味わからないままFalse_ind
を使っていた
かつ~
はP -> False
なのか!
ってことは・・・
~ S n <= 0
というのがいればいいのか!ということがわかった
わかったらできた!(しょうがないからnle_succ_0
は使った^^;)
何をImportすれば何が使えるようになるのか・・・
Moduleが全然わからん・・・
動きを調べたいからle_elim
とか使いたいんだけど、何をImportすればいいんだろうか・・
追記
Module
がファイル名とファイルの中のModule
を意味することがあるらしい。
How do I import modules in Coq? - Stack Overflow
あとNOrder
をImport
しても使えなかったのは、Abstractなやつだったからっぽい。
Search
を使いこなせばなんとかなりそう
hoge; fuga.
について
hoge; fuga.
と
hoge. fuga.
だと意味が違うのか!!
難しい