位相のイメージ (その2) – 位相の定義

位相のイメージ (その1) では位相に関わる概念の全体像について語りました. いわば全体地図の上でスタート地点とゴール地点とそこを結ぶ道筋を説明しました. この記事ではもう少し詳細に各概念の定義を比較していこうと思います.

各種定義

これから位相の話をするために, まず各種概念の定義を見ていきましょう. と言っても, 大学の講義のように形式的な定義を紹介するだけでは, この記事を書く意味が無いので具体例も交じえて説明していきます. 例には4点集合 \(S = \{1, 2, 3, 4\}\) を使います. これは要素が4つの集合です. 抽象的な概念を考えるには, これくらい小さな簡単な例の方が良いのです.

続きを読む...

位相のイメージ (その1)

大学数学の講義で比較的早い段階で勉強する科目に「位相」(topology) があります. 他の大学数学の科目と同様, 高校数学とのギャップに苦しむ人が多いんじゃないかと思います. そんな人に向けて, 自分が持った位相のイメージや解釈を書き出していってみます. 位相を理解する手掛かりになれば嬉しいです.

使用する教科書

私自身が大学の講義で教科書として使った, 裳華房の数学シリーズ『集合と位相』(内田伏一・著) を使用します.

手元に無くても困らないように記事を書くつもりですが, 自身で証明の細かいところを追ったり, これから記事として書く内容の裏付けを取ったりするのであれば, 是非買ってください. きちんと習得すれば3000円弱の出費は安いものだと思います.

続きを読む...

2015年のまとめ

2015年のまとめ的な記事が流れてきたので, その流れに便乗して今年のまとめ記事書いてみます.

続きを読む...

Java に独自の型検査処理を追加する方法

これは 言語実装 Advent Calendar 2015 の 14 日目の記事です.

Pluggable Annotation Processing API (JSR 269) による Functor の型検査 という以前に書いた記事を, Advent Calendar 用に再構成, 要約したものです.

Note

この記事では主に型情報にアクセスする方法について書きます. それ以外の部分は上記の元記事を参照してください.

Java で函手を書いてみたかった

そもそもは「Java で函手を書く」という無茶をしてみたかっただけです. 無茶は承知の上で, 書こうとする過程でどんな障害があって, どうやって回避できるかを探りたかったのです.

函手について解説するのはこの記事の目的ではないので, 厳密な定義などについては触れません. 函手 (関手, Functor) の定義は 独習 Scalaz — 圏の例 あたりを読んでください.

何をしたかったかをソースコードで表せば,

import java.util.function.Function;

public class MyFunctor<A> {

    public <B> MyFunctor<B> map(Function<A, B> morphism) {
        // ...
    }

}

こんなメソッド map を持ったクラスを実装するのがゴールです.

続きを読む...

Pluggable Annotation Processing API (JSR 269) による Functor の型検査

https://bitbucket.org/cocoatomo/categorical/ で開発している, 注釈による型クラスの実現手法の解説です.

発端

うらがみさんが Scala による Functor の実装をしていて,

trait Functor[A, F[_]] { self: F[A] =>
  def map[B](f: A => B): F[B]
}

(https://github.com/backpaper0/sandbox/blob/134a658c42eb14354ce53fa95931d5a32672fc74/functor-applicative-study/src/main/scala/functor-applicative-study.scala#L5-L7 より引用)

興味深かったので Java でもなんとかならないかと試していました.

続きを読む...

applicative 函手は strong lax monoical 函手

前回 (圏論における applicative functor) の続きです.

タイトルから想像できる通り, 調べる対象が applicative 函手から strong lax monoidal 函手に変わっただけで, まだ完全には理解してません.

読んだ論文

酒井さんからご紹介いただいた “Applicative Programming with Effects” [Conor_and_Ross_2008] という論文を読んでみます.

Abstract に “In this paper, we introduce Applicative functors” とあるので, この論文で applicative functor が初登場したのかな??

論文の構成

節の内容を要約するとこんな感じになります.

  1. Introduction

    applicative が隠れているところをいくつか紹介

  2. The Applicative class

    Haskell の Applicative 型クラスの定義

  3. Traversing data structures

    Traversable 型クラスは Applicative 型クラスから作れる

  4. Monoids are phantom Applicative functors

    Monoid 函手はファントム (亡霊?) Applicative 函手

  5. Applicative versus Monad?

    ApplicativeMonad の関係

  6. Applicative functors and Arrows

    Applicative 函手と Arrows の関係

  7. Applicative functors, categorically

    Applicative を圏論の視点で見る

    一番知りたかった内容

  8. Conclusion

    まとめ

    Applicative は色んなものの抽象化

    モナドとかコモナドとかアローとかアプリカティブとか圏論の構造の種類がめっちゃ増えてるけど, それで怖がらせるとか不安にさせるのはよくないよね. 表記法がそれぞれ違っててごちゃごちゃしてるのが良くないから, なんとか再利用できるようにしよう. この論文では [| f u_1 ... u_n |] という表記で書いてみたよ.

    みたいなことも書いてあって面白い.

    (ここで使われている mathbb っぽい括弧は, \(\LaTeX\) では stmaryrd パッケージ [stmaryrd]\usepackage{stmaryrd} と読み込むと \llbracket, \rrbracket と使えるそうです.)

続きを読む...

発端

という がくぞさん の疑問があって

平日夜にすごいH本をちょびちょび読む会 (通称: ちょびよみ) での話題にしよう, という流れになりました.

解説準備用のメモとして, この記事を書いておきます.

続きを読む...

圏論における applicative functor

applicative functor って何だ??

平日夜にすごいH本をちょびちょび読む会 17回目 いのちをだいじにしながら「すごいHaskellたのしく学ぼう!」を少しずつ読んでいく という読書会 (?) をやっていて, applicative functor というものが登場してきました.

使い方は分かるのですが, 数学を専攻してた人なので圏論での意味付けが気になって仕方ありません.

そこでこんなふうにつぶやいたところ, 予想以上に多くの反応をもらえました. せっかくなので記録のためにメモっておきます.

続きを読む...

Spark Casual Talk #1 に行ってきました

最近データ解析や機械学習で色々と話題な Apache Spark ですが, その勉強会があるというので行ってきました. 一般枠が 123 人のところに 150 人の申し込みがあり, Spark が注目されているのが分かります.

勉強会の構成は, 発表が 2 つと LT が 6 本で 2 時間というものでした. 名前に casual とある通り, これから Spark に触れようという人でも気軽に参加できる内容だったと思います. (一部の LT は除く^-^;)

イベントページ: http://connpass.com/event/15575/ Togetter: http://togetter.com/li/838406

気になった話題

個人的に気になった話題について書いていきます. 個々の内容については, イベントページにアップロードされている資料や Togetter のつぶやきを参照してください.

DataFrame

メキメキ開発の進む Apache Sparkのいまとこれから: http://www.slideshare.net/hadoopxnttdata/nttdata-spark-casual-talk-1

2 つ目の発表「メキメキ開発の進む Apache Sparkのいまとこれから」で, Spark SQL が使っている DataFrame が紹介されていました. DataFrame は Spark SQL のためだけのものかと思っていましたが, DataFrame API も用意されていて Scala や Python など他の言語からも操作ができるようです. DataFrame には最適化の機能もあり, どの言語で書かれていても最適化の恩恵を等しく受けられるそうです.

Project Tungsten

Spark Summit 2015 参加報告: http://www.slideshare.net/potix2_jp/spark-summit-2015

1 つ目の発表「Spark Summit 2015 参加報告」で, Project Tungsten というパフォーマンス改善の取り組みが紹介されていました. このプロジェクトは, DataFrame で記述された論理計画を実行する部分を高速化しようというものです. 現在のハードウェアの流れを見ているとストレージやネットワークに比べて CPU の高速化が遅れているので, そこを補う方向を目指しているようです.

From DataFrames to Tungsten: A Peek into Spark’s Future: http://www.slideshare.net/databricks/2015-0616-spark-summit

JIRA にプロジェクトの親 issue があり (SPARK-7075 https://issues.apache.org/jira/browse/SPARK-7075) 関連 issue はその下にぶら下がっています.

Notebook

「メキメキ開発の進む Apache Sparkのいまとこれから」で Apache Zeppelin, 「Hueで実現する、SparkとSQLのためのノートブック」で CDH の Hue と複数の発表で notebook の話題が出てきていてかなり気になりました. notebook というのは私が勝手に呼んでいるツールの種類の名前で, だいたい次の機能を備えているものを notebook に分類しています.

  • データの対話的操作
  • コマントの結果やデータをグラフなどの画像で表現

昔からあるもので言えば, Mathematica, Maple, Sage (これは比較的最近) などの数式処理ソフト, 2 つ目の機能を実現するもので言えば Excel などの表計算ソフト, gnuplot などのグラフ化ツールなどがあります.

Spark にはデフォルトで pyspark から IPython notebook が利用できます. IPython は元々は Python の便利な REPL だったのですが, バージョン 0.12 からブラウザを UI とした notebook 機能が追加され, バージョン 4.0 からはそこを Jupyter という別プロジェクトとして発展させていくそうです.

上の機能に加え notebook ツールにあると便利な機能はこんなところです.

  • 実行したコマンドの記録, 再現可能な形式での保存, 再実行

    gnuplot の save, load コマンド相当のもの: http://lowrank.net/gnuplot/intro/basic.html#exit

  • 複数人での画面の共有

    複数人でチャットしつつ, それぞれがコマンドを入力し, その結果を共有できたり.

    Google Wave がイメージに近かったのですが, なんで死んでしもうたんや……

なぜ私が notebook ツールに注目するかと言えば, それが分析とレポーティングに役立つツールだからです. くだけた言い方をすれば, notebook ツールはあるデータを自分や他の人に分かりやすく見せ, 対象について理解を深め, 何らかの行動につなげるために役立つ重要なツールだと思っています.

色んなことを知ることができた勉強会だったので Spark Casual #2 にも参加してみようと思います.

ではでは.