Q == terminate' = FALSE
P == terminate' = terminate
\* Example 1 - works */
LEMMA ENABLED Q => ENABLED P
PROOF
<1>. Q => P
OMITTED
<1>. QED
BY ENABLEDrules
\* Example 2 - works */
LEMMA ASSUME TRUE PROVE ENABLED Q => ENABLED P
PROOF
<1>. Q => P
OMITTED
<1>. QED
BY ENABLEDrules
\* Example 3 - doesn't work */
LEMMA ASSUME []TRUE PROVE ENABLED Q => ENABLED P
PROOF
<1>. Q => P
OMITTED
<1>. QED
BY ENABLEDrules
\*ENABLEDrules depends on assumptions of level > 1
\*
\*
\*Obligation:
\*
\*ASSUME NEW VARIABLE x,
\* NEW VARIABLE terminate,
\* []TRUE ,
\* Q => P ,
\* TRUE
\*PROVE ENABLED Q => ENABLED P
\* Example 4 - doesn't work */
LEMMA ASSUME Q => P
PROVE ENABLED Q => ENABLED P
PROOF BY ENABLEDrules
\*ENABLEDrules depends on assumptions of level > 1
\*
\*
\*Obligation:
\*
\*ASSUME NEW VARIABLE x,
\* NEW VARIABLE terminate,
\* Q => P ,
\* TRUE
\*PROVE ENABLED Q => ENABLED P
\* Example 5 - doesn't work */
LEMMA ASSUME ((terminate = TRUE) => (terminate' = FALSE))
PROVE (ENABLED (terminate = TRUE) => ENABLED (terminate' = FALSE))
PROOF
<1>. QED
BY ENABLEDrules
\*ENABLEDrules depends on assumptions of level > 1
\*
\*
\*Obligation:
\*
\*ASSUME NEW VARIABLE x,
\* NEW VARIABLE terminate,
\* terminate = TRUE => terminate' = FALSE ,
\* TRUE
\*PROVE ENABLED (terminate = TRUE) => ENABLED (terminate' = FALSE)
\* Example 6 - doesn't work */
PROPOSITION ASSUME [](terminate = TRUE)
PROVE (ENABLED (terminate' = TRUE) => ENABLED (UNCHANGED terminate))
PROOF
<1>. (terminate = TRUE) /\ (terminate = TRUE)'
BY PTL
<1>. (terminate' = TRUE) => (UNCHANGED terminate)
OBVIOUS
<1>. QED \* fails, see status below
BY ENABLEDrules
\*ENABLEDrules depends on assumptions of level > 1
\*
\*
\*Obligation:
\*
\*ASSUME NEW VARIABLE x,
\* NEW VARIABLE terminate,
\* [](terminate = TRUE) ,
\* terminate = TRUE /\ (terminate = TRUE)' ,
\* terminate' = TRUE => UNCHANGED terminate ,
\* TRUE
\*PROVE ENABLED (terminate' = TRUE) => ENABLED UNCHANGED terminate