Our approach
Villager data comes from extensionals — our input tables, the initial facts:
extensional villager(name: string, age: integer, height: integer).
extensional hairColour(name: string, colour: string).
extensional location(name: string, location: string).
We want to define an intensional predicate:
suspect(Name) :- villager(Name, _, _), ….