mirror of
https://github.com/hanzoai/papers.git
synced 2026-10-22 17:20:17 +00:00
Every author block and the authorship standard said Los Angeles; Hanzo has been in San Francisco since at least 2016. The five catalogue PDFs whose sources changed are rebuilt so papers.hanzo.ai says so too. Co-authored-by: Hanzo Dev <[email protected]>
126 lines
5.2 KiB
TeX
126 lines
5.2 KiB
TeX
% A Temporal Assertion Graph: valid-time and transaction-time reads, schema as
|
|
% assertions, and erasure in an append-only store
|
|
\documentclass[11pt]{article}
|
|
\usepackage{../shared/hanzocover}
|
|
\usepackage{amsmath, amssymb, amsthm}
|
|
\usepackage{booktabs}
|
|
\usepackage{graphicx}
|
|
\usepackage{xcolor}
|
|
\usepackage{enumitem}
|
|
\usepackage{array}
|
|
\usepackage{listings}
|
|
\input{../shared/lstlang}
|
|
\usepackage{hyperref}
|
|
\hypersetup{colorlinks=true,linkcolor=black,citecolor=blue,urlcolor=blue}
|
|
% Identifiers set in typewriter do not hyphenate; let a line stretch instead of
|
|
% running into the margin.
|
|
\setlength{\emergencystretch}{3em}
|
|
|
|
% The status of a sentence: a figure from a run, a description of code at the
|
|
% commit named in the introduction, or a design that has not been built.
|
|
\newcommand{\meas}{\textcolor{blue!60!black}{\small[measured]}}
|
|
\newcommand{\shipped}{\textcolor{purple!70!black}{\small[in the code]}}
|
|
\newcommand{\proposed}{\textcolor{orange!70!black}{\small[proposed]}}
|
|
|
|
% Measured constants come from results-data.tex, which is read from the run
|
|
% artifacts it names. A key that file does not define prints XXX, so no table
|
|
% can show a number no run produced.
|
|
\newcommand{\ph}{\textbf{XXX}}
|
|
\newcommand{\setres}[2]{\expandafter\def\csname res:#1\endcsname{#2}}
|
|
\newcommand{\res}[1]{\ifcsname res:#1\endcsname\csname res:#1\endcsname\else\ph\fi}
|
|
\input{results-data}
|
|
|
|
% One row of the Hits@1 table: key prefix, then the label printed for it.
|
|
\newcommand{\cronrow}[2]{#2 & \res{#1/all} & \res{#1/se} & \res{#1/st}
|
|
& \res{#1/ba} & \res{#1/fl} \\}
|
|
% One row of the LongMemEval table.
|
|
\newcommand{\lmerow}[2]{#2 & \res{lme/#1/n} & \res{lme/#1/cosfive}
|
|
& \res{lme/#1/engfive} & \res{lme/#1/costen} & \res{lme/#1/engten}
|
|
& \res{lme/#1/cosmrr} & \res{lme/#1/engmrr} \\}
|
|
|
|
\newcommand{\op}[1]{\texttt{#1}}
|
|
\newcommand{\knowable}{\mathit{knowable}}
|
|
\newcommand{\until}{\mathit{until}}
|
|
\newcommand{\tv}{t_{\mathrm{v}}}
|
|
\newcommand{\tk}{t_{\mathrm{k}}}
|
|
|
|
\theoremstyle{definition}
|
|
\newtheorem{definition}{Definition}
|
|
\theoremstyle{plain}
|
|
\newtheorem{proposition}{Proposition}
|
|
\theoremstyle{remark}
|
|
\newtheorem{remark}{Remark}
|
|
|
|
\title{A Temporal Assertion Graph\\[0.35em]
|
|
{\large Valid-time and transaction-time reads, schema as assertions,\\
|
|
and erasure in an append-only store}}
|
|
\author{
|
|
Hanzo AI Research\thanks{Corresponding author: [email protected]} \\
|
|
\textit{Hanzo Industries Inc (Techstars '17)} \\
|
|
San Francisco, California \\
|
|
\texttt{https://hanzo.ai}
|
|
}
|
|
\date{2026-09-22 \quad Code at \texttt{hanzo-inc/cloud} \texttt{1fffdf408}}
|
|
|
|
\begin{document}
|
|
|
|
\hanzocoverpage
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
\noindent
|
|
Hanzo cloud's \texttt{/v1/graph} keeps an organization's entities and relations
|
|
in one append-only table of assertions. An assertion states that an entity
|
|
stands in a relation to a value from an instant \texttt{at}, optionally until an
|
|
instant \texttt{until}, with a source, evidence, the filing identity and a
|
|
confidence. The server derives a \emph{knowable} instant, the later of the
|
|
filer's own claim and the write. Nothing is updated in place, a retraction is an
|
|
assertion, and the only deletion is erasure of a data subject. Every read takes
|
|
a valid instant, \texttt{as\_of}, and a transaction instant,
|
|
\texttt{as\_known}; versions of a statement correct each other only when one was
|
|
learned later; a relation holds one value or several, as the organization
|
|
declares; and type, domain, range and cardinality are assertions in the same
|
|
table, checked as known when the checked row became knowable. We state the
|
|
resolution rule and its properties, among them that an answer as known at an
|
|
instant is unchanged by every later write except erasure. We describe the
|
|
operations built on it: a diff between two bitemporal points, shortest paths
|
|
with a confidence product, erasure with a receipt that verifies against an
|
|
audit trail and is refused under litigation hold, deterministic Louvain
|
|
communities, and a map-reduce answer that refuses uncited claims.
|
|
|
|
On the \res{cron/n} covered CronQuestions test questions, answered by one query
|
|
plan, a dictionary control, semantica~0.7.0 and the store all score
|
|
\res{cron/kg/all}\% Hits@1 and give the same answer to every question, whether
|
|
history is filed at one instant or as it happened. The store's median call takes
|
|
\res{cron/wire/p50}\,ms and semantica's \res{cron/sem/p50}\,ms. The first run of
|
|
the same lane scored \res{cron/first/wire/all}\%, and \res{cron/first/wire/se}\%
|
|
on point-in-time questions, because the single \texttt{as\_of} of that version
|
|
bounded transaction time and a retraction ended every value of its pair; the
|
|
harness then found two defects in the correction. On LongMemEval-S, a retrieval
|
|
engine in the same memory stack, which does not use this store, raises session
|
|
ALL@5 from \res{lme/all/cosfive} to \res{lme/all/engfive} over cosine similarity
|
|
on the same vectors, with no tuning on that benchmark.
|
|
\end{abstract}
|
|
|
|
\clearpage
|
|
\tableofcontents
|
|
\clearpage
|
|
|
|
\input{sections/01-introduction}
|
|
\input{sections/02-model}
|
|
\input{sections/03-time}
|
|
\input{sections/04-schema}
|
|
\input{sections/05-queries}
|
|
\input{sections/06-erasure}
|
|
\input{sections/07-evaluation}
|
|
\input{sections/08-related}
|
|
\input{sections/09-limits}
|
|
\input{sections/99-conclusion}
|
|
|
|
{\small
|
|
\bibliographystyle{plain}
|
|
\bibliography{references}
|
|
}
|
|
|
|
\end{document}
|