関数型プログラミング言語Haskell Part34 (694レス)
上下前次1-新
490(1): デフォルトの名無しさん [] 2024/10/04(金) 21:48:55.49 ID:tixO3LDq(13/22) AAS
 λ計算が数学的に正当化されてないというような話はしてなくて、 
 現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない 
 そのλ計算からはみ出す部分をどう正当化させようかという話。 
491(1): デフォルトの名無しさん [sage] 2024/10/04(金) 21:52:13.21 ID:WSIC8Xt5(7/14) AAS
 >>490 
 じゃあHaskellは純粋にただの型付きラムダ計算なんだから、数学的に正当化されてない部分などない 
 おしまい 
492(1): デフォルトの名無しさん [] 2024/10/04(金) 22:03:12.33 ID:tixO3LDq(14/22) AAS
 >>491 
 うーん。例えば、数学は集合論上で展開されているから、集合論があればその上で展開される 
 解析学とか、線形代数学とかいらない、みたいな論法じゃない? 
 この現象は、解析学でモデル化できるけれども、解析学は集合論上で展開できるから、 
 そんなモデル化はいらなくていちいち集合論の言葉で書けばいいじゃん的な。 
 みんなそこに興味あるわけじゃないと思いますよ。 
493(1): デフォルトの名無しさん [] 2024/10/04(金) 22:08:30.14 ID:vLDssEdm(5/9) AAS
 >>484484(3): デフォルトの名無しさん [] 2024/10/04(金) 21:28:05.10 ID:tixO3LDq(9/22) AAS
 λ計算を機械語とかアセンブラと見立てて、λ計算ですべて数学世界を組み立てれば、 
 入出力がある数学的関数も定義できるだろうから、あえて数学的正当性なんて与えようとする 
 理由がわからない、ということだろうと思った。 
  
 プログラムの部分は全てλ計算で組み立てれば完全に同じものが作れると思っているということ 
 だけれども、じゃあ文字列をディスプレイに表示するというプログラムの構成要素である 
 ディスプレイはハードウェア部分だけれども、それはλ計算で組み立てるという範疇にはいるんですか? 
 入らないなら、なにか数学的概念を持ち出してきてそれに対応付けるということをしないといけないんじゃ 
 ないですか? 
 という趣旨のことを書いた。  
横からというか >460460(2): デフォルトの名無しさん [] 2024/10/04(金) 05:46:29.14 ID:vLDssEdm(1/9) AAS
 >>428 
 Haskellの副作用については2つの解釈がある。 
 1.副作用も含めてアクションという単位で値としてみる。 
 (アクションを受け取って、アクションを返す関数) 
  
 2.Haskellは指示書を発行しているだけで、実際に実行するのは数学(Hakell)の外だから、Haskellそのものには副作用が無い。 
 ((末尾にHaskellに値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)  
 書いた者だけど、あなたの疑問は解釈1の「アクションを受け取ってアクションを返す関数」だとざっくりし過ぎて納得いかないって感じでしょうか? 
  
 でしたら、解釈2では納得出来ませんでしょうか? 
 解釈2は、モナドの効能の一つに追加して「数学の世界にアウトソーシングという概念を持ち込む」というものです。 
 モナドの例えとして、床下配線というのがありますが、MaybeやListの様な通常のモナドも、>>=の中に関数適用部分を押し込んで、表から見えないようにしています。 
 (これも、見ようによってはアウトソーシングです。同じ数学の世界なので、隣の席に頼んだ感じですが) 
  
 IOモナドは、>>=の中すら見えない状態で関数適用しているわけですが、 >460 でも書いたとおり、「数学の外(ハードウェア)」で関数適用されていると考えるわけです。 
  
 IOモナドの>>= は、外の世界と遣り取りする受付窓口というわけですね。 
 (実際、バッファの様な振る舞いをします) 
  
 main = do x <- return 0 
 _________x <- return (x + 1) 
 _________print x 
494(1): デフォルトの名無しさん [sage] 2024/10/04(金) 22:14:36.08 ID:WSIC8Xt5(8/14) AAS
 >>492 
 ラムダ計算も集合論上で展開されてるだろ 
 だから、Haskellも集合論の言葉で書かれてるじゃん 
 そんな誰もが分かってるけど、いちいち書いても何の得もないことを話したかったの? 
495: デフォルトの名無しさん [] 2024/10/04(金) 22:16:42.74 ID:vLDssEdm(6/9) AAS
 この場合、IOモナドを使って変数xを書き換えているのではなく、シャドーイングによって同じxという名前の変数を新しく作って、古い x に +1 した値を束縛しています。 
496(1): デフォルトの名無しさん [] 2024/10/04(金) 22:21:54.69 ID:tixO3LDq(15/22) AAS
 >>493 
 ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。 
 モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。 
497: デフォルトの名無しさん [] 2024/10/04(金) 22:27:08.92 ID:vLDssEdm(7/9) AAS
 無理やりハードウェアも数学と言い張るなら、ハードウェアもチューリングマシンという計算モデルなので数学が元と言えなくはない? 
  
 そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。 
 ハードウェアも一定の秩序がある。 
 数学だけが全てではないのかもしれない。 
 何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。 
498(1): デフォルトの名無しさん [] 2024/10/04(金) 22:28:17.05 ID:tixO3LDq(16/22) AAS
 >>494 
 モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。 
 ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。 
499(1): デフォルトの名無しさん [sage] 2024/10/04(金) 22:32:08.56 ID:WSIC8Xt5(9/14) AAS
 >>498 
 その人はHaskellは数学的に正当化されてないけしからんって言ってたの? 
500(1): デフォルトの名無しさん [sage] 2024/10/04(金) 22:34:04.82 ID:WSIC8Xt5(10/14) AAS
 最低限、論文に書いてある正しいこととお前の妄想がはっきり区別できるように感想文を書けよ 
501(1): デフォルトの名無しさん [] 2024/10/04(金) 22:44:05.60 ID:tixO3LDq(17/22) AAS
 >>499 
 はっきりそうは言ってない。 
 プログラムをλ項に対応させて単純化させると、valueからvalueへの全域関数となるけれど、 
 そう考えると、非停止性とか非決定性、副作用といった現実のプログラムにある特徴が失われる(だからそれを何とかしようと読める)。 
  
 >>500 
 そんなことできるほど力量ないです。 
502: デフォルトの名無しさん [] 2024/10/04(金) 22:46:51.98 ID:vLDssEdm(8/9) AAS
 >>496 
 少なくともコマンド系のプログラムは圏をなしますね。 
 Haskellで作ると実感しますが、Haskellに限らず、 
  
 (ユーザーから見て)プログラムそのものが関数になります。 
 Linuxでコマンドをパイプライン処理するのは関数(射の)合成に相当しますし。 
 id相当のプログラムは作れますし。 
  
 ・・・と考えると圏をなすと思うのですが。 
 (GUIプログラムもボタン単位とかで関数と言えますが、合成は…押した順序?) 
  
 例えば 
  
 {(x,2x+1) | x ∈ R} と 2x+1のグラフは同型だと直感的に分かりますが、その関数(射)は数式で表せません。 
  
 圏論では、可換図を受け取って可換図を返すとか出てきますので、{(x,2x+1) | x ∈ R} と 2x+1のグラフを結ぶ関数(射)が人間って言うのも有かな?とか、考えます。 
 (圏論では同型と分かれば(証明できれば)よくて、射の中身には言及しない) 
503: デフォルトの名無しさん [sage] 2024/10/04(金) 22:50:56.01 ID:WSIC8Xt5(11/14) AAS
 >>501 
 なんでラムダ項に対応させると全域関数になるわけ?ラムダ計算は停止しない計算も表現できるモデルでしょ 
 言ってることが意味不明なんだよ 
504(1): デフォルトの名無しさん [] 2024/10/04(金) 22:52:29.23 ID:tixO3LDq(18/22) AAS
 ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。 
 そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる 
505: デフォルトの名無しさん [] 2024/10/04(金) 22:52:30.15 ID:tixO3LDq(19/22) AAS
 ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。 
 そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる 
506: デフォルトの名無しさん [sage] 2024/10/04(金) 22:54:07.35 ID:WSIC8Xt5(12/14) AAS
 そもそもラムダ項は関数ではないし、集合ではあるということはできるけど、それは自然数1は集合であるみたいな話でそれに意義なんてないよ 
507: デフォルトの名無しさん [] 2024/10/04(金) 23:02:32.42 ID:vLDssEdm(9/9) AAS
 >>504 
 >398398(1): デフォルトの名無しさん [] 2024/10/01(火) 22:16:21.15 ID:4kH314XL(3/3) AAS
 モノイドは条件が結合法則だけなので、ほぼ結合法則そのものがモノイド 
 (その割には繰り返しとか数え上げに現れる構造) 
  
 そしてモナドも構造はそっくりなので、入れ物前提のモノイドとも考えられる 
 (モナドの再帰はループ処理でスタックを消費しないし、数え上げは逐次処理と考えられる)  
 じゃ答えにならない? 
508: デフォルトの名無しさん [sage] 2024/10/04(金) 23:02:43.19 ID:6lZW+X9H(2/3) AAS
 流石にこれじゃ関数型界隈の人達にボコボコにされて終わるね 
 やめといた方がいい 
509(1): デフォルトの名無しさん [] 2024/10/04(金) 23:04:12.66 ID:tixO3LDq(20/22) AAS
 βη簡約するとλ項が別の簡約されたλ項になる。この対応関係を数学的関数とみなせると言ってると解釈してる。 
510: デフォルトの名無しさん [sage] 2024/10/04(金) 23:12:30.87 ID:WSIC8Xt5(13/14) AAS
 >>509 
 みなせるって何? 
 ようするにラムダ項は関数じゃないってことでしょ当たり前だけど 
511(1): デフォルトの名無しさん [] 2024/10/04(金) 23:14:09.18 ID:tixO3LDq(21/22) AAS
 全域関数となる理由はわからん。全域関数=数学的関数ということを言いたいんだろうと思ってたけどそこから詰めてなかった。 
512: デフォルトの名無しさん [sage] 2024/10/04(金) 23:22:52.03 ID:WSIC8Xt5(14/14) AAS
 >>511 
 お前が言い出したんだろ 
513: デフォルトの名無しさん [sage] 2024/10/04(金) 23:30:08.11 ID:6lZW+X9H(3/3) AAS
 これがワードサラダか 
514: デフォルトの名無しさん [] 2024/10/04(金) 23:41:03.02 ID:tixO3LDq(22/22) AAS
 すまんね。準備不足だったわ。詰めるところわかったし、 
 詰めるところ詰めることができたらひっそりどっかに書くことにするわ。 
 いろいろコメント参考になったわ。 
上下前次1-新書関写板覧索設栞歴
あと 180 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s