/ bitemporality d:{(_dj _ x%86400.;100_sv 24 60 60_vs _ x!86400.)} t:{(24 60 60_sv 0 100 100_vs y)+86400.*_jd x} sp:{1_'(&x=*x)_ x} dt:{{t . 100_sv'0$(sp"-",x;sp":",y)}. 2#sp" ",x," 0"} na:(;0N;0n;;`)@__abs 4:: ti:{[o;a;p] / individual index k:!p[`o]_bin o / assertions made on times < o k@:&a>p[`f;k] / assertions about a time beginning a k@:&~a>p[`t;k] / assertions about a time ending on or after a k@(*|:)'=p[`i;k]} / latest assertion for each individual qi:{[o;a;p;v] / query index k:ti[o;a]p / temporal indices k:[~_n~v;&v p[`v;k]]} / assertions which satisfy non-null f[x] id:{[p;k]p[`i;k]} / indices and property -> individuals which are subjects of is:{:[#x;{x@&x _lin y}/x@<#:'x;x]} / intersection of vectors iq:{[o;a;q]is(!q)id'qi[o;a]'[!q;q[]]} / individual query pq:{[o;a;p;i] / property query k:ti[o;a;p]v / temporal indices (p[`v;k],na p`v)p[`i;k]?/:i} / property values for individuals ih:{[o;p;i] / individual history query k:!p[`o]_bin o / assertions <= o k@:&i=p[`i;k] / assertions about i hi . tl . p[`v`f`t;k]} / history of timeline tl:{[v;f;t]tu[u]tv[u@: table[`v`f`t]