Light-Determining Rulebook

If an object can be lit in any of various ways (frotz spell, coated in phosphorus, turned on), is there an elegant way to redefine its lit property to be true if any of those are? Or do I need to write an every-turn rule?

I would like to be able to do something like this:

Definition: the lamp is lit: if it is soot-coated, no; if it is switched on, yes; if it is phosphorus-coated, yes; if it is frotzed, yes; no.
This is a contrived example, but you see the point.

Obviously this doesn’t work because “lit” refers to the I6 property “light”, not anything in I7 itself. But is there a simple way to make I6 sometimes check an I7 property as well? (For example, could a modified light-check routine first check for a “special-light” I7 property, which switches whether it uses the normal “light” behavior or calls an I7 rulebook to determine whether it is lit?)

EDIT: I’m working on an I6 workaround, but I’ve run into a problem: how do you call a rulebook on objects from I6? I see how to translate and call a rule, which could call the full rulebook, but a simple rule can’t take objects, can it?

To have I6 code invoke a rulebook with a value, you’d say

FollowRulebook( (+ foo rules +), (+ value +), true );

(The (++) wrapper might be {} for a function parameter.) This is in fact the exact definition of the I7 phrase “To follow (RL) for (V)”.


EDIT: I got the I6 written and it works perfectly so far. I’ll put it on the Github as soon as I have access.