fosco.loregian @ gmail.com
   tetrapharmakon

matematico

che professione?

Una breve bio

  • Triennale in Matematica (Padova) 2007 - 2010
     
  • Magistrale in Matematica (Padova) 2010 - 2012
     
  • Ph.D. (SISSA - Trieste / Sapienza - Roma)
     
  • vari postdoc:
    University of Western Ontario (London, Canada)
    Masaryk University (Brno, CZ)
    Max Planck Institute (Bonn, D)
    CMUC (Coimbra, P) -da luglio
    ...

Mi occupo di teoria delle categorie

La Matematica è fatta di diverse aree distinte:

  • Algebra
  • Geometria
  • Logica
  • ...

La teoria delle categorie  studia ciascuna di queste teorie come un oggetto matematico a sé stante.

  • Una “categoria” è un agglomerato di oggetti matematici che
    condividono delle proprietà strutturali.

what

Gli oggetti matematici di un dato tipo sono punti in una grande scatola, collegati da frecce componibili

composizione

  • la composizione è associativa: f . (g . h) = (f . g) . h
  • esiste un omomorfismo identico: f . 1 = 1 . f = f
  • Ogni oggetto nella pratica matematica fa parte di una qualche categoria
  • insiemi, gruppi, anelli, spazi vettoriali, ... e ogni insieme con operazioni
  • spazi topologici, spazi puntati, gruppi abeliani topologici...
  • varietà differenziali, spazi di Banach, spazi di misura...
  • numeri ordinali, linguaggi formali, ogni modello di teoria degli insiemi...

Eilenberg, S., and Mac Lane S., "General theory of natural equivalences." (1945)

  • "CT is one of the most sterile intellectual pursuit" (M. Reid)
  • "category theory is (abstract) nonsense" (N. Steenrod)
  • "quel tizio ha detto funtore, fa teoria delle categorie!" (Anonimo)
  • Vi fareste operare da un bisturi che non sia sterile?
  • CT è lo studio delle proprietà della Matematica.
  • Alexander Grothendieck,  Paul Cohen, Daniel Quillen, Maxim Kontsevich, ...

Fino ad ora ho usato la teoria delle categorie per fare

Topologia algebrica

  • Gli spazi topologici sono difficili da classificare*
  • per farlo, si può rappresentare la loro categoria in una fatta di oggetti algebrici (per es. i gruppi abeliani)
  • conti fatti coi gruppi abeliani danno informazioni sugli spazi a cui li avevamo associati.
\small \pi_1 : {\bf Top} \to {\bf Grp} : X \mapsto \pi_1(X)
\small (\pi_n : {\bf Top}\to {\bf Ab} : X \mapsto \pi_n(X))

...or not so different

CT è davvero così astratta? (Qualsiasi cosa questo significhi...)

...

nell'ultima settimana, su arXiv

haskell

le poche cose, che ho di sicuro frainteso, a proposito di

e della programmazione funzionale

La programmazione funzionale è un paradigma per la produzione di codice che riduce al minimo gli effetti collaterali

  • trasparenza: ad input uguale, output uguale
  • l'assegnazione di un valore a una variabile è immutabile (niente x += 1)
  • La gestione dell' IO viene relegata alla buccia del codice
  • la computazione ha la forma di una serie di valutazioni di funzioni matematiche

f(in) = out

g(in') = out'

in

out = in'

out '

g o f

  • Vi sono molti linguaggi funzionali
  • Oggi parliamo (un poco) di Haskell

come è fatto haskell

  • G.A.D.T (Generalized Algebraic Data Types)
     
  • Laziness
  • (molto) pattern matching




     
  • Ricorsione dappertutto
     
  • Molto lambda-calcolo
data List a = Nil | Cons a (List a)
primes :: [Integer]
primes = filter isPrime [1..]
palyPrimes = [p | p <- primes ,
                  reverse (digits p) == digits p]

sum :: [Integer] -> Integer
sum [] = 0
sum (x:xs) = x + sum xs
squares :: [Integer]
squares = map (\x -> x**2) [1..100]
public static BigInteger[] javaFibs(int n) {
    BigInteger[] fibs = new BigInteger[n];
    fibs[0] = BigInteger.valueOf(1);
    fibs[1] = BigInteger.valueOf(1);
    for (int i = 2; i < n; i++)
        fibs[i] = fibs[i - 1].add(fibs[i - 2]);

    return fibs;
}

Questo è (un) modo di produrre i numeri di Fibonacci in Java:

Questo è lo stesso algoritmo in Haskell:

haskellFibs :: Int -> Integer
haskellFibs n  = fibs !! n
where fibs = 
    1 : 1 : [ a + b | (a, b) <- zip fibs (tail fibs) ]

Non c'è solo una differenza estetica, ma un netto guadagno di prestazione

ESEMPIO: I SOLITI NUMERI DI FIBONACCI

Esempio : parsing di testi da arXiv

{-# LANGUAGE OverloadedStrings #-}

module Main where

import           Text.XML.HXT.*
import           Control.Concurrent.Async

...

selectAllEntries :: ArrowXml a => a XmlTree XmlTree
selectAllEntries = deep (isElem >>> hasName "entry")

selectAllTitle :: ArrowXml a => a XmlTree XmlTree
selectAllTitle = deep (isElem >>> hasName "title")

getDaTitles path = runX (readDocument [withHTTP []] path
    >>> selectAllEntries
    >>> selectAllTitle
    >>> deep isText
    >>> getText)


main :: IO ()
main = do
  xs <- mapConcurrently getDaTitles paths
  let zs = map (filter (/= '\n')) $ concat xs
  putStrLn $ unlines zs

"mi interessa. che faccio?"

  • Fuggite dall'Italia.
  • Velocemente.
  • Studiate (insieme a me, se vi va) la programmazione funzionale: ce n'è per ogni gusto

    A vari livelli di purezza, Haskell, Clojure, Idris, Erlang, Wolfram, Scala, PureScript... permettono tutti di programmare funzionalmente
  • Imparate un po' di teoria delle categorie:
    Riehl, Emily. Category theory in context. Courier Dover Publications, 2017.
    Spivak, David I. Category theory for the sciences. MIT Press, 2014.

Ci si lavora parecchio*

*ho già detto "fuggite dall'Italia"?

Grazie!