Un tipo ha un logaritmo a base X di P esattamente quando C ≅ P → X . Cioè, C può essere visto come un contenitore di X elementi in posizioni definite da P . In effetti, si tratta di una questione di chiedere a quale potere P dobbiamo alzare X per ottenere C .CXPC≅P→ XCXPPXC
Ha senso lavoro con dove F è un funtore, quando esiste il logaritmo, cioè l o gl o gFF . Si noti che se Fl o gX( FX) , quindi abbiamo sicuramente FFX≅l o gF→ X , quindi il contenitore non ci dice nulla di interessante oltre ai suoi elementi: i contenitori con una scelta di forme non hanno logaritmi.F1 ≅1
Le leggi familiari dei logaritmi hanno senso quando si pensa in termini di set di posizioni
log(K1)logIlog(F×G)log(F⋅G)====01logF+logGlogF×logGno positions in empty containercontainer for one, one positionpair of containers, choice of positionscontainer of containers, pair of positions
Abbiamo anche guadagnare dove Z = l o glogX(νY.T)=μZ.logXT sotto il raccoglitore. Cioè, ilpercorsodi ciascun elemento in alcuni codata è definito induttivamente iterando il logaritmo. Per esempio,Z=logXY
logStream=logX(νY.X×Y)=μZ.1+Z=Nat
Dato che la derivata ci dice il tipo in contesti a un buco e il logaritmo ci dice posizioni, dovremmo aspettarci una connessione, e infatti
F1≅1⇒logF≅∂F1
Laddove non è possibile scegliere la forma, una posizione è uguale a un contesto a un foro con gli elementi cancellati. Più in generale, rappresenta sempre la scelta di unaforma F insieme a una posizione dell'elemento all'interno di quella forma.∂F1F
Temo di avere poco da dire sulle radici, ma si potrebbe partire da una definizione simile e seguire il proprio naso. Per ulteriori usi dei logaritmi di tipi, controlla "Funzioni memo di Ralf Hinze, politipicamente!". Devo correre ...