Typ posiada logarytm oprzeć X w P , kiedy dokładnie C ≅ P → X . Oznacza to, C mogą być postrzegane jako pojemnika X elementów pozycjach określonych przez P . Rzeczywiście, jest to kwestia z prośbą o jaką moc P musimy podnieść X uzyskanie C .doXP.do≅P.→ XCXPPXC
Sensowna jest praca z gdzie F jest funktorem, ilekroć istnieje logarytm, co oznacza l o glogFF . Zauważ, że jeśli FlogX(FX) , wtedy na pewno mamy FFX≅logF→X , więc pojemnik nie mówi nam nic ciekawego poza jego elementami: pojemniki z wyborem kształtów nie mają logarytmów.F1≅1
Znane prawa logarytmów mają sens, gdy myślisz o zestawach pozycji
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
logX(νY.T)=μZ.logXTZ=logXY
logStream=logX(νY.X×Y)=μZ.1+Z=Nat
Biorąc pod uwagę, że pochodna mówi nam o typie w kontekstach z jednym dołkiem, a logarytm mówi nam o pozycjach, powinniśmy spodziewać się związku, i rzeczywiście
F1≅1⇒logF≅∂F1
∂F1F
Obawiam się, że mam mniej do powiedzenia na temat korzeni, ale można zacząć od podobnej definicji i podążać za nosem. Aby uzyskać więcej zastosowań logarytmów typów, sprawdź „Funkcje memo, wieltypowo!” Ralfa Hinze. Muszę biec ...