How read-object changes under create-var.
The theorem that equates read-object after create-var to a conditional term is limited to top-level object designators. Handling other kinds of object designators is more complicated, due to the possibility of partial overlap of objects; we plan to tackle these eventually.
The theorem that assumes the existence of the object before the variable creation works with every kind of object designator.
Theorem:
(defthm read-object-of-create-var-when-static (implies (and (equal (objdesign-kind objdes) :static) (not (errorp (create-var var val compst))) (identp var)) (equal (read-object objdes (create-var var val compst)) (if (and (equal (compustate-frames-number compst) 0) (equal (objdesign-static->name objdes) var)) (remove-flexible-array-member val) (read-object objdes compst)))))
Theorem:
(defthm read-object-of-create-var-when-alloc (implies (and (equal (objdesign-kind objdes) :alloc) (not (errorp (create-var var val compst))) (identp var)) (equal (read-object objdes (create-var var val compst)) (read-object objdes compst))))
Theorem:
(defthm read-object-of-create-var-when-auto (implies (and (equal (objdesign-kind objdes) :auto) (not (errorp (create-var var val compst))) (identp var)) (equal (read-object objdes (create-var var val compst)) (if (and (> (compustate-frames-number compst) 0) (equal (objdesign-auto->name objdes) var) (equal (objdesign-auto->frame objdes) (1- (compustate-frames-number compst))) (equal (objdesign-auto->scope objdes) (1- (len (frame->scopes (top-frame compst)))))) (remove-flexible-array-member val) (read-object objdes compst)))))
Theorem:
(defthm read-object-of-create-var-when-auto/static/alloc (implies (and (member-equal (objdesign-kind objdes) '(:auto :static :alloc)) (not (errorp (create-var var val compst))) (identp var)) (equal (read-object objdes (create-var var val compst)) (if (or (and (equal (objdesign-kind objdes) :static) (equal (compustate-frames-number compst) 0) (equal (objdesign-static->name objdes) var)) (and (equal (objdesign-kind objdes) :auto) (> (compustate-frames-number compst) 0) (equal (objdesign-auto->name objdes) var) (equal (objdesign-auto->frame objdes) (1- (compustate-frames-number compst))) (equal (objdesign-auto->scope objdes) (1- (len (frame->scopes (top-frame compst))))))) (remove-flexible-array-member val) (read-object objdes compst)))))
Theorem:
(defthm read-object-of-create-var-when-existing (b* ((compst1 (create-var var val compst))) (implies (and (not (errorp compst1)) (not (errorp (read-object objdes compst)))) (equal (read-object objdes compst1) (read-object objdes compst)))))