集合論に基づいた言語を作りたい

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2014/08/10(日) 21:27:16.56ID:x7G32Sd0
計算機科学の基礎は集合論であるという。
ならば、集合論に基づいた言語を作れば美しい言語になるのでは?
そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
2014/09/11(木) 10:27:37.46ID:ZRdF18oF
>>217
関数型でもCharのリストで扱う言語あった気が
2014/09/11(木) 12:11:59.58ID:/5wQig/e
むしろStringが単純型なのはLISP系ぐらいでは
2014/09/11(木) 12:59:06.68ID:ThP8Tlio
>>216 型理論(型システム)的には全く無意味だからそれ
2014/09/11(木) 12:59:52.98ID:ThP8Tlio
> 関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw

自分がバカっぷりをさらしてることはわからないんだねw
2014/09/11(木) 13:06:24.74ID:ThP8Tlio
ていうか、関数型ムラに居て、HaskellのStringが[Char]だと知らない奴がいるもんかw

あと、流石に効率が悪いことも多いってんで、最近はText型とその周辺の実装が進められてる。
2014/09/11(木) 13:39:24.40ID:/5wQig/e
ハァ?誰もHaskellの話なんてしていないぞ。

そんなにHaskellの話がしたければHaskellスレに行けば?
「Stringは単純型だと言ったらいじめられた〜」とか言えば
みんな同情してくれるだろw
2014/09/11(木) 14:10:25.16ID:AMEA56Qh
桃白白はVBScriptしか知らないからあの答えで合ってるの。
2014/09/11(木) 17:15:48.36ID:ThP8Tlio
> みんな同情してくれるだろw

おれは苛めてるんだ、と、自分を騙すのに必死なのかw
2014/09/11(木) 17:18:44.69ID:Eq/MhJWf
Stringが単純型しかないLisp以外の言語まだー?
2014/09/11(木) 19:02:59.76ID:ZRdF18oF
Stringがプリミティブな言語自体は存在するけど(手続き型ならBASICとかPerlとか)
>>211 はStringは単純型、と言い切っちゃってるからな
2014/09/11(木) 20:03:48.12ID:Eq/MhJWf
しかもBASICやPerlにしても文字列を内部実装として永続データ構造で保持してる処理系とか普通にあり得るし。例えばPerlのHaskell実装とか。
2014/09/12(金) 00:22:55.80ID:ke/j7I6c
で?
2014/09/12(金) 02:10:37.29ID:KXHcVpz6
元々なんの話だったんだっけか、よく分からんくなってきた
2014/09/12(金) 03:48:40.55ID:5DSOPRX8
結論
ハスケル村民は中二病
2014/09/12(金) 19:25:03.94ID:i5Uyd5M3
>>230
>>186参照
関数型言語の関数型というのはただの手法であって言語という程のことではないらしい
haskellは何言語と呼べばいいんだろう
2014/09/12(金) 19:43:34.87ID:ke/j7I6c
文脈のある文章を文脈から取り出してセンセーショナルに騒ぐ奴はバカ、でFA
2014/09/12(金) 19:54:30.05ID:i5Uyd5M3
関数志向宣言型プログラミング言語って呼べばいいのかな
2014/09/12(金) 19:55:16.20ID:i5Uyd5M3
誤字った
関数指向宣言型プログラミング言語
2014/09/12(金) 20:06:23.28ID:Iy5dUXcN
略して関数型言語
237
垢版 |
2014/09/13(土) 11:02:47.39ID:NSrcGDnS
connect4をみんな大好きhaskellに移植したぞ。
こんどこそ添削たのむな。

http://www.age2.tv/rd05/src/up4254.txt
238
垢版 |
2014/09/13(土) 19:54:59.71ID:NSrcGDnS
>>237のコードは一手打つたびに盤面を丸コピーしてると思うんだが
そこらへんコンパイラが上手いことやってくれてるの?
239デフォルトの名無しさん
垢版 |
2014/09/14(日) 00:53:22.93ID:N78ccrO0
囲連星で
2014/09/14(日) 07:25:06.11ID:3VDbXkPO
>>237
letのかわりにwhereで、
ifのかわりにパターンマッチで書き換えれば
Haskellっぽくなる。
241
垢版 |
2014/09/14(日) 10:08:34.40ID:rj6ubMt8
>>239
そんなに囲連星AIがほしけりゃ自分で作れよ。なんで人にやらせようとするんだよ。

>>240
添削ありがとうございます。
whereは変数を定義する前に参照してるみたいで気持ち悪いです。
まあ、慣れの問題なんでしょうが。
242デフォルトの名無しさん
垢版 |
2014/09/14(日) 15:18:34.44ID:sID153LP
最初のほうだけ読んだけど、
言語知らなすぎだろ。

それで言語作ろうなんて、10年早いわ。

もっとも、実用性なんてどうでもいい。
言語作ってみたいとか、作ることで、プログラミングというものを知りたいってのなら、
まったくもって問題無く、むしろ頑張れって感じだけど。
243
垢版 |
2014/09/14(日) 15:57:37.44ID:rj6ubMt8
>>239
ちなみに囲連星AIは昔作ったことある。
もっといえばゲ制作板の囲連星AIスレの380は俺だ。
ちなみに9路囲連星のGUIを作ったのも俺。
囲連星は一回やってもう挫折してるんだよ。

>>240
とりあえず、パターンマッチにしてみました。
letはそのまんま。だってwhereきもいんだもん。

http://www.age2.tv/rd05/src/up4284.txt.html

>>242

まあな。俺の実力じゃ実用的な言語を作るのは無理だろうな。
でもそれはほとんどのプログラマがそうだろ。
実用的な言語つくれるプログラマなんて一握りだろ。
もっといえば実用的な言語って一人で作れるようなものじゃないだろ。
244デフォルトの名無しさん
垢版 |
2014/09/14(日) 16:15:43.91ID:w3keaoOy
囲連星ってそんなに難しいか?
やってみるか。
245デフォルトの名無しさん
垢版 |
2014/09/14(日) 16:39:35.29ID:sID153LP
>>243
自分がそうだからって、
「ほとんど」とか、他の人を巻き添えに足引っ張るな。

自分の未熟さを棚に上げる愚かな行為だ。

RubyのMazsとか、言語オタクだぞ。

そうじゃなきゃ作れないってことだ。
246
垢版 |
2014/09/14(日) 17:59:15.91ID:rj6ubMt8
>>244

がんばれ、応援するよ。LV3越えは俺の悲願でもあるから。
だれかほかの人でも達成してくれたらうれしい。
できあがったらゲ制作の囲連星AIスレで報告してくれ。

>>245

そこでMatzみたいなスーパースター引き合いに出してどうすんだよ?
Matsは一握りかほとんどかで言ったら明らかに一握りだろ。
そのMatzにしたってRubyコミュニティの支えなしじゃここまでやれなかっただろ。
だいたいGoとかD言語みたいなスーパースターたちが作った言語だって
はたして「実用」と呼べるほどのユーザーを獲得してるかどうか。
言語をつくるって大変なことだと思うよ。
まあ、自分の未熟さを棚にあげてるのはそうかもしれんが。
247
垢版 |
2014/09/14(日) 18:14:29.35ID:rj6ubMt8
あら、MatzがMatsになってた。
誤字すまん。
2014/09/14(日) 18:30:48.41ID:s+BV7Cb9
新言語かぁ‥誰しも夢見るね‥haskell が圏論というのであれば、今後新言語を作るとすれば何を足がかりにすればいいのか?
2014/09/14(日) 19:26:12.34ID:r0J72yK/
Haskell自体は圏論ベースじゃないぞ。
モナドだけ。
2014/09/14(日) 19:33:25.07ID:s+BV7Cb9
そうなのか‥懐かしい名前、大熊正先生の著書をヤフオクでえらい高い値段でgetしてしまった(無論、読めやしない‥専門書って大変だね‥)が、無意味だったようだね
251デフォルトの名無しさん
垢版 |
2014/09/14(日) 20:19:23.00ID:NJi0vj84
集合論に基づく言語は、SIMDやメニーコアが発展していくうちに普通になると思うけど、
今は、C++をシンプルにした感じのスクリプト言語が欲しい。
まだ、集合論に基づく言語が手続き型を超える性能を出せる環境になってないから。
252
垢版 |
2014/09/14(日) 20:55:06.50ID:rj6ubMt8
結局、ハードの作りが根本から変わらん限り
C/C++を超える言語は現れないんじゃないかな。
超えるっていってもどういう意味で超えるのか微妙だけど。
2014/09/14(日) 21:30:29.03ID:s+BV7Cb9
C の言語仕様にキャリーフラグを含めてほしかった‥ちょっと今苦戦中
254
垢版 |
2014/09/14(日) 22:27:09.05ID:rj6ubMt8
C言語の言語仕様だけでキャリーフラグって実現できるんだっけ?
できるんだろうけど、ぱっと思いつかないな。
2014/09/14(日) 22:52:20.28ID:r0J72yK/
これ参考になるかも
ttp://d.hatena.ne.jp/tociyuki/20140906/1410012689
256
垢版 |
2014/09/14(日) 22:53:39.24ID:rj6ubMt8
最悪、すべての演算結果をテーブル化しておけば実現できるなw
効率的にはどうやるんだろう?
257
垢版 |
2014/09/14(日) 22:54:40.97ID:rj6ubMt8
おおっとリロードしてなかった。
258デフォルトの名無しさん
垢版 |
2014/09/15(月) 00:55:12.74ID:MGTym664
ts
259240
垢版 |
2014/09/15(月) 06:10:27.36ID:8SU9zqnx
>>243
たとえば、
let c = map digitToInt ( filter isDigit s)

let c = map digitToInt . filter isDigit $ "123"
にできる。
さらに、
s_to_line :: String -> [Int]
s_to_line = map digitToInt . filter isDigit
と関数を定義しておいて、
let c = s_to_line s
とすると、ググッとHaskellっぽくなる。
260
垢版 |
2014/09/15(月) 10:47:17.06ID:bIq53OoI
>>259
これが関数の合成ってやつか。
すごく…気持ち悪いです。
なれれば快感になりそうだが。
261
垢版 |
2014/09/15(月) 11:16:32.32ID:bIq53OoI
しかしOcamlよりhaskellのほうが書いててたのしいな。
なんでだろう?
2014/09/15(月) 15:28:20.49ID:kzUO2epp
写真には写らない美しさがあるから
2014/09/15(月) 16:34:50.30ID:kAk3iSbn
リンダリンダ〜♪
264
垢版 |
2014/09/15(月) 16:46:42.27ID:bIq53OoI
だれか>>243のコードのplayの関数を、一手打つごとに盤面を丸コピーしないで済むように改善してください。
よろしくお願いします。
265
垢版 |
2014/09/15(月) 20:32:54.71ID:bIq53OoI
>>259
修正しました。仮引数ないと違和感ありますね。
http://www.age2.tv/rd05/src/up4346.txt.html
266240
垢版 |
2014/09/16(火) 09:53:54.34ID:Qs6Ucf5H
>>264
http://hackage.haskell.org/package/matrix-0.3.4.0/docs/Data-Matrix.html
2671
垢版 |
2014/09/16(火) 19:15:18.40ID:bFn0xUvd
>>266
MatrixのsetElemは丸コピーじゃないの?
丸コピーじゃないなら参照透過性はどうなるの?
268デフォルトの名無しさん
垢版 |
2014/09/16(火) 19:28:35.09ID:i9frET+F
参照透過性は、プログラマが気にすることではない。
コンパイラ、言語が気にすること。
純粋関数型言語は、参照透過性に違反できないのが原則。
純粋関数型でコンパイルが通れば参照透過性がある。
269
垢版 |
2014/09/16(火) 19:43:03.56ID:bFn0xUvd
>>268
それじゃ丸コピー?
270
垢版 |
2014/09/16(火) 20:03:52.99ID:bFn0xUvd
setElemの計算量オーダーが書いてないな。
ほかのは書いてあるのもあるのに。
2014/09/16(火) 20:35:47.52ID:+Ut5bl5+
>>269
純粋関数型言語における配列の実装は、
一般的には B-Tree またはその亜種を用いるのが一般的
で、常識的には更新する要素とは無関係な部分ツリー(への参照)を
そのまま(更新後の)新しい配列に引き継ぐから、丸コピーにはならない
(Data.Matrixのソースを確認した訳じゃないんで、あくまで一般論であることに注意)
また、配列を利用するアプリケーション側でも、必要な複数の更新操作を関数合成で
まとめてから適用するのが一般的だから、更新のオーバヘッドもさほど気にならない

更に言えば、>>243のように(ライブラリを用いず)自前でリストを配列に見立てて
配列操作を実装するのは自由な選択だけど、メモリ効率を考慮しなければならないケースであれば、
(>>243のように)配列更新のたびにリストを丸コピーするのは、お馬鹿さんと言うしかない
リストの一要素だけを更新する時、更新した要素の tail リストは更新後のリストと共有できるはずだ

最後に、こういったパズル/ボードゲーム系の全解探索問題を記述する場合、何も考えず
ゲームの局面ごとに盤面全体を丸々コピーするコードを書いてしまうのは、純粋/非純粋な関数型に限らず
手続き型プログラミングであったとしても初心者レベルのコード設計力だと見なすしかない
通常、チェスや将棋のように膨大な空間を探索しなければならないゲームのプログラミングでは、
プレイの「一手(いって)」に関する情報だけを局面として記憶し、差分として管理する
272
垢版 |
2014/09/16(火) 20:55:03.92ID:bFn0xUvd
ふーむ。
たしかにツリーをつかえば丸コピーは避けられるかもしれないな。
勉強になりました。
273
垢版 |
2014/09/16(火) 21:47:36.14ID:bFn0xUvd
Data.Matrixがないって言われる…
なぜ?

$ ghc connect4_4.hs

connect4_4.hs:3:8:
Could not find module ‘Data.Matrix’
Perhaps you meant
Data.Ratio (from base)
Data.Ratio (needs flag -package haskell2010-1.1.2.0)
Use -v to see a list of the files searched for.

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3
274240
垢版 |
2014/09/16(火) 22:18:12.61ID:Qs6Ucf5H
>>273
cabal install matrix
275
垢版 |
2014/09/16(火) 22:31:31.46ID:bFn0xUvd
>>274
ありがとうございます。コンパイルできました。
でも[[Int]]をMatrixに置き換えたらバグが発生。
ただいまデバッグ中です。
2014/09/16(火) 22:50:04.77ID:fJmUlCeF
>>253
アセンブラ以外で言語仕様にキャリーフラグが関与する演算子があるのは TL/1 しか見たことない
277
垢版 |
2014/09/16(火) 23:22:16.78ID:bFn0xUvd
Matrix版できたっぽいのであげます。

http://www.age2.tv/rd05/src/up4372.txt

Matrixのindexは1から始まるそうなのでそれに合わせて外部仕様も変更しました。
いままでは列の指定が0〜6だったのが1〜7になります。
今思えば外部仕様まで変えることはなかったような気もしますが後の祭り。
278デフォルトの名無しさん
垢版 |
2014/09/16(火) 23:34:02.05ID:i9frET+F
よく知られてるゲーム、GUIのあるゲームで頼む。
麻雀、OTHELLO、将棋、囲連星はwindowsGUIはある。
279
垢版 |
2014/09/16(火) 23:38:22.55ID:bFn0xUvd
習作だから実用性はあんまり求めてないんだよなぁ。
connect4は小さい割に動いてるもの作ってる気になれるから気に入ってる。
280240
垢版 |
2014/09/17(水) 06:12:56.94ID:Rq9rJBGz
>>277
結構よいのでは。
しつこいけど、whereは1度使ってみたらいいんじゃないかなあ。
letで頭から読む/書くという感覚もわかるけど、
whereを使うと、1つの関数定義全体を宣言的に読む/書く感覚がわかると思う。
2014/09/17(水) 12:19:24.89ID:pJCF9C7A
>>268
>参照透過性は、プログラマが気にすることではない。(略)
>純粋関数型でコンパイルが通れば参照透過性がある。

コンパイル通るかどうか気にする必要あるじゃんかw
2014/09/17(水) 13:02:50.04ID:Rq9rJBGz
>>268
> 純粋関数型でコンパイルが通れば参照透過性がある。

え?純粋関数型で型検査によって参照透明性を確保しているのはHaskellぐらいでは。

Haskell以外の、例えばMirandaやClean等の他の純粋関数型言語では、
型システムに依存せずに言語機能を制約して参照透明性を確保している
という理解なんだが。
283デフォルトの名無しさん
垢版 |
2014/09/17(水) 13:40:46.72ID:Fq6HYI62
参照透過性は型とは関係ないだろ?
型があってもなくても破壊的代入があったらアウト。
2014/09/17(水) 13:41:37.54ID:pJCF9C7A
ちょっと本題から外れるが。

たしかに本格的に型システムと一体化させたのはHaskellからだけど、
Mirandaから参照透過性に対して型システムは使い始めてる。
MirandaでKAOSってOSを記述した時のinteract型が、
Miranda本体にも取り入れられてる。
この時に導入されたcomp, returnがmonadタイプの定式化の元になった。
E. Moggiが"Notions of computations and monads"で定式化して。
Haskellを設計、開発することになったのは、
この辺を本格的にやろうと思うとオープンソースじゃないとやりにくいから。
2014/09/17(水) 14:19:32.02ID:Rq9rJBGz
>>284
確かにMirandaの評価戦略でのIO絡みの例外的扱いは、
HaskellのIOモナドの原型っぽい感じだな。
286
垢版 |
2014/09/17(水) 19:25:16.95ID:zOPUPbSB
>>280
where使ってみました。
ただ、gameの中のletはどうやってwhereにすればいいかよくわからなかったのでletのままです。

http://www.age2.tv/rd05/src/up4389.txt
287240
垢版 |
2014/09/18(木) 17:39:55.46ID:gCmSXIgb
>>286
doの中のletは仕方ない。そういうもの。
もう普通にHaskell入門レベルはクリアしてると思う。
不要な括弧が結構あるけど、それは単に慣れの問題だから構わないと思う。
おつかれさん。
288
垢版 |
2014/09/18(木) 19:52:18.04ID:WHOt2iCh
>>287
ありがとうございます。

haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
CPUのコアがもっと増えてコンパイラの最適化が今より強力になったらどうかわからんが、
C/C++より効率的なコーディングをするのは難しそう。

かといって生産性が劇的にあがるかというとそんな感触もなかった。
RubyにはC/C++より生産性高いと思わせるなにかがあったが
haskellとRubyを比べた時、はたしてhaskellのほうが生産性高いかといわれると?
もうちょっとデカいアプリを組んでみる必要があるのかもしれんが。

とりあえず、haskellでコーディングされた実用的で有名なアプリがあれば教えてほしいです。
289デフォルトの名無しさん
垢版 |
2014/09/18(木) 19:55:50.99ID:7eeU4PcQ
Monadius
1985年5月29日、そのゲームは、全国のゲーマーに衝撃を与えた。
らしい。
僕はよく知らない。そのときまだ生まれたばかりだったからだ。
20周年をむかえたグラディウスと、 ゲームを、ゲームプログラミングを愛する人たちに感謝を込めて贈る。
http://www.geocities.jp/takascience/haskell/monadius_ja.html
290
垢版 |
2014/09/18(木) 20:11:37.12ID:WHOt2iCh
>>289
これはすごいかも。
291
垢版 |
2014/09/19(金) 19:22:36.10ID:KT7u8M0C
>そういうデータの一塊であるMonadiusが、 updateMonadius, renderMonadius, isMonadiusOverという演算に関してGameを成す、と宣言されています。
これが圏論ってやつ?
2014/09/19(金) 19:58:12.78ID:vmyXN9M9
数学得意なら圏論から攻めてもいいと思うけど、
モナドは圏論わからなくても使うことはできるので...
293
垢版 |
2014/09/19(金) 20:19:26.79ID:KT7u8M0C
数学は好きだけど下手の横好きだな。
>>291のことがわかればもうちょっとhaskell好きになれそうなんだけど。
294240
垢版 |
2014/09/19(金) 21:47:04.42ID:3WQN+no2
>>293
それ自体は圏論じゃなくて型クラス。
型gがGameクラスであるためには
そのupdate, render, isGameoverの3つのメソッドが必要だと宣言されていて、
Monadius型はGame型クラスのインスタンスです、
メソッドはそれぞれupdateMonadius, renderMonadius, isMonadiusOverになります、
というもの。
295
垢版 |
2014/09/19(金) 22:15:41.15ID:KT7u8M0C
>>294
よくわからんがC++のテンプレートやjavaのインターフェースともちょっと違う感じ?
2014/09/19(金) 22:17:11.20ID:uV7lv+mi
これは最近よく目にするfilter-map-reduceとは違うの?
297240
垢版 |
2014/09/20(土) 07:19:58.23ID:p45kbQiW
>>295
型クラスは値ではなくて型のクラスってところがユニーク。

Haskellの型クラスはJava等のインターフェースより柔軟に使える。
Java等のインターフェースとクラスの関係は、
クラスを定義する時に「このインターフェースを実装します」と宣言するけど、
Haskellの型クラスでは、型クラスと型をそれぞれ別々に定義した上で、
「この型はこの型クラスのインスタンスだよ」と宣言する。
つまり、既存の型や既存の型クラスを使って、後から
「この型をこの型クラスのインスタンスとして使うよ」ということができる。

実は、286のコードでも型クラスのメソッドが多数使われている。
Ord型クラスのメソッドの>とか<とか、Eq型クラスのメソッドの==とか。
あと、game関数やmain関数の型を見ると、IO型クラスを使っていることがわかる。
2014/09/20(土) 12:34:10.95ID:rTgfsjb+
C++14で型クラス的なconceptってのが入りそうになったけど、
時期尚早ってことで見送られた。
次にStroustrupが簡略化した版が入る予定。
2014/09/20(土) 17:49:48.64ID:k+DS8D97
>>1は何をしたいんだ。
関数型言語は効率が悪そうたって、「集合論に基づいた言語」とかいうのはもっと効率が悪くなるだろうに。
300
垢版 |
2014/09/20(土) 22:48:20.83ID:YTPHYjLC
>>297
すいません。後付けできるってのがよくわからないです。
コンパイル時には明示的に宣言しないといけないのは型クラスもインターフェースも同じですよね?

>>299
集合論に基づいた言語は教科書の章末問題をサクサクっとインプリメントすることを目的としてる。
実用性はあんまり求めない。
2014/09/20(土) 23:24:10.24ID:rTgfsjb+
http://en.wikibooks.org/wiki/Haskell/Classes_and_types
のA concerted exampleと同じことをtype classなしで書いてみれば?
type classがあると細々としたことまで、
少ないコード量で強く型付けできることが分かるはず。
2014/09/21(日) 13:51:15.50ID:jEJWijVn
>>288
> haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
参照透明の良さっていうのは、逆から言うと、状態が沢山あるコードはクソだ、ってこと。
停止性問題で難題になったのは、状態が少し増えるだけで組み合わせの数が爆発すること。
再代入が減らせれば、コードの複雑性が減ることがあるから、参照透明がありがたい。
関数型の良さは、宣言型言語であること。参照透明は関数型言語の目的ではなく、それを必要としているというだけだ。

生産性が劇的に上がるかというと、c++でテンプレートメタプログラミングしてる人からそれを取り上げたら劇的に生産性が下がると言うだろうし、const をc++から取り除いても劇的に生産性が下がるだろう。
Ruby と haskell を比べても仕方ない。
一つのプロジェクトで一つの言語しか使えないわけではないのだから、部分によって、書きやすい言語、高速な言語、ライブラリの充実した言語を使い分ければよい。
そして Ruby でも関数型スタイルで一部を書くことができる。

なんかちょっと固定観念が強い気がする。
あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
2014/09/21(日) 14:55:43.06ID:hG2OFVWB
「集合論に基づいた言語」をつくるうえで参考になるかもしれないということで関数型言語の話が
出てきているんだろうけど、>>1はそれについて、参考になったとか、自分が考えているのとはこう違うから
参考にならなかったという話はせず、効率やら生産性の話をするんだよな。
「集合論に基づいた言語」で効率や生産性の向上を目的としてないなら、関数型言語で効率や生産性の向上が
なくてもどうでもいいことだと思うけど。
2014/09/21(日) 15:30:26.77ID:hG2OFVWB
無限集合を扱おうとすれば、関数型言語にあるような遅延評価か、論理型言語にあるような全解収集をするしかないだろ。
要素の重複を認めないのなら、生成されたものがすでに集合に含まれているかどうか調べるためのしくみも必要だし。
集合の包含関係はどのように調べるんだろ。

それとも数式処理のようなものを考えているのかな。
305
垢版 |
2014/09/21(日) 16:27:12.72ID:iz+Z8HKh
>>302
関数型言語には状態がないってのはなんとなくしっくりこないなぁ。
状態はあるけど考慮しなきゃいけないスコープが関数の引数に限られるってイメージなんだが。
あと、参照透過性を守ったって停止性問題が根本的に解決するわけじゃないよね?

>なんかちょっと固定観念が強い気がする。
まあ、おれもいいおっさんだからな。
それなりに固定観念はあるだろう。

>あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
これは自覚症状ないんだが。たとえばどの辺が分かったつもりの発言になってる?


>>303
言語を評価するとなったら効率か生産性かだろう。
集合論に基づいた言語では狭い領域の問題に限り(教科書の章末問題とか)
高い生産性を発揮することを目標にしてる。
関数型言語触ってみたけど>>286のコードに関していえばヒントになるようなものはなかった。
型クラスとかは勉強すれば面白いのかもしれん。
306
垢版 |
2014/09/21(日) 16:55:50.54ID:iz+Z8HKh
>>304
無限集合は扱いが難しいので、できれば無しの方向で。
2014/09/21(日) 19:35:49.05ID:hG2OFVWB
無しの方向ってどうするの?
自然数全体の集合等を扱わないとか、内包的記法を扱わないとか。
3081
垢版 |
2014/09/21(日) 20:23:58.88ID:iz+Z8HKh
自然数全体の集合の部分集合は基本的に表現するのに無限のビットを必要とするので。
遅延評価とか使えばある程度ごまかせるかもしれないけど、
遅延評価つかっても無限集合の包含関係とかは計算不能な場合もあるので、無限集合は扱わない方向で。

内包的表記は有限集合だけに使えるようにするとか。
309デフォルトの名無しさん
垢版 |
2014/09/21(日) 20:27:48.01ID:WCtTxfaP
∞という数・文字をあつかえばいい。
{ 2n | n=1,・・,∞}は無限集合。
310デフォルトの名無しさん
垢版 |
2014/09/21(日) 20:40:29.63ID:WCtTxfaP
無限大を扱うのも無限小を扱うのも似通ったもので。1/xで反転するので。
時空間で無限小を扱わない量子重力理論を思い出した。




時空の原子を追うループ量子重力理論  L.スモーリン(カナダ・ペリメター理論物理学研究所)

私たちは空間も時間も連続したものだと考えているが,実は大間違いかもしれない。
相対論と量子力学の統合を目指す新理論によると,「時空の原子」が存在する。
アインシュタインが果たせなかった難問解決の道筋が見えてきた。
量子力学と一般相対論の基本原理を注意深く組み合わせることで,「ループ量子重力理論」が生まれた。
この理論によると,空間は個別の小さな塊からできていて,最小の塊の体積はおよそ1立方プランク長(10-99cm3)だ。
時間の進みは飛び飛びで,その最小単位はおよそ1プランク秒(10-43秒)となる。
ループ量子重力理論は純粋に理論的な研究の成果だが,実際に検証できる可能性がある。
例えば,空間の構造が離散的だとすると,そこを伝わる光のスピードは波長によってわずかに異なる。
この観測が可能な天文衛星が計画されており,時空の離散的構造から生まれる効果が近い将来に確かめられるだろう。
http://www.nikkei-science.com/page/magazine/0404/loop.html
311
垢版 |
2014/09/21(日) 20:47:19.79ID:iz+Z8HKh
>>309
簡単にいうけど、実際に実装するのは結構難しいんじゃないかな。
312デフォルトの名無しさん
垢版 |
2014/09/21(日) 20:49:08.07ID:WCtTxfaP
量子重力理論でフリードマン方程式に到達 ―築き上げられた「ミクロからマクロへの架け橋」

「ビッグバンの只中に何が起こっていたのか」ということについては、現行の物理学では説明を下すことができない。
この二つを統合させた「全方位的な」理論 が――量子重力理論が ――求められているところであり、研究が進められている。
この度、ドイツとカナダの研究チームによってPhysical Review Lettersに発表された重大な発見は、まさにこの路線に沿ったものだ。

発表された理論によれば、空間はこれ以上分割することのできない、ほんの小さな「土台、構成要素 (building blocks)≒ 素空間」からできているという。
この着想を出発点として彼らが到達したのは、宇宙論の方程式のなかでも最も肝要なものの一つとして見なされている「フリードマン方程式」だ。
今回の成果は、量子力学と相対論が実際に統合可能であるということを示している ――
http://livedoor.blogimg.jp/dogon23/imgs/a/4/a4fed584.jpg

アインシュタインによる一般相対性理論では重力が扱われており、言うなれば「マクロな世界」を一般的に記述するのが相対論だ。他方、量子力学が扱うのは原子や素粒子といったような「ミクロの世界」だった。
両理論ともに、それぞれの縄張りの領域では成功を収めてきたが、プランクスケールのような極限的な状況においては破綻してしまう、という難点が指摘されていた。

水が原子から構成されているのとまったく同じように、空間はある種の「原子」から ――素空間から ――構成されているのではないか、とOriti氏は想像している。
そして、二つの理論を統合することのできるような新たな理論ではこの「空間の原子」を記述することが切に求められるというわけであり、その理論が冒頭でも触れた「量子重力理論」だ。

アインシュタインの相対論では、時空は連続的なものとして捉えられている。
しかし、Oriti氏らによる数学的なタスクでは、空間を極小の「素空間」へと分解して、これに量子力学を適用させることが試みられた。
それにより空間に、ひいては空間を記述する相対論に量子力学を応用してみる、というのがチームの企てだった。
http://livedoor.blogimg.jp/dogon23/imgs/7/2/7207d807.jpg
http://blog.livedoor.jp/dogon23/archives/31545793.html
313デフォルトの名無しさん
垢版 |
2014/09/21(日) 22:44:17.86ID:eogfeBgw
>>308
>無限集合は扱わない
>内包的表記は有限集合だけに使えるようにする

こういうのはどうするんだ?

p(a,b) : a,bは(0以外の)自然数で、aはbで割り切れる
としたとき、
{x|p(x,1)} = {1,2,3,…}
{x|p(1,x)} = {1}
2014/09/22(月) 01:03:15.50ID:SEYHtX5N
>無限集合は扱わない方向で。

オートマトンが受理する列の集合が無限集合になることもあるけど
それも扱わないのか?
>>83
2014/09/22(月) 01:29:01.36ID:1b5tK9XE
ZFC
2014/09/22(月) 01:30:24.14ID:1b5tK9XE
ブール代数
2014/09/22(月) 01:32:50.90ID:1b5tK9XE
3値論理
■ このスレッドは過去ログ倉庫に格納されています