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