関数プログラミング入門・一人読書会 (3)
「関数プログラミング入門」の練習問題をやっていきます
- 作者: Richard Bird,山下伸夫
- 出版社/メーカー: オーム社
- 発売日: 2012/10/26
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 28回
- この商品を含むブログ (5件) を見る
今回は1.4.1〜1.4.7
1.4.1
hの型は,
h :: Integer -> Integer -> Integer
fとgの型は f :: Integer -> Integer
,g :: Integer -> (Integer -> Integer)
なので,(・)
の定義に照らすとf・g
は型が整合しない.これを考慮すると,正しいのは
h x = f・(g x)
である
1.4.2
delta
をカリー化した型は
delta :: Float -> Float -> Float -> Float
1.4.3
log' :: Float -> (Float -> Float)
1.4.4
関数の名前をInteg
とすると,まず積分される対象の関数の型は Float -> Float
.よって,
Integ :: (Float -> Float) -> Float -> Float -> Float
1.4.5
前者については,与えられた関数に0を適用して,その数にsquareを適用するような関数ZeroSquare
は,
let ZeroSquare f = square ( f 0 ) ZeroSquare :: (Integer -> Integer) -> Integer
後者は,本文中の twice
が例である
1.4.6
-x
はxの符号反転を示すので,3つ目は偽.また,+
と×
は交換法則が成り立つ.よって2つが真.
1.4.7
uncurry f (x, y) = f x y
curry (uncurry f) x y = curry ((x', y') -> f x' y') x y = ((x', y') -> f x' y') (x, y) = f x y uncurry (curry f) (x, y) = uncurry (x -> y -> f (x, y)) (x, y) = (x -> y -> f (x, y)) x y = f (x, y)
関数プログラミング入門・一人読書会 (2)
前回,読み始めたというエントリを書いて,その後音沙汰無い状態になってしまっていたのだが,実は本を紛失していて止まっていた.
- 作者: Richard Bird,山下伸夫
- 出版社/メーカー: オーム社
- 発売日: 2012/10/26
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 28回
- この商品を含むブログ (5件) を見る
発見したので再開する.今回は1.3.1,1.3.2.
1.3.1
multiply (0, infinity)
を簡約すると以下のようになる.
multiply (0, infinity) => if 0 == 0 then 0 else 0 x infinity => 0
同様に,multiply (infinity, 0)
を簡約すると
multiply (infinity, 0) => if infinity == 0 then 0 else 0 x infinity
ここで,==
は両辺の値を正規形まで簡約する必要があるので,無限ループとなり,答えは返ってこない.
1.3.2
h
が正格であるための条件は,h ⊥ = ⊥
であること.
h ⊥ => f ( g ⊥ ) => f ⊥ (∵ gは正格) => ⊥ (∵fは正格)
よってh
は正格
「ビットコインはどのようにして動いているのか? 」を読んだ
大石哲之 著「ビットコインはどのようにして動いているのか? 」を読みました
計算機科学の素養のない人にもわかるようにビットコイン(と仮想通貨)の原理が説明されています.すでに計算機科学の基礎知識(P2P,ハッシュ関数,公開鍵暗号方式)があれば,容易に読み進められ,軽い読み物として良書だと思います.
計算機科学の素養のない人が読んで「わかりやすい」かというと…微妙なところですね.ハッシュ関数や公開鍵暗号は,説明を受けても直感的にピンと来にくいところがあります.ハッシュ関数が一方向関数であることの意味,公開鍵暗号の公開鍵と秘密鍵などは,あくまで数学的な概念であって現実のモノにたとえて理解するのは厳しいものがあります.
技術にフォーカスして書かれているので,社会的/経済的影響について考えるには別の書籍を読む必要があるでしょう.そのための基礎としても有用です.技術がわかっていなければ(例えば,「Bitcoinの埋蔵量に上限があるとは具体的にどういうことか」),議論もできません.ただし,ビットコイン推進派の著者が書いているので,やや見方が偏っている気はします(全体的に問題点とされるところへの言及が軽い).
考えたこと
この本を読んで,ビットコインについて幾つかのことを考えました.
ビットコインについて話をする際は,以下の3つの論点を切り離さないと混乱してしまいます.
- 「Bitcoin」という特定の仮想通貨が普及するか? → Bitcoinが広まるか? →投機対象としてはBitcoinはどうか?
- 亜種も含めて,仮想通貨全般(さらに,それらの技術的/経済的/政治的側面それぞれ)はどうか?
- ブロックチェーンなどの,要素技術の応用可能性はどうか?
最初に述べておくと,Bitcoinの取引価格の上昇・下降に一喜一憂するのは単なる投機で,株・FX・先物取引と何も変わりません.この側面は無視します.
本書を読み終わった現在,自分の感想としては
- 「Bitcoin」という特定の通貨については,いずれ終焉するだろう(限界が見えている)
- 仮想通貨全般については,特定の分野で使われる仮想通貨(例えば銀行間決済)が開発され普及するだろう.一般的に広く使われるものが登場するかどうかはわからない.
- ブロックチェーンについては,現在のBitcoinの制限をもたらしている技術的制約が解消されれば,様々な応用範囲が広がっていると思う.
以下,もう少し議論を書いてみます.(警告:正確な知識のためには,きちんとした文献を参照してください.以下の文章は,私の現時点での理解を書いたものです)
仮想通貨の具体的インスタンスとしてのBitcoinが行き詰まるだろうと予想するのは,主に3つの理由からです.
1つは,スケーラビリティが無いこと.主に4つの指標からの性能が重要となるはずです.
スケーラビリティ問題については,現時点での私の知識は非常に限られているので,詳細な議論は避け,[3-5]などに譲ります.
現時点で思うのは,Bitcoinは現在の糞すぎる国際送金インフラに対するプレッシャーにはなり得ても,本流にはならないのではないか,ということです.要はVISAとPaypalに勝てるか?ということ.そして通常の銀行間決済も本腰を入れて競争してくるでしょうから,Bitcoinについてはなかなか厳しい戦いになるだろうことは容易に想像がつきます
現時点において,「Bitcoinなら国際送金が手数料無料で即時」というのは,単にBitcoinが国家によって通貨として認められていない事によって法律の抜け穴を通っているだけです.Bitcoinが広く認められていくなら,Paypalが直面しているのと同じ法的な規制に束縛されます.さらにBitcoinが枯渇した時,果たして手数料がどれくらいになるか?という問題となります.結局,決済とはマイニングと同等の計算力が必要なのですから,即時決済したかったら高い手数料払ってね,手数料ケチりたいなら時間かかるよ,となります.さらに怪しい取引所に対する消費者保護も重要ですから,そこまで安価で便利な選択肢になるとは思えません.
また,[2]で大石さん自身が書かれているように,現在の仕様では未承認段階の取引は取り消しができるそうですから,取引が確認したのを見極めたかったら10分待ち,さらにグローバルな支払いを自分の目で確認する必要があるということです.取引所を信用するならそんなことは不要なわけですが,それは長い目で見れば取引所の手数料増加に繋がるし,結局のところ現在我々が銀行を信頼しているのと何も変わりません.
Bitcoinのスケーラビリティに関する日本語の情報を見ている限りでは,「解決策」として「データ量を25%まで圧縮」とか,「容量を8倍」とかいう数字が出てきているのですが,原理的に2桁くらいキャパが増えるようなことをしていかないと焼け石に水じゃないかなあ,と直感的に感じます.私がHPCをやっている人間だからかもしれませんが.
2点目.Bitcoinには,発行上限が定められています(詳細は[1]を参照).そして,次の項で述べるように,少なくとも現在は,Bitcoinの開発者=それなりの量の保有者であるということです.空想ですが,現代の経済が金本位制に戻った時,経済はどうなるのでしょうね.もし仮にBitcoinが主要通貨として流通するようになったとすると,現代社会(良くも悪くも)を支えている経済を,「Bitcoin本位制」を軸にもう一回全部考えなおさなくちゃいけなくなります.
3点目,すでに述べましたが,開発者=Bitcoin大量保有者なので,技術的な判断として「Bitcoinの発行総量を増やす」という決断ができるのかどうか疑問です.これはマイク・ハーンの離脱宣言の中にも書かれていますが,結局のところ,「国家による管理」が「コードの開発者による管理」に変わっただけ,というように見えます.Bitcoinの意思決定は計算力による多数決だそうですが,現代の国家だって(いろいろあれど)多数決で決まっているわけで,それが現状の国家より良い物になる気はしません.むしろ,計算能力による多数決って,一昔前の「選挙権は税金を○○円以上納めた男子」みたいな選挙制度と同じなんじゃないか?と思います.
開発者の方々疑うわけではありませんが,結局のところ皆人間ですから,インセンティブに従って動くでしょう.ここでのインセンティブとは,「Bitcoinの総量が増えれば価格は下落する」という当たり前の話です(実際に価格が下落するかどうかではなく,発行を打ち止めにした場合と比較して目減りする).現状での開発は主に技術的興味にドライブされた有志の個人が行っていますが,これが何かの拍子に組織になったと考えてみましょう.組織が,自らの財産を毀損してまでBitcoinの仕様を変更して発行を再開するという決断をするどうかはわかりません.仕様通り打ち止めになる可能性が高いのではないかと予想します.
私がそれなりのスジのそれなりの人間だったら,Bitcoinの開発者の何人かに膨大な報酬(億単位)を秘密裏に支払い,Bitcoinの総量を増加させないような方向へ開発のdirectionを誘導するように圧力をかけるでしょう.というかすでにあってもおかしくありません.
ひとまず結論
いろいろ否定的なことを書きましたが,仮想通貨という技術自体はこれからも発展していくだろうと思いますし,決済の1つの手段として国家管理の通貨と併存していくだろうと思います.上で言及したような技術的な制約が解決されるとしても,現在のBitcoinからすべてスムーズにmigrateできるとはちょっと考えにくいですし,もし移行が発生するなら大騒ぎになるでしょう.株の上場廃止のようなものです.
個人的にはBitcoinよりもblockchainの方に興味があります.全体として面白く重要な技術であることは間違いないので,これからも勉強していきたいと思っています.
次はオライリーのBlockchain本を読む予定です.
[1] ビットコインの発行上限と、採掘量が減っていく仕組みとは具体的にどういうことか?
[2] マイク・ハーンのビットコイン失敗宣言は本当か?価格は今後どうなるのか?【Weekly レポート017】 | ビットコイン&ブロックチェーン研究所
[3] ビットコイン、スケーラビリティ問題への対応は急を要する | BTCN|ビットコインニュース
[4] ビットコインのスケーラビリティと持続性に関するメモ | 日本デジタルマネー協会 / ビットコイン / Bitcoin