eyedia

The Good Cobbler

“Good at what?” A small lesson in not over-generalising.

good-cobbler.pl · output · proof · check · try it in the playground


The question

Joe is a good cobbler. Does that make Joe a good person? Not necessarily. “Good” here describes how he does his trade, not him in general.

Philosophers use this example to show that some words only make sense together with the word they describe.

Given short descriptions of three people, what can we safely conclude?


What we tell Eyedia

Each person comes with a description, kept as a short list of words:

description(joe, [good, cobbler]).
description(jane, [good, carpenter]).
description(sam, [novice, cobbler]).
good_at(Person, Trade) :+ description(Person, [good, Trade]).
classified_as(Person, Trade) :+ description(Person, [good, Trade]).

The rules only fire on the pattern [good, Trade], and they tie “good” to that trade. There is deliberately no rule that says someone is simply good.


What Eyedia concludes

good_at(joe, cobbler).
good_at(jane, carpenter).
classified_as(joe, cobbler).
classified_as(jane, carpenter).

Why: the proof in plain words

Each conclusion traces back to one description:

  1. Joe is good at cobbling — the good_at rule, with Person = joe, Trade = cobbler, because of the fact description(joe, [good, cobbler]).
  2. Joe is classified as a cobbler — the classified_as rule, from the same fact.
  3. The same two steps for Jane, from her own description.

Six steps in all: four conclusions and the two facts they rest on.


Checked, not just claimed

A separate checker read the proof against the program and confirmed that:

Verdict: checked. All 6 steps verified, nothing taken on trust.


Try it

node bin/eyedia.js examples/good-cobbler.pl
node bin/eyedia.js --proof examples/good-cobbler.pl

Or open it in the playground. Add description(ann, [good, baker]). and run again: Ann is now good at baking and classified as a baker, with her own proof.


Takeaway

What a computer concludes depends on exactly how the knowledge is written. Keeping “good” attached to the trade stops the program from claiming more than the facts say, and the proof shows it never did.