タグ

haskellと圏論に関するigrepのブックマーク (24)

  • Haskellのzip関数を一般化すると何になるか

    この記事は Haskell Advent Calendar 2023 の7日目の記事です。 zip関数について Haskellには zip 関数というものがあります。この関数は、2つのリストを受け取って、それぞれから取り出した要素を組にしたリストを返します。

    Haskellのzip関数を一般化すると何になるか
  • ベクトルからリストを作る方法 〜次数付きモナドのカン拡張〜

    ベクトルとリスト 要素を並べたデータ構造を考える時、 ベクトルは長さが予め(型レベルで)決められたもの リストは任意の長さを取れるもの と区別することがあります。 Haskellの型で表すと、

    ベクトルからリストを作る方法 〜次数付きモナドのカン拡張〜
  • 随伴を使って理解するStateモナドの実装

    前回の記事は魔法のように見える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 = {

    随伴を使って理解するStateモナドの実装
  • 圏論入門|日本評論社

    第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

    圏論入門|日本評論社
  • 随伴関手とは - Qiita

  • 圏論とプログラミング / Category Theory and Programming

    シンポジウム「圏論的世界像からはじまる複合知の展望」@慶応大学 (Jan 25, 2020) http://www.inter.ipc.i.u-tokyo.ac.jp/symposium.html 「圏論とプログラミング」発表スライドメモ - Qiita https://qiita.com/inamiy/items/9af1da1faec22cd968f0 Video: https://www.youtube.com/watch?v=Ua6NE48_-1s

    圏論とプログラミング / Category Theory and Programming
    igrep
    igrep 2020/01/31
    やっぱこの辺さっぱりだなぁ
  • Adjunctions in the wild: foldl

    Adjunctions in the wild: foldl
    igrep
    igrep 2020/01/21
    “it actually is able to formalize what we mean by “opposite concepts”. The process of identifying a functor’s “opposite concept” (if it exists) will only help is better understand the functor we’re thinking about, in terms of how it works and how it is used.”
  • GitHub - morphismtech/free-categories: free categories

  • Codensity Monad - Just $ A sandbox

    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

  • Programming with Universal Constructions

    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

    Programming with Universal Constructions
  • Category-Theory-Presentation

    Category-Theory-Presentation An Haskell oriented introduction to Category Theory (with basket of cats!) http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/

    igrep
    igrep 2018/09/11
    ブクマしてなかった...!
  • コモナドを使った抽象化の威力をライフゲームで試してみた - Qiita

    class Functor m => Monad m where return :: a -> m a (>>=) :: (a -> m b) -> m a -> m b join :: m (m a) -> m a join = (>>= id) k >>= m = join $ fmap k m extract は return と、extend は >>= と、duplicate は join と、それぞれなんとなく反対になってるような気がしますよね?(m と w も上下反対の対応がありますねw) コモナドの感覚を掴むために具体的な実装を見てみましょう。 -- | List Zipper data Z a = Z [a] a [a] left, right :: Z a -> Z a left (Z (l:ls) c rs) = Z ls l (c:rs) right (Z ls c

    コモナドを使った抽象化の威力をライフゲームで試してみた - Qiita
    igrep
    igrep 2018/03/22
    "countNeighboursとlifeはどちらも1つの点の振る舞いについて記述しているだけですがこれをextends\を使って全体を発展させる処理に簡単に変換することが出来ました"
  • V.S. Hask圏

    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と層 - Qiita

    層とプログラミング はじめに Haskellは、モナドという圏論用語を言語仕様に採用した初めての実用プログラミング言語です。歴史的には、Godementが1958年に、層コホモロジーの計算のため使ったのが(コ)モナドの最初の例だと言われています。 層は何らかの空間の「形」を代数的に計算するための仕組みで、局所的な性質と大域的な性質の関係を圏論的に表現するフレームワークと言えます。 一言で言えば、層とは関数とその定義域の組の集りのようなものです。いろいろな大きさの鉱物の結晶が積み重なって、地球全体を地層が覆っている様子をイメージするとわかりやすいかもしれません。層を使うと、定義域が重なりあう部分関数の関係と、それらが全体に波及していく様子を、圏論的に、すっきり表すことができます。 層はいわゆる"幾何的論理(geometric logic)"のモデルでもあり、実はモナドも幾何的論理で表現できる

    Haskellと層 - Qiita
    igrep
    igrep 2017/12/31
    「へぇ~、そうなんだ...」というしょうもない感想しか出てこなくてすみません...
  • [Haskell] とびだせ!Hask圏 - Qiita

    Functor(関手)の話です。 HaskellのFunctorクラスはHask圏からHask圏への関手しか表現できません。 そこで、Hask圏以外の圏についても使える関手のクラスを書いてみました。 よろしくね (*´σー`)エヘヘ 基的な用語と、HaskellのFunctorクラス 別のところにまとめました この章に書こうとしていた、「基的な用語の確認とHaskellのFunctorクラス」についての内容は、別の記事にまとめさせて貰いました。 内容としては、「HaskellのFunctorクラスはHask圏からHask圏への関手しか表現できません。」という文章の説明なので、それを読んで「そらそうだろ」って感じなら読み飛ばして次の章を読んで頂いて大丈夫です。 HaskellのFunctorは、Hask圏からHask圏への関手を表現しています。 しかし、HaskellではHask圏以外の

    [Haskell] とびだせ!Hask圏 - Qiita
    igrep
    igrep 2017/12/14
    どちらにしてもHask圏に閉じるのでとびだしたのはデフォルトのFunctorのみでは。(無粋なツッコミ)
  • somehow-morphisms on fixed point written in Haskell - Qiita

    なんとかもるふぃずむ written in Haskell λx.x K S K @ はてな - なんとかモルフィズムのHaskell版. 各もるふぃずむの概説はほとんど The Hitchhiker's Guide to Morphisms と Recursion Schemes: A Field Guide (Redux) によるものをベースにしています. 現時点では未完成です.1 畳み込み(fold)系 catamorphism anamorphismの双対.2 構造帰納法にあたります. F代数つまりf a -> aなる関数による畳み込み計算を繰り返し適用します. 可換図式 実装コード

    somehow-morphisms on fixed point written in Haskell - Qiita
  • HeskellのMonadを圏論のMonad/Kleisli Tripleと対比する - めもめも

    圏論の歩き方 作者: 圏論の歩き方委員会出版社/メーカー: 日評論社発売日: 2015/09/09メディア: 単行この商品を含むブログを見る オフィスの机の上に新たな挑戦状(上記の)が置いてあったので読んでみると、Kleisli tripleとMonadの関係が説明されていて、「そういえば、Kleisli tripleとMonadの同値性って、ちゃんと証明したことなかったなー」と思って書き始めたのがこのエントリーです。 いったい何の寝言を言ってるのかと思われそうですが・・・ HaskellのMonadを圏論の言葉に置き換えて理解する際に、圏論における「Kleisli triple」に対応させる方法と、圏論における「Monad」に対応させる方法があります。圏論の世界で「Kleisli triple」と「Monad」は互いに変換可能なので、どちらを用いても理論的には同じなのですが、Has

    HeskellのMonadを圏論のMonad/Kleisli Tripleと対比する - めもめも
  • GitHub - ekmett/hask: Category theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!)

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - ekmett/hask: Category theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!)
    igrep
    igrep 2015/12/19
    “Kind-indexed category theory for Haskell with a strong lens-like flavor.”
  • Monad laws - HaskellWiki

    Here, p ≡ q simply means that you can replace p with q and vice-versa, and the behaviour of your program will not change: p and q are equivalent. Using eta-expansion, the associativity law can be re-written for clarity as:

    igrep
    igrep 2015/03/20
    最後の "Monad axioms: Kleisli composition forms a category." はHaikuなのか。。。
  • Functor(関手)ってなんですか? - Nao Minami's Blog

    どうもこんばんは、south37です。今日も引き続きHaskellネタでいこうと思います。Functorって概念を知ったので、ちょろっとまとめてみたいと思います。 そもそも、Functorってなんですか? さて、Functorって聞いて、ピンと来ますか? 僕は、全然ピンと来ませんでした。Wikipedia先生の定義を見ても、 関手(かんしゅ、functor)とは、圏の間の対応付けのことである。関手は対象関数と射関数の組からなる。 などと、何だかよくわからない感じで書かれています。 じゃあ一体なんなんだって話ですが、ポイントはどうやら「対応付け」って点のようです。「圏(と呼ばれるよく分からないモノ)」から「圏」への対応付けをしてくれるのが、Functorです。そうすると、今度は「圏」がなんなんだって話になる訳ですが、これもWikipedia先生によれば 数学における圏(けん、category

    Functor(関手)ってなんですか? - Nao Minami's Blog
    igrep
    igrep 2015/03/17
    “Haskの部分圏であるLstと呼ばれる圏を考える事も出来ます。これは、Haskellにおける全ての型ではなく「リスト型」を「対象」とし、「リスト型」から「リスト型」への関数を「射」とするような「圏」”