fak10

Devlog · 11 Nov 2026

How Anna's knowledge is built

Anna, the iPhone assistant in fak10, doesn't just keep your sentences, she keeps what they mean. She breaks each sentence into small statements and files them in her knowledge. Here are the basic terms, so that when you try the app you know what you're looking at in the graph and under “Facts”.

View as slides

A memory palace

Like a memory palace: what you tell Anna, she files as a web of statements and finds it again through the relations. You can walk that web in the “Graph” tab, as shown in the post about the graph.

The four building blocks

There are also, among others, types you don't see: words and grammar that Anna uses to read sentences. The graph doesn't show strings; you find them under “Facts”.

Triples: subject, predicate, object

Every statement in Anna's knowledge has three parts: what it's about (subject), which relation (predicate) and what it points to (object: an entity, a class or a string). Such a group of three is called a triple. “I have a dog. My sister’s mobile number is 0170 …” becomes, for example, these triples:

my dog

entity (com)

↓→is a = instance of

dog

class (cls)

my sister

entity (com)

↓→has mobile number

“0170 …”

string (lit)

dog

class (cls)

↓→specifies

animal

class (cls)

Figure: “I have a dog. My sister’s mobile number is 0170 …” as triples, read as subject → predicate → object. Anna brings the third row along as prior knowledge.

“is a” means: the entity is an instance of this class. One sentence often yields several triples, and one triple can come from several sentences. Each triple carries more than its three parts:

What does this have to do with RDF and the Semantic Web?

The idea is best known from the Semantic Web. Its base format, RDF, describes the world in exactly this way: as triples of subject, predicate and object. Entities are called resources there, fixed values such as strings are called literals. RDFS and OWL add classes, subclasses and rules for relations. Anna's terms map onto that quite closely:

What is a reasoner?

A reasoner is a program that concludes new statements from existing ones, following fixed rules. Anna's reasoner runs on your iPhone, in the background, and gets to work as soon as new statements come in. Among other things, here's what it does today:

Some things Anna only concludes while reading, without storing them: the inverse (“My sister is older than me” becomes “I am younger than my sister”), more general relations (“has child” also finds the daughters) and the ladder of classes upwards. What the reasoner does store carries its origin: it is entered as the source. For chains and transitivity: if the basis goes, the conclusion goes too.

A reasoner only applies rules Anna knows. Where it is unsure, it suggests, or marks an estimate as an estimate. A missing connection doesn't mean there isn't one.

If you want to join: To the beta

— Maciek Niemczyk