The arguments passed to `make-instance` are the sum total of the information needed to create the instance in its initial state.That's the basic argument. It's demonstrably false.
Since you require that instances be transitively immutable, the initial state is the only state.
If you have those arguments squirreled away, then you can create another instance in the exact same initial state.
(setq foo (make-instance 'test-class)) (test-class/name foo) ZIPPYSo the game begins. I point out a trivial technicality, you adjust for it.
The arguments passed to `make-instance` combined with the appropriate
defaults from the initargs are the sum total of the information needed
to create the instance in its initial state.
Well, that's wrong, too. As Dan Lentz pointed out, "What about any stateful behavior encoded into the objects class?"
I'm pretty sure you ultimately win. But by the time I run out of objections your argument is going to be a patchwork quilt of exceptions, special cases, "implementation artifacts", "things that might be technically wrong, but can never make a real difference", etc. etc.
This doesn't inspire much confidence in our proof.
Mr. Lentz also asked:
Couldn't it just have trapped the out of date schema version in shared-initialize and dispatched it off to update-instance-for-redefined-class?
I don't know. When we bring an object from the store, it isn't really an instance yet.