ML Day#2を開催しました。 ML勉強会という名前にしていたときから数えて通算4回目です。

今回もドワンゴさんのセミナー室をお借りしました。 この規模のセミナー室が便利に利用できるのは本当に助かります。

発表の紹介

発表枠6 + LT枠5のあわせて11もの発表がありました。発表者の皆様に感謝です。

他のコミュニティだと割と発表者の確保に苦労しておられるようですがML勉強会からあまり困ったことがありません。

以下の紹介は私の理解ですので何か訂正があったらツイとかで指摘ください。。。

ラベルなしオプション引数のための型システムと型推論

unlabeled-opt-args.pdf - Google ドライブ

最初はSATYSFIでお馴染みの@bd_gfngfnさんの発表でした。 この発表はSATYSFI向けに、オプション引数のための型システムと型推論を考えてみたという話でした。

Latexではラベルなしのオプション引数が多用されており、SATYSFIのために同じような仕組みが必要だと考えたようで、 OCamlにはラベル付きのオプション引数が実装されておりますが、これには少し扱いづらい性質があると考えているそうです。それは、

最後の引数をオプショナルにできない 型推論の完全性を満たさない 例えば let f g = (g ~foo:0 true, g false)

そのため、ラムダ計算に

ラベルなしのオプション引数をとるラムダ抽象

オプション引数の関数適用

オプション引数がないことを表す適用（！）

などを追加し意味論や型システムを考えたという内容でした。

この発表の中でReferしているOCamlのオプション引数の論文は[ Furuse & Garrigue 1995]ですが、 この著者の古瀬さんが来られておりちょっと緊張気味に喋っていたのが印象的でした。 古瀬さんの仕事は今回でちょくちょく触れられており、世界狭いなと思いました。。。

gfnさんの発表は典型的なアカデミックスタイルで、問題の発見・定式化の流れがすごくわかりやすかったです。 秋で修士を卒業されたようなのでスシを奢らなければ。。。

「型推論の完全生を満たさない」

あー

#ml_day — κeen (@blackenedgold) 2018年9月16日

気がかりな点:

部分適用の扱いが非直感的

e0 e1 ~x:e2と(e0 e1) ~x:e2 が別物になる

#ml_day — κeen (@blackenedgold) 2018年9月16日

[Furuse & Garrigue 1995]

あれ、Optional引数ってキャミバ様の仕事だったの

#ml_day — κeen (@blackenedgold) 2018年9月16日

既存手法の大本の論文の著者がいる系勉強会 #ML_Day — ころ (@koropicot) 2018年9月16日

循環証明の話

ML-Day-#2.pdf - Google ドライブ

秋津 早苗 (@akitsu-sanae)さんの、証明の話です。

議論は循環証明とは何かということから始まりました。 循環証明とは、

構造的証明（普通の証明） + 循環 + 健全性のための条件`

であるとし、循環した証明を許すと導出の途中に出てきた判断式を再利用できて便利だけど、循環を無限に許すと明らかに間違っている判断式が証明できてしまうために、制約をつけるそうです。 健全性のために、「循環が無限回使われない」ために循環を無限回つかうと何かしらの無限効果列が構成できて、それが整礎であることを示すそうです。

帰納法と無限降下法は言っていることが同じだという説明をしていて、個人的にはそうだなというお気持ちになれました。

次秋津さんから循環証明に話

#ml_day — κeen (@blackenedgold) 2018年9月16日

証明規則はlocally soundであることが求められる

#ml_day — κeen (@blackenedgold) 2018年9月16日

循環: 同じ判断式が出てきたら再利用できる

#ml_day — κeen (@blackenedgold) 2018年9月16日

これって余帰納法?(何も知らない顔)

#ml_day — κeen (@blackenedgold) 2018年9月16日

#ML_Day こういう循環を作って正しい！ということはまずそう

|- 1 = 2

--------

|- 1 = 2 /\ 1 = 2

--------

|- 1 = 2 — 光のインターネットの闇 (@no_maddo) 2018年9月16日

Cyclisthttps://t.co/khb8KBRD5r

ngorogiannis/cyclist: A cyclic theorem prover framework.https://t.co/JcanaVeiON#ML_Day — でこれき (@dico_leque) 2018年9月16日

#ML_Day 一階不動点論理の循環証明体系とプログラム検証への応用https://t.co/HLZF1Enl1S — 光のインターネットの闇 (@no_maddo) 2018年9月16日

以前循環証明の論文を見かけたときは何に使うのかよく分からなかったけどプログラム検証に使おうという話があるというのは面白そう #ML_Day — 梅田 (@umedaikiti) 2018年9月16日

Inside Pattern Machings

Inside Pattern Matchings | κeenのHappy Hacκing Blog

きーんさんだよー。

MLのパターンマッチがどういうふうに実装されているのかのサーベイの話でした。パターンマッチを実装する方法はだいたい３つあるそう。

愚直なIf分変換

決定木をつくる

backtracking automata

そのうちバックトラッキングで実装する方法について解説していました。

進捗魔神の進捗を煽ってしまっいました。てへっ。

パターンマッチを実装する話 #ML_Day — だめぽラボ@技術書典5 か38 (@mod_poppo) 2018年9月16日

パターンマッチは

直積→横

直和→縦

ネスト→奥

に伸びる #ML_Day — びしょ〜じょ (@Nymphium) 2018年9月16日

これかな？ < Inriaにあった論文 / Fabrice Le Fessant and Luc Maranget. 2001. Optimizing pattern matching. SIGPLAN Not. 36, 10 (October 2001), 26-37. DOI: https://t.co/rYoOktPMhS #ML_Day — NaOHaq(仮性ソーダ) (@NaOHaq) 2018年9月16日

decision treeの欠点：パターンがコピーされる。コードがかさむ #ML_Day — だめぽラボ@技術書典5 か38 (@mod_poppo) 2018年9月16日

ifのチェーン: 素朴、遅い、網羅性は別に

decision tree: パターンから決定木、横幅と深さに線形、パターンがネストしたケースで実装が難しい, orだとdiagram

#ML_Day — wraikny(れいにー) (@wraikny) 2018年9月16日

Dive into Algebraic Effects

びしょ～じょさんのAlgebraic Effectsの紹介です。Algebratic Effectsとは”継続を持てる例外”のようなもので、例外ハンドラの中みたいなものの中で perform (Say "Hello") というプログラムが発火すると、披露法はその周りの継続をひろえるようで、 | effect (Say msg) k -> print msg; k() というふうにハンドラ部分が書けるようです。

これにより、定義と実装が分離されたりハンドラが合成できたりモジュラなプログラミングを支援してくれます。また限定継続が利用可能で、例外よりも強力です。 MultiCore OCamlやEffで実装されており、色々遊ぶことができそうです。

Algebraic Effects: イメージとしては継続を持てる例外

#ml_day — κeen (@blackenedgold) 2018年9月16日

effest Say : string -> unitはstringを受け取ると外の継続にunitを渡すやつ（継続は unit -> 'a 的な #ML_Day — でこれき (@dico_leque) 2018年9月16日

handle 〜 with で Say のとき print_endline msg; k () してる #ML_Day — でこれき (@dico_leque) 2018年9月16日

[https://twitter.com/yyu/status/1041205861945815042:embed]

ん、multicore OCamlにAlgebraicEffectsあるのか

#ml_day — κeen (@blackenedgold) 2018年9月16日

個人的には Algebraic Effects 入門はこの invited tutorial paper が分かりやすかったです: "An Introduction to Algebraic Effects and Handlers" (Pretnar, 2015) https://t.co/loQ2sOUnXa #ML_Day — ねっけつ (@nekketsuuu) 2018年9月16日

Algebraic Effect、なるほど解らんかったけど、SOS(Structural Operational Semantics)とかの定義ってどうなってるんやろか？ ネスト割込みをサポートした(但し継続は表現できない) Meije Calculus を思い出すなどしました。 https://t.co/wZDEJriCVr#ML_Day — もっちぃ (@tanimocchi) 2018年9月16日

Multicore OCamlの継続はoneshotなの知らんかった #ML_Day — Yuki Kodama (@kuy) 2018年9月16日

#ML_Day 楽しそうだ。algebraic effects はパターンの網羅性チェックないんですかねと思った記憶。Javaのチェック例外みたいになる？ — Keigo Imai (@keigoi) 2018年9月16日

algebraic effectでハンドルされなかったものはそのままエフェクトの型に残るだけなはずです。

#ML_Day — κeen (@blackenedgold) 2018年9月16日

OCamlのトップレベルあれそれ

OCamlのトップレベルあれそれ from nomaddo from

わたくしの発表。OCamlにはCompiler-libsという形でコンパイラの内部モジュールを外に出しているものがあり、それを使うとevalとかできるよという紹介でした。

モチベーションとしてはOwlを見ていると、彼らはかなりトップレベルを使っているようで、それもevalとinstall_printerやadd_directiveを組み合わせてやっていくすごいスタイルのプログラミングでびっくりしたというのがあります。 OCamlのトップレベルとか結構適当なインタプリタで実行されているというお気持ちだったのでびっくりしました。

OCamlにはトップレベルをいじる機能がある #ML_Day — κeen (@blackenedgold) 2018年9月16日

Haskellで依存型とコンパイル時インラインlisp

先程発表させていただいた資料です！

> Haskellで依存型とコンパイル時インラインlisp https://t.co/XkYAnzoNvr — あいや🤘🙄🤘技術書典5@か74 (@public_ai000ya) 2018年9月16日

あいやさんのHaskellで依存型使ったりコンパイル時にlisp起動したりするはなし。

このへんわたしがあまり詳しくなくてコメントできない。。。

#ML_Day Haskell と Lisp が ML？？？ — あっきー（慢性五月病） (@ackey_65535) 2018年9月16日

Template HaskellでLispプログラムをパースするのか #ML_Day — でこれき (@dico_leque) 2018年9月16日

仮想通貨デザインにおけるML言語族適用の展望

docs.google.com

OCamlハッカーのcamloebaさんの発表です！ わたしも卒論やM1の学会の際の節々でおせわになりました。

ワタシがTwitterで「MLは金にならんから勉強会が平和」みたいなことを言っていたらそれに反応して頂いたようで、「MLはカネになるぞ」という話からスタートしてオチが面白いのでぜひスライド見てください！！

仮想通貨はバグ即ウン億円の損失につながるようで、これから仮想通貨を安全にするための取り組みに参加されていくようです。

次「仮想通貨デザインにおけるML言語族適用の展望」 by camloeba

#ML_Day — κeen (@blackenedgold) 2018年9月16日

株式会社の登記申請が受理されてないので肩書を出せない

#ML_Day — κeen (@blackenedgold) 2018年9月16日

cameloebaさん

「仮想通貨デザインにおけるML言語族適用の展望」っという話でやろうとしたのですがコンプラ的にやめます#ML_Day — ゆーちき (@yuchiki1000yen) 2018年9月16日

ML → Money Language

『MLは```金'''になる』 #ML_Day — びしょ〜じょ (@Nymphium) 2018年9月16日

Ethのトランザクション記述言語は意図的にチューリングコンプリート

#ML_Day — κeen (@blackenedgold) 2018年9月16日

#ml_day こういう業界の話的なの面白い いままでなかったジャンル — あっきー（慢性五月病） (@ackey_65535) 2018年9月16日

自作SML処理系の進捗

my-sml-compiler.pdf - Google ドライブ

mod_poppoさんの自作SML処理系の話。 人間には三大欲求があって「言語処理系」「エディタ」「OS」「CPU」があるよねー、どうせなら型推論のある実用的なコンパイラを書きたいですよね、というところから話ははじまります。

SML、はじめました | 雑記帳

SMLコンパイラはワタシも昔少し作っていたので気持ちになりました。

「最近C言語コンパイラを作る人が多いがどうせなら型推論のあるSMLを実装しよう」

#ML_Day — κeen (@blackenedgold) 2018年9月16日

ターゲット言語: 適当なスクリプト言語(JavaScriptとか)を吐く

#ML_Day — κeen (@blackenedgold) 2018年9月16日

#ml_day 既にコンパイラ作った人たちからのアドバイスがガチ — あっきー（慢性五月病） (@ackey_65535) 2018年9月16日

言語処理系有益情報が共有されていく#ML_Day — ゆーちき (@yuchiki1000yen) 2018年9月16日

Q. let datatype t = ... in 〜 end とか闇では？

A. あー#ML_Day — でこれき (@dico_leque) 2018年9月16日

SML処理系の研究をしていたよんたさんからのアドバイス

#ML_Day — κeen (@blackenedgold) 2018年9月16日

Q: なんで SMLを選んだのですか？

=> A: 仕様のシンプルなSMLをベースに選んだ



Q: GADT、ほしくなるよ...ほしくなるよ...実装しない...?

=> A: ほしくなってから考えます#ML_Day — ゆーちき (@yuchiki1000yen) 2018年9月16日

OCamlによる無限グラフにも使える ダイクストラ法の実装

fetburnerさんのOCamlで競プロやっている実装のはなし。 ダイクストラ法を使うような問題はよく出題されるのでライブラリを書いたという話っぽいです。

ダイクストラ法の説明が雑w



#ML_Day — κeen (@blackenedgold) 2018年9月16日

カリー化 + 部分評価みたいな実装 #ML_Day — でこれき (@dico_leque) 2018年9月16日

OCamlにはPriority QueueがないがMapを代わりに使える

#ML_Day — κeen (@blackenedgold) 2018年9月16日

compelib/dijkstra.ml at master · fetburner/compelibhttps://t.co/75fjWLOzCw#ML_Day — でこれき (@dico_leque) 2018年9月16日

Hashtblもcompareとか与えられるけど... 実際にはコリジョンがあってO(1)という理想的なことにはならない、かなぁ #ML_Day — らくだの馬 (@camloeba) 2018年9月16日

パターンマッチ指向プログラミング言語Egisonとその上に実装された数式処理システム

Satoshi Egiさんの、Egisonというパターンマッチが強力なS式ライクな処理系の紹介です。

（紹介を書きますが私もわかってない感じがあるので注意して読んでください）

Egisonのパターンマッチについて解説し、パターンマッチ機能を用いて、どういうふうに 数式処理システムを言語上に実装していくのかという話でした。

パターンマッチの機能によって微分演算子の定義やテイラー展開の定義がシンボリックに・シンプルに記述できるという という話をしていたと思います。

Egisonのはなしは初めて聞いたので全くプログラミングパラダイムが違うので新鮮に感じられました。 最近は数式処理を簡潔に書きたという気持ちはすごくわかるので、触ってみようという気持ちになりました。。。

パターンマッチ指向プログラミング言語Egisonとその上に実装された数式処理システム」 Satoshi Egi

#ML_Day — κeen (@blackenedgold) 2018年9月16日

パターンの多相 #ML_Day — κeen (@blackenedgold) 2018年9月16日

「非線形パターンの効率的なバックトラッキング」



#ML_Day — κeen (@blackenedgold) 2018年9月16日

[1808.10603] Non-linear Pattern Matching with Backtracking for Non-free Data Typeshttps://t.co/R6jGu8d4Q7 #ML_Day — でこれき (@dico_leque) 2018年9月16日

テンソルの添字記法とパターンマッチ

#ML_Day — κeen (@blackenedgold) 2018年9月16日

#ml_day Egison は大雑把に考えると簡約規則が定義しやすい言語という感じなのかな — あっきー（慢性五月病） (@ackey_65535) 2018年9月16日

FSDN

もみあげさんのC#/F#のAPIサーチエンジンの話。

コンソール版を作った人の前でWEB版欲しいです！って脊髄反射で言ったら作って!!!って言われたので作ったそうです。

APIサーチエンジンの話に加えて、ボランティア活動なので楽にするためにDBは運用せずに 検索情報のキャッシュをgithub上にそのままreleaseにアップロードしてしまい、起動時にメモリ上に展開する、みたいな話をされていました。 OSS活動はボランティアですからね、、、楽していく気持ち、、、

「FSDN（仮）」 pocketberserker

#ML_Day — κeen (@blackenedgold) 2018年9月16日

すまん OCamlOScope は死んだ... #ML_Day — らくだの馬 (@camloeba) 2018年9月16日

DBを持ちたくないのでmsgpackにかためておく

#ML_Day — κeen (@blackenedgold) 2018年9月16日

#ML_day で @pocketberserker さんとAPIサーチ談義をして同じような問題があることを学びました。OCO復活させたいけどよく考えたらOCamlにはmodule aliasとかが入って解析が簡単じゃなくなって諦めたんだった — らくだの馬 (@camloeba) 2018年9月16日

懇親会の様子

#ML_Day いい話がたくさんあった — コスモ (@cosmo__) 2018年9月16日

全体の感想

私の感想は、レベル高いな！！ という感じでした。

gfnさんの発表から始まりましたが、まず欲しい型システムの性質を考えて定式化して各種の性質を示していくというスタイルが 当たり前だと認識できる集まりはなかなか無い気がします。 それ以外にも、MLがわかってその上で色々なことをやっていく発表ばかりで非常に楽しませていただきました。

ぜんぶの発表枠で質問も活発で、ほぼ質疑の時間を使い切るくらいの程度でした。

発表者だけではなくて、参加者全体のレベル高さが感じられました。

ポケモン金銀のコガネシティみたいな会場の入り方だった #ML_Day — camelry (@fetburner) 2018年9月16日

OCaml 2010 Nagoya と比べるとレベルめっちゃ上がっていて、わ〜と思いました #ml_day — らくだの馬 (@camloeba) 2018年9月16日

どうして闇さん日本語がたどたどしいのw #ML_Day — κeen (@blackenedgold) 2018年9月16日

光のインターネットの闇の人が何か祈りをささげている #ML_Day — NaOHaq(仮性ソーダ) (@NaOHaq) 2018年9月16日

#ML_Day Haskell と Lisp が ML？？？ — あっきー（慢性五月病） (@ackey_65535) 2018年9月16日

起立の上名乗ってから質問するというのを最初忘れてた

#ml_day — κeen (@blackenedgold) 2018年9月16日

今後？

ML Day半年開催をなるべく守っていきたいです。

毎度毎度、会場の問題や発表者の確保の問題がありますが私の気力が続く限りは頑張っていきたいと思います。

まぁ運営も楽なんですよね、ML勉強会から特に何か問題になったことはないです。

わたしも運営と言ってもconpass立てるのと質疑応答の時間に走り回るくらいです。

レベルの高い発表が続くととても嬉しいのですが、初心者の方が入りづらくならないように気をつけないといけないと思いました。 本当はOCamlなどのML入門ハンズオンみたいなのもやってもいいと思っているのですが、体力が必要なので なかなか踏み出せていません。協力していただける方が複数いて、どこかの会社が後援とかしてくれたらやっていくかもしれない。。。。

しめ

発表者の方も勿論ですが、参加して頂いた方々本当にありがとうございました。

会場の確保に協力して頂いたドワンゴ様、@pocketburserkerさんにも大変感謝しております。

ML Dayは参加者の皆様もリテラシが高くてたいへん助かっております。

また半年後のML Dayでお会いできると嬉しいです。。。。