[I7] When is an object assumed to be a thing?

The documentation says

but it is not clear to me what counts as “other information”.

In the following code, Inform assumes that the objet d’art is a thing. Everything works fine.

There is a room. The objet d'art is an object.
But this does not compile.

There is a room. A thing has a thing called the self. The self of the entity[1] is the entity[2].
Inform assumes that the entity is a thing at [1]; why is the entity merely an object at [2]?

Other declarations might allow the compiler to infer information. If you went on to declare “The objet d’art contains an apple”, it would wind up as a container, because only containers can have that relation. Or you might say straight-out “The objet d’art is a container.” (This does not contradict the first declaration, because containers are things.)

Good question.

It looks like the compiler is not making inferences from property types, the way it does from relation types. Or maybe there’s a sequence problem, it’s doing this check before it applies all the information it has.

Here’s an example in which an object winds up being inferred to be something that is not a thing:

Fleep is a room. Florp is an object. Florp is west of Fleep.

This will make Florp a room, which (unlike a container) isn’t a thing. We would’ve got the same result if we had omitted “Florp is an object.” I’m not sure when declaring “Florp is an object” would have any practical use.