Another approach to computing left and right Kan extensions is to use AQL :-). Below is AQL code to for the German/Italians example.


schema S = literal : empty { entities Germans }

schema T = literal : empty {
entities
Germans Italians
foreign_keys
friend : Germans -> Italians }

mapping F = literal : S -> T {
entity Germans -> Germans }

instance I = literal : S {
generators
Ilsa Klaus Jorg Sabine : Germans
}

instance LanFI = sigma F I //left kan extension of I along F
instance FoLanFI = delta F LanFI //compose F with the left kan extension to get a monad
transform monadUnit = unit F I //the unit of the adjunction

instance RanFI = pi F I //right kan extension of I along F