数学が気になる全てのプログラマへ!!『グッド・マス』が日本語で出ます

対象をかなり大きくしましたがオススメしたい気持ちは本当ですよ :)

アフィリエイトリンクはウィジェットのデザインが良いので使ってるだけです. アフィリエイト無しのリンクはこちらです.

『グッド・マス』とは

MARKCCによる数学ブログの Good Math, Bad Math, この記事をまとめて本として出版されたのが Good Math です. MARKCCさん自身はプログラマであり, その視点から数学を題材にたくさんのブログ記事を書いています. その語り口は軽妙といった感じで堅苦しくなく, MARKCCさん自身のワクワクした気持ちを文章に乗せています.

『グッド・マス』の面白いところ

各部ごとに見どころがあるのですが, この本の面白いところは部を跨いで題材が関係を持つところです.
第I部で出てきたペアノ数が第IV部でPrologで実装されたり第VI部でチャーチ数として登場したり.
第IV部で出てきた一階述語論理が第V部の集合と強い結び付きがあったり.
第II部の黄金比でちらっと出てきた連分数が, 第III部でさらに話が広げられたり.

私はこういう「一見異なる見た目のものが実は同じものだった」という話が大好きで, これが数学の魅力の1つだと思っています.

この本では関連のある話題への参照があるので, それを辿って色んな部を読んでみるのも面白いかもしれません.

(個別の話になると長くなってしまいそうなので, それはまた別の機会に語ろうと思います.)

続きを読む...

位相のイメージ (その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 というものが登場してきました.

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

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

続きを読む...