✉ 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.
...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!
CT&FP
By Fouche Ehcuof
CT&FP
- 412