この記事は Haskell Advent Calendar 2023 の7日目の記事です。 zip関数について Haskellには zip 関数というものがあります。この関数は、2つのリストを受け取って、それぞれから取り出した要素を組にしたリストを返します。
前回の記事は魔法のように見えるStateモナドの実装も、順を追って見ていけば理解することは難しくないという話でした。 しかし状態の変更を順番に処理するというような手続き的な考え方にかなり近い構造が、うまくモナドになってくれるというのは少し不思議ですよね。 この記事では タプル (a, b) 関数 a -> b カリー化 curry :: ((a, b) -> c) -> a -> b -> c uncurry :: (a -> b -> c) -> (a, b) -> c といったHaskellの基本的な要素が随伴と呼ばれる関係を構成することを見て、 その随伴からStateモナドが導かれることを説明していきたいと思います。 随伴 二つの圏 C, D と二つの関手 F : C \rightarrow D, G : D \rightarrow C が与えられたとしましょう。 もし GF = {
第1章 圏・関手・自然変換 1.1 集合と写像から 1.2 圏・対象・射 1.3 圏のデータ構造 1.4 関手・反変関手 1.5 忠実関手と充満関手 1.6 自然変換 1.7 Haskの部分圏 第2章 自然変換と圏同値 2.1 関手圏 2.2 圏同値 第3章 普遍性と極限 3.1 始対象と終対象 3.2 積 3.3 余積 3.4 極限 3.5 余極限 3.6 極限の存在 3.7 余極限の存在 第4章 関手と極限の交換 4.1 関手は錐や余錐を写す 4.2 Hom関手と極限 4.3 Hom関手と余極限 4.4 実行可能な例 4.5 極限を関手とみる 第5章 随伴 5.1 随伴とは 5.2 単位と余単位 5.3 三角等式 5.4 普遍射と随伴 5.5 随伴の同値な言い替え 5.6 随伴と圏同値 5.7 随伴の大局的な自然性 5.8 随伴と極限 第6章 モナドとHaskellのMonad 6.1
Codensity という型がある. 定義は以下. newtype Codensity m a = Codensity { runCodensity :: forall b. (a -> m b) -> m b } instance Functor (Codensity k) where fmap f (Codensity m) = Codensity (\k -> m (k . f)) instance Monad (Codensity f) where return x = Codensity (\k -> k x) m >>= k = Codensity (\c -> runCodensity m (\a -> runCodensity (k a) c)) これの何が良いかと言うと, これは以下のようにMonadFreeな作用を持つ. instance (Functor f, Mon
双対的にみる余帰納法シリーズ 1. イントロ 2. 帰納法と代数 3. 余帰納法と余代数 はじめに 帰納法について圏論的な見方を解説した日本語のWebページはそれなりにあるが, 余帰納法についてはみかけない. しかし, Haskellで使われる無限リストは余帰納的なデータの代表例であり, 余帰納法の解説にはある程度の意味があると信じて本記事を書く. 帰納法は知っているけど, 余帰納法って何? という読者が大半かと思われるので, まず本記事では余帰納法の使い方に焦点を当てて余帰納法への導入を行なう. その後, 余帰納法が帰納法の双対になっていることや, 余帰納的な証明手法であるBisimulationについていくつかの記事に分けて解説する(予定). 事前知識 読者が以下のことを知っていることを前提に以降の記事を書く. 圏論についての基本的なこと 圏や関手, 直積, 直和 帰納法についての知識
Programming with Universal Constructions Posted by Bartosz Milewski under Programming 1 Comment As functional programmers we are interested in functions. Category theorists are similarly interested in morphisms. There is a slight difference in approach, though. A programmer must implement a function, whereas a mathematician is often satisfied with the proof of existence of a morphism (unless said
今回勉強する内容 (前説) - OpenQLプロジェクトをご紹介します (ガイダンス:基礎&実用) - 初めてご参加の方向けコンテンツです。 - 量子コンピューターや量子プログラムに関する概略と、量子コンピューターや量子情報を始める上で必要となる 俯瞰的な知識や量子コンピューター関連の状況を取り上げます。 (本題:理論&実践) - 量子情報のための圏論を学びます。 『圏論による量子計算のモデルと論理 』という書籍があります。 この本を読むと、「量子計算は圏論という数学で論じることができる」ことが分かるそうです。 ただ、この本を読み始めるには、前提として圏論の深い知識が必要になるようです。 ※本会の主催者はこの書籍を読み始める知識がなく、量子計算と圏論の関係を 論じることすらできません。そこでこのイベントを企画しました。 この回で取り上げるのは、どなたでも PDF をダウンロードできて、 全
この記事は、 iOSDC Japan 2018 で圏論について話しました + Storyboard/AutoLayout相談会しました - Qiita の続編です。 先週、8月30日〜9月2日にかけて開催された iOSDC Japan 2018 で登壇発表した 「圏論とSwiftへの応用」 の補足になります。 CfP / スライド CfP: 圏論とSwiftへの応用 by 稲見 泰宏 | プロポーザル | iOSDC Japan 2018 - fortee.jp Slide: 圏論とSwiftへの応用 / iOSDC Japan 2018 - Speaker Deck スライドメモ: iOSDC Japan 2018 「圏論とSwiftへの応用」発表スライドメモ - Qiita まとめ: 圏論とSwiftへの応用 @inamiy #iosdc #c - Togetter 動画: https
This is part 23 of Categories for Programmers. Previously: Monads Categorically. See the Table of Contents. Now that we have covered monads, we can reap the benefits of duality and get comonads for free simply by reversing the arrows and working in the opposite category. Recall that, at the most basic level, monads are about composing Kleisli arrows: a -> m b where m is a functor that is a monad.
Hask圏 Haskellをラムダ計算とみなした時のsyntactic categoryをHask圏というのがよく言われる定義である(と思う)。 Haskellのtypeをobject, hom(A,B) をjudgement x:A |- M:B 全体(を適当な同値関係で割ったもの)とみなして圏を作る(このときしばしばjudgementとこのjudgementから作ったfunction λx.M を区別しない)。 さて基本的な結果として次のことが知られている。 Hask#Is Hask even a category? Hask is not a category というわけでHask圏は圏にならないのでそのようなものは存在しない。 Why not? これはundefinedというヤバイ元の存在とcall-by-needの悪魔的評価規則が合わさりこのような現象が生み出される。 主にこの2
層とプログラミング はじめに Haskellは、モナドという圏論用語を言語仕様に採用した初めての実用プログラミング言語です。歴史的には、Godementが1958年に、層コホモロジーの計算のため使ったのが(コ)モナドの最初の例だと言われています。 層は何らかの空間の「形」を代数的に計算するための仕組みで、局所的な性質と大域的な性質の関係を圏論的に表現するフレームワークと言えます。 一言で言えば、層とは関数とその定義域の組の集りのようなものです。いろいろな大きさの鉱物の結晶が積み重なって、地球全体を地層が覆っている様子をイメージするとわかりやすいかもしれません。層を使うと、定義域が重なりあう部分関数の関係と、それらが全体に波及していく様子を、圏論的に、すっきり表すことができます。 層はいわゆる"幾何的論理(geometric logic)"のモデルでもあり、実はモナドも幾何的論理で表現できる
Functor(関手)の話です。 HaskellのFunctorクラスはHask圏からHask圏への関手しか表現できません。 そこで、Hask圏以外の圏についても使える関手のクラスを書いてみました。 よろしくね (*´σー`)エヘヘ #基本的な用語と、HaskellのFunctorクラス 別のところにまとめました この章に書こうとしていた、「基本的な用語の確認とHaskellのFunctorクラス」についての内容は、別の記事にまとめさせて貰いました。 内容としては、「HaskellのFunctorクラスはHask圏からHask圏への関手しか表現できません。」という文章の説明なので、それを読んで「そらそうだろ」って感じなら読み飛ばして次の章を読んで頂いて大丈夫です。 #とびだせ!Hask圏 HaskellのFunctorは、Hask圏からHask圏への関手を表現しています。 しかし、Hask
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く