Check if all variable names visible in a computation state are also visible in another computation state, for any number of peeled frames and scopes.
This expresses the property that we want to prove by induction.
Theorem:
(defthm var-visible-preservep-necc (implies (var-visible-preservep compst compst1) (implies (and (identp var) (natp n) (natp m) (objdesign-of-var var (peel-scopes m (peel-frames n compst)))) (objdesign-of-var var (peel-scopes m (peel-frames n compst1))))))
Theorem:
(defthm booleanp-of-var-visible-preservep (b* ((yes/no (var-visible-preservep compst compst1))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm var-visible-preservep-of-compustate-fix-compst (equal (var-visible-preservep (compustate-fix compst) compst1) (var-visible-preservep compst compst1)))
Theorem:
(defthm var-visible-preservep-compustate-equiv-congruence-on-compst (implies (compustate-equiv compst compst-equiv) (equal (var-visible-preservep compst compst1) (var-visible-preservep compst-equiv compst1))) :rule-classes :congruence)
Theorem:
(defthm var-visible-preservep-of-compustate-fix-compst1 (equal (var-visible-preservep compst (compustate-fix compst1)) (var-visible-preservep compst compst1)))
Theorem:
(defthm var-visible-preservep-compustate-equiv-congruence-on-compst1 (implies (compustate-equiv compst1 compst1-equiv) (equal (var-visible-preservep compst compst1) (var-visible-preservep compst compst1-equiv))) :rule-classes :congruence)
Theorem:
(defthm var-visible-preservep-reflexive (var-visible-preservep compst compst))
Theorem:
(defthm var-visible-preservep-transitive (implies (and (var-visible-preservep compst compst1) (var-visible-preservep compst1 compst2)) (var-visible-preservep compst compst2)))