B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 dom f = A codom f = B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 dom f = A f codom f = B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 id oo dom f = A f codom f = B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 id oo id oo dom f = A f A idA codom f = B A Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 id oo id oo dom f = A f A idA codom f = B A Compunerea s˘ aget ¸ilor: f // g // Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 id oo id oo dom f = A f A idA codom f = B A Compunerea s˘ aget ¸ilor: A f // B = B g // C Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 id oo id oo dom f = A f A idA codom f = B A Compunerea s˘ aget ¸ilor: A f // B g // C Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
B, C, . . . Mult ¸ime de s˘ aget ¸i C1: f , g, . . . Funct ¸ii: C1 codom // dom // C0 id oo id oo dom f = A f A idA codom f = B A Compunerea s˘ aget ¸ilor: A g◦f f // B g // C Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 5 / 24
◦, Identitate id) Asociativitatea compunerii A (h◦g)◦f f // B h◦g g // C h // D Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii A (h◦g)◦f g◦f OO f // B h◦g g // C h // D Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Invariant ¸a compunerii cu s˘ ageata identic˘ a A f // B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Invariant ¸a compunerii cu s˘ ageata identic˘ a A f // B idB // B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Invariant ¸a compunerii cu s˘ ageata identic˘ a A idB ◦f =f f // B idB // B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Invariant ¸a compunerii cu s˘ ageata identic˘ a A idA // A idB ◦f =f f // B idB // B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Invariant ¸a compunerii cu s˘ ageata identic˘ a A f ◦idA=f OO idA // A idB ◦f =f f // B idB // B Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
◦, Identitate id) Asociativitatea compunerii (h ◦ g) ◦ f A h◦(g◦f ) OO (h◦g)◦f g◦f OO f // B h◦g g // C h // D = h ◦ (g ◦ f ) Invariant ¸a compunerii cu s˘ ageata identic˘ a idB ◦ f A f ◦idA=f OO idA // A idB ◦f =f f // B idB // B = f f ◦ idA Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 6 / 24
. . S˘ aget ¸i: funct ¸ii f :: A → B Identitate: funct ¸ia identic˘ a Compunere: compunerea uzual˘ a a funct ¸iilor Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 7 / 24
. . S˘ aget ¸i: funct ¸ii f :: A → B Identitate: funct ¸ia identic˘ a Compunere: compunerea uzual˘ a a funct ¸iilor 2 Monoids Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 7 / 24
. . S˘ aget ¸i: funct ¸ii f :: A → B Identitate: funct ¸ia identic˘ a Compunere: compunerea uzual˘ a a funct ¸iilor 2 Monoids Obiecte: monoizi (M, ·, e) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 7 / 24
. . S˘ aget ¸i: funct ¸ii f :: A → B Identitate: funct ¸ia identic˘ a Compunere: compunerea uzual˘ a a funct ¸iilor 2 Monoids Obiecte: monoizi (M, ·, e) Haskell: class Monoid m where mappend :: m -> m -> m mempty :: m mempty ‘mappend‘ x = x x ‘mappend‘ mempty = x (x ‘mappend‘ y) ‘mappend‘ z = x ‘mappend‘ (y ‘mappend‘ z) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 7 / 24
. . S˘ aget ¸i: funct ¸ii f :: A → B Identitate: funct ¸ia identic˘ a Compunere: compunerea uzual˘ a a funct ¸iilor 2 Monoids Obiecte: monoizi (M, ·, e) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 7 / 24
elementele mult ¸imii A S˘ aget ¸i: x → y ⇐⇒ x ≤ y Identitate: x → x reflexivitate ⇐⇒ x ≤ x Compunere: x → y → z ⇐⇒ x ≤ y ≤ z tranzitivitate =⇒ x ≤ z ⇐⇒ x → z Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 8 / 24
elementele mult ¸imii A S˘ aget ¸i: x → y ⇐⇒ x ≤ y Identitate: x → x reflexivitate ⇐⇒ x ≤ x Compunere: x → y → z ⇐⇒ x ≤ y ≤ z tranzitivitate =⇒ x ≤ z ⇐⇒ x → z 2 Monoid (M, ·, e) Obiecte: un singur obiect, notat ∗ S˘ aget ¸i: elementele monoidului: pentru fiecare x ∈ M, un morfism ∗ x − → ∗ Identitate: elementul neutru e al monoidului M Compunere: operat ¸ia binar˘ a pe M: ∗ x − → ∗ ∗ y − → ∗ ∗ xy − → ∗ Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 8 / 24
aget ¸i: funct ¸ii Haskell id :: a -> a (.) :: (b -> c) -> (a -> b) -> a -> c g . f = \x -> g (f x) 1 f˘ ar˘ a ⊥ (http://www.haskell.org/haskellwiki/Hask) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 9 / 24
aget ¸i: funct ¸ii Haskell id :: a -> a (.) :: (b -> c) -> (a -> b) -> a -> c g . f = \x -> g (f x) Int, Char :: ∗ [ ], Maybe :: ∗ − > ∗ [Int], Maybe Bool :: ∗ 1 f˘ ar˘ a ⊥ (http://www.haskell.org/haskellwiki/Hask) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 9 / 24
A f → FA Ff B FB A idA → FA idFA A g◦f f // B g → FA Fg◦Ff !! Ff // FB Fg A FA C FC FidA=idFA F(g◦f )=Fg◦Ff Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 10 / 24
− > ∗) class Functor (f :: * -> *) where fmap :: (a -> b) -> f a -> f b fmap id = id fmap (f . g) = fmap f . fmap g Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 11 / 24
A // PA mult ¸imea submult ¸imilor lui A A f → PA Pf X ⊆ A _ B PB {b ∈ B | ∃a ∈ X . b = f (a)} Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 12 / 24
A // PA mult ¸imea submult ¸imilor lui A A f → PA Pf X ⊆ A _ B PB {b ∈ B | ∃a ∈ X . b = f (a)} 2 Functorul listelor. Set List → Set, A → ListA A f → List(A) List(f ) [ ] → [aa . . . an] _ B List(B) [ ] [fa1 . . . fan] Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 12 / 24
A // PA mult ¸imea submult ¸imilor lui A A f → PA Pf X ⊆ A _ B PB {b ∈ B | ∃a ∈ X . b = f (a)} 2 Functorul listelor. Set List → Set, A → ListA A f → List(A) List(f ) [ ] → [aa . . . an] _ B List(B) [ ] [fa1 . . . fan] instance Functor List where fmap f [] = [] fmap f x:xs = (f x) : fmap xs Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 12 / 24
A // PA mult ¸imea submult ¸imilor lui A A f → PA Pf X ⊆ A _ B PB {b ∈ B | ∃a ∈ X . b = f (a)} 2 Functorul listelor. Set List → Set, A → ListA A f → List(A) List(f ) [ ] → [aa . . . an] _ B List(B) [ ] [fa1 . . . fan] instance Functor List where fmap = map Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 12 / 24
¸ime, operat ¸ii, ecuat ¸ii) ˆ ın Computer Science: un proces / ma¸ sin˘ a / program algebra init ¸ial˘ a:2 definit ¸ie(implementare) recursiv˘ a: constructor demonstrat ¸ie inductiv˘ a Coalgebra: black box coalgebra final˘ a:3 definit ¸ie(implementare) corecursiv˘ a (lazy): deconstructor demonstrat ¸ie coinductiv˘ a 2J.A. Goguen, J. Thatcher, E. Wagner. An initial algebra approach to the specification, correctness and implementation of abstract data types, 1978. 3P. Aczel, N. Mendler. A final coalgebra theorem, 1989. Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 14 / 24
f → A Morfism de F-algebre FA f // Fϕ A ϕ FB g // B ϕ ◦ f = g ◦ Fϕ Categorie Alg(F) Obiecte: F-algebre S˘ aget ¸i: Morfisme de F-algebre Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 15 / 24
f → A Morfism de F-algebre FA f // Fϕ A ϕ FB g // B ϕ ◦ f = g ◦ Fϕ Categorie Alg(F) Obiecte: F-algebre S˘ aget ¸i: Morfisme de F-algebre Functor care ”uit˘ a” structura de F-algebr˘ a Alg(F) U → C Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 15 / 24
A Haskell: data Maybe a = Nothing | Just a instance Functor Maybe where fmap Nothing = Nothing fmap f (Just x) = Just (f x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 16 / 24
A F-algebr˘ a: mult ¸ime A, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A → A Haskell: data Maybe a = Nothing | Just a instance Functor Maybe where fmap Nothing = Nothing fmap f (Just x) = Just (f x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 16 / 24
A F-algebr˘ a: mult ¸ime A, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A → A init :: 1 → A (init ∈ A) next :: A → A Haskell: data Maybe a = Nothing | Just a instance Functor Maybe where fmap Nothing = Nothing fmap f (Just x) = Just (f x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 16 / 24
A F-algebr˘ a: mult ¸ime A, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A → A init :: 1 → A (init ∈ A) next :: A → A (A, [init, next] :: 1 + A → A) sistem dinamic / algebr˘ a Peano Haskell: data Maybe a = Nothing | Just a instance Functor Maybe where fmap Nothing = Nothing fmap f (Just x) = Just (f x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 16 / 24
A F-algebr˘ a: mult ¸ime A, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A → A init :: 1 → A (init ∈ A) next :: A → A (A, [init, next] :: 1 + A → A) sistem dinamic / algebr˘ a Peano Morfism de F-algebre: ϕ :: A → B ϕ init = init ϕ $ next x = next $ ϕ x Haskell: data Maybe a = Nothing | Just a instance Functor Maybe where fmap Nothing = Nothing fmap f (Just x) = Just (f x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 16 / 24
A × X, unde A este o mult ¸ime de etichete/input-uri/caractere Haskell data MyFunctor a x = Nil | Cons (a x) instance Functor MyFunctor a where fmap Nil = Nil fmap f (Cons val a val x) = Cons (val a (f val x)) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 17 / 24
A × X, unde A este o mult ¸ime de etichete/input-uri/caractere F-algebr˘ a: mult ¸ime X, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A × X → X init :: 1 → X (init ∈ X) next :: A × X → X Haskell data MyFunctor a x = Nil | Cons (a x) instance Functor MyFunctor a where fmap Nil = Nil fmap f (Cons val a val x) = Cons (val a (f val x)) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 17 / 24
A × X, unde A este o mult ¸ime de etichete/input-uri/caractere F-algebr˘ a: mult ¸ime X, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A × X → X init :: 1 → X (init ∈ X) next :: A × X → X (X, [init, next] :: 1 + A × X → X) automat determinist Haskell data MyFunctor a x = Nil | Cons (a x) instance Functor MyFunctor a where fmap Nil = Nil fmap f (Cons val a val x) = Cons (val a (f val x)) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 17 / 24
A × X, unde A este o mult ¸ime de etichete/input-uri/caractere F-algebr˘ a: mult ¸ime X, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A × X → X init :: 1 → X (init ∈ X) next :: A × X → X (X, [init, next] :: 1 + A × X → X) automat determinist Morfism de F-algebre: ϕ :: X → Y ϕ init = init ϕ $ next a x = next $ a (ϕ x) Haskell data MyFunctor a x = Nil | Cons (a x) instance Functor MyFunctor a where fmap Nil = Nil fmap f (Cons val a val x) = Cons (val a (f val x)) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 17 / 24
A × X, unde A este o mult ¸ime de etichete/input-uri/caractere F-algebr˘ a: mult ¸ime X, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A × X → X init :: 1 → X (init ∈ X) next :: A × X → X (X, [init, next] :: 1 + A × X → X) automat determinist Morfism de F-algebre: ϕ :: X → Y ϕ init = init ϕ $ next a x = next $ a (ϕ x) Haskell data MyFunctor a x = Nil | Cons (a x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 17 / 24
A × X, unde A este o mult ¸ime de etichete/input-uri/caractere F-algebr˘ a: mult ¸ime X, ˆ ımpreun˘ a cu o funct ¸ie f :: 1 + A × X → X init :: 1 → X (init ∈ X) next :: A × X → X (X, [init, next] :: 1 + A × X → X) automat determinist Morfism de F-algebre: ϕ :: X → Y ϕ init = init ϕ $ next a x = next $ a (ϕ x) Haskell data List a x = Nil | Cons (a List x) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 17 / 24
: C → C un functor. F-algebra init ¸ial˘ a µF FµF in // µF (|f |) FA f // A (|f |) = catamorfismul (fold-ul) algebrei (A, f : FA → A) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 18 / 24
: C → C un functor. F-algebra init ¸ial˘ a µF FµF in // F(|f |) µF (|f |) FA f // A (|f |) = catamorfismul (fold-ul) algebrei (A, f : FA → A) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 18 / 24
: C → C un functor. F-algebra init ¸ial˘ a µF FµF in // F(|f |) µF (|f |) FA f // A (|f |) ◦ in = f ◦ F(|f |) (|f |) = catamorfismul (fold-ul) algebrei (A, f : FA → A) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 18 / 24
: C → C un functor. F-algebra init ¸ial˘ a µF FµF in // F(|f |) µF (|f |) FA f // A (|f |) ◦ in = f ◦ F(|f |) (|f |) = catamorfismul (fold-ul) algebrei (A, f : FA → A) Catamorfismul (|f |) este un constructor. F-algebra init ¸ial˘ a este modelul minimal al (categoriei) F-algebrelor. Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 18 / 24
: C → C un functor. F-algebra init ¸ial˘ a µF FµF in // F(|f |) µF (|f |) FA f // A (|f |) ◦ in = f ◦ F(|f |) (|f |) = catamorfismul (fold-ul) algebrei (A, f : FA → A) Catamorfismul (|f |) este un constructor. F-algebra init ¸ial˘ a este modelul minimal al (categoriei) F-algebrelor. Teorem˘ a (Lambek) FµF in // µF este un izomorfism. Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 18 / 24
zero = init (|f|) $ succ n = next $ (|f|) n addWith m:: Nat → Nat addWith m zero = m addWith m $ succ n = succ $ (addWith m n) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 20 / 24
zero = init (|f|) $ succ n = next $ (|f|) n addWith m:: Nat → Nat addWith m zero = m addWith m $ succ n = succ $ (addWith m n) Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 20 / 24
zero = init (|f|) $ succ n = next $ (|f|) n addWith m:: Nat → Nat addWith m zero = m addWith m $ succ n = succ $ (addWith m n) isEven :: Nat → Bool isEven zero = true isEven $ succ n = not $ isEven n Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 20 / 24
zero = init (|f|) $ succ n = next $ (|f|) n addWith m:: Nat → Nat addWith m zero = m addWith m $ succ n = succ $ (addWith m n) isEven :: Nat → Bool isEven zero = true isEven $ succ n = not $ isEven n Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 20 / 24
1 + A × X F-algebr˘ a: (X, [init, next] : 1 + A × X → X) automat determinist Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 21 / 24
1971 Steve Awodey. Category Theory, Oxford University Press, 2010 Benjamin Pierce,Basic Category Theory for Computer Scientists, MIT Press, 1991 R. F. C. Walters, Categories and Computer Science, Cambridge University Press, 1992 Michael Barr, Charles Wells, Category Theory fo Computing Science, Prentice Hall 1995 Adriana Balan (UPB) Introducere ˆ ın Teoria Categoriilor 17 Iulie 2014 24 / 24