大学院の、少人数の社会的選択理論の授業で先生のコメントから学んだこと。

今学期(大学院2年目の春学期前半)に受けた「社会的選択理論」の授業について学んだことを書いてみようと思う。この授業は指導教員が開講している授業で初回は何名か履修していたが、途中から履修者は指導学生2人だけになったすごく少人数の授業となった。

それなりに専門的なレベルの(コアミクロなどは前提として上での)社会的選択理論の授業を受ける初めての機会だったので、「授業内容もそうだけど、それ以上に社会的選択理論のプロがどう理論に向き合っているかみたいなことも知りたいな」と期待していたが、実際に受けてみて(厳密には補講があと1回残っているが)期待していたことを学ぶことができたのでそれについて書いてみたい。

ーーーーーーーーーーーー

なお、以下の内容は社会的選択理論特有のコツみたいなところもあると思うので、他分野の理論研究(勉強)に応用できるかはよく分からないです。またあくまで研究レベルのコツであるとともに、僕が先生のコメントから勝手に「これがコツじゃないかな」と思ったものにすぎないのでその点はご了承ください。

主要なコツは3つですが、実際にはそれらはどれも同じことを言っており、それは、「この部分を変えたらどうなるかな?(結果は変わるかな、公理の意味合いは変わるかななど)」を常に意識しながら読むということです。

1:「この公理はどこまで弱めても証明が回るかな」を考えながら読む。

「こういう公理(条件)とこういう公理(条件)があるときにはーーーが成り立つ」、みたいな命題の証明を読んでいるときに(実際にはもうすこし複雑だったと思う)、そのときに使われていた公理の1つがtransitivityだった。その証明を読んでいるときに先生が、

「この証明読む限り、transitivityをquasi-transitivityに弱めても証明は回りそうだね(例えば証明において「以上より、x\succ y\  \land  \ y\succ zが得られた。するとtransitivityよりx\succ zが従う。」のような形でしたtransitivityが使われていなければより弱い条件であるquasi-transitivityまで弱められることが分かる)」のようなコメントをしていて、証明を読むときにはちゃんと、どこまで条件を弱められるかとかをそうやって確認するんだなと思った。

これに関連して、さらに「なるほど」と思ったのは、大きく2つのSTEPに分かれている証明を読んだときに、「こっちのSTEPにおいてはtransitivityが強く効いてきているけど、こっちのSTEPにおいてはtransitivityはあまり効いてきていないよね。そうするとtransitivityを弱めたとしてもこっちはほぼ問題なく回りそうで、問題になるのはこっちのSTEPっぽいよね。」みたいなコメントをしていて、

「transitivity弱められるかな」と考えながら証明を読むときに、証明の一箇所で強くtransitivityを使っていることが分かったとしても「それなら弱めるのは難しそうだな」とするだけでなく、もう少し解像度高く、「transitivityを弱めてもこのSTEPはダメだけどこのSTEPはいけるな。ということは弱めた場合にはーーーーになるんじゃないか(弱めて上でこの条件を足せばいけたりするんじゃないか、とか、弱めると得られる結果はこうなるんじゃないか)」のようにチェックしていくものなんだなと思った。

ということで最初のコツは、『証明を読むときには、それぞれの公理が証明のどの部分においてどのように使われているのかを解像度高くみることで、どこまでその公理を弱められるか、弱めた場合には何が起きそうかを考える』です。


2:モデルの設定を読むときには「こういう設定に変えることはできないか?こういう設定に拡張することはできないか?」と想像して、さらに「こう変えた場合にはこの辺をこう調整する必要があるな」まで思ったより踏み込んで考える。

例えば、選択肢の集合Xが有限という設定のときに、無限にしたらどうなるか考えたり、時間が離散のときに連続にしたらどうなるか考えるなど。

また僕は「(社会を構成する人の)有限性を外すとこの部分が回らなくなって最終的なcharacterizationも上手くいかなくなりそうです」のようなコメントしかできなかったが、先生はそれでは足りないといって、「人数が無限であることを許容するとこの部分がダメになってしまうけど、例えば各期に生まれる人数は無限にならないという条件にすれば(トータルで生まれてくる人は無限かもしれないが)大丈夫かもしれなくない?もしそれでもダメな場合にはさらにこうしたらいいかもね?」のように考えたり、また他の場面では「選択肢の有限性を外すとこのロジックが回らず上手くいかないことが分かるけど、有限性を単に外すだけではなくてコンパクト性と連続性まで課しておけば大丈夫かもしれないね」というところまで丁寧に確認していて、「設計を変えるとどこが上手くいかなくなるか(orそのまま上手くいくか)」を考えるだけではなくて、それなりの時間をとって上手くいかない場合には「どの条件を足したりすればいいのかな。またその調整方法はいくつか考えられたりしないかな」まで考えながら読んでいくんだなと理解した。

また、設定のいじり方についても、単に有限性を外すとかだけではなく、「このモデルでは、社会はYESかNoを意思決定するような設定になっているけれど、ここに\emptysetで表される『YESかNOか決定できない』という選択肢も入れたらどうなるかな?このように関数のレンジを拡張した場合には、諸々の公理はどうやって修正したら上手くいくだろうか?また結果は変わるだろうか?」のように考えているのを見て、

最終的には自分も、色々な拡張のしかたを知ることで、あの論文がやっていた拡張のしかたと同じ拡張をこの論文でやるとどうなるんだろうのように、すぐには思い付かない拡張についての知識のストックを貯めておいたり、勘を磨いておいたりして、論文の設定を読んだときに色々な拡張(有限を無限にしてみようみたいな単純なもの以外の拡張)も思いつくようにならないとダメだなと思った。

ということで、2つ目のコツは、「モデルの設定を読むときには、1つ1つの設定の単純な拡張だけでなく色々な拡張の可能性について検討して、その拡張をするとTheoremがまわらなくなるのかとか、公理はどう調整されるべきか(もし公理の調整のしかたが複数種類あるなら複数考える)などまで丁寧に考える」です。


3:公理を読むときには「この公理に似ているけど違う公理としてどのようなものが考えられるか」を意識しながら読む。

例えば行列をinputにする関数があったとして、その関数に関する公理として、行をどう入れ替えても(シャッフルしても)結果は変わらないという条件があったときに、「この公理は、行のシャッフルについての不変性を扱っているけれど、列のシャッフルについての不変性を扱う公理や、行と列の両方をシャッフルしたときに不変性を扱う公理があってそれなりに自然だと思うけど、それぞれの場合で意味合いはどう変わってくるだろうか」と考える。

他にも例えば「任意の個人についてこの情報とこの情報が同じだったらその2人は同じように扱え」という公理があったら、「この情報とこの情報が同じだったらと書いてあるが、この情報だけが同じでも同じように扱えという公理も似たような公理として考えることができるよね」のように考える。このように「形式が似ている公理」を考えることでもとの公理と比較ができるようになり、もとの公理がどういう働きをするかの理解が深まることが分かった。

ということで3つ目のコツは「公理を見たときに、その公理を単純に理解するだけでなく、その公理と似たような形式の公理を考えてそれと比較することでその公理の働きについて理解を深める」です。

もちろん公理を読むときに「この公理を上手いかんじ弱められないかな」のように考えるのも大事だと思いますが(そしてそれも実際にやるべきなのでしょうが)、「弱めよう弱めよう」としすぎずに「形式は似ているけど異なる公理はなんだろう」のように「形式が似ている公理」をいくつか探して、「こっちにした場合とこっちを採用する場合で何が違うんだろう」のように検討するのは意識したことがなかったのでこれからはやっていこうと思いました。





以上が主な3つのコツです。あとはいくつか、コツといえるか分かりませんが「なるほど」と思った話を書いておきます。

4:研究になるアイディアを出したいなら、読み始めから変更アイディアを考えておく。

上に書いたように「ここを変えたらどうなるかな」と考えるときに、あまりに論文の細部まで読み進めてから、「こう変えたらどうなるかな」を考えるのだと、細部に気を取れられて大きなアイディアが出づらくなったりする。そのため割と読み始めの段階からどういう変更がありうるか考えながら読んでおいくのがおすすめらしい。また、その領域における1つの重要な論文を「どこを変えられるかな」と意識しながら読むことで10個くらいアイディアを出して、そのあとで関連するリテラチャーを追ってやられていないことをやる、のような研究の方法は1つの有用なものであるとおっしゃっていた。

5:「このロジックが欲しいからこの公理を持ってきているのか。露骨なかんじに持ってきていなくて上手いな」みたいなことに気づく。

授業において、ある命題とその証明が紹介されたあとに、「どうだったこの理論?どこがすごいか分かった?」と先生から言われたのだが、「んーどこがすごいと言われても、別に公理は自然なかんじだし、証明はすごくシンプルで『ここめっちゃすごい』みたいなところは見当たらないなぁ」と思っていたら、

「この証明はすごく嬉しいかんになっているでしょ(とてもシンプルだし、この命題はchoice functionを使っているけどpreferenceを使うversionの証明とも綺麗に対応しているよね)?これはそうなるように公理を上手く作っているんだよ。だって別に本当だったらこういう公理だったとしても気持ちとしてはいいはずだよね?あえてそうせずに、証明を見越した上で上手く定義しているんだよ」と教えてもらい、

「自分はどこがすごいかをまるで見抜けていないわけだなぁ」と思った(証明に露骨に合わせてあるならそれは分かったと思うが定義は自然なかんじになっていてまるで気づけなかった)。そして、「証明などに都合がいいように上手く公理を調整しているけどあくまでそれが自然なかんじに見えるようにしてある」というのはタチが悪いなと思うと同時にそれを見抜けないようではダメ(「自然なかんじの定義だなぁ」)で素通りせずその巧みさに騙されるようではいけないんだなと思った。

また同じ話として、ある公理を見たときに先生が「これはーーーをインプライすることになるよね(この公理とこっちの公理を合わせるとーーーーをインプライすることになるよね)。要はーーーが欲しかったわけだけど、ーーーをそのまま公理にしゃちゃうのでは露骨だから、規範的にもいいかんじのこの公理にしているわけだね」みたいなコメントしていて、「こういうロジックを回したいけどそのまま公理にしちゃうのは露骨だから規範的にも解釈がいいかんじのこの公理を課すことで上手くやろう」としていることをあるんだなと思い、

「そりゃ著者としてはロジックありきで公理を考えることはあるよな。だけどもちろん露骨だとダメだから自然なかんじになるようにカモフラージュするよね」ということが分かって、特に上手いカモフラージュほど自然だなぁで素通りしがちだと思うので、ちゃんと意識して見抜かないとなと思った。


6:レフェリー対策ってこともあるわけね。

「関数Fがーーーとーーーとーーーーの条件を満たすことと、FがOOOルールとなっていることは同値である」という命題について取り上げられていたとき。当たり前だが、その命題に入る前にOOOルールという概念を定義しているわけだが、その定義において、係数のようなものに関する細かい条件がOOOと呼ぶための条件として課されているのが気になった。

それについて言及したら先生が、

「たしかにOOOルールという概念を、この条件(例えばn>2という条件であるとしておく)は外して広く定義しておくことはできる。でも、その場合はいま注目している命題は「Fがーーーとーーーとーーーーを満たすことと、FがOOOルール(ただしn>2)になることは同値である」のような形式になる。こうしてもいいんだけど、こういう形式の命題になるとレフェリーから『このn>2の条件を変えても成り立つのか?』のようにつっこまれる可能性が高くなったりするかもしれない。もちろん本質的ではないわけだけど、そういうレフェリー対策的な理由もあって定義のところに条件を入れ込んでいるのかもね。」と教えてくれて、

「これはレフェリー対策かもなぁ」という可能性も考慮しながら読む必要が場合によってはあるわけかと思った。

Fin.