「数学」をプログラミングするには

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/03/16(土) 19:41:45.98ID:nuwGv9us
たとえば、プログラミングで

π/4 = 1 - 1/3 + 1/5 - 1/7 + ...

を近似ではなく厳密に確かめるにはどうしたらいいの
人間が証明できるってことは、有限なアルゴリズムに書き換えられると思うんだけど
797デフォルトの名無しさん
垢版 |
2025/01/09(木) 12:47:55.94ID:iZ6OsWgm
炎上商売にエンジョイ
2025/01/12(日) 02:01:35.37ID:8Ab7i+tr
型に対してプログラミングすべき
2025/01/12(日) 07:50:15.14ID:aNPLoHWH
それやってもすぐ人間の能力限界にぶつかるから
800デフォルトの名無しさん
垢版 |
2025/01/12(日) 10:12:06.95ID:l8rSJlAD
バリアントで統一
2025/01/12(日) 10:51:45.53ID:iqj2UdGG
空手型
802デフォルトの名無しさん
垢版 |
2025/01/12(日) 15:49:20.69ID:DO5vWwuf
科学をプログラミングするのは難しいが
プログラミングを科学するのは可能では?
2025/01/12(日) 16:35:24.05ID:iqj2UdGG
主語がでかい
2025/01/13(月) 02:34:19.05ID:scTw5na7
オブジェクト指向って、コンピュータサイエンスじゃないんだよな
単に(一部の)人間にとって理解しやすくモジュール化しようってだけのことで、それで技術的に出来ることが増えるわけじゃないから
2025/01/13(月) 02:37:56.75ID:scTw5na7
構造化プログラミングや、関数プログラミングは、それ以前より高レベルの抽象化をもたらしたけど、オブジェクト指向は単に書き方の問題
科学論文で例えれば、構造化プログラミングや関数プログラミングは理論の内容に相当するが、オブジェクト指向は論文の体裁のこと
2025/01/13(月) 02:40:56.25ID:XXChvl3U
そして、科学論文の体裁は重要だが、オブジェクト指向はいまや重要ではない
2025/01/13(月) 05:24:15.88ID:elRKgauc

並行性
最適化

この3つだよ
今求められてんのは
808デフォルトの名無しさん
垢版 |
2025/01/13(月) 09:04:54.93ID:PzkYuqRH
求めてないよ
2025/01/13(月) 09:12:00.23ID:J7wtrzSF
俺が大学生だった20年前はオブジェクト指向もCSの一部だったが
教授はカプセル化が一番重要だといってた
研究はされてたけど、アスペクト指向は流行らなかったなー
2025/01/13(月) 09:12:18.64ID:6+/RYvQh
で、出wwwwインターネットあまのじゃく君wwwwwww
2025/01/13(月) 09:13:20.48ID:wtvPYUbh
>>809
君、勉強できなそうだね
2025/01/13(月) 09:42:56.67ID:94WYo5Du
>>809
たった三行でここまで頭悪そうな文章書けるのってある意味才能だな
2025/01/13(月) 10:20:57.19ID:Ymx2LteG
オブジェクト志向の次はデザインパターンだろ
2025/01/13(月) 10:42:06.79ID:LSOaiCCa
カプセル化も全否定されてるけど
いまだにアンダースコアの変数はモヤモヤする
2025/01/13(月) 10:43:00.59ID:P3ktA6B0
それも宗教
振り子が逆に振れてるだけ
2025/01/13(月) 11:39:54.56ID:J7wtrzSF
デザインパターン20数個のうち10数個ぐらいはただの高階関数でかけるという研究もある
2025/01/13(月) 11:55:37.97ID:Ymx2LteG
魔法はなかった
2025/01/13(月) 13:02:05.46ID:DTY38xVU
>>816
そして残りの10個はただのアンチパターン
2025/01/13(月) 17:18:23.47ID:Ymx2LteG
岩波講座 ソフトウェア科学 [基礎]1
計算システム入門
著者 所真理雄 著
刊行日 1988/10/06

ソフトウェアの作成は人間的な作業で,信頼性や生産性の点でいまだに手工業の域にある.こうした現状をふまえ,ソフトウェア作成の方法を示すとともに,その理論と知識を整理し,新しい学問体系として提示する
2025/01/14(火) 00:54:16.56ID:eoA7bUR4
なぜ高階関数を使わないのか
εδ論法はなぜεの関数を具体的に構成しないのか
こういうのを体系的に整理したら特定の勢力だけが得をして他は損するんじゃないか
だから整理しない
2025/01/14(火) 08:02:07.96ID:WvheYWow
Foo = Bar | Baz
2025/01/14(火) 08:15:31.11ID:BEZztBwJ
型⊂クロージャ
2025/01/14(火) 12:10:31.19ID:ygjj3afU
型なんて特別なものじゃない
0や1はInt型のオブジェクト、IntはType型のオブジェクト
824デフォルトの名無しさん
垢版 |
2025/01/14(火) 12:50:51.03ID:1hGtsoWq
水の呼吸、壱の型
2025/01/14(火) 13:27:13.44ID:2ZQOZttA
>>824
咄嗟にアニメの話出せるとか
おまえすげえ最先端行ってるな
才能の塊かよ
2025/01/14(火) 13:30:47.33ID:5ok8hMJ2
>>824
それ知ってるわ
煉獄さんの映画のやつだろ
お前マジでおもしれーな
2025/01/14(火) 13:58:17.70ID:L1ZxvYgu
型が第一級オブジェクトなら、クロージャを使えば状態つきの型を作れるわけか
2025/01/14(火) 14:18:33.81ID:x8Aql6YT
有理数型や小数型も作れるのか?
2025/01/14(火) 14:29:34.08ID:S4iOQtDV
>>827
わざわざ型情報を実行時に変化させてどうすんだ
2025/01/14(火) 14:29:54.43ID:S4iOQtDV
>>828
お前は低レベルすぎ
2025/01/14(火) 20:10:44.55ID:6b3bLxyH
有理数型はHaskellやMathematicaにもうある
状態付きの型、考えただけで恐ろしい
2025/01/14(火) 20:32:44.91ID:A8xCzIhU
そうやって進化していくものよ
2025/01/14(火) 21:00:24.45ID:6b3bLxyH
状態付きの計算を行う手順を持った型なら純粋だから許せるけど
状態付きの型なんていらないよ
2025/01/14(火) 21:07:31.89ID:KUHcAlDi
君に要るかどうかは関係ない
2025/01/15(水) 00:39:06.33ID:v8xz0BVe
`f1 = Foo 1`なら、f1の型は`Foo 1`
基本的にはこれでいい
`Foo 1`は `{n: Nat} Foo n`のサブタイプ
`f1`を`Bar :: t -> s`に渡せるのは、`Foo 1`に変換する規則が存在するとき
型検査はそれをコンパイラがチェックすればいい
2025/01/15(水) 00:39:55.88ID:v8xz0BVe
`f1 = Foo 1`なら、`f1`の型は`Foo 1`
基本的にはこれでいい
`Foo 1`は `{n: Nat} Foo n`のサブタイプ
`f1`を`Bar :: t -> s`に渡せるのは、`Foo 1`を`t`に変換する規則が存在するとき
型検査はそれをコンパイラがチェックすればいい
2025/01/15(水) 00:45:33.23ID:2eRf9tIs
ユーザー定義関数から値返せないじゃん
2025/01/15(水) 00:50:21.44ID:LknHRWOL
型は実体ではなく注釈か
2025/01/15(水) 01:13:53.96ID:xsuF+zK/
型っつっても所詮は構造体に名前がついただけ

計算の過程や性質に型付けをしたいんだ

「関数fを抜けたタイミングで、ポインタpは必ず指定の条件をみたす場所を指していなければならない」

こういうのを型で保証したいんだ
2025/01/15(水) 01:33:23.91ID:Yf+/cXFX
ぬるぽは実行前に排除する
2025/01/15(水) 06:39:48.90ID:xj5qHVfP
>>839
理解浅すぎ
数学勉強してないでしょ
2025/01/15(水) 08:07:10.18ID:ogU0rXVD
>>841
君が数学で研究職に就いているのでなければ、まず間違いなく君よりは理解してるよ
2025/01/15(水) 08:10:12.30ID:zm/Y+w4S
>>839
実行時のアサーションで書けることは、型にできる
2025/01/15(水) 08:19:11.22ID:Uf2ceum5
二分探索やクイックソートのロジックが正しいことを型で証明できるか
2025/01/15(水) 08:32:18.93ID:nE+pEHV1
数学的帰納法で証明できる
(長さ1の配列に対しては自明
長さ1, 2, ..., k-1に対して正しいと仮定して、長さkに対して証明する)
そのような構造はF代数で定式化できる
2025/01/15(水) 08:56:17.03ID:3W/U+R8x
アキュームレータを再帰的に更新していくようなのはF代数に抽象化できる
2025/01/15(水) 19:07:44.03ID:8y1isLBr
オブジェクト指向はオワコン
2025/01/16(木) 02:12:12.85ID:hp6XExKo
抽象データ型、凝集度、関心の分離などの既存の概念だけで簡潔かつ正確に説明できることをわざわざバズワードに言い換えただけのクソ概念
2025/01/16(木) 03:23:35.34ID:DBY13IoQ
形式論理とかまじで役に立たんからな
2025/01/16(木) 08:27:28.13ID:L1OHI3Vu
実は当たり前にやっていること。関数適用はmodus ponensに相当する
2025/01/16(木) 18:56:00.70ID:DBY13IoQ
でも役に立たないでしょ
少しは文章読めよガイジ
2025/01/16(木) 20:35:27.89ID:FAOk1woG
型情報からあまり使ったことない関数でも使い方にあたりがつくのは便利だと思うけどお前はそうではないんだな
2025/01/16(木) 20:51:11.29ID:Wo2SWLBc
複素数型も四元数型も定義可能だし、GPUに組み込んで高速で並列演算できるようにしてやれば科学界に革命を起こせるな
2025/01/16(木) 21:51:56.76ID:zFtBKiS0
処理系がcall/ccをサポートすることは、直観主義論理に背理法を加えることに相当する
2025/01/16(木) 22:19:04.03ID:FAOk1woG
研究者の名前がなかなか思い出せなかったがGriffinだな POPL 1990
2025/01/16(木) 22:28:22.29ID:l7++KB1R
イマドキ型のない言語なんて、即席のスクリプトくらいにしか使わんでしょ
2025/01/16(木) 22:31:22.46ID:IceLMl7e
代数的データ型やパラメータ多相を使えばプログラムのかなり多くの性質をコンパイラが保証できるのに、わざわざ型検査なしで注意してコード書くとか馬鹿のすること
2025/01/16(木) 22:36:34.50ID:IceLMl7e
人類未曾有のソフトウェアを書くならともかく、巷のプログラムの9割近くのコードはただデータを整形してマッピングしてるだけ
あとの一割は既存のライブラリの呼び出し
現代のプログラミング言語の型システムがあれば、IDEの入力補完に従ってるだけでバグの無いコードが書ける
画面にらみつけてロジック確認なんかしてんのはただのアホ
2025/01/16(木) 22:51:04.55ID:fgdrajER
しかし、それができるなら動的型付けの言語でもエディタが構文から型推論すれば同じことができるのでは?
2025/01/16(木) 23:35:14.70ID:N/7GMQUm
ところがどっこい
型注釈無しでは型推論ができない、あるいはエラーにすべきか型チェッカが判定できないケースが存在する

まず簡単なのは、ユニオン型だ
f:: () -> Int | Str
みたいな関数は注釈なしでは、ふたつの箇所で異なる型を返してるのが間違いなのかどうか型チェッカには判定できない

パラメータ多相を使う高階関数も型推論が困難だ
map :: (a -> b) -> [a] -> [b]
これがたとえば二カ所で
map :: (Str -> Int) -> [Str] -> [Int]
map :: (Str -> Str) -> [Str] -> [Str]
と使われていたら、型チェッカは
map :: (Str -> Int|Str) -> [Str] ->[Int]|[Str]
だと推論するかも知れない。もしそうなると、
map :: (Str -> Str) -> [Str] -> [Int]
という使われ方をしていても、チェックに通ってしまうことになる

リフレクションやメタプログラミングをしている場合も勿論、コードだけから型推論するのは困難だ

逆に言えば、このようなケースに適切に型注釈をつければ、その他の部分は推論できるようになるので、生産性が格段に上がる
2025/01/17(金) 04:10:24.01ID:VwDpqJJw
なんかグダグダ言ってるけどそれ形式論理なしでできるよね
この話の発端は形式論理が役に立たないってことであって,型が役に立たないって話じゃないよ
2025/01/17(金) 06:49:41.95ID:b1HMrou3
単純に、お前の話に誰も興味ないから話題が変わっただけでは
2025/01/17(金) 09:10:34.70ID:qO2eRSGs
ocamlなんかは型推論の健全性と完全性を備えているから
どんな式でも型がつくし、型エラーがでなければ正しいプログラムになるというのが保証されてる
健全性と完全性をどちらか捨てるとしたら完全性なので、そういう言語は型注釈が必要になる
2025/01/17(金) 16:31:58.98ID:tFlne/Xr
まぁ形式論理も時相論理もプログラミングには何の恩恵もないわな
865デフォルトの名無しさん
垢版 |
2025/01/17(金) 16:59:57.91ID:GO6/DX25
CSは数学を一部利用するが
数学はCSなんて知らんがな状態
2025/01/17(金) 18:01:24.36ID:7aS9Z/2O
学問にコンプレックス持ってる人って、みっともないね。
2025/01/17(金) 20:14:27.37ID:b0CV3tPB
>>857
パラメータ多相のジェネリックな型は特に制約を指定しなければ任意の型がOK何でもありだけど
何の型でもありということは使える範囲も極めて狭いというか
言語によってはprintすることすら任意の型が可能派と必ずしも可能とは限らない派もあり曖昧で
何らかの制約を指定しないと何の処理もできないためその型の値をそのまま返すことしかできなくなってしまう
つまりジェネリック型パラメータに対する制約記述がカギとなる
2025/01/18(土) 08:09:37.99ID:eX+b185R
>>866
多分コンプレックスとかじゃなくて無駄なものを持ち込まずにシンプルにしておきたいってだけじゃない
2025/01/18(土) 08:45:22.05ID:BE7PGd83
>>865 数学が専門の人がどんどんCSに入ってきて内容が高度化してるって聞いたぞ俺は
870デフォルトの名無しさん
垢版 |
2025/01/18(土) 10:15:15.14ID:ERaUWL8N
シンプレックスでコンプレックス
871デフォルトの名無しさん
垢版 |
2025/01/18(土) 11:19:59.28ID:7Jaib8zo
なんでコンプレックスの話が出て来てるのかさっぱり判らん

>>869
それこそ >>865 の説を補強してるだけじゃないの
2025/01/18(土) 11:57:14.53ID:xEXW43By
>>868
イミフ
2025/01/18(土) 12:09:19.43ID:pstj5VhN
>>868
数学やCSを持ち込んで対象が複雑になると思ってるのは、
自分が理解できないものにコンプレックス持ってるからだよ
理論を作って対象が複雑になることはあり得ない
2025/01/18(土) 12:14:10.21ID:pstj5VhN
>>873
一筆書きして最初の場所に戻ってこられるか、は複雑な問題
グラフのすべての頂点から出ている辺の数が偶数、というのは単純な問題

グラフ理論を持ち込んで問題が複雑になったというのは、
頂点・辺・偶数・奇数などの概念が理解できないから
それは数学に対するコンプレックスにほかならない
2025/01/18(土) 12:39:38.25ID:84F6tYk8
>>871 P=NP予想とかCSの問題も数学で扱われてるんだから知らんがな状態ではないと思う
2025/01/18(土) 15:06:03.89ID:2/LPmLwt
プログラミングに必要な数学は数値計算で使う数学くらいか?
微積と線形

圏論がプログラミングで無意味なのは誰でもわかるか
2025/01/18(土) 15:34:34.81ID:28NAL8Fg
>>876
プログラミングと数学を分けてる時点で、Qiitaのブログのサンプルコピペしてる雑魚と同レベル
2025/01/18(土) 15:41:30.33ID:Zj1ghav+
反論になってないなぁ
2025/01/18(土) 16:26:51.31ID:xuSYONRy
プログラミングに数学はいくらでも使うことができる
プログラミングに使う数学とか言ってんのは、ただ単に自分が数学を学びたくないだけ
2025/01/19(日) 12:35:56.76ID:fNMlPpUq
Felleisen 30年研究して「プログラミングには型が必要なことがわかった」←これ好き
2025/01/20(月) 01:24:19.62ID:8nHIoBfi
型=命題
項=証明

この対応は、通常のプログラミングでも同様
そう思えないってことは、型の使い方が大雑把すぎるってこと
2025/01/20(月) 06:41:50.30ID:qtJTpWnY
>>881
お前のソースコード見せてくれよ
どんだけ立派なのか拝ませてくれ
2025/01/20(月) 08:41:47.10ID:jEcxLOMX
立派とは?
2025/01/20(月) 08:45:50.71ID:VdwKz6kz
int i=10;
char c='a';
printf("%d\n",i+c);
こんなのがかけるC++ではカリーハワード同型対応なりたたなさそう
2025/01/20(月) 09:06:44.29ID:3GFrNXKp
C/C++の型付けは、メモリをなんぼ確保するかの目印でしかないからな
2025/01/23(木) 23:15:16.69ID:gkeqtoks
Rustの型はトレイト属性があって
マルチスレッドでも同期が保証される型など
抽象度の高い表現が型システムで扱えるようになってるね
それによりデータ競合が起きないことを型システムで保証してしまってるところが凄いと思った
2025/01/24(金) 08:08:03.61ID:xJrwwu40
その代わりにmany shared XOR one mutableのキツいルールがあるけどな。
2025/01/24(金) 08:08:50.30ID:wJVzGCxN
自力で証明するよりも他者の言質を取るというか契約が成立することにより安全が保証される
という思考に人類は依存しすぎている
半導体は自作できないかもしれないが数学は紙媒体でもできる
889デフォルトの名無しさん
垢版 |
2025/01/24(金) 10:45:51.66ID:QSEbyU6x
正直、Rustに心酔してる奴って、程度が低すぎ・・・
PythonやC#みたいなオモチャと比べたら、たしかにRustはマトモだ

だが、しょせんはまだ従来型のプログラミング言語
人間の思考ほどの表現力は無い
890デフォルトの名無しさん
垢版 |
2025/01/24(金) 10:51:55.41ID:QSEbyU6x
言っちゃ悪いが、人間の知能は平等ではない
ある人にとってはRustは自分の思考よりも高機能だから、Rustに引き上げてもらえる
しかし、ある人にとってはRustを書くことは、Rustの書き方に思考を制限することになる
891デフォルトの名無しさん
垢版 |
2025/01/24(金) 11:18:52.70ID:YFrK1zgU
ある人は数論幾何学や場の量子論などがわかるが、ある人は中学校の連立方程式くらいしかわからない
連立方程式が世界で一番高度な学問と感じる人にとって、プログラミン言語はまるで魔法のようなのかも知れない
が、数論幾何の水準の人にはプログラミング言語は耐え難いほど低水準だ
2025/01/24(金) 11:22:58.16ID:wJVzGCxN
振舞いを自動化しろと言われるのと判断は人間の責任っていうのは
振舞いと判断を区別すれば矛盾しないんだけど
「証明する」というのは振舞いか判断かさっぱり分からんから矛盾だという批判がある
2025/01/24(金) 22:28:54.69ID:TVTggs3s
>>887
single writer XOR multiple readers はデータ参照の競合バグを防ぐために役立つルール
これを守ると参照競合によるバグを防げるだけでなく
プログラムのスパゲッティ化を防ぐ効果も高い

さらにRustではそこに内部可変性が用意されているため
そのルールを守ったまま複数のデータ更新者(ex.マルチスレッド)が排他制御しながら同じデータを書き換えることも可能
2025/01/25(土) 03:45:14.01ID:LC7IJQQw
構ってもらえる相手を探し求めさまよう某
2025/01/25(土) 10:55:48.38ID:iLzbIZXE
>>891 その数論幾何の人にプログラミング言語を作ってもらえばいいんでね
2025/01/25(土) 11:31:31.34ID:wB2yLAW7
新商品を作ることにより今後の支障がなくなるといつから錯覚していた
897デフォルトの名無しさん
垢版 |
2025/01/25(土) 15:36:14.98ID:OwaQndIK
>>895
すでに表記の体系はある
CS畑のやつが処理系を作ればいい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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