X



トップページ数学
274コメント91KB
【Coq】コンピューターで証明しよう【コック】©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0002片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 01:51:30.31ID:kQ1pk3tS
自然数nに対する2n=n+nの証明の例。

Require Import Arith.
Theorem t: forall n:nat, 2*n = n+n.
intros.
replace (n+n) with (1*n + 1*n).
replace 2 with (1+1).
apply mult_plus_distr_r.
auto.
replace (1*n) with n.
auto.
symmetry.
apply mult_1_l.
Qed.
0003片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 01:56:25.68ID:kQ1pk3tS
自然数nに対してn (n+1)が偶数であることの証明の例。

Require Import Even.
Theorem t:forall n:nat, even (n * (1+n)).
intros.
apply even_mult_aux.
elim n.
left.
apply even_O.
intros.
elim H.
right.
apply even_S.
apply odd_S.
apply H0.
left.
apply H0.
Qed.
0004片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 02:10:51.92ID:kQ1pk3tS
Coqは証明支援システムです。数学論文を英語で書ける程度の素養が必要です。
まずはTutorialを読むことから始めましょう。
natは自然数(natural numbers)の略です。
Coqでは英語や英語の略語がよく使われます。
0006132人目の素数さん垢版2015/01/23(金) 13:50:52.34ID:v4GbgrUP
       ____
     /⌒  ⌒\
   /  癶   癶 \
  /::::::⌒(__人__)⌒::::: \   あらあらうふふ
  |     |r┬-|     |
  \      `ー'´     /
0008片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 16:42:51.44ID:kQ1pk3tS
「Require Import Arith.」は、
「Arith」というモジュール(部品)を読み込むコマンドだ。
コマンド「Theorem t: forall n:nat, 2*n = n+n.」について。
「Theorem t:」は、これから「t」という名前の定理を証明するよって意味。
「forall n:nat,」は、「∀n∈N」という意味。
ここで「∀」は論理学における「任意の…に対して」という意味。
「∈」は集合論の「…に属する」に相当する。
0009片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 16:48:37.07ID:kQ1pk3tS
掛け算について現在の定義を調べたいなら、掛け算の略は「mult」だから、「SearchAbout mult.」というコマンドを入力すればいい。
自然数について調べたいなら「SearchAbout nat.」を入力。
足し算なら「SearchAbout plus.」。
0010片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 16:57:07.60ID:kQ1pk3tS
Theoremコマンドを入力したら、証明モードに入る。
証明モードでは、証明するための「タクティク」(戦術)を入力できる。
コマンドは大文字で始まるが、タクティクは小文字で始まる。
タクティクの例を挙げると、intros,symmetry,left,right,auto,elim,applyなど、いろんなタクティクがある。
証明の終わりでは「Qed.」コマンドを入力する。
0011片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 17:12:06.01ID:kQ1pk3tS
さて、Coqのダウンロードとインストールが終わったら、早速Coqを起動しよう。
黒い画面に「Coq <」と表示されるだろう。
これはCoqのプロンプトであり、入力待ちであることを表している。
0012片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/23(金) 17:15:42.51ID:kQ1pk3tS
Coqの終了コマンドは「Quit.」である。「Quit.」と打ち込んでEnterキーを押せば
黒い画面が消えるであろう。
0013132人目の素数さん垢版2015/01/23(金) 21:55:31.77ID:bh227Vy0
suck my coq!
0015132人目の素数さん垢版2015/01/24(土) 00:15:52.39ID:G4KHuvpv
Coqは数学、プログラミング両方で高い水準を要求されるからな。
このスレは人集まらないだろう。
数板ではプログラムの素養がネックになるか?
0020132人目の素数さん垢版2015/01/24(土) 17:26:49.57ID:G4KHuvpv
-を+に変えた版はできた。
-の方はまだできてない。

Require Import Omega.
Require Import Arith.
Theorem t:forall n:nat,n*n+2*n+1=(n+1)*(n+1).
intros.
replace (2*n) with (n+n).
symmetry.
replace ((n+1)*(n+1)) with (n*(n+1)+1*(n+1)).
replace (n*(n+1)) with (n*n+n*1).
omega.
symmetry.
apply mult_plus_distr_l.
symmetry.
apply mult_plus_distr_r.
omega.
Qed.
0022132人目の素数さん垢版2015/01/24(土) 22:01:32.97ID:WXgNhwIy
        /⌒ヽ⌒ヽ
               Y
            八  ヽ
     (   __//. ヽ,, ,)
      丶1    八.  !/
       ζ,    八.  j
        i    丿 、 j
        |     八   |
        | !    i 、 |
       | i し " i   '|
      |ノ (   i    i|
      ( '~ヽ   !  ‖
        │     i   ‖
      |      !   ||
      |    │    |
      |       |    | |
     |       |   | |
     |        !    | |
0023132人目の素数さん垢版2015/01/25(日) 19:37:01.31ID:4ki3LVZe
Coq の論理的バックグラウンド(?)になってる
Calculus of Inductive Construction (CIC)
(?:何種類かあって良く分からない)
について調べたいのですが良い文献ないですか?
0025片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 16:34:55.90ID:SJxzPcnV
自然数の範囲では、>>18は証明できないよ。
整数か実数か複素数を使わないと。
0026片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 17:08:56.67ID:SJxzPcnV
Require Import Arith.
Require Import Omega.
Open Scope Z_scope.
Theorem t: forall n:Z, n*n - 2*n + 1 = (n-1)*(n-1).
intros.
symmetry.
replace ((n-1)*(n-1)) with (n*(n-1)-1*(n-1)).
replace (1*(n-1)) with (n-1).
replace (n*(n-1)) with (n*n-n).
replace (n*n-n-(n-1)) with (n*n-(n-1)-n).
replace (n*n-(n-1)) with (n*n-n+1).
replace (n*n-n+1-n) with (n*n-n-n+1).
replace (n*n-n-n) with (n*n-2*n).
omega.
omega.
omega.
omega.
omega.
symmetry.
replace (n*n-n) with (n*n-n*1).
apply Z.mul_sub_distr_l.
omega.
symmetry.
apply Z.mul_sub_distr_r.
Qed.
0027片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 17:13:27.24ID:SJxzPcnV
Require Import Omega.
Open Scope Z_scope.
の後で
SearchAbout Z.するとZの定義が見られるからね。
0029片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 20:07:13.17ID:SJxzPcnV
>>26
訂正。ガラケーで入力大変。

(誤)
apply Z.mul_sub_distr_l.
omega.
symmetry.
apply Z.mul_sub_distr_r.
Qed.

(正)
apply Z.mul_sub_distr_l.
omega.
omega.
symmetry.
apply Z.mul_sub_distr_r.
Qed.
0030片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 20:10:46.94ID:SJxzPcnV
お題:
「3の倍数に6を足したものは3の倍数である」を証明せよ。
0033片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 20:35:45.19ID:SJxzPcnV
>>30

「xは3の倍数である」

∃y∈Zに対して「x=3y」、

だな。1階述語とexistsを使って解いてくれ。
0034片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 20:59:02.99ID:SJxzPcnV
例えば、
Definition trimul (n:nat) := exists m:nat, n = 3*m.
と定義すればtrimul(0)は次のように証明できる。
Theorem tmzero: trimul(0).
unfold trimul.
exists 0.
auto.
Qed.
0035片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 21:17:44.23ID:SJxzPcnV
>>30

Require Import Arith.
Require Import Omega.
Open Scope Z_scope.
Definition trimul (x:Z) := exists y:Z, x = 3*y.
Theorem t: forall x:Z, trimul(x) -> trimul(x+6).
intros.
unfold trimul.
destruct H.
exists (x0+2).
replace (x) with (3*x0).
omega.
Qed.
0036片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 21:25:18.31ID:SJxzPcnV
「Reset Initial.」コマンドでCoqを初期状態へ戻すことができる。
「unfold x.」はゴールにあるxをその定義に展開するタクティクだ。
「destruct H.」はHを崩すタクティク。
0039132人目の素数さん垢版2015/01/27(火) 21:52:51.06ID:BM4PDVdL
こう?

Require Import Omega.
Require Import Arith.
Open Scope Z_scope.

Definition tr(x:Z) := exists y:Z , x=3*y.
Definition s(x:Z) := exists y:Z,x=6*y.


Theorem t: forall x:Z,tr(x)->s(4*x).

intros.
unfold s.
destruct H.
exists (2*x0).
replace x with (3*x0).
omega.
Qed.

多分このスレには片山さんと俺しかいないぞw
0040片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/27(火) 22:12:11.97ID:SJxzPcnV
>>39
正解!

このスレを立てた目的は…
1.Coqの知名度アップと啓蒙。
2.Coqによる「片山QZの定理」の証明。
3.Coqと人工知能の連携を考えること。
0042132人目の素数さん垢版2015/01/28(水) 18:28:09.93ID:Q7XfmRRj
どのお題も超簡単なものだけに見えるのだが、それはなぜ?
Coqでの証明法がだれにも分かりやすくなるようあえて題材は
簡単なものを選んでいるの?
もっとCoqの強力さが分かる位難しい題材でやってくれんかな。
そもそもCoqではどの位難しいものがどの位の手間で証明できるの?
0043片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/28(水) 18:52:58.11ID:xr03hxaD
>>41
単純に言えば、コンピューターでできた数学者を作ろうとしている。
数学の問題は、式の変形と問題の分解と解の探索の問題に還元されるから、
人工知能でもいくつかの問題を解くことができるはずだ。
0044片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/28(水) 18:58:35.37ID:xr03hxaD
>>42
はじめは基礎と慣れが大事。不満なら君も出題してもかまわない。
次は集合論から出題したまえ。
0048132人目の素数さん垢版2015/01/28(水) 20:07:20.02ID:Q7XfmRRj
>>44
集合問題でなく整数問題の系統だが、まずはこういう易しめのお題はどう?
お題:正整数m、nがあり、LCM(m,n) + GCD(m,n) = m + n とする。
このとき、m, n のどちらか一方は、他方によって割り切れることを示せ。
0050132人目の素数さん垢版2015/01/29(木) 09:57:12.57ID:rxXHbRm8
俺はCoqのド素人だから聞いてる。
だが人間にとって証明問題といえばふつうこれくらいからだろ?
0051132人目の素数さん垢版2015/01/30(金) 10:46:00.89ID:NnXyGTxc
☆☆☆☆☆
☆ 自民党、グッジョブですわ。 ☆
http://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html

☆ 日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、改憲の参議院議員が
3分の2以上を超えると日本国憲法の改正です。皆様方、必ず投票に自ら足を運んでください。
そして、私たちの日本国憲法を絶対に改正しましょう。☆
0053片山博文MZ ◆T6xkBnTXz7B0 垢版2015/01/31(土) 11:42:47.03ID:HFUS6FCH
>>48
http://ideone.com/Aa07zr

「Z.lcm m n = m0 * n0 * Z.gcd m n」の証明が難しい。
0057132人目の素数さん垢版2015/01/31(土) 14:08:26.29ID:2+EKWeFU
>>53
まじめにやってくれてサンクス。
それで
>http://ideone.com/Aa07zr
これはすべて人が書いてるんだね? だとするとメリットがわからんな。
「コンピュータを使って定理証明する」て、人が形式証明を計算機に打ち込む
ということか?ふつうはそれとは違う意味で言うことだが。
0062片山博文MZ ◆T6xkBnTXz7B0 垢版2015/02/01(日) 23:27:39.12ID:/+/CiuQP
>>46ができたヤツは居ないか?
0066132人目の素数さん垢版2015/02/02(月) 21:41:32.43ID:yNmPHm6y
stdlib読んでも意味わかんなかった俺が通りますよw
Ensemblesってのでいいのか?
そこからわからんw
0070132人目の素数さん垢版2015/02/03(火) 06:21:09.41ID:AsZmhMLH
(・ω・)
0071132人目の素数さん垢版2015/02/03(火) 11:39:09.23ID:TF0+kICu
>>69
賛成かな? 
ただ俺の場合は、Coqの細かい話はうんざりだ。単なる証明支援の今のCoqなら将来はないんだから。
早く自動証明の話をしてくれ
0072片山博文MZ ◆T6xkBnTXz7B0 垢版2015/02/03(火) 17:56:27.70ID:lc3NHdIs
Coq自体は、関数型言語として有名なOCamlで記述されている。
Coqのソースコードは同じ場所でダウンロードできる。
自動証明を行いたいなら、Omegaのようなモジュールを自作するか、
Coqを改造するか、Coqと対話する必要がある。
0073片山博文MZ ◆T6xkBnTXz7B0 垢版2015/02/03(火) 18:12:57.83ID:lc3NHdIs
最新のソースコードcoq-8.4pl5.tar.gzをダウンロードし、解凍ソフトLhaplusなどを使って解凍(展開)すると、
coq-8.4pl5というフォルダーができる。
ここにパスcoq-8.4pl5/plugins/omega/にOmegaが記述されている。
ファイルの中身はテキストエディターなどで確認できる。
0075132人目の素数さん垢版2015/02/04(水) 10:08:30.01ID:cf1lNhgP
> 自動証明を行いたいなら、Omegaのようなモジュールを自作するか、
> Coqを改造するか、Coqと対話する必要がある。
Coqの延長でできる風に言ってるが、それはもうCoqではないだろう
0076132人目の素数さん垢版2015/02/04(水) 12:44:57.04ID:ii+fPoPp
人工知能の進歩を見てると、やはり半端ない多量の証明のデータの蓄積をした上で、それをコンピュータ自身が分析し、与えられた定理にはどのような手法が適している可能性が高いかを推測するようなシステムになるのかな。
人間も結局過去の膨大な証明から経験的に学んでるわけだし。
0078132人目の素数さん垢版2015/02/04(水) 21:09:33.67ID:ZZSly8gS
Coqが証明できる定理ってなにか制限あるの?
それとも人間が証明できる定理は原理的にCoqでも証明できる?
0081132人目の素数さん垢版2015/02/05(木) 19:10:49.09ID:iuUfy0y0
コンパイラも文法チェックはするが、コンパイラがプログラミングしてるとは言わんだろ
0083132人目の素数さん垢版2015/02/05(木) 19:29:39.63ID:160T3VWS
ランダム生成やってみれば
0084132人目の素数さん垢版2015/02/05(木) 19:53:49.21ID:RkehamlL
メモリいっぱい積んで幅優先でやってみたいね。
すぐメモリたんなくなるだろうけど。
0085132人目の素数さん垢版2015/02/05(木) 20:23:32.85ID:iuUfy0y0
>>82
一苦労どころじゃないだろw
このスレッドを見ても、ほとんど定義そのもの程度の命題の証明がお題になるくらいだからな
0086132人目の素数さん垢版2015/02/06(金) 10:38:19.60ID:p5z+W0p1
CICのnormalization theoremを証明してあるわかりやすい文献教えてくらはい、えらいひと。
0087片山博文MZ ◆T6xkBnTXz7B0 垢版2015/02/08(日) 17:07:42.20ID:6NKOGxqa
お題:中国剰余定理を証明せよ。
0094132人目の素数さん垢版2015/02/10(火) 21:31:54.68ID:HSrgtPR2
個人でいきなり読みにいってもきっと読めないんでしょ?
数学の本スレでちょっと前に誰かが聞いて、
経験者らしきそっちの学識ありそうな誰かが応えてた
自動定理証明器の古典本あたりから読まないと・・・

勉強会とかするなら参加したいわ
0095片山博文MZ ◆T6xkBnTXz7B0 垢版2015/02/11(水) 07:12:51.62ID:Dr+1DDR1
数学の体系は、公理系によって成り立っている。すなわち、
当たり前の真実である「公理(axiom)」の集合から「定理(theorem)」を証明により導出し、
さらに既存の公理の集合と、証明された定理の集合から導出された、新しい定理をさらに土台とする。
そのように数学は、間違いのない証明によって次々と築き上げるものである。
0096片山博文MZ ◆T6xkBnTXz7B0 垢版2015/02/11(水) 07:20:21.76ID:Dr+1DDR1
証明に1つでも間違いがあれば、公理系は崩壊する。間違いが1つでも紛れ込めば、
どんな命題でも証明可能になり、証明が無意味となる。
0108132人目の素数さん垢版2015/02/16(月) 06:52:55.96ID:eGQOGV7p
私、O'Camlなどでのプログラミング経験はあるが数学の力に自信がないもので、数学書を一人で読み進める時にきちんと証明出来ている確信が欲しくて久しぶりにCoqを触り始めました。
証明のコードを生成してみるのもまた愉し。
0112132人目の素数さん垢版2015/03/17(火) 11:09:06.79ID:p3znTvh+
検証と証明ってどう違うの
一例の場合か全ての場合かってこと?
0113132人目の素数さん垢版2015/03/17(火) 12:42:17.91ID:SwDWqZM9
具体的に人間が与えた証明が正しい推論になっているか確かめるのが検証。
証明システムなら人工知能が結論までの道筋を自ら見つけるということになるはず。
0115132人目の素数さん垢版2015/03/19(木) 15:02:35.75ID:g9YALw9l
Variable A:Type.
Variable B:(A -> Type) -> A -> Type.
Definition mu := fun (x:A) => forall P:(A -> Type), (forall (y:A), B P y -> P y) -> P x.
Hypothesis m : forall (P Q:A -> Type), (forall (x:A), P x -> Q x) -> (forall (x:A), B P x -> B Q x).
での
Theorem r1:forall (x:A), B mu x -> mu x.
の証明なんだけど、
2 subgoals
A : Type
B : (A -> Type) -> A -> Type
m : forall P Q : A -> Type,
(forall x : A, P x -> Q x) -> forall x : A, B P x -> B Q x
x : A
a : B mu x
P : A -> Type
b : forall y : A, B P y -> P y
x0 : A
y : mu x0
============================
forall y0 : A, B (fun x1 : A => P x1) y0 -> P y0
subgoal 2 is:
B mu x
のあとどうすればいいでしょうか?上記のsubgoalの中の
(fun x1 : A => P x1)をPに変える命令とかあるんでしょうか?
0116追加垢版2015/03/19(木) 15:03:19.56ID:g9YALw9l
ちなみに、
Proof.
intros x a.
unfold mu.
intros P b.
apply b.
apply (m mu P).
intros x0 y.
apply y.
までが上記の結果です。
0117132人目の素数さん垢版2015/03/23(月) 21:55:09.34ID:hFhIEEUk
>>95
>数学の体系は、公理系によって成り立っている。すなわち、
>当たり前の真実である「公理(axiom)」の集合から「定理(theorem)」を証明により導出し、
>さらに既存の公理の集合と、証明された定理の集合から導出された、新しい定理をさらに土台とする。
>そのように数学は、間違いのない証明によって次々と築き上げるものである。

ゲーデルの不完全性定理によれば
あんたの言ってる事は数学の本性の上っ面でしかない
0121132人目の素数さん垢版2015/04/17(金) 21:21:52.45ID:oyQOgKjs
>>116
Proof.
intros x a.
unfold mu.
intros P b.
apply b.
apply (m mu P).
intros x0 y.
apply y.
intro y0.
apply (b y0).
apply a.
Qed.
0123132人目の素数さん垢版2015/04/18(土) 09:18:54.32ID:Q1uVLxMU
直観主義では証明できないので
Require Import Classical.
Variable (p q r:Prop).
Theorem T:((p /\ q) -> r) -> ((p -> r)\/(q -> r)).
Proof.
apply NNPP.
intuition.
Qed.

もっと手を抜くなら
Proof.
tauto.
Qed.
0124132人目の素数さん垢版2015/04/18(土) 10:22:46.84ID:Q1uVLxMU
p, q に関する排中律だけ仮定して

Variable (p q r:Prop).
Hypotheses (EM_p: p\/~p) (EM_q: q\/~q).
Theorem T:((p /\ q) -> r) -> ((p -> r)\/(q -> r)).
Proof.
intro H.
elim EM_p.
intro H0.
elim EM_q.
intro H1.
apply or_introl.
intro.
apply H.
apply conj.
exact H0.
exact H1.
intro.
apply or_intror.
intro.
contradiction.
intro.
apply or_introl.
contradiction.
Qed.
0125132人目の素数さん垢版2015/04/18(土) 11:34:32.18ID:Q1uVLxMU
pに関する排中律だけで

Variable (p q r:Prop).
Hypothesis EM_p: p\/~p.
Theorem T:((p /\ q) -> r) -> ((p -> r)\/(q -> r)).
Proof.
intro H.
elim EM_p.
intro H0.
apply or_intror.
intro H1.
apply H.
apply conj.
exact H0.
exact H1.
intro H2.
apply or_introl.
intro H3.
absurd p.
exact H2.
exact H3.
Qed.
0126115垢版2015/04/18(土) 16:08:27.46ID:Ch74qrhJ
>>121
レス大感謝です。しかし、
apply (b y0).
のところで、
Error: Impossible to unify "B P y0 -> P y0" with
"B (fun x0 : A => P x0) y0 -> P y0".
と叱られました。Coqのバージョンが
Welcome to Coq 8.3pl3
で古いのでしょうか。
0127122垢版2015/04/18(土) 18:57:48.32ID:CUF6Decr
>>123-125
ありがとうございます。
知らなったタクティクがいっぱいありますね。
0128132人目の素数さん垢版2015/04/19(日) 20:01:47.33ID:wQv7TFhy
>>126
coq8.4からη変換が入ったみたいね
多分これでη変換無しで行けると思う

Variable A:Type.
Variable B:(A -> Type) -> A -> Type.
Definition mu := fun (x:A) => forall P:(A -> Type), (forall (y:A), B P y -> P y) -> P x.
Hypothesis m : forall (P Q:A -> Type), (forall (x:A), P x -> Q x) -> (forall (x:A), B P x -> B Q x).

Theorem r1:forall (x:A), B mu x -> mu x.
Proof.
intros x a.
unfold mu.
intros P b.
apply b.
apply (m mu P).
intros x0 y.
apply y.

intros y0 c.
apply b.
apply (m (fun x : A => P x) P).
trivial.
exact c.
exact a.
Qed.
0129115垢版2015/04/21(火) 16:23:18.95ID:X1phHP6G
>>128
レス大感謝です。さて、また私にとって難題です。エラーが出る最小限の
手順を用意しましたので、偉い方、どうかお付き合いください。
第1の例
Definition Eqt (A B:Type): Prop := (A = B) \/ (B = A).

Axiom Ee : forall (a b:Set), Eqt a b -> ((a = b) /\ (b = a)).

Theorem Eab : forall (a b:Set), ((a = b) \/ (b = a)) -> a = b.
Proof.
intros a b Hab.
assert (Hta:(a = b) /\ (b = a)).
apply Ee.
unfold Eqt.
assumption.(*ここでエラーが出ます*)
Qed.

これは、Display implicit argumentsとDeactivate notations display
をすることによって、Implicitな変数が原因であることがわかりました。
0130129垢版2015/04/21(火) 16:25:47.49ID:X1phHP6G
そこで、次のように証明手順を変えてみると、なんと、最期のassumptionで
Proof completed.が表示されるのに、Qedの後エラーとなるのです。
第2の例
Definition Eqt (A B:Type): Prop := (A = B) \/ (B = A).

Axiom Ee : forall (a b:Set), Eqt a b -> ((a = b) /\ (b = a)).

Theorem Eab : forall (a b:Set), ((a = b) \/ (b = a)) -> a = b.
Proof.
intros a b Hab.
assert (Hta:(a = b) /\ (b = a)).
apply Ee in Hab.
assumption.
elim Hta.
intros H H0.
assumption.
Qed.

どうかお救いください。トホホ
0131132人目の素数さん垢版2015/04/24(金) 23:44:49.27ID:RQUiSeMS
@eq Set a b と @eq Type a b は違う型なのが原因な気がする。
130のようなQedでエラーになるのは結構あって、証明モードの途中ではあんまり頑張って型検査しないから、
こういう微妙な型の差しかないときはしかたないかな。
0132129垢版2015/04/29(水) 09:13:55.74ID:Z8S8LZWA
レス大感謝です。結局は反則をすることによって解決しました。つまり、
証明法を探すのではなく、>>129
>Definition Eqt (A B:Type): Prop := (A = B) \/ (B = A).
の部分を
Definition Eqt (T:Type) (A B:T) : Prop := (eq (A := T) A B) \/ (eq (A := T) B A).
Implicit Arguments Eqt [T].
と変えました。これで、>>129の証明の仕方でもエラーは出なくなりました。
ちなみに最期まで証明すると、
Axiom Ee : forall (a b:Set), Eqt a b -> ((a = b) /\ (b = a)).

Theorem Eab : forall (a b:Set), ((a = b) \/ (b = a)) -> a = b.
Proof.
intros a b Hab.
assert (Hta:(a = b) /\ (b = a)).
apply Ee.
unfold Eqt.
assumption. (*ここでエラーが出ずに先へ進めます*)
elim Hta; intros H1 H2.
assumption.
Qed.
0133132人目の素数さん垢版2015/04/29(水) 21:07:39.24ID:DcI2ISH9
Coqで作られたCコンパイラがあるそうですが、
詳しいことがわかるURLないでしょうか。
0135133垢版2015/04/30(木) 11:12:49.99ID:YN5jSrOT
ありがとうございます。
読んでみます。
0139132人目の素数さん垢版2015/05/29(金) 21:19:13.70ID:sppsbb3D
Coqだと停止しないコードは書けないそうですが、
停止するコードは必ずCoqでも等価なコードがかけるのかどうか気になります。
書けるんでしょうか?
0140132人目の素数さん垢版2015/06/01(月) 20:03:21.42ID:vP0/D1Ed
停止するかどうかわかるということは停止までのステップ数も見積もれるんでしょうか。
大まかでいいので。
0141132人目の素数さん垢版2015/06/17(水) 02:15:51.60ID:w70GpJG/
Coqそのものの話じゃなくてすいませんが、software foundationsと言うCoqの解説書↓
http://www.cis.upenn.edu/~bcpierce/sf/current/index.html

があって、ここのdownloadから拾ってきたものでPDF作る(make, make pdfする)と章順が逆になって、最初にPostscriptが
最後がPrefaceとSymbolになったものができてしまいます。

正しくmakeできた方いたら、やり方教えて下さい。
0143141垢版2015/06/21(日) 09:25:51.67ID:szLD4AMj
make all.pdfした時に実行されるcoqdepの出力が逆順になっているので、
これをシェルスクリプトで逆順にしたら、それらしい順番のPDFになりました。
書き忘れましたが、使ってた環境はcoq 8.4pl6です。
お騒がせしました
0144132人目の素数さん垢版2015/06/23(火) 19:05:42.67ID:y39xeCDy
>>142
返信遅れてすいません。
読んでもよく理解できないTT

たとえば2つのプログラムが与えられて、
どちらが後に停止するか、みたいなことはできるんでしょうか。
アッカーマン関数のような巨大な関数との比較がしたいのですが。
0146132人目の素数さん垢版2015/11/02(月) 15:40:58.39ID:voHQlbVG
数学セミナーvol.54 no.11 649
特集 コンピュータにできる数学・できない数学
 Coq:型理論から来た証明支援系, Jacques Garrigue
0147132人目の素数さん垢版2016/05/25(水) 19:39:54.39ID:EB6pp118
質問よろしいでしょうか。
「x>1ならば、そのべき乗は、いつか特定の数を追い抜く」という命題が証明できません。
Require Import Omega.

Theorem multi_inf_gt3:
forall (x : nat), x>1 -> exists m : nat, x^m > 1000.
proof.
intros.
exists 1000.
induction x.
omega.

assert (x>1 -> x^1000<S x^1000).
intro.
apply (Nat.pow_lt_mono_l_iff x (S x) 1000).
auto.
auto.

assert ((x>1->x^1000>1000)->(x>1->x^1000<S x^1000)->(x>1->S x^1000>1000)).
omega.

apply H1 in H0.
apply H0.
apply IHx.
ここで、仮定は「S x > 1」、ゴールは「x > 1」となって、証明できません。
お知恵を貸していただけないでしょうか……
0148132人目の素数さん垢版2016/05/25(水) 20:46:14.27ID:EofZeTbn
まずはこれを解いてみるとか。

Require Import Omega.

Theorem t:
exists m : nat, 2^m > 1000.
0149132人目の素数さん垢版2016/05/25(水) 20:55:32.32ID:EofZeTbn
俺の環境じゃ以下のもOmega解いてくれなかったわ。なぜ?

Theorem t:
2^10 > 1000.
0150132人目の素数さん垢版2016/05/25(水) 23:04:16.75ID:EB6pp118
僕のCoqバージョンはversion 8.5pl1 (April 2016)ですが、
僕もomega単独では解けませんでした。

Theorem t1:
2^10 > 1000.
(* proof. *)
simpl.
omega.
Qed.

Theorem t2:
exists m : nat, 2^m > 1000.
(* proof. *)
exists 10.
simpl.
omega.
Qed.
0152132人目の素数さん垢版2016/05/25(水) 23:39:51.15ID:fzY8lffh
omegaは基本的に掛け算には無力
プレスバーガー算術を対象としているから、らしい

simplは単に定義に従って簡約してくれる
よって>>149には適用できるが、>>148はmatchできなくて無理
0153132人目の素数さん垢版2016/05/26(木) 00:17:18.47ID:vUOIQwNh
できました!
2^10=1024 > 1000を使うのがポイントだったみたいです。

Require Import Omega.

Theorem multi_inf_gt4:
forall (x : nat), x>1 -> exists m : nat, x^m > 1000.
(* proof. *)
intro.
intro.
destruct x.
omega.

exists 10.

assert (S x>1 -> 2^10 <= S x^10).
intro.
apply (Nat.pow_le_mono_l_iff 2 (S x) 10).
auto.
auto.

change (S x > 1 -> 1024 <= S x ^ 10) in H0.
apply H0 in H.
omega.
Qed.

レスして下さった皆様、ありがとうございます。
次は実数でチャレンジするかも!?
0155132人目の素数さん垢版2016/05/27(金) 03:19:24.12ID:ItPB2mak
実数でもx>2の場合はできました。
x^10を原始的にxで割っていく方法です。 右辺が10000だったらどーするんだwww

Require Import Rbase.
Require Import Fourier.

Theorem multi_inf_gt6:
forall (x : R), x>2 -> exists m : nat, (Rpow_def.pow x m)>1000.
Proof.
intro.
intro.

exists 10%nat.

simpl.

apply Rmult_le_0_lt_compat.
fourier.
fourier.
apply H.

apply Rmult_le_0_lt_compat.
fourier.
fourier.
apply H.

apply Rmult_le_0_lt_compat.
fourier.
fourier.
apply H.

assert (2*/2*125=125).
apply Rinv_r_simpl_r.
discrR.
assert (forall (a b c d:R), a*b*c = a*(b*c)).
intros.
ring.
rewrite H1 in H0.
rewrite <- H0.
apply (Rmult_le_0_lt_compat 2 x (/2*125) (x*(x*(x*(x*(x*(x*1)))))) ).
fourier.
fourier.
apply H.

all: cycle 1.
apply x.
0156132人目の素数さん垢版2016/05/27(金) 03:25:03.30ID:ItPB2mak
assert (2*/2*(/2*125)=/2*125).
apply (Rinv_r_simpl_r 2 (/2*125)).
discrR.
rewrite H1 in H2.
rewrite <- H2.
apply (Rmult_le_0_lt_compat 2 x (/2*(/2*125)) (x*(x*(x*(x*(x*1))))) ).
fourier.
fourier.
apply H.

assert (2*/2*(/2*(/2*125))=/2*(/2*125)).
apply (Rinv_r_simpl_r 2 (/2*(/2*125)) ).
discrR.
rewrite H1 in H3.
rewrite <- H3.
apply (Rmult_le_0_lt_compat 2 x (/2*(/2*(/2*125))) (x*(x*(x*(x*1)))) ).
fourier.
fourier.
apply H.

assert ( 2*/2*(/2*(/2*(/2*125))) = /2*(/2*(/2*125)) ).
apply (Rinv_r_simpl_r 2 (/2*(/2*(/2*125))) ).
discrR.
rewrite H1 in H4.
rewrite <- H4.
apply (Rmult_le_0_lt_compat 2 x (/2*(/2*(/2*(/2*125)))) (x*(x*(x*1))) ).
fourier.
fourier.
apply H.

assert ( 2*/2*(/2*(/2*(/2*(/2*125)))) = /2*(/2*(/2*(/2*125))) ).
apply (Rinv_r_simpl_r 2 (/2*(/2*(/2*(/2*125)))) ).
discrR.
rewrite H1 in H5.
rewrite <- H5.
apply (Rmult_le_0_lt_compat 2 x (/2*(/2*(/2*(/2*(/2*125))))) (x*(x*1)) ).
fourier.
fourier.
apply H.

assert ( 2*/2*(/2*(/2*(/2*(/2*(/2*125))))) = /2*(/2*(/2*(/2*(/2*125)))) ).
apply (Rinv_r_simpl_r 2 (/2*(/2*(/2*(/2*(/2*125))))) ).
discrR.
rewrite H1 in H6.
rewrite <- H6.
apply (Rmult_le_0_lt_compat 2 x (/2*(/2*(/2*(/2*(/2*(/2*125)))))) (x*1) ).
fourier.
fourier.
apply H.
0157132人目の素数さん垢版2016/05/27(金) 03:29:56.38ID:ItPB2mak
fourier.
apply x.
apply x.
apply x.
apply x.
apply x.
Qed.

1<x<2の場合はどうするんだろう?
0159132人目の素数さん垢版2016/05/30(月) 01:07:49.80ID:nh+30MzG
1<x<2の場合は、lim[x->∞](1+1/x)^x=eをヒントにできないかな、と思っています。

今日のCoq:
Require Import Rbase.
Require Import Fourier.

Lemma l2:
forall (x y:R), y>1 -> x=1+1/y -> 1<x<2.
Proof.
intros.
rewrite H0.

assert (forall (a b:R), a<b -> 1+a<1+b).
intro.
intro.
intro.
fourier.

apply conj.

assert (1+0=1).
ring.

replace (1<1+1/y) with (1+0<1+1/y).
apply (H1 0 (1/y)).

all: cycle 1.
rewrite H2.
reflexivity.

all: cycle 1.
assert (0<1 -> 0<1/y -> 1/y*0<1/y*1).
intro.
apply (Rfourier_lt 0 1 (1/y)).
auto.
assert (1/y*0 = 0).
ring.
rewrite H4 in H3.
assert (1/y*1 = 1/y).
ring.
rewrite H5 in H3.
ここまでで、仮定が0 <1 -> 0<1/ y -> 0 <1/ y、
サブコールが0 < 1 / yで頓挫。。。
0161132人目の素数さん垢版2016/06/01(水) 20:28:33.76ID:Ih6s2JtZ
1<x<2 -> x^m>1000、こんな感じになりました。existの形では出来なかったです。
まず1<x<2 -> x^m>2^10を証明して、それから1<x<2 -> x^m>1000を証明しています。

Require Import Rbase.
Require Import Fourier.

Theorem multi_inf_gt7':
forall (x y:R), 1<x<2 ->
x=1+1/y ->
(Rpow_def.pow x (Z.to_nat (up y)))>2 ->
(Rpow_def.pow x ((Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))))>2*2*2*2*2*2*2*2*2*2.
Proof.
intros.

rewrite Rdef_pow_add.
(↑を9回)

apply Rmult_le_0_lt_compat.
fourier.
fourier.
(↑を9回)

apply H1.
(↑を10回)
Qed.
0162132人目の素数さん垢版2016/06/01(水) 20:31:57.00ID:Ih6s2JtZ
Theorem multi_inf_gt7:
forall (x y:R), 1<x<2 ->
x=1+1/y ->
(Rpow_def.pow x (Z.to_nat (up y)))>2 ->
(Rpow_def.pow x ((Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))))>1000.
Proof.
intros.

assert ((Rpow_def.pow x ((Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))))>2*2*2*2*2*2*2*2*2*2 ->
(Rpow_def.pow x
((Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+
(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))+(Z.to_nat (up y))))>1000).
intro.
fourier.

apply H2.

apply multi_inf_gt7'.
apply H.
apply H0.
apply H1.
Qed.
0163132人目の素数さん垢版2016/06/01(水) 20:37:28.80ID:Ih6s2JtZ
仮定に使ってる(1+1/y)^y>2ですが、
これをCoqで証明するのは難しそうなので、
このへんにしておきます。
0164片山博文MZ ◆T6xkBnTXz7B0 垢版2016/07/04(月) 17:27:13.86ID:I+l74NfK
今考えていることを書きます。

1.都内でCoq大会を開きたい。ゲーム形式でCoqの技能を競う。
2.Coqの数式操作をGUIでできるようにしたい。部分数式ごとに適用できるタクティクを「見える化」したい。
3.Coq Twitter BotやCoq onlineを作りたい。
0165片山博文MZ ◆T6xkBnTXz7B0 垢版2016/07/04(月) 17:34:29.59ID:I+l74NfK
でもOCamlを勉強する時間がないんだ。
やらないといけないことが他にもあるし。
0167132人目の素数さん垢版2016/07/04(月) 20:23:53.31ID:lwP0CPv1
日本語の良いチュートリアルが欲しい。
インタラクティブなやつならなお良し。
0168132人目の素数さん垢版2016/07/04(月) 21:14:49.99ID:b2jsrh3I
>>164
onlineはproofwebやらjscoqやらあるしbotの方が面白そうだな
140字でどの程度のことができるのかわからんが
0171132人目の素数さん垢版2016/07/08(金) 09:21:21.88ID:LlF6GjmQ
proofwebでcoqを使うと、画面の右下にGentzenのproof treeを
表示してくれるのですが、その機能をローカルに自分のパソコンでも
使えるようにできるのですか?できるのでしたらやり方を教えてもらえないで
しょうか。
0173171垢版2016/07/09(土) 13:47:50.56ID:n5Zs2sWR
>>172
レスありがとうございます。でも今Linuxは無理です。
残念です。
0176132人目の素数さん垢版2017/06/18(日) 16:49:48.59ID:v2schHZM
苗■

405 : 猫は唯の馬鹿 ◆MuKUnGPXAY [age] 投稿日:2011/04/09(土) 15:29:50.46
0177◆2VB8wsVUoo 垢版2017/06/18(日) 17:35:53.09ID:ze+BLRMV
★★★数学徒は馬鹿板をしない生活を送り、日頃から真面目に学問に精進すべき。★★★

0190◆2VB8wsVUoo 垢版2017/06/19(月) 05:24:06.21ID:pqzlCEdf
★★★数学徒は馬鹿板をしない生活を送り、日頃から真面目に学問に精進すべき。★★★

0204132人目の素数さん垢版2020/02/24(月) 04:56:39.43ID:DY3MFCYd
>>7
> English speakerに前置きなく「コック」って言ったら誤解を産むよね
日本語話者にも開発者のCoquandの名前を「コカン」って呼んだら誤解生みそう

「Coqはコカンが生みました」

?????
0208132人目の素数さん垢版2020/08/31(月) 18:29:37.56ID:5YDNY7qe
これでMathematicaみたいなことができるの?
0209132人目の素数さん垢版2020/08/31(月) 19:38:58.46ID:CK4NnquJ
>>207
それは翻訳じゃなくて詳細な機械証明をつけたことになるからいいんじゃね?

やれるもんならやってごらん(挑発)
0210132人目の素数さん垢版2020/09/01(火) 19:16:57.55ID:2qjbTlF5
1700
学コン・宿題ボイコット実行委員会@gakkon_boycott 9月1日
#拡散希望
#みんなで学コン・宿題をボイコットしよう
雑誌「大学への数学」の誌上で毎月開催されている学力コンテスト(学コン)と宿題は、添削が雑で採点ミスが多く、訂正をお願いしても応じてもらえない悪質なコンテストです。(私も7月号の宿題でその被害に遭いました。)このようなコンテストに参加するのは時間と努力の無駄であり、参加する価値はありません。そこで私は、これ以上の被害者を出さないようにするため、また、出版社に反省と改善を促すために、学コン・宿題のボイコットを呼び掛けることにしました。少しでも多くの方がこの活動にご賛同頂き、このツイートを拡散して頂ければ幸いです。
https://twitter.com/gakkon_boycott/status/1300459618326388737
https://twitter.com/5chan_nel (5ch newer account)
0212132人目の素数さん垢版2020/12/29(火) 18:10:40.92ID:L4ADUw+o
Coqとかのソフトウェアを理解して使えるようになるには,どんな本を読めばいいですか?
0213132人目の素数さん垢版2020/12/29(火) 19:37:12.97ID:dboOL2nl
本なら『Coq/SSReflect/MathCompによる定理証明』かな。実際に使って証明したいものを証明した方が良いと思うけど。
0214132人目の素数さん垢版2020/12/29(火) 20:13:39.22ID:L4ADUw+o
>>213
ありがとうございます.
その本は読んだことがあるのですが,何が書いてあるのかよくわかりませんでした.
その本を読むための予備知識はどんな本を読めばいいのでしょうか?
0215132人目の素数さん垢版2020/12/29(火) 22:12:44.60ID:dboOL2nl
Coqで何をしたいのかは分からないけど、数学の証明をしたいのなら命題論理とか述語論理の勉強をしたらいいと思うよ。
0217132人目の素数さん垢版2021/03/04(木) 23:54:49.26ID:5lNvn7IX
F x = If x < 10 then x else F (x - 1)

みたいな関数ってCoqでどう性質を証明しますか?ifの条件で場合分けしたいです

タクティックでcase ( x< 10)としても、
仮説にならないで、場合わけにならずに困っています。
0220132人目の素数さん垢版2021/04/18(日) 19:19:36.97ID:3tfcWKwp
Coqで日本語データを処理するプログラム書けますか?
Asciiは扱えるみたいです。
0221132人目の素数さん垢版2021/06/13(日) 11:30:42.81ID:yMfojtwc
https://www.iij-ii.co.jp/activities/programming-coq/coqt1.html
これの練習問題の2つ目が分からない。
>問1. 任意の命題 A B C に対して、「A ならば B ならば C」ならば「B ならば A ならば C」が成り立つ。

要するにこれはB⇒Aが可能なら、前提条件からA⇒Cだと思ったけど。
どう書くの?全然分からん

Definition prop4 : forall (A B C : Prop), (A -> B -> C) -> (B -> A -> C):=
fun A B C a b c => ?.
0222132人目の素数さん垢版2021/06/13(日) 12:05:53.03ID:lCrOJ5I2
>>221
Definition prop4 : forall (A B C : Prop), (A -> B -> C) -> (B -> A -> C) :=
fun A B C f b a => f a b.
かな。f の型が (A -> B -> C) で、b の型が B で、a の型が A 。
「ならば」(->) は右結合だから、(B -> A -> C) の部分の括弧は外す事ができる。
0224132人目の素数さん垢版2022/01/12(水) 08:10:41.00ID:0y6QDPS2
コックむずい
0225132人目の素数さん垢版2022/01/24(月) 07:16:51.96ID:OmUr/Vw+
ムズいよねえ
もっと勉強しなくては
0226132人目の素数さん垢版2022/02/11(金) 01:30:20.50ID:92XxvpJY
   | \
   |Д`) ダレモイナイ・・オドルナラ イマノウチ
   |⊂
   |


     ♪  Å
   ♪   / \   ランタ タン
      ヽ(´Д`;)ノ   ランタ タン
         (  へ)    ランタ ランタ
          く       タン



   ♪    Å
     ♪ / \   ランタ ランタ
      ヽ(;´Д`)ノ  ランタ タン
         (へ  )    ランタ タンタ
             >    タン
0227132人目の素数さん垢版2022/05/02(月) 10:30:03.66ID:DYgxe9pf
   | \
   |Д`) ダレモイナイ・・オドルナラ イマノウチ
   |⊂
   |


     ♪  Å
   ♪   / \   ランタ タン
      ヽ(´Д`;)ノ   ランタ タン
         (  へ)    ランタ ランタ
          く       タン



   ♪    Å
     ♪ / \   ランタ ランタ
      ヽ(;´Д`)ノ  ランタ タン
         (へ  )    ランタ タンタ
             >    タン
0229132人目の素数さん垢版2022/12/22(木) 04:01:55.01ID:o2STx9rz
ゲーデルの不完全性定理の証明とか、

選択公理が命題として他の公理とは独立であることの証明とかできるかな?

もっと素朴に、√2が有理数では無いことの証明とか、
eやπが有理数ではないことの証明とか、
複素数係数の代数方程式は複素数の根を必ず持つことの証明とか。。。
0231132人目の素数さん垢版2022/12/22(木) 08:49:17.37ID:XxbM8r76
このようなソフトウェアに興味があるのですが、使えるようになるには、「証明論」のような本を
勉強しないとだめですよね。
0232132人目の素数さん垢版2022/12/22(木) 09:04:01.71ID:cem5kJiD
>>231
数学の知識よりも、プログラミングの知識のほうが重要だと思う。
関数型言語についてとか。
0233132人目の素数さん垢版2022/12/22(木) 11:50:58.34ID:5XpbsjKj
>>229
>ゲーデルの不完全性定理の証明
無矛盾(矛盾が証明されない)ならば
無矛盾性が証明されない、と読むから
神秘性や難しさを感じる

矛盾が証明されると矛盾する、という証明から
矛盾の証明が出来る、と読めばただのトリック
0234132人目の素数さん垢版2022/12/22(木) 11:55:35.37ID:5XpbsjKj
>>231
初心者は必ず騙されるが
証明論とは命題の証明方法の理論ではない

ちなみに命題の証明方法は別に難しくない
ただ証明がない場合、止まらないので
「アルゴリズム」とは言えないが
0235132人目の素数さん垢版2022/12/22(木) 21:53:35.10ID:cEUYFyKL
>>229
> √2が有理数では無いことの証明

Coqと同様の定理証明支援系であるHOL LightのTutorialに
11.1 Irrationality of √2がある
www.cl.cam.ac.uk/~jrh13/hol-light

実際にそこで証明しているのは
∀p,q. p×p=2×q×q ⇒ q=0 だけど
0237132人目の素数さん垢版2022/12/23(金) 21:32:30.54ID:hmYygAkB
証明が存在する命題は、有限回の操作によって必ず証明にたどり着く方法はある。
ただし、その有限回なる回数が一体どのぐらいの有限なのかだ。宇宙が終わるまで
かけても終わらない程の大きな回数であっても有限だから。
0238132人目の素数さん垢版2023/01/01(日) 23:05:56.42ID:bVpk4vzc
ある命題の成立に対して正しい証明が得られたならば、
その証明が正しいことを確認する作業は、必ず証明の
記述の長さの多項式オーダーの手間で可能なのだろうか?
0240132人目の素数さん垢版2023/01/02(月) 10:48:55.13ID:Tjm8RrUz
(Coqのような)証明系は正しい証明を記述したならば、それが正しいことを
必ず有限の時間で検証を終えて停止するのだろうか?
その有限の時間だといっても途方も無く長くなったりしないのだろうか? 
検証を行う前に、証明の記述に応じてそれに対する検証時間の上界が
事前に得られるものだろうか?
それともそのような上界は一般にはなくて、ただただ結果が出るまで
ずーっと待って運良く生きているうちに終わることを期せねばならないのだろうか?

C言語とかAlgolのような普通のプログラミング言語は、
コンパイルすべきプログラムの長さNに対するコンパイル完了までの時間は
O(N log N)程度になってる。もしもコンパイルの時間がたとえばO(N^2)
かかるような言語とかコンパイラであると、プログラムの記述が大規模になれば
実用性が低くて使い物にならない感じになる。
0241132人目の素数さん垢版2023/01/02(月) 11:14:46.62ID:bB/h5A70
>>240
証明になっているか否かのチェックは有限時間で可能

証明になってないギャップについて
ギャップが埋められるかどうかは
命題が証明できるかどうかと同じなので
有限時間では判定できない
0242132人目の素数さん垢版2023/01/02(月) 11:59:40.21ID:Tjm8RrUz
「証明」の長さがNであるときに、検証にかかる計算量がNについてあまり急増化
しないのであれば、検証システムは使い物になるが、Nについてたとえば多項式
オーダーではなかったならば、少しばかり長い「証明」を検証しようとすれば
現実的には「いつまでたっても終わらないなぁsigh、修論が落ちるな」、
ということになりそうだけれども、そのあたりはどうなっているのでしょうか?
0243132人目の素数さん垢版2023/01/02(月) 12:03:04.48ID:Tjm8RrUz
検証系が進歩した未来において、

 著者は自分の証明を検証系にかけて、
検証系に与えたソースコードも併せて提出する。
 論文の査読者はそのソースコードが正しく論文の定理や命題を表していることを
(ああたいへんだ)チェックして(そこが間違ってたらどうする?)、
検証系にかけて、正しく証明されることを確認したら、アクセプトする。

そうなったらとても面倒。論文のLaTeXのソースを提出するのとは次元が違う。
0244132人目の素数さん垢版2023/01/03(火) 02:56:16.38ID:EWDc62a3
ABC予想の証明の検証に時間がかかっていたようだけど、
Coqで検証すればよかったんじゃないの?できないの?
0245132人目の素数さん垢版2023/01/03(火) 04:56:18.54ID:JnLpt9Qh
人間の書いた人間に理解できるように書かれた証明を、
いろいろな前提知識の無い無垢のソフトに全く隙のない形で
完璧に記号だけを使って記述し直すというのは、とても大変な
作業になるだろう。暗黙知、専門家の常識、そういうものを総動員して
それらも含めて検証にかけなければ、論理が飛んでいることになるから
だろう。
0246132人目の素数さん垢版2023/01/03(火) 13:33:16.33ID:EWDc62a3
ABC予想の証明に否定的な数学者もいるようですから、
白黒はっきりつけるためにはした方が良さそうですね
おそろしく時間とお金(人件費)が掛かりそうですが…
0247132人目の素数さん垢版2023/01/03(火) 13:35:59.35ID:EWDc62a3
今まで正しいと思われていた定理がCoqで検証をしたら証明が間違っていて実は成立していなかった
という場合はあり得るのだろうか?
0248132人目の素数さん垢版2023/01/03(火) 21:49:08.81ID:JnLpt9Qh
定理をみな洗濯して候。選択公理を密輸入してたりとか。
0249132人目の素数さん垢版2023/01/05(木) 07:12:53.60ID:YJDwUIlt
基本的な質問で申し訳ありませんが、任意の数学の定理の証明は
その証明が正しいならばコンピューターが理解できる形の形式的な証明に書き直せますよね?
0252132人目の素数さん垢版2023/01/11(水) 00:03:59.83ID:NoXe1rzD
数学を外から眺めているメタ数学、そのメタ数学を外から眺めているメタメタ数学、
そのメタメタ数学を外から眺めているメタメタメタ数学、とどこまでいっても
その外側から眺めている数学があるのだとしたら。この宇宙も、メタ宇宙の中で
眺められ観察され実験されている存在なのじゃないかと思えてくる。
ある日、これじゃダメだな、やり直すかという声が聞こえてきて。。。
0253132人目の素数さん垢版2023/01/12(木) 23:28:57.14ID:AOFqi22d
形式化されていない証明は人間(数学者)が検証したものに過ぎないから
証明が正しい可能性が極めて高い、としか言えなくて
厳密に正しいとは確定していないように思うがどうだろう
0254132人目の素数さん垢版2023/01/12(木) 23:41:41.72ID:AKp/tV8W
厳密というのは程度の問題だからね
0257132人目の素数さん垢版2023/01/13(金) 19:43:33.22ID:C3eRYlyK
ある命題の証明が存在しないものと仮定して、
それから矛盾を出してやり、よって証明は存在する。
しかし具体的に証明を構成しない。

そういうやり方の「証明」はCoqで記述できるのかな?
0259132人目の素数さん垢版2023/01/15(日) 21:23:10.70ID:iLTqkcdp
>>257
背理法を使わずに対偶で書き直せばできるのでは?
0260132人目の素数さん垢版2023/01/27(金) 02:52:52.56ID:iXvRI0Bd
"クルト・ゲーデル 史上最もスキャンダラスな定理を証明した男", 森北出版, 2023年2月.
0261132人目の素数さん垢版2023/01/28(土) 09:08:50.72ID:YuG7Qllk
>>258
>ゲーデル数化とかガチで出来るんだね。すごいわ。
 コード化は別に難しくない
 証明可能性述語の記述のほうが面倒
 まあでもやればできるだろうな
 別に神秘的なことはやってない
0262132人目の素数さん垢版2023/01/28(土) 09:21:22.14ID:YuG7Qllk
>>260
>”クルト・ゲーデル 史上最もスキャンダラスな定理を証明した男”
 タイトルが大袈裟すぎw

 原題は"Journey to the Edge of Reason"
 著者のStephen Budianskyは、別に数学者ではないらしい
 
 ゲーデルの生涯に関心があるなら
 Dawsonの"Logical Dilemma"を読むことを勧める
 日本語訳もある

 不完全性定理について知りたいなら
 ホフスタッターのゲーデル・エッシャ―・バッハの
 第14章を読んだほうがいい

 興味深い定理であることは確かだが
 なんか持ち上げられすぎ
 ゲーデル自身は理性の完全性を信じていたので
 不完全性定理の結論は彼の願望とは必ずしも合致しない
0263132人目の素数さん垢版2023/01/28(土) 10:20:43.69ID:k/vPDvzu
【キッシンジャー】 ワクチンを強制し群れを減らす
://rio2016.5ch.net/test/read.cgi/lifesaloon/1662167492/l50
0264132人目の素数さん垢版2023/01/29(日) 17:51:01.73ID:wni79iFl
帝銀事件とは

戦後まだGHQが日本を占領していた頃のことである。
都内は椎名町にあった帝国銀行に白衣を着た男がやって来て
保健所から来た。近所で赤痢(?)が発生した。だがこの
薬をのめば感染を防げると行内の客や行員に言って、
薬の飲み方を実演して見せて、そうして一人ずつ呑ませて
いった。呑んですぐには症状が出なかったので、みんな
おとなしく従って呑んだが、しばらくすると次々と倒れて、
その男は行内から手形だったか僅かな金を持って逃げた。
という事件だ。

これを今のコロナ騒動・ワクチンの話に照らして考えてみると
面白い。

遅効性の薬物(即座に効果が出ずに、ある程度時間が経ってから
効果を発揮する)は、それが毒作用を持つものであれば、後で
大量の薬害を生みかねない。日本向けに特別にカスタマズされた
ものだったりすると、日本民族全滅も可能。
0266132人目の素数さん垢版2023/02/14(火) 01:02:00.55ID:5OXageYe
Coqのシステムが書かれているソースコードを形式化して、
Coqに証明させようとすると、どうなるだろうか?
そういうことを考えると、脳外科が自分で自分の脳の手術
をするというような、なんだかとてもいやーぁな感じがする。
0268132人目の素数さん垢版2023/02/14(火) 12:13:54.45ID:5OXageYe
Coqの検証系がCoqの形式記述に証明不可能な部分を見つけたと主張した場合に、
その部分の影響でCoqの検証系が正しく動作しないためであるのかどうかが
怪しくなる。
ソースコードから形式記述を作り出すところの正しさも証明しなければならない
はずだし。その形式記述を作り出すシステムの正しさも証明しなければならないが、
。。。。とやっていると、本当の正しさを証明するということは、無理じゃね?
という暗澹たる気持ちになる。結局は正しさというのは信仰の一種であるか、
何かを信じることで魂の安らかさを得る必要があり、心に不安があると
Gのようにキチガイになったりすると思う。
0269132人目の素数さん垢版2023/02/23(木) 20:40:51.53ID:6O/Q2IOx
Gって何?
0270132人目の素数さん垢版2023/03/04(土) 14:12:35.38ID:qLJkywT3
論理のよりどころは最後は神の存在に行き着くのだろう。
そうして論理は言葉(記号)によって書かれる。

現代の数学はユダヤ教の思考の派生品なのかもしれない。
0271132人目の素数さん垢版2023/03/16(木) 17:45:06.78ID:/qOR2FZK
質問です

下記のcase tacticでなぜ証明終わるでしょうか?
場合分けのためと理解しているので、なぜ終わるかわかりません。

Lemma f_test :forall A:Prop, A -> not A -> True.
Proof.
intros H H0 H1.
case (H1 H0).
Qed.
0273132人目の素数さん垢版2023/03/16(木) 22:10:00.35ID:/qOR2FZK
>>272

ありがとうございます。わかりました。

caseの対象がFalseになっていて、
コンストラクタがないため終了と。
0274132人目の素数さん垢版2023/03/17(金) 20:00:33.56ID:3R+VYxhu
哀れGは神の存在を証明するなどと言いだして周囲は彼を  扱いしたという。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況