What is "mathematics in programming?"
Some well-known facts in mathematics are difficult to prove using a computer.
For example, the Leibniz series
1 - 1/3 + 1/5 - 1/7 + ...
is exactly equal to π/4, but calculating this series directly is impossible because it requires infinite computation.
However, from the theorems of analysis, this equality can be shown. Thus, if all these theorems are formulated in terms of logic symbols, the proof is reduced to a finite algorithm.
Some might say that a "proof assistant" or "theorem prover" would make this possible.
However, the language of proof assistants is too complicated to describe proofs of non-fundamental theorems, so proof assistants are used only to check proofs that have already been solved.
This is far from doing mathematics.
My question is where do mathematical ideas come from and whether programming can help yield them?
探検
How to do Math in programming
2024/03/21(木) 09:41:43.97ID:85WuJ+Bw
2024/03/21(木) 10:47:44.36ID:8aAFTiSh
fuck your asshole
2024/03/21(木) 11:56:07.97ID:etpddAIY
Theorem Proving in Lean 4 日本語訳
https://aconite-ac.github.io/theorem_proving_in_lean4_ja/title_page.html
定理証明なら、今はCoqよりこっちなんかな
https://aconite-ac.github.io/theorem_proving_in_lean4_ja/title_page.html
定理証明なら、今はCoqよりこっちなんかな
2024/03/21(木) 12:07:26.54ID:etpddAIY
依存型を使った定理証明入門
https://zenn.dev/blackenedgold/books/introduction-to-idris/viewer/theorem-prooving
定理証明の流れは
命題を型に変換する
型がnon-emptyであることを示す
なので、実行時に型チェックすれば動的型付け言語でも証明はできるわけか
ただ、全称型とか存在型とかをどうやって表すのかがわからない
https://zenn.dev/blackenedgold/books/introduction-to-idris/viewer/theorem-prooving
定理証明の流れは
命題を型に変換する
型がnon-emptyであることを示す
なので、実行時に型チェックすれば動的型付け言語でも証明はできるわけか
ただ、全称型とか存在型とかをどうやって表すのかがわからない
2024/03/21(木) 23:49:19.66ID:qInfXZgz
より直感的なシンタックスと、命題のインタフェースを簡単に変換できる機能がほしいな
2024/03/23(土) 09:58:52.52ID:vizf8omG
命題 → 型
偽 → ∅
not A → Hom(A, ∅)
真→ not ∅
AかつB → 直積A×B
AまたはB → 直和A⊕B
AならばB
= not A または B
= (not A)⊕B
= Hom(A, ∅)⊕B
~ Hom(A, B) ※ 真偽が一致する
偽 → ∅
not A → Hom(A, ∅)
真→ not ∅
AかつB → 直積A×B
AまたはB → 直和A⊕B
AならばB
= not A または B
= (not A)⊕B
= Hom(A, ∅)⊕B
~ Hom(A, B) ※ 真偽が一致する
2024/03/24(日) 22:31:53.90ID:XQMIeHSx
プログラムはバイト列にコンパイルされるから、すべてのプログラムは高々可算個になるのだが、なぜ非可算集合をふくむ論理を扱えるんだ?
2024/03/24(日) 23:10:41.69ID:p5jI7jhC
量化してるからだよ
2024/03/25(月) 00:03:34.00ID:q4vXpy6m
数学者だって、自分の専門分野の数学をすべて論理学と集合論の公理から演繹したわけじゃないだろう
すでに理解したことやよく知られた事実は認めて問題を解いているはずだ
そういう柔軟性がほしい
つまり、認めてもいい仮説はその場その場で手軽に導入できるような言語設計がいい
その上で、そこから機械的に導けることの証明や、定義から直接わかる具体例の計算などを半自動でしてほしい
もちろん、コンピュータにやらせる以上、曖昧さのない構文は必要だろうが
def continuous_at(f: Real -> Real, a: Dom(f)) = forall({e: Real | e > 0},
exists({d: Real | d > 0},
forall({x: Dom(f)},
implies(abs(x - a) < d, abs(f(x) - f(a)) < e)
)
)
)
これよりもさらに手短に、見た目ももっと見易く
すでに理解したことやよく知られた事実は認めて問題を解いているはずだ
そういう柔軟性がほしい
つまり、認めてもいい仮説はその場その場で手軽に導入できるような言語設計がいい
その上で、そこから機械的に導けることの証明や、定義から直接わかる具体例の計算などを半自動でしてほしい
もちろん、コンピュータにやらせる以上、曖昧さのない構文は必要だろうが
def continuous_at(f: Real -> Real, a: Dom(f)) = forall({e: Real | e > 0},
exists({d: Real | d > 0},
forall({x: Dom(f)},
implies(abs(x - a) < d, abs(f(x) - f(a)) < e)
)
)
)
これよりもさらに手短に、見た目ももっと見易く
2024/03/25(月) 01:17:03.24ID:YF7A8RJG
たとえば>>9のcomtinuous_atなんかも、一度書いたはいいけど実際に使うとなると、使うたびに、fの定義域が実数全体じゃない場合みたいな微妙な調整が必要になるんだよね
人間が考えたら時間がかかるような部分をコンピュータに助けてほしいのに、どうしても「知りたいのはそこじゃない」って部分に時間をかけなきゃいけない
人間が考えたら時間がかかるような部分をコンピュータに助けてほしいのに、どうしても「知りたいのはそこじゃない」って部分に時間をかけなきゃいけない
2024/03/25(月) 08:46:28.85ID:e2d3VFLD
かと言って最初から一般的に対応しようとすると、典型的なケースで必要以上に多くの記述をしなきゃならんだろうね
2024/03/25(月) 08:59:06.31ID:e2d3VFLD
継承とかいう欠陥だらけのサブタイピングのしくみは、証明に置き換わってもいい
つまり、厳密にis aであることを証明しなければ継承できない
&ポリモーフィックな関数は型の共通部分で動作が一致することを証明しなければ定義できない
そうすれば誰も使わなくなるか、使える能力のある奴だけが使うようになる
つまり、厳密にis aであることを証明しなければ継承できない
&ポリモーフィックな関数は型の共通部分で動作が一致することを証明しなければ定義できない
そうすれば誰も使わなくなるか、使える能力のある奴だけが使うようになる
2024/03/25(月) 11:24:25.60ID:tzV2+lCA
>>9
量化した変数や条件式の評価は遅延させなきゃいかんから、コールバック地獄みたいになるのね
量化した変数や条件式の評価は遅延させなきゃいかんから、コールバック地獄みたいになるのね
2024/03/25(月) 18:53:28.86ID:gEcAWv1u
証明を書き下すのが手間なのもあるが、数学のオブジェクトをプログラムで扱えるよう定義するのも相当手間だろうね
行列式→行列式を計算するのは簡単だが、置換を使って定義するのはめんどくさそう。置換群を先に定義しなければならない
リーマン積分→区間幅の最大値が0に収束するようなリーマン和の列すべてを考えなければいけない。
商空間で辺に沿って同一視した曲面とかもめんどくさそう。
行列式→行列式を計算するのは簡単だが、置換を使って定義するのはめんどくさそう。置換群を先に定義しなければならない
リーマン積分→区間幅の最大値が0に収束するようなリーマン和の列すべてを考えなければいけない。
商空間で辺に沿って同一視した曲面とかもめんどくさそう。
2024/03/26(火) 01:22:14.15ID:D7UVXJYK
2024/04/01(月) 00:51:33.03ID:1WSos/bD
>>14
数学を表現するための概念のサブセットも選ばないといけない
現代数学が公理的集合論で記述されることは誰でも知ってるけど、具体的な対象(たとえば実数など)を扱う時に、それが∅から始めてZFCで構成可能かどうかなんてことを意識している人はいない
おそらく多倍長整数と浮動小数点数くらいはあったほうがいい
数学を表現するための概念のサブセットも選ばないといけない
現代数学が公理的集合論で記述されることは誰でも知ってるけど、具体的な対象(たとえば実数など)を扱う時に、それが∅から始めてZFCで構成可能かどうかなんてことを意識している人はいない
おそらく多倍長整数と浮動小数点数くらいはあったほうがいい
2024/04/01(月) 00:58:01.06ID:1WSos/bD
あと、近年のスクリプト言語における型チェッカやJITコンパイラなどと同様に、
言語は同じでも、プログラミングをする処理系と、証明をする処理系をわけたほうがいいと思う
同じだと、たとえば自然数の2を、数値として評価するか、「0の後者の後者」のように展開するか、プログラマが書き分けないといけない
言語は同じでも、プログラミングをする処理系と、証明をする処理系をわけたほうがいいと思う
同じだと、たとえば自然数の2を、数値として評価するか、「0の後者の後者」のように展開するか、プログラマが書き分けないといけない
2024/04/08(月) 20:17:45.51ID:lvukj15+
パターンマッチングの構文もかなり柔軟じゃないと書きづらいだろうね
複素関数をf = u + ivと分解するとか、V^nの既定v_1, ..., v_nを取るとか、そういうのが頻繁にある
複素関数をf = u + ivと分解するとか、V^nの既定v_1, ..., v_nを取るとか、そういうのが頻繁にある
レスを投稿する
ニュース
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 最近高市にすり寄ってきた藤田ニコルさん、妊娠 [809488867]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- カーリングってなんでデッキブラシ持ってんの?
