Are we ever going to use this for something other than "already executed"?  I can't see how we would want to.  So I wonder if this shouldn't be named more explicitly than just "state".  Perhaps call it "called", but invert the value, so it defaults to false, and checkState() requires it to be false, and setCalled() can be called to set it to true?