#|
     Copyright (C) 1990-1994 Computational Logic, Inc.  All Rights
     Reserved.
                        FM9001 PUBLIC SOFTWARE LICENSE
                          Computational Logic, Inc.
                          1717 West Sixth, Suite 290
                           Austin, Texas 78703-4776
Please  read this license carefully before using the FM9001 Software. By using
the FM9001 Software, you are agreeing  to  be  bound  by  the  terms  of  this
license. If you do not agree to the terms of this license, promptly return the
FM9001 Software to the place where you obtained it.
The FM9001 Software was developed by Computational Logic, Inc.(CLI).  You  own
the  disk  or  other  medium on which the FM9001 Software is recorded, but CLI
retains title to the FM9001 Software.  The purposes of  this  license  are  to
identify  the  FM9001  Software and to make the FM9001 Software, including its
source code, freely  available.    This  license  allows  you  to  use,  copy,
distribute  and  modify  the FM9001 Software, on the condition that you comply
with all the Copying Policies set out below.
COPYING POLICIES
1. You may copy and distribute verbatim copies of the FM9001 Software  as  you
receive  it,  in  any  medium,  including  embedding it verbatim in derivative
works, provided that you a) conspicuously and appropriately  publish  on  each
copy a valid copyright notice "Copyright (C) 1990-1994 by Computational Logic,
Inc. All Rights Reserved.", b) keep intact on all files the notices that refer
to  this License Agreement and to the absence of any warranty, and c) give all
recipients of the FM9001 Software a copy of this License Agreement along  with
the program.
2. You may modify your copy or copies of the FM9001 Software or any portion of
it, and copy and distribute such modifications provided  you  tell  recipients
that  what they have is a modification by your organization of the CLI version
of the FM9001 Software.
3. You may incorporate parts  of  the  FM9001  Software  into  other  programs
provided  that  you  acknowledge  Computational  Logic  Inc.  in  the  program
documentation.
CLI also requests, but does not require, that any improvements  or  extensions
to the FM9001 Software be returned to one of the addresses below, so that they

may be shared with other FM9001 users.  The  FM9001  Software,  including  its
source, can be obtained by contacting one of these addresses.
    Software-Request                 or     Software-Request@CLI.COM
    Computational Logic Inc.
    1717 West Sixth, Suite 290
    Austin, TX 78703-4776
NO WARRANTY
BECAUSE  THE FM9001 SOFTWARE IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
NO WARRANTY.  THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF  ANY  KIND,
EITHER  EXPRESS  OR  IMPLIED,  INCLUDING,  BUT  NOT  LIMITED  TO,  ANY IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS  FOR  A  PARTICULAR  PURPOSE.    THE
ENTIRE  RISK  AS  TO  THE  QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE FM9001 SOFTWARE  PROVE  DEFECTIVE,  YOU  ASSUME  THE  COST  OF  ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
IN  NO  EVENT  WILL COMPUTATIONAL LOGIC INC. BE LIABLE TO YOU FOR ANY DAMAGES,
ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL  OR  CONSEQUENTIAL
DAMAGES  ARISING  OUT  OF  THE  USE  OR  INABILITY  TO USE THE FM9001 SOFTWARE
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING  RENDERED  INACCURATE
OR  LOSSES  SUSTAINED  BY  THIRD  PARTIES), EVEN IF YOU HAVE ADVISED US OF THE
POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
|#

Event: Start with the initial nqthm theory.

Event: Give the Nqthm control variable reduce-term-clock the value 2000.

Definition: delete (x, l) = if listp (l)

then if x = car (l) then cdr (l)

else cons (car (l), delete (x, cdr (l))) endif else l endif

Definition: bagdiff (x, y) = if listp (y)

then if car (y) ∈ x then bagdiff (delete (car (y), x), cdr (y))

else bagdiff (x, cdr (y)) endif else x endif

Definition: bagint (x, y) = if listp (x)

then if car (x) ∈ y then cons (car (x), bagint (cdr (x), delete (car (x), y))) else bagint (cdr (x), y) endif

else nil endif

Definition: occurrences (x, l) = if listp (l)

then if x = car (l) then 1 + occurrences (x, cdr (l))

else occurrences (x, cdr (l)) endif else 0 endif

Definition: subbagp (x, y) = if listp (x)

then if car (x) ∈ y then subbagp (cdr (x), delete (car (x), y))

else f endif else t endif

Theorem: listp-delete listp (delete (x, l)) = if listp (l) then (x ≠ car (l)) ∨ listp (cdr (l))

else f endif

Event: Enable listp-delete; name this event ‘listp-delete-off’.

Theorem: delete-non-member (x ∉ y) → (delete (x, y) = y)

Theorem: delete-delete delete (y, delete (x, z)) = delete (x, delete (y, z))

Theorem: equal-occurrences-zero (occurrences (x, l) = 0) = (x ∉ l)

Theorem: member-non-list (¬ listp (l)) → (x ∉ l)

Theorem: member-delete (x ∈ delete (y, l)) = if x ∈ l

then if x = y then 1 < occurrences (x, l)

else t endif else f endif

Theorem: member-delete-implies-membership (x ∈ delete (y, l)) → (x ∈ l)

Theorem: occurrences-delete occurrences (x, delete (y, l)) = if x = y

then if x ∈ l then occurrences (x, l) − 1

else 0 endif else occurrences (x, l) endif

Theorem: member-bagdiff (x ∈ bagdiff (a, b)) = (occurrences (x, b) < occurrences (x, a))

Theorem: bagdiff-delete bagdiff (delete (e, x), y) = delete (e, bagdiff (x, y))

Theorem: subbagp-delete subbagp (x, delete (u, y)) → subbagp (x, y)

Theorem: subbagp-cdr1 subbagp (x, y) → subbagp (cdr (x), y)

Theorem: subbagp-cdr2 subbagp (x, cdr (y)) → subbagp (x, y)

Theorem: subbagp-bagint1 subbagp (bagint (x, y), x)

Theorem: subbagp-bagint2 subbagp (bagint (x, y), y)

Theorem: occurrences-bagint occurrences (x, bagint (a, b)) = if occurrences (x, a) < occurrences (x, b) then occurrences (x, a)

else occurrences (x, b) endif

Theorem: occurrences-bagdiff occurrences (x, bagdiff (a, b)) = (occurrences (x, a) − occurrences (x, b))

Theorem: member-bagint (x ∈ bagint (a, b)) = ((x ∈ a) ∧ (x ∈ b))

Event: Let us define the theory bags to consist of the following events: occurrencesbagint, bagdiff-delete, occurrences-bagdiff, member-bagint, member-bagdiff, subbagpbagint2, subbagp-bagint1, subbagp-cdr2, subbagp-cdr1, subbagp-delete.

Theorem: equal-plus-0 ((a + b) = 0) = ((a ≃ 0) ∧ (b ≃ 0))

Theorem: plus-cancellation ((a + b) = (a + c)) = (fix (b) = fix (c))

Event: Enable plus-cancellation; name this event ‘plus-cancellation-off’.

Theorem: equal-difference-0 (((x − y) = 0) = (y ≮ x)) ∧ ((0 = (x − y)) = (y ≮ x))

Theorem: difference-cancellation ((x − y) = (z − y)) = if x < y then y ≮ z

elseif z < y then y ≮ x else fix (x) = fix (z) endif

Event: Enable difference-cancellation; name this event ‘difference-cancellation-off’.

Theorem: commutativity-of-plus (x + y) = (y + x)

Theorem: commutativity2-of-plus (x + y + z) = (y + x + z)

Theorem: plus-zero-arg2 (y ≃ 0) → ((x + y) = fix (x))

Theorem: plus-add1-arg1 ((1 + a) + b) = (1 + (a + b))

Theorem: plus-add1-arg2 (x + (1 + y)) = if y ∈ N then 1 + (x + y)

else 1 + x endif Theorem: associativity-of-plus ((x + y) + z) = (x + y + z)

Theorem: plus-difference-arg1 ((a − b) + c) = if b < a then (a + c) − b

else 0 + c endif

Theorem: plus-difference-arg2 (a + (b − c)) = if c < b then (a + b) − c

else a + 0 endif

Theorem: difference-plus-cancellation-proof ((x + y) − x) = fix (y)

Theorem: difference-plus-cancellation (((x + y) − x) = fix (y)) ∧ (((y + x) − x) = fix (y))

Event: Enable difference-plus-cancellation; name this event ‘difference-plus-cancellation-off’.

Theorem: difference-plus-plus-cancellation-proof ((x + y) − (x + z)) = (y − z)

Theorem: difference-plus-plus-cancellation (((x + y) − (x + z)) = (y − z)) ∧ (((y + x) − (x + z)) = (y − z)) ∧ (((x + y) − (z + x)) = (y − z)) ∧ (((y + x) − (z + x)) = (y − z))

Event: Enable difference-plus-plus-cancellation; name this event ‘differenceplus-plus-cancellation-off’.

Theorem: difference-plus-plus-cancellation-hack ((w + x + a) − (y + z + a)) = ((w + x) − (y + z))

Event: Enable difference-plus-plus-cancellation-hack; name this event ‘differenceplus-plus-cancellation-hack-off’.

Theorem: diff-sub1-arg2 (a − (b − 1)) = if b ≃ 0 then fix (a)

elseif a < b then 0 else 1 + (a − b) endif Event: Enable diff-sub1-arg2; name this event ‘diff-sub1-arg2-off’.

Theorem: diff-diff-arg1 ((x − y) − z) = (x − (y + z))

Theorem: diff-diff-arg2 (a − (b − c)) = if b < c then fix (a)

else (a + c) − b endif

Theorem: diff-diff-diff (if a < b then f else t endif ∧ if c < d then f

else t endif) → (((a − b) − (c − d)) = ((a + d) − (b + c)))

Event: Enable diff-diff-diff; name this event ‘diff-diff-diff-off’.

Theorem: difference-lessp-arg1 (a < b) → ((a − b) = 0)

Event: Enable difference-lessp-arg1; name this event ‘difference-lessp-arg1-off’.

Definition: plus-fringe (x) = if listp (x) ∧ (car (x) = 'plus)

then append (plus-fringe (cadr (x)), plus-fringe (caddr (x)))

else list (x) endif

Definition: plus-tree (l) = if l ≃ nil then ''0

elseif cdr (l) ≃ nil then list ('fix, car (l))

elseif cddr (l) ≃ nil then list ('plus, car (l), cadr (l))

else list ('plus, car (l), plus-tree (cdr (l))) endif

Theorem: numberp-eval$-plus (listp (x) ∧ (car (x) = 'plus)) → (eval$ (t, x, a) ∈ N)

Event: Enable numberp-eval$-plus; name this event ‘numberp-eval$-plus-off’.

Theorem: numberp-eval$-plus-tree eval$ (t, plus-tree (l), a) ∈ N Event: Enable numberp-eval$-plus-tree; name this event ‘numberp-eval$-plus-tree-off’.

Theorem: member-implies-plus-tree-greatereqp (x ∈ y) → (eval$ (t, plus-tree (y), a) ≮ eval$ (t, x, a))

Event: Enable member-implies-plus-tree-greatereqp; name this event ‘memberimplies-plus-tree-greatereqp-off’.

Theorem: plus-tree-delete eval$ (t, plus-tree (delete (x, y)), a) = if x ∈ y then eval$ (t, plus-tree (y), a) − eval$ (t, x, a)

else eval$ (t, plus-tree (y), a) endif

Event: Enable plus-tree-delete; name this event ‘plus-tree-delete-off’.

Theorem: subbagp-implies-plus-tree-greatereqp subbagp (x, y) → (eval$ (t, plus-tree (y), a) ≮ eval$ (t, plus-tree (x), a))

Event: Enable subbagp-implies-plus-tree-greatereqp; name this event ‘subbagpimplies-plus-tree-greatereqp-off’.

Theorem: plus-tree-bagdiff subbagp (x, y) → (eval$ (t, plus-tree (bagdiff (y, x)), a)

= (eval$ (t, plus-tree (y), a) − eval$ (t, plus-tree (x), a)))

Event: Enable plus-tree-bagdiff; name this event ‘plus-tree-bagdiff-off’.

Theorem: numberp-eval$-bridge (eval$ (t, z, a) = eval$ (t, plus-tree (x), a)) → (eval$ (t, z, a) ∈ N)

Event: Enable numberp-eval$-bridge; name this event ‘numberp-eval$-bridge-off’.

Theorem: bridge-to-subbagp-implies-plus-tree-greatereqp (subbagp (y, plus-fringe (z)) ∧ (eval$ (t, z, a) = eval$ (t, plus-tree (plus-fringe (z)), a))) → ((eval$ (t, z, a) < eval$ (t, plus-tree (y), a)) = f)

Event: Enable bridge-to-subbagp-implies-plus-tree-greatereqp; name this event ‘bridge-to-subbagp-implies-plus-tree-greatereqp-off’.

Theorem: eval$-plus-tree-append eval$ (t, plus-tree (append (x, y)), a) = (eval$ (t, plus-tree (x), a) + eval$ (t, plus-tree (y), a))

Event: Enable eval$-plus-tree-append; name this event ‘eval$-plus-tree-append-off’.

Theorem: plus-tree-plus-fringe eval$ (t, plus-tree (plus-fringe (x)), a) = fix (eval$ (t, x, a))

Event: Enable plus-tree-plus-fringe; name this event ‘plus-tree-plus-fringe-off’.

Theorem: member-implies-numberp ((c ∈ plus-fringe (x)) ∧ (eval$ (t, c, a) ∈ N)) → (eval$ (t, x, a) ∈ N)

Event: Enable member-implies-numberp; name this event ‘member-implies-numberp-off’.

Theorem: cadr-eval$-list (car (eval$ ('list, x, a)) = eval$ (t, car (x), a)) ∧ (cdr (eval$ ('list, x, a))

= if listp (x) then eval$ ('list, cdr (x), a) else 0 endif)

Event: Enable cadr-eval$-list; name this event ‘cadr-eval$-list-off’.

Theorem: eval$-quote eval$ (t, cons ('quote, args), a) = car (args)

Event: Enable eval$-quote; name this event ‘eval$-quote-off’.

Theorem: listp-eval$ listp (eval$ ('list, x, a)) = listp (x)

Event: Enable listp-eval$; name this event ‘listp-eval$-off’.

Definition: cancel-equal-plus (x) = if listp (x) ∧ (car (x) = 'equal)

then if listp (cadr (x)) ∧ (caadr (x) = 'plus) ∧ listp (caddr (x))

∧ (caaddr (x) = 'plus) then list ('equal,

plus-tree (bagdiff (plus-fringe (cadr (x)),

bagint (plus-fringe (cadr (x)),

plus-fringe (caddr (x))))),

plus-tree (bagdiff (plus-fringe (caddr (x)),

bagint (plus-fringe (cadr (x)),

plus-fringe (caddr (x))))))

elseif listp (cadr (x)) ∧ (caadr (x) = 'plus) ∧ (caddr (x) ∈ plus-fringe (cadr (x)))

then list ('if, list ('numberp, caddr (x)),

cons ('equal,

cons (plus-tree (delete (caddr (x),

plus-fringe (cadr (x)))),

         '('0))),

list ('quote, f))

elseif listp (caddr (x)) ∧ (caaddr (x) = 'plus) ∧ (cadr (x) ∈ plus-fringe (caddr (x)))

then list ('if, list ('numberp, cadr (x)),

list ('equal,
    ''0,

plus-tree (delete (cadr (x), plus-fringe (caddr (x))))), list ('quote, f))

else x endif else x endif

Theorem: correctness-of-cancel-equal-plus eval$ (t, x, a) = eval$ (t, cancel-equal-plus (x), a)

Definition: cancel-difference-plus (x) = if listp (x) ∧ (car (x) = 'difference)

then if listp (cadr (x)) ∧ (caadr (x) = 'plus) ∧ listp (caddr (x)) ∧ (caaddr (x) = 'plus)

then list ('difference,

plus-tree (bagdiff (plus-fringe (cadr (x)),

bagint (plus-fringe (cadr (x)), plus-fringe (caddr (x))))), plus-tree (bagdiff (plus-fringe (caddr (x)),

bagint (plus-fringe (cadr (x)),

plus-fringe (caddr (x))))))

elseif listp (cadr (x))

∧ (caadr (x) = 'plus)

∧ (caddr (x) ∈ plus-fringe (cadr (x))) then plus-tree (delete (caddr (x), plus-fringe (cadr (x)))) elseif listp (caddr (x))

∧ (caaddr (x) = 'plus)

∧ (cadr (x) ∈ plus-fringe (caddr (x))) then ''0 else x endif

else x endif

Theorem: correctness-of-cancel-difference-plus eval$ (t, x, a) = eval$ (t, cancel-difference-plus (x), a)

Theorem: difference-elim ((y ∈ N) ∧ (y ≮ x)) → ((x + (y − x)) = y)

Theorem: difference-leq-arg1 if b < a then f else t endif → ((a − b) = 0)

Theorem: difference-add1-arg2 (a − (1 + b)) = if b < a then (a − b) − 1

else 0 endif

Theorem: difference-sub1-arg2 (a − (b − 1)) = if b ≃ 0 then fix (a)

elseif a < b then 0 else 1 + (a − b) endif

Theorem: difference-difference-arg1 ((x − y) − z) = (x − (y + z))

Theorem: difference-difference-arg2 (a − (b − c)) = if b < c then fix (a)

else (a + c) − b endif

Theorem: difference-x-x (x − x) = 0 Theorem: lessp-difference-cancellation ((a − c) < (b − c)) = if if a < c then f

else t endif then a < b else c < b endif

Event: Enable lessp-difference-cancellation; name this event ‘lessp-difference-cancellation-off’.

Definition: cancel-lessp-plus (x) = if listp (x) ∧ (car (x) = 'lessp)

then if listp (cadr (x)) ∧ (caadr (x) = 'plus) ∧ listp (caddr (x)) ∧ (caaddr (x) = 'plus)

then list ('lessp,

plus-tree (bagdiff (plus-fringe (cadr (x)),

bagint (plus-fringe (cadr (x)),

plus-fringe (caddr (x))))),

plus-tree (bagdiff (plus-fringe (caddr (x)),

bagint (plus-fringe (cadr (x)),

plus-fringe (caddr (x))))))

elseif listp (cadr (x)) ∧ (caadr (x) = 'plus) ∧ (caddr (x) ∈ plus-fringe (cadr (x)))

then list ('quote, f) elseif listp (caddr (x))

∧ (caaddr (x) = 'plus)

∧ (cadr (x) ∈ plus-fringe (caddr (x))) then list ('not,

                 list ('zerop,

plus-tree (delete (cadr (x), plus-fringe (caddr (x))))))

else x endif else x endif

Theorem: correctness-of-cancel-lessp-plus eval$ (t, x, a) = eval$ (t, cancel-lessp-plus (x), a)

Event: Let us define the theory addition to consist of the following events: equal-plus-0, equal-difference-0, commutativity-of-plus, commutativity2-of-plus, plus-zero-arg2, plus-add1-arg2, plus-add1-arg1, associativity-of-plus, plus-difference-arg1, plus-difference-arg2, diff-diff-arg1, diff-diff-arg2, correctness-of-cancel-equal-plus, correctness-of-cancel-difference-plus, difference-elim, difference-leq-arg1, differenceadd1-arg2, difference-sub1-arg2, difference-difference-arg1, difference-difference-arg2, difference-x-x, correctness-of-cancel-lessp-plus.

Theorem: equal-times-0 ((x ∗ y) = 0) = ((x ≃ 0) ∨ (y ≃ 0))

Theorem: equal-times-1 ((a ∗ b) = 1) = ((a = 1) ∧ (b = 1))

Theorem: equal-sub1-0 ((x − 1) = 0) = ((x ≃ 0) ∨ (x = 1))

Theorem: times-zero (y ≃ 0) → ((x ∗ y) = 0)

Theorem: times-add1 (x ∗ (1 + y)) = if y ∈ N then x + (x ∗ y)

else fix (x) endif

Theorem: commutativity-of-times (y ∗ x) = (x ∗ y)

Theorem: times-distributes-over-plus-proof (x ∗ (y + z)) = ((x ∗ y) + (x ∗ z))

Theorem: times-distributes-over-plus ((x ∗ (y + z)) = ((x ∗ y) + (x ∗ z))) ∧ (((x + y) ∗ z) = ((x ∗ z) + (y ∗ z)))

Theorem: commutativity2-of-times (x ∗ y ∗ z) = (y ∗ x ∗ z)

Theorem: associativity-of-times ((x ∗ y) ∗ z) = (x ∗ y ∗ z)

Theorem: times-distributes-over-difference-proof ((a − b) ∗ c) = ((a ∗ c) − (b ∗ c))

Theorem: times-distributes-over-difference (((a − b) ∗ c) = ((a ∗ c) − (b ∗ c))) ∧ ((a ∗ (b − c)) = ((a ∗ b) − (a ∗ c)))

Theorem: times-quotient-proof ((x ≄ 0) ∧ ((y mod x) = 0)) → (((y ÷ x) ∗ x) = fix (y))

Theorem: times-quotient ((y ≄ 0) ∧ ((x mod y) = 0)) → ((((x ÷ y) ∗ y) = fix (x)) ∧ ((y ∗ (x ÷ y)) = fix (x)))

Theorem: times-1-arg1 (1 ∗ x) = fix (x)

Theorem: lessp-times1-proof ((a < b) ∧ (c ≄ 0)) → ((a < (b ∗ c)) = t)

Theorem: lessp-times1 ((a < b) ∧ (c ≄ 0)) → (((a < (b ∗ c)) = t) ∧ ((a < (c ∗ b)) = t))

Theorem: lessp-times2-proof (if b < a then f else t endif ∧ (c ≄ 0)) → (((b ∗ c) < a) = f)

Theorem: lessp-times2 (if b < a then f else t endif ∧ (c ≄ 0)) → ((((b ∗ c) < a) = f) ∧ (((c ∗ b) < a) = f))

Theorem: lessp-times3-proof1 ((a ≄ 0) ∧ (1 < b)) → (a < (a ∗ b))

Theorem: lessp-times3-proof2 (a < (a ∗ b)) → ((a ≄ 0) ∧ (1 < b))

Theorem: lessp-times3 ((a < (a ∗ b)) = ((a ≄ 0) ∧ (1 < b))) ∧ ((a < (b ∗ a)) = ((a ≄ 0) ∧ (1 < b)))

Theorem: lessp-times-cancellation-proof ((x ∗ z) < (y ∗ z)) = ((z ≄ 0) ∧ (x < y))

Theorem: lessp-times-cancellation1 (((x ∗ z) < (y ∗ z)) = ((z ≄ 0) ∧ (x < y))) ∧ (((z ∗ x) < (y ∗ z)) = ((z ≄ 0) ∧ (x < y))) ∧ (((x ∗ z) < (z ∗ y)) = ((z ≄ 0) ∧ (x < y))) ∧ (((z ∗ x) < (z ∗ y)) = ((z ≄ 0) ∧ (x < y)))

Event: Enable lessp-times-cancellation1; name this event ‘lessp-times-cancellation1-off’.

Theorem: lessp-plus-times-proof (x < a) → (((x + (a ∗ b)) < (a ∗ c)) = (b < c))

Theorem: lessp-plus-times1 (((a + (b ∗ c)) < b) = ((a < b) ∧ (c ≃ 0))) ∧ (((a + (c ∗ b)) < b) = ((a < b) ∧ (c ≃ 0))) ∧ ((((c ∗ b) + a) < b) = ((a < b) ∧ (c ≃ 0))) ∧ ((((b ∗ c) + a) < b) = ((a < b) ∧ (c ≃ 0)))

Theorem: lessp-plus-times2 ((a ≄ 0) ∧ (x < a)) → ((((x + (a ∗ b)) < (a ∗ c)) = (b < c))

∧ (((x + (b ∗ a)) < (a ∗ c)) = (b < c))

∧ (((x + (a ∗ b)) < (c ∗ a)) = (b < c))
∧ (((x + (b ∗ a)) < (c ∗ a)) = (b < c))
∧ ((((a ∗ b) + x) < (a ∗ c)) = (b < c))
∧ ((((b ∗ a) + x) < (a ∗ c)) = (b < c))
∧ ((((a ∗ b) + x) < (c ∗ a)) = (b < c))
∧ ((((b ∗ a) + x) < (c ∗ a)) = (b < c)))

Theorem: lessp-1-times (1 < (a ∗ b)) = (¬ ((a ≃ 0) ∨ (b ≃ 0) ∨ ((a = 1) ∧ (b = 1))))

Definition: times-tree (x) = if x ≃ nil then ''1

elseif cdr (x) ≃ nil then list ('fix, car (x))

elseif cddr (x) ≃ nil then list ('times, car (x), cadr (x))

else list ('times, car (x), times-tree (cdr (x))) endif

Definition: times-fringe (x) = if listp (x) ∧ (car (x) = 'times)

then append (times-fringe (cadr (x)), times-fringe (caddr (x))) else list (x) endif

Definition: or-zerop-tree (x) = if x ≃ nil then '(false)

elseif cdr (x) ≃ nil then list ('zerop, car (x))

elseif cddr (x) ≃ nil

then list ('or, list ('zerop, car (x)), list ('zerop, cadr (x))) else list ('or, list ('zerop, car (x)), or-zerop-tree (cdr (x))) endif Definition: and-not-zerop-tree (x) = if x ≃ nil then '(true)

elseif cdr (x) ≃ nil then list ('not, list ('zerop, car (x)))

else list ('and, list ('not, list ('zerop, car (x))), and-not-zerop-tree (cdr (x))) endif

Theorem: numberp-eval$-times (car (x) = 'times) → (eval$ (t, x, a) ∈ N)

Event: Enable numberp-eval$-times; name this event ‘numberp-eval$-times-off’.

Theorem: eval$-times (car (x) = 'times) → (eval$ (t, x, a) = (eval$ (t, cadr (x), a) ∗ eval$ (t, caddr (x), a)))

Event: Enable eval$-times; name this event ‘eval$-times-off’.

Theorem: eval$-or (car (x) = 'or) → (eval$ (t, x, a) = (eval$ (t, cadr (x), a) ∨ eval$ (t, caddr (x), a)))

Event: Enable eval$-or; name this event ‘eval$-or-off’.

Theorem: eval$-equal (car (x) = 'equal) → (eval$ (t, x, a) = (eval$ (t, cadr (x), a) = eval$ (t, caddr (x), a)))

Event: Enable eval$-equal; name this event ‘eval$-equal-off’.

Theorem: eval$-lessp (car (x) = 'lessp) → (eval$ (t, x, a) = (eval$ (t, cadr (x), a) < eval$ (t, caddr (x), a)))

Event: Enable eval$-lessp; name this event ‘eval$-lessp-off’.

Theorem: eval$-quotient

 (car (x) = 'quotient)

→ (eval$ (t, x, a) = (eval$ (t, cadr (x), a) ÷ eval$ (t, caddr (x), a)))

Event: Enable eval$-quotient; name this event ‘eval$-quotient-off’.

Theorem: eval$-if (car (x) = 'if) → (eval$ (t, x, a)

= if eval$ (t, cadr (x), a) then eval$ (t, caddr (x), a) else eval$ (t, cadddr (x), a) endif)

Event: Enable eval$-if; name this event ‘eval$-if-off’.

Theorem: numberp-eval$-times-tree eval$ (t, times-tree (x), a) ∈ N

Event: Enable numberp-eval$-times-tree; name this event ‘numberp-eval$- times-tree-off’.

Theorem: lessp-times-arg1 (a ≄ 0) → (((a ∗ x) ≮ (a ∗ y)) = (x ≮ y))

Theorem: infer-equality-from-not-lessp ((a ∈ N) ∧ (b ∈ N)) → (((a ≮ b) ∧ (b ≮ a)) = (a = b))

Theorem: equal-times-arg1 (a ≄ 0) → (((a ∗ x) = (a ∗ y)) = (fix (x) = fix (y)))

Event: Enable equal-times-arg1; name this event ‘equal-times-arg1-off’.

Theorem: equal-times-bridge ((a ∗ b) = (c ∗ a ∗ d)) = ((a ≃ 0) ∨ (fix (b) = (c ∗ d)))

Event: Enable equal-times-bridge; name this event ‘equal-times-bridge-off’.

Theorem: eval$-times-member (e ∈ x) → (eval$ (t, times-tree (x), a)

= (eval$ (t, e, a) ∗ eval$ (t, times-tree (delete (e, x)), a)))

Event: Enable eval$-times-member; name this event ‘eval$-times-member-off’.

Theorem: zerop-makes-times-tree-zero ((¬ eval$ (t, and-not-zerop-tree (x), a)) ∧ subbagp (x, y)) → (eval$ (t, times-tree (y), a) = 0)

Event: Enable zerop-makes-times-tree-zero; name this event ‘zerop-makes-times-tree-zero-off’.

Theorem: or-zerop-tree-is-not-zerop-tree eval$ (t, or-zerop-tree (x), a) = (¬ eval$ (t, and-not-zerop-tree (x), a))

Event: Enable or-zerop-tree-is-not-zerop-tree; name this event ‘or-zerop-tree-is-not-zerop-tree-off’.

Theorem: zerop-makes-times-tree-zero2 (eval$ (t, or-zerop-tree (x), a) ∧ subbagp (x, y)) → (eval$ (t, times-tree (y), a) = 0)

Event: Enable zerop-makes-times-tree-zero2; name this event ‘zerop-makes-times-tree-zero2-off’.

Theorem: times-tree-append eval$ (t, times-tree (append (x, y)), a) = (eval$ (t, times-tree (x), a) ∗ eval$ (t, times-tree (y), a))

Event: Enable times-tree-append; name this event ‘times-tree-append-off’.

Theorem: times-tree-of-times-fringe eval$ (t, times-tree (times-fringe (x)), a) = fix (eval$ (t, x, a))

Event: Enable times-tree-of-times-fringe; name this event ‘times-tree-of-times-fringe-off’.

Definition: cancel-lessp-times (x) = if (car (x) = 'lessp)

∧ (caadr (x) = 'times) ∧ (caaddr (x) = 'times)

then if listp (bagint (times-fringe (cadr (x)), times-fringe (caddr (x))))

then list ('and,

and-not-zerop-tree (bagint (times-fringe (cadr (x)),

times-fringe (caddr (x)))),

                 list ('lessp,

times-tree (bagdiff (times-fringe (cadr (x)),

bagint (times-fringe (cadr (x)),

times-fringe (caddr (x))))),

times-tree (bagdiff (times-fringe (caddr (x)),

bagint (times-fringe (cadr (x)),

times-fringe (caddr (x)))))))

else x endif else x endif Theorem: eval$-lessp-times-tree-bagdiff (subbagp (x, y) ∧ subbagp (x, z) ∧ eval$ (t, and-not-zerop-tree (x), a)) → ((eval$ (t, times-tree (bagdiff (y, x)), a)

< eval$ (t, times-tree (bagdiff (z, x)), a))

= (eval$ (t, times-tree (y), a) < eval$ (t, times-tree (z), a)))

Event: Enable eval$-lessp-times-tree-bagdiff; name this event ‘eval$-lessp-times-tree-bagdiff-off’.

Theorem: zerop-makes-lessp-false-bridge ((car (x) = 'times) ∧ (car (y) = 'times) ∧ (¬ eval$ (t,

and-not-zerop-tree (bagint (times-fringe (x), times-fringe (y))), a)))

→ (((eval$ (t, cadr (x), a) ∗ eval$ (t, caddr (x), a))

< (eval$ (t, cadr (y), a) ∗ eval$ (t, caddr (y), a)))

= f)

Event: Enable zerop-makes-lessp-false-bridge; name this event ‘zerop-makes-lessp-false-bridge-off’.

Theorem: correctness-of-cancel-lessp-times eval$ (t, x, a) = eval$ (t, cancel-lessp-times (x), a)

Definition: cancel-equal-times (x) = if (car (x) = 'equal)

∧ (caadr (x) = 'times) ∧ (caaddr (x) = 'times)

then if listp (bagint (times-fringe (cadr (x)), times-fringe (caddr (x))))

then list ('or,

or-zerop-tree (bagint (times-fringe (cadr (x)),

times-fringe (caddr (x)))),

                 list ('equal,

times-tree (bagdiff (times-fringe (cadr (x)),

bagint (times-fringe (cadr (x)),

times-fringe (caddr (x))))),

times-tree (bagdiff (times-fringe (caddr (x)),

bagint (times-fringe (cadr (x)),

times-fringe (caddr (x)))))))

else x endif else x endif Theorem: zerop-makes-equal-true-bridge ((car (x) = 'times) ∧ (car (y) = 'times) ∧ eval$ (t, or-zerop-tree (bagint (times-fringe (x), times-fringe (y))), a)) → (((eval$ (t, cadr (x), a) ∗ eval$ (t, caddr (x), a))

= (eval$ (t, cadr (y), a) ∗ eval$ (t, caddr (y), a)))

= t)

Event: Enable zerop-makes-equal-true-bridge; name this event ‘zerop-makes-equal-true-bridge-off’.

Theorem: eval$-equal-times-tree-bagdiff (subbagp (x, y) ∧ subbagp (x, z) ∧ (¬ eval$ (t, or-zerop-tree (x), a))) → ((eval$ (t, times-tree (bagdiff (y, x)), a)

= eval$ (t, times-tree (bagdiff (z, x)), a))

= (eval$ (t, times-tree (y), a) = eval$ (t, times-tree (z), a)))

Event: Enable eval$-equal-times-tree-bagdiff; name this event ‘eval$-equal-times-tree-bagdiff-off’.

Theorem: cancel-equal-times-preserves-inequality (subbagp (z, x) ∧ subbagp (z, y) ∧ (eval$ (t, times-tree (x), a) ≠ eval$ (t, times-tree (y), a))) → (eval$ (t, times-tree (bagdiff (x, z)), a)

≠ eval$ (t, times-tree (bagdiff (y, z)), a))

Event: Enable cancel-equal-times-preserves-inequality; name this event ‘cancelequal-times-preserves-inequality-off’.

Theorem: cancel-equal-times-preserves-inequality-bridge ((car (x) = 'times) ∧ (car (y) = 'times) ∧ ((eval$ (t, cadr (x), a) ∗ eval$ (t, caddr (x), a))

≠ (eval$ (t, cadr (y), a) ∗ eval$ (t, caddr (y), a)))) → (eval$ (t,

times-tree (bagdiff (times-fringe (x),

bagint (times-fringe (x), times-fringe (y)))),

a) ≠ eval$ (t,

times-tree (bagdiff (times-fringe (y),

bagint (times-fringe (x),

times-fringe (y)))),

a))

Event: Enable cancel-equal-times-preserves-inequality-bridge; name this event ‘cancel-equal-times-preserves-inequality-bridge-off’.

Theorem: correctness-of-cancel-equal-times eval$ (t, x, a) = eval$ (t, cancel-equal-times (x), a)

Event: Let us define the theory multiplication to consist of the following events: equal-times-0, equal-times-1, equal-sub1-0, times-zero, times-add1, commutativityof-times, times-distributes-over-plus, commutativity2-of-times, associativity-of-times, times-distributes-over-difference, times-quotient, times-1-arg1, lessp-times1, lessp-times2, lessp-times3, lessp-plus-times1, lessp-plus-times2, lessp-1-times, correctness-of-cancel-lessp-times, correctness-of-cancel-equal-times.

Theorem: lessp-remainder ((x mod y) < y) = (y ≄ 0)

Theorem: remainder-noop (a < b) → ((a mod b) = fix (a))

Theorem: remainder-of-non-number (a ∉ N) → ((a mod n) = (0 mod n))

Theorem: remainder-zero (x ≃ 0) → ((y mod x) = fix (y))

Theorem: plus-remainder-times-quotient ((x mod y) + (y ∗ (x ÷ y))) = fix (x)

Event: Enable plus-remainder-times-quotient; name this event ‘plus-remainder-times-quotient-off’.

Theorem: remainder-quotient-elim ((y ≄ 0) ∧ (x ∈ N)) → (((x mod y) + (y ∗ (x ÷ y))) = x)

Theorem: remainder-add1 ((a mod b) = 0) → (((1 + a) mod b) = (1 mod b))

Theorem: remainder-plus-proof ((b mod c) = 0) → (((a + b) mod c) = (a mod c))

Theorem: remainder-plus ((a mod c) = 0) → ((((a + b) mod c) = (b mod c))

∧ (((b + a) mod c) = (b mod c))

∧ (((x + y + a) mod c) = ((x + y) mod c)))

Theorem: equal-remainder-plus-0-proof ((a mod c) = 0) → ((((a + b) mod c) = 0) = ((b mod c) = 0))

Theorem: equal-remainder-plus-0 ((a mod c) = 0) → (((((a + b) mod c) = 0) = ((b mod c) = 0))

∧ ((((b + a) mod c) = 0) = ((b mod c) = 0)) ∧ ((((x + y + a) mod c) = 0)

= (((x + y) mod c) = 0)))

Theorem: equal-remainder-plus-remainder-proof (a < c) → ((((a + b) mod c) = (b mod c)) = (a ≃ 0))

Theorem: equal-remainder-plus-remainder (a < c) → (((((a + b) mod c) = (b mod c)) = (a ≃ 0))

∧ ((((b + a) mod c) = (b mod c)) = (a ≃ 0)))

Event: Enable equal-remainder-plus-remainder; name this event ‘equal-remainder-plus-remainder-off’.

Theorem: remainder-times1-proof ((b mod c) = 0) → (((a ∗ b) mod c) = 0)

Theorem: remainder-times1 ((b mod c) = 0) → ((((a ∗ b) mod c) = 0) ∧ (((b ∗ a) mod c) = 0))

Theorem: remainder-times1-instance-proof ((x ∗ y) mod y) = 0

Theorem: remainder-times1-instance (((x ∗ y) mod y) = 0) ∧ (((x ∗ y) mod x) = 0)

Theorem: remainder-times-times-proof ((x ∗ y) mod (x ∗ z)) = (x ∗ (y mod z))

Theorem: remainder-times-times (((x ∗ y) mod (x ∗ z)) = (x ∗ (y mod z))) ∧ (((x ∗ z) mod (y ∗ z)) = ((x mod y) ∗ z))

Event: Enable remainder-times-times; name this event ‘remainder-times-times-off’.

Theorem: remainder-times2-proof ((a mod z) = 0) → ((a mod (z ∗ y)) = (z ∗ ((a ÷ z) mod y)))

Theorem: remainder-times2 ((a mod z) = 0) → (((a mod (y ∗ z)) = (z ∗ ((a ÷ z) mod y)))

∧ ((a mod (z ∗ y)) = (z ∗ ((a ÷ z) mod y))))

Theorem: remainder-times2-instance (((x ∗ y) mod (x ∗ z)) = (x ∗ (y mod z))) ∧ (((x ∗ z) mod (y ∗ z)) = ((x mod y) ∗ z))

Theorem: remainder-difference1 ((a mod c) = (b mod c)) → (((a − b) mod c) = ((a mod c) − (b mod c)))

Definition: double-remainder-induction (a, b, c) = if c ≃ 0 then 0

elseif a < c then 0 elseif b < c then 0 else double-remainder-induction (a − c, b − c, c) endif

Theorem: remainder-difference2 (((a mod c) = 0) ∧ ((b mod c) ≠ 0)) → (((a − b) mod c)

= if b < a then c − (b mod c)

else 0 endif)

Theorem: remainder-difference3 (((b mod c) = 0) ∧ ((a mod c) ≠ 0)) → (((a − b) mod c)

= if b < a then a mod c else 0 endif)

Event: Enable remainder-difference3; name this event ‘remainder-difference3-off’.

Theorem: equal-remainder-difference-0 (((a − b) mod c) = 0) = if if a < b then f

else t endif then (a mod c) = (b mod c) else t endif

Event: Enable equal-remainder-difference-0; name this event ‘equal-remainder-difference-0-off’.

Theorem: lessp-plus-fact (((b mod x) = 0) ∧ ((c mod x) = 0) ∧ (b < c) ∧ (a < x)) → (((a + b) < c) = t)

Event: Enable lessp-plus-fact; name this event ‘lessp-plus-fact-off’.

Theorem: remainder-plus-fact (((b mod x) = 0) ∧ ((c mod x) = 0) ∧ (a < x)) → (((a + b) mod c) = (a + (b mod c)))

Theorem: remainder-plus-times-times-proof (a < b) → (((a + (b ∗ c)) mod (b ∗ d))

= (a + ((b ∗ c) mod (b ∗ d))))

Theorem: remainder-plus-times-times (a < b) → ((((a + (b ∗ c)) mod (b ∗ d))

= (a + ((b ∗ c) mod (b ∗ d)))) ∧ (((a + (c ∗ b)) mod (d ∗ b))

= (a + ((c ∗ b) mod (d ∗ b)))))

Theorem: remainder-plus-times-times-instance (a < b) → ((((a + (b ∗ c) + (b ∗ d)) mod (b ∗ e))

= (a + (b ∗ ((c + d) mod e))))

∧ (((a + (c ∗ b) + (d ∗ b)) mod (e ∗ b)) = (a + (b ∗ ((c + d) mod e)))))

Theorem: remainder-remainder ((b mod a) = 0) → (((n mod b) mod a) = (n mod a))

Theorem: remainder-1-arg1 (1 mod x) = if x = 1 then 0

else 1 endif

Theorem: remainder-1-arg2 (y mod 1) = 0

Theorem: remainder-x-x (x mod x) = 0

Theorem: transitivity-of-divides (((a mod b) = 0) ∧ ((b mod c) = 0)) → ((a mod c) = 0)

Event: Let us define the theory remainders to consist of the following events: lessp-remainder, remainder-noop, remainder-of-non-number, remainder-zero, remainderquotient-elim, remainder-add1, remainder-plus, equal-remainder-plus-0, remaindertimes1, remainder-times1-instance, remainder-times2, remainder-times2-instance, remainder-difference1, remainder-difference2, remainder-plus-times-times, remainderplus-times-times-instance, remainder-remainder, remainder-1-arg1, remainder-1-arg2, remainder-x-x.

Theorem: quotient-noop (b = 1) → ((a ÷ b) = fix (a))

Theorem: quotient-of-non-number (a ∉ N) → ((a ÷ n) = (0 ÷ n))

Theorem: quotient-zero (x ≃ 0) → ((y ÷ x) = 0)

Theorem: quotient-add1 ((a mod b) = 0) → (((1 + a) ÷ b)

= if b = 1 then 1 + (a ÷ b) else a ÷ b endif)

Theorem: equal-quotient-0 ((a ÷ b) = 0) = ((b ≃ 0) ∨ (a < b))

Theorem: quotient-sub1 ((a ≄ 0) ∧ (b ≄ 0)) → (((a − 1) ÷ b)

= if (a mod b) = 0 then (a ÷ b) − 1 else a ÷ b endif)

Theorem: quotient-plus-proof ((b mod c) = 0) → (((a + b) ÷ c) = ((a ÷ c) + (b ÷ c)))

Theorem: quotient-plus ((a mod c) = 0) → ((((a + b) ÷ c) = ((a ÷ c) + (b ÷ c)))

∧ (((b + a) ÷ c) = ((a ÷ c) + (b ÷ c)))

∧ (((x + y + a) ÷ c)
= (((x + y) ÷ c) + (a ÷ c))))

Theorem: quotient-times-instance-temp-proof ((y ∗ x) ÷ y) = if y ≃ 0 then 0

else fix (x) endif Theorem: quotient-times-instance-temp (((y ∗ x) ÷ y) = if y ≃ 0 then 0

else fix (x) endif) ∧ (((x ∗ y) ÷ y)

= if y ≃ 0 then 0 else fix (x) endif)

Event: Enable quotient-times-instance-temp; name this event ‘quotient-times-instance-temp-off’.

Theorem: quotient-times-proof ((a mod c) = 0) → (((a ∗ b) ÷ c) = (b ∗ (a ÷ c)))

Theorem: quotient-times ((a mod c) = 0) → ((((a ∗ b) ÷ c) = (b ∗ (a ÷ c)))

∧ (((b ∗ a) ÷ c) = (b ∗ (a ÷ c))))

Theorem: quotient-times-instance (((y ∗ x) ÷ y) = if y ≃ 0 then 0

else fix (x) endif) ∧ (((x ∗ y) ÷ y)

= if y ≃ 0 then 0 else fix (x) endif)

Theorem: quotient-times-times-proof ((x ∗ y) ÷ (x ∗ z)) = if x ≃ 0 then 0

else y ÷ z endif

Theorem: quotient-times-times (((x ∗ y) ÷ (x ∗ z)) = if x ≃ 0 then 0

else y ÷ z endif) ∧ (((x ∗ z) ÷ (y ∗ z))

= if z ≃ 0 then 0 else x ÷ y endif)

Event: Enable quotient-times-times; name this event ‘quotient-times-times-off’.

Theorem: quotient-difference1 ((a mod c) = (b mod c)) → (((a − b) ÷ c) = ((a ÷ c) − (b ÷ c)))

Theorem: quotient-lessp-arg1 (a < b) → ((a ÷ b) = 0)

Theorem: quotient-difference2 (((a mod c) = 0) ∧ ((b mod c) ≠ 0)) → (((a − b) ÷ c)

= if b < a then (a ÷ c) − (1 + (b ÷ c)) else 0 endif)

Theorem: quotient-difference3 (((b mod c) = 0) ∧ ((a mod c) ≠ 0)) → (((a − b) ÷ c)

= if b < a then (a ÷ c) − (b ÷ c) else 0 endif)

Theorem: remainder-equals-its-first-argument (a = (a mod b)) = ((a ∈ N) ∧ ((b ≃ 0) ∨ (a < b)))

Event: Enable remainder-equals-its-first-argument; name this event ‘remainderequals-its-first-argument-off’.

Theorem: quotient-remainder-times ((x mod (a ∗ b)) ÷ a) = ((x ÷ a) mod b)

Theorem: quotient-remainder ((c mod a) = 0) → (((b mod c) ÷ a) = ((b ÷ a) mod (c ÷ a)))

Theorem: quotient-remainder-instance ((x mod (a ∗ b)) ÷ a) = ((x ÷ a) mod b)

Theorem: quotient-plus-fact (((b mod x) = 0) ∧ ((c mod x) = 0) ∧ (a < x)) → (((a + b) ÷ c) = (b ÷ c))

Theorem: quotient-plus-times-times-proof (a < b) → (((a + (b ∗ c)) ÷ (b ∗ d)) = ((b ∗ c) ÷ (b ∗ d)))

Theorem: quotient-plus-times-times (a < b) → ((((a + (b ∗ c)) ÷ (b ∗ d)) = ((b ∗ c) ÷ (b ∗ d)))

∧ (((a + (b ∗ c)) ÷ (b ∗ d))

= ((b ∗ c) ÷ (b ∗ d))))

Theorem: quotient-plus-times-times-instance (a < b) → ((((a + (b ∗ c) + (b ∗ d)) ÷ (b ∗ e))

= if b ≃ 0 then 0

else (c + d) ÷ e endif) ∧ (((a + (c ∗ b) + (d ∗ b)) ÷ (e ∗ b))

= if b ≃ 0 then 0 else (d + c) ÷ e endif))

Theorem: quotient-quotient ((b ÷ a) ÷ c) = (b ÷ (a ∗ c))

Theorem: leq-quotient (a < b) → if (b ÷ c) < (a ÷ c) then f

else t endif

Theorem: quotient-1-arg2 (n ÷ 1) = fix (n)

Theorem: quotient-1-arg1-casesplit (n ≃ 0) ∨ (n = 1) ∨ (1 < n)

Theorem: quotient-1-arg1 (1 ÷ n) = if n = 1 then 1

else 0 endif

Theorem: quotient-x-x (x ≄ 0) → ((x ÷ x) = 1)

Theorem: lessp-quotient ((i ÷ j ) < i) = ((i ≄ 0) ∧ (j ≠ 1))

Definition: cancel-quotient-times (x) = if (car (x) = 'quotient)

∧ (caadr (x) = 'times) ∧ (caaddr (x) = 'times)

then if listp (bagint (times-fringe (cadr (x)), times-fringe (caddr (x))))

then cons ('if,

cons (and-not-zerop-tree (bagint (times-fringe (cadr (x)),

times-fringe (caddr (x)))),

cons (list ('quotient, times-tree (bagdiff (times-fringe (cadr (x)), bagint (times-fringe (cadr (x)),

times-fringe (caddr (x))))),

times-tree (bagdiff (times-fringe (caddr (x)),

bagint (times-fringe (cadr (x)),

times-fringe (caddr (x)))))),

                            '((zero)))))

else x endif else x endif

Theorem: zerop-makes-quotient-zero-bridge ((car (x) = 'times) ∧ (car (y) = 'times) ∧ (¬ eval$ (t,

and-not-zerop-tree (bagint (times-fringe (x), times-fringe (y))), a)))

→ (((eval$ (t, cadr (x), a) ∗ eval$ (t, caddr (x), a))

÷ (eval$ (t, cadr (y), a) ∗ eval$ (t, caddr (y), a)))

= 0)

Event: Enable zerop-makes-quotient-zero-bridge; name this event ‘zerop-makes-quotient-zero-bridge-off’.

Theorem: eval$-quotient-times-tree-bagdiff (subbagp (x, y) ∧ subbagp (x, z) ∧ eval$ (t, and-not-zerop-tree (x), a)) → ((eval$ (t, times-tree (bagdiff (y, x)), a)

÷ eval$ (t, times-tree (bagdiff (z, x)), a))

= (eval$ (t, times-tree (y), a) ÷ eval$ (t, times-tree (z), a)))

Event: Enable eval$-quotient-times-tree-bagdiff; name this event ‘eval$-quotient-times-tree-bagdiff-off’.

Theorem: correctness-of-cancel-quotient-times eval$ (t, x, a) = eval$ (t, cancel-quotient-times (x), a)

Event: Let us define the theory quotients to consist of the following events: quotient-noop, quotient-of-non-number, quotient-zero, quotient-add1, equal-quotient-0, quotient-sub1, quotient-plus, quotient-times, quotient-times-instance, quotientdifference1, quotient-lessp-arg1, quotient-difference2, quotient-difference3, quotientremainder-times, quotient-remainder, quotient-remainder-instance, quotient-plus-times-times, quotient-plus-times-times-instance, quotient-quotient, quotient-1-arg2, quotient-1-arg1, quotient-x-x, lessp-quotient, correctness-of-cancel-quotient-times.

Definition: exp (i, j ) = if j ≃ 0 then 1

else i ∗ exp (i, j − 1) endif

Definition: log (base, n) = if base < 2 then 0

elseif n ≃ 0 then 0

else 1 + log (base, n ÷ base) endif

Definition: gcd (x, y) = if x ≃ 0 then fix (y)

elseif y ≃ 0 then x

elseif x < y then gcd (x, y − x)

else gcd (x − y, y) endif

Theorem: remainder-exp (k ≄ 0) → ((exp (n, k) mod n) = 0)

Definition: double-number-induction (i, j ) = if i ≃ 0 then 0

elseif j ≃ 0 then 0

else double-number-induction (i − 1, j − 1) endif

Theorem: remainder-exp-exp if j < i then f else t endif → ((exp (a, j ) mod exp (a, i)) = 0)

Theorem: quotient-exp (k ≄ 0) → ((exp (n, k) ÷ n)

= if n ≃ 0 then 0 else exp (n, k − 1) endif)

Theorem: exp-zero (k ≃ 0) → (exp (n, k) = 1)

Theorem: exp-add1 exp (n, 1 + k) = (n ∗ exp (n, k))

Theorem: exp-plus exp (i, j + k) = (exp (i, j ) ∗ exp (i, k))

Theorem: exp-0-arg1 exp (0, k) = if k ≃ 0 then 1

else 0 endif

Theorem: exp-1-arg1 exp (1, k) = 1

Theorem: exp-0-arg2 exp (n, 0) = 1

Theorem: exp-times exp (i ∗ j , k) = (exp (i, k) ∗ exp (j , k))

Theorem: exp-exp exp (exp (i, j ), k) = exp (i, j ∗ k)

Theorem: equal-exp-0 (exp (n, k) = 0) = ((n ≃ 0) ∧ (k ≄ 0))

Theorem: equal-exp-1 (exp (n, k) = 1) = if k ≃ 0 then t

else n = 1 endif

Theorem: exp-difference (if b < c then f else t endif ∧ (a ≄ 0)) → (exp (a, b − c) = (exp (a, b) ÷ exp (a, c)))

Event: Let us define the theory exponentiation to consist of the following events: equal-exp-0, equal-exp-1, exp-exp, exp-add1, exp-times, exp-1-arg1, exp-zero, exp-0-arg2, exp-0-arg1, exp-difference, exp-plus, quotient-exp, remainderexp-exp, remainder-exp.

Theorem: equal-log-0 (log (base, n) = 0) = ((base < 2) ∨ (n ≃ 0))

Theorem: log-0 (n ≃ 0) → (log (base, n) = 0)

Theorem: log-1 (1 < base) → (log (base, 1) = 1)

Definition: double-log-induction (base, a, b) = if base < 2 then 0

elseif a ≃ 0 then 0

elseif b ≃ 0 then 0

else double-log-induction (base, a ÷ base, b ÷ base) endif

Theorem: leq-log-log if m < n then f else t endif → if log (c, m) < log (c, n) then f

else t endif

Theorem: log-quotient (1 < c) → (log (c, n ÷ c) = (log (c, n) − 1))

Theorem: log-quotient-times-proof (1 < c) → (log (c, n ÷ (c ∗ m)) = (log (c, n ÷ m) − 1))

Theorem: log-quotient-times (1 < c) → ((log (c, n ÷ (c ∗ m)) = (log (c, n ÷ m) − 1))

∧ (log (c, n ÷ (m ∗ c)) = (log (c, n ÷ m) − 1)))

Theorem: log-quotient-exp (1 < c) → (log (c, n ÷ exp (c, m)) = (log (c, n) − m))

Theorem: log-times-proof ((1 < c) ∧ (n ≄ 0)) → (log (c, c ∗ n) = (1 + log (c, n)))

Theorem: log-times ((1 < c) ∧ (n ≄ 0)) → ((log (c, c ∗ n) = (1 + log (c, n)))

∧ (log (c, n ∗ c) = (1 + log (c, n))))

Theorem: log-times-exp-proof ((1 < c) ∧ (n ≄ 0)) → (log (c, n ∗ exp (c, m)) = (log (c, n) + m))

Theorem: log-times-exp ((1 < c) ∧ (n ≄ 0)) → ((log (c, n ∗ exp (c, m)) = (log (c, n) + m))

∧ (log (c, exp (c, m) ∗ n) = (log (c, n) + m)))

Theorem: log-exp (1 < c) → (log (c, exp (c, n)) = (1 + n))

Event: Let us define the theory logs to consist of the following events: log-exp, log-times-exp, log-times, log-quotient-exp, log-quotient-times, log-quotient, log-1, log-0, equal-log-0, exp-exp.

Theorem: commutativity-of-gcd gcd (b, a) = gcd (a, b)

Definition: single-number-induction (n) = if n ≃ 0 then 0

else single-number-induction (n − 1) endif

Theorem: gcd-0 (gcd (0, x) = fix (x)) ∧ (gcd (x, 0) = fix (x))

Theorem: gcd-1 (gcd (1, x) = 1) ∧ (gcd (x, 1) = 1)

Theorem: equal-gcd-0 (gcd (a, b) = 0) = ((a ≃ 0) ∧ (b ≃ 0))

Theorem: lessp-gcd (b ≄ 0) → (((b < gcd (a, b)) = f) ∧ ((b < gcd (b, a)) = f))

Theorem: gcd-plus-instance-temp-proof gcd (a, a + b) = gcd (a, b)

Theorem: gcd-plus-instance-temp (gcd (a, a + b) = gcd (a, b)) ∧ (gcd (a, b + a) = gcd (a, b))

Theorem: gcd-plus-proof ((b mod a) = 0) → (gcd (a, b + c) = gcd (a, c))

Theorem: gcd-plus ((b mod a) = 0) → ((gcd (a, b + c) = gcd (a, c))

∧ (gcd (a, c + b) = gcd (a, c)) ∧ (gcd (b + c, a) = gcd (a, c)) ∧ (gcd (c + b, a) = gcd (a, c)))

Theorem: gcd-plus-instance (gcd (a, a + b) = gcd (a, b)) ∧ (gcd (a, b + a) = gcd (a, b))

Theorem: remainder-gcd ((a mod gcd (a, b)) = 0) ∧ ((b mod gcd (a, b)) = 0)

Theorem: distributivity-of-times-over-gcd-proof gcd (x ∗ z, y ∗ z) = (z ∗ gcd (x, y))

Theorem: distributivity-of-times-over-gcd (gcd (x ∗ z, y ∗ z) = (z ∗ gcd (x, y))) ∧ (gcd (z ∗ x, y ∗ z) = (z ∗ gcd (x, y))) ∧ (gcd (x ∗ z, z ∗ y) = (z ∗ gcd (x, y))) ∧ (gcd (z ∗ x, z ∗ y) = (z ∗ gcd (x, y)))

Theorem: gcd-is-the-greatest ((x ≄ 0) ∧ (y ≄ 0) ∧ ((x mod z) = 0) ∧ ((y mod z) = 0)) → if gcd (x, y) < z then f

else t endif

Theorem: common-divisor-divides-gcd (((x mod z) = 0) ∧ ((y mod z) = 0)) → ((gcd (x, y) mod z) = 0)

Theorem: associativity-of-gcd-zero-case ((a ≃ 0) ∨ (b ≃ 0) ∨ (c ≃ 0)) → (gcd (gcd (a, b), c) = gcd (a, gcd (b, c)))

Theorem: associativity-of-gcd gcd (gcd (a, b), c) = gcd (a, gcd (b, c))

Theorem: commutativity2-of-gcd-zero-case ((a ≃ 0) ∨ (b ≃ 0) ∨ (c ≃ 0)) → (gcd (b, gcd (a, c)) = gcd (a, gcd (b, c)))

Theorem: commutativity2-of-gcd gcd (b, gcd (a, c)) = gcd (a, gcd (b, c))

Theorem: gcd-x-x gcd (x, x) = fix (x)

Theorem: gcd-idempotence (gcd (x, gcd (x, y)) = gcd (x, y)) ∧ (gcd (y, gcd (x, y)) = gcd (x, y))

Event: Let us define the theory gcds to consist of the following events: commutativity2of-gcd, associativity-of-gcd, common-divisor-divides-gcd, distributivity-of-times-over-gcd, lessp-gcd, equal-gcd-0, gcd-0, gcd-idempotence, gcd-x-x, remaindergcd, gcd-plus, gcd-plus-instance, gcd-1, commutativity-of-gcd.

Event: Let us define the theory naturals to consist of the following events: addition, multiplication, remainders, quotients, exponentiation, logs, gcds.

Definition: integerp (x) = if x ∈ N then t

elseif negativep (x) then negative-guts (x) ≄ 0 else f endif Definition: fix-int (x) = if integerp (x) then x

else 0 endif

Definition: izerop (i) = (fix-int (i) = 0)

Definition: ilessp (i, j ) = if negativep (i)

then if negativep (j ) then negative-guts (j ) < negative-guts (i) elseif i = (− 0) then 0 < j else t endif elseif negativep (j ) then f else i < j endif

Definition: ileq (i, j ) = (¬ ilessp (j , i))

Definition: iplus (x, y) = if negativep (x)

then if negativep (y)

then if (negative-guts (x) ≃ 0) ∧ (negative-guts (y) ≃ 0) then 0 else − (negative-guts (x) + negative-guts (y)) endif elseif y < negative-guts (x) then − (negative-guts (x) − y) else y − negative-guts (x) endif

elseif negativep (y)

then if x < negative-guts (y) then − (negative-guts (y) − x)

else x − negative-guts (y) endif else x + y endif

Definition: ineg (x) = if negativep (x) then negative-guts (x)

elseif x ≃ 0 then 0

else − x endif

Definition: idifference (x, y) = iplus (x, ineg (y))

Definition: iabs (i) = if negativep (i) then negative-guts (i)

else fix (i) endif

Definition: itimes (i, j ) = if negativep (i)

then if negativep (j ) then negative-guts (i) ∗ negative-guts (j )

else fix-int (− (negative-guts (i) ∗ j )) endif elseif negativep (j ) then fix-int (− (i ∗ negative-guts (j ))) else i ∗ j endif

Definition: iquotient (i, j ) = if fix-int (j ) = 0 then 0

elseif negativep (i) then if negativep (j )

then if (negative-guts (i) mod negative-guts (j )) = 0 then negative-guts (i) ÷ negative-guts (j ) else 1 + (negative-guts (i) ÷ negative-guts (j )) endif

elseif (negative-guts (i) mod j ) = 0 then fix-int (− (negative-guts (i) ÷ j )) else fix-int (− (1 + (negative-guts (i) ÷ j ))) endif elseif negativep (j ) then fix-int (− (i ÷ negative-guts (j ))) else i ÷ j endif

Definition: iremainder (i, j ) = idifference (i, itimes (j , iquotient (i, j )))

Definition: idiv (i, j ) = if fix-int (j ) = 0 then 0

elseif negativep (i)

then if negativep (j ) then negative-guts (i) ÷ negative-guts (j ) elseif (negative-guts (i) mod j ) = 0 then fix-int (− (negative-guts (i) ÷ j )) else fix-int (− (1 + (negative-guts (i) ÷ j ))) endif

elseif negativep (j )

then if (i mod negative-guts (j )) = 0 then fix-int (− (i ÷ negative-guts (j ))) else fix-int (− (1 + (i ÷ negative-guts (j )))) endif

else i ÷ j endif

Definition: imod (i, j ) = idifference (fix-int (i), itimes (j , idiv (i, j )))

Definition: iquo (i, j ) = if fix-int (j ) = 0 then 0

elseif negativep (i) then if negativep (j ) then negative-guts (i) ÷ negative-guts (j )

else fix-int (− (negative-guts (i) ÷ j )) endif elseif negativep (j ) then fix-int (− (i ÷ negative-guts (j ))) else i ÷ j endif

Definition: irem (i, j ) = idifference (fix-int (i), itimes (j , iquo (i, j )))

Event: Let us define the theory integer-defns to consist of the following events: integerp, fix-int, ilessp, iplus, ineg, iabs, itimes, iquotient, iremainder, idiv, imod, iquo, irem.

Event: Let us define the theory all-integer-defns to consist of the following events: integerp, fix-int, izerop, ilessp, ileq, iplus, ineg, idifference, iabs, itimes, iquotient, iremainder, idiv, imod, iquo, irem.

Event: Enable integerp; name this event ‘integerp-off’.

Event: Enable fix-int; name this event ‘fix-int-off’.

Event: Enable ilessp; name this event ‘ilessp-off’.

Event: Enable iplus; name this event ‘iplus-off’.

Event: Enable ineg; name this event ‘ineg-off’.

Event: Enable iabs; name this event ‘iabs-off’.

Event: Enable itimes; name this event ‘itimes-off’.

Theorem: integerp-fix-int integerp (fix-int (x))

Theorem: integerp-iplus integerp (iplus (x, y))

Theorem: integerp-idifference integerp (idifference (x, y))

Theorem: integerp-ineg integerp (ineg (x))

Theorem: integerp-iabs integerp (iabs (x))

Theorem: integerp-itimes integerp (itimes (x, y))

Theorem: fix-int-remover integerp (x) → (fix-int (x) = x)

Theorem: fix-int-fix-int fix-int (fix-int (x)) = fix-int (x)

Theorem: fix-int-iplus fix-int (iplus (a, b)) = iplus (a, b)

Theorem: fix-int-idifference fix-int (idifference (a, b)) = idifference (a, b)

Theorem: fix-int-ineg fix-int (ineg (x)) = ineg (x)

Theorem: fix-int-iabs fix-int (iabs (x)) = iabs (x)

Theorem: fix-int-itimes fix-int (itimes (x, y)) = itimes (x, y)

Theorem: ineg-iplus ineg (iplus (a, b)) = iplus (ineg (a), ineg (b))

Theorem: ineg-ineg ineg (ineg (x)) = fix-int (x)

Theorem: ineg-fix-int ineg (fix-int (x)) = ineg (x)

Theorem: ineg-of-non-integerp (¬ integerp (x)) → (ineg (x) = 0)

Event: Enable ineg-of-non-integerp; name this event ‘ineg-of-non-integerp-off’.

Theorem: ineg-0 ineg (0) = 0

Theorem: iplus-left-id (¬ integerp (x)) → (iplus (x, y) = fix-int (y))

Event: Enable iplus-left-id; name this event ‘iplus-left-id-off’.

Theorem: iplus-right-id (¬ integerp (y)) → (iplus (x, y) = fix-int (x))

Event: Enable iplus-right-id; name this event ‘iplus-right-id-off’.

Theorem: iplus-0-left iplus (0, x) = fix-int (x)

Theorem: iplus-0-right iplus (x, 0) = fix-int (x)

Theorem: commutativity2-of-iplus iplus (x, iplus (y, z)) = iplus (y, iplus (x, z))

Theorem: commutativity-of-iplus iplus (x, y) = iplus (y, x)

Theorem: associativity-of-iplus iplus (iplus (x, y), z) = iplus (x, iplus (y, z))

Theorem: iplus-cancellation-1 (iplus (a, b) = iplus (a, c)) = (fix-int (b) = fix-int (c))

Theorem: iplus-cancellation-2 (iplus (b, a) = iplus (c, a)) = (fix-int (b) = fix-int (c))

Theorem: iplus-ineg1 iplus (ineg (a), a) = 0

Theorem: iplus-ineg2 iplus (a, ineg (a)) = 0

Theorem: iplus-fix-int1 iplus (fix-int (a), b) = iplus (a, b)

Theorem: iplus-fix-int2 iplus (a, fix-int (b)) = iplus (a, b)

Theorem: idifference-fix-int1 idifference (fix-int (a), b) = idifference (a, b)

Theorem: idifference-fix-int2 idifference (a, fix-int (b)) = idifference (a, b)

Definition: cancel-ineg-aux (x, y) = if listp (x)

then if car (x) = 'ineg

then if y = cadr (x) then ''0 elseif listp (y) then if car (y) = 'iplus

then if cadr (y) = cadr (x)

then list ('fix-int, caddr (y)) elseif cancel-ineg-aux (x, caddr (y)) then list ('iplus,

cadr (y),

cancel-ineg-aux (x, caddr (y)))

else f endif else f endif

else f endif elseif y ≃ nil then f elseif car (y) = 'ineg then if x = cadr (y) then ''0

else f endif elseif car (y) = 'iplus then if listp (cadr (y))

then if caadr (y) = 'ineg

then if x = cadadr (y)

then list ('fix-int, caddr (y)) elseif cancel-ineg-aux (x, caddr (y)) then list ('iplus,

cadr (y),

cancel-ineg-aux (x, caddr (y)))

else f endif elseif cancel-ineg-aux (x, caddr (y)) then list ('iplus, cadr (y), cancel-ineg-aux (x, caddr (y))) else f endif

elseif cancel-ineg-aux (x, caddr (y))

then list ('iplus, cadr (y), cancel-ineg-aux (x, caddr (y))) else f endif

else f endif elseif y ≃ nil then f elseif car (y) = 'ineg then if x = cadr (y) then ''0

else f endif elseif car (y) = 'iplus then if listp (cadr (y))

then if caadr (y) = 'ineg then if x = cadadr (y) then list ('fix-int, caddr (y))

elseif cancel-ineg-aux (x, caddr (y))

then list ('iplus, cadr (y), cancel-ineg-aux (x, caddr (y))) else f endif

elseif cancel-ineg-aux (x, caddr (y))

then list ('iplus, cadr (y), cancel-ineg-aux (x, caddr (y))) else f endif

elseif cancel-ineg-aux (x, caddr (y))

then list ('iplus, cadr (y), cancel-ineg-aux (x, caddr (y))) else f endif

else f endif

Definition: cancel-ineg (x) = if listp (x)

then if car (x) = 'iplus

then if cancel-ineg-aux (cadr (x), caddr (x))

then cancel-ineg-aux (cadr (x), caddr (x))

else x endif else x endif

else x endif

Theorem: eval$-list-cons eval$ ('list, cons (x, y), a) = cons (eval$ (t, x, a), eval$ ('list, y, a))

Theorem: eval$-list-nlistp (x ≃ nil) → (eval$ ('list, x, a) = nil)

Theorem: eval$-litatom litatom (x) → (eval$ (t, x, a) = cdr (assoc (x, a)))

Event: Disable eval$-quote; name this event ‘eval$-quote-on’.

Theorem: eval$-other ((¬ litatom (x)) ∧ (x ≃ nil)) → (eval$ (t, x, a) = x)

Event: Enable eval$; name this event ‘eval$-off’.

Definition: eval$-cancel-ineg-aux-fn (x, y, a) = if listp (x) ∧ (car (x) = 'ineg)

then if y = cadr (x) then 0 elseif cadr (y) = cadr (x) then fix-int (eval$ (t, caddr (y), a)) elseif listp (y) then iplus (eval$ (t, cadr (y), a),

eval$-cancel-ineg-aux-fn (x, caddr (y), a))

else 0 endif elseif car (y) = 'ineg then 0 elseif listp (cadr (y))

∧ (caadr (y) = 'ineg)

∧ (x = cadadr (y)) then fix-int (eval$ (t, caddr (y), a)) elseif listp (y) then iplus (eval$ (t, cadr (y), a), eval$-cancel-ineg-aux-fn (x, caddr (y), a)) else 0 endif

Theorem: eval$-cancel-ineg-aux-is-its-fn (cancel-ineg-aux (x, y) ≠ f) → (eval$ (t, cancel-ineg-aux (x, y), a) = eval$-cancel-ineg-aux-fn (x, y, a))

Theorem: iplus-ineg3 iplus (ineg (x), iplus (x, y)) = fix-int (y)

Theorem: iplus-ineg4 iplus (x, iplus (ineg (x), y)) = fix-int (y)

Theorem: iplus-ineg-promote iplus (y, ineg (x)) = iplus (ineg (x), y)

Theorem: iplus-x-y-ineg-x iplus (x, iplus (y, ineg (x))) = fix-int (y)

Event: Enable iplus-ineg-promote; name this event ‘iplus-ineg-promote-off’.

Theorem: correctness-of-cancel-ineg-aux (cancel-ineg-aux (x, y) ≠ f) → (eval$-cancel-ineg-aux-fn (x, y, a) = iplus (eval$ (t, x, a), eval$ (t, y, a)))

Theorem: correctness-of-cancel-ineg eval$ (t, x, a) = eval$ (t, cancel-ineg (x), a)

Event: Enable correctness-of-cancel-ineg-aux; name this event ‘correctness-of-cancel-ineg-aux-off’.

Definition: iplus-fringe (x) = if listp (x)

then if car (x) = 'iplus then append (iplus-fringe (cadr (x)), iplus-fringe (caddr (x))) else list (x) endif

else list (x) endif Theorem: lessp-count-listp-cdr listp (cdr (x)) → (count (cdr (x)) < count (x))

Definition: iplus-tree-rec (l) = if cdr (l) ≃ nil then car (l)

else list ('iplus, car (l), iplus-tree-rec (cdr (l))) endif

Definition: iplus-tree (l) = if listp (l)

then if listp (cdr (l)) then iplus-tree-rec (l) else list ('fix-int, car (l)) endif

else ''0 endif

Definition: iplus-list (x) = if listp (x) then iplus (car (x), iplus-list (cdr (x)))

else 0 endif

Theorem: integerp-iplus-list integerp (iplus-list (x))

Theorem: eval$-iplus-tree-rec eval$ (t, iplus-tree-rec (x), a) = if listp (x)

then if listp (cdr (x)) then iplus-list (eval$ ('list, x, a))

else eval$ (t, car (x), a) endif else 0 endif

Theorem: eval$-iplus-tree eval$ (t, iplus-tree (x), a) = iplus-list (eval$ ('list, x, a))

Theorem: eval$-list-append eval$ ('list, append (x, y), a) = append (eval$ ('list, x, a), eval$ ('list, y, a))

Definition: cancel-iplus (x) = if listp (x)

then if car (x) = 'equal

then if listp (cadr (x))

then if caadr (x) = 'iplus

then if listp (caddr (x)) then if caaddr (x) = 'iplus then if listp (bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))

then list ('equal,

iplus-tree (bagdiff (iplus-fringe (cadr (x)),

bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (bagdiff (iplus-fringe (caddr (x)),

bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif elseif caddr (x) ∈ iplus-fringe (cadr (x)) then list ('if,

list ('integerp, caddr (x)),

         cons ('equal,

cons (iplus-tree (delete (caddr (x),

iplus-fringe (cadr (x)))),

                  '('0))),

list ('quote, f))

else x endif elseif caddr (x) ∈ iplus-fringe (cadr (x)) then list ('if,

list ('integerp, caddr (x)),

    cons ('equal,

cons (iplus-tree (delete (caddr (x),

iplus-fringe (cadr (x)))),

             '('0))),

list ('quote, f))

else x endif elseif listp (caddr (x)) then if caaddr (x) = 'iplus

then if cadr (x) ∈ iplus-fringe (caddr (x))

then list ('if, list ('integerp, cadr (x)),

         list ('equal,
            ''0,

iplus-tree (delete (cadr (x),

iplus-fringe (caddr (x))))),

list ('quote, f))

else x endif else x endif

else x endif elseif listp (caddr (x)) then if caaddr (x) = 'iplus

then if cadr (x) ∈ iplus-fringe (caddr (x)) then list ('if,

list ('integerp, cadr (x)),

                       list ('equal,
                           ''0,

iplus-tree (delete (cadr (x),

iplus-fringe (caddr (x))))),

list ('quote, f))

else x endif else x endif

else x endif else x endif

else x endif

Theorem: eval$-cancel-iplus eval$ (t, cancel-iplus (x), a) = if listp (x) ∧ (car (x) = 'equal)

then if listp (cadr (x)) ∧ (caadr (x) = 'iplus) ∧ listp (caddr (x)) ∧ (caaddr (x) = 'iplus)

then if listp (bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))

then iplus-list (eval$ ('list,

bagdiff (iplus-fringe (cadr (x)),

bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))),

a))

= iplus-list (eval$ ('list,

bagdiff (iplus-fringe (caddr (x)),

bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))),

a))

else eval$ (t, x, a) endif elseif listp (cadr (x))

∧ (caadr (x) = 'iplus)

∧ (caddr (x) ∈ iplus-fringe (cadr (x))) then if integerp (eval$ (t, caddr (x), a))

then iplus-list (eval$ ('list, delete (caddr (x), iplus-fringe (cadr (x))), a))

          = 0

else f endif elseif listp (caddr (x))

∧ (caaddr (x) = 'iplus)

∧ (cadr (x) ∈ iplus-fringe (caddr (x))) then if integerp (eval$ (t, cadr (x), a))

then 0 = iplus-list (eval$ ('list,

delete (cadr (x),

iplus-fringe (caddr (x))), a))

else f endif else eval$ (t, x, a) endif

else eval$ (t, x, a) endif

Event: Enable cancel-iplus; name this event ‘cancel-iplus-off’.

Theorem: eval$-iplus-list-delete (z ∈ y) → (iplus-list (eval$ ('list, delete (z, y), a))

= idifference (iplus-list (eval$ ('list, y, a)), eval$ (t, z, a)))

Theorem: eval$-iplus-list-bagdiff subbagp (x, y) → (iplus-list (eval$ ('list, bagdiff (y, x), a))

= idifference (iplus-list (eval$ ('list, y, a)), iplus-list (eval$ ('list, x, a))))

Theorem: iplus-list-append iplus-list (append (x, y)) = iplus (iplus-list (x), iplus-list (y))

Event: Enable iplus-tree; name this event ‘iplus-tree-off’.

Theorem: not-integerp-implies-not-equal-iplus (¬ integerp (a)) → ((a = iplus (b, c)) = f)

Theorem: iplus-list-eval$-fringe iplus-list (eval$ ('list, iplus-fringe (x), a)) = fix-int (eval$ (t, x, a))

Theorem: iplus-ineg5-lemma-1 integerp (x) → ((x = iplus (y, iplus (ineg (z), w)))

= (x = iplus (ineg (z), iplus (y, w))))

Theorem: iplus-ineg5-lemma-2 (integerp (x) ∧ integerp (v)) → ((x = iplus (ineg (z), v)) = (iplus (x, z) = v))

Theorem: iplus-ineg5 integerp (x) → ((x = iplus (y, iplus (ineg (z), w))) = (iplus (x, z) = iplus (y, w)))

Event: Enable iplus-ineg5-lemma-1; name this event ‘iplus-ineg5-lemma-1-off’.

Event: Enable iplus-ineg5-lemma-2; name this event ‘iplus-ineg5-lemma-2-off’.

Theorem: iplus-ineg6 integerp (x) → ((x = iplus (y, iplus (w, ineg (z)))) = (iplus (x, z) = iplus (y, w)))

Theorem: eval$-iplus (listp (x) ∧ (car (x) = 'iplus)) → (eval$ (t, x, a) = iplus (eval$ (t, cadr (x), a), eval$ (t, caddr (x), a)))

Theorem: iplus-ineg7 (0 = iplus (x, ineg (y))) = (fix-int (y) = fix-int (x))

Theorem: correctness-of-cancel-iplus eval$ (t, x, a) = eval$ (t, cancel-iplus (x), a)

Event: Enable iplus-ineg5; name this event ‘iplus-ineg5-off’.

Event: Enable iplus-ineg6; name this event ‘iplus-ineg6-off’.

Theorem: ilessp-fix-int-1 ilessp (fix-int (x), y) = ilessp (x, y)

Theorem: ilessp-fix-int-2 ilessp (x, fix-int (y)) = ilessp (x, y)

Definition: make-cancel-iplus-inequality-1 (x, y)

= list ('ilessp,

iplus-tree (bagdiff (x, bagint (x, y))), iplus-tree (bagdiff (y, bagint (x, y))))

Definition: cancel-iplus-ilessp-1 (x) = if listp (x)

then if car (x) = 'ilessp

then make-cancel-iplus-inequality-1 (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

else x endif else x endif Theorem: lessp-difference-plus-arg1 (w < ((w + y) − x)) = (x < y)

Theorem: lessp-difference-plus-arg1-commuted (w < ((y + w) − x)) = (x < y)

Theorem: iplus-cancellation-1-for-ilessp ilessp (iplus (a, b), iplus (a, c)) = ilessp (b, c)

Theorem: iplus-cancellation-2-for-ilessp ilessp (iplus (b, a), iplus (c, a)) = ilessp (b, c)

Theorem: correctness-of-cancel-iplus-ilessp-lemma eval$ (t, x, a) = eval$ (t, cancel-iplus-ilessp-1 (x), a)

Definition: iplus-tree-no-fix-int (l) = if listp (l) then iplus-tree-rec (l)

else ''0 endif

Theorem: eval$-ilessp-iplus-tree-no-fix-int ilessp (eval$ (t, iplus-tree-no-fix-int (x), a),

eval$ (t, iplus-tree-no-fix-int (y), a)) = ilessp (eval$ (t, iplus-tree (x), a), eval$ (t, iplus-tree (y), a))

Event: Enable iplus-tree-no-fix-int; name this event ‘iplus-tree-no-fix-int-off’.

Theorem: make-cancel-iplus-inequality-simplifier eval$ (t, make-cancel-iplus-inequality-1 (x, y), a) = eval$ (t,

         list ('ilessp,

iplus-tree-no-fix-int (bagdiff (x, bagint (x, y))), iplus-tree-no-fix-int (bagdiff (y, bagint (x, y)))),

a)

Definition: cancel-iplus-ilessp (x) = if listp (x)

then if car (x) = 'ilessp

then if listp (bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))

then list ('ilessp,

iplus-tree-no-fix-int (bagdiff (iplus-fringe (cadr (x)),

bagint (iplus-fringe (cadr (x)), iplus-fringe (caddr (x))))), iplus-tree-no-fix-int (bagdiff (iplus-fringe (caddr (x)),

bagint (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif else x endif

else x endif

Event: Enable make-cancel-iplus-inequality-1; name this event ‘make-cancel-iplus-inequality-1-off’.

Theorem: correctness-of-cancel-iplus-ilessp eval$ (t, x, a) = eval$ (t, cancel-iplus-ilessp (x), a)

Theorem: itimes-zero1 (fix-int (x) = 0) → (itimes (x, y) = 0)

Theorem: itimes-0-left itimes (0, y) = 0

Event: Enable itimes-zero1; name this event ‘itimes-zero1-off’.

Theorem: itimes-zero2 (fix-int (y) = 0) → (itimes (x, y) = 0)

Theorem: itimes-0-right itimes (x, 0) = 0

Event: Enable itimes-zero2; name this event ‘itimes-zero2-off’.

Theorem: itimes-fix-int1 itimes (fix-int (a), b) = itimes (a, b)

Theorem: itimes-fix-int2 itimes (a, fix-int (b)) = itimes (a, b)

Theorem: commutativity-of-itimes itimes (x, y) = itimes (y, x)

Theorem: itimes-distributes-over-iplus-proof itimes (x, iplus (y, z)) = iplus (itimes (x, y), itimes (x, z))

Theorem: itimes-distributes-over-iplus (itimes (x, iplus (y, z)) = iplus (itimes (x, y), itimes (x, z))) ∧ (itimes (iplus (x, y), z) = iplus (itimes (x, z), itimes (y, z)))

Theorem: commutativity2-of-itimes itimes (x, itimes (y, z)) = itimes (y, itimes (x, z))

Theorem: associativity-of-itimes itimes (itimes (x, y), z) = itimes (x, itimes (y, z))

Theorem: equal-itimes-0 (itimes (x, y) = 0) = ((fix-int (x) = 0) ∨ (fix-int (y) = 0))

Theorem: equal-itimes-1 (itimes (a, b) = 1) = (((a = 1) ∧ (b = 1)) ∨ ((a = -1) ∧ (b = -1)))

Theorem: equal-itimes-minus-1 (itimes (a, b) = -1) = (((a = -1) ∧ (b = 1)) ∨ ((a = 1) ∧ (b = -1)))

Theorem: itimes-1-arg1 itimes (1, x) = fix-int (x)

Theorem: quotient-remainder-uniqueness ((a = (r + (b ∗ q))) ∧ (r < b)) → ((fix (r) = (a mod b)) ∧ (fix (q) = (a ÷ b)))

Theorem: division-theorem-part1 integerp (i) → (iplus (iremainder (i, j ), itimes (j , iquotient (i, j ))) = i)

Theorem: division-theorem-part2 (integerp (j ) ∧ (j ≠ 0)) → (¬ ilessp (iremainder (i, j ), 0))

Theorem: division-theorem-part3 (integerp (j ) ∧ (j ≠ 0)) → ilessp (iremainder (i, j ), iabs (j ))

Theorem: division-theorem (integerp (i) ∧ integerp (j ) ∧ (j ≠ 0)) → ((iplus (iremainder (i, j ), itimes (j , iquotient (i, j ))) = i)

∧ (¬ ilessp (iremainder (i, j ), 0)) ∧ ilessp (iremainder (i, j ), iabs (j )))

Theorem: quotient-difference-lessp-arg2 (((a mod c) = 0) ∧ (b < c)) → (((a − b) ÷ c)

= if b ≃ 0 then a ÷ c elseif b < a then (a ÷ c) − (1 + (b ÷ c)) else 0 endif)

Theorem: iquotient-iremainder-uniqueness (integerp (i) ∧ integerp (j ) ∧ integerp (r) ∧ integerp (q) ∧ (j ≠ 0) ∧ (i = iplus (r, itimes (j , q))) ∧ (¬ ilessp (r, 0)) ∧ ilessp (r, iabs (j ))) → ((r = iremainder (i, j )) ∧ (q = iquotient (i, j )))

Theorem: division-theorem-for-truncate-to-neginf-part1 integerp (i) → (iplus (imod (i, j ), itimes (j , idiv (i, j ))) = i)

Theorem: division-theorem-for-truncate-to-neginf-part2 ilessp (0, j ) → ((¬ ilessp (imod (i, j ), 0)) ∧ ilessp (imod (i, j ), j ))

Theorem: division-theorem-for-truncate-to-neginf-part3 (integerp (j ) ∧ ilessp (j , 0)) → ((¬ ilessp (0, imod (i, j ))) ∧ ilessp (j , imod (i, j )))

Theorem: division-theorem-for-truncate-to-neginf (integerp (i) ∧ integerp (j ) ∧ (j ≠ 0)) → ((iplus (imod (i, j ), itimes (j , idiv (i, j ))) = i)

∧ if ilessp (0, j ) then (¬ ilessp (imod (i, j ), 0)) ∧ ilessp (imod (i, j ), j ) else (¬ ilessp (0, imod (i, j )))

∧ ilessp (j , imod (i, j )) endif)

Theorem: idiv-imod-uniqueness (integerp (i) ∧ integerp (j ) ∧ integerp (r) ∧ integerp (q) ∧ (j ≠ 0) ∧ (i = iplus (r, itimes (j , q))) ∧ if ilessp (0, j ) then (¬ ilessp (r, 0)) ∧ ilessp (r, j )

else (¬ ilessp (0, r)) ∧ ilessp (j , r) endif) → ((r = imod (i, j )) ∧ (q = idiv (i, j )))

Theorem: division-theorem-for-truncate-to-zero-part1 integerp (i) → (iplus (irem (i, j ), itimes (j , iquo (i, j ))) = i)

Theorem: division-theorem-for-truncate-to-zero-part2 (integerp (i) ∧ integerp (j ) ∧ (j ≠ 0) ∧ (¬ ilessp (i, 0))) → ((¬ ilessp (irem (i, j ), 0)) ∧ ilessp (irem (i, j ), iabs (j )))

Theorem: division-theorem-for-truncate-to-zero-part3 (integerp (i) ∧ integerp (j ) ∧ (j ≠ 0) ∧ ilessp (i, 0)) → ((¬ ilessp (0, irem (i, j ))) ∧ ilessp (ineg (iabs (j )), irem (i, j )))

Theorem: division-theorem-for-truncate-to-zero (integerp (i) ∧ integerp (j ) ∧ (j ≠ 0)) → ((iplus (irem (i, j ), itimes (j , iquo (i, j ))) = i)

∧ if ¬ ilessp (i, 0)

then (¬ ilessp (irem (i, j ), 0))

∧ ilessp (irem (i, j ), iabs (j )) else (¬ ilessp (0, irem (i, j )))

∧ ilessp (ineg (iabs (j )), irem (i, j )) endif)

Theorem: iquo-irem-uniqueness (integerp (i) ∧ integerp (j ) ∧ integerp (r) ∧ integerp (q) ∧ (j ≠ 0) ∧ (i = iplus (r, itimes (j , q))) ∧ if ¬ ilessp (i, 0) then (¬ ilessp (r, 0)) ∧ ilessp (r, iabs (j ))

else (¬ ilessp (0, r)) ∧ ilessp (ineg (iabs (j )), r) endif) → ((r = irem (i, j )) ∧ (q = iquo (i, j )))

Theorem: itimes-ineg-1 itimes (ineg (x), y) = ineg (itimes (x, y))

Theorem: itimes-ineg-2 itimes (x, ineg (y)) = ineg (itimes (x, y))

Theorem: itimes-cancellation-1 (itimes (a, b) = itimes (a, c)) = ((fix-int (a) = 0) ∨ (fix-int (b) = fix-int (c)))

Theorem: itimes-cancellation-2 (itimes (b, a) = itimes (c, a)) = ((fix-int (a) = 0) ∨ (fix-int (b) = fix-int (c)))

Theorem: itimes-cancellation-3 (itimes (a, b) = itimes (c, a)) = ((fix-int (a) = 0) ∨ (fix-int (b) = fix-int (c)))

Theorem: integerp-iquotient integerp (iquotient (i, j ))

Theorem: integerp-iremainder integerp (iremainder (i, j ))

Theorem: integerp-idiv integerp (idiv (i, j ))

Theorem: integerp-imod integerp (imod (i, j ))

Theorem: integerp-iquo integerp (iquo (i, j ))

Theorem: integerp-irem integerp (irem (i, j ))

Theorem: iquotient-fix-int1 iquotient (fix-int (i), j ) = iquotient (i, j )

Theorem: iquotient-fix-int2 iquotient (i, fix-int (j )) = iquotient (i, j )

Theorem: iremainder-fix-int1 iremainder (fix-int (i), j ) = iremainder (i, j )

Theorem: iremainder-fix-int2 iremainder (i, fix-int (j )) = iremainder (i, j )

Theorem: idiv-fix-int1 idiv (fix-int (i), j ) = idiv (i, j )

Theorem: idiv-fix-int2 idiv (i, fix-int (j )) = idiv (i, j )

Theorem: imod-fix-int1 imod (fix-int (i), j ) = imod (i, j )

Theorem: imod-fix-int2 imod (i, fix-int (j )) = imod (i, j )

Theorem: iquo-fix-int1 iquo (fix-int (i), j ) = iquo (i, j )

Theorem: iquo-fix-int2 iquo (i, fix-int (j )) = iquo (i, j )

Theorem: irem-fix-int1 irem (fix-int (i), j ) = irem (i, j )

Theorem: irem-fix-int2 irem (i, fix-int (j )) = irem (i, j )

Theorem: fix-int-iquotient fix-int (iquotient (i, j )) = iquotient (i, j )

Theorem: fix-int-iremainder fix-int (iremainder (i, j )) = iremainder (i, j )

Theorem: fix-int-idiv fix-int (idiv (i, j )) = idiv (i, j )

Theorem: fix-int-imod fix-int (imod (i, j )) = imod (i, j )

Theorem: fix-int-iquo fix-int (iquo (i, j )) = iquo (i, j )

Theorem: fix-int-irem fix-int (irem (i, j )) = irem (i, j )

Event: Enable iquotient; name this event ‘iquotient-off’.

Event: Enable iremainder; name this event ‘iremainder-off’.

Event: Enable idiv; name this event ‘idiv-off’.

Event: Enable imod; name this event ‘imod-off’.

Event: Enable iquo; name this event ‘iquo-off’.

Event: Enable irem; name this event ‘irem-off’.

Definition: itimes-fringe (x) = if listp (x)

then if car (x) = 'itimes then append (itimes-fringe (cadr (x)), itimes-fringe (caddr (x))) else list (x) endif

else list (x) endif

Definition: itimes-tree-rec (l) = if cdr (l) ≃ nil then car (l)

else list ('itimes, car (l), itimes-tree-rec (cdr (l))) endif Definition: itimes-tree (l) = if listp (l)

then if listp (cdr (l)) then itimes-tree-rec (l) else list ('fix-int, car (l)) endif

else ''1 endif

Definition: itimes-list (x) = if listp (x) then itimes (car (x), itimes-list (cdr (x)))

else 1 endif

Theorem: integerp-itimes-list integerp (itimes-list (x))

Theorem: eval$-itimes-tree-rec listp (x) → (eval$ (t, itimes-tree-rec (x), a)

= if listp (cdr (x)) then itimes-list (eval$ ('list, x, a)) else eval$ (t, car (x), a) endif)

Theorem: eval$-itimes-tree eval$ (t, itimes-tree (x), a) = itimes-list (eval$ ('list, x, a))

Event: Enable itimes-tree; name this event ‘itimes-tree-off’.

Definition: make-cancel-itimes-equality (x, y, in-both) = list ('if,

cons ('equal, cons (itimes-tree (in-both), '('0))), list ('quote, t),

       list ('equal,

itimes-tree (bagdiff (x, in-both)), itimes-tree (bagdiff (y, in-both))))

Definition: cancel-itimes (x) = if listp (x)

then if car (x) = 'equal

then if listp (cadr (x))

then if caadr (x) = 'itimes

then if listp (caddr (x))

then if caaddr (x) = 'itimes

then if listp (bagint (itimes-fringe (cadr (x)), itimes-fringe (caddr (x)))) then make-cancel-itimes-equality (itimes-fringe (cadr (x)),

itimes-fringe (caddr (x)),

bagint (itimes-fringe (cadr (x)),

itimes-fringe (caddr (x))))

else x endif elseif caddr (x) ∈ itimes-fringe (cadr (x)) then list ('if,

list ('integerp, caddr (x)),

make-cancel-itimes-equality (itimes-fringe (cadr (x)), list (caddr (x)), list (caddr (x))),

list ('quote, f))

else x endif elseif caddr (x) ∈ itimes-fringe (cadr (x)) then list ('if,

list ('integerp, caddr (x)),

make-cancel-itimes-equality (itimes-fringe (cadr (x)), list (caddr (x)), list (caddr (x))),

list ('quote, f))

else x endif elseif listp (caddr (x)) then if caaddr (x) = 'itimes

then if cadr (x) ∈ itimes-fringe (caddr (x))

then list ('if, list ('integerp, cadr (x)), make-cancel-itimes-equality (list (cadr (x)),

itimes-fringe (caddr (x)), list (cadr (x))),

list ('quote, f))

else x endif else x endif

else x endif elseif listp (caddr (x)) then if caaddr (x) = 'itimes

then if cadr (x) ∈ itimes-fringe (caddr (x))

then list ('if, list ('integerp, cadr (x)), make-cancel-itimes-equality (list (cadr (x)),

itimes-fringe (caddr (x)), list (cadr (x))),

list ('quote, f))

else x endif else x endif

else x endif else x endif

else x endif

Theorem: itimes-list-append itimes-list (append (x, y)) = itimes (itimes-list (x), itimes-list (y))

Theorem: itimes-list-eval$-fringe itimes-list (eval$ ('list, itimes-fringe (x), a)) = fix-int (eval$ (t, x, a))

Theorem: integerp-eval$-itimes (car (x) = 'itimes) → integerp (eval$ (t, x, a))

Theorem: not-integerp-implies-not-equal-itimes (¬ integerp (a)) → ((a = itimes (b, c)) = f)

Theorem: itimes-list-eval$-delete (z ∈ y) → (itimes-list (eval$ ('list, y, a))

= itimes (eval$ (t, z, a), itimes-list (eval$ ('list, delete (z, y), a))))

Theorem: itimes-list-bagdiff subbagp (x, y) → (itimes-list (eval$ ('list, y, a))

= itimes (itimes-list (eval$ ('list, bagdiff (y, x), a)), itimes-list (eval$ ('list, x, a))))

Theorem: equal-itimes-list-eval$-list-delete ((c ∈ y) ∧ (fix-int (eval$ (t, c, a)) ≠ 0)) → ((x = itimes-list (eval$ ('list, delete (c, y), a)))

= (integerp (x)

∧ (itimes (x, eval$ (t, c, a)) = itimes-list (eval$ ('list, y, a)))))

Event: Enable itimes-list-eval$-delete; name this event ‘itimes-list-eval$-delete-off’.

Theorem: member-append (a ∈ append (x, y)) = ((a ∈ x) ∨ (a ∈ y))

Theorem: member-izerop-itimes-fringe ((z ∈ itimes-fringe (x)) ∧ (fix-int (eval$ (t, z, a)) = 0)) → (fix-int (eval$ (t, x, a)) = 0)

Theorem: correctness-of-cancel-itimes-hack-1 ((w ∈ itimes-fringe (cons ('itimes, x1 ))) ∧ (fix-int (eval$ (t, w, a)) = 0) ∧ (fix-int (eval$ (t, car (x1 ), a)) ≠ 0)) → (fix-int (eval$ (t, cadr (x1 ), a)) = 0)

Event: Disable eval$-equal; name this event ‘eval$-equal-on’.

Theorem: eval$-make-cancel-itimes-equality eval$ (t, make-cancel-itimes-equality (x, y, in-both), a) = if eval$ (t, cons ('equal, cons (itimes-tree (in-both), '('0))), a)

then t

else itimes-list (eval$ ('list, bagdiff (x, in-both), a)) = itimes-list (eval$ ('list, bagdiff (y, in-both), a)) endif

Event: Enable make-cancel-itimes-equality; name this event ‘make-cancel-itimes-equality-off’.

Theorem: eval$-make-cancel-itimes-equality-1 eval$ (t, make-cancel-itimes-equality (list (x), y, list (x)), a) = if fix-int (eval$ (t, x, a)) = 0 then t

else 1 = itimes-list (eval$ ('list, delete (x, y), a)) endif

Theorem: equal-fix-int (fix-int (x) = x) = integerp (x)

Theorem: eval$-make-cancel-itimes-equality-2 eval$ (t, make-cancel-itimes-equality (x, list (y), list (y)), a) = if fix-int (eval$ (t, y, a)) = 0 then t

else 1 = itimes-list (eval$ ('list, delete (y, x), a)) endif

Theorem: eval$-equal-itimes-tree-itimes-fringe-0 (eval$ (t, cons ('equal, cons (itimes-tree (itimes-fringe (x)), '('0))), a) ∧ (car (x) = 'itimes)) → (eval$ (t, x, a) = 0)

Theorem: izerop-eval-of-member-implies-itimes-list-0 ((z ∈ y) ∧ (fix-int (eval$ (t, z, a)) = 0)) → (itimes-list (eval$ ('list, y, a)) = 0)

Definition: subsetp (x, y) = if x ≃ nil then t

elseif car (x) ∈ y then subsetp (cdr (x), y)

else f endif Theorem: subsetp-implies-itimes-list-eval$-equals-0 (subsetp (x, y) ∧ (itimes-list (eval$ ('list, x, a)) = 0)) → (itimes-list (eval$ ('list, y, a)) = 0)

Theorem: subbagp-subsetp subbagp (x, y) → subsetp (x, y)

Theorem: equal-0-itimes-list-eval$-bagint-1 (itimes-list (eval$ ('list, bagint (x, y), a)) = 0) → (itimes-list (eval$ ('list, x, a)) = 0)

Theorem: equal-0-itimes-list-eval$-bagint-2 (itimes-list (eval$ ('list, bagint (x, y), a)) = 0) → (itimes-list (eval$ ('list, y, a)) = 0)

Theorem: correctness-of-cancel-itimes-hack-2 (listp (u) ∧ (car (u) = 'itimes) ∧ listp (v) ∧ (car (v) = 'itimes) ∧ (eval$ (t, u, a) ≠ eval$ (t, v, a))) → (itimes-list (eval$ ('list,

bagdiff (itimes-fringe (u),

bagint (itimes-fringe (u), itimes-fringe (v))), a))

≠ itimes-list (eval$ ('list,

bagdiff (itimes-fringe (v),

bagint (itimes-fringe (u),

itimes-fringe (v))),

a)))

Theorem: correctness-of-cancel-itimes-hack-3-lemma ((u = itimes (a, b)) ∧ (fix-int (a) ≠ 0)) → ((u = itimes (a, c)) = (fix-int (b) = fix-int (c)))

Theorem: correctness-of-cancel-itimes-hack-3 (listp (u) ∧ (car (u) = 'itimes) ∧ listp (v) ∧ (car (v) = 'itimes) ∧ (eval$ (t, u, a) = eval$ (t, v, a)) ∧ (¬ eval$ (t,

            cons ('equal,

cons (itimes-tree (bagint (itimes-fringe (u), itimes-fringe (v))),

                      '('0))),

a)))

→ ((itimes-list (eval$ ('list,

bagdiff (itimes-fringe (u),

bagint (itimes-fringe (u), itimes-fringe (v))), a))

= itimes-list (eval$ ('list,

bagdiff (itimes-fringe (v),

bagint (itimes-fringe (u),

itimes-fringe (v))),

a)))

= t)

Event: Enable correctness-of-cancel-itimes-hack-3-lemma; name this event ‘correctnessof-cancel-itimes-hack-3-lemma-off’.

Theorem: correctness-of-cancel-itimes eval$ (t, x, a) = eval$ (t, cancel-itimes (x), a)

Definition: itimes-tree-no-fix-int (l) = if listp (l) then itimes-tree-rec (l)

else ''1 endif

Theorem: eval$-itimes-tree-no-fix-int-1 ilessp (eval$ (t, itimes-tree-no-fix-int (x), a), y) = ilessp (eval$ (t, itimes-tree (x), a), y)

Theorem: eval$-itimes-tree-no-fix-int-2 ilessp (y, eval$ (t, itimes-tree-no-fix-int (x), a)) = ilessp (y, eval$ (t, itimes-tree (x), a))

Event: Enable itimes-tree-no-fix-int; name this event ‘itimes-tree-no-fix-int-off’.

Definition: make-cancel-itimes-inequality (x, y, in-both) = list ('if,

cons ('ilessp, cons (itimes-tree-no-fix-int (in-both), '('0))),

       list ('ilessp,

itimes-tree-no-fix-int (bagdiff (y, in-both)), itimes-tree-no-fix-int (bagdiff (x, in-both))),

cons ('if, cons (list ('ilessp, ''0, itimes-tree-no-fix-int (in-both)), cons (list ('ilessp,

itimes-tree-no-fix-int (bagdiff (x, in-both)), itimes-tree-no-fix-int (bagdiff (y, in-both))),

                     '((false))))))

Definition: cancel-itimes-ilessp (x) = if listp (x)

then if car (x) = 'ilessp

then if listp (bagint (itimes-fringe (cadr (x)),

itimes-fringe (caddr (x)))) then make-cancel-itimes-inequality (itimes-fringe (cadr (x)),

itimes-fringe (caddr (x)),

bagint (itimes-fringe (cadr (x)),

itimes-fringe (caddr (x))))

else x endif else x endif

else x endif

Theorem: eval$-make-cancel-itimes-inequality eval$ (t, make-cancel-itimes-inequality (x, y, in-both), a) = if eval$ (t,

cons ('ilessp, cons (itimes-tree-no-fix-int (in-both), '('0))), a)

then ilessp (eval$ (t, itimes-tree-no-fix-int (bagdiff (y, in-both)), a),

eval$ (t, itimes-tree-no-fix-int (bagdiff (x, in-both)), a))

elseif eval$ (t, list ('ilessp, ''0, itimes-tree-no-fix-int (in-both)), a) then ilessp (eval$ (t, itimes-tree-no-fix-int (bagdiff (x, in-both)), a),

eval$ (t, itimes-tree-no-fix-int (bagdiff (y, in-both)), a))

else f endif

Event: Enable make-cancel-itimes-inequality; name this event ‘make-cancel-itimes-inequality-off’.

Theorem: listp-bagint-with-singleton-implies-member listp (bagint (y, list (z))) → (z ∈ y)

Theorem: itimes-list-eval$-list-0 (0 ∈ x) → (itimes-list (eval$ ('list, x, a)) = 0)

Theorem: ilessp-itimes-right-positive ilessp (0, x) → (ilessp (y, z) = ilessp (itimes (y, x), itimes (z, x)))

Theorem: correctness-of-cancel-itimes-ilessp-hack-1 (subbagp (bag, x)

∧ subbagp (bag, y) ∧ ilessp (0, itimes-list (eval$ ('list, bag, a)))) → (ilessp (itimes-list (eval$ ('list, bagdiff (x, bag), a)),

itimes-list (eval$ ('list, bagdiff (y, bag), a))) = ilessp (itimes-list (eval$ ('list, x, a)),

itimes-list (eval$ ('list, y, a))))

Theorem: listp-bagint-with-singleton-member listp (bagint (y, list (z))) = (z ∈ y)

Theorem: correctness-of-cancel-itimes-ilessp-hack-2-lemma (0 ∈ itimes-fringe (w)) → (eval$ (t, w, a) = 0)

Theorem: correctness-of-cancel-itimes-ilessp-hack-2 (0 ∈ itimes-fringe (w)) → (¬ ilessp (eval$ (t, w, a), 0))

Event: Enable correctness-of-cancel-itimes-ilessp-hack-2-lemma; name this event ‘correctness-of-cancel-itimes-ilessp-hack-2-lemma-off’.

Theorem: ilessp-trichotomy (¬ ilessp (x, y)) → (ilessp (y, x) = (fix-int (x) ≠ fix-int (y)))

Theorem: correctness-of-cancel-itimes-ilessp-hack-3-lemma-1 ((0 = itimes-list (eval$ ('list, bag, a))) ∧ subsetp (bag, z)) → (itimes-list (eval$ ('list, z, a)) = 0)

Theorem: correctness-of-cancel-itimes-ilessp-hack-3-lemma-2 ((0 = itimes-list (eval$ ('list, bag, a))) ∧ subsetp (bag, itimes-fringe (x))) → (fix-int (eval$ (t, x, a)) = 0)

Theorem: same-fix-int-implies-not-ilessp (fix-int (x) = fix-int (y)) → (¬ ilessp (x, y))

Theorem: correctness-of-cancel-itimes-ilessp-hack-3 ((¬ ilessp (itimes-list (eval$ ('list, bag, a)), 0)) ∧ (¬ ilessp (0, itimes-list (eval$ ('list, bag, a)))) ∧ subbagp (bag, itimes-fringe (w)) ∧ subbagp (bag, itimes-fringe (v))) → (¬ ilessp (eval$ (t, w, a), eval$ (t, v, a)))

Theorem: ilessp-itimes-right-negative ilessp (x, 0) → (ilessp (y, z) = ilessp (itimes (z, x), itimes (y, x)))

Theorem: correctness-of-cancel-itimes-ilessp-hack-4 (subbagp (bag, x)

∧ subbagp (bag, y) ∧ ilessp (itimes-list (eval$ ('list, bag, a)), 0)) → (ilessp (itimes-list (eval$ ('list, bagdiff (x, bag), a)),

itimes-list (eval$ ('list, bagdiff (y, bag), a))) = ilessp (itimes-list (eval$ ('list, y, a)),

itimes-list (eval$ ('list, x, a))))

Event: Enable ilessp-trichotomy; name this event ‘ilessp-trichotomy-off’.

Event: Enable same-fix-int-implies-not-ilessp; name this event ‘same-fix-int-implies-not-ilessp-off’.

Theorem: correctness-of-cancel-itimes-ilessp eval$ (t, x, a) = eval$ (t, cancel-itimes-ilessp (x), a)

Theorem: ilessp-strict ilessp (x, y) → (¬ ilessp (y, x))

Event: Enable eval$-cancel-iplus; name this event ‘eval$-cancel-iplus-off’.

Event: Enable eval$-iplus; name this event ‘eval$-iplus-off’.

Event: Enable lessp-count-listp-cdr; name this event ‘lessp-count-listp-cdr-off’.

Event: Enable eval$-iplus-tree-rec; name this event ‘eval$-iplus-tree-rec-off’.

Event: Enable eval$-iplus-tree; name this event ‘eval$-iplus-tree-off’.

Event: Enable iplus-list-eval$-fringe; name this event ‘iplus-list-eval$-fringe-off’.

Event: Enable eval$-iplus-list-bagdiff; name this event ‘eval$-iplus-list-bagdiff-off’.

Event: Enable lessp-difference-plus-arg1; name this event ‘lessp-difference-plus-arg1-off’.

Event: Enable lessp-difference-plus-arg1-commuted; name this event ‘lesspdifference-plus-arg1-commuted-off’.

Event: Enable correctness-of-cancel-iplus-ilessp-lemma; name this event ‘correctnessof-cancel-iplus-ilessp-lemma-off’. Event: Enable eval$-ilessp-iplus-tree-no-fix-int; name this event ‘eval$-ilessp-iplus-tree-no-fix-int-off’. Event: Enable make-cancel-iplus-inequality-simplifier; name this event ‘makecancel-iplus-inequality-simplifier-off’. Event: Enable quotient-difference-lessp-arg2; name this event ‘quotient-difference-lessp-arg2-off’. Event: Enable eval$-itimes-tree-rec; name this event ‘eval$-itimes-tree-rec-off’. Event: Enable eval$-itimes-tree; name this event ‘eval$-itimes-tree-off’. Event: Enable itimes-list-eval$-fringe; name this event ‘itimes-list-eval$-fringe-off’. Event: Enable integerp-eval$-itimes; name this event ‘integerp-eval$-itimes-off’. Event: Enable itimes-list-bagdiff; name this event ‘itimes-list-bagdiff-off’. Event: Enable equal-itimes-list-eval$-list-delete; name this event ‘equal-itimes-list-eval$-list-delete-off’. Event: Enable member-izerop-itimes-fringe; name this event ‘member-izerop-itimes-fringe-off’. Event: Enable correctness-of-cancel-itimes-hack-1; name this event ‘correctnessof-cancel-itimes-hack-1-off’. Event: Enable eval$-make-cancel-itimes-equality; name this event ‘eval$-make-cancel-itimes-equality-off’. Event: Enable eval$-make-cancel-itimes-equality-1; name this event ‘eval$- make-cancel-itimes-equality-1-off’. Event: Enable eval$-make-cancel-itimes-equality-2; name this event ‘eval$- make-cancel-itimes-equality-2-off’. Event: Enable eval$-equal-itimes-tree-itimes-fringe-0; name this event ‘eval$- equal-itimes-tree-itimes-fringe-0-off’. Event: Enable izerop-eval-of-member-implies-itimes-list-0; name this event ‘izerop-eval-of-member-implies-itimes-list-0-off’. Event: Enable subsetp-implies-itimes-list-eval$-equals-0; name this event ‘subsetpimplies-itimes-list-eval$-equals-0-off’. Event: Enable equal-0-itimes-list-eval$-bagint-1; name this event ‘equal-0-itimes-list-eval$-bagint-1-off’. Event: Enable equal-0-itimes-list-eval$-bagint-2; name this event ‘equal-0-itimes-list-eval$-bagint-2-off’. Event: Enable correctness-of-cancel-itimes-hack-2; name this event ‘correctnessof-cancel-itimes-hack-2-off’. Event: Enable correctness-of-cancel-itimes-hack-3-lemma; name this event ‘correctnessof-cancel-itimes-hack-3-lemma-off1’. Event: Enable correctness-of-cancel-itimes-hack-3; name this event ‘correctnessof-cancel-itimes-hack-3-off’. Event: Enable eval$-itimes-tree-no-fix-int-1; name this event ‘eval$-itimes-tree-no-fix-int-1-off’. Event: Enable eval$-itimes-tree-no-fix-int-2; name this event ‘eval$-itimes-tree-no-fix-int-2-off’. Event: Enable eval$-make-cancel-itimes-inequality; name this event ‘eval$- make-cancel-itimes-inequality-off’.

Event: Enable listp-bagint-with-singleton-implies-member; name this event ‘listp-bagint-with-singleton-implies-member-off’.

Event: Enable itimes-list-eval$-list-0; name this event ‘itimes-list-eval$-list-0-off’.

Event: Enable correctness-of-cancel-itimes-ilessp-hack-1; name this event ‘correctnessof-cancel-itimes-ilessp-hack-1-off’.

Event: Enable listp-bagint-with-singleton-member; name this event ‘listp-bagint-with-singleton-member-off’.

Event: Enable correctness-of-cancel-itimes-ilessp-hack-2; name this event ‘correctnessof-cancel-itimes-ilessp-hack-2-off’.

Event: Enable correctness-of-cancel-itimes-ilessp-hack-3-lemma-1; name this event ‘correctness-of-cancel-itimes-ilessp-hack-3-lemma-1-off’.

Event: Enable correctness-of-cancel-itimes-ilessp-hack-3-lemma-2; name this event ‘correctness-of-cancel-itimes-ilessp-hack-3-lemma-2-off’.

Event: Enable correctness-of-cancel-itimes-ilessp-hack-3; name this event ‘correctnessof-cancel-itimes-ilessp-hack-3-off’.

Event: Enable correctness-of-cancel-itimes-ilessp-hack-4; name this event ‘correctnessof-cancel-itimes-ilessp-hack-4-off’.

Definition: itimes-tree-ineg (l) = if listp (l)

then if car (l) = ''-1

then if listp (cdr (l)) then list ('ineg, itimes-tree-rec (cdr (l)))

else car (l) endif else itimes-tree-rec (l) endif

else ''1 endif

Definition: itimes-factors (x) = if listp (x) then case on car (x):

case = itimes

then append (itimes-factors (cadr (x)), itimes-factors (caddr (x))) case = iplus then if listp (bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x))))

then cons (list ('iplus,

itimes-tree-ineg (bagdiff (itimes-factors (cadr (x)),

bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x))))),

itimes-tree-ineg (bagdiff (itimes-factors (caddr (x)),

bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x)))))),

bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x))))

else list (x) endif case = ineg then cons (''-1, itimes-factors (cadr (x))) otherwise list (x) endcase

else list (x) endif

Theorem: itimes–1 itimes (-1, x) = ineg (x)

Theorem: equal-ineg-ineg (ineg (x) = ineg (y)) = (fix-int (x) = fix-int (y))

Theorem: ilessp-ineg-ineg ilessp (ineg (x), ineg (y)) = ilessp (y, x)

Theorem: fix-int-eval$-itimes-tree-rec listp (x) → (fix-int (eval$ (t, itimes-tree-rec (x), a))

= itimes-list (eval$ ('list, x, a)))

Theorem: eval$-itimes-tree-ineg fix-int (eval$ (t, itimes-tree-ineg (x), a)) = itimes-list (eval$ ('list, x, a))

Theorem: ineg-eval$-itimes-tree-ineg ineg (eval$ (t, itimes-tree-ineg (x), a)) = ineg (itimes-list (eval$ ('list, x, a)))

Theorem: iplus-eval$-itimes-tree-ineg (iplus (eval$ (t, itimes-tree-ineg (x), a), y) = iplus (itimes-list (eval$ ('list, x, a)), y)) ∧ (iplus (y, eval$ (t, itimes-tree-ineg (x), a))

= iplus (y, itimes-list (eval$ ('list, x, a))))

Theorem: itimes-eval$-itimes-tree-ineg (itimes (eval$ (t, itimes-tree-ineg (x), a), y) = itimes (itimes-list (eval$ ('list, x, a)), y)) ∧ (itimes (y, eval$ (t, itimes-tree-ineg (x), a))

= itimes (y, itimes-list (eval$ ('list, x, a))))

Event: Enable itimes-tree-ineg; name this event ‘itimes-tree-ineg-off’.

Definition: iplus-or-itimes-term (x) = if listp (x)

then case on car (x): case = iplus then t case = itimes then t case = ineg then if listp (cadr (x)) then caadr (x) = 'itimes

else f endif otherwise f endcase

else f endif

Definition: cancel-itimes-factors (x) = if listp (x) ∧ (car (x) = 'equal)

then if iplus-or-itimes-term (cadr (x))

then if listp (bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x))))

then if iplus-or-itimes-term (caddr (x))

then make-cancel-itimes-equality (itimes-factors (cadr (x)), itimes-factors (caddr (x)), bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x))))

else list ('if, list ('integerp, caddr (x)), make-cancel-itimes-equality (itimes-factors (cadr (x)),

itimes-factors (caddr (x)),

bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x)))),

list ('quote, f)) endif

else x endif elseif iplus-or-itimes-term (caddr (x)) then if listp (bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x)))) then list ('if,

list ('integerp, cadr (x)),

make-cancel-itimes-equality (itimes-factors (cadr (x)), itimes-factors (caddr (x)), bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x)))),

list ('quote, f))

else x endif else x endif

else x endif

(DEFN CANCEL-ITIMES-FACTORS-EXPANDED
(X)
(IF
(LISTP X)
(IF
(EQUAL (CAR X) 'EQUAL)
(COND
((LISTP (CADR X))
(CASE
(CAADR X)
(IPLUS
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
             (ITIMES-FACTORS (CADDR X))))
(IF
(LISTP (CADDR X))
(CASE
(CAADDR X)
(IPLUS
   (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                (ITIMES-FACTORS (CADDR X))
                                (BAGINT (ITIMES-FACTORS (CADR X))
                                        (ITIMES-FACTORS (CADDR X)))))
(ITIMES
   (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                (ITIMES-FACTORS (CADDR X))
                                (BAGINT (ITIMES-FACTORS (CADR X))
                                        (ITIMES-FACTORS (CADDR X)))))
(INEG
 (IF
  (LISTP (CADADDR X))

(IF
(EQUAL (CAADADDR X) 'ITIMES)
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                            (ITIMES-FACTORS (CADDR X))
                            (BAGINT (ITIMES-FACTORS (CADR X))
                                    (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F)))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))))
(OTHERWISE
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F)))
X))
(ITIMES
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
         (ITIMES-FACTORS (CADDR X))))
(IF
(LISTP (CADDR X))
(CASE
(CAADDR X)

(IPLUS
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                            (ITIMES-FACTORS (CADDR X))
                            (BAGINT (ITIMES-FACTORS (CADR X))
                                    (ITIMES-FACTORS (CADDR X)))))
(ITIMES
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                            (ITIMES-FACTORS (CADDR X))
                            (BAGINT (ITIMES-FACTORS (CADR X))
                                    (ITIMES-FACTORS (CADDR X)))))
(INEG
(IF
(LISTP (CADADDR X))
(IF
(EQUAL (CAADADDR X) 'ITIMES)
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                            (ITIMES-FACTORS (CADDR X))
                            (BAGINT (ITIMES-FACTORS (CADR X))
                                    (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F)))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))))
(OTHERWISE
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))

(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F)))
X))
(INEG
(COND
((LISTP (CADADR X))
(COND
((EQUAL (CAADADR X) 'ITIMES)
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))))
(IF
(LISTP (CADDR X))
(CASE
(CAADDR X)
(IPLUS
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
       (ITIMES-FACTORS (CADDR X)))))
(ITIMES
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
       (ITIMES-FACTORS (CADDR X)))))
(INEG
(IF
(LISTP (CADADDR X))
(IF
(EQUAL (CAADADDR X) 'ITIMES)
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))

(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F)))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))))
(OTHERWISE
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))))
(LIST 'IF
(LIST 'INTEGERP (CADDR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F)))
X))
((LISTP (CADDR X))
(CASE
(CAADDR X)
(IPLUS
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADR X))
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))
X))

(ITIMES
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
               (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
 (LIST 'INTEGERP (CADR X))
 (MAKE-CANCEL-ITIMES-EQUALITY
                             (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
 (LIST 'QUOTE F))
X))
(INEG
(IF
(LISTP (CADADDR X))
(IF
 (EQUAL (CAADADDR X) 'ITIMES)
 (IF
  (LISTP (BAGINT (ITIMES-FACTORS (CADR X))
                 (ITIMES-FACTORS (CADDR X))))
  (LIST 'IF
   (LIST 'INTEGERP (CADR X))
   (MAKE-CANCEL-ITIMES-EQUALITY
                             (ITIMES-FACTORS (CADR X))
                             (ITIMES-FACTORS (CADDR X))
                             (BAGINT (ITIMES-FACTORS (CADR X))
                                     (ITIMES-FACTORS (CADDR X))))
   (LIST 'QUOTE F))
  X)
 X)
X))
(OTHERWISE X)))
(T X)))
((LISTP (CADDR X))
(CASE
(CAADDR X)
(IPLUS
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
             (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))

(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))
X))
(ITIMES
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADR X))
(MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))
X))
(INEG
(IF
(LISTP (CADADDR X))
(IF
(EQUAL (CAADADDR X) 'ITIMES)
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))))
(LIST 'IF
(LIST 'INTEGERP (CADR X))
(MAKE-CANCEL-ITIMES-EQUALITY
(ITIMES-FACTORS (CADR X))
(ITIMES-FACTORS (CADDR X))
(BAGINT (ITIMES-FACTORS (CADR X))
        (ITIMES-FACTORS (CADDR X))))
(LIST 'QUOTE F))
X)
X)
X))
(OTHERWISE X)))
(T X)))
(OTHERWISE
(IF
(LISTP (CADDR X))
(CASE
(CAADDR X)
(IPLUS

(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
               (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
   (LIST 'INTEGERP (CADR X))
   (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                (ITIMES-FACTORS (CADDR X))
                                (BAGINT (ITIMES-FACTORS (CADR X))
                                        (ITIMES-FACTORS (CADDR X))))
   (LIST 'QUOTE F))
X))
(ITIMES
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
               (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
   (LIST 'INTEGERP (CADR X))
   (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                (ITIMES-FACTORS (CADDR X))
                                (BAGINT (ITIMES-FACTORS (CADR X))
                                        (ITIMES-FACTORS (CADDR X))))
   (LIST 'QUOTE F))
X))
(INEG
(IF
(LISTP (CADADDR X))
(IF
 (EQUAL (CAADADDR X) 'ITIMES)
 (IF
  (LISTP (BAGINT (ITIMES-FACTORS (CADR X))
                 (ITIMES-FACTORS (CADDR X))))
  (LIST 'IF
   (LIST 'INTEGERP (CADR X))
   (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                (ITIMES-FACTORS (CADDR X))
                                (BAGINT (ITIMES-FACTORS (CADR X))
                                        (ITIMES-FACTORS (CADDR X))))
   (LIST 'QUOTE F))
  X)
 X)
X))
(OTHERWISE X))
X))))
((LISTP (CADDR X))

(CASE
(CAADDR X)
(IPLUS
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
               (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
      (LIST 'INTEGERP (CADR X))
      (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                   (ITIMES-FACTORS (CADDR X))
                                   (BAGINT (ITIMES-FACTORS (CADR X))
                                           (ITIMES-FACTORS (CADDR X))))
      (LIST 'QUOTE F))
X))
(ITIMES
(IF
(LISTP (BAGINT (ITIMES-FACTORS (CADR X))
               (ITIMES-FACTORS (CADDR X))))
(LIST 'IF
      (LIST 'INTEGERP (CADR X))
      (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                   (ITIMES-FACTORS (CADDR X))
                                   (BAGINT (ITIMES-FACTORS (CADR X))
                                           (ITIMES-FACTORS (CADDR X))))
      (LIST 'QUOTE F))
X))
(INEG
(IF
(LISTP (CADADDR X))
(IF
 (EQUAL (CAADADDR X) 'ITIMES)
 (IF
  (LISTP (BAGINT (ITIMES-FACTORS (CADR X))
                 (ITIMES-FACTORS (CADDR X))))
  (LIST 'IF
      (LIST 'INTEGERP (CADR X))
      (MAKE-CANCEL-ITIMES-EQUALITY (ITIMES-FACTORS (CADR X))
                                   (ITIMES-FACTORS (CADDR X))
                                   (BAGINT (ITIMES-FACTORS (CADR X))
                                           (ITIMES-FACTORS (CADDR X))))
      (LIST 'QUOTE F))
  X)
 X)
X))

     (OTHERWISE X)))
   (T X))
  X)
 X))

Theorem: cancel-itimes-factors-expanded-cancel-itimes-factors cancel-itimes-factors-expanded (x) = cancel-itimes-factors (x)

Event: Enable cancel-itimes-factors-expanded; name this event ‘cancel-itimes-factors-expanded-off’.

Event: Enable iplus-or-itimes-term; name this event ‘iplus-or-itimes-term-off’.

Theorem: equal-itimes-list-eval$-list-delete-new-1 (fix-int (eval$ (t, elt, a)) ≠ 0) → ((x = itimes-list (eval$ ('list, delete (elt, bag), a)))

= if elt ∈ bag

then integerp (x)

∧ (itimes (x, eval$ (t, elt, a))

= itimes-list (eval$ ('list, bag, a)))

else x = itimes-list (eval$ ('list, bag, a)) endif)

Theorem: equal-itimes-list-eval$-list-delete-new-2 (fix-int (eval$ (t, elt, a)) ≠ 0) → ((itimes-list (eval$ ('list, delete (elt, bag), a)) = x)

= if elt ∈ bag

then integerp (x)

∧ (itimes (x, eval$ (t, elt, a))

= itimes-list (eval$ ('list, bag, a)))

else x = itimes-list (eval$ ('list, bag, a)) endif)

Theorem: itimes-itimes-list-eval$-list-delete (x ∈ bag) → (itimes (eval$ (t, x, a), itimes-list (eval$ ('list, delete (x, bag), a)))

= itimes-list (eval$ ('list, bag, a)))

Theorem: equal-itimes-list-eval$-list-bagdiff (subbagp (in-both, bag1 ) ∧ subbagp (in-both, bag2 ) ∧ (itimes-list (eval$ ('list, in-both, a)) ≠ 0)) → ((itimes-list (eval$ ('list, bagdiff (bag1 , in-both), a))

= itimes-list (eval$ ('list, bagdiff (bag2 , in-both), a))) = (itimes-list (eval$ ('list, bag1 , a))

= itimes-list (eval$ ('list, bag2 , a))))

Theorem: membership-of-0-implies-itimes-list-is-0 (0 ∈ x) → (itimes-list (x) = 0)

Theorem: member-0-eval$-list (0 ∈ x) → (0 ∈ eval$ ('list, x, a))

Theorem: itimes-list-eval$-factors-lemma itimes (itimes-list (eval$ ('list, bagint (bag1 , bag2 ), a)),

itimes-list (eval$ ('list, bagdiff (bag2 , bagint (bag1 , bag2 )), a))) = itimes-list (eval$ ('list, bag2 , a))

Theorem: itimes-list-eval$-factors-lemma-prime itimes (itimes-list (eval$ ('list, bagint (bag1 , bag2 ), a)),

itimes-list (eval$ ('list, bagdiff (bag1 , bagint (bag1 , bag2 )), a))) = itimes-list (eval$ ('list, bag1 , a))

Theorem: itimes-list-eval$-factors itimes-list (eval$ ('list, itimes-factors (x), a)) = fix-int (eval$ (t, x, a))

Theorem: iplus-or-itimes-term-integerp-eval$ iplus-or-itimes-term (x) → integerp (eval$ (t, x, a))

Theorem: eval$-list-bagint-0 (itimes-list (eval$ ('list, bagint (x, y), a)) = 0) → ((itimes-list (eval$ ('list, x, a)) = 0)

∧ (itimes-list (eval$ ('list, y, a)) = 0))

Theorem: eval$-list-bagint-0-implies-equal ((itimes-list (eval$ ('list, bagint (itimes-factors (v), itimes-factors (w)), a)) = 0) ∧ integerp (eval$ (t, v, a)) ∧ integerp (eval$ (t, w, a))) → ((eval$ (t, v, a) = eval$ (t, w, a)) = t)

Theorem: correctness-of-cancel-itimes-factors eval$ (t, x, a) = eval$ (t, cancel-itimes-factors-expanded (x), a)

Definition: cancel-itimes-ilessp-factors (x) = if listp (x)

then if car (x) = 'ilessp

then if listp (bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x)))) then make-cancel-itimes-inequality (itimes-factors (cadr (x)),

itimes-factors (caddr (x)),

bagint (itimes-factors (cadr (x)),

itimes-factors (caddr (x))))

else x endif else x endif

else x endif

Theorem: bagint-singleton bagint (x, list (y)) = if y ∈ x then list (y)

else nil endif

Theorem: izerop-ilessp-0-relationship (fix-int (x) = 0) = ((¬ ilessp (x, 0)) ∧ (¬ ilessp (0, x)))

Theorem: ilessp-itimes-list-eval$-list-delete-helper-1 ilessp (0, w) → (ilessp (itimes (x, w), itimes (w, u)) = ilessp (x, u))

Theorem: ilessp-itimes-list-eval$-list-delete-helper-2 ilessp (w, 0) → (ilessp (itimes (w, u), itimes (x, w)) = ilessp (x, u))

Theorem: ilessp-itimes-list-eval$-list-delete ((z ∈ y) ∧ (fix-int (eval$ (t, z, a)) ≠ 0)) → (ilessp (x, itimes-list (eval$ ('list, delete (z, y), a)))

= if ilessp (0, eval$ (t, z, a))

then ilessp (itimes (x, eval$ (t, z, a)),

itimes-list (eval$ ('list, y, a)))

elseif ilessp (eval$ (t, z, a), 0)

then ilessp (itimes-list (eval$ ('list, y, a)),

itimes (x, eval$ (t, z, a)))

else f endif)

Theorem: ilessp-itimes-list-eval$-list-delete-prime-helper-1 ilessp (0, w) → (ilessp (itimes (w, u), itimes (x, w)) = ilessp (u, x))

Theorem: ilessp-itimes-list-eval$-list-delete-prime-helper-2 ilessp (w, 0) → (ilessp (itimes (x, w), itimes (w, u)) = ilessp (u, x))

Theorem: ilessp-itimes-list-eval$-list-delete-prime ((z ∈ y) ∧ (fix-int (eval$ (t, z, a)) ≠ 0)) → (ilessp (itimes-list (eval$ ('list, delete (z, y), a)), x)

= if ilessp (0, eval$ (t, z, a))

then ilessp (itimes-list (eval$ ('list, y, a)),

itimes (x, eval$ (t, z, a)))

elseif ilessp (eval$ (t, z, a), 0)

then ilessp (itimes (x, eval$ (t, z, a)),

itimes-list (eval$ ('list, y, a)))

else f endif)

Theorem: ilessp-0-itimes ilessp (0, itimes (x, y)) = ((ilessp (0, x) ∧ ilessp (0, y)) ∨ (ilessp (x, 0) ∧ ilessp (y, 0)))

Theorem: ilessp-itimes-0 ilessp (itimes (x, y), 0) = ((ilessp (0, x) ∧ ilessp (y, 0)) ∨ (ilessp (x, 0) ∧ ilessp (0, y)))

Theorem: ilessp-itimes-list-eval$-list-bagdiff (subbagp (in-both, bag1 ) ∧ subbagp (in-both, bag2 ) ∧ (itimes-list (eval$ ('list, in-both, a)) ≠ 0)) → (ilessp (itimes-list (eval$ ('list, bagdiff (bag1 , in-both), a)),

itimes-list (eval$ ('list, bagdiff (bag2 , in-both), a))) = if ilessp (0, itimes-list (eval$ ('list, in-both, a))) then ilessp (itimes-list (eval$ ('list, bag1 , a)),

itimes-list (eval$ ('list, bag2 , a)))

else ilessp (itimes-list (eval$ ('list, bag2 , a)), itimes-list (eval$ ('list, bag1 , a))) endif)

Theorem: zero-ilessp-implies-not-equal ilessp (0, x) → (0 ≠ x)

Theorem: ilessp-itimes-list-eval$-list-bagdiff-corollary-1 (subbagp (in-both, bag1 ) ∧ subbagp (in-both, bag2 ) ∧ ilessp (0, itimes-list (eval$ ('list, in-both, a)))) → (ilessp (itimes-list (eval$ ('list, bagdiff (bag1 , in-both), a)),

itimes-list (eval$ ('list, bagdiff (bag2 , in-both), a))) = ilessp (itimes-list (eval$ ('list, bag1 , a)),

itimes-list (eval$ ('list, bag2 , a))))

Theorem: ilessp-zero-implies-not-equal ilessp (x, 0) → (0 ≠ x)

Theorem: ilessp-itimes-list-eval$-list-bagdiff-corollary-2 (subbagp (in-both, bag1 ) ∧ subbagp (in-both, bag2 ) ∧ ilessp (itimes-list (eval$ ('list, in-both, a)), 0)) → (ilessp (itimes-list (eval$ ('list, bagdiff (bag1 , in-both), a)),

itimes-list (eval$ ('list, bagdiff (bag2 , in-both), a))) = ilessp (itimes-list (eval$ ('list, bag2 , a)),

itimes-list (eval$ ('list, bag1 , a))))

Theorem: member-0-itimes-factors-yields-0 (eval$ (t, w, a) ≠ 0) → (0 ∉ itimes-factors (w))

Theorem: member-0-itimes-factors-yields-0-ilessp-consequence-1 ilessp (eval$ (t, w, a), 0) → (0 ∉ itimes-factors (w))

Theorem: member-0-itimes-factors-yields-0-ilessp-consequence-2 ilessp (0, eval$ (t, w, a)) → (0 ∉ itimes-factors (w))

Event: Disable ilessp-trichotomy; name this event ‘ilessp-trichotomy-on’.

Event: Enable izerop-ilessp-0-relationship; name this event ‘izerop-ilessp-0-relationship-off’.

Theorem: eval$-list-bagint-0-for-ilessp ((¬ ilessp (itimes-list (eval$ ('list, bagint (x, y), a)), 0)) ∧ (¬ ilessp (0, itimes-list (eval$ ('list, bagint (x, y), a))))) → ((fix-int (itimes-list (eval$ ('list, x, a))) = 0)

∧ (fix-int (itimes-list (eval$ ('list, y, a))) = 0))

Theorem: eval$-list-bagint-0-implies-equal-for-ilessp-lemma ((¬ ilessp (itimes-list (eval$ ('list,

bagint (itimes-factors (v), itimes-factors (w)), a)),

0))

∧ (¬ ilessp (0,

itimes-list (eval$ ('list,

bagint (itimes-factors (v),

itimes-factors (w)), a)))))

→ (fix-int (eval$ (t, v, a)) = fix-int (eval$ (t, w, a)))

Theorem: equal-fix-int-to-ilessp (fix-int (x) = fix-int (y)) → (¬ ilessp (x, y))

Theorem: eval$-list-bagint-0-implies-equal-for-ilessp ((¬ ilessp (itimes-list (eval$ ('list,

bagint (itimes-factors (v), itimes-factors (w)), a)),

0))

∧ (¬ ilessp (0,

itimes-list (eval$ ('list,

bagint (itimes-factors (v),

itimes-factors (w)), a)))))

→ ((¬ ilessp (eval$ (t, v, a), eval$ (t, w, a)))

∧ (¬ ilessp (eval$ (t, w, a), eval$ (t, v, a))))

Event: Enable ilessp-trichotomy; name this event ‘ilessp-trichotomy-off1’.

Theorem: correctness-of-cancel-itimes-ilessp-factors eval$ (t, x, a) = eval$ (t, cancel-itimes-ilessp-factors (x), a)

Event: Disable lessp-count-listp-cdr; name this event ‘lessp-count-listp-cdr-on’.

Definition: disjoin-equalities-with-0 (factors) = if listp (cdr (factors))

then list ('or, cons ('equal, cons (list ('fix-int, car (factors)), '('0))), disjoin-equalities-with-0 (cdr (factors)))

else cons ('equal, cons (list ('fix-int, car (factors)), '('0))) endif

Event: Enable lessp-count-listp-cdr; name this event ‘lessp-count-listp-cdr-off1’.

Definition: cancel-factors-0 (x) = if listp (x)

then if car (x) = 'equal

then if cadr (x) = ''0

then if listp (cdr (itimes-factors (caddr (x)))) then disjoin-equalities-with-0 (itimes-factors (caddr (x))) else x endif elseif caddr (x) = ''0 then if listp (cdr (itimes-factors (cadr (x))))

then disjoin-equalities-with-0 (itimes-factors (cadr (x))) else x endif

else x endif else x endif

else x endif

Definition: some-eval$s-to-0 (x, a) = if listp (x)

then (fix-int (eval$ (t, car (x), a)) = 0) ∨ some-eval$s-to-0 (cdr (x), a)

else f endif

Theorem: eval$-disjoin-equalities-with-0 listp (lst)

→ (eval$ (t, disjoin-equalities-with-0 (lst), a)

= some-eval$s-to-0 (lst, a))

Theorem: some-eval$s-to-0-append some-eval$s-to-0 (append (x, y), a) = (some-eval$s-to-0 (x, a) ∨ some-eval$s-to-0 (y, a))

Theorem: some-eval$s-to-0-eliminator some-eval$s-to-0 (x, a) = (itimes-list (eval$ ('list, x, a)) = 0)

Theorem: listp-cdr-factors-implies-integerp listp (cdr (itimes-factors (v))) → integerp (eval$ (t, v, a))

Theorem: correctness-of-cancel-factors-0 eval$ (t, x, a) = eval$ (t, cancel-factors-0 (x), a)

Event: Disable lessp-count-listp-cdr; name this event ‘lessp-count-listp-cdr-on1’.

Definition: conjoin-inequalities-with-0 (factors, parity) = if listp (cdr (factors))

then if parity

then list ('or,

list ('and, list ('ilessp, ''0, car (factors)), conjoin-inequalities-with-0 (cdr (factors), t)),

list ('and, cons ('ilessp, cons (car (factors), '('0))), conjoin-inequalities-with-0 (cdr (factors), f)))

else list ('or,

list ('and, cons ('ilessp, cons (car (factors), '('0))), conjoin-inequalities-with-0 (cdr (factors), t)),

list ('and, list ('ilessp, ''0, car (factors)), conjoin-inequalities-with-0 (cdr (factors), f))) endif

elseif parity then list ('ilessp, ''0, car (factors)) else cons ('ilessp, cons (car (factors), '('0))) endif

Event: Enable lessp-count-listp-cdr; name this event ‘lessp-count-listp-cdr-off2’.

Definition: cancel-factors-ilessp-0 (x) = if listp (x)

then if car (x) = 'ilessp

then if cadr (x) = ''0

then if listp (cdr (itimes-factors (caddr (x))))

then conjoin-inequalities-with-0 (itimes-factors (caddr (x)),

t)

else x endif elseif caddr (x) = ''0 then if listp (cdr (itimes-factors (cadr (x))))

then conjoin-inequalities-with-0 (itimes-factors (cadr (x)),

f)

else x endif else x endif

else x endif else x endif

Theorem: conjoin-inequalities-with-0-eliminator listp (x) → (eval$ (t, conjoin-inequalities-with-0 (x, parity), a)

= if parity then ilessp (0, itimes-list (eval$ ('list, x, a))) else ilessp (itimes-list (eval$ ('list, x, a)), 0) endif)

Theorem: correctness-of-cancel-factors-ilessp-0 eval$ (t, x, a) = eval$ (t, cancel-factors-ilessp-0 (x), a)

Event: Enable equal-itimes-list-eval$-list-delete-new-1; name this event ‘equalitimes-list-eval$-list-delete-new-1-off’.

Event: Enable equal-itimes-list-eval$-list-delete-new-2; name this event ‘equalitimes-list-eval$-list-delete-new-2-off’.

Event: Enable itimes-itimes-list-eval$-list-delete; name this event ‘itimes-itimes-list-eval$-list-delete-off’.

Event: Enable equal-itimes-list-eval$-list-bagdiff; name this event ‘equal-itimes-list-eval$-list-bagdiff-off’.

Event: Enable itimes-list-eval$-factors-lemma; name this event ‘itimes-list-eval$-factors-lemma-off’.

Event: Enable itimes-list-eval$-factors-lemma-prime; name this event ‘itimeslist-eval$-factors-lemma-prime-off’.

Event: Enable itimes-list-eval$-factors; name this event ‘itimes-list-eval$-factors-off’. Event: Enable iplus-or-itimes-term-integerp-eval$; name this event ‘iplus-or-itimes-term-integerp-eval$-off’. Event: Enable eval$-list-bagint-0; name this event ‘eval$-list-bagint-0-off’. Event: Enable eval$-list-bagint-0-implies-equal; name this event ‘eval$-list-bagint-0-implies-equal-off’. Event: Enable izerop-ilessp-0-relationship; name this event ‘izerop-ilessp-0-relationship-off1’. Event: Enable ilessp-itimes-list-eval$-list-delete-helper-1; name this event ‘ilesspitimes-list-eval$-list-delete-helper-1-off’. Event: Enable ilessp-itimes-list-eval$-list-delete-helper-2; name this event ‘ilesspitimes-list-eval$-list-delete-helper-2-off’. Event: Enable ilessp-itimes-list-eval$-list-delete; name this event ‘ilessp-itimes-list-eval$-list-delete-off’. Event: Enable ilessp-itimes-list-eval$-list-delete-prime-helper-1; name this event ‘ilessp-itimes-list-eval$-list-delete-prime-helper-1-off’. Event: Enable ilessp-itimes-list-eval$-list-delete-prime-helper-2; name this event ‘ilessp-itimes-list-eval$-list-delete-prime-helper-2-off’. Event: Enable ilessp-itimes-list-eval$-list-delete-prime; name this event ‘ilesspitimes-list-eval$-list-delete-prime-off’. Event: Enable ilessp-0-itimes; name this event ‘ilessp-0-itimes-off’. Event: Enable ilessp-itimes-0; name this event ‘ilessp-itimes-0-off’. Event: Enable listp-cdr-factors-implies-integerp; name this event ‘listp-cdr-factors-implies-integerp-off’.

Event: Enable correctness-of-cancel-itimes; name this event ‘correctness-of-cancel-itimes-off’.

Event: Enable correctness-of-cancel-itimes-ilessp; name this event ‘correctnessof-cancel-itimes-ilessp-off’.

Event: Enable not-integerp-implies-not-equal-iplus; name this event ‘not-integerp-implies-not-equal-iplus-off’.

Event: Enable not-integerp-implies-not-equal-itimes; name this event ‘notintegerp-implies-not-equal-itimes-off’.

Event: Enable subbagp-subsetp; name this event ‘subbagp-subsetp-off’.

Event: Enable eval$-list-bagint-0-implies-equal-for-ilessp; name this event ‘eval$- list-bagint-0-implies-equal-for-ilessp-off’.

Definition: split-out-ineg-terms (x) = if listp (x)

then if listp (car (x))

then if caar (x) = 'ineg

then cons (car (split-out-ineg-terms (cdr (x))),

cons (cadar (x), cdr (split-out-ineg-terms (cdr (x)))))

elseif (caar (x) = 'quote)

∧ negativep (cadar (x))

∧ (negative-guts (cadar (x)) ≠ 0) then cons (car (split-out-ineg-terms (cdr (x))),

cons (list ('quote, negative-guts (cadar (x))), cdr (split-out-ineg-terms (cdr (x)))))

else cons (cons (car (x),

car (split-out-ineg-terms (cdr (x)))), cdr (split-out-ineg-terms (cdr (x)))) endif

else cons (cons (car (x), car (split-out-ineg-terms (cdr (x)))), cdr (split-out-ineg-terms (cdr (x)))) endif

else '(nil) endif

Definition: remove-inegs (x, y) = if listp (cdr (split-out-ineg-terms (x)))

∨ listp (cdr (split-out-ineg-terms (y))) then cons (append (cdr (split-out-ineg-terms (y)),

car (split-out-ineg-terms (x))), append (cdr (split-out-ineg-terms (x)),

car (split-out-ineg-terms (y))))

else f endif

Definition: iplus-or-ineg-term (x) = (listp (x) ∧ ((car (x) = 'ineg) ∨ (car (x) = 'iplus)))

Definition: make-cancel-ineg-terms-equality (x) = if remove-inegs (iplus-fringe (cadr (x)), iplus-fringe (caddr (x)))

then if iplus-or-ineg-term (cadr (x))

then if iplus-or-ineg-term (caddr (x))

then list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else list ('if, list ('integerp, caddr (x)),

                     list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f)) endif

elseif iplus-or-ineg-term (caddr (x)) then list ('if,

list ('integerp, cadr (x)),

                 list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f))

else x endif else x endif

Definition: cancel-ineg-terms-from-equality (x)

= if listp (x) ∧ (car (x) = 'equal)

then make-cancel-ineg-terms-equality (x) else x endif

Definition: cancel-ineg-terms-from-equality-expanded (x) = if listp (x)

then if car (x) = 'equal

then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

then if listp (cadr (x))

then case on caadr (x): case = ineg then if listp (caddr (x))

then case on caaddr (x): case = ineg then list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

case = iplus

then list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

otherwise list ('if,

                                               list ('integerp,

caddr (x)),

                                               list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f)) endcase

else list ('if, list ('integerp, caddr (x)),

                                     list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f)) endif case = iplus then if listp (caddr (x))

then case on caaddr (x): case = ineg then list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

case = iplus then list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

otherwise list ('if,

             list ('integerp,

caddr (x)),

             list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f)) endcase

else list ('if, list ('integerp, caddr (x)),

   list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f)) endif

otherwise if listp (caddr (x))

then case on caaddr (x): case = ineg then list ('if,

            list ('integerp,

cadr (x)),

            list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f)) case = iplus then list ('if,

                         list ('integerp,

cadr (x)),

                         list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f))

otherwise x endcase else x endif endcase

elseif listp (caddr (x)) then case on caaddr (x):

case = ineg then list ('if,

list ('integerp, cadr (x)),

         list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f))

case = iplus then list ('if,

list ('integerp, cadr (x)),

          list ('equal,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))))),

list ('quote, f))

otherwise x endcase else x endif

else x endif else x endif

else x endif

Theorem: cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded cancel-ineg-terms-from-equality-expanded (x) = cancel-ineg-terms-from-equality (x)

Event: Enable cancel-ineg-terms-from-equality-expanded; name this event ‘cancelineg-terms-from-equality-expanded-off’.

Theorem: integerp-eval$-iplus-or-ineg-term iplus-or-ineg-term (x) → integerp (eval$ (t, x, a))

Event: Enable iplus-or-ineg-term; name this event ‘iplus-or-ineg-term-off’.

Theorem: eval$-iplus-list-car-remove-inegs remove-inegs (x, y) → (iplus-list (eval$ ('list, car (remove-inegs (x, y)), a))

= iplus (iplus-list (eval$ ('list, car (split-out-ineg-terms (x)), a)), iplus-list (eval$ ('list, cdr (split-out-ineg-terms (y)), a))))

Theorem: eval$-iplus-list-cdr-remove-inegs remove-inegs (x, y) → (iplus-list (eval$ ('list, cdr (remove-inegs (x, y)), a))

= iplus (iplus-list (eval$ ('list, car (split-out-ineg-terms (y)), a)), iplus-list (eval$ ('list, cdr (split-out-ineg-terms (x)), a))))

Theorem: minus-ineg ((x ∈ N) ∧ (x ≠ 0)) → ((− x) = ineg (x))

Theorem: iplus-list-eval$-car-split-out-ineg-terms iplus-list (eval$ ('list, car (split-out-ineg-terms (x)), a)) = iplus (iplus-list (eval$ ('list, x, a)),

iplus-list (eval$ ('list, cdr (split-out-ineg-terms (x)), a)))

Event: Enable remove-inegs; name this event ‘remove-inegs-off’.

Theorem: correctness-of-cancel-ineg-terms-from-equality eval$ (t, x, a) = eval$ (t, cancel-ineg-terms-from-equality-expanded (x), a)

Definition: make-cancel-ineg-terms-inequality (x) = if remove-inegs (iplus-fringe (cadr (x)), iplus-fringe (caddr (x)))

then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif

Definition: cancel-ineg-terms-from-inequality (x) = if listp (x) ∧ (car (x) = 'ilessp)

then if iplus-or-ineg-term (cadr (x)) then make-cancel-ineg-terms-inequality (x) elseif iplus-or-ineg-term (caddr (x)) then make-cancel-ineg-terms-inequality (x) else x endif

else x endif

Definition: cancel-ineg-terms-from-inequality-expanded (x) = if listp (x)

then if car (x) = 'ilessp

then if listp (cadr (x))

then case on caadr (x): case = ineg then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif case = iplus then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif otherwise if listp (caddr (x))

then case on caaddr (x): case = ineg then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif case = iplus then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))) then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif otherwise x endcase

else x endif endcase

elseif listp (caddr (x)) then case on caaddr (x): case = ineg then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif case = iplus then if remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x)))

then list ('ilessp,

iplus-tree (car (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))),

iplus-tree (cdr (remove-inegs (iplus-fringe (cadr (x)),

iplus-fringe (caddr (x))))))

else x endif otherwise x endcase

else x endif else x endif

else x endif

Theorem: cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded cancel-ineg-terms-from-inequality-expanded (x) = cancel-ineg-terms-from-inequality (x)

Event: Enable cancel-ineg-terms-from-inequality-expanded; name this event ‘cancel-ineg-terms-from-inequality-expanded-off’.

Theorem: correctness-of-cancel-ineg-terms-from-inequality eval$ (t, x, a) = eval$ (t, cancel-ineg-terms-from-inequality-expanded (x), a)

Event: Enable minus-ineg; name this event ‘minus-ineg-off’.

Event: Enable integerp-eval$-iplus-or-ineg-term; name this event ‘integerpeval$-iplus-or-ineg-term-off’.

Theorem: plus-iplus ((i ∈ N) ∧ (j ∈ N)) → ((i + j ) = iplus (i, j ))

Theorem: iplus-constants iplus (1 + i, iplus (1 + j , x)) = iplus ((1 + i) + (1 + j ), x)

Theorem: numberp-is-integerp (w ∈ N) → integerp (w)

Theorem: difference-idifference ((x ∈ N) ∧ (y ∈ N) ∧ if y < x then f

else t endif) → ((y − x) = idifference (y, x))

Theorem: cancel-constants-equal-lemma ((m ∈ N) ∧ (n ∈ N)) → ((iplus (m, x) = iplus (n, y))

= if m < n then fix-int (x) = iplus (n − m, y) else iplus (m − n, x) = fix-int (y) endif)

Theorem: cancel-constants-equal (iplus (1 + i, x) = iplus (1 + j , y)) = if i < j then fix-int (x) = iplus (j − i, y)

else iplus (i − j , x) = fix-int (y) endif

Theorem: ilessp-add1 (y ∈ N) → (ilessp (x, 1 + y) = (¬ ilessp (y, x)))

Theorem: ilessp-add1-iplus (y ∈ N) → (ilessp (x, iplus (1 + y, z)) = (¬ ilessp (iplus (y, z), x)))

Theorem: cancel-constants-ilessp-lemma-1 ((m ∈ N) ∧ (n ∈ N)) → (ilessp (iplus (m, x), iplus (n, y))

= if m < n then ilessp (x, iplus (n − m, y)) else ilessp (iplus (m − n, x), y) endif)

Theorem: cancel-constants-ilessp-lemma-2 ((m ∈ N) ∧ (n ∈ N)) → (ilessp (iplus (m, x), iplus (n, y))

= if m < n then ¬ ilessp (iplus ((n − m) − 1, y), x) else ilessp (iplus (m − n, x), y) endif)

Theorem: cancel-constants-ilessp ilessp (iplus (1 + i, x), iplus (1 + j , y)) = if i < j then ¬ ilessp (iplus ((j − i) − 1, y), x)

else ilessp (iplus (i − j , x), y) endif

Event: Enable plus-iplus; name this event ‘plus-iplus-off’.

Event: Enable numberp-is-integerp; name this event ‘numberp-is-integerp-off’.

Event: Enable difference-idifference; name this event ‘difference-idifference-off’.

Event: Let us define the theory integers to consist of the following events: ileq, idifference, integerp-fix-int, integerp-iplus, integerp-idifference, integerpineg, integerp-iabs, integerp-itimes, fix-int-remover, fix-int-fix-int, fix-int-iplus, fix-int-idifference, fix-int-ineg, fix-int-iabs, fix-int-itimes, ineg-iplus, ineg-ineg, ineg-fix-int, ineg-of-non-integerp, ineg-0, iplus-left-id, iplus-right-id, iplus-0-left, iplus-0-right, commutativity2-of-iplus, commutativity-of-iplus, associativity-of-iplus, iplus-cancellation-1, iplus-cancellation-2, iplus-ineg1, iplus-ineg2, iplusfix-int1, iplus-fix-int2, idifference-fix-int1, idifference-fix-int2, iplus-list, eval$- list-append, iplus-list-append, iplus-ineg3, iplus-ineg4, correctness-of-cancel-iplus, ilessp-fix-int-1, ilessp-fix-int-2, iplus-cancellation-1-for-ilessp, iplus-cancellation-2-for-ilessp, correctness-of-cancel-iplus-ilessp, itimes-0-left, itimes-0-right, itimesfix-int1, itimes-fix-int2, commutativity-of-itimes, itimes-distributes-over-iplus-proof, itimes-distributes-over-iplus, commutativity2-of-itimes, associativity-of-itimes, equal-itimes-0, equal-itimes-1, equal-itimes-minus-1, itimes-1-arg1, quotientremainder-uniqueness, division-theorem, itimes-ineg-1, itimes-ineg-2, itimes-cancellation-1, itimes-cancellation-2, itimes-cancellation-3, integerp-iquotient, integerp-iremainder, integerp-idiv, integerp-imod, integerp-iquo, integerp-irem, iquotient-fix-int1, iquotientfix-int2, iremainder-fix-int1, iremainder-fix-int2, idiv-fix-int1, idiv-fix-int2, imodfix-int1, imod-fix-int2, iquo-fix-int1, iquo-fix-int2, irem-fix-int1, irem-fix-int2, fix-int-iquotient, fix-int-iremainder, fix-int-idiv, fix-int-imod, fix-int-iquo, fixint-irem, itimes-list, itimes-list-append, member-append, equal-fix-int, subsetp, correctness-of-cancel-itimes, correctness-of-cancel-itimes-ilessp, ilessp-strict, eval$- list-cons, eval$-list-nlistp, eval$-litatom, eval$-quote, eval$-other, iplus-x-y-ineg-x, correctness-of-cancel-ineg, integerp-iplus-list, eval$-iplus-list-delete, eval$-iplus-list-bagdiff, itimes-tree-ineg, itimes-factors, itimes–1, equal-ineg-ineg, ilessp-ineg-ineg, fix-int-eval$-itimes-tree-rec, eval$-itimes-tree-ineg, ineg-eval$-itimes-tree-ineg, iplus-eval$-itimes-tree-ineg, itimes-eval$-itimes-tree-ineg, iplus-or-itimes-term, cancel-itimes-factors, cancel-itimes-factors-expanded, cancel-itimes-factors-expanded-cancel-itimes-factors, membership-of-0-implies-itimes-list-is-0, member-0-eval$-list, correctness-of-cancel-itimes-factors, cancel-itimes-ilessp-factors, bagintsingleton, ilessp-itimes-list-eval$-list-bagdiff, ilessp-itimes-list-eval$-list-bagdiff-corollary-1, member-0-itimes-factors-yields-0, member-0-itimes-factors-yields-0-ilessp-consequence-1, member-0-itimes-factors-yields-0-ilessp-consequence-2, ilesspitimes-list-eval$-list-bagdiff-corollary-2, correctness-of-cancel-itimes-ilessp-factors, disjoin-equalities-with-0, cancel-factors-0, some-eval$s-to-0, eval$-disjoin-equalities-with-0, some-eval$s-to-0-append, some-eval$s-to-0-eliminator, correctness-of-cancel-factors-0, conjoin-inequalities-with-0, cancel-factors-ilessp-0, split-out-ineg-terms, correctness-of-cancel-ineg-terms-from-equality, correctness-of-cancel-ineg-terms-from-inequality, iplus-constants, cancel-constants-equal, ilessp-add1, ilessp-add1-iplus, cancel-constants-ilessp.

Event: Disable eval$; name this event ‘eval$-on’.

Event: Let us define the theory math-theory to consist of the following events: cancel-constants-ilessp, cancel-constants-ilessp-lemma-2, cancel-constants-ilessp-lemma-1, ilessp-add1-iplus, ilessp-add1, cancel-constants-equal, cancel-constants-equal-lemma, iplus-constants, correctness-of-cancel-ineg-terms-from-inequality, cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded, *1*cancelineg-terms-from-inequality-expanded, cancel-ineg-terms-from-inequality, *1*cancelineg-terms-from-inequality, make-cancel-ineg-terms-inequality, *1*make-cancel-ineg-terms-inequality, correctness-of-cancel-ineg-terms-from-equality, iplus-list-eval$-car-split-out-ineg-terms, eval$-iplus-list-cdr-remove-inegs, eval$-iplus-list-car-remove-inegs, cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded, *1*cancel-ineg-terms-from-equality-expanded, cancel-ineg-terms-from-equality, *1*cancel-ineg-terms-from-equality, make-cancel-ineg-terms-equality, *1*makecancel-ineg-terms-equality, *1*iplus-or-ineg-term, *1*remove-inegs, split-out-ineg-terms, *1*split-out-ineg-terms, correctness-of-cancel-factors-ilessp-0, conjoin-inequalities-with-0-eliminator, cancel-factors-ilessp-0, *1*cancel-factors-ilessp-0, conjoin-inequalities-with-0, *1*conjoin-inequalities-with-0, correctness-of-cancel-factors-0, some-eval$s-to-0-eliminator, some-eval$s-to-0-append, eval$-disjoin-equalities-with-0, someeval$s-to-0, *1*some-eval$s-to-0, cancel-factors-0, *1*cancel-factors-0, disjoinequalities-with-0, *1*disjoin-equalities-with-0, correctness-of-cancel-itimes-ilessp-factors, equal-fix-int-to-ilessp, eval$-list-bagint-0-implies-equal-for-ilessp-lemma, eval$-list-bagint-0-for-ilessp, member-0-itimes-factors-yields-0-ilessp-consequence-2, member-0-itimes-factors-yields-0-ilessp-consequence-1, member-0-itimes-factors-yields-0, ilessp-itimes-list-eval$-list-bagdiff-corollary-2, ilessp-zero-implies-not-equal, ilessp-itimes-list-eval$-list-bagdiff-corollary-1, zero-ilessp-implies-not-equal, ilesspitimes-list-eval$-list-bagdiff, bagint-singleton, cancel-itimes-ilessp-factors, *1*cancelitimes-ilessp-factors, correctness-of-cancel-itimes-factors, member-0-eval$-list, membershipof-0-implies-itimes-list-is-0, cancel-itimes-factors-expanded-cancel-itimes-factors, *1*cancel-itimes-factors-expanded, cancel-itimes-factors, *1*cancel-itimes-factors, *1*iplus-or-itimes-term, itimes-eval$-itimes-tree-ineg, iplus-eval$-itimes-tree-ineg, ineg-eval$-itimes-tree-ineg, eval$-itimes-tree-ineg, fix-int-eval$-itimes-tree-rec, ilesspineg-ineg, equal-ineg-ineg, itimes–1, itimes-factors, *1*itimes-factors, *1*itimestree-ineg, ilessp-strict, ilessp-itimes-right-negative, ilessp-itimes-right-positive, cancel-itimes-ilessp, *1*cancel-itimes-ilessp, *1*make-cancel-itimes-inequality, *1*itimestree-no-fix-int, subsetp, *1*subsetp, equal-fix-int, member-append, itimes-list-append, cancel-itimes, *1*cancel-itimes, *1*make-cancel-itimes-equality, integerpitimes-list, itimes-list, *1*itimes-list, *1*itimes-tree, itimes-tree-rec, *1*itimestree-rec, itimes-fringe, *1*itimes-fringe, fix-int-irem, fix-int-iquo, fix-int-imod, fix-int-idiv, fix-int-iremainder, fix-int-iquotient, irem-fix-int2, irem-fix-int1, iquofix-int2, iquo-fix-int1, imod-fix-int2, imod-fix-int1, idiv-fix-int2, idiv-fix-int1, iremainder-fix-int2, iremainder-fix-int1, iquotient-fix-int2, iquotient-fix-int1, integerpirem, integerp-iquo, integerp-imod, integerp-idiv, integerp-iremainder, integerpiquotient, itimes-cancellation-3, itimes-cancellation-2, itimes-cancellation-1, itimesineg-2, itimes-ineg-1, iquo-irem-uniqueness, division-theorem-for-truncate-to-zero, division-theorem-for-truncate-to-zero-part3, division-theorem-for-truncate-to-zero-part2, division-theorem-for-truncate-to-zero-part1, idiv-imod-uniqueness, divisiontheorem-for-truncate-to-neginf, division-theorem-for-truncate-to-neginf-part3, divisiontheorem-for-truncate-to-neginf-part2, division-theorem-for-truncate-to-neginf-part1, iquotient-iremainder-uniqueness, division-theorem, division-theorem-part3, divisiontheorem-part2, division-theorem-part1, quotient-remainder-uniqueness, itimes-1-arg1, equal-itimes-minus-1, equal-itimes-1, equal-itimes-0, associativity-of-itimes, commutativity2-of-itimes, itimes-distributes-over-iplus, itimes-distributes-over-iplus-proof, commutativity-of-itimes, itimes-fix-int2, itimes-fix-int1, itimes-0-right, itimes-0-left, correctness-of-cancel-iplus-ilessp, cancel-iplus-ilessp, *1*canceliplus-ilessp, *1*iplus-tree-no-fix-int, iplus-cancellation-2-for-ilessp, iplus-cancellation-1-for-ilessp, cancel-iplus-ilessp-1, *1*cancel-iplus-ilessp-1, *1*make-cancel-iplus-inequality-1, ilessp-fix-int-2, ilessp-fix-int-1, correctness-of-cancel-iplus, iplusineg7, iplus-list-append, eval$-iplus-list-delete, *1*cancel-iplus, eval$-list-append, integerp-iplus-list, iplus-list, *1*iplus-list, *1*iplus-tree, iplus-tree-rec, *1*iplustree-rec, iplus-fringe, *1*iplus-fringe, correctness-of-cancel-ineg, iplus-x-y-ineg-x, iplus-ineg4, iplus-ineg3, eval$-cancel-ineg-aux-is-its-fn, eval$-cancel-ineg-aux-fn, *1*eval$-cancel-ineg-aux-fn, eval$-other, eval$-litatom, eval$-list-nlistp, eval$- list-cons, cancel-ineg, *1*cancel-ineg, cancel-ineg-aux, *1*cancel-ineg-aux, idifferencefix-int2, idifference-fix-int1, iplus-fix-int2, iplus-fix-int1, iplus-ineg2, iplus-ineg1, iplus-cancellation-2, iplus-cancellation-1, associativity-of-iplus, commutativityof-iplus, commutativity2-of-iplus, iplus-0-right, iplus-0-left, ineg-0, ineg-fix-int, ineg-ineg, ineg-iplus, fix-int-itimes, fix-int-iabs, fix-int-ineg, fix-int-idifference, fix-int-iplus, fix-int-fix-int, fix-int-remover, integerp-itimes, integerp-iabs, integerpineg, integerp-idifference, integerp-iplus, integerp-fix-int, *1*irem, *1*iquo, *1*imod, *1*idiv, *1*iremainder, *1*iquotient, *1*itimes, *1*iabs, idifference, *1*idifference, *1*ineg, *1*iplus, ileq, *1*ileq, *1*ilessp, izerop, *1*izerop, *1*fix-int, *1*integerp, gcd-idempotence, gcd-x-x, commutativity2-of-gcd, commutativity2of-gcd-zero-case, associativity-of-gcd, associativity-of-gcd-zero-case, common-divisor-divides-gcd, gcd-is-the-greatest, distributivity-of-times-over-gcd, distributivityof-times-over-gcd-proof, remainder-gcd, gcd-plus-instance, gcd-plus, gcd-plus-proof, gcd-plus-instance-temp, gcd-plus-instance-temp-proof, lessp-gcd, equalgcd-0, gcd-1, gcd-0, single-number-induction, *1*single-number-induction, commutativityof-gcd, log-exp, log-times-exp, log-times-exp-proof, log-times, log-times-proof, log-quotient-exp, log-quotient-times, log-quotient-times-proof, log-quotient, leqlog-log, double-log-induction, *1*double-log-induction, log-1, log-0, equal-log-0, exp-difference, equal-exp-1, equal-exp-0, exp-exp, exp-times, exp-0-arg2, exp-1-arg1, exp-0-arg1, exp-plus, exp-add1, exp-zero, quotient-exp, remainder-exp-exp, double-number-induction, *1*double-number-induction, remainder-exp, gcd, *1*gcd, log, *1*log, exp, *1*exp, correctness-of-cancel-quotient-times, cancelquotient-times, *1*cancel-quotient-times, lessp-quotient, quotient-x-x, quotient-1-arg1, quotient-1-arg1-casesplit, quotient-1-arg2, leq-quotient, quotient-quotient, quotient-plus-times-times-instance, quotient-plus-times-times, quotient-plus-times-times-proof, quotient-plus-fact, quotient-remainder-instance, quotient-remainder, quotient-remainder-times, quotient-difference3, quotient-difference2, quotientlessp-arg1, quotient-difference1, quotient-times-times-proof, quotient-times-instance, quotient-times, quotient-times-proof, quotient-times-instance-temp-proof, quotientplus, quotient-plus-proof, quotient-sub1, equal-quotient-0, quotient-add1, quotientzero, quotient-of-non-number, quotient-noop, transitivity-of-divides, remainderx-x, remainder-1-arg2, remainder-1-arg1, remainder-remainder, remainder-plus-times-times-instance, remainder-plus-times-times, remainder-plus-times-times-proof, remainder-plus-fact, remainder-difference2, double-remainder-induction, *1*double-remainder-induction, remainder-difference1, remainder-times2-instance, remainder-times2, remainder-times2-proof, remainder-times-times-proof, remaindertimes1-instance, remainder-times1-instance-proof, remainder-times1, remaindertimes1-proof, equal-remainder-plus-remainder-proof, equal-remainder-plus-0, equalremainder-plus-0-proof, remainder-plus, remainder-plus-proof, remainder-add1, remainder-quotient-elim, remainder-zero, remainder-of-non-number, remaindernoop, lessp-remainder, correctness-of-cancel-equal-times, cancel-equal-times, *1*cancelequal-times, correctness-of-cancel-lessp-times, cancel-lessp-times, *1*cancel-lessp-times, infer-equality-from-not-lessp, lessp-times-arg1, eval$-equal, and-not-zerop-tree, *1*and-not-zerop-tree, or-zerop-tree, *1*or-zerop-tree, times-fringe, *1*timesfringe, times-tree, *1*times-tree, lessp-1-times, lessp-plus-times2, lessp-plus-times1, lessp-plus-times-proof, lessp-times-cancellation-proof, lessp-times3, lessp-times3-proof2, lessp-times3-proof1, lessp-times2, lessp-times2-proof, lessp-times1, lessptimes1-proof, times-1-arg1, times-quotient, times-quotient-proof, times-distributes-over-difference, times-distributes-over-difference-proof, associativity-of-times, commutativity2of-times, times-distributes-over-plus, times-distributes-over-plus-proof, commutativityof-times, times-add1, times-zero, equal-sub1-0, equal-times-1, equal-times-0, correctnessof-cancel-lessp-plus, cancel-lessp-plus, *1*cancel-lessp-plus, difference-x-x, differencedifference-arg2, difference-difference-arg1, difference-sub1-arg2, difference-add1-arg2, difference-leq-arg1, difference-elim, correctness-of-cancel-difference-plus, cancel-difference-plus, *1*cancel-difference-plus, correctness-of-cancel-equal-plus, cancel-equal-plus, *1*cancel-equal-plus, eval$-quote, plus-tree, *1*plus-tree, plusfringe, *1*plus-fringe, diff-diff-arg2, diff-diff-arg1, difference-plus-plus-cancellation-proof, difference-plus-cancellation-proof, plus-difference-arg2, plus-difference-arg1, associativity-of-plus, plus-add1-arg2, plus-add1-arg1, plus-zero-arg2, commutativity2of-plus, commutativity-of-plus, equal-difference-0, equal-plus-0, member-bagint, occurrences-bagdiff, occurrences-bagint, subbagp-bagint2, subbagp-bagint1, subbagpcdr2, subbagp-cdr1, subbagp-delete, bagdiff-delete, member-bagdiff, occurrencesdelete, member-delete-implies-membership, member-delete, member-non-list, equaloccurrences-zero, delete-delete, delete-non-member, subbagp, *1*subbagp, occurrences, *1*occurrences, bagint, *1*bagint, bagdiff, *1*bagdiff, delete, *1*delete.

Event: Enable cancel-constants-ilessp; name this event ‘cancel-constants-ilessp-off’.

Event: Enable cancel-constants-ilessp-lemma-2; name this event ‘cancel-constants-ilessp-lemma-2-off’.

Event: Enable cancel-constants-ilessp-lemma-1; name this event ‘cancel-constants-ilessp-lemma-1-off’.

Event: Enable ilessp-add1-iplus; name this event ‘ilessp-add1-iplus-off’.

Event: Enable ilessp-add1; name this event ‘ilessp-add1-off’.

Event: Enable cancel-constants-equal; name this event ‘cancel-constants-equal-off’.

Event: Enable cancel-constants-equal-lemma; name this event ‘cancel-constants-equal-lemma-off’.

Event: Enable iplus-constants; name this event ‘iplus-constants-off’.

Event: Enable correctness-of-cancel-ineg-terms-from-inequality; name this event ‘correctness-of-cancel-ineg-terms-from-inequality-off’.

Event: Enable cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded; name this event ‘cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded-off’.

Event: Enable *1*cancel-ineg-terms-from-inequality-expanded; name this event ‘g*1*cancel-ineg-terms-from-inequality-expanded-off’.

Event: Enable cancel-ineg-terms-from-inequality; name this event ‘cancel-ineg-terms-from-inequality-off’.

Event: Enable *1*cancel-ineg-terms-from-inequality; name this event ‘g*1*cancelineg-terms-from-inequality-off’.

Event: Enable make-cancel-ineg-terms-inequality; name this event ‘make-cancel-ineg-terms-inequality-off’.

Event: Enable *1*make-cancel-ineg-terms-inequality; name this event ‘g*1*makecancel-ineg-terms-inequality-off’.

Event: Enable correctness-of-cancel-ineg-terms-from-equality; name this event ‘correctness-of-cancel-ineg-terms-from-equality-off’.

Event: Enable iplus-list-eval$-car-split-out-ineg-terms; name this event ‘ipluslist-eval$-car-split-out-ineg-terms-off’.

Event: Enable eval$-iplus-list-cdr-remove-inegs; name this event ‘eval$-iplus-list-cdr-remove-inegs-off’.

Event: Enable eval$-iplus-list-car-remove-inegs; name this event ‘eval$-iplus-list-car-remove-inegs-off’.

Event: Enable cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded; name this event ‘cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded-off’.

Event: Enable *1*cancel-ineg-terms-from-equality-expanded; name this event ‘g*1*cancel-ineg-terms-from-equality-expanded-off’.

Event: Enable cancel-ineg-terms-from-equality; name this event ‘cancel-ineg-terms-from-equality-off’.

Event: Enable *1*cancel-ineg-terms-from-equality; name this event ‘g*1*cancelineg-terms-from-equality-off’.

Event: Enable make-cancel-ineg-terms-equality; name this event ‘make-cancel-ineg-terms-equality-off’. Event: Enable *1*make-cancel-ineg-terms-equality; name this event ‘g*1*makecancel-ineg-terms-equality-off’. Event: Enable *1*iplus-or-ineg-term; name this event ‘g*1*iplus-or-ineg-term-off’. Event: Enable *1*remove-inegs; name this event ‘g*1*remove-inegs-off’. Event: Enable split-out-ineg-terms; name this event ‘split-out-ineg-terms-off’. Event: Enable *1*split-out-ineg-terms; name this event ‘g*1*split-out-ineg-terms-off’. Event: Enable correctness-of-cancel-factors-ilessp-0; name this event ‘correctnessof-cancel-factors-ilessp-0-off’. Event: Enable conjoin-inequalities-with-0-eliminator; name this event ‘conjoininequalities-with-0-eliminator-off’. Event: Enable cancel-factors-ilessp-0; name this event ‘cancel-factors-ilessp-0-off’. Event: Enable *1*cancel-factors-ilessp-0; name this event ‘g*1*cancel-factors-ilessp-0-off’. Event: Enable conjoin-inequalities-with-0; name this event ‘conjoin-inequalities-with-0-off’. Event: Enable *1*conjoin-inequalities-with-0; name this event ‘g*1*conjoininequalities-with-0-off’. Event: Enable correctness-of-cancel-factors-0; name this event ‘correctness-of-cancel-factors-0-off’. Event: Enable some-eval$s-to-0-eliminator; name this event ‘some-eval$s-to-0-eliminator-off’. Event: Enable some-eval$s-to-0-append; name this event ‘some-eval$s-to-0-append-off’. Event: Enable eval$-disjoin-equalities-with-0; name this event ‘eval$-disjoin-equalities-with-0-off’. Event: Enable some-eval$s-to-0; name this event ‘some-eval$s-to-0-off’. Event: Enable *1*some-eval$s-to-0; name this event ‘g*1*some-eval$s-to-0-off’. Event: Enable cancel-factors-0; name this event ‘cancel-factors-0-off’. Event: Enable *1*cancel-factors-0; name this event ‘g*1*cancel-factors-0-off’. Event: Enable disjoin-equalities-with-0; name this event ‘disjoin-equalities-with-0-off’. Event: Enable *1*disjoin-equalities-with-0; name this event ‘g*1*disjoin-equalities-with-0-off’. Event: Enable correctness-of-cancel-itimes-ilessp-factors; name this event ‘correctnessof-cancel-itimes-ilessp-factors-off’. Event: Enable equal-fix-int-to-ilessp; name this event ‘equal-fix-int-to-ilessp-off’. Event: Enable eval$-list-bagint-0-implies-equal-for-ilessp-lemma; name this event ‘eval$-list-bagint-0-implies-equal-for-ilessp-lemma-off’. Event: Enable eval$-list-bagint-0-for-ilessp; name this event ‘eval$-list-bagint-0-for-ilessp-off’. Event: Enable member-0-itimes-factors-yields-0-ilessp-consequence-2; name this event ‘member-0-itimes-factors-yields-0-ilessp-consequence-2-off’.

Event: Enable member-0-itimes-factors-yields-0-ilessp-consequence-1; name this event ‘member-0-itimes-factors-yields-0-ilessp-consequence-1-off’. Event: Enable member-0-itimes-factors-yields-0; name this event ‘member-0-itimes-factors-yields-0-off’. Event: Enable ilessp-itimes-list-eval$-list-bagdiff-corollary-2; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-corollary-2-off’. Event: Enable ilessp-zero-implies-not-equal; name this event ‘ilessp-zero-implies-not-equal-off’. Event: Enable ilessp-itimes-list-eval$-list-bagdiff-corollary-1; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-corollary-1-off’. Event: Enable zero-ilessp-implies-not-equal; name this event ‘zero-ilessp-implies-not-equal-off’. Event: Enable ilessp-itimes-list-eval$-list-bagdiff; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-off’. Event: Enable bagint-singleton; name this event ‘bagint-singleton-off’. Event: Enable cancel-itimes-ilessp-factors; name this event ‘cancel-itimes-ilessp-factors-off’. Event: Enable *1*cancel-itimes-ilessp-factors; name this event ‘g*1*cancelitimes-ilessp-factors-off’. Event: Enable correctness-of-cancel-itimes-factors; name this event ‘correctnessof-cancel-itimes-factors-off’. Event: Enable member-0-eval$-list; name this event ‘member-0-eval$-list-off’. Event: Enable membership-of-0-implies-itimes-list-is-0; name this event ‘membershipof-0-implies-itimes-list-is-0-off’.

Event: Enable cancel-itimes-factors-expanded-cancel-itimes-factors; name this event ‘cancel-itimes-factors-expanded-cancel-itimes-factors-off’. Event: Enable *1*cancel-itimes-factors-expanded; name this event ‘g*1*cancelitimes-factors-expanded-off’. Event: Enable cancel-itimes-factors; name this event ‘cancel-itimes-factors-off’. Event: Enable *1*cancel-itimes-factors; name this event ‘g*1*cancel-itimes-factors-off’. Event: Enable *1*iplus-or-itimes-term; name this event ‘g*1*iplus-or-itimes-term-off’. Event: Enable itimes-eval$-itimes-tree-ineg; name this event ‘itimes-eval$- itimes-tree-ineg-off’. Event: Enable iplus-eval$-itimes-tree-ineg; name this event ‘iplus-eval$-itimes-tree-ineg-off’. Event: Enable ineg-eval$-itimes-tree-ineg; name this event ‘ineg-eval$-itimes-tree-ineg-off’. Event: Enable eval$-itimes-tree-ineg; name this event ‘eval$-itimes-tree-ineg-off’. Event: Enable fix-int-eval$-itimes-tree-rec; name this event ‘fix-int-eval$-itimes-tree-rec-off’. Event: Enable ilessp-ineg-ineg; name this event ‘ilessp-ineg-ineg-off’. Event: Enable equal-ineg-ineg; name this event ‘equal-ineg-ineg-off’. Event: Enable itimes–1; name this event ‘itimes–1-off’. Event: Enable itimes-factors; name this event ‘itimes-factors-off’.

Event: Enable *1*itimes-factors; name this event ‘g*1*itimes-factors-off’. Event: Enable *1*itimes-tree-ineg; name this event ‘g*1*itimes-tree-ineg-off’. Event: Enable ilessp-strict; name this event ‘ilessp-strict-off’. Event: Enable ilessp-itimes-right-negative; name this event ‘ilessp-itimes-right-negative-off’. Event: Enable ilessp-itimes-right-positive; name this event ‘ilessp-itimes-right-positive-off’. Event: Enable cancel-itimes-ilessp; name this event ‘cancel-itimes-ilessp-off’. Event: Enable *1*cancel-itimes-ilessp; name this event ‘g*1*cancel-itimes-ilessp-off’. Event: Enable *1*make-cancel-itimes-inequality; name this event ‘g*1*makecancel-itimes-inequality-off’. Event: Enable *1*itimes-tree-no-fix-int; name this event ‘g*1*itimes-tree-no-fix-int-off’. Event: Enable subsetp; name this event ‘subsetp-off’. Event: Enable *1*subsetp; name this event ‘g*1*subsetp-off’. Event: Enable equal-fix-int; name this event ‘equal-fix-int-off’. Event: Enable member-append; name this event ‘member-append-off’. Event: Enable itimes-list-append; name this event ‘itimes-list-append-off’. Event: Enable cancel-itimes; name this event ‘cancel-itimes-off’. Event: Enable *1*cancel-itimes; name this event ‘g*1*cancel-itimes-off’.

Event: Enable *1*make-cancel-itimes-equality; name this event ‘g*1*makecancel-itimes-equality-off’. Event: Enable integerp-itimes-list; name this event ‘integerp-itimes-list-off’. Event: Enable itimes-list; name this event ‘itimes-list-off’. Event: Enable *1*itimes-list; name this event ‘g*1*itimes-list-off’. Event: Enable *1*itimes-tree; name this event ‘g*1*itimes-tree-off’. Event: Enable itimes-tree-rec; name this event ‘itimes-tree-rec-off’. Event: Enable *1*itimes-tree-rec; name this event ‘g*1*itimes-tree-rec-off’. Event: Enable itimes-fringe; name this event ‘itimes-fringe-off’. Event: Enable *1*itimes-fringe; name this event ‘g*1*itimes-fringe-off’. Event: Enable fix-int-irem; name this event ‘fix-int-irem-off’. Event: Enable fix-int-iquo; name this event ‘fix-int-iquo-off’. Event: Enable fix-int-imod; name this event ‘fix-int-imod-off’. Event: Enable fix-int-idiv; name this event ‘fix-int-idiv-off’. Event: Enable fix-int-iremainder; name this event ‘fix-int-iremainder-off’. Event: Enable fix-int-iquotient; name this event ‘fix-int-iquotient-off’. Event: Enable irem-fix-int2; name this event ‘irem-fix-int2-off’. Event: Enable irem-fix-int1; name this event ‘irem-fix-int1-off’.

Event: Enable iquo-fix-int2; name this event ‘iquo-fix-int2-off’. Event: Enable iquo-fix-int1; name this event ‘iquo-fix-int1-off’. Event: Enable imod-fix-int2; name this event ‘imod-fix-int2-off’. Event: Enable imod-fix-int1; name this event ‘imod-fix-int1-off’. Event: Enable idiv-fix-int2; name this event ‘idiv-fix-int2-off’. Event: Enable idiv-fix-int1; name this event ‘idiv-fix-int1-off’. Event: Enable iremainder-fix-int2; name this event ‘iremainder-fix-int2-off’. Event: Enable iremainder-fix-int1; name this event ‘iremainder-fix-int1-off’. Event: Enable iquotient-fix-int2; name this event ‘iquotient-fix-int2-off’. Event: Enable iquotient-fix-int1; name this event ‘iquotient-fix-int1-off’. Event: Enable integerp-irem; name this event ‘integerp-irem-off’. Event: Enable integerp-iquo; name this event ‘integerp-iquo-off’. Event: Enable integerp-imod; name this event ‘integerp-imod-off’. Event: Enable integerp-idiv; name this event ‘integerp-idiv-off’. Event: Enable integerp-iremainder; name this event ‘integerp-iremainder-off’. Event: Enable integerp-iquotient; name this event ‘integerp-iquotient-off’. Event: Enable itimes-cancellation-3; name this event ‘itimes-cancellation-3-off’.

Event: Enable itimes-cancellation-2; name this event ‘itimes-cancellation-2-off’. Event: Enable itimes-cancellation-1; name this event ‘itimes-cancellation-1-off’. Event: Enable itimes-ineg-2; name this event ‘itimes-ineg-2-off’. Event: Enable itimes-ineg-1; name this event ‘itimes-ineg-1-off’. Event: Enable iquo-irem-uniqueness; name this event ‘iquo-irem-uniqueness-off’. Event: Enable division-theorem-for-truncate-to-zero; name this event ‘divisiontheorem-for-truncate-to-zero-off’. Event: Enable division-theorem-for-truncate-to-zero-part3; name this event ‘division-theorem-for-truncate-to-zero-part3-off’. Event: Enable division-theorem-for-truncate-to-zero-part2; name this event ‘division-theorem-for-truncate-to-zero-part2-off’. Event: Enable division-theorem-for-truncate-to-zero-part1; name this event ‘division-theorem-for-truncate-to-zero-part1-off’. Event: Enable idiv-imod-uniqueness; name this event ‘idiv-imod-uniqueness-off’. Event: Enable division-theorem-for-truncate-to-neginf; name this event ‘divisiontheorem-for-truncate-to-neginf-off’. Event: Enable division-theorem-for-truncate-to-neginf-part3; name this event ‘division-theorem-for-truncate-to-neginf-part3-off’. Event: Enable division-theorem-for-truncate-to-neginf-part2; name this event ‘division-theorem-for-truncate-to-neginf-part2-off’.

Event: Enable division-theorem-for-truncate-to-neginf-part1; name this event ‘division-theorem-for-truncate-to-neginf-part1-off’. Event: Enable iquotient-iremainder-uniqueness; name this event ‘iquotientiremainder-uniqueness-off’. Event: Enable division-theorem; name this event ‘division-theorem-off’. Event: Enable division-theorem-part3; name this event ‘division-theorem-part3-off’. Event: Enable division-theorem-part2; name this event ‘division-theorem-part2-off’. Event: Enable division-theorem-part1; name this event ‘division-theorem-part1-off’. Event: Enable quotient-remainder-uniqueness; name this event ‘quotient-remainder-uniqueness-off’. Event: Enable itimes-1-arg1; name this event ‘itimes-1-arg1-off’. Event: Enable equal-itimes-minus-1; name this event ‘equal-itimes-minus-1-off’. Event: Enable equal-itimes-1; name this event ‘equal-itimes-1-off’. Event: Enable equal-itimes-0; name this event ‘equal-itimes-0-off’. Event: Enable associativity-of-itimes; name this event ‘associativity-of-itimes-off’. Event: Enable commutativity2-of-itimes; name this event ‘commutativity2-of-itimes-off’. Event: Enable itimes-distributes-over-iplus; name this event ‘itimes-distributes-over-iplus-off’.

Event: Enable itimes-distributes-over-iplus-proof; name this event ‘itimesdistributes-over-iplus-proof-off’. Event: Enable commutativity-of-itimes; name this event ‘commutativity-of-itimes-off’. Event: Enable itimes-fix-int2; name this event ‘itimes-fix-int2-off’. Event: Enable itimes-fix-int1; name this event ‘itimes-fix-int1-off’. Event: Enable itimes-0-right; name this event ‘itimes-0-right-off’. Event: Enable itimes-0-left; name this event ‘itimes-0-left-off’. Event: Enable correctness-of-cancel-iplus-ilessp; name this event ‘correctnessof-cancel-iplus-ilessp-off’. Event: Enable cancel-iplus-ilessp; name this event ‘cancel-iplus-ilessp-off’. Event: Enable *1*cancel-iplus-ilessp; name this event ‘g*1*cancel-iplus-ilessp-off’. Event: Enable *1*iplus-tree-no-fix-int; name this event ‘g*1*iplus-tree-no-fix-int-off’. Event: Enable iplus-cancellation-2-for-ilessp; name this event ‘iplus-cancellation-2-for-ilessp-off’. Event: Enable iplus-cancellation-1-for-ilessp; name this event ‘iplus-cancellation-1-for-ilessp-off’. Event: Enable cancel-iplus-ilessp-1; name this event ‘cancel-iplus-ilessp-1-off’. Event: Enable *1*cancel-iplus-ilessp-1; name this event ‘g*1*cancel-iplus-ilessp-1-off’. Event: Enable *1*make-cancel-iplus-inequality-1; name this event ‘g*1*makecancel-iplus-inequality-1-off’. Event: Enable ilessp-fix-int-2; name this event ‘ilessp-fix-int-2-off’. Event: Enable ilessp-fix-int-1; name this event ‘ilessp-fix-int-1-off’. Event: Enable correctness-of-cancel-iplus; name this event ‘correctness-of-cancel-iplus-off’. Event: Enable iplus-ineg7; name this event ‘iplus-ineg7-off’. Event: Enable iplus-list-append; name this event ‘iplus-list-append-off’. Event: Enable eval$-iplus-list-delete; name this event ‘eval$-iplus-list-delete-off’. Event: Enable *1*cancel-iplus; name this event ‘g*1*cancel-iplus-off’. Event: Enable eval$-list-append; name this event ‘eval$-list-append-off’. Event: Enable integerp-iplus-list; name this event ‘integerp-iplus-list-off’. Event: Enable iplus-list; name this event ‘iplus-list-off’. Event: Enable *1*iplus-list; name this event ‘g*1*iplus-list-off’. Event: Enable *1*iplus-tree; name this event ‘g*1*iplus-tree-off’. Event: Enable iplus-tree-rec; name this event ‘iplus-tree-rec-off’. Event: Enable *1*iplus-tree-rec; name this event ‘g*1*iplus-tree-rec-off’. Event: Enable iplus-fringe; name this event ‘iplus-fringe-off’. Event: Enable *1*iplus-fringe; name this event ‘g*1*iplus-fringe-off’.

Event: Enable correctness-of-cancel-ineg; name this event ‘correctness-of-cancel-ineg-off’. Event: Enable iplus-x-y-ineg-x; name this event ‘iplus-x-y-ineg-x-off’. Event: Enable iplus-ineg4; name this event ‘iplus-ineg4-off’. Event: Enable iplus-ineg3; name this event ‘iplus-ineg3-off’. Event: Enable eval$-cancel-ineg-aux-is-its-fn; name this event ‘eval$-cancel-ineg-aux-is-its-fn-off’. Event: Enable eval$-cancel-ineg-aux-fn; name this event ‘eval$-cancel-ineg-aux-fn-off’. Event: Enable *1*eval$-cancel-ineg-aux-fn; name this event ‘g*1*eval$-cancel-ineg-aux-fn-off’. Event: Enable eval$-other; name this event ‘eval$-other-off’. Event: Enable eval$-litatom; name this event ‘eval$-litatom-off’. Event: Enable eval$-list-nlistp; name this event ‘eval$-list-nlistp-off’. Event: Enable eval$-list-cons; name this event ‘eval$-list-cons-off’. Event: Enable cancel-ineg; name this event ‘cancel-ineg-off’. Event: Enable *1*cancel-ineg; name this event ‘g*1*cancel-ineg-off’. Event: Enable cancel-ineg-aux; name this event ‘cancel-ineg-aux-off’. Event: Enable *1*cancel-ineg-aux; name this event ‘g*1*cancel-ineg-aux-off’. Event: Enable idifference-fix-int2; name this event ‘idifference-fix-int2-off’.

Event: Enable idifference-fix-int1; name this event ‘idifference-fix-int1-off’. Event: Enable iplus-fix-int2; name this event ‘iplus-fix-int2-off’. Event: Enable iplus-fix-int1; name this event ‘iplus-fix-int1-off’. Event: Enable iplus-ineg2; name this event ‘iplus-ineg2-off’. Event: Enable iplus-ineg1; name this event ‘iplus-ineg1-off’. Event: Enable iplus-cancellation-2; name this event ‘iplus-cancellation-2-off’. Event: Enable iplus-cancellation-1; name this event ‘iplus-cancellation-1-off’. Event: Enable associativity-of-iplus; name this event ‘associativity-of-iplus-off’. Event: Enable commutativity-of-iplus; name this event ‘commutativity-of-iplus-off’. Event: Enable commutativity2-of-iplus; name this event ‘commutativity2-of-iplus-off’. Event: Enable iplus-0-right; name this event ‘iplus-0-right-off’. Event: Enable iplus-0-left; name this event ‘iplus-0-left-off’. Event: Enable ineg-0; name this event ‘ineg-0-off’. Event: Enable ineg-fix-int; name this event ‘ineg-fix-int-off’. Event: Enable ineg-ineg; name this event ‘ineg-ineg-off’. Event: Enable ineg-iplus; name this event ‘ineg-iplus-off’. Event: Enable fix-int-itimes; name this event ‘fix-int-itimes-off’.

Event: Enable fix-int-iabs; name this event ‘fix-int-iabs-off’. Event: Enable fix-int-ineg; name this event ‘fix-int-ineg-off’. Event: Enable fix-int-idifference; name this event ‘fix-int-idifference-off’. Event: Enable fix-int-iplus; name this event ‘fix-int-iplus-off’. Event: Enable fix-int-fix-int; name this event ‘fix-int-fix-int-off’. Event: Enable fix-int-remover; name this event ‘fix-int-remover-off’. Event: Enable integerp-itimes; name this event ‘integerp-itimes-off’. Event: Enable integerp-iabs; name this event ‘integerp-iabs-off’. Event: Enable integerp-ineg; name this event ‘integerp-ineg-off’. Event: Enable integerp-idifference; name this event ‘integerp-idifference-off’. Event: Enable integerp-iplus; name this event ‘integerp-iplus-off’. Event: Enable integerp-fix-int; name this event ‘integerp-fix-int-off’. Event: Enable *1*irem; name this event ‘g*1*irem-off’. Event: Enable *1*iquo; name this event ‘g*1*iquo-off’. Event: Enable *1*imod; name this event ‘g*1*imod-off’. Event: Enable *1*idiv; name this event ‘g*1*idiv-off’. Event: Enable *1*iremainder; name this event ‘g*1*iremainder-off’. Event: Enable *1*iquotient; name this event ‘g*1*iquotient-off’.

Event: Enable *1*itimes; name this event ‘g*1*itimes-off’. Event: Enable *1*iabs; name this event ‘g*1*iabs-off’. Event: Enable idifference; name this event ‘idifference-off’. Event: Enable *1*idifference; name this event ‘g*1*idifference-off’. Event: Enable *1*ineg; name this event ‘g*1*ineg-off’. Event: Enable *1*iplus; name this event ‘g*1*iplus-off’. Event: Enable ileq; name this event ‘ileq-off’. Event: Enable *1*ileq; name this event ‘g*1*ileq-off’. Event: Enable *1*ilessp; name this event ‘g*1*ilessp-off’. Event: Enable izerop; name this event ‘izerop-off’. Event: Enable *1*izerop; name this event ‘g*1*izerop-off’. Event: Enable *1*fix-int; name this event ‘g*1*fix-int-off’. Event: Enable *1*integerp; name this event ‘g*1*integerp-off’. Event: Enable gcd-idempotence; name this event ‘gcd-idempotence-off’. Event: Enable gcd-x-x; name this event ‘gcd-x-x-off’. Event: Enable commutativity2-of-gcd; name this event ‘commutativity2-of-gcd-off’. Event: Enable commutativity2-of-gcd-zero-case; name this event ‘commutativity2of-gcd-zero-case-off’.

Event: Enable associativity-of-gcd; name this event ‘associativity-of-gcd-off’. Event: Enable associativity-of-gcd-zero-case; name this event ‘associativity-of-gcd-zero-case-off’. Event: Enable common-divisor-divides-gcd; name this event ‘common-divisor-divides-gcd-off’. Event: Enable gcd-is-the-greatest; name this event ‘gcd-is-the-greatest-off’. Event: Enable distributivity-of-times-over-gcd; name this event ‘distributivityof-times-over-gcd-off’. Event: Enable distributivity-of-times-over-gcd-proof; name this event ‘distributivityof-times-over-gcd-proof-off’. Event: Enable remainder-gcd; name this event ‘remainder-gcd-off’. Event: Enable gcd-plus-instance; name this event ‘gcd-plus-instance-off’. Event: Enable gcd-plus; name this event ‘gcd-plus-off’. Event: Enable gcd-plus-proof; name this event ‘gcd-plus-proof-off’. Event: Enable gcd-plus-instance-temp; name this event ‘gcd-plus-instance-temp-off’. Event: Enable gcd-plus-instance-temp-proof; name this event ‘gcd-plus-instance-temp-proof-off’. Event: Enable lessp-gcd; name this event ‘lessp-gcd-off’. Event: Enable equal-gcd-0; name this event ‘equal-gcd-0-off’. Event: Enable gcd-1; name this event ‘gcd-1-off’.

Event: Enable gcd-0; name this event ‘gcd-0-off’. Event: Enable single-number-induction; name this event ‘single-number-induction-off’. Event: Enable *1*single-number-induction; name this event ‘g*1*single-number-induction-off’. Event: Enable commutativity-of-gcd; name this event ‘commutativity-of-gcd-off’. Event: Enable log-exp; name this event ‘log-exp-off’. Event: Enable log-times-exp; name this event ‘log-times-exp-off’. Event: Enable log-times-exp-proof; name this event ‘log-times-exp-proof-off’. Event: Enable log-times; name this event ‘log-times-off’. Event: Enable log-times-proof; name this event ‘log-times-proof-off’. Event: Enable log-quotient-exp; name this event ‘log-quotient-exp-off’. Event: Enable log-quotient-times; name this event ‘log-quotient-times-off’. Event: Enable log-quotient-times-proof; name this event ‘log-quotient-times-proof-off’. Event: Enable log-quotient; name this event ‘log-quotient-off’. Event: Enable leq-log-log; name this event ‘leq-log-log-off’. Event: Enable double-log-induction; name this event ‘double-log-induction-off’. Event: Enable *1*double-log-induction; name this event ‘g*1*double-log-induction-off’. Event: Enable log-1; name this event ‘log-1-off’. Event: Enable log-0; name this event ‘log-0-off’. Event: Enable equal-log-0; name this event ‘equal-log-0-off’. Event: Enable exp-difference; name this event ‘exp-difference-off’. Event: Enable equal-exp-1; name this event ‘equal-exp-1-off’. Event: Enable equal-exp-0; name this event ‘equal-exp-0-off’. Event: Enable exp-exp; name this event ‘exp-exp-off’. Event: Enable exp-times; name this event ‘exp-times-off’. Event: Enable exp-0-arg2; name this event ‘exp-0-arg2-off’. Event: Enable exp-1-arg1; name this event ‘exp-1-arg1-off’. Event: Enable exp-0-arg1; name this event ‘exp-0-arg1-off’. Event: Enable exp-plus; name this event ‘exp-plus-off’. Event: Enable exp-add1; name this event ‘exp-add1-off’. Event: Enable exp-zero; name this event ‘exp-zero-off’. Event: Enable quotient-exp; name this event ‘quotient-exp-off’. Event: Enable remainder-exp-exp; name this event ‘remainder-exp-exp-off’. Event: Enable double-number-induction; name this event ‘double-number-induction-off’. Event: Enable *1*double-number-induction; name this event ‘g*1*doublenumber-induction-off’. Event: Enable remainder-exp; name this event ‘remainder-exp-off’. Event: Enable gcd; name this event ‘gcd-off’. Event: Enable *1*gcd; name this event ‘g*1*gcd-off’. Event: Enable log; name this event ‘log-off’. Event: Enable *1*log; name this event ‘g*1*log-off’. Event: Enable exp; name this event ‘exp-off’. Event: Enable *1*exp; name this event ‘g*1*exp-off’. Event: Enable correctness-of-cancel-quotient-times; name this event ‘correctnessof-cancel-quotient-times-off’. Event: Enable cancel-quotient-times; name this event ‘cancel-quotient-times-off’. Event: Enable *1*cancel-quotient-times; name this event ‘g*1*cancel-quotient-times-off’. Event: Enable lessp-quotient; name this event ‘lessp-quotient-off’. Event: Enable quotient-x-x; name this event ‘quotient-x-x-off’. Event: Enable quotient-1-arg1; name this event ‘quotient-1-arg1-off’. Event: Enable quotient-1-arg1-casesplit; name this event ‘quotient-1-arg1-casesplit-off’.

Event: Enable quotient-1-arg2; name this event ‘quotient-1-arg2-off’. Event: Enable leq-quotient; name this event ‘leq-quotient-off’. Event: Enable quotient-quotient; name this event ‘quotient-quotient-off’. Event: Enable quotient-plus-times-times-instance; name this event ‘quotientplus-times-times-instance-off’. Event: Enable quotient-plus-times-times; name this event ‘quotient-plus-times-times-off’. Event: Enable quotient-plus-times-times-proof; name this event ‘quotientplus-times-times-proof-off’. Event: Enable quotient-plus-fact; name this event ‘quotient-plus-fact-off’. Event: Enable quotient-remainder-instance; name this event ‘quotient-remainder-instance-off’. Event: Enable quotient-remainder; name this event ‘quotient-remainder-off’. Event: Enable quotient-remainder-times; name this event ‘quotient-remainder-times-off’. Event: Enable quotient-difference3; name this event ‘quotient-difference3-off’. Event: Enable quotient-difference2; name this event ‘quotient-difference2-off’. Event: Enable quotient-lessp-arg1; name this event ‘quotient-lessp-arg1-off’. Event: Enable quotient-difference1; name this event ‘quotient-difference1-off’. Event: Enable quotient-times-times-proof; name this event ‘quotient-times-times-proof-off’.

Event: Enable quotient-times-instance; name this event ‘quotient-times-instance-off’. Event: Enable quotient-times; name this event ‘quotient-times-off’. Event: Enable quotient-times-proof; name this event ‘quotient-times-proof-off’. Event: Enable quotient-times-instance-temp-proof; name this event ‘quotienttimes-instance-temp-proof-off’. Event: Enable quotient-plus; name this event ‘quotient-plus-off’. Event: Enable quotient-plus-proof; name this event ‘quotient-plus-proof-off’. Event: Enable quotient-sub1; name this event ‘quotient-sub1-off’. Event: Enable equal-quotient-0; name this event ‘equal-quotient-0-off’. Event: Enable quotient-add1; name this event ‘quotient-add1-off’. Event: Enable quotient-zero; name this event ‘quotient-zero-off’. Event: Enable quotient-of-non-number; name this event ‘quotient-of-non-number-off’. Event: Enable quotient-noop; name this event ‘quotient-noop-off’. Event: Enable transitivity-of-divides; name this event ‘transitivity-of-divides-off’. Event: Enable remainder-x-x; name this event ‘remainder-x-x-off’. Event: Enable remainder-1-arg2; name this event ‘remainder-1-arg2-off’. Event: Enable remainder-1-arg1; name this event ‘remainder-1-arg1-off’.

Event: Enable remainder-remainder; name this event ‘remainder-remainder-off’. Event: Enable remainder-plus-times-times-instance; name this event ‘remainderplus-times-times-instance-off’. Event: Enable remainder-plus-times-times; name this event ‘remainder-plus-times-times-off’. Event: Enable remainder-plus-times-times-proof; name this event ‘remainderplus-times-times-proof-off’. Event: Enable remainder-plus-fact; name this event ‘remainder-plus-fact-off’. Event: Enable remainder-difference2; name this event ‘remainder-difference2-off’. Event: Enable double-remainder-induction; name this event ‘double-remainder-induction-off’. Event: Enable *1*double-remainder-induction; name this event ‘g*1*doubleremainder-induction-off’. Event: Enable remainder-difference1; name this event ‘remainder-difference1-off’. Event: Enable remainder-times2-instance; name this event ‘remainder-times2-instance-off’. Event: Enable remainder-times2; name this event ‘remainder-times2-off’. Event: Enable remainder-times2-proof; name this event ‘remainder-times2-proof-off’. Event: Enable remainder-times-times-proof; name this event ‘remainder-times-times-proof-off’.

Event: Enable remainder-times1-instance; name this event ‘remainder-times1-instance-off’. Event: Enable remainder-times1-instance-proof; name this event ‘remaindertimes1-instance-proof-off’. Event: Enable remainder-times1; name this event ‘remainder-times1-off’. Event: Enable remainder-times1-proof; name this event ‘remainder-times1-proof-off’. Event: Enable equal-remainder-plus-remainder-proof; name this event ‘equalremainder-plus-remainder-proof-off’. Event: Enable equal-remainder-plus-0; name this event ‘equal-remainder-plus-0-off’. Event: Enable equal-remainder-plus-0-proof; name this event ‘equal-remainder-plus-0-proof-off’. Event: Enable remainder-plus; name this event ‘remainder-plus-off’. Event: Enable remainder-plus-proof; name this event ‘remainder-plus-proof-off’. Event: Enable remainder-add1; name this event ‘remainder-add1-off’. Event: Enable remainder-quotient-elim; name this event ‘remainder-quotient-elim-off’. Event: Enable remainder-zero; name this event ‘remainder-zero-off’. Event: Enable remainder-of-non-number; name this event ‘remainder-of-non-number-off’. Event: Enable remainder-noop; name this event ‘remainder-noop-off’.

Event: Enable lessp-remainder; name this event ‘lessp-remainder-off’. Event: Enable correctness-of-cancel-equal-times; name this event ‘correctnessof-cancel-equal-times-off’. Event: Enable cancel-equal-times; name this event ‘cancel-equal-times-off’. Event: Enable *1*cancel-equal-times; name this event ‘g*1*cancel-equal-times-off’. Event: Enable correctness-of-cancel-lessp-times; name this event ‘correctnessof-cancel-lessp-times-off’. Event: Enable cancel-lessp-times; name this event ‘cancel-lessp-times-off’. Event: Enable *1*cancel-lessp-times; name this event ‘g*1*cancel-lessp-times-off’. Event: Enable infer-equality-from-not-lessp; name this event ‘infer-equality-from-not-lessp-off’. Event: Enable lessp-times-arg1; name this event ‘lessp-times-arg1-off’. Event: Enable eval$-equal; name this event ‘eval$-equal-off1’. Event: Enable and-not-zerop-tree; name this event ‘and-not-zerop-tree-off’. Event: Enable *1*and-not-zerop-tree; name this event ‘g*1*and-not-zerop-tree-off’. Event: Enable or-zerop-tree; name this event ‘or-zerop-tree-off’. Event: Enable *1*or-zerop-tree; name this event ‘g*1*or-zerop-tree-off’. Event: Enable times-fringe; name this event ‘times-fringe-off’.

Event: Enable *1*times-fringe; name this event ‘g*1*times-fringe-off’. Event: Enable times-tree; name this event ‘times-tree-off’. Event: Enable *1*times-tree; name this event ‘g*1*times-tree-off’. Event: Enable lessp-1-times; name this event ‘lessp-1-times-off’. Event: Enable lessp-plus-times2; name this event ‘lessp-plus-times2-off’. Event: Enable lessp-plus-times1; name this event ‘lessp-plus-times1-off’. Event: Enable lessp-plus-times-proof; name this event ‘lessp-plus-times-proof-off’. Event: Enable lessp-times-cancellation-proof; name this event ‘lessp-times-cancellation-proof-off’. Event: Enable lessp-times3; name this event ‘lessp-times3-off’. Event: Enable lessp-times3-proof2; name this event ‘lessp-times3-proof2-off’. Event: Enable lessp-times3-proof1; name this event ‘lessp-times3-proof1-off’. Event: Enable lessp-times2; name this event ‘lessp-times2-off’. Event: Enable lessp-times2-proof; name this event ‘lessp-times2-proof-off’. Event: Enable lessp-times1; name this event ‘lessp-times1-off’. Event: Enable lessp-times1-proof; name this event ‘lessp-times1-proof-off’. Event: Enable times-1-arg1; name this event ‘times-1-arg1-off’. Event: Enable times-quotient; name this event ‘times-quotient-off’.

Event: Enable times-quotient-proof; name this event ‘times-quotient-proof-off’. Event: Enable times-distributes-over-difference; name this event ‘times-distributes-over-difference-off’. Event: Enable times-distributes-over-difference-proof; name this event ‘timesdistributes-over-difference-proof-off’. Event: Enable associativity-of-times; name this event ‘associativity-of-times-off’. Event: Enable commutativity2-of-times; name this event ‘commutativity2-of-times-off’. Event: Enable times-distributes-over-plus; name this event ‘times-distributes-over-plus-off’. Event: Enable times-distributes-over-plus-proof; name this event ‘times-distributes-over-plus-proof-off’. Event: Enable commutativity-of-times; name this event ‘commutativity-of-times-off’. Event: Enable times-add1; name this event ‘times-add1-off’. Event: Enable times-zero; name this event ‘times-zero-off’. Event: Enable equal-sub1-0; name this event ‘equal-sub1-0-off’. Event: Enable equal-times-1; name this event ‘equal-times-1-off’. Event: Enable equal-times-0; name this event ‘equal-times-0-off’. Event: Enable correctness-of-cancel-lessp-plus; name this event ‘correctnessof-cancel-lessp-plus-off’.

Event: Enable cancel-lessp-plus; name this event ‘cancel-lessp-plus-off’. Event: Enable *1*cancel-lessp-plus; name this event ‘g*1*cancel-lessp-plus-off’. Event: Enable difference-x-x; name this event ‘difference-x-x-off’. Event: Enable difference-difference-arg2; name this event ‘difference-difference-arg2-off’. Event: Enable difference-difference-arg1; name this event ‘difference-difference-arg1-off’. Event: Enable difference-sub1-arg2; name this event ‘difference-sub1-arg2-off’. Event: Enable difference-add1-arg2; name this event ‘difference-add1-arg2-off’. Event: Enable difference-leq-arg1; name this event ‘difference-leq-arg1-off’. Event: Enable difference-elim; name this event ‘difference-elim-off’. Event: Enable correctness-of-cancel-difference-plus; name this event ‘correctnessof-cancel-difference-plus-off’. Event: Enable cancel-difference-plus; name this event ‘cancel-difference-plus-off’. Event: Enable *1*cancel-difference-plus; name this event ‘g*1*cancel-difference-plus-off’. Event: Enable correctness-of-cancel-equal-plus; name this event ‘correctnessof-cancel-equal-plus-off’. Event: Enable cancel-equal-plus; name this event ‘cancel-equal-plus-off’. Event: Enable *1*cancel-equal-plus; name this event ‘g*1*cancel-equal-plus-off’.

Event: Enable eval$-quote; name this event ‘eval$-quote-off1’. Event: Enable plus-tree; name this event ‘plus-tree-off’. Event: Enable *1*plus-tree; name this event ‘g*1*plus-tree-off’. Event: Enable plus-fringe; name this event ‘plus-fringe-off’. Event: Enable *1*plus-fringe; name this event ‘g*1*plus-fringe-off’. Event: Enable diff-diff-arg2; name this event ‘diff-diff-arg2-off’. Event: Enable diff-diff-arg1; name this event ‘diff-diff-arg1-off’. Event: Enable difference-plus-plus-cancellation-proof; name this event ‘differenceplus-plus-cancellation-proof-off’. Event: Enable difference-plus-cancellation-proof; name this event ‘differenceplus-cancellation-proof-off’. Event: Enable plus-difference-arg2; name this event ‘plus-difference-arg2-off’. Event: Enable plus-difference-arg1; name this event ‘plus-difference-arg1-off’. Event: Enable associativity-of-plus; name this event ‘associativity-of-plus-off’. Event: Enable plus-add1-arg2; name this event ‘plus-add1-arg2-off’. Event: Enable plus-add1-arg1; name this event ‘plus-add1-arg1-off’. Event: Enable plus-zero-arg2; name this event ‘plus-zero-arg2-off’. Event: Enable commutativity2-of-plus; name this event ‘commutativity2-of-plus-off’. Event: Enable commutativity-of-plus; name this event ‘commutativity-of-plus-off’. Event: Enable equal-difference-0; name this event ‘equal-difference-0-off’. Event: Enable equal-plus-0; name this event ‘equal-plus-0-off’. Event: Enable member-bagint; name this event ‘member-bagint-off’. Event: Enable occurrences-bagdiff; name this event ‘occurrences-bagdiff-off’. Event: Enable occurrences-bagint; name this event ‘occurrences-bagint-off’. Event: Enable subbagp-bagint2; name this event ‘subbagp-bagint2-off’. Event: Enable subbagp-bagint1; name this event ‘subbagp-bagint1-off’. Event: Enable subbagp-cdr2; name this event ‘subbagp-cdr2-off’. Event: Enable subbagp-cdr1; name this event ‘subbagp-cdr1-off’. Event: Enable subbagp-delete; name this event ‘subbagp-delete-off’. Event: Enable bagdiff-delete; name this event ‘bagdiff-delete-off’. Event: Enable member-bagdiff; name this event ‘member-bagdiff-off’. Event: Enable occurrences-delete; name this event ‘occurrences-delete-off’. Event: Enable member-delete-implies-membership; name this event ‘memberdelete-implies-membership-off’. Event: Enable member-delete; name this event ‘member-delete-off’. Event: Enable member-non-list; name this event ‘member-non-list-off’.

Event: Enable equal-occurrences-zero; name this event ‘equal-occurrences-zero-off’. Event: Enable delete-delete; name this event ‘delete-delete-off’. Event: Enable delete-non-member; name this event ‘delete-non-member-off’. Event: Enable subbagp; name this event ‘subbagp-off’. Event: Enable *1*subbagp; name this event ‘g*1*subbagp-off’. Event: Enable occurrences; name this event ‘occurrences-off’. Event: Enable *1*occurrences; name this event ‘g*1*occurrences-off’. Event: Enable bagint; name this event ‘bagint-off’. Event: Enable *1*bagint; name this event ‘g*1*bagint-off’. Event: Enable bagdiff; name this event ‘bagdiff-off’. Event: Enable *1*bagdiff; name this event ‘g*1*bagdiff-off’. Event: Enable delete; name this event ‘delete-off’. Event: Enable *1*delete; name this event ‘g*1*delete-off’. Definition: if* (a, b, c) = if a then b

else c endif Event: Enable if*; name this event ‘if*-off’. Definition: or* (a, b) = if* (a, t, if* (b, t, f)) Event: Enable or*; name this event ‘or*-off’.

Definition: and* (a, b) = if* (a, if* (b, t, f), f)

Event: Enable and*; name this event ‘and*-off’.

Definition: not* (a) = if* (a, f, t)

Event: Enable not*; name this event ‘not*-off’.

Event: Let us define the theory prop*-theory to consist of the following events: or*, and*, not*.

Theorem: simplify-if* (c → (if* (c, a, b) = a)) ∧ ((¬ c) → (if* (c, a, b) = b))

Theorem: if*-c-x-x if* (c, x, x) = x

Theorem: if*-cons if* (a, cons (b, c), cons (d, e)) = cons (if* (a, b, d), if* (a, c, e))

Theorem: rewrite-not* (x → (not* (x) = f)) ∧ ((¬ x) → (not* (x) = t))

Theorem: rewrite-and* (and* (f, x) = f) ∧ (and* (x, f) = f) ∧ (y → ((and* (y, x) = if* (x, t, f)) ∧ (and* (x, y) = if* (x, t, f))))

Theorem: rewrite-or* (or* (f, x) = if* (x, t, f)) ∧ (or* (x, f) = if* (x, t, f)) ∧ (y → ((or* (y, x) = t) ∧ (or* (x, y) = t)))

Theorem: expand-*-connectives (if* (c, a, b) = if c then a

else b endif) ∧ (or* (a, b)

= if a then t elseif b then t else f endif)

∧ (and* (a, b)

= if a then if b then t

else f endif else f endif)

∧ (not* (a) = (¬ a))

Event: Enable expand-*-connectives; name this event ‘expand-*-connectives-off’.

Theorem: car-cdr-if-cons (car (if x then cons (a, b)

else cons (c, d) endif) = if x then a

else c endif) ∧ (cdr (if x then cons (a, b)

else cons (c, d) endif) = if x then b

else d endif)

Theorem: our-car-cdr-elim (l = cons (car (l), x)) = (listp (l) ∧ (x = cdr (l)))

Event: Enable our-car-cdr-elim; name this event ‘our-car-cdr-elim-off’.

Event: Enable plus; name this event ‘plus-off’.

Theorem: plus-0 ((zero ≃ 0) → ((x + zero) = fix (x))) ∧ ((zero ≃ 0) → ((zero + x) = fix (x)))

Theorem: plus-add1 (((1 + x) + y) = (1 + (x + y))) ∧ ((x + (1 + y)) = (1 + (x + y)))

Theorem: plus-bottom ((a + b) = 0) = ((a ≃ 0) ∧ (b ≃ 0))

Theorem: plus-add1-sub1 ((n ≄ 0) → (((n − 1) + (1 + m)) = (n + m))) ∧ ((n ≄ 0) → (((1 + m) + (n − 1)) = (m + n)))

Event: Enable difference; name this event ‘difference-off’.

Theorem: difference-x-1 (x − 1) = (x − 1)

Theorem: our-difference-x-x (x − x) = 0

Theorem: our-equal-difference-0 ((x − y) = 0) = if y < x then f

else t endif

Theorem: difference-0 (z ≃ 0) → ((x − z) = fix (x))

Theorem: difference-add1-add1 ((1 + x) − (1 + y)) = (x − y)

Theorem: not-lessp-difference (x < (x − y)) = f

Theorem: lessp-difference=0 if y < x then f else t endif → ((x − y) = 0)

Theorem: times-bottom ((x ∗ y) = 0) = ((x ≃ 0) ∨ (y ≃ 0))

Theorem: times-1 ((a ∗ 1) = fix (a)) ∧ ((1 ∗ a) = fix (a))

Theorem: times-add1-again (a ∗ (1 + b)) = (a + (a ∗ b))

Theorem: times-commutes (a ∗ b) = (b ∗ a)

Theorem: quotient-lessp ((1 < base) ∧ (n ≄ 0)) → ((n ÷ base) < n)

Theorem: zerop-quotient ((n ÷ m) = 0) = ((n ≃ 0) ∨ (m ≃ 0) ∨ (n < m))

Theorem: lessp-x-x (x < x) = f

Theorem: lessp-sub1-x-y-crock (x = y) → (((x − 1) < y) = (x ≄ 0))

Theorem: lessp-sub1-x-x ((x − 1) < x) = (x ≄ 0)

Theorem: lessp-x-1 (x < 1) = (x ≃ 0)

Theorem: leq-lessp-difference (if y < x then f else t endif ∧ (z ≄ 0) ∧ (y ≄ 0)) → (((x − z) < y) = t)

Event: Enable append; name this event ‘append-off’.

Definition: append5 (a, b, c, d, e) = append (a, append (b, append (c, append (d, e))))

Definition: append6 (a, b, c, d, e, g) = append (a, append (b, append (c, append (d, append (e, g)))))

Definition: append7 (a, b, c, d, e, g, h) = append (a, append (b, append (c, append (d, append (e, append (g, h))))))

Definition: append8 (a, b, c, d, e, g, h, i) = append (a,

append (b, append (c, append (d, append (e, append (g, append (h, i)))))))

Theorem: append-nlistp (a ≃ nil) → (append (a, b) = b)

Theorem: append-cons append (cons (a, b), c) = cons (a, append (b, c))

Theorem: our-member-append (a ∈ append (b, c)) = ((a ∈ b) ∨ (a ∈ c))

Theorem: associativity-of-append append (append (a, b), c) = append (a, append (b, c))

Theorem: equal-append-x-x (append (a, b) = append (a, c)) = (b = c)

Definition: properp (l) = if listp (l) then properp (cdr (l))

else l = nil endif

Event: Enable properp; name this event ‘properp-off’.

Theorem: properp-if (properp (a) ∧ properp (b)) → properp (if c then a

else b endif)

Theorem: properp-nlistp (l ≃ nil) → (properp (l) = (l = nil))

Theorem: properp-cons properp (cons (x, y)) = properp (y)

Theorem: properp-append properp (append (a, b)) = properp (b)

Theorem: properp-append-nil properp (a) → (append (a, nil) = a)

Theorem: properp-if* (properp (a) ∧ properp (b)) → properp (if* (c, a, b))

Definition: position (x, l) = if l ≃ nil then f

elseif x = car (l) then 0

elseif position (x, cdr (l)) then 1 + position (x, cdr (l)) else f endif

Event: Enable position; name this event ‘position-off’.

Theorem: member==>position (x ∈ l) → position (x, l)

Definition: length (l) = if listp (l) then 1 + length (cdr (l))

else 0 endif

Event: Enable length; name this event ‘length-off’.

Theorem: length-nlistp (l ≃ nil) → (length (l) = 0)

Theorem: length-bottom (length (x) = 0) = (x ≃ nil)

Theorem: length-1 (length (a) = 1) = (listp (a) ∧ (cdr (a) ≃ nil))

Theorem: length-cons length (cons (x, y)) = (1 + length (y))

Theorem: length-append length (append (a, b)) = (length (a) + length (b))

Theorem: length-cdr-lemmas ((length (cdr (x)) = length (x)) = (x ≃ nil)) ∧ ((length (cdr (x)) < length (x)) = listp (x))

Theorem: equal-length-add1 (length (x) = (1 + y)) = (listp (x) ∧ (length (cdr (x)) = fix (y)))

Event: Enable equal-length-add1; name this event ‘equal-length-add1-off’.

Theorem: length-cdr (length (cdr (v)) = (length (v) − 1)) = t

Theorem: equal-length-cdr (length (a) = length (b)) → ((length (cdr (a)) = length (cdr (b))) = t)

Theorem: length-if (length (a) = length (b)) → (length (if c then a

else b endif) = length (a))

Theorem: length-if* (length (a) = length (b)) → (length (if* (c, a, b)) = length (a))

Definition: rev1 (x, sponge) = if x ≃ nil then sponge

else rev1 (cdr (x), cons (car (x), sponge)) endif

Event: Enable rev1; name this event ‘rev1-off’.

Definition: reverse (x) = rev1 (x, nil)

Event: Enable reverse; name this event ‘reverse-off’.

Theorem: length-rev1 length (rev1 (x, sponge)) = (length (x) + length (sponge))

Theorem: length-reverse length (reverse (x)) = length (x)

Definition: delete* (x, l) = if l ≃ nil then l

elseif x = car (l) then delete* (x, cdr (l)) else cons (car (l), delete* (x, cdr (l))) endif

Event: Enable delete*; name this event ‘delete*-off’.

Definition: subset (l1 , l2 ) = if l1 ≃ nil then t

else (car (l1 ) ∈ l2 ) ∧ subset (cdr (l1 ), l2 ) endif

Event: Enable subset; name this event ‘subset-off’.

Theorem: subset-nlistp (x ≃ nil) → subset (x, y)

Theorem: subset-cons subset (cons (x, y), z) = ((x ∈ z) ∧ subset (y, z))

Theorem: subset-x-cons-y-z subset (x, cons (y, z)) = (subset (x, z) ∨ ((y ∈ x) ∧ subset (delete* (y, x), z)))

Theorem: subset-append (subset (a, b) ∨ subset (a, c)) → subset (a, append (b, c))

Theorem: subset-x-x subset (x, x)

Definition: disjoint (l1 , l2 ) = if l1 ≃ nil then t

else (car (l1 ) ∉ l2 ) ∧ disjoint (cdr (l1 ), l2 ) endif Event: Enable disjoint; name this event ‘disjoint-off’.

Theorem: disjoint-nlistp ((x ≃ nil) ∨ (y ≃ nil)) → disjoint (x, y)

Theorem: disjoint-cons (disjoint (cons (x, y), z) = ((x ∉ z) ∧ disjoint (y, z))) ∧ (disjoint (z, cons (x, y)) = ((x ∉ z) ∧ disjoint (z, y)))

Theorem: disjoint-append (disjoint (x, append (y, z)) = (disjoint (x, y) ∧ disjoint (x, z))) ∧ (disjoint (append (y, z), x) = (disjoint (y, x) ∧ disjoint (z, x)))

Definition: duplicates? (l) = if l ≃ nil then f

else (car (l) ∈ cdr (l)) ∨ duplicates? (cdr (l)) endif

Event: Enable duplicates?; name this event ‘duplicates?-off’.

Theorem: duplicates?-cons duplicates? (cons (x, y)) = ((x ∈ y) ∨ duplicates? (y))

Theorem: duplicates-append duplicates? (append (a, b)) = (duplicates? (a) ∨ duplicates? (b) ∨ (¬ disjoint (a, b)))

Definition: firstn (n, l) = if listp (l)

then if n ≃ 0 then nil

else cons (car (l), firstn (n − 1, cdr (l))) endif else nil endif

Event: Enable firstn; name this event ‘firstn-off’.

Theorem: length-firstn length (firstn (n, l)) = if if length (l) < n then f

else t endif then fix (n) else length (l) endif

Theorem: length-firstn1 if length (l) < n then f else t endif → (length (firstn (n, l)) = fix (n))

Theorem: length-firstn2 (¬ if length (l) < n then f

else t endif) → (length (firstn (n, l)) = length (l))

Theorem: car-firstn car (firstn (n, a)) = if listp (a) ∧ (n ≄ 0) then car (a)

else 0 endif

Theorem: not-member-firstn (x ∉ y) → (x ∉ firstn (n, y))

Theorem: not-duplicates?-firstn (¬ duplicates? (x)) → (¬ duplicates? (firstn (n, x)))

Theorem: subset-firstn subset (firstn (n, l), l)

Theorem: firstn-bottom (firstn (n, l) = nil) = ((l ≃ nil) ∨ (n ≃ 0))

Theorem: disjoint-firstn disjoint (x, y) → disjoint (firstn (n, x), y)

Theorem: disjoint-firstn1 disjoint (y, x) → disjoint (y, firstn (n, x))

Theorem: properp-firstn properp (firstn (n, l))

Theorem: firstn-append firstn (n, append (a, b)) = append (firstn (n, a), firstn (n − length (a), b))

Definition: restn (n, l) = if listp (l)

then if n ≃ 0 then l

else restn (n − 1, cdr (l)) endif else l endif

Event: Enable restn; name this event ‘restn-off’.

Theorem: length-restn length (restn (n, l)) = (length (l) − n)

Theorem: not-duplicates?-restn (¬ duplicates? (x)) → (¬ duplicates? (restn (n, x)))

Theorem: not-member-restn (x ∉ y) → (x ∉ restn (n, y))

Theorem: subset-restn subset (restn (n, l), l)

Theorem: disjoint-restn disjoint (x, y) → disjoint (restn (n, x), y)

Theorem: disjoint-restn1 disjoint (y, x) → disjoint (y, restn (n, x))

Theorem: properp-restn properp (restn (n, l)) = properp (l)

Theorem: restn-append restn (n, append (a, b)) = append (restn (n, a), restn (n − length (a), b))

Theorem: too-many-restns (properp (l) ∧ if n < length (l) then f

else t endif) → (restn (n, l) = nil)

Theorem: cdr-restn (n < length (v)) → (cdr (restn (n, v)) = restn (1 + n, v))

Event: Enable cdr-restn; name this event ‘cdr-restn-off’.

Theorem: disjoint-firstn-restn-lemmas (disjoint (x, y) → disjoint (firstn (n, x), firstn (m, y))) ∧ (disjoint (x, y) → disjoint (firstn (n, x), restn (m, y))) ∧ (disjoint (x, y) → disjoint (restn (n, x), firstn (m, y))) ∧ (disjoint (x, y) → disjoint (restn (n, x), restn (m, y)))

Theorem: no-duplicates-disjoint-firstn-restn ((¬ duplicates? (x)) → disjoint (firstn (n, x), restn (n, x))) ∧ ((¬ duplicates? (x)) → disjoint (restn (n, x), firstn (n, x)))

Theorem: append-firstn-restn append (firstn (n, l), restn (n, l)) = l

Event: Enable pairlist; name this event ‘pairlist-off’.

Theorem: pairlist-nlistp (a ≃ nil) → (pairlist (a, b) = nil)

Theorem: pairlist-cons pairlist (cons (x, y), z) = cons (cons (x, car (z)), pairlist (y, cdr (z)))

Theorem: pairlist-append (length (a) = length (c)) → (pairlist (append (a, b), append (c, d))

= append (pairlist (a, c), pairlist (b, d)))

Theorem: properp-pairlist properp (pairlist (x, y))

Theorem: pairlists-are-equal-when-their-2nd-lists-are-nlistp ((l1 ≃ nil) ∧ (l2 ≃ nil)) → ((pairlist (a, l1 ) = pairlist (a, l2 )) = t)

Definition: nth (n, list) = if n ≃ 0 then car (list)

else nth (n − 1, cdr (list)) endif

Event: Enable nth; name this event ‘nth-off’.

Theorem: open-nth ((n ≃ 0) → (nth (n, list) = car (list))) ∧ ((n ≄ 0) → (nth (n, list) = nth (n − 1, cdr (list))))

Event: Enable open-nth; name this event ‘open-nth-off’.

Theorem: nth-if nth (n,

if a then b else c endif)

= if a then nth (n, b)

else nth (n, c) endif

Event: Enable nth-if; name this event ‘nth-if-off’.

Theorem: nth-restn nth (n, v) = car (restn (n, v))

Event: Enable nth-restn; name this event ‘nth-restn-off’.

Theorem: nth-append (n < length (a)) → (nth (n, append (a, b)) = nth (n, a))

Theorem: nth-append-too if n < length (a) then f else t endif → (nth (n, append (a, b)) = nth (n − length (a), b))

Definition: nthcdr (n, l) = if n ≃ 0 then l

else nthcdr (n − 1, cdr (l)) endif

Event: Enable nthcdr; name this event ‘nthcdr-off’.

Theorem: open-nthcdr ((n ≃ 0) → (nthcdr (n, l) = l)) ∧ ((n ≄ 0) → (nthcdr (n, l) = nthcdr (n − 1, cdr (l))))

Theorem: properp-as-null-nthcdr properp (l) = (nthcdr (length (l), l) = nil)

Event: Enable properp-as-null-nthcdr; name this event ‘properp-as-null-nthcdr-off’.

Theorem: cdr-nthcdr cdr (nthcdr (n, l)) = nthcdr (1 + n, l)

Event: Enable cdr-nthcdr; name this event ‘cdr-nthcdr-off’.

Theorem: listp-nthcdr listp (nthcdr (n, l)) = (n < length (l))

Definition: subrange (l, n, m) = if m < n then nil

elseif n ≃ 0

then if m ≃ 0 then list (car (l))

else cons (car (l), subrange (cdr (l), 0, m − 1)) endif else subrange (cdr (l), n − 1, m − 1) endif

Event: Enable subrange; name this event ‘subrange-off’.

Theorem: properp-subrange properp (subrange (v, n, m))

Theorem: subrange-cons subrange (cons (car, cdr), n, m) = if m < n then nil

elseif n ≃ 0

then if m ≃ 0 then list (car)

else cons (car, subrange (cdr, 0, m − 1)) endif else subrange (cdr, n − 1, m − 1) endif

Event: Enable subrange-cons; name this event ‘subrange-cons-off’.

Theorem: length-subrange length (subrange (l, n, m)) = if m < n then 0

else 1 + (m − n) endif

Theorem: subrange-append-right ((m ≮ n) ∧ if n < length (a) then f

else t endif) → (subrange (append (a, b), n, m)

= subrange (b, n − length (a), m − length (a)))

Theorem: subrange-append-left ((m ≮ n) ∧ (n < length (a)) ∧ (m < length (a))) → (subrange (append (a, b), n, m) = subrange (a, n, m))

Theorem: subrange-0 ((m = (length (a) − 1)) ∧ properp (a) ∧ (length (a) ≄ 0)) → (subrange (a, 0, m) = a)

Theorem: listp-subrange listp (subrange (l, n, m)) = (m ≮ n)

Theorem: subset-subrange (n < length (v)) → subset (subrange (v, m, n), v)

Theorem: not-member-subrange ((n < length (v)) ∧ (x ∉ v)) → (x ∉ subrange (v, m, n))

Theorem: disjoint-subrange (disjoint (x, y) ∧ (m < length (y))) → (disjoint (x, subrange (y, n, m)) ∧ disjoint (subrange (y, n, m), x))

Theorem: open-subrange ((m < n) → (subrange (l, n, m) = nil))

∧ (((m ≮ n) ∧ (n ≃ 0) ∧ (m ≃ 0))

→ (subrange (l, n, m) = list (car (l)))) ∧ (((m ≮ n) ∧ (n ≃ 0) ∧ (m ≄ 0))

→ (subrange (l, n, m) = cons (car (l), subrange (cdr (l), 0, m − 1)))) ∧ (((m ≮ n) ∧ (n ≄ 0))

→ (subrange (l, n, m) = subrange (cdr (l), n − 1, m − 1)))

Event: Enable open-subrange; name this event ‘open-subrange-off’.

Definition: update-nth (n, lst, value) = if listp (lst)

then if n ≃ 0 then cons (value, cdr (lst))

else cons (car (lst), update-nth (n − 1, cdr (lst), value)) endif else lst endif

Event: Enable update-nth; name this event ‘update-nth-off’.

Definition: make-list (n, value) = if n ≃ 0 then nil

else cons (value, make-list (n − 1, value)) endif

Event: Enable make-list; name this event ‘make-list-off’.

Theorem: open-make-list ((n ≃ 0) → (make-list (n, x) = nil)) ∧ ((n ≄ 0) → (make-list (n, x) = cons (x, make-list (n − 1, x))))

Event: Enable open-make-list; name this event ‘open-make-list-off’.

Theorem: length-make-list length (make-list (n, value)) = fix (n)

Theorem: make-list-append append (make-list (n, value), make-list (m, value)) = make-list (n + m, value)

Theorem: properp-make-list properp (make-list (n, value))

Theorem: firstn-make-list if m < n then f else t endif → (firstn (n, make-list (m, v)) = make-list (n, v))

Definition: tree-size (tree) = if tree ≃ nil then 1

else tree-size (car (tree)) + tree-size (cdr (tree)) endif

Event: Enable tree-size; name this event ‘tree-size-off’.

Theorem: tree-size-nlistp (tree ≃ nil) → (tree-size (tree) = 1)

Theorem: not-equal-tree-size-tree-0 tree-size (tree) ≠ 0

Theorem: tree-size-1-crock 1 ≠ tree-size (cons (a, b))

Theorem: a-helpful-lemma-for-tree-inductions (length (a) = tree-size (tree)) → ((length (a) < tree-size (car (tree))) = f)

Theorem: tree-size-lemmas ((listp (tree) ∧ (size = tree-size (tree))) → ((size − tree-size (car (tree))) = tree-size (cdr (tree)))) ∧ ((listp (tree) ∧ (size = tree-size (tree)))

→ ((size − tree-size (cdr (tree))) = tree-size (car (tree))))

Theorem: make-list-append-tree-crock listp (tree) → (make-list (tree-size (car (tree)) + tree-size (cdr (tree)), value)

= make-list (tree-size (tree), value))

Event: Enable make-list-append-tree-crock; name this event ‘make-list-append-tree-crock-off’.

Definition: tfirstn (list, tree) = firstn (tree-size (car (tree)), list)

Definition: trestn (list, tree) = restn (tree-size (car (tree)), list)

Definition: tree-height (tree) = if tree ≃ nil then 1

else 1 + max (tree-height (car (tree)), tree-height (cdr (tree))) endif Event: Enable tree-height; name this event ‘tree-height-off’.

Definition: make-tree (n) = if n ≃ 0 then 0

elseif n = 1 then 0

else cons (make-tree (n ÷ 2), make-tree (n − (n ÷ 2))) endif

Event: Enable make-tree; name this event ‘make-tree-off’.

Theorem: tree-size-make-tree (n ≄ 0) → (tree-size (make-tree (n)) = n)

Theorem: listp-make-tree listp (make-tree (n)) = if n < 2 then f

else t endif

Theorem: list-rewrite-4 (properp (a) ∧ (length (a) = 4)) → (list (car (a), cadr (a), caddr (a), cadddr (a)) = a)

Event: Enable list-rewrite-4; name this event ‘list-rewrite-4-off’.

Theorem: list-elim-4 (l = list (a, b, c, d)) = ((car (l) = a)

∧ (cadr (l) = b) ∧ (caddr (l) = c) ∧ (cadddr (l) = d) ∧ (cddddr (l) = nil))

Event: Enable list-elim-4; name this event ‘list-elim-4-off’.

Definition: list-as-collected-nth (l, length, n) = if length ≃ 0 then nil

else cons (nth (n, l), list-as-collected-nth (l, length − 1, 1 + n)) endif

Event: Enable list-as-collected-nth; name this event ‘list-as-collected-nth-off’.

Theorem: open-list-as-collected-nth ((length ≃ 0) → (list-as-collected-nth (l, length, n) = nil))

∧ ((length ≄ 0)

→ (list-as-collected-nth (l, length, n)

= cons (nth (n, l), list-as-collected-nth (l, length − 1, 1 + n))))

Theorem: equal-length-4-as-collected-nth ((length (l) = 4) ∧ properp (l)) → (l = list-as-collected-nth (l, 4, 0))

Theorem: equal-length-32-as-collected-nth ((length (l) = 32) ∧ properp (l)) → (l = list-as-collected-nth (l, 32, 0))

Event: Add the shell index, with recognizer function symbol indexp and 2 accessors: i-name, with type restriction (one-of numberp litatom) and default value zero; i-num, with type restriction (one-of numberp) and default value zero.

Definition: lnfix (x) = if (x ∈ N) ∨ litatom (x) then x

else 0 endif

Definition: indices (name, from, n) = if n ≃ 0 then nil

else cons (index (name, from), indices (name, 1 + from, n − 1)) endif

Event: Enable indices; name this event ‘indices-off’.

Theorem: indices-zerop (n ≃ 0) → (indices (name, from, n) = nil)

Theorem: open-indices (n ≄ 0) → (indices (name, from, n)

= cons (index (name, from), indices (name, 1 + from, n − 1)))

Theorem: indices-as-append (n ≄ 0) → (indices (name, from, n)

= append (indices (name, from, n − 1), list (index (name, (n − 1) + from))))

Event: Enable indices-as-append; name this event ‘indices-as-append-off’.

Theorem: length-indices length (indices (name, from, n)) = fix (n)

Theorem: listp-indices listp (indices (name, from, n)) = (n ≄ 0)

Theorem: properp-indices properp (indices (name, from, n))

Theorem: member-indices (x ∈ indices (name, from, n)) = ((n ≄ 0)

∧ indexp (x)

∧ (i-name (x) = lnfix (name)) ∧ if i-num (x) < from then f

else t endif ∧ (i-num (x) < (from + n)))

Theorem: disjoint-indices-different-names (lnfix (name1 ) ≠ lnfix (name2 )) → disjoint (indices (name1 , from1 , n1 ), indices (name2 , from2 , n2 ))

Theorem: no-duplicates-in-indices ¬ duplicates? (indices (name, from, n))

Theorem: position-name-indices (index ∈ indices (name, from, n)) → (position (index, indices (name, from, n)) = (i-num (index) − from))

Theorem: nth-indices (n < m) → (nth (n, indices (name, from, m)) = index (name, n + from))

Event: Enable nth-indices; name this event ‘nth-indices-off’.

Event: Add the shell x, with recognizer function symbol xp and no accessors.

Event: Add the shell z, with recognizer function symbol zp and no accessors.

Definition: boolp (x) = ((x = t) ∨ (x = f))

Event: Enable boolp; name this event ‘boolp-off’.

Theorem: prove-boolp (truep (x) ∨ falsep (x)) → boolp (x)

Theorem: boolp-lemmas boolp (t) ∧ boolp (f) ∧ (boolp (b) → ((b = t) = b)) ∧ (boolp (b) → ((b = f) = (¬ b)))

Theorem: boolp-implies-not-equal-z boolp (x) → (x ≠ z)

Event: Enable boolp-implies-not-equal-z; name this event ‘boolp-implies-not-equal-z-off’.

Definition: boolfix (x) = if x then t

else f endif

Definition: threep (x) = ((x = t) ∨ (x = f) ∨ (x = x))

Definition: threefix (x) = if boolp (x) then x

else x endif

Theorem: threefix-idempotent threefix (threefix (x)) = threefix (x)

Theorem: threefix=x (x = threefix (x)) = (¬ boolp (x))

Event: Enable threefix=x; name this event ‘threefix=x-off’.

Definition: fourp (x) = ((x = t) ∨ (f = x) ∨ (x = x) ∨ (x = z))

Definition: fourfix (x) = if fourp (x) then x

else x endif

Definition: bvp (x) = if x ≃ nil then x = nil

else boolp (car (x)) ∧ bvp (cdr (x)) endif Event: Enable bvp; name this event ‘bvp-off’.

Theorem: bvp-nlistp (x ≃ nil) → (bvp (x) = (x = nil))

Theorem: bvp-cons bvp (cons (x, y)) = (boolp (x) ∧ bvp (y))

Theorem: bvp-firstn bvp (x) → bvp (firstn (n, x))

Theorem: bvp-restn bvp (x) → bvp (restn (n, x))

Theorem: bvp-append bvp (a) → (bvp (append (a, b)) = bvp (b))

Theorem: bvp-is-properp bvp (v) → properp (v)

Theorem: bvp-make-list bvp (make-list (n, v)) = ((n ≃ 0) ∨ boolp (v))

Theorem: bvp-nthcdr (bvp (l) ∧ if length (l) < n then f

else t endif) → bvp (nthcdr (n, l))

Theorem: bvp-if (bvp (a) ∧ bvp (b)) → bvp (if c then a

else b endif)

Theorem: bvp-if* (bvp (a) ∧ bvp (b)) → bvp (if* (c, a, b))

Definition: bv2p (x, y) = (bvp (x) ∧ bvp (y) ∧ (length (x) = length (y)))

Definition: bvp-length (bvp, n) = (bvp (bvp)

∧ if length (bvp) < n then f else t endif)

Event: Enable bvp-length; name this event ‘bvp-length-off’.

Theorem: bvp-length-cdr bvp-length (x, 1 + n) → bvp-length (cdr (x), n)

Theorem: boolfix-car-x=x bvp-length (x, 1) → (boolfix (car (x)) = car (x))

Theorem: boolp-car-x bvp-length (x, 1) → boolp (car (x))

Theorem: bvp-length-restn bvp (bvp) → (bvp-length (restn (n, bvp), m)

= if (length (bvp) − n) < m then f else t endif)

Theorem: show-that-nth=t (nth (n, a) ∧ bvp (a) ∧ (n < length (a))) → (nth (n, a) = t)

Event: Enable show-that-nth=t; name this event ‘show-that-nth=t-off’.

Theorem: boolp-nth bvp (a) → (boolp (nth (n, a)) = (n < length (a)))

Theorem: another-way-to-look-at-boolp-nth (bvp (v) ∧ (n < length (v))) → ((if nth (n, v) then t

else f endif = nth (n, v)) = t)

Definition: xor (a, b) = if a

then if b then f

else t endif elseif b then t else f endif

Definition: b-buf (x) = if x then t

else f endif Definition: b-not (x) = (¬ x)

Definition: b-nand (a, b) = (¬ (a ∧ b))

Definition: b-nand3 (a, b, c) = (¬ (a ∧ b ∧ c))

Definition: b-nand4 (a, b, c, d) = (¬ (a ∧ b ∧ c ∧ d))

Definition: b-nand5 (a, b, c, d, e) = (¬ (a ∧ b ∧ c ∧ d ∧ e))

Definition: b-nand6 (a, b, c, d, e, g) = (¬ (a ∧ b ∧ c ∧ d ∧ e ∧ g))

Definition: b-nand8 (a, b, c, d, e, g, h, i) = (¬ (a ∧ b ∧ c ∧ d ∧ e ∧ g ∧ h ∧ i))

Definition: b-or (a, b) = (a ∨ b)

Definition: b-or3 (a, b, c) = (a ∨ b ∨ c)

Definition: b-or4 (a, b, c, d) = (a ∨ b ∨ c ∨ d)

Definition: b-xor (x, y) = if x

then if y then f

else t endif elseif y then t else f endif

Definition: b-xor3 (a, b, c) = b-xor (b-xor (a, b), c)

Definition: b-equv (x, y) = if x

then if y then t

else f endif elseif y then f else t endif

Definition: b-equv3 (a, b, c) = b-equv (a, b-xor (b, c))

Definition: b-and (a, b) = (a ∧ b)

Definition: b-and3 (a, b, c) = (a ∧ b ∧ c)

Definition: b-and4 (a, b, c, d) = (a ∧ b ∧ c ∧ d)

Definition: b-nor (a, b) = (¬ (a ∨ b))

Definition: b-nor3 (a, b, c) = (¬ (a ∨ b ∨ c))

Definition: b-nor4 (a, b, c, d) = (¬ (a ∨ b ∨ c ∨ d))

Definition: b-nor5 (a, b, c, d, e) = (¬ (a ∨ b ∨ c ∨ d ∨ e))

Definition: b-nor6 (a, b, c, d, e, g) = (¬ (a ∨ b ∨ c ∨ d ∨ e ∨ g))

Definition: b-nor8 (a, b, c, d, e, g, h, i) = (¬ (a ∨ b ∨ c ∨ d ∨ e ∨ g ∨ h ∨ i))

Definition: b-if (c, a, b) = if c

then if a then t

else f endif elseif b then t else f endif

Theorem: open-b-xor b-xor (a, b) = if a

then if b then f

else t endif elseif b then t else f endif

Theorem: open-b-xor3 b-xor3 (a, b, c) = b-xor (a, b-xor (b, c))

Theorem: open-b-equv b-equv (a, b) = if a

then if b then t

else f endif elseif b then f else t endif

Theorem: open-b-equv3 b-equv3 (a, b, c) = b-equv (a, b-xor (b, c))

Theorem: b-and-rewrite (¬ b-and (f, x)) ∧ (¬ b-and (x, f)) ∧ ((x ∧ y) → b-and (x, y))

Theorem: b-buf-x=x boolp (x) → (b-buf (x) = x)

Event: Let us define the theory b-gates to consist of the following events: b-buf, b-not, b-nand, b-nand3, b-nand4, b-nand5, b-nand6, b-nand8, b-or, b-or3, b-or4, b-xor, b-xor3, b-equv, b-equv3, b-and, b-and3, b-and4, b-nor, b-nor3, b-nor4, bnor5, b-nor6, b-nor8, b-if, open-b-xor, open-b-xor3, open-b-equv, open-b-equv3, b-and-rewrite, b-buf-x=x.

Theorem: boolp-b-gates boolp (b-buf (x)) ∧ boolp (b-not (x)) ∧ boolp (b-nand (a, b)) ∧ boolp (b-nand3 (a, b, c)) ∧ boolp (b-nand4 (a, b, c, d)) ∧ boolp (b-nand5 (a, b, c, d, e)) ∧ boolp (b-nand6 (a, b, c, d, e, g)) ∧ boolp (b-nand8 (a, b, c, d, e, g, h, i)) ∧ boolp (b-or (a, b)) ∧ boolp (b-or3 (a, b, c)) ∧ boolp (b-or4 (a, b, c, d)) ∧ boolp (b-xor (x, y)) ∧ boolp (b-xor3 (a, b, c)) ∧ boolp (b-equv (x, y)) ∧ boolp (b-equv3 (a, b, c)) ∧ boolp (b-and (a, b)) ∧ boolp (b-and3 (a, b, c)) ∧ boolp (b-and4 (a, b, c, d)) ∧ boolp (b-nor (a, b)) ∧ boolp (b-nor3 (a, b, c)) ∧ boolp (b-nor4 (a, b, c, d)) ∧ boolp (b-nor5 (a, b, c, d, e)) ∧ boolp (b-nor6 (a, b, c, d, e, g)) ∧ boolp (b-nor8 (a, b, c, d, e, g, h, i)) ∧ boolp (b-if (c, a, b))

Event: Enable boolp-b-gates; name this event ‘boolp-b-gates-off’.

Definition: id (x) = x

Definition: ao2 (a, b, c, d) = b-nor (b-and (a, b), b-and (c, d))

Definition: ao4 (a, b, c, d) = b-nand (b-or (a, b), b-or (c, d))

Definition: ao6 (a, b, c) = b-nor (b-and (a, b), c)

Definition: ao7 (a, b, c) = b-nand (b-or (a, b), c)

Definition: vss = f

Definition: vdd = t

Definition: v-buf (x) = if x ≃ nil then nil

else cons (b-buf (car (x)), v-buf (cdr (x))) endif

Event: Enable v-buf; name this event ‘v-buf-off’.

Definition: v-not (x) = if x ≃ nil then nil

else cons (b-not (car (x)), v-not (cdr (x))) endif

Event: Enable v-not; name this event ‘v-not-off’.

Definition: v-and (x, y) = if x ≃ nil then nil

else cons (b-and (car (x), car (y)), v-and (cdr (x), cdr (y))) endif

Event: Enable v-and; name this event ‘v-and-off’.

Definition: v-or (x, y) = if x ≃ nil then nil

else cons (b-or (car (x), car (y)), v-or (cdr (x), cdr (y))) endif

Event: Enable v-or; name this event ‘v-or-off’.

Definition: v-xor (x, y) = if x ≃ nil then nil

else cons (b-xor (car (x), car (y)), v-xor (cdr (x), cdr (y))) endif

Event: Enable v-xor; name this event ‘v-xor-off’.

Definition: v-shift-right (a, si) = if a ≃ nil then nil

else append (v-buf (cdr (a)), list (boolfix (si))) endif

Event: Enable v-shift-right; name this event ‘v-shift-right-off’.

Definition: v-lsr (a) = v-shift-right (a, f)

Definition: v-ror (a, si) = v-shift-right (a, si)

Definition: v-asr (a) = v-shift-right (a, nth (length (a) − 1, a))

Definition: v-if (c, a, b) = if a ≃ nil then nil

else cons (if if c then car (a)

else car (b) endif then t else f endif, v-if (c, cdr (a), cdr (b))) endif

Event: Enable v-if; name this event ‘v-if-off’.

Theorem: bvp-v-buf bvp (v-buf (a))

Theorem: bvp-v-not bvp (v-not (a))

Theorem: bvp-v-and bvp (v-and (a, b))

Theorem: bvp-v-or bvp (v-or (a, b))

Theorem: bvp-v-xor bvp (v-xor (a, b))

Theorem: bvp-v-shift-right bvp (v-shift-right (a, si))

Theorem: bvp-v-lsr bvp (v-lsr (a))

Theorem: bvp-v-asr bvp (v-asr (a))

Theorem: bvp-v-ror bvp (v-ror (a, c))

Theorem: bvp-v-if bvp (v-if (c, a, b))

Theorem: length-v-buf length (v-buf (a)) = length (a)

Theorem: length-v-not length (v-not (a)) = length (a)

Theorem: length-v-and length (v-and (a, b)) = length (a)

Theorem: length-v-or length (v-or (a, b)) = length (a)

Theorem: length-v-xor length (v-xor (a, b)) = length (a)

Theorem: length-v-shift-right length (v-shift-right (a, b)) = length (a)

Theorem: length-v-lsr length (v-lsr (a)) = length (a)

Theorem: length-v-asr length (v-asr (a)) = length (a)

Theorem: length-v-ror length (v-ror (a, b)) = length (a)

Theorem: length-v-if length (v-if (c, a, b)) = length (a)

Theorem: v-and-append-help (length (a) = length (b)) → (append (v-and (a, b), v-and (d, e)) = v-and (append (a, d), append (b, e)))

Theorem: v-or-append-help (length (a) = length (b)) → (append (v-or (a, b), v-or (d, e)) = v-or (append (a, d), append (b, e)))

Theorem: v-xor-append-help (length (a) = length (b)) → (append (v-xor (a, b), v-xor (d, e)) = v-xor (append (a, d), append (b, e)))

Theorem: v-not-append-help append (v-not (a), v-not (b)) = v-not (append (a, b))

Theorem: v-buf-append-help append (v-buf (a), v-buf (b)) = v-buf (append (a, b))

Theorem: v-if-append-help (length (a) = length (b)) → (append (v-if (c, a, b), v-if (c, d, e)) = v-if (c, append (a, d), append (b, e)))

Theorem: v-if-c-congruence c → ((v-if (c, a, b) = v-if (t, a, b)) = t)

Theorem: v-not-firstn v-not (firstn (n, l)) = firstn (n, v-not (l))

Theorem: v-not-restn v-not (restn (n, l)) = restn (n, v-not (l))

Theorem: firstn-v-not firstn (n, v-not (l)) = v-not (firstn (n, l))

Event: Enable firstn-v-not; name this event ‘firstn-v-not-off’.

Theorem: restn-v-not restn (n, v-not (l)) = v-not (restn (n, l))

Event: Enable restn-v-not; name this event ‘restn-v-not-off’.

Theorem: v-not-inverts-all (n < length (bvp)) → (nth (n, v-not (bvp)) = b-not (nth (n, bvp)))

Theorem: v-or-make-list-f (bvp (a) ∧ (length (a) = n)) → (v-or (make-list (n, f), a) = a)

Definition: v-to-nat (v) = if v ≃ nil then 0

else if car (v) then 1 else 0 endif + (2 ∗ v-to-nat (cdr (v))) endif

Event: Enable v-to-nat; name this event ‘v-to-nat-off’.

Definition: nat-to-v (x, n) = if n ≃ 0 then nil

else cons ((x mod 2) ≄ 0, nat-to-v (x ÷ 2, n − 1)) endif

Event: Enable nat-to-v; name this event ‘nat-to-v-off’.

Theorem: firstn-nat-to-v if m < n then f else t endif → (firstn (n, nat-to-v (nat, m)) = nat-to-v (nat, n))

Theorem: restn-nat-to-v-0-hack if m < n then f else t endif → (restn (n, nat-to-v (0, m)) = nat-to-v (0, m − n))

Theorem: length-nat-to-v length (nat-to-v (n, length)) = fix (length)

Theorem: bvp-nat-to-v bvp (nat-to-v (n, length))

Theorem: car-nat-to-v-0-is-f (n ≄ 0) → (¬ car (nat-to-v (0, n)))

Theorem: any-of-nat-to-v-0-is-f (n < m) → (¬ nth (n, nat-to-v (0, m)))

Definition: v-nth (v-n, lst) = nth (v-to-nat (v-n), lst)

Event: Enable v-nth; name this event ‘v-nth-off’.

Definition: update-v-nth (v-n, lst, value) = update-nth (v-to-nat (v-n), lst, value)

Event: Enable update-v-nth; name this event ‘update-v-nth-off’.

Definition: v-nzerop (x) = if x ≃ nil then f

else car (x) ∨ v-nzerop (cdr (x)) endif

Event: Enable v-nzerop; name this event ‘v-nzerop-off’.

Definition: v-zerop (x) = (¬ v-nzerop (x))

Theorem: v-nzerop-as-or-crock (v-nzerop (firstn (n, a)) → v-nzerop (a)) ∧ (v-nzerop (restn (n, a)) → v-nzerop (a))

Theorem: not-v-nzerop-as-and-crock ((¬ v-nzerop (firstn (n, a))) ∧ (¬ v-nzerop (restn (n, a)))) → (¬ v-nzerop (a))

Theorem: not-v-nzerop-v-xor-x-x ¬ v-nzerop (v-xor (x, x))

Theorem: v-xor-nzerop=not-equal bv2p (a, b) → (v-nzerop (v-xor (a, b)) = (a ≠ b))

Theorem: v-zerop-make-list-f v-zerop (make-list (n, f)) = t

Theorem: not-v-nzerop-all-f ¬ v-nzerop (make-list (n, f))

Definition: v-negp (x) = if x ≃ nil then f

elseif cdr (x) ≃ nil then car (x)

else v-negp (cdr (x)) endif

Event: Enable v-negp; name this event ‘v-negp-off’.

Theorem: boolp-v-negp bvp (v) → boolp (v-negp (v))

Theorem: v-negp-as-nth (length (bv) ≠ 0) → (v-negp (bv) = nth (length (bv) − 1, bv))

Event: Enable v-negp-as-nth; name this event ‘v-negp-as-nth-off’.

Definition: sign-extend (v, n) = if n ≃ 0 then nil

elseif v ≃ nil then make-list (n, f)

elseif cdr (v) ≃ nil

then cons (boolfix (car (v)), make-list (n − 1, boolfix (car (v)))) else cons (boolfix (car (v)), sign-extend (cdr (v), n − 1)) endif Event: Enable sign-extend; name this event ‘sign-extend-off’.

Theorem: length-sign-extend length (sign-extend (v, n)) = fix (n)

Theorem: bvp-sign-extend bvp (sign-extend (v, n))

Theorem: sign-extend-as-append (bvp (v) ∧ if n < length (v) then f

else t endif ∧ (length (v) ≠ 0)) → (sign-extend (v, n)

= append (v, make-list (n − length (v), nth (length (v) − 1, v))))

Event: Enable sign-extend-as-append; name this event ‘sign-extend-as-append-off’.

Definition: v-adder (c, a, b) = if a ≃ nil then list (boolfix (c))

else cons (b-xor3 (c, car (a), car (b)),

v-adder (b-or (b-and (car (a), car (b)),

b-or (b-and (car (a), c), b-and (car (b), c))), cdr (a), cdr (b))) endif

Event: Enable v-adder; name this event ‘v-adder-off’.

Definition: v-adder-output (c, a, b) = firstn (length (a), v-adder (c, a, b))

Definition: v-adder-carry-out (c, a, b) = nth (length (a), v-adder (c, a, b))

Definition: v-adder-overflowp (c, a, b) = b-and (b-equv (nth (length (a) − 1, a), nth (length (b) − 1, b)),

b-xor (nth (length (a) − 1, a), nth (length (a) − 1, v-adder-output (c, a, b))))

Definition: v-subtracter-output (c, a, b) = v-adder-output (b-not (c), v-not (a), b)

Definition: v-subtracter-carry-out (c, a, b) = b-not (v-adder-carry-out (b-not (c), v-not (a), b))

Definition: v-subtracter-overflowp (c, a, b) = v-adder-overflowp (b-not (c), v-not (a), b)

Definition: v-inc (x) = v-adder-output (t, x, nat-to-v (0, length (x)))

Event: Enable v-inc; name this event ‘v-inc-off’.

Definition: v-dec (x) = v-subtracter-output (t, nat-to-v (0, length (x)), x)

Event: Enable v-dec; name this event ‘v-dec-off’.

Theorem: length-of-v-adder length (v-adder (c, a, b)) = (1 + length (a))

Theorem: bvp-v-adder bvp (v-adder (c, a, b))

Theorem: length-of-v-adder-output length (v-adder-output (c, a, b)) = length (a)

Theorem: length-of-v-subtracter-output length (v-subtracter-output (c, a, b)) = length (a)

Theorem: bvp-length-v-inc-v-dec bvp (v-inc (x)) ∧ bvp (v-dec (x)) ∧ (length (v-inc (x)) = length (x)) ∧ (length (v-dec (x)) = length (x))

Theorem: v-buf-works bvp (x) → (v-buf (x) = x)

Theorem: v-if-works bv2p (x, y) → (v-if (c, x, y)

= if c then x else y endif)

Theorem: v-adder-works bv2p (x, y) → (v-to-nat (v-adder (c, x, y))

= (if c then 1 else 0 endif + v-to-nat (x) + v-to-nat (y)))

Definition: v-threefix (v) = if v ≃ nil then nil

else cons (threefix (car (v)), v-threefix (cdr (v))) endif

Event: Enable v-threefix; name this event ‘v-threefix-off’.

Theorem: open-v-threefix ((v ≃ nil) → (v-threefix (v) = nil)) ∧ (listp (v)

→ (v-threefix (v) = cons (threefix (car (v)), v-threefix (cdr (v)))))

Theorem: v-threefix-bvp bvp (v) → (v-threefix (v) = v)

Theorem: properp-v-threefix properp (v-threefix (x))

Theorem: length-v-threefix length (v-threefix (x)) = length (x)

Theorem: append-v-threefix append (v-threefix (a), v-threefix (b)) = v-threefix (append (a, b))

Theorem: v-threefix-append v-threefix (append (a, b)) = append (v-threefix (a), v-threefix (b))

Event: Enable v-threefix-append; name this event ‘v-threefix-append-off’.

Theorem: v-threefix-idempotence v-threefix (v-threefix (x)) = v-threefix (x)

Theorem: bvp-v-threefix properp (v) → (bvp (v-threefix (v)) = bvp (v))

Theorem: v-threefix-make-list-x v-threefix (make-list (n, x)) = make-list (n, x)

Definition: v-fourfix (v) = if v ≃ nil then nil

else cons (fourfix (car (v)), v-fourfix (cdr (v))) endif

Event: Enable v-fourfix; name this event ‘v-fourfix-off’.

Theorem: bvp-v-fourfix bvp (v) → (v-fourfix (v) = v)

Theorem: v-fourfix-make-list ((x = t) ∨ (x = f) ∨ (x = x) ∨ (x = z)) → (v-fourfix (make-list (n, x)) = make-list (n, x))

Theorem: v-threefix-v-fourfix v-threefix (v-fourfix (v)) = v-threefix (v)

Definition: v-iff (a, b) = if a ≃ nil then t

else (car (a) ↔ car (b)) ∧ v-iff (cdr (a), cdr (b)) endif

Event: Enable v-iff; name this event ‘v-iff-off’.

Theorem: v-iff-x-x v-iff (x, x)

Theorem: v-iff-rev1 ((length (a) = length (b)) ∧ (length (x) = length (y))) → (v-iff (rev1 (a, x), rev1 (b, y)) = (v-iff (a, b) ∧ v-iff (x, y)))

Theorem: v-iff-reverse (length (a) = length (b)) → (v-iff (reverse (a), reverse (b)) = v-iff (a, b))

Theorem: v-iff=equal bv2p (a, b) → (v-iff (a, b) = (a = b))

Theorem: bvp-subrange (bvp (v) ∧ (n < length (v))) → bvp (subrange (v, m, n))

Theorem: boolp-if* (boolp (a) ∧ boolp (b)) → boolp (if* (c, a, b))

Definition: value (name, alist) = if alist ≃ nil then 0

elseif listp (car (alist))

then if caar (alist) = name then cdar (alist) else value (name, cdr (alist)) endif

else value (name, cdr (alist)) endif

Event: Enable value; name this event ‘value-off’.

Definition: collect-value (args, alist) = if args ≃ nil then nil

else cons (value (car (args), alist), collect-value (cdr (args), alist)) endif

Event: Enable collect-value; name this event ‘collect-value-off’.

Theorem: rewrite-value value (a, cons (cons (b, c), d)) = if a = b then c

else value (a, d) endif

Theorem: rewrite-value-4x value (a, cons (cons (b, c), cons (cons (d, e), cons (cons (g, h), cons (cons (i, j ), k))))) = if a = b then c

elseif a = d then e elseif a = g then h elseif a = i then j else value (a, k) endif

Theorem: value-append-pairlist value (a, append (pairlist (b, c), d)) = if a ∈ b then value (a, pairlist (b, c))

else value (a, d) endif

Theorem: value-pairlist (name ∈ names) → (value (name, pairlist (names, values))

= car (restn (position (name, names), values)))

Event: Enable value-pairlist; name this event ‘value-pairlist-off’.

Theorem: value-indices-hack ((the-name ∈ indices (name, n, m))

∧ if length (values) < m then f

else t endif) → (value (the-name, pairlist (indices (name, n, m), values))

= nth (i-num (the-name) − n, values))

Theorem: collect-value-nlistp (args ≃ nil) → (collect-value (args, alist) = nil)

Theorem: listp-collect-value listp (collect-value (args, alist)) = listp (args)

Theorem: collect-value-append collect-value (append (a, b), alist) = append (collect-value (a, alist), collect-value (b, alist))

Theorem: length-collect-value length (collect-value (args, alist)) = length (args)

Theorem: collect-value-append-pairlist-when-subset subset (args1 , args2 ) → (collect-value (args1 , append (pairlist (args2 , answer), x))

= collect-value (args1 , pairlist (args2 , answer)))

Theorem: collect-value-append-pairlist-when-disjoint disjoint (args1 , args2 ) → (collect-value (args1 , append (pairlist (args2 , a), b))

= collect-value (args1 , b))

Theorem: collect-value-disjoint-pairlist (a ∉ args) → (collect-value (args, cons (cons (a, b), c)) = collect-value (args, c))

Theorem: collect-value-litatom-indices-speedup litatom (a) → (collect-value (indices (name, from, to), cons (cons (a, b), c))

= collect-value (indices (name, from, to), c))

Theorem: equal-collect-value-promote-alists (alist1 = alist2 ) → ((collect-value (args, alist1 ) = collect-value (args, alist2 )) = t)

Theorem: collect-value-firstn (¬ duplicates? (args)) → (collect-value (firstn (n, args), pairlist (args, answer))

= collect-value (firstn (n, args), pairlist (firstn (n, args), firstn (n, answer))))

Theorem: collect-value-restn (¬ duplicates? (args)) → (collect-value (restn (n, args), pairlist (args, answer))

= collect-value (restn (n, args), pairlist (restn (n, args), restn (n, answer))))

Theorem: collect-value-cons collect-value (cons (a, b), alist) = cons (value (a, alist), collect-value (b, alist))

Theorem: singleton-collect-value (length (a) = 1) → (collect-value (a, alist) = list (value (car (a), alist)))

Theorem: properp-collect-value properp (collect-value (args, alist))

Theorem: collect-value-args-pairlist-args ((¬ duplicates? (args)) ∧ (length (args) = length (list)) ∧ properp (list)) → (collect-value (args, pairlist (args, list)) = list)

Theorem: collect-value-splitting-crock-helper collect-value (append (firstn (n, l), restn (n, l)), alist) = append (collect-value (firstn (n, l), alist),

collect-value (restn (n, l), alist))

Theorem: collect-value-splitting-crock collect-value (l, alist) = append (collect-value (firstn (n, l), alist),

collect-value (restn (n, l), alist))

Theorem: collect-value-make-list collect-value (make-list (n, name), alist) = make-list (n, value (name, alist))

Definition: cdr-cdr-sub1-sub1-induction (l1 , n, m, l2 ) = if m < n then t

elseif n ≃ 0

then if m ≃ 0 then t

else cdr-cdr-sub1-sub1-induction (cdr (l1 ), 0, m − 1, cdr (l2 )) endif else cdr-cdr-sub1-sub1-induction (cdr (l1 ), n − 1, m − 1, cdr (l2 )) endif Theorem: collect-value-subrange-args-pairlist-args ((¬ duplicates? (args)) ∧ (length (args) = length (list)) ∧ properp (list) ∧ (n < length (args))) → (collect-value (subrange (args, m, n), pairlist (args, list))

= subrange (list, m, n))

Event: Add the shell rom, with recognizer function symbol romp and 1 accessor: rom-guts, with type restriction (none-of) and default value zero.

Event: Add the shell ram, with recognizer function symbol ramp and 1 accessor: ram-guts, with type restriction (none-of) and default value zero.

Event: Add the shell stub, with recognizer function symbol stubp and 1 accessor: stub-guts, with type restriction (none-of) and default value zero.

Definition: memory-properp (n, width, mem) = if stubp (mem)

then properp (stub-guts (mem)) ∧ (length (stub-guts (mem)) = width) elseif n ≃ 0 then if ramp (mem)

then properp (ram-guts (mem))

∧ (length (ram-guts (mem)) = width) elseif romp (mem) then properp (rom-guts (mem))

∧ (length (rom-guts (mem)) = width) else f endif

else listp (mem)

∧ memory-properp (n − 1, width, car (mem))

∧ memory-properp (n − 1, width, cdr (mem)) endif

Event: Enable memory-properp; name this event ‘memory-properp-off’.

Definition: memory-okp (n, width, mem) = if stubp (mem)

then bvp (stub-guts (mem)) ∧ (length (stub-guts (mem)) = width)

elseif n ≃ 0

then if ramp (mem)

then bvp (ram-guts (mem)) ∧ (length (ram-guts (mem)) = width) elseif romp (mem) then bvp (rom-guts (mem)) ∧ (length (rom-guts (mem)) = width) else f endif

else listp (mem)

∧ memory-okp (n − 1, width, car (mem))

∧ memory-okp (n − 1, width, cdr (mem)) endif

Event: Enable memory-okp; name this event ‘memory-okp-off’.

Definition: read-mem1 (v-addr, mem) = if stubp (mem) then stub-guts (mem)

elseif v-addr ≃ nil

then if ramp (mem) then ram-guts (mem)

elseif romp (mem) then rom-guts (mem)

else 0 endif elseif mem ≃ nil then 0 elseif car (v-addr) then read-mem1 (cdr (v-addr), cdr (mem)) else read-mem1 (cdr (v-addr), car (mem)) endif

Event: Enable read-mem1; name this event ‘read-mem1-off’.

Definition: read-mem (v-addr, mem) = read-mem1 (reverse (v-addr), mem)

Event: Enable read-mem; name this event ‘read-mem-off’.

Definition: write-mem1 (v-addr, mem, value) = if stubp (mem) then mem

elseif v-addr ≃ nil

then if ramp (mem) then ram (value)

else mem endif elseif mem ≃ nil then mem elseif car (v-addr) then cons (car (mem), write-mem1 (cdr (v-addr), cdr (mem), value)) else cons (write-mem1 (cdr (v-addr), car (mem), value), cdr (mem)) endif

Event: Enable write-mem1; name this event ‘write-mem1-off’.

Definition: write-mem (v-addr, mem, value) = write-mem1 (reverse (v-addr), mem, value)

Event: Enable write-mem; name this event ‘write-mem-off’.

Definition: ramp-mem1 (v-addr, mem) = if stubp (mem) then f

elseif v-addr ≃ nil then ramp (mem)

elseif mem ≃ nil then f

elseif car (v-addr) then ramp-mem1 (cdr (v-addr), cdr (mem)) else ramp-mem1 (cdr (v-addr), car (mem)) endif

Event: Enable ramp-mem1; name this event ‘ramp-mem1-off’.

Definition: ramp-mem (v-addr, mem) = ramp-mem1 (reverse (v-addr), mem)

Event: Enable ramp-mem; name this event ‘ramp-mem-off’.

Definition: all-ramp-mem (n, mem) = if stubp (mem) then f

elseif n ≃ 0 then ramp (mem)

elseif mem ≃ nil then f

else all-ramp-mem (n − 1, car (mem))

∧ all-ramp-mem (n − 1, cdr (mem)) endif

Event: Enable all-ramp-mem; name this event ‘all-ramp-mem-off’.

Definition: constant-ram (mem, value) = if ramp (mem) then ram (value)

elseif mem ≃ nil then mem

else cons (constant-ram (car (mem), value), constant-ram (cdr (mem), value)) endif

Event: Enable constant-ram; name this event ‘constant-ram-off’.

Theorem: memory-properp-if (memory-properp (n, width, a) ∧ memory-properp (n, width, b)) → memory-properp (n,

width,

if c then a else b endif)

Theorem: memory-okp-if (memory-okp (n, width, a) ∧ memory-okp (n, width, b)) → memory-okp (n,

width,

if c then a else b endif)

Theorem: memory-properp-constant-ram (memory-properp (n, width, mem) ∧ properp (value) ∧ (width = length (value))) → memory-properp (n, width, constant-ram (mem, value))

Theorem: memory-properp-after-write-mem1 (memory-properp (n, width, mem) ∧ properp (value) ∧ (width = length (value)) ∧ (n = length (v-addr))) → memory-properp (n, width, write-mem1 (v-addr, mem, value))

Theorem: memory-properp-after-write-mem (memory-properp (n, width, mem) ∧ properp (value) ∧ (width = length (value)) ∧ (n = length (v-addr))) → memory-properp (n, width, write-mem (v-addr, mem, value))

Theorem: memory-okp-after-write-mem1 (memory-okp (n, width, mem) ∧ bvp (value) ∧ (width = length (value)) ∧ (n = length (v-addr))) → memory-okp (n, width, write-mem1 (v-addr, mem, value))

Theorem: memory-okp-after-write-mem (memory-okp (n, width, mem) ∧ bvp (value) ∧ (width = length (value)) ∧ (n = length (v-addr))) → memory-okp (n, width, write-mem (v-addr, mem, value))

Theorem: v-iff-v-addr1-v-addr2-read-mem1-write-mem1 (v-iff (v-addr1 , v-addr2 ) ∧ ramp-mem1 (v-addr2 , mem) ∧ (length (v-addr1 ) = length (v-addr2 ))) → (read-mem1 (v-addr1 , write-mem1 (v-addr2 , mem, value)) = value)

Theorem: v-iff-v-addr1-v-addr2-read-mem1-write-mem1-not-ram ((¬ ramp-mem1 (v-addr2 , mem)) ∧ (length (v-addr1 ) = length (v-addr2 ))) → (read-mem1 (v-addr1 , write-mem1 (v-addr2 , mem, value))

= read-mem1 (v-addr1 , mem))

Theorem: not-v-iff-v-addr1-v-addr2-read-mem1-write-mem1 (¬ v-iff (v-addr1 , v-addr2 )) → (read-mem1 (v-addr1 , write-mem1 (v-addr2 , mem, value))

= read-mem1 (v-addr1 , mem))

Theorem: read-mem-write-mem (length (v-addr1 ) = length (v-addr2 )) → (read-mem (v-addr1 , write-mem (v-addr2 , mem, value))

= if v-iff (v-addr1 , v-addr2 ) ∧ ramp-mem (v-addr2 , mem) then value else read-mem (v-addr1 , mem) endif)

Theorem: properp-read-mem1 memory-properp (length (v-addr), size, mem) → (properp (read-mem1 (v-addr, mem))

∧ (length (read-mem1 (v-addr, mem)) = size))

Theorem: properp-read-mem memory-properp (length (reverse (v-addr)), size, mem) → (properp (read-mem (v-addr, mem))

∧ (length (read-mem (v-addr, mem)) = size))

Theorem: properp-read-mem-32 memory-properp (length (v-addr), 32, mem) → (properp (read-mem (v-addr, mem))

∧ (length (read-mem (v-addr, mem)) = 32))

Theorem: bvp-read-mem1 memory-okp (length (v-addr), size, mem) → (bvp (read-mem1 (v-addr, mem))

∧ (length (read-mem1 (v-addr, mem)) = size))

Theorem: bvp-read-mem memory-okp (length (reverse (v-addr)), size, mem) → (bvp (read-mem (v-addr, mem))

∧ (length (read-mem (v-addr, mem)) = size))

Theorem: bvp-read-mem-32 memory-okp (length (v-addr), 32, mem) → (bvp (read-mem (v-addr, mem)) ∧ (length (read-mem (v-addr, mem)) = 32))

Theorem: all-ramp-mem->ramp-mem1 all-ramp-mem (length (v-addr), mem) → ramp-mem1 (v-addr, mem)

Theorem: all-ramp-mem->ramp-mem all-ramp-mem (length (v-addr), mem) → ramp-mem (v-addr, mem)

Theorem: all-ramp-mem-after-write-mem1 (all-ramp-mem (n, mem) ∧ (n = length (v-addr))) → all-ramp-mem (n, write-mem1 (v-addr, mem, value))

Theorem: all-ramp-mem-after-write-mem (all-ramp-mem (n, mem) ∧ (n = length (v-addr))) → all-ramp-mem (n, write-mem (v-addr, mem, value))

Theorem: all-ramp-mem-constant-ram all-ramp-mem (n, constant-ram (mem, value)) = all-ramp-mem (n, mem)

Theorem: memory-okp==>memory-properp memory-okp (n, m, mem) → memory-properp (n, m, mem)

Definition: dual-port-ram-value (bits, address-lines, args, state) = if (¬ bvp (subrange (args, 0, address-lines − 1)))

∨ ((nth (2 ∗ address-lines, args) ≠ t) ∧ ((¬ bvp (subrange (args,

address-lines,

(2 ∗ address-lines) − 1)))

∨ (subrange (args, 0, address-lines − 1)

= subrange (args, address-lines, (2 ∗ address-lines) − 1))))

then make-list (bits, x)

elseif properp (read-mem (subrange (args, 0, address-lines − 1), state)) ∧ (length (read-mem (subrange (args, 0, address-lines − 1),

state))

= bits)

then read-mem (subrange (args, 0, address-lines − 1), state)

else make-list (bits, x) endif

Definition: dual-port-ram-state (bits, address-lines, args, state) = if nth (2 ∗ address-lines, args) = t then state

elseif ¬ bvp (subrange (args, address-lines, (2 ∗ address-lines) − 1)) then constant-ram (state, make-list (bits, x)) elseif nth (2 ∗ address-lines, args) = f then write-mem (subrange (args, address-lines, (2 ∗ address-lines) − 1),

state, subrange (args,

1 + (2 ∗ address-lines), (2 ∗ address-lines) + bits))

else write-mem (subrange (args, address-lines, (2 ∗ address-lines) − 1),

state, make-list (bits, x)) endif

Theorem: properp-length-dual-port-ram-value properp (dual-port-ram-value (bits, address-lines, args, state)) ∧ (length (dual-port-ram-value (bits, address-lines, args, state))

= fix (bits))

Definition: next-memory-state (state, strobe-, rw-, address, data) = if boolp (strobe-) ∧ boolp (rw-)

then case on cadr (state):

case = 0 then if strobe-

then list (car (state),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

elseif rwthen if cadddddr (state) ∧ boolp (cadddddr (state))

then if bvp (address) ∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))

then list (car (state),

          1,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (car (state),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data),

x) endif) endif

else list (constant-ram (car (state),

make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

elseif (¬ cadddddr (state))

∧ (bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state)))

∧ bvp (data) ∧ bvp (cadddddddr (state)) ∧ (data = cadddddddr (state))

then list (car (state),

2,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

else list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

case = 1 then if strobe-

then if rw-

then list (car (state),

       0,

caddr (state),

       0,

t,

threefix (rw-),

v-threefix (address),

if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

      0,

caddr (state),

      0,

t,

threefix (rw-),

v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

elseif rwthen if bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))

then list (car (state),

 1,

caddr (state), cadddr (state) − 1, cadddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (car (state),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

else list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

case = 2 then if strobethen if rw-

then list (constant-ram (car (state), make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

elseif (bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))) ∧ (bvp (data)

∧ bvp (cadddddddr (state)) ∧ (data = cadddddddr (state)))

∧ (cadddr (state) ≃ 0) then list (write-mem (address, car (state), data),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

elseif rwthen list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

elseif (bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))) ∧ bvp (data) ∧ bvp (cadddddddr (state)) ∧ (data = cadddddddr (state))

then list (car (state),

2,

caddr (state), cadddr (state) − 1, cadddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

else list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

otherwise if strobethen if rwthen list (car (state),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data),

x) endif) endif

elseif rwthen list (car (state),

3,

caddr (state), cadddr (state) − 1, cadddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif endcase

else list (constant-ram (car (state), make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

Event: Enable next-memory-state; name this event ‘next-memory-state-off’.

Definition: memory-value (state, strobe-, rw-, address, data) = if* (and* (boolp (strobe-), boolp (rw-)),

case on cadr (state): case = 0 then if* (strobe-,

cons (x, make-list (length (data), z)), cons (if* (caaddr (state) ≃ 0, f, t),

if* (rw-, make-list (length (data), x), make-list (length (data), z))))

case = 1 then if* (strobe-,

cons (x, make-list (length (data), z)), if* (rw-,

if* (and* (address = caddddddr (state),

and* (bvp (address), bvp (caddddddr (state)))), if* (cadddr (state) ≃ 0,

cons (f,

if* (caddddr (state), read-mem (address, car (state)), make-list (length (data), x))),

cons (t, make-list (length (data), x))), if* (cadddr (state) ≃ 0,

cons (f, make-list (length (data), x)), cons (t, make-list (length (data), x)))),

if* (cadddr (state) ≃ 0, cons (f, make-list (length (data), z)), cons (t, make-list (length (data), z)))))

case = 2

then if* (strobe-, cons (x, make-list (length (data), z)), if* (cadddr (state) ≃ 0,

cons (f, make-list (length (data), z)), cons (t, make-list (length (data), z))))

otherwise if* (strobe-, cons (x, make-list (length (data), z)), if* (rw-,

if* (cadddr (state) ≃ 0, cons (f, make-list (length (data), x)), cons (t, make-list (length (data), x))),

if* (cadddr (state) ≃ 0, cons (f, make-list (length (data), z)), cons (t, make-list (length (data), z))))) endcase,

cons (x, make-list (length (data), x)))

Event: Enable memory-value; name this event ‘memory-value-off’.

Definition: mem-value (args, state) = memory-value (state,

cadr (args), car (args), subrange (args, 2, 33), subrange (args, 34, 65))

Event: Enable mem-value; name this event ‘mem-value-off’.

Definition: mem-state (args, state) = next-memory-state (state,

cadr (args), car (args), subrange (args, 2, 33), subrange (args, 34, 65))

Event: Enable mem-state; name this event ‘mem-state-off’.

Theorem: properp-length-memory-value (memory-properp (32, 32, car (state)) ∧ (length (address) = 32) ∧ (length (data) = 32)) → (properp (cdr (memory-value (state, strobe, rw-, address, data)))

∧ (length (cdr (memory-value (state, strobe, rw-, address, data))) = 32))

Theorem: equal-memory-value (length (data1 ) = length (data2 )) → ((memory-value (state, strobe, rw-, address, data1 )

= memory-value (state, strobe, rw-, address, data2 )) = t)

Definition: next-memory-state$induction (state, strobe-, rw-, address, data) = if boolp (strobe-) ∧ boolp (rw-)

then case on cadr (state): case = 0 then if strobe-

then list (car (state),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

elseif rwthen if cadddddr (state) ∧ boolp (cadddddr (state))

then if bvp (address) ∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))

then list (car (state),

          1,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (car (state),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data),

x) endif) endif

else list (constant-ram (car (state),

make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

elseif (¬ cadddddr (state))

∧ (bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state)))

∧ bvp (data) ∧ bvp (cadddddddr (state)) ∧ (data = cadddddddr (state))

then list (car (state),

2,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

else list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

case = 1 then if strobe-

then if rw-

then list (car (state),

       0,

caddr (state),

       0,

t,

threefix (rw-),

v-threefix (address),

if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

      0,

caddr (state),

      0,

t,

threefix (rw-),

v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

elseif rwthen if bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))

then list (car (state),

 1,

caddr (state), cadddr (state) − 1, cadddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (car (state),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

else list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

case = 2 then if strobethen if rw-

then list (constant-ram (car (state), make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

elseif (bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))) ∧ (bvp (data)

∧ bvp (cadddddddr (state)) ∧ (data = cadddddddr (state)))

∧ (cadddr (state) ≃ 0) then list (write-mem (address, car (state), data),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif

elseif rwthen list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

elseif (bvp (address)

∧ bvp (caddddddr (state)) ∧ (address = caddddddr (state))) ∧ bvp (data) ∧ bvp (cadddddddr (state)) ∧ (data = cadddddddr (state))

then list (car (state),

2,

caddr (state), cadddr (state) − 1, cadddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

else list (constant-ram (car (state), make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif) endif

otherwise if strobethen if rwthen list (car (state),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data),

x) endif) endif

elseif rwthen list (car (state),

3,

caddr (state), cadddr (state) − 1, cadddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif)

else list (constant-ram (car (state),

make-list (32, x)),

3,

cdaddr (state), caaddr (state) − 1, caaddr (state) ≃ 0, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw-

then v-threefix (cadddddddr (state)) else v-threefix (data) endif

else make-list (length (data), x) endif) endif endcase

elseif ¬ (boolp (strobe-) ∧ boolp (rw-)) then list (constant-ram (car (state), make-list (32, x)),

0,

caddr (state),

0,

t, threefix (rw-), v-threefix (address), if boolp (rw-) then if rw- then v-threefix (cadddddddr (state))

else v-threefix (data) endif else make-list (length (data), x) endif)

else next-memory-state$induction (state − 1, strobe-, rw-, address, data) endif

Theorem: properp-length-next-memory-state properp (next-memory-state (state, strobe-, rw-, address, data)) ∧ (length (next-memory-state (state, strobe-, rw-, address, data)) = 8)

Definition: fix-breadth-tree-stack (stack, n) = if stack ≃ nil then nil

else cons (append (make-list (n, f), car (stack)), fix-breadth-tree-stack (cdr (stack), 2 ∗ n)) endif

Definition: breadth-tree (tree, stack, n) = if tree ≃ nil

then cons (cons (t, if stack ≃ nil then make-list (n, f) else car (stack) endif),

fix-breadth-tree-stack (cdr (stack), 2))

else cons (cons (t, if stack ≃ nil then make-list (n, f)

else car (stack) endif), breadth-tree (cdr (tree),

breadth-tree (car (tree), cdr (stack), 2 ∗ n),

1 + (2 ∗ n))) endif

Definition: collect-breadth-tree (stack, n) = if stack ≃ nil then nil

elseif car (stack) = make-list (n, t)

then cons (t, collect-breadth-tree (cdr (stack), 2 ∗ n))

else cons (f,

append (car (stack), collect-breadth-tree (cdr (stack), 2 ∗ n))) endif

Definition: tree-number (tree) = ((1 + v-to-nat (collect-breadth-tree (breadth-tree (tree, nil, 0), 1)))

÷ 2)

Event: Enable tree-number; name this event ‘tree-number-off’.

Definition: f-buf (a) = threefix (a)

Definition: f-and (a, b) = if (a = f) ∨ (b = f) then f

elseif (a = t) ∧ (b = t) then t

else x endif

Definition: f-and3 (a, b, c) = f-and (a, f-and (b, c))

Definition: f-and4 (a, b, c, d) = f-and (a, f-and (b, f-and (c, d)))

Definition: f-not (a) = if boolp (a) then ¬ a

else x endif

Definition: f-nand (a, b) = f-not (f-and (a, b))

Definition: f-nand3 (a, b, c) = f-not (f-and (a, f-and (b, c)))

Definition: f-nand4 (a, b, c, d) = f-not (f-and (a, f-and (b, f-and (c, d))))

Definition: f-nand5 (a, b, c, d, e) = f-not (f-and (a, f-and (b, f-and (c, f-and (d, e)))))

Definition: f-nand6 (a, b, c, d, e, g) = f-not (f-and (a, f-and (b, f-and (c, f-and (d, f-and (e, g))))))

Definition: f-nand8 (a, b, c, d, e, g, h, i) = f-not (f-and (a, f-and (b, f-and (c, f-and (d, f-and (e, f-and (g, f-and (h, i))))))))

Definition: f-or (a, b) = if (a = t) ∨ (b = t) then t

elseif (a = f) ∧ (b = f) then f else x endif

Definition: f-or3 (a, b, c) = f-or (a, f-or (b, c))

Definition: f-or4 (a, b, c, d) = f-or (a, f-or (b, f-or (c, d)))

Definition: f-nor (a, b) = f-not (f-or (a, b))

Definition: f-nor3 (a, b, c) = f-not (f-or (a, f-or (b, c)))

Definition: f-nor4 (a, b, c, d) = f-not (f-or (a, f-or (b, f-or (c, d))))

Definition: f-nor5 (a, b, c, d, e) = f-not (f-or (a, f-or (b, f-or (c, f-or (d, e)))))

Definition: f-nor6 (a, b, c, d, e, g) = f-not (f-or (a, f-or (b, f-or (c, f-or (d, f-or (e, g))))))

Definition: f-nor8 (a, b, c, d, e, g, h, i) = f-not (f-or (a, f-or (b, f-or (c, f-or (d, f-or (e, f-or (g, f-or (h, i))))))))

Definition: f-xor (a, b) = if a = t then f-not (b)

elseif a = f then threefix (b)

else x endif

Definition: f-xor3 (a, b, c) = f-xor (a, f-xor (b, c))

Definition: f-equv (a, b) = if a = t then threefix (b)

elseif a = f then f-not (b)

else x endif

Definition: f-equv3 (a, b, c) = f-equv (a, f-xor (b, c))

Definition: f-if (c, a, b) = if c = t then threefix (a)

elseif c = f then threefix (b)

else x endif

Definition: ft-buf (c, a) = if c = t then threefix (a)

elseif c = f then z

else x endif

Definition: ft-wire (a, b) = if a = b then fourfix (a)

elseif a = z then fourfix (b) elseif b = z then fourfix (a) else x endif

Definition: f-pullup (a) = if a = z then t

else threefix (a) endif

Definition: f$ao2 (a, b, c, d) = f-nor (f-and (a, b), f-and (c, d))

Theorem: expand-f-functions (f-buf (a) = threefix (a)) ∧ (f-and (a, b)

= if (a = f) ∨ (b = f) then f elseif (a = t) ∧ (b = t) then t else x endif)

∧ (f-and3 (a, b, c) = f-and (a, f-and (b, c))) ∧ (f-and4 (a, b, c, d) = f-and (a, f-and (b, f-and (c, d)))) ∧ (f-not (a)

= if boolp (a) then ¬ a else x endif)

∧ (f-nand (a, b) = f-not (f-and (a, b))) ∧ (f-nand3 (a, b, c) = f-not (f-and (a, f-and (b, c)))) ∧ (f-nand4 (a, b, c, d) = f-not (f-and (a, f-and (b, f-and (c, d))))) ∧ (f-or (a, b)

= if (a = t) ∨ (b = t) then t elseif (a = f) ∧ (b = f) then f else x endif)

∧ (f-nand5 (a, b, c, d, e) = f-not (f-and (a, f-and (b, f-and (c, f-and (d, e)))))) ∧ (f-nand6 (a, b, c, d, e, g)

= f-not (f-and (a, f-and (b, f-and (c, f-and (d, f-and (e, g))))))) ∧ (f-nand8 (a, b, c, d, e, g, h, i)

= f-not (f-and (a,

f-and (b,

f-and (c,

f-and (d, f-and (e, f-and (g, f-and (h, i)))))))))

∧ (f-or3 (a, b, c) = f-or (a, f-or (b, c))) ∧ (f-or4 (a, b, c, d) = f-or (a, f-or (b, f-or (c, d)))) ∧ (f-nor (a, b) = f-not (f-or (a, b))) ∧ (f-nor3 (a, b, c) = f-not (f-or (a, f-or (b, c)))) ∧ (f-nor4 (a, b, c, d) = f-not (f-or (a, f-or (b, f-or (c, d))))) ∧ (f-nor5 (a, b, c, d, e) = f-not (f-or (a, f-or (b, f-or (c, f-or (d, e)))))) ∧ (f-nor6 (a, b, c, d, e, g)

= f-not (f-or (a, f-or (b, f-or (c, f-or (d, f-or (e, g))))))) ∧ (f-nor8 (a, b, c, d, e, g, h, i)

= f-not (f-or (a,

f-or (b, f-or (c, f-or (d, f-or (e, f-or (g, f-or (h, i)))))))))

∧ (f-xor (a, b)

= if a = t then f-not (b)

elseif a = f then threefix (b)

else x endif)

∧ (f-xor3 (a, b, c) = f-xor (a, f-xor (b, c))) ∧ (f-equv (a, b)

= if a = t then threefix (b) elseif a = f then f-not (b) else x endif)

∧ (f-equv3 (a, b, c) = f-equv (a, f-xor (b, c))) ∧ (f-if (c, a, b)

= if c = t then threefix (a)

elseif c = f then threefix (b)

else x endif)

∧ (ft-buf (c, a)

= if c = t then threefix (a) elseif c = f then z else x endif)

∧ (ft-wire (a, b)

= if a = b then fourfix (a) elseif a = z then fourfix (b) elseif b = z then fourfix (a) else x endif)

∧ (f-pullup (a)

= if a = z then t else threefix (a) endif)

Event: Enable expand-f-functions; name this event ‘expand-f-functions-off’.

Theorem: f-buf-lemma boolp (x) → (f-buf (x) = x)

Theorem: f-and-rewrite (¬ f-and (f, x)) ∧ (¬ f-and (x, f)) ∧ (f-and (x, t) = f-buf (x)) ∧ (f-and (t, x) = f-buf (x)) ∧ ((x ∧ y ∧ boolp (x) ∧ boolp (y)) → (f-and (x, y) = t))

Theorem: f-or-rewrite (f-or (f, f) = f) ∧ ((x ∧ boolp (x)) → (f-or (x, y) = t)) ∧ ((x ∧ boolp (x)) → (f-or (y, x) = t))

Theorem: f-not-rewrite (f-not (t) = f) ∧ (f-not (f) = t)

Theorem: ft-buf-rewrite (ft-buf (t, x) = threefix (x)) ∧ (ft-buf (f, x) = z) ∧ (ft-buf (c, threefix (x)) = ft-buf (c, x)) ∧ (ft-buf (x, x) = x)

Theorem: f-if-rewrite (f-if (t, a, b) = f-buf (a)) ∧ (f-if (f, a, b) = f-buf (b))

Theorem: ft-wire-rewrite (ft-wire (x, x) = x) ∧ (ft-wire (x, x) = x) ∧ (ft-wire (x, z) = fourfix (x)) ∧ (ft-wire (z, x) = fourfix (x))

Theorem: f-pullup-rewrite (f-pullup (t) = t) ∧ (f-pullup (f) = f) ∧ (f-pullup (x) = x) ∧ (f-pullup (z) = t)

Theorem: threefix-help-lemma (threefix (f) = f) ∧ (threefix (t) = t) ∧ (threefix (x) = x) ∧ (threefix (f-buf (x)) = threefix (x)) ∧ (threefix (f-not (x)) = f-not (x)) ∧ (threefix (f-and (x, y)) = f-and (x, y)) ∧ (threefix (f-or (x, y)) = f-or (x, y)) ∧ (threefix (f-xor (x, y)) = f-xor (x, y)) ∧ (threefix (f-equv (x, y)) = f-equv (x, y))

Event: Enable threefix-help-lemma; name this event ‘threefix-help-lemma-off’.

Theorem: f-not-f-not=f-buf f-not (f-not (x)) = f-buf (x)

Event: Enable f-not-f-not=f-buf; name this event ‘f-not-f-not=f-buf-off’.

Theorem: f-buf-delete-lemmas (f-buf (f-buf (a)) = f-buf (a)) ∧ (f-buf (f-not (a)) = f-not (a)) ∧ (f-buf (f-nand (a, b)) = f-nand (a, b)) ∧ (f-buf (f-nand3 (a, b, c)) = f-nand3 (a, b, c)) ∧ (f-buf (f-nand4 (a, b, c, d)) = f-nand4 (a, b, c, d)) ∧ (f-buf (f-nand5 (a, b, c, d, e)) = f-nand5 (a, b, c, d, e)) ∧ (f-buf (f-nand6 (a, b, c, d, e, g)) = f-nand6 (a, b, c, d, e, g)) ∧ (f-buf (f-nand8 (a, b, c, d, e, g, h, i)) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-buf (f-or (a, b)) = f-or (a, b)) ∧ (f-buf (f-or3 (a, b, c)) = f-or3 (a, b, c)) ∧ (f-buf (f-or4 (a, b, c, d)) = f-or4 (a, b, c, d)) ∧ (f-buf (f-xor (a, b)) = f-xor (a, b)) ∧ (f-buf (f-xor3 (a, b, c)) = f-xor3 (a, b, c)) ∧ (f-buf (f-equv (a, b)) = f-equv (a, b)) ∧ (f-buf (f-equv3 (a, b, c)) = f-equv3 (a, b, c)) ∧ (f-buf (f-and (a, b)) = f-and (a, b)) ∧ (f-buf (f-and3 (a, b, c)) = f-and3 (a, b, c)) ∧ (f-buf (f-and4 (a, b, c, d)) = f-and4 (a, b, c, d)) ∧ (f-buf (f-nor (a, b)) = f-nor (a, b))

∧ (f-buf (f-nor3 (a, b, c)) = f-nor3 (a, b, c)) ∧ (f-buf (f-nor4 (a, b, c, d)) = f-nor4 (a, b, c, d)) ∧ (f-buf (f-nor5 (a, b, c, d, e)) = f-nor5 (a, b, c, d, e)) ∧ (f-buf (f-nor6 (a, b, c, d, e, g)) = f-nor6 (a, b, c, d, e, g)) ∧ (f-buf (f-nor8 (a, b, c, d, e, g, h, i)) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-buf (f-if (c, a, b)) = f-if (c, a, b))

Event: Enable f-buf-delete-lemmas; name this event ‘f-buf-delete-lemmas-off’.

Theorem: f-gate-threefix-congruence-lemmas$help (f-buf (threefix (a)) = f-buf (a)) ∧ (f-not (threefix (a)) = f-not (a)) ∧ (f-or (threefix (a), b) = f-or (a, b)) ∧ (f-or (a, threefix (b)) = f-or (a, b)) ∧ (f-xor (threefix (a), b) = f-xor (a, b)) ∧ (f-xor (a, threefix (b)) = f-xor (a, b)) ∧ (f-equv (threefix (a), b) = f-equv (a, b)) ∧ (f-equv (a, threefix (b)) = f-equv (a, b)) ∧ (f-and (threefix (a), b) = f-and (a, b)) ∧ (f-and (a, threefix (b)) = f-and (a, b)) ∧ (f-if (threefix (c), a, b) = f-if (c, a, b)) ∧ (f-if (c, threefix (a), b) = f-if (c, a, b)) ∧ (f-if (c, a, threefix (b)) = f-if (c, a, b))

Event: Enable f-gate-threefix-congruence-lemmas$help; name this event ‘fgate-threefix-congruence-lemmas$help-off’.

Theorem: f-gate-threefix-congruence-lemmas (f-buf (threefix (a)) = f-buf (a)) ∧ (f-not (threefix (a)) = f-not (a)) ∧ (f-nand (threefix (a), b) = f-nand (a, b)) ∧ (f-nand (a, threefix (b)) = f-nand (a, b)) ∧ (f-nand3 (threefix (a), b, c) = f-nand3 (a, b, c)) ∧ (f-nand3 (a, threefix (b), c) = f-nand3 (a, b, c)) ∧ (f-nand3 (a, threefix (b), c) = f-nand3 (a, b, c)) ∧ (f-nand4 (threefix (a), b, c, d) = f-nand4 (a, b, c, d)) ∧ (f-nand4 (a, threefix (b), c, d) = f-nand4 (a, b, c, d)) ∧ (f-nand4 (a, b, threefix (c), d) = f-nand4 (a, b, c, d)) ∧ (f-nand4 (a, b, c, threefix (d)) = f-nand4 (a, b, c, d)) ∧ (f-nand5 (threefix (a), b, c, d, e) = f-nand5 (a, b, c, d, e)) ∧ (f-nand5 (a, threefix (b), c, d, e) = f-nand5 (a, b, c, d, e)) ∧ (f-nand5 (a, b, threefix (c), d, e) = f-nand5 (a, b, c, d, e)) ∧ (f-nand5 (a, b, c, threefix (d), e) = f-nand5 (a, b, c, d, e))

∧ (f-nand5 (a, b, c, d, threefix (e)) = f-nand5 (a, b, c, d, e)) ∧ (f-nand6 (threefix (a), b, c, d, e, g) = f-nand6 (a, b, c, d, e, g)) ∧ (f-nand6 (a, threefix (b), c, d, e, g) = f-nand6 (a, b, c, d, e, g)) ∧ (f-nand6 (a, b, threefix (c), d, e, g) = f-nand6 (a, b, c, d, e, g)) ∧ (f-nand6 (a, b, c, threefix (d), e, g) = f-nand6 (a, b, c, d, e, g)) ∧ (f-nand6 (a, b, c, d, threefix (e), g) = f-nand6 (a, b, c, d, e, g)) ∧ (f-nand6 (a, b, c, d, e, threefix (g)) = f-nand6 (a, b, c, d, e, g)) ∧ (f-nand8 (threefix (a), b, c, d, e, g, h, i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, threefix (b), c, d, e, g, h, i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, b, threefix (c), d, e, g, h, i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, b, c, threefix (d), e, g, h, i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, b, c, d, threefix (e), g, h, i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, b, c, d, e, threefix (g), h, i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, b, c, d, e, g, threefix (h), i) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-nand8 (a, b, c, d, e, g, h, threefix (i)) = f-nand8 (a, b, c, d, e, g, h, i)) ∧ (f-or (threefix (a), b) = f-or (a, b)) ∧ (f-or (a, threefix (b)) = f-or (a, b)) ∧ (f-or3 (threefix (a), b, c) = f-or3 (a, b, c)) ∧ (f-or3 (a, threefix (b), c) = f-or3 (a, b, c)) ∧ (f-or3 (a, threefix (b), c) = f-or3 (a, b, c)) ∧ (f-or4 (threefix (a), b, c, d) = f-or4 (a, b, c, d)) ∧ (f-or4 (a, threefix (b), c, d) = f-or4 (a, b, c, d)) ∧ (f-or4 (a, b, threefix (c), d) = f-or4 (a, b, c, d)) ∧ (f-or4 (a, b, c, threefix (d)) = f-or4 (a, b, c, d)) ∧ (f-xor (threefix (a), b) = f-xor (a, b)) ∧ (f-xor (a, threefix (b)) = f-xor (a, b)) ∧ (f-xor3 (threefix (a), b, c) = f-xor3 (a, b, c)) ∧ (f-xor3 (a, threefix (b), c) = f-xor3 (a, b, c)) ∧ (f-xor3 (a, threefix (b), c) = f-xor3 (a, b, c)) ∧ (f-equv (threefix (a), b) = f-equv (a, b)) ∧ (f-equv (a, threefix (b)) = f-equv (a, b)) ∧ (f-equv3 (threefix (a), b, c) = f-equv3 (a, b, c)) ∧ (f-equv3 (a, threefix (b), c) = f-equv3 (a, b, c)) ∧ (f-equv3 (a, threefix (b), c) = f-equv3 (a, b, c)) ∧ (f-and (threefix (a), b) = f-and (a, b)) ∧ (f-and (a, threefix (b)) = f-and (a, b)) ∧ (f-and3 (threefix (a), b, c) = f-and3 (a, b, c)) ∧ (f-and3 (a, threefix (b), c) = f-and3 (a, b, c)) ∧ (f-and3 (a, threefix (b), c) = f-and3 (a, b, c)) ∧ (f-and4 (threefix (a), b, c, d) = f-and4 (a, b, c, d)) ∧ (f-and4 (a, threefix (b), c, d) = f-and4 (a, b, c, d)) ∧ (f-and4 (a, b, threefix (c), d) = f-and4 (a, b, c, d)) ∧ (f-and4 (a, b, c, threefix (d)) = f-and4 (a, b, c, d)) ∧ (f-nor (threefix (a), b) = f-nor (a, b))

∧ (f-nor (a, threefix (b)) = f-nor (a, b)) ∧ (f-nor3 (threefix (a), b, c) = f-nor3 (a, b, c)) ∧ (f-nor3 (a, threefix (b), c) = f-nor3 (a, b, c)) ∧ (f-nor3 (a, threefix (b), c) = f-nor3 (a, b, c)) ∧ (f-nor4 (threefix (a), b, c, d) = f-nor4 (a, b, c, d)) ∧ (f-nor4 (a, threefix (b), c, d) = f-nor4 (a, b, c, d)) ∧ (f-nor4 (a, b, threefix (c), d) = f-nor4 (a, b, c, d)) ∧ (f-nor4 (a, b, c, threefix (d)) = f-nor4 (a, b, c, d)) ∧ (f-nor5 (threefix (a), b, c, d, e) = f-nor5 (a, b, c, d, e)) ∧ (f-nor5 (a, threefix (b), c, d, e) = f-nor5 (a, b, c, d, e)) ∧ (f-nor5 (a, b, threefix (c), d, e) = f-nor5 (a, b, c, d, e)) ∧ (f-nor5 (a, b, c, threefix (d), e) = f-nor5 (a, b, c, d, e)) ∧ (f-nor5 (a, b, c, d, threefix (e)) = f-nor5 (a, b, c, d, e)) ∧ (f-nor6 (threefix (a), b, c, d, e, g) = f-nor6 (a, b, c, d, e, g)) ∧ (f-nor6 (a, threefix (b), c, d, e, g) = f-nor6 (a, b, c, d, e, g)) ∧ (f-nor6 (a, b, threefix (c), d, e, g) = f-nor6 (a, b, c, d, e, g)) ∧ (f-nor6 (a, b, c, threefix (d), e, g) = f-nor6 (a, b, c, d, e, g)) ∧ (f-nor6 (a, b, c, d, threefix (e), g) = f-nor6 (a, b, c, d, e, g)) ∧ (f-nor6 (a, b, c, d, e, threefix (g)) = f-nor6 (a, b, c, d, e, g)) ∧ (f-nor8 (threefix (a), b, c, d, e, g, h, i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, threefix (b), c, d, e, g, h, i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, b, threefix (c), d, e, g, h, i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, b, c, threefix (d), e, g, h, i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, b, c, d, threefix (e), g, h, i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, b, c, d, e, threefix (g), h, i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, b, c, d, e, g, threefix (h), i) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-nor8 (a, b, c, d, e, g, h, threefix (i)) = f-nor8 (a, b, c, d, e, g, h, i)) ∧ (f-if (threefix (c), a, b) = f-if (c, a, b)) ∧ (f-if (c, threefix (a), b) = f-if (c, a, b)) ∧ (f-if (c, a, threefix (b)) = f-if (c, a, b))

Event: Enable f-gate-threefix-congruence-lemmas; name this event ‘f-gate-threefix-congruence-lemmas-off’.

Event: Let us define the theory f-gates to consist of the following events: fbuf, f-not, f-nand, f-nand3, f-nand4, f-nand5, f-nand6, f-nand8, f-or, f-or3, f-or4, f-xor, f-xor3, f-equv, f-equv3, f-and, f-and3, f-and4, f-nor, f-nor3, f-nor4, f-nor5, f-nor6, f-nor8, f-if, ft-buf, ft-wire, f-pullup.

Theorem: f-gates=b-gates (boolp (a) → (f-buf (a) = b-buf (a))) ∧ (boolp (a) → (f-not (a) = b-not (a))) ∧ ((boolp (a) ∧ boolp (b)) → (f-nand (a, b) = b-nand (a, b)))

∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c))

→ (f-nand3 (a, b, c) = b-nand3 (a, b, c))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c) ∧ boolp (d))

→ (f-nand4 (a, b, c, d) = b-nand4 (a, b, c, d))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c) ∧ boolp (d) ∧ boolp (e))

→ (f-nand5 (a, b, c, d, e) = b-nand5 (a, b, c, d, e))) ∧ ((boolp (a)

∧ boolp (b) ∧ boolp (c) ∧ boolp (d) ∧ boolp (e) ∧ boolp (g)) → (f-nand6 (a, b, c, d, e, g) = b-nand6 (a, b, c, d, e, g)))

∧ ((boolp (a)

∧ boolp (b) ∧ boolp (c) ∧ boolp (d) ∧ boolp (e) ∧ boolp (g) ∧ boolp (h) ∧ boolp (i)) → (f-nand8 (a, b, c, d, e, g, h, i) = b-nand8 (a, b, c, d, e, g, h, i)))

∧ ((boolp (a) ∧ boolp (b)) → (f-or (a, b) = b-or (a, b))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c))

→ (f-or3 (a, b, c) = b-or3 (a, b, c))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c) ∧ boolp (d))

→ (f-or4 (a, b, c, d) = b-or4 (a, b, c, d))) ∧ ((boolp (a) ∧ boolp (b)) → (f-xor (a, b) = b-xor (a, b))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c))

→ (f-xor3 (a, b, c) = b-xor3 (a, b, c))) ∧ ((boolp (a) ∧ boolp (b)) → (f-equv (a, b) = b-equv (a, b))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c))

→ (f-equv3 (a, b, c) = b-equv3 (a, b, c))) ∧ ((boolp (a) ∧ boolp (b)) → (f-and (a, b) = b-and (a, b))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c))

→ (f-and3 (a, b, c) = b-and3 (a, b, c))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c) ∧ boolp (d))

→ (f-and4 (a, b, c, d) = b-and4 (a, b, c, d))) ∧ ((boolp (a) ∧ boolp (b)) → (f-nor (a, b) = b-nor (a, b))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c))

→ (f-nor3 (a, b, c) = b-nor3 (a, b, c))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c) ∧ boolp (d))

→ (f-nor4 (a, b, c, d) = b-nor4 (a, b, c, d))) ∧ ((boolp (a) ∧ boolp (b) ∧ boolp (c) ∧ boolp (d) ∧ boolp (e))

→ (f-nor5 (a, b, c, d, e) = b-nor5 (a, b, c, d, e))) ∧ ((boolp (a)

∧ boolp (b) ∧ boolp (c) ∧ boolp (d) ∧ boolp (e) ∧ boolp (g)) → (f-nor6 (a, b, c, d, e, g) = b-nor6 (a, b, c, d, e, g)))

∧ ((boolp (a)

∧ boolp (b) ∧ boolp (c) ∧ boolp (d) ∧ boolp (e) ∧ boolp (g) ∧ boolp (h) ∧ boolp (i)) → (f-nor8 (a, b, c, d, e, g, h, i) = b-nor8 (a, b, c, d, e, g, h, i)))

∧ ((boolp (c) ∧ boolp (a) ∧ boolp (b))

→ (f-if (c, a, b) = b-if (c, a, b)))

Definition: fv-or (a, b) = if a ≃ nil then nil

else cons (f-or (car (a), car (b)), fv-or (cdr (a), cdr (b))) endif

Event: Enable fv-or; name this event ‘fv-or-off’.

Theorem: properp-length-fv-or properp (fv-or (a, b)) ∧ (length (fv-or (a, b)) = length (a))

Theorem: fv-or=v-or (bvp (a) ∧ bvp (b) ∧ (length (a) = length (b))) → (fv-or (a, b) = v-or (a, b))

Definition: fv-xor (a, b) = if a ≃ nil then nil

else cons (f-xor (car (a), car (b)), fv-xor (cdr (a), cdr (b))) endif

Event: Enable fv-xor; name this event ‘fv-xor-off’.

Theorem: properp-length-fv-xor properp (fv-xor (a, b)) ∧ (length (fv-xor (a, b)) = length (a))

Theorem: fv-xor=v-xor (bvp (a) ∧ bvp (b) ∧ (length (a) = length (b))) → (fv-xor (a, b) = v-xor (a, b))

Definition: fv-if (c, a, b) = if a ≃ nil then nil

else cons (f-if (c, car (a), car (b)), fv-if (c, cdr (a), cdr (b))) endif

Event: Enable fv-if; name this event ‘fv-if-off’.

Theorem: length-fv-if length (fv-if (c, a, b)) = length (a)

Theorem: properp-fv-if properp (fv-if (c, a, b))

Theorem: v-threefix-fv-if v-threefix (fv-if (c, a, b)) = fv-if (c, a, b)

Theorem: fv-if-when-boolp-c (length (a) = length (b)) → ((fv-if (t, a, b) = v-threefix (a))

∧ (fv-if (f, a, b) = v-threefix (b)))

Theorem: fv-if-when-bvp (boolp (c) ∧ bvp (a) ∧ bvp (b) ∧ (length (a) = length (b))) → (fv-if (c, a, b) = if* (c, a, b))

Theorem: fv-if-rewrite (length (a) = length (b)) → (fv-if (c, a, b)

= if boolp (c)

then if c then v-threefix (a)

else v-threefix (b) endif else make-list (length (a), x) endif)

Event: Enable fv-if-rewrite; name this event ‘fv-if-rewrite-off’.

Theorem: fv-if-v-threefix (fv-if (c, v-threefix (a), b) = fv-if (c, a, b)) ∧ (fv-if (c, a, v-threefix (b)) = fv-if (c, a, b))

Definition: v-wire (a, b) = if a ≃ nil then nil

else cons (ft-wire (car (a), car (b)), v-wire (cdr (a), cdr (b))) endif Event: Enable v-wire; name this event ‘v-wire-off’.

Theorem: v-wire-x-x=x v-wire (x, x) = v-fourfix (x)

Theorem: v-wire-make-list-z (length (v) = n) → ((v-wire (make-list (n, z), v) = v-fourfix (v))

∧ (v-wire (v, make-list (n, z)) = v-fourfix (v)))

Theorem: properp-length-v-wire properp (v-wire (a, b)) ∧ (length (v-wire (a, b)) = length (a))

Theorem: v-wire-make-list-x (n = length (x)) → (v-wire (x, make-list (n, x)) = make-list (n, x))

Definition: v-pullup (v) = if v ≃ nil then nil

else cons (f-pullup (car (v)), v-pullup (cdr (v))) endif

Event: Enable v-pullup; name this event ‘v-pullup-off’.

Theorem: properp-length-v-pullup properp (v-pullup (v)) ∧ (length (v-pullup (v)) = length (v))

Theorem: v-pullup-bvp bvp (v) → (v-pullup (v) = v)

Theorem: v-pullup-make-list-z v-pullup (make-list (n, z)) = make-list (n, t)

Definition: fv-shift-right (a, si) = if a ≃ nil then nil

else append (v-threefix (cdr (a)), list (threefix (si))) endif

Event: Enable fv-shift-right; name this event ‘fv-shift-right-off’.

Theorem: fv-shift-right=v-shift-right (boolp (si) ∧ bvp (a)) → (fv-shift-right (a, si) = v-shift-right (a, si))

Theorem: properp-length-fv-shift-right properp (fv-shift-right (a, si)) ∧ (length (fv-shift-right (a, si)) = length (a))

Theorem: v-threefix-fv-shift-right v-threefix (fv-shift-right (a, si)) = fv-shift-right (a, si)

Definition: vft-buf (c, a) = if a ≃ nil then nil

else cons (ft-buf (c, car (a)), vft-buf (c, cdr (a))) endif

Event: Enable vft-buf; name this event ‘vft-buf-off’.

Theorem: properp-length-vft-buf properp (vft-buf (c, a)) ∧ (length (vft-buf (c, a)) = length (a))

Theorem: vft-buf-lemmas (vft-buf (t, a) = v-threefix (a)) ∧ (vft-buf (f, a) = make-list (length (a), z))

Theorem: vft-buf-rewrite vft-buf (c, a) = if c = t then v-threefix (a)

elseif c = f then make-list (length (a), z) else make-list (length (a), x) endif

Event: Enable vft-buf-rewrite; name this event ‘vft-buf-rewrite-off’.

(DEFN PRIMP-DATABASE NIL
(LIST
'(AO2 (DELAYS ((263 737) (83 392)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D)
(LOADINGS 1 1 1 1)
(LSI-NAME . AO2)
(OUT-DEPENDS (A B C D))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NOR (F-AND A B) (F-AND C D))
         'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 8))

'(AO4 (DELAYS ((260 895) (82 311)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D)
(LOADINGS 1 1 1 1)
(LSI-NAME . AO4)
(OUT-DEPENDS (A B C D))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NAND (F-OR A B) (F-OR C D))
         'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 8))
'(AO6 (DELAYS ((260 745) (82 202)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS A B C)
(LOADINGS 1 1 1)
(LSI-NAME . AO6)
(OUT-DEPENDS (A B C))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NOR (F-AND A B) C)
         'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 6))
'(AO7 (DELAYS ((261 486) (83 293)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS A B C)
(LOADINGS 1 1 1)
(LSI-NAME . AO7)
(OUT-DEPENDS (A B C))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NAND (F-OR A B) C)
         'NIL)
(GATES . 2)
(PRIMITIVES . 1)

(TRANSISTORS . 6))
'(B-AND (DELAYS ((144 422) (54 707)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A B)
(LOADINGS 1 1)
(LSI-NAME . AN2)
(OUT-DEPENDS (A B))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-AND A B) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 6))
'(B-AND3 (DELAYS ((146 663) (58 809)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS A B C)
(LOADINGS 1 1 1)
(LSI-NAME . AN3)
(OUT-DEPENDS (A B C))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-AND3 A B C) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 8))
'(B-AND4 (DELAYS ((149 934) (60 870)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D)
(LOADINGS 1 1 1 1)
(LSI-NAME . AN4)
(OUT-DEPENDS (A B C D))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-AND4 A B C D) 'NIL)
(GATES . 3)
(PRIMITIVES . 1)
(TRANSISTORS . 10))
'(B-EQUV (DELAYS ((145 742) (67 973)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A B)

(LOADINGS 1 2)
(LSI-NAME . EN)
(OUT-DEPENDS (A B))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-EQUV A B) 'NIL)
(GATES . 3)
(PRIMITIVES . 1)
(TRANSISTORS . 12))
'(B-EQUV3 (DELAYS ((151 1806) (79 1580)))
 (DRIVES 10)
 (INPUT-TYPES BOOLP BOOLP BOOLP)
 (INPUTS A B C)
 (LOADINGS 1 3 2)
 (LSI-NAME . EN3)
 (OUT-DEPENDS (A B C))
 (OUTPUT-TYPES BOOLP)
 (OUTPUTS Z)
 (RESULTS CONS (F-EQUV3 A B C) 'NIL)
 (GATES . 7)
 (PRIMITIVES . 1)
 (TRANSISTORS . 22))
'(B-IF (DELAYS ((70 775) (60 1040)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS S A B)
(LOADINGS 2 1 1)
(LSI-NAME MUX21H B A S)
(OUT-DEPENDS (A B S))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-IF S A B) 'NIL)
(GATES . 4)
(PRIMITIVES . 1)
(TRANSISTORS . 12))
'(B-NAND (DELAYS ((141 420) (82 161)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A B)
(LOADINGS 1 1)
(LSI-NAME . ND2)
(OUT-DEPENDS (A B))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)

(RESULTS CONS (F-NAND A B) 'NIL)
(GATES . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 4))
'(B-NAND3 (DELAYS ((142 537) (109 322)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS A B C)
(LOADINGS 1 1 1)
(LSI-NAME . ND3)
(OUT-DEPENDS (A B C))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NAND3 A B C) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 6))
'(B-NAND4 (DELAYS ((144 588) (144 418)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D)
(LOADINGS 1 1 1 1)
(LSI-NAME . ND4)
(OUT-DEPENDS (A B C D))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NAND4 A B C D) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 8))
'(B-NAND5 (DELAYS ((144 1002) (59 1120)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D E)
(LOADINGS 1 1 1 1 1)
(LSI-NAME . ND5)
(OUT-DEPENDS (A B C D E))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NAND5 A B C D E)
         'NIL)
(GATES . 4)
(PRIMITIVES . 1)

(TRANSISTORS . 16))
'(B-NAND6 (DELAYS ((144 982) (59 1090)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D E G)
(LOADINGS 1 1 1 1 1 1)
(LSI-NAME . ND6)
(OUT-DEPENDS (A B C D E G))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NAND6 A B C D E G)
         'NIL)
(GATES . 5)
(PRIMITIVES . 1)
(TRANSISTORS . 18))
'(B-NAND8 (DELAYS ((144 1042) (60 1360)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D E G H I)
(LOADINGS 1 1 1 1 1 1 1 1)
(LSI-NAME . ND8)
(OUT-DEPENDS (A B C D E G H I))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NAND8 A B C D E G H I)
         'NIL)
(GATES . 6)
(PRIMITIVES . 1)
(TRANSISTORS . 22))
'(B-NBUF (DELAYS ((142 447) (57 213))
       ((143 302) (52 366)))
(DRIVES 9 10)
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 1)
(LSI-NAME . IVDA)
(OUT-DEPENDS (A) (A))
(OUTPUT-TYPES BOOLP BOOLP)
(OUTPUTS Y Z)
(RESULTS CONS
        (F-NOT A)
        (CONS (F-BUF A) 'NIL))

(GATES . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 4))
'(B-NOR (DELAYS ((260 460) (59 170)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A B)
(LOADINGS 1 1)
(LSI-NAME . NR2)
(OUT-DEPENDS (A B))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NOR A B) 'NIL)
(GATES . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 4))
'(B-NOR3 (DELAYS ((384 798) (59 224)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS A B C)
(LOADINGS 1 1 1)
(LSI-NAME . NR3)
(OUT-DEPENDS (A B C))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NOR3 A B C) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 6))
'(B-NOR4 (DELAYS ((510 1072) (59 225)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D)
(LOADINGS 1 1 1 1)
(LSI-NAME . NR4)
(OUT-DEPENDS (A B C D))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NOR4 A B C D) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 8))
'(B-NOR5 (DELAYS ((145 1493) (55 767)))
(DRIVES 10)

(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D E)
(LOADINGS 1 1 1 1 1)
(LSI-NAME . NR5)
(OUT-DEPENDS (A B C D E))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NOR5 A B C D E)
         'NIL)
(GATES . 4)
(PRIMITIVES . 1)
(TRANSISTORS . 16))
'(B-NOR6 (DELAYS ((146 1593) (55 807)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D E G)
(LOADINGS 1 1 1 1 1 1)
(LSI-NAME . NR6)
(OUT-DEPENDS (A B C D E G))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NOR6 A B C D E G)
         'NIL)
(GATES . 5)
(PRIMITIVES . 1)
(TRANSISTORS . 18))
'(B-NOR8 (DELAYS ((146 1853) (54 767)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D E G H I)
(LOADINGS 1 1 1 1 1 1 1 1)
(LSI-NAME . NR8)
(OUT-DEPENDS (A B C D E G H I))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS
         (F-NOR8 A B C D E G H I)
         'NIL)
(GATES . 6)
(PRIMITIVES . 1)
(TRANSISTORS . 22))
'(B-NOT (DELAYS ((70 235) (57 198)))

(DRIVES 10)
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 2)
(LSI-NAME . IVA)
(OUT-DEPENDS (A))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NOT A) 'NIL)
(GATES . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 3))
'(B-NOT-B4IP (DELAYS ((17 333) (12 124)))
(DRIVES 128)
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 8)
(LSI-NAME . B4IP)
(OUT-DEPENDS (A))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NOT A) 'NIL)
(GATES . 4)
(PRIMITIVES . 1)
(TRANSISTORS . 12))
'(B-NOT-IVAP (DELAYS ((38 208) (35 126)))
(DRIVES 20)
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 3)
(LSI-NAME . IVAP)
(OUT-DEPENDS (A))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-NOT A) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 6))
'(B-OR (DELAYS ((143 332) (58 819)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A B)
(LOADINGS 1 1)
(LSI-NAME . OR2)

(OUT-DEPENDS (A B))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-OR A B) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 6))
'(B-OR3 (DELAYS ((144 422) (70 1185)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP)
(INPUTS A B C)
(LOADINGS 1 1 1)
(LSI-NAME . OR3)
(OUT-DEPENDS (A B C))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-OR3 A B C) 'NIL)
(GATES . 2)
(PRIMITIVES . 1)
(TRANSISTORS . 8))
'(B-OR4 (DELAYS ((143 352) (78 1329)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP)
(INPUTS A B C D)
(LOADINGS 1 1 1 1)
(LSI-NAME . OR4)
(OUT-DEPENDS (A B C D))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-OR4 A B C D) 'NIL)
(GATES . 3)
(PRIMITIVES . 1)
(TRANSISTORS . 10))
'(B-XOR (DELAYS ((145 742) (67 973)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A B)
(LOADINGS 1 2)
(LSI-NAME . EO)
(OUT-DEPENDS (A B))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-XOR A B) 'NIL)
(GATES . 3)

 (PRIMITIVES . 1)
 (TRANSISTORS . 12))
'(B-XOR3 (DELAYS ((151 1806) (79 1580)))
  (DRIVES 10)
  (INPUT-TYPES BOOLP BOOLP BOOLP)
  (INPUTS A B C)
  (LOADINGS 1 3 2)
  (LSI-NAME . EO3)
  (OUT-DEPENDS (A B C))
  (OUTPUT-TYPES BOOLP)
  (OUTPUTS Z)
  (RESULTS CONS (F-XOR3 A B C) 'NIL)
  (GATES . 7)
  (PRIMITIVES . 1)
  (TRANSISTORS . 22))
'(DEL2 (DELAYS ((70 2035) (38 2199)))
(DRIVES 10)
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 1)
(LSI-NAME . DEL2)
(OUT-DEPENDS (A))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-BUF A) 'NIL)
(GATES . 4)
(PRIMITIVES . 1)
(TRANSISTORS . 16))
'(DEL4 (DELAYS ((73 4017) (38 4179)))
(DRIVES 10)
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 1)
(LSI-NAME . DEL4)
(OUT-DEPENDS (A))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-BUF A) 'NIL)
(GATES . 7)
(PRIMITIVES . 1)
(TRANSISTORS . 28))
'(DEL10 (DELAYS ((60 10530) (49 10424)))
 (DRIVES 10)
 (INPUT-TYPES BOOLP)

  (INPUTS A)
  (LOADINGS 1)
  (LSI-NAME . DEL10)
  (OUT-DEPENDS (A))
  (OUTPUT-TYPES BOOLP)
  (OUTPUTS Z)
  (RESULTS CONS (F-BUF A) 'NIL)
  (GATES . 19)
  (PRIMITIVES . 1)
  (TRANSISTORS . 76))
(LIST 'PROCMON
'(DELAYS ((70 25000) (60 25000)))
'(DRIVES 10)
'(INPUT-TYPES PARAMETRIC PARAMETRIC PARAMETRIC PARAMETRIC)
'(INPUTS A E S N)
'(LOADINGS 2 2 2 1)
'(LSI-NAME . PROCMON)
'(OUT-DEPENDS (A E S N))
'(OUTPUT-TYPES PARAMETRIC)
'(OUTPUTS Z)
(LIST 'RESULTS
      'CONS
      (LIST 'F-IF
            'S
            (LIST 'F-IF
                  'E
                  (LIST 'F-IF
                        'A
                        (LIST 'QUOTE F)
                        (LIST 'QUOTE F))
                  'A)
            'N)
      ''NIL)
'(GATES . 100)
'(PRIMITIVES . 1)
'(TRANSISTORS . 400))
'(DP-RAM-16X32
(DELAYS ((35 7500) (21 7500))
    ((35 7500) (21 7500))
    ((35 7500) (21 7500))
    ((35 7500) (21 7500))
    ((35 7500) (21 7500))
    ((35 7500) (21 7500))
    ((35 7500) (21 7500))

((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500))
((35 7500) (21 7500)))
(DRIVES 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP LEVEL BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP)
(INPUTS READ-A0 READ-A1 READ-A2 READ-A3 WRITE-B0 WRITE-B1 WRITE-B2 WRITE-B3
WEN D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17
D18 D19 D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31)
(LOADINGS 2 2 2 2 2 2 2 2 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  1 1 1 1 1 1 1 1)
(LSI-NAME . CMRB100A)
(NEW-STATES DUAL-PORT-RAM-STATE '32
'4
(CONS READ-A0
(CONS READ-A1
(CONS READ-A2
(CONS READ-A3
(CONS WRITE-B0

(CONS WRITE-B1
(CONS WRITE-B2
(CONS WRITE-B3
(CONS WEN
(CONS D0
(CONS D1
(CONS D2
(CONS D3
(CONS D4
(CONS D5
(CONS D6
(CONS D7
(CONS D8
(CONS D9
(CONS D10
(CONS D11
(CONS D12
(CONS D13
(CONS D14
(CONS D15
(CONS D16
(CONS D17
(CONS D18
(CONS D19
(CONS D20
(CONS D21
(CONS D22
(CONS D23
(CONS
D24
(CONS
 D25
 (CONS
  D26
  (CONS
   D27
   (CONS
    D28
    (CONS
     D29
     (CONS
      D30
      (CONS D31
                 'NIL)))))))))))))))))))))))))))))))))))))))))

STATE)
(OUTPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
 BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
 BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
 BOOLP BOOLP)
(OUT-DEPENDS (READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3)
(READ-A0 READ-A1 READ-A2 READ-A3))
(OUTPUTS O0 O1 O2 O3 O4 O5 O6 O7 O8 O9 O10 O11 O12 O13 O14 O15 O16 O17 O18
O19 O20 O21 O22 O23 O24 O25 O26 O27 O28 O29 O30 O31)
(RESULTS DUAL-PORT-RAM-VALUE '32
'4
(CONS READ-A0
(CONS READ-A1
(CONS READ-A2

(CONS READ-A3
(CONS WRITE-B0
(CONS WRITE-B1
(CONS WRITE-B2
(CONS WRITE-B3
(CONS WEN
(CONS D0
(CONS D1
(CONS D2
(CONS D3
(CONS D4
(CONS D5
(CONS D6
(CONS D7
(CONS D8
(CONS D9
(CONS D10
(CONS D11
(CONS D12
(CONS D13
(CONS D14
(CONS D15
(CONS D16
(CONS D17
(CONS D18
(CONS D19
(CONS D20
(CONS D21
(CONS D22
(CONS D23
(CONS
D24
(CONS
 D25
 (CONS
  D26
  (CONS
   D27
   (CONS
    D28
    (CONS
     D29
     (CONS
      D30

                                     (CONS D31
                                                'NIL)))))))))))))))))))))))))))))))))))))))))
STATE)
(STATE-TYPES ADDRESSED-STATE 4
         (RAM '(BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
                      BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
                      BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
                      BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP)))
(STATES . STATE)
(GATES . 2368)
(PRIMITIVES . 1)
(TRANSISTORS . 9472))
'(FD1 (DELAYS ((147 1024) (55 1288))
        ((145 1432) (53 1447)))
(DRIVES 10 10)
(INPUT-TYPES BOOLP CLK)
(INPUTS D CP)
(LOADINGS 1 1)
(LSI-NAME . FD1)
(NEW-STATES F-BUF D)
(OUT-DEPENDS NIL NIL)
(OUTPUT-TYPES BOOLP BOOLP)
(OUTPUTS Q QN)
(RESULTS CONS
         (F-BUF STATE)
         (CONS (F-NOT STATE) 'NIL))
(STATE-TYPES . BOOLP)
(STATES . STATE)
(GATES . 7)
(PRIMITIVES . 1)
(TRANSISTORS . 26))
'(FD1S (DELAYS ((147 1024) (55 1288))
         ((145 1432) (53 1447)))
 (DRIVES 10 10)
 (INPUT-TYPES BOOLP CLK BOOLP BOOLP)
 (INPUTS D CP TI TE)
 (LOADINGS 1 1 1 2)
 (LSI-NAME . FD1S)
 (NEW-STATES F-IF TE TI D)
 (OUT-DEPENDS NIL NIL)
 (OUTPUT-TYPES BOOLP BOOLP)
 (OUTPUTS Q QN)
 (RESULTS CONS
          (F-BUF STATE)

        (CONS (F-NOT STATE) 'NIL))
(STATE-TYPES . BOOLP)
(STATES . STATE)
(GATES . 9)
(PRIMITIVES . 1)
(TRANSISTORS . 34))
'(FD1SP (DELAYS ((68 1084) (34 1327))
        ((65 1712) (32 1596)))
(DRIVES 16 16)
(INPUT-TYPES BOOLP CLK BOOLP BOOLP)
(INPUTS D CP TI TE)
(LOADINGS 1 1 1 2)
(LSI-NAME . FD1SP)
(NEW-STATES F-IF TE TI D)
(OUT-DEPENDS NIL NIL)
(OUTPUT-TYPES BOOLP BOOLP)
(OUTPUTS Q QN)
(RESULTS CONS
         (F-BUF STATE)
         (CONS (F-NOT STATE) 'NIL))
(STATE-TYPES . BOOLP)
(STATES . STATE)
(GATES . 10)
(PRIMITIVES . 1)
(TRANSISTORS . 38))
'(FD1SLP (DELAYS ((70 1085) (45 982))
         ((67 1493) (35 1568)))
 (DRIVES 12 12)
 (INPUT-TYPES BOOLP CLK BOOLP BOOLP BOOLP)
 (INPUTS D CP LD TI TE)
 (LOADINGS 1 1 2 1 2)
 (LSI-NAME . FD1SLP)
 (NEW-STATES F-IF TE TI
             (F-IF LD D STATE))
 (OUT-DEPENDS NIL NIL)
 (OUTPUT-TYPES BOOLP BOOLP)
 (OUTPUTS Q QN)
 (RESULTS CONS
          (F-BUF STATE)
          (CONS (F-NOT STATE) 'NIL))
 (STATE-TYPES . BOOLP)
 (STATES . STATE)
 (GATES . 12)
 (PRIMITIVES . 1)

(TRANSISTORS . 40))
'(ID (DELAYS A)
(DRIVES A)
(INPUT-TYPES FREE)
(INPUTS A)
(LOADINGS 0)
(LSI-NAME . ID)
(OUT-DEPENDS (A))
(OUTPUT-TYPES (A))
(OUTPUTS Z)
(RESULTS CONS A 'NIL)
(GATES . 0)
(PRIMITIVES . 0)
(TRANSISTORS . 0))
'(MEM-32X32
(DELAYS ((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))

((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000))
((1410 20000) (820 20000)))
(DRIVES 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10 10)
(INPUT-TYPES BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
     BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP)
(INPUTS RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15
A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 D0
D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19
D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31)
(LOADINGS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
(LSI-NAME . MEM-32X32)
(NEW-STATES MEM-STATE
(CONS RW-
(CONS STROBE-
(CONS A0
(CONS A1
(CONS A2
(CONS A3
(CONS A4
(CONS A5
 (CONS A6
  (CONS A7
   (CONS A8
    (CONS A9
     (CONS A10
      (CONS A11
       (CONS A12
        (CONS A13
         (CONS A14
          (CONS A15
           (CONS A16
            (CONS A17
             (CONS A18
              (CONS A19
               (CONS A20

(CONS A21
(CONS A22
(CONS A23
(CONS A24
(CONS A25
(CONS A26
(CONS A27
(CONS A28
(CONS A29
(CONS A30
(CONS
A31
(CONS
 D0
 (CONS
  D1
  (CONS
   D2
   (CONS
    D3
    (CONS
     D4
     (CONS
      D5
      (CONS
       D6
       (CONS
        D7
        (CONS
         D8
         (CONS
          D9
          (CONS
           D10
           (CONS
            D11
            (CONS
             D12
             (CONS
              D13
              (CONS
               D14
               (CONS
                D15

                                 (CONS
                                  D16
                                  (CONS
                                   D17
                                   (CONS
                                    D18
                                    (CONS
                                     D19
                                     (CONS
                                      D20
                                      (CONS
                                       D21
                                       (CONS
                                        D22
                                        (CONS
                                         D23
                                         (CONS
                                          D24
                                          (CONS
                                           D25
                                           (CONS
                                            D26
                                            (CONS
                                             D27
                                             (CONS
                                              D28
                                              (CONS
                                               D29
                                               (CONS
                                                D30
                                                (CONS D31
                                                                                                             'NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
STATE)
(OUT-DEPENDS (RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28

A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14

A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28
A29 A30 A31)
(RW- STROBE- A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13
A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27
A28 A29 A30 A31))

(OUTPUT-TYPES BOOLP TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE
TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE
TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE
TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE
TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE TRI-STATE
TRI-STATE TRI-STATE TRI-STATE)
(OUTPUTS DTACK- O0 O1 O2 O3 O4 O5 O6 O7 O8 O9 O10 O11 O12 O13 O14 O15 O16
O17 O18 O19 O20 O21 O22 O23 O24 O25 O26 O27 O28 O29 O30 O31)
(RESULTS MEM-VALUE
(CONS RW-
(CONS STROBE-
(CONS A0
(CONS A1
(CONS A2
(CONS A3
(CONS A4
(CONS A5
(CONS A6
(CONS A7
(CONS A8
(CONS A9
(CONS A10
(CONS A11
 (CONS A12
  (CONS A13
   (CONS A14
    (CONS A15
     (CONS A16
      (CONS A17
       (CONS A18
        (CONS A19
         (CONS A20
          (CONS A21
           (CONS A22
            (CONS A23
             (CONS A24
              (CONS A25
               (CONS A26
                (CONS A27
                 (CONS A28
                  (CONS A29
                   (CONS A30
                    (CONS
                     A31

(CONS
D0
(CONS
 D1
 (CONS
  D2
  (CONS
   D3
   (CONS
    D4
    (CONS
     D5
     (CONS
      D6
      (CONS
       D7
       (CONS
        D8
        (CONS
         D9
         (CONS
          D10
          (CONS
           D11
           (CONS
            D12
            (CONS
             D13
             (CONS
              D14
              (CONS
               D15
               (CONS
                D16
                (CONS
                 D17
                 (CONS
                  D18
                  (CONS
                   D19
                   (CONS
                    D20
                    (CONS
                     D21

              (CONS
               D22
               (CONS
                D23
                (CONS
                 D24
                 (CONS
                  D25
                  (CONS
                   D26
                   (CONS
                    D27
                    (CONS
                     D28
                     (CONS
                      D29
                      (CONS
                       D30
                       (CONS D31
                                                                                    'NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
STATE)
(STATE-TYPES (ADDRESSED-STATE 32
(RAM '(BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP)))
NUMBERP NUMBER-LISTP NUMBERP BOOLP BOOLP
(BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP)
(BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP BOOLP
BOOLP BOOLP BOOLP BOOLP))
(STATES . STATE)
(GATES . 0)
(PRIMITIVES . 1)
(TRANSISTORS . 0))
'(RAM-ENABLE-CIRCUIT (DELAYS ((68 12000) (54 12000)))
(DRIVES 10)

            (INPUT-TYPES CLK BOOLP BOOLP BOOLP)
            (INPUTS CLK TEST-REGFILE- DISABLE-REGFILE- WE)
            (LOADINGS 1 2 2 2)
            (LSI-NAME . RAM-ENABLE-CIRCUIT)
            (OUT-DEPENDS (CLK TEST-REGFILE- DISABLE-REGFILE- WE))
            (OUTPUT-TYPES LEVEL)
            (OUTPUTS Z)
            (RESULTS CONS
                     (F-NAND DISABLE-REGFILE- WE)
                     'NIL)
            (GATES . 24)
            (PRIMITIVES . 1)
            (TRANSISTORS . 97))
'(T-BUF (DELAYS ((146 313) (57 728)))
(DRIVES 10)
(INPUT-TYPES BOOLP BOOLP)
(INPUTS E A)
(LOADINGS 2 2)
(LSI-NAME BTS4 A E)
(OUT-DEPENDS (A E))
(OUTPUT-TYPES TRI-STATE)
(OUTPUTS Z)
(RESULTS CONS (FT-BUF E A) 'NIL)
(GATES . 3)
(PRIMITIVES . 1)
(TRANSISTORS . 12))
'(T-WIRE (DELAYS (OR A B))
(DRIVES (MIN A B))
(INPUT-TYPES TRI-STATE TRI-STATE)
(INPUTS A B)
(LOADINGS 1 1)
(LSI-NAME . T-WIRE)
(OUT-DEPENDS (A B))
(OUTPUT-TYPES TRI-STATE)
(OUTPUTS Z)
(RESULTS CONS (FT-WIRE A B) 'NIL)
(GATES . 0)
(PRIMITIVES . 0)
(TRANSISTORS . 0))
'(PULLUP (DELAYS A)
(DRIVES A)
(INPUT-TYPES TRI-STATE)
(INPUTS A)
(LOADINGS 1)

(LSI-NAME . PULLUP)
(OUT-DEPENDS (A))
(OUTPUT-TYPES BOOLP)
(OUTPUTS Z)
(RESULTS CONS (F-PULLUP A) 'NIL)
(GATES . 0)
(PRIMITIVES . 0)
(TRANSISTORS . 0))
'(TTL-BIDIRECT (DELAYS (((61 PS-PF) 1633) ((41 PS-PF) 2253))
        ((43 633) (20 638))
        ((141 1053) (82 799)))
(DRIVES (8 MA) 10 10)
(INPUT-TYPES TTL-TRI-STATE BOOLP BOOLP PARAMETRIC)
(INPUTS IO A EN PI)
(LOADINGS (3 PF) 1 1 1)
(LSI-NAME . BD8TRP)
(OUT-DEPENDS (EN A)
             (EN A IO)
             (EN A IO PI))
(OUTPUT-TYPES TTL-TRI-STATE BOOLP PARAMETRIC)
(OUTPUTS IO ZI PO)
(RESULTS CONS
         (FT-BUF (F-NOT EN) A)
         (CONS (F-BUF (FT-WIRE IO (FT-BUF (F-NOT EN) A)))
               (CONS (F-NAND (FT-WIRE IO (FT-BUF (F-NOT EN) A))
                             PI)
                     'NIL)))
(GATES . 0)
(PADS . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 0))
'(TTL-CLK-INPUT (DELAYS ((4 1225) (4 1152))
         ((202 1050) (117 741)))
 (DRIVES 400 10)
 (INPUT-TYPES TTL PARAMETRIC)
 (INPUTS A PI)
 (LOADINGS (3 PF) 1)
 (LSI-NAME . DRVT8)
 (OUT-DEPENDS (A) (A PI))
 (OUTPUT-TYPES CLK PARAMETRIC)
 (OUTPUTS Z PO)
 (RESULTS CONS
          (F-BUF A)
          (CONS (F-NAND A PI) 'NIL))

    (GATES . 0)
    (PADS . 2)
    (PRIMITIVES . 1)
    (TRANSISTORS . 0))
'(TTL-INPUT (DELAYS ((43 633) (20 638))
        ((141 1053) (82 799)))
(DRIVES 10 10)
(INPUT-TYPES TTL PARAMETRIC)
(INPUTS A PI)
(LOADINGS (3 PF) 1)
(LSI-NAME . TLCHT)
(OUT-DEPENDS (A) (A PI))
(OUTPUT-TYPES BOOLP PARAMETRIC)
(OUTPUTS Z PO)
(RESULTS CONS
         (F-BUF A)
         (CONS (F-NAND A PI) 'NIL))
(GATES . 0)
(PADS . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 0))
'(TTL-OUTPUT (DELAYS (((61 PS-PF) 812) ((42 PS-PF) 1155)))
 (DRIVES (8 MA))
 (INPUT-TYPES BOOLP)
 (INPUTS A)
 (LOADINGS 5)
 (LSI-NAME . B8RP)
 (OUT-DEPENDS (A))
 (OUTPUT-TYPES TTL)
 (OUTPUTS Z)
 (RESULTS CONS (F-BUF A) 'NIL)
 (GATES . 0)
 (PADS . 1)
 (PRIMITIVES . 1)
 (TRANSISTORS . 0))
'(TTL-OUTPUT-PARAMETRIC (DELAYS (((64 PS-PF) 737) ((42 PS-PF) 1125)))
            (DRIVES (4 MA))
            (INPUT-TYPES PARAMETRIC)
            (INPUTS A)
            (LOADINGS 3)
            (LSI-NAME . B4)
            (OUT-DEPENDS (A))
            (OUTPUT-TYPES TTL)
            (OUTPUTS Z)

      (RESULTS CONS (F-BUF A) 'NIL)
      (GATES . 0)
      (PADS . 1)
      (PRIMITIVES . 1)
      (TRANSISTORS . 0))
'(TTL-OUTPUT-FAST (DELAYS (((36 PS-PF) 991) ((24 PS-PF) 1488)))
(DRIVES (8 MA))
(INPUT-TYPES BOOLP)
(INPUTS A)
(LOADINGS 3)
(LSI-NAME . B8)
(OUT-DEPENDS (A))
(OUTPUT-TYPES TTL)
(OUTPUTS Z)
(RESULTS CONS (F-BUF A) 'NIL)
(GATES . 0)
(PADS . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 0))
'(TTL-TRI-OUTPUT (DELAYS (((61 PS-PF) 1602) ((41 PS-PF) 2233)))
(DRIVES (8 MA))
(INPUT-TYPES BOOLP BOOLP)
(INPUTS A EN)
(LOADINGS 1 1)
(LSI-NAME . BT8RP)
(OUT-DEPENDS (A EN))
(OUTPUT-TYPES TTL-TRI-STATE)
(OUTPUTS Z)
(RESULTS CONS
        (FT-BUF (F-NOT EN) A)
        'NIL)
(GATES . 0)
(PADS . 1)
(PRIMITIVES . 1)
(TRANSISTORS . 0))
'(TTL-TRI-OUTPUT-FAST (DELAYS (((36 PS-PF) 1581) ((24 PS-PF) 2198)))
    (DRIVES (8 MA))
    (INPUT-TYPES BOOLP BOOLP)
    (INPUTS A EN)
    (LOADINGS 1 1)
    (LSI-NAME . BT8)
    (OUT-DEPENDS (A EN))
    (OUTPUT-TYPES TTL-TRI-STATE)
    (OUTPUTS Z)

                (RESULTS CONS
                         (FT-BUF (F-NOT EN) A)
                         'NIL)
                (GATES . 0)
                (PADS . 1)
                (PRIMITIVES . 1)
                (TRANSISTORS . 0))
(LIST 'VDD
'(DELAYS ((0 0) (0 0)))
'(DRIVES 50)
'(INPUT-TYPES)
'(INPUTS)
'(LOADINGS)
'(LSI-NAME . VDD)
'(OUT-DEPENDS NIL)
'(OUTPUT-TYPES BOOLP)
'(OUTPUTS Z)
(LIST 'RESULTS
      'CONS
      (LIST 'QUOTE T)
      ''NIL)
'(GATES . 0)
'(PRIMITIVES . 1)
'(TRANSISTORS . 0))
(LIST 'VDD-PARAMETRIC
'(DELAYS ((0 0) (0 0)))
'(DRIVES 50)
'(INPUT-TYPES)
'(INPUTS)
'(LOADINGS)
'(LSI-NAME . VDD)
'(OUT-DEPENDS NIL)
'(OUTPUT-TYPES PARAMETRIC)
'(OUTPUTS Z)
(LIST 'RESULTS
      'CONS
      (LIST 'QUOTE T)
      ''NIL)
'(GATES . 0)
'(PRIMITIVES . 1)
'(TRANSISTORS . 0))
(LIST 'VSS
'(DELAYS ((0 0) (0 0)))
'(DRIVES 50)

       '(INPUT-TYPES)
       '(INPUTS)
       '(LOADINGS)
       '(LSI-NAME . VSS)
       '(OUT-DEPENDS NIL)
       '(OUTPUT-TYPES BOOLP)
       '(OUTPUTS Z)
       (LIST 'RESULTS
             'CONS
             (LIST 'QUOTE F)
             ''NIL)
       '(GATES . 0)
       '(PRIMITIVES . 1)
       '(TRANSISTORS . 0))))

Definition: lookup-module (name, netlist) = if netlist ≃ nil then f

elseif listp (car (netlist)) ∧ (caar (netlist) = name)

then car (netlist)

else lookup-module (name, cdr (netlist)) endif

Event: Enable lookup-module; name this event ‘lookup-module-off’.

Definition: delete-module (name, netlist) = if netlist ≃ nil then netlist

elseif listp (car (netlist)) ∧ (caar (netlist) = name)

then cdr (netlist)

else cons (car (netlist), delete-module (name, cdr (netlist))) endif

Event: Enable delete-module; name this event ‘delete-module-off’.

Theorem: delete-module-lookup-module-count lookup-module (name, netlist) → (count (delete-module (name, netlist)) < count (netlist))

Definition: pairstates (statenames, state) = if listp (statenames) ∨ (statenames = nil)

then pairlist (statenames, state)

else list (cons (statenames, state)) endif

Definition: collect-states (statenames, state-bindings) = if listp (statenames) ∨ (statenames = nil)

then collect-value (statenames, state-bindings) else value (statenames, state-bindings) endif

Definition: module-name (module) = car (module) Definition: module-inputs (module) = cadr (module) Definition: module-outputs (module) = caddr (module) Definition: module-occurrences (module) = cadddr (module) Definition: module-statenames (module) = caddddr (module) Definition: module-annotation (module) = cadddddr (module) Definition: occ-name (occurrence) = car (occurrence) Definition: occ-outputs (occurrence) = cadr (occurrence) Definition: occ-function (occurrence) = caddr (occurrence) Definition: occ-inputs (occurrence) = cadddr (occurrence) Definition: occ-annotation (occurrence) = caddddr (occurrence) Definition: primp (fn) = lookup-module (fn, primp-database) Event: Enable primp; name this event ‘primp-off’.

Theorem: not-litatom==>not-primp (¬ litatom (fn)) → (¬ primp (fn)) Definition: primp-lookup (fn, name) = lookup-module (name, cdr (primp (fn))) Definition: primp2 (fn, name) = cdr (primp-lookup (fn, name)) Definition: dual-apply-value (fn, args, state) = eval$ (t,

primp2 (fn, 'results),

append (pairlist (primp2 (fn, 'inputs), args),

pairstates (primp2 (fn, 'states), state)))

Event: Enable dual-apply-value; name this event ‘dual-apply-value-off’.

Definition: dual-apply-state (fn, args, state) = eval$ (t,

primp2 (fn, 'new-states),

append (pairlist (primp2 (fn, 'inputs), args), pairstates (primp2 (fn, 'states), state)))

Event: Enable dual-apply-state; name this event ‘dual-apply-state-off’.

Definition: dual-eval (flag, x0 , x1 , x2 , netlist) = case on flag:

case = 0

then if primp (x0 ) then dual-apply-value (x0 , x1 , x2 ) elseif listp (lookup-module (x0 , netlist)) then collect-value (module-outputs (lookup-module (x0 , netlist)),

dual-eval (1,

module-occurrences (lookup-module (x0 ,

netlist)),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), pairstates (module-statenames (lookup-module (x0 ,

netlist)),

x2 ), delete-module (x0 , netlist)))

else f endif case = 1 then if listp (x0 )

then dual-eval (1, cdr (x0 ), append (pairlist (occ-outputs (car (x0 )),

dual-eval (0, occ-function (car (x0 )), collect-value (occ-inputs (car (x0 )), x1 ), value (occ-name (car (x0 )),

x2 ), netlist)),

x1 ), x2 , netlist)

else x1 endif case = 2 then if primp (x0 ) then dual-apply-state (x0 , x1 , x2 )

elseif listp (lookup-module (x0 , netlist)) then collect-states (module-statenames (lookup-module (x0 , netlist)),

dual-eval (3,

module-occurrences (lookup-module (x0 ,

netlist)),

dual-eval (1,

module-occurrences (lookup-module (x0 ,

netlist)),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), pairstates (module-statenames (lookup-module (x0 ,

netlist)),

x2 ),

delete-module (x0 ,

netlist)),

pairstates (module-statenames (lookup-module (x0 ,

netlist)),

x2 ), delete-module (x0 , netlist)))

else f endif case = 3 then if listp (x0 )

then cons (cons (occ-name (car (x0 )),

dual-eval (2, occ-function (car (x0 )), collect-value (occ-inputs (car (x0 )), x1 ), value (occ-name (car (x0 )), x2 ), netlist)), dual-eval (3, cdr (x0 ), x1 , x2 , netlist))

else nil endif otherwise f endcase

Event: Enable dual-eval; name this event ‘dual-eval-off’.

Theorem: expand-top-level-dual-eval-0-calls ((¬ primp (fn)) ∧ listp (lookup-module (fn, netlist))) → (dual-eval (0, fn, args, state, netlist)

= collect-value (module-outputs (lookup-module (fn, netlist)),

dual-eval (1,

module-occurrences (lookup-module (fn,

netlist)),

pairlist (module-inputs (lookup-module (fn,

netlist)),

args), pairstates (module-statenames (lookup-module (fn,

netlist)),

state), delete-module (fn, netlist))))

Theorem: expand-top-level-dual-eval-2-calls ((¬ primp (fn)) ∧ listp (lookup-module (fn, netlist))) → (dual-eval (2, fn, args, state, netlist)

= collect-states (module-statenames (lookup-module (fn, netlist)),

dual-eval (3,

module-occurrences (lookup-module (fn,

netlist)),

dual-eval (1,

module-occurrences (lookup-module (fn,

netlist)),

pairlist (module-inputs (lookup-module (fn,

netlist)),

args), pairstates (module-statenames (lookup-module (fn,

netlist)),

state), delete-module (fn, netlist)), pairstates (module-statenames (lookup-module (fn,

netlist)),

state), delete-module (fn, netlist))))

Theorem: open-dual-eval-with-flag-1 ((body ≃ nil) → (dual-eval (1, body, bindings, state-bindings, netlist) = bindings)) ∧ (listp (body)

→ (dual-eval (1, body, bindings, state-bindings, netlist)

= dual-eval (1, cdr (body), append (pairlist (occ-outputs (car (body)), dual-eval (0,

occ-function (car (body)),

collect-value (occ-inputs (car (body)), bindings),

value (occ-name (car (body)), state-bindings),

netlist)),

bindings), state-bindings, netlist)))

Theorem: open-dual-eval-with-flag-3 ((body ≃ nil) → (dual-eval (3, body, bindings, state-bindings, netlist) = nil)) ∧ (listp (body)

→ (dual-eval (3, body, bindings, state-bindings, netlist)

= cons (cons (occ-name (car (body)),

dual-eval (2, occ-function (car (body)), collect-value (occ-inputs (car (body)), bindings),

value (occ-name (car (body)), state-bindings),

netlist)),

dual-eval (3, cdr (body), bindings, state-bindings, netlist))))

Theorem: properp-dual-eval-0 ((¬ primp (fn)) ∧ listp (lookup-module (fn, netlist))) → properp (dual-eval (0, fn, args, state, netlist))

Theorem: length-dual-eval-0 ((¬ primp (fn)) ∧ listp (lookup-module (fn, netlist))) → (length (dual-eval (0, fn, args, state, netlist))

= length (module-outputs (lookup-module (fn, netlist))))

Theorem: properp-dual-eval-2 ((¬ primp (fn)) ∧ listp (lookup-module (fn, netlist)) ∧ properp (module-statenames (lookup-module (fn, netlist)))) → properp (dual-eval (2, fn, args, state, netlist))

Theorem: length-dual-eval-2 ((¬ primp (fn)) ∧ listp (lookup-module (fn, netlist)) ∧ properp (module-statenames (lookup-module (fn, netlist)))) → (length (dual-eval (2, fn, args, state, netlist))

= length (module-statenames (lookup-module (fn, netlist))))

Definition: dual-eval-body-bindings (n, body, bindings, state-bindings, netlist) = if n ≃ 0 then bindings

else dual-eval-body-bindings (n − 1, cdr (body), append (pairlist (occ-outputs (car (body)), dual-eval (0,

occ-function (car (body)),

collect-value (occ-inputs (car (body)), bindings),

value (occ-name (car (body)), state-bindings),

netlist)),

bindings), state-bindings, netlist) endif

Event: Enable dual-eval-body-bindings; name this event ‘dual-eval-body-bindings-off’.

Theorem: open-dual-eval-body-bindings ((n ≃ 0) → (dual-eval-body-bindings (n, body, bindings, state-bindings, netlist)

= bindings)) ∧ ((n ≄ 0)

→ (dual-eval-body-bindings (n, body, bindings, state-bindings, netlist)

= dual-eval-body-bindings (n − 1, cdr (body), append (pairlist (occ-outputs (car (body)), dual-eval (0,

occ-function (car (body)),

collect-value (occ-inputs (car (body)), bindings),

value (occ-name (car (body)), state-bindings),

netlist)),

bindings), state-bindings, netlist)))

Definition: simulate (fn, inputs, state, netlist) = if inputs ≃ nil then nil

else cons (list (dual-eval (0, fn, car (inputs), state, netlist),

dual-eval (2, fn, car (inputs), state, netlist)), simulate (fn,

cdr (inputs),

dual-eval (2, fn, car (inputs), state, netlist), netlist)) endif

Definition: simulate-dual-eval-2 (module, inputs, state, netlist, n) = if n ≃ 0 then state

else simulate-dual-eval-2 (module, cdr (inputs), dual-eval (2,

module, car (inputs), state, netlist),

netlist,

n − 1) endif

Event: Enable simulate-dual-eval-2; name this event ‘simulate-dual-eval-2-off’.

Theorem: open-simulate-dual-eval-2 ((n ≃ 0) → (simulate-dual-eval-2 (module, inputs, state, netlist, n) = state)) ∧ ((n ≄ 0)

→ (simulate-dual-eval-2 (module, inputs, state, netlist, n)

= simulate-dual-eval-2 (module, cdr (inputs), dual-eval (2,

module, car (inputs), state, netlist),

netlist, n − 1)))

Definition: min (x, y) = if y < x then y

else x endif

Event: Enable min; name this event ‘min-off’.

Definition: insert (e, x) = if e ∈ x then x

else cons (e, x) endif

Event: Enable insert; name this event ‘insert-off’.

Definition: set-equal (x, y) = (subset (x, y) ∧ subset (y, x))

Event: Enable set-equal; name this event ‘set-equal-off’.

Definition: set-diff (x, y) = if listp (x)

then if car (x) ∈ y then set-diff (cdr (x), y)

else cons (car (x), set-diff (cdr (x), y)) endif else nil endif

Event: Enable set-diff; name this event ‘set-diff-off’.

Definition: intersection (x, y) = if listp (x)

then if car (x) ∈ y then cons (car (x), intersection (cdr (x), y))

else intersection (cdr (x), y) endif else nil endif

Event: Enable intersection; name this event ‘intersection-off’.

Definition: last-cdr (x) = if listp (x) then last-cdr (cdr (x))

else x endif

Event: Enable last-cdr; name this event ‘last-cdr-off’.

Definition: list-duplicates (x, duplicates) = if listp (x)

then list-duplicates (cdr (x), if car (x) ∈ cdr (x) then insert (car (x), duplicates) else duplicates endif)

else duplicates endif Event: Enable list-duplicates; name this event ‘list-duplicates-off’.

Definition: remove-duplicates (x) = if listp (x)

then if car (x) ∈ cdr (x) then remove-duplicates (cdr (x))

else cons (car (x), remove-duplicates (cdr (x))) endif else x endif

Event: Enable remove-duplicates; name this event ‘remove-duplicates-off’.

Definition: append-list (x) = if listp (x) then append (car (x), append-list (cdr (x)))

else nil endif

Event: Enable append-list; name this event ‘append-list-off’.

Definition: flatten-list (x) = remove-duplicates (append-list (x))

Event: Enable flatten-list; name this event ‘flatten-list-off’.

Definition: is-head (x, y) = if listp (x) ∧ listp (y)

then (car (x) = car (y)) ∧ is-head (cdr (x), cdr (y))

else x ≃ nil endif

Event: Enable is-head; name this event ‘is-head-off’.

Definition: listify (x) = if listp (x) then cons (list (car (x)), listify (cdr (x)))

else nil endif

Event: Enable listify; name this event ‘listify-off’.

Definition: alistp (x) = if listp (x) then listp (car (x)) ∧ alistp (cdr (x))

else x = nil endif Event: Enable alistp; name this event ‘alistp-off’.

Definition: boundp (key, alist) = listp (lookup-module (key, alist))

Definition: alist-entry (key, alist) = lookup-module (key, alist)

Event: Enable alist-entry; name this event ‘alist-entry-off’.

Definition: unbind (key, alist) = delete-module (key, alist)

Definition: set-value (key, value, alist) = if alist-entry (key, alist) ≃ nil then cons (cons (key, value), alist)

elseif value = cdr (alist-entry (key, alist)) then alist else cons (cons (key, value), unbind (key, alist)) endif

Event: Enable set-value; name this event ‘set-value-off’.

Definition: union-values (keys, alist) = if listp (keys)

then value (car (keys), alist) ∪ union-values (cdr (keys), alist)

else nil endif

Event: Enable union-values; name this event ‘union-values-off’.

Definition: list-union-values (list-of-args, alist) = if listp (list-of-args)

then cons (union-values (car (list-of-args), alist),

list-union-values (cdr (list-of-args), alist))

else nil endif

Event: Enable list-union-values; name this event ‘list-union-values-off’.

Definition: unbound-keys (keys, alist) = if listp (keys)

then if boundp (car (keys), alist) then unbound-keys (cdr (keys), alist) else insert (car (keys), unbound-keys (cdr (keys), alist)) endif

else nil endif

Event: Enable unbound-keys; name this event ‘unbound-keys-off’.

Definition: unbind-list (keys, alist) = if listp (keys) then unbind (car (keys), unbind-list (cdr (keys), alist))

else alist endif

Theorem: lookup-module-in-delete-module ((k1 ≠ k2 ) ∧ lookup-module (k1 , m)) → lookup-module (k1 , delete-module (k2 , m))

Theorem: lookup-module-in-unbind-list ((k ∉ u) ∧ lookup-module (k, m)) → lookup-module (k, unbind-list (u, m))

Event: Enable lookup-module-in-delete-module; name this event ‘lookup-module-in-delete-module-off’.

Theorem: lessp-unbind-list-count ((k ∉ u) ∧ boundp (k, m)) → (count (unbind-list (cons (k, u), m)) < count (unbind-list (u, m)))

Event: Enable boundp; name this event ‘boundp-off’.

Event: Enable unbind; name this event ‘unbind-off’.

Event: Enable unbind-list; name this event ‘unbind-list-off’.

Event: Enable lookup-module-in-unbind-list; name this event ‘lookup-module-in-unbind-list-off’.

Definition: m-states-list (m-states) = if listp (m-states) ∨ (m-states = nil) then m-states

else list (m-states) endif

Event: Enable m-states-list; name this event ‘m-states-list-off’.

Definition: list-lessp (x, y) = if listp (x)

then if listp (y)

then if car (x) < car (y) then t elseif car (x) = car (y) then list-lessp (cdr (x), cdr (y)) else f endif

else f endif else listp (y) endif

Event: Enable list-lessp; name this event ‘list-lessp-off’.

Definition: token-lessp (x, y) = if litatom (x) ∧ litatom (y) then list-lessp (unpack (x), unpack (y))

elseif litatom (x) ∧ indexp (y) then t elseif indexp (x) ∧ litatom (y) then f elseif indexp (x) ∧ indexp (y) then if i-name (x) = i-name (y) then i-num (x) < i-num (y)

else list-lessp (unpack (i-name (x)), unpack (i-name (y))) endif else f endif

Event: Enable token-lessp; name this event ‘token-lessp-off’.

Definition: min-token-help (seed, list) = if listp (list)

then if token-lessp (seed, car (list))

then min-token-help (seed, cdr (list))

else min-token-help (car (list), cdr (list)) endif else seed endif

Event: Enable min-token-help; name this event ‘min-token-help-off’.

Definition: min-token (list) = if listp (list)

then if listp (cdr (list)) then min-token-help (car (list), cdr (list))

else car (list) endif else 0 endif

Event: Enable min-token; name this event ‘min-token-off’.

Theorem: min-token-help-lemma (min-token-help (seed, list) = seed) ∨ (min-token-help (seed, list) ∈ list)

Theorem: min-token-lemma listp (lst) → (min-token (lst) ∈ lst)

Theorem: delete*-count count (delete* (e, x)) < count (cons (e, x))

Theorem: delete*-lemma (e ∈ lst) → (count (delete* (e, lst)) < count (lst))

Definition: list-sort (list) = if listp (list)

then cons (min-token (list), list-sort (delete* (min-token (list), list)))

else nil endif

Event: Enable list-sort; name this event ‘list-sort-off’.

Definition: list-list-sort (list) = if listp (list)

then cons (list-sort (car (list)), list-list-sort (cdr (list)))

else nil endif

Event: Enable list-list-sort; name this event ‘list-list-sort-off’.

Event: Add the shell net-error, with recognizer function symbol net-errorp and 2 accessors: error-label, with type restriction (none-of) and default value false; error-body, with type restriction (none-of) and default value true.

Definition: report-error (err) = err

Event: Enable report-error; name this event ‘report-error-off’.

Definition: pred-error (label, body) = report-error (net-error (label, body))

Event: Enable pred-error; name this event ‘pred-error-off’.

Definition: error-entry (lst, label) = if listp (lst)

then if net-errorp (car (lst))

then if error-label (car (lst)) = label then car (lst) else error-entry (cdr (lst), label) endif

else error-entry (cdr (lst), label) endif else f endif Event: Enable error-entry; name this event ‘error-entry-off’.

Definition: net-errors (lst) = if listp (lst)

then if net-errorp (car (lst)) then cons (car (lst), net-errors (cdr (lst)))

else net-errors (cdr (lst)) endif else nil endif

Event: Enable net-errors; name this event ‘net-errors-off’.

Definition: collect-net-errors (lst) = if listp (lst)

then append (net-errors (car (lst)), collect-net-errors (cdr (lst)))

else nil endif

Event: Enable collect-net-errors; name this event ‘collect-net-errors-off’.

Definition: err-and (lst, label) = if net-errors (lst) ≃ nil then t

else pred-error (label, net-errors (lst)) endif

Event: Enable err-and; name this event ‘err-and-off’.

Definition: t-or-err (p, label, body) = if p ∧ (¬ net-errorp (p)) then t

else pred-error (label, body) endif

Event: Enable t-or-err; name this event ‘t-or-err-off’.

Definition: nlistp-or-err (x, label) = if x ≃ nil then t

else pred-error (label, x) endif

Event: Enable nlistp-or-err; name this event ‘nlistp-or-err-off’.

Definition: nil-or-err (x, label)

= if x = nil then t else pred-error (label, x) endif

Event: Enable nil-or-err; name this event ‘nil-or-err-off’.

Definition: subset-or-err (x, y, label) = if set-diff (x, y) ≃ nil then t

else pred-error (label, set-diff (x, y)) endif

Event: Enable subset-or-err; name this event ‘subset-or-err-off’.

Definition: no-duplicates-or-err (x, label) = if list-duplicates (x, nil) ≃ nil then t

else pred-error (label, list-duplicates (x, nil)) endif

Event: Enable no-duplicates-or-err; name this event ‘no-duplicates-or-err-off’.

Definition: disjoint-or-err (x, y, label) = if intersection (x, y) ≃ nil then t

else pred-error (label, intersection (x, y)) endif

Event: Enable disjoint-or-err; name this event ‘disjoint-or-err-off’.

Definition: all-bound-or-err (keys, alist, label) = if unbound-keys (keys, alist) ≃ nil then t

else pred-error (label, unbound-keys (keys, alist)) endif

Event: Enable all-bound-or-err; name this event ‘all-bound-or-err-off’.

Definition: label-error (x, label) = if net-errorp (x) then pred-error (label, x)

else x endif

Event: Enable label-error; name this event ‘label-error-off’.

Definition: list-collect-value (list-of-args, alist)

= if list-of-args ≃ nil then nil

else cons (flatten-list (collect-value (car (list-of-args), alist)), list-collect-value (cdr (list-of-args), alist)) endif

Event: Enable list-collect-value; name this event ‘list-collect-value-off’.

Definition: name-simple-okp (name) = (litatom (name) ∨ (indexp (name) ∧ litatom (i-name (name))))

Event: Enable name-simple-okp; name this event ‘name-simple-okp-off’.

Definition: name-list-simple-okp (name-list) = if name-list ≃ nil then name-list = nil

else name-simple-okp (car (name-list))

∧ (car (name-list) ∉ cdr (name-list))

∧ name-list-simple-okp (cdr (name-list)) endif

Event: Enable name-list-simple-okp; name this event ‘name-list-simple-okp-off’.

Definition: occ-syntax-simple-okp (occ, netlist) = (((4 = length (occ))

∨ ((5 = length (occ)) ∧ alistp (occ-annotation (occ)))) ∧ properp (occ) ∧ name-simple-okp (occ-name (occ)) ∧ name-list-simple-okp (occ-outputs (occ)) ∧ properp (occ-inputs (occ)) ∧ if primp (occ-function (occ))

then (length (primp2 (occ-function (occ), 'inputs)) = length (occ-inputs (occ))) ∧ (length (primp2 (occ-function (occ), 'outputs))

= length (occ-outputs (occ))) else listp (lookup-module (occ-function (occ), netlist))

∧ (length (module-inputs (lookup-module (occ-function (occ),

netlist)))

= length (occ-inputs (occ))) ∧ (length (module-outputs (lookup-module (occ-function (occ),

netlist)))

= length (occ-outputs (occ))) endif)

Event: Enable occ-syntax-simple-okp; name this event ‘occ-syntax-simple-okp-off’.

Definition: occ-body-syntax-simple-okp (body,

signals,

non-depends, occ-names, outputs, states, netlist)

= if body ≃ nil

then (body = nil)

∧ subset (outputs, signals) ∧ subset (non-depends, signals) ∧ subset (states, occ-names) ∧ (¬ duplicates? (signals)) ∧ (¬ duplicates? (occ-names)) elseif occ-syntax-simple-okp (car (body), netlist) then occ-body-syntax-simple-okp (cdr (body),

append (occ-outputs (car (body)), signals), append (set-diff (occ-inputs (car (body)), signals),

non-depends), cons (occ-name (car (body)), occ-names), outputs, states, netlist)

else f endif

Event: Enable occ-body-syntax-simple-okp; name this event ‘occ-body-syntax-simple-okp-off’.

Definition: module-syntax-simple-okp (netlist) = (((length (car (netlist)) = 5)

∨ ((length (car (netlist)) = 6)

∧ alistp (module-annotation (car (netlist))))) ∧ properp (car (netlist)) ∧ name-simple-okp (module-name (car (netlist))) ∧ (¬ lookup-module (module-name (car (netlist)), cdr (netlist))) ∧ (¬ primp (module-name (car (netlist)))) ∧ name-list-simple-okp (module-inputs (car (netlist)))

∧ name-list-simple-okp (module-outputs (car (netlist)))

∧ name-list-simple-okp (m-states-list (module-statenames (car (netlist)))) ∧ disjoint (module-inputs (car (netlist)),

module-outputs (car (netlist)))

∧ listp (module-occurrences (car (netlist)))

∧ occ-body-syntax-simple-okp (module-occurrences (car (netlist)), module-inputs (car (netlist)), nil, nil, module-outputs (car (netlist)), m-states-list (module-statenames (car (netlist))), cdr (netlist)))

Event: Enable module-syntax-simple-okp; name this event ‘module-syntax-simple-okp-off’.

Definition: netlist-syntax-simple-okp (netlist) = if netlist ≃ nil then netlist = nil

elseif module-syntax-simple-okp (netlist) then netlist-syntax-simple-okp (cdr (netlist)) else f endif

Event: Enable netlist-syntax-simple-okp; name this event ‘netlist-syntax-simple-okp-off’.

Definition: out-depends-simple (flg, x0 , x1 , netlist, module-database) = case on flg:

case = 0

then if primp (x0 )

then list-collect-value (primp2 (x0 , 'out-depends),

pairlist (primp2 (x0 , 'inputs), x1 ))

elseif lookup-module ('out-depends,

cdr (lookup-module (x0 , module-database)))

then list-collect-value (cdr (lookup-module ('out-depends,

cdr (lookup-module (x0 ,

module-database)))),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ))

elseif listp (lookup-module (x0 , netlist))

then if out-depends-simple (1, module-occurrences (lookup-module (x0 ,

netlist)),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), delete-module (x0 , netlist), module-database)

∧ subset (module-outputs (lookup-module (x0 , netlist)),

strip-cars (out-depends-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), delete-module (x0 ,

netlist),

module-database)))

then collect-value (module-outputs (lookup-module (x0 , netlist)),

out-depends-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), delete-module (x0 ,

netlist),

module-database))

else f endif else f endif

case = 1 then if x0 ≃ nil then x1

elseif subset (flatten-list (out-depends-simple (0, occ-function (car (x0 )), listify (occ-inputs (car (x0 ))), netlist, module-database)),

strip-cars (x1 )) ∧ out-depends-simple (0,

occ-function (car (x0 )),

listify (occ-inputs (car (x0 ))), netlist, module-database)

then out-depends-simple (1, cdr (x0 ), append (pairlist (occ-outputs (car (x0 )),

list-collect-value (out-depends-simple (0, occ-function (car (x0 )), listify (occ-inputs (car (x0 ))), netlist, module-database),

x1 )),

x1 ), netlist, module-database)

else f endif otherwise f endcase

Event: Enable out-depends-simple; name this event ‘out-depends-simple-off’.

Definition: simple-dependency-table (netlist) = if netlist ≃ nil then nil

elseif simple-dependency-table (cdr (netlist))

then if out-depends-simple (0, module-name (car (netlist)), listify (module-inputs (car (netlist))), netlist, simple-dependency-table (cdr (netlist)))

then cons (list (module-name (car (netlist)),

                      cons ('out-depends,

out-depends-simple (0, module-name (car (netlist)), listify (module-inputs (car (netlist))), netlist, simple-dependency-table (cdr (netlist))))),

simple-dependency-table (cdr (netlist)))

else f endif else f endif

Event: Enable simple-dependency-table; name this event ‘simple-dependency-table-off’.

Definition: output-dependencies-simple (module-name, args, netlist) = if (primp (module-name)

∧ (length (args) = length (primp2 (module-name, 'inputs)))) ∨ (lookup-module (module-name, netlist)

∧ (length (args)

= length (module-inputs (lookup-module (module-name,

netlist)))))

then list-list-sort (out-depends-simple (0, module-name, args, netlist, simple-dependency-table (netlist)))

else f endif

Event: Enable output-dependencies-simple; name this event ‘output-dependencies-simple-off’.

Definition: type-value-simple (n, alist, default) = if lookup-module (n, alist) ≃ nil

then if default then 'free else list (n) endif

elseif cdr (lookup-module (n, alist)) ≃ nil

then cdr (lookup-module (n, alist))

elseif cadr (lookup-module (n, alist)) = n

then if default then 'free

else cdr (lookup-module (n, alist)) endif else type-value-simple (cadr (lookup-module (n, alist)),

delete-module (n, alist), default) endif

Event: Enable type-value-simple; name this event ‘type-value-simple-off’.

Definition: collect-types (names, alist, default) = if names ≃ nil then nil

else cons (type-value-simple (car (names), alist, default), collect-types (cdr (names), alist, default)) endif

Event: Enable collect-types; name this event ‘collect-types-off’.

Definition: add-new-type (new-type-entry, known-types) = if cdr (new-type-entry) = 'free then known-types

elseif lookup-module (car (new-type-entry), known-types) ≃ nil then cons (new-type-entry, known-types) elseif cdr (new-type-entry)

= cdr (lookup-module (car (new-type-entry), known-types)) then known-types elseif listp (cdr (new-type-entry)) then cons (cons (cadr (new-type-entry),

cdr (lookup-module (car (new-type-entry), known-types))), known-types)

elseif listp (cdr (lookup-module (car (new-type-entry), known-types))) then if add-new-type (cons (cadr (lookup-module (car (new-type-entry),

known-types)),

cdr (new-type-entry)), delete-module (car (new-type-entry), known-types))

then cons (new-type-entry,

add-new-type (cons (cadr (lookup-module (car (new-type-entry),

known-types)),

cdr (new-type-entry)), delete-module (car (new-type-entry),

known-types)))

else f endif else f endif

Event: Enable add-new-type; name this event ‘add-new-type-off’.

Definition: update-known-types (new-types, known-types) = if (new-types ≃ nil) ∨ falsep (known-types) then known-types

else update-known-types (cdr (new-types), add-new-type (car (new-types), known-types)) endif

Event: Enable update-known-types; name this event ‘update-known-types-off’.

Definition: fix-dependent-types (types, alist) = if types ≃ nil then nil

elseif listp (car (types))

then cons (value (caar (types), alist),

fix-dependent-types (cdr (types), alist)) else cons (car (types), fix-dependent-types (cdr (types), alist)) endif

Event: Enable fix-dependent-types; name this event ‘fix-dependent-types-off’.

Definition: io-types-simple (flg, x0 , x1 , netlist, type-table) = case on flg: case = 0 then if primp (x0 )

then cons (primp2 (x0 , 'input-types),

fix-dependent-types (primp2 (x0 , 'output-types),

pairlist (primp2 (x0 , 'inputs), x1 )))

elseif lookup-module ('input-types,

cdr (lookup-module (x0 , type-table)))

∧ lookup-module ('output-types,

cdr (lookup-module (x0 , type-table)))

then cons (cdr (lookup-module ('input-types,

cdr (lookup-module (x0 , type-table)))),

fix-dependent-types (cdr (lookup-module ('output-types,

cdr (lookup-module (x0 ,

type-table)))),

pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 )))

elseif listp (lookup-module (x0 , netlist)) then if io-types-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil,

delete-module (x0 , netlist),

type-table)

then cons (collect-types (module-inputs (lookup-module (x0 ,

netlist)),

io-types-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil,

delete-module (x0 ,

netlist),

type-table),

t),

fix-dependent-types (collect-types (module-outputs (lookup-module (x0 ,

netlist)),

io-types-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil,

delete-module (x0 ,

netlist),

type-table),

f), pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 )))

else f endif else f endif

case = 1 then if x0 ≃ nil then x1

elseif listp (io-types-simple (0, occ-function (car (x0 )), collect-types (occ-inputs (car (x0 )),

x1 , f),

netlist, type-table))

then if update-known-types (pairlist (occ-outputs (car (x0 )),

cdr (io-types-simple (0, occ-function (car (x0 )), collect-types (occ-inputs (car (x0 )), x1 , f),

netlist,

type-table))),

update-known-types (pairlist (occ-inputs (car (x0 )),

car (io-types-simple (0, occ-function (car (x0 )), collect-types (occ-inputs (car (x0 )), x1 , f),

netlist,

type-table))),

x1 ))

then io-types-simple (1, cdr (x0 ), update-known-types (pairlist (occ-outputs (car (x0 )),

cdr (io-types-simple (0, occ-function (car (x0 )), collect-types (occ-inputs (car (x0 )), x1 , f),

netlist,

type-table))),

update-known-types (pairlist (occ-inputs (car (x0 )),

car (io-types-simple (0, occ-function (car (x0 )), collect-types (occ-inputs (car (x0 )), x1 , f),

netlist,

type-table))),

x1 )),

netlist, type-table)

else f endif else f endif otherwise f endcase

Event: Enable io-types-simple; name this event ‘io-types-simple-off’.

Definition: netlist-type-table-simple (netlist) = if netlist ≃ nil then nil

elseif netlist-type-table-simple (cdr (netlist))

then if listp (io-types-simple (0, module-name (car (netlist)), listify (module-inputs (car (netlist))), netlist, netlist-type-table-simple (cdr (netlist))))

then cons (list (module-name (car (netlist)),

                      cons ('input-types,

car (io-types-simple (0, module-name (car (netlist)), listify (module-inputs (car (netlist))), netlist, netlist-type-table-simple (cdr (netlist))))),

                      cons ('output-types,

cdr (io-types-simple (0, module-name (car (netlist)), listify (module-inputs (car (netlist))), netlist, netlist-type-table-simple (cdr (netlist)))))),

netlist-type-table-simple (cdr (netlist)))

else f endif else f endif

Event: Enable netlist-type-table-simple; name this event ‘netlist-type-table-simple-off’.

Definition: types-acceptablep (flg, x0 , netlist, acceptable-types, checked-modules) = case on flg:

case = 0

then if primp (x0 )

then subset (primp2 (x0 , 'input-types), acceptable-types) ∧ subset (fix-dependent-types (primp2 (x0 ,

                                                'output-types),

pairlist (primp2 (x0 ,

                                                       'inputs),

primp2 (x0 ,

                                                       'input-types))),

acceptable-types)

elseif x0 ∈ checked-modules then t elseif listp (lookup-module (x0 , netlist)) then types-acceptablep (1,

module-occurrences (lookup-module (x0 ,

netlist)),

delete-module (x0 , netlist),

acceptable-types, checked-modules)

else f endif case = 1 then if x0 ≃ nil then t

elseif types-acceptablep (0, occ-function (car (x0 )), netlist, acceptable-types, checked-modules)

then types-acceptablep (1, cdr (x0 ), netlist, acceptable-types, checked-modules)

else f endif otherwise f endcase

Event: Enable types-acceptablep; name this event ‘types-acceptablep-off’.

Definition: netlist-types-acceptable-list (netlist) = if netlist ≃ nil then nil

elseif netlist-types-acceptable-list (cdr (netlist))

then if types-acceptablep (0, module-name (car (netlist)), netlist,

                          '(boolp clk level clk-10 free),

netlist-types-acceptable-list (cdr (netlist)))

then cons (module-name (car (netlist)),

netlist-types-acceptable-list (cdr (netlist)))

else f endif else f endif

Event: Enable netlist-types-acceptable-list; name this event ‘netlist-types-acceptable-list-off’.

Definition: netlist-type-check-simple-okp (netlist) = if netlist-types-acceptable-list (netlist)

then netlist-type-table-simple (netlist)

else f endif

Event: Enable netlist-type-check-simple-okp; name this event ‘netlist-type-check-simple-okp-off’.

Definition: arg-types-match-simplep (actuals, formals) = if (actuals ≃ nil) ∨ (formals ≃ nil) then actuals = formals

else ((car (actuals) = car (formals)) ∨ (car (formals) = 'free)) ∧ arg-types-match-simplep (cdr (actuals), cdr (formals)) endif

Event: Enable arg-types-match-simplep; name this event ‘arg-types-match-simplep-off’.

Definition: arg-types-simple-okp (fn, arg-types, netlist) = if ¬ subset (arg-types, '(boolp clk level clk-10)) then f

elseif listp (io-types-simple (0, fn, arg-types, netlist, netlist-type-table-simple (netlist)))

then arg-types-match-simplep (arg-types,

car (io-types-simple (0, fn, arg-types, netlist,

netlist-type-table-simple (netlist))))

else f endif

Event: Enable arg-types-simple-okp; name this event ‘arg-types-simple-okp-off’.

Definition: make-ram-state (structure, width, bit-value) = if structure ≃ nil then ram (make-list (width, bit-value))

else cons (make-ram-state (car (structure), width, bit-value), make-ram-state (cdr (structure), width, bit-value)) endif

Event: Enable make-ram-state; name this event ‘make-ram-state-off’.

Definition: state-type-requirement-simple (flg, x0 , x1 , netlist, type-table) = case on flg:

case = 0

then if primp (x0 )

then if lookup-module ('state-types, cdr (primp (x0 )))

then eval$ (t,

cdr (lookup-module ('state-types,

cdr (primp (x0 )))),

nil)

else t endif elseif lookup-module (x0 , type-table) then if lookup-module ('state-types,

cdr (lookup-module (x0 , type-table)))

then cdr (lookup-module ('state-types,

cdr (lookup-module (x0 , type-table))))

else t endif elseif listp (lookup-module (x0 , netlist)) then if set-equal (m-states-list (module-statenames (lookup-module (x0 ,

netlist))),

strip-cars (state-type-requirement-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil,

delete-module (x0 ,

netlist),

type-table)))

then if module-statenames (lookup-module (x0 , netlist)) = nil then t else collect-states (module-statenames (lookup-module (x0 ,

netlist)),

state-type-requirement-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil,

delete-module (x0 ,

netlist),

type-table)) endif

else f endif else f endif

case = 1 then if x0 ≃ nil then x1

elseif truep (state-type-requirement-simple (0, occ-function (car (x0 )), nil, netlist, type-table))

then state-type-requirement-simple (1, cdr (x0 ), x1 , netlist, type-table)

elseif state-type-requirement-simple (0, occ-function (car (x0 )), nil, netlist, type-table)

then state-type-requirement-simple (1, cdr (x0 ), cons (cons (occ-name (car (x0 )),

state-type-requirement-simple (0, occ-function (car (x0 )), nil, netlist, type-table)),

x1 ), netlist, type-table)

else f endif otherwise f endcase

Event: Enable state-type-requirement-simple; name this event ‘state-type-requirement-simple-off’.

Definition: netlist-state-types-simple (netlist) = if netlist ≃ nil then nil

elseif netlist-state-types-simple (cdr (netlist)) then if truep (state-type-requirement-simple (0,

module-name (car (netlist)),

nil, netlist, netlist-state-types-simple (cdr (netlist))))

then netlist-state-types-simple (cdr (netlist)) elseif state-type-requirement-simple (0,

module-name (car (netlist)),

nil, netlist, netlist-state-types-simple (cdr (netlist)))

then cons (list (module-name (car (netlist)),

                  cons ('state-types,

state-type-requirement-simple (0, module-name (car (netlist)), nil, netlist, netlist-state-types-simple (cdr (netlist))))),

netlist-state-types-simple (cdr (netlist)))

else f endif else f endif

Event: Enable netlist-state-types-simple; name this event ‘netlist-state-types-simple-off’.

Definition: state-simple-okp (state, type) = if truep (type) then state = nil

elseif type = 'boolp then boolp (state) elseif ramp (type) then ramp (state)

∧ state-simple-okp (ram-guts (state), ram-guts (type)) elseif romp (type) then romp (state)

∧ state-simple-okp (rom-guts (state), rom-guts (type)) elseif stubp (type) then stubp (state)

∧ state-simple-okp (stub-guts (state), stub-guts (type)) elseif listp (type) then listp (state)

∧ state-simple-okp (car (state), car (type)) ∧ state-simple-okp (cdr (state), cdr (type))

elseif type = nil then state = nil

else f endif

Event: Enable state-simple-okp; name this event ‘state-simple-okp-off’.

Definition: apply-state-simple-okp (fn, state, netlist) = state-simple-okp (state,

state-type-requirement-simple (0, fn, nil, netlist, netlist-state-types-simple (netlist)))

Event: Enable apply-state-simple-okp; name this event ‘apply-state-simple-okp-off’.

Definition: fix-dependent-lds (lds, alist) = if lds ≃ nil then lds

else cons (if litatom (car (lds)) ∨ indexp (car (lds)) then value (car (lds), alist) elseif car (lds) ≃ nil then car (lds) else fix-dependent-lds (car (lds), alist) endif, fix-dependent-lds (cdr (lds), alist)) endif

Event: Enable fix-dependent-lds; name this event ‘fix-dependent-lds-off’.

Definition: parent-synonym-simple (name, slist) = if listp (lookup-module (name, slist))

then if litatom (cdr (lookup-module (name, slist)))

∨ indexp (cdr (lookup-module (name, slist))) then parent-synonym-simple (cdr (lookup-module (name, slist)),

delete-module (name, slist))

else name endif else name endif

Event: Enable parent-synonym-simple; name this event ‘parent-synonym-simple-off’.

Definition: add-loading-simple (name, loading, ld-list) = if lookup-module (name, ld-list) ≃ nil

then cons (cons (name, if listp (loading) then loading else list (loading) endif),

ld-list)

else cons (cons (name, if listp (loading) then append (loading,

cdr (lookup-module (name, ld-list)))

else cons (loading,

cdr (lookup-module (name, ld-list))) endif),

delete-module (name, ld-list)) endif

Event: Enable add-loading-simple; name this event ‘add-loading-simple-off’.

Definition: add-loading-simples (names, loadings, ld-list) = if names ≃ nil then ld-list

else add-loading-simples (cdr (names), cdr (loadings), add-loading-simple (car (names),

car (loadings), ld-list)) endif

Event: Enable add-loading-simples; name this event ‘add-loading-simples-off’.

Definition: sum-numbers (lst) = if lst ≃ nil then 0

elseif car (lst) ∈ N then car (lst) + sum-numbers (cdr (lst))

else sum-numbers (cdr (lst)) endif

Event: Enable sum-numbers; name this event ‘sum-numbers-off’.

Definition: extract-names-simple (lst) = if lst ≃ nil then nil

elseif (litatom (car (lst)) ∨ indexp (car (lst)))

∧ (car (lst) ∉ cdr (lst)) then cons (car (lst), extract-names-simple (cdr (lst))) else extract-names-simple (cdr (lst)) endif Event: Enable extract-names-simple; name this event ‘extract-names-simple-off’.

Definition: sum-loading (ld) = cons (car (ld),

if extract-names-simple (cdr (ld)) ≃ nil then list (sum-numbers (cdr (ld))) elseif sum-numbers (cdr (ld)) ≃ 0 then extract-names-simple (cdr (ld)) else cons (sum-numbers (cdr (ld)),

extract-names-simple (cdr (ld))) endif)

Event: Enable sum-loading; name this event ‘sum-loading-off’.

Definition: sum-loadings (lds) = if lds ≃ nil then nil

else cons (sum-loading (car (lds)), sum-loadings (cdr (lds))) endif

Event: Enable sum-loadings; name this event ‘sum-loadings-off’.

Definition: fix-loadings (slist, lds) = if slist ≃ nil then sum-loadings (lds)

elseif litatom (cdar (slist)) ∨ indexp (cdar (slist))

then fix-loadings (cdr (slist),

add-loading-simple (cdar (slist), value (caar (slist), lds), delete-module (caar (slist), lds)))

else fix-loadings (cdr (slist), lds) endif

Event: Enable fix-loadings; name this event ‘fix-loadings-off’.

Definition: fix-drives (drs, slist) = if drs ≃ nil then nil

elseif litatom (cdar (drs)) ∨ indexp (cdar (drs))

then cons (cons (caar (drs), parent-synonym-simple (cdar (drs), slist)),

fix-drives (cdr (drs), slist)) else cons (car (drs), fix-drives (cdr (drs), slist)) endif

Event: Enable fix-drives; name this event ‘fix-drives-off’.

Definition: net-drives (drs, lds) = if drs ≃ nil then nil

elseif cdar (drs) ∈ N

then if cdar (drs) < sum-numbers (value (caar (drs), lds)) then f elseif net-drives (cdr (drs), lds) then cons (cons (caar (drs),

cdar (drs) − sum-numbers (value (caar (drs), lds))), net-drives (cdr (drs), lds))

else f endif elseif net-drives (cdr (drs), lds) then cons (car (drs), net-drives (cdr (drs), lds)) else f endif

Event: Enable net-drives; name this event ‘net-drives-off’.

Definition: external-loading (ld-lst, external-names) = if ld-lst ≃ nil then ld-lst

elseif (litatom (car (ld-lst)) ∨ indexp (car (ld-lst))) ∧ (car (ld-lst) ∉ external-names) then external-loading (cdr (ld-lst), external-names) else cons (car (ld-lst),

external-loading (cdr (ld-lst), external-names)) endif

Event: Enable external-loading; name this event ‘external-loading-off’.

Definition: collect-loadings-simple (names, loadings, external-names) = if names ≃ nil then nil

elseif lookup-module (car (names), loadings)

then cons (if external-loading (value (car (names), loadings),

external-names) ≃ nil then 0

elseif cdr (external-loading (value (car (names), loadings),

external-names)) ≃ nil

then car (external-loading (value (car (names), loadings),

external-names))

else external-loading (value (car (names), loadings),

external-names) endif, collect-loadings-simple (cdr (names), loadings, external-names))

else cons (0,

collect-loadings-simple (cdr (names), loadings, external-names)) endif Event: Enable collect-loadings-simple; name this event ‘collect-loadings-simple-off’.

Definition: collect-drives-simple (names, drives, external-names) = if names ≃ nil then nil

elseif (¬ (litatom (value (car (names), drives))

∨ indexp (value (car (names), drives)))) ∨ (value (car (names), drives) ∈ external-names)

then cons (value (car (names), drives),

collect-drives-simple (cdr (names), drives, external-names))

elseif parent-synonym-simple (value (car (names), drives), drives)

= value (car (names), drives) then cons (value (value (car (names), drives), drives), collect-drives-simple (cdr (names),

cons (cons (value (car (names), drives), car (names)), cons (cons (car (names),

value (value (car (names),

drives), drives)), delete-module (car (names),

delete-module (value (car (names),

drives), drives)))),

external-names))

else cons (parent-synonym-simple (value (car (names), drives), drives),

collect-drives-simple (cdr (names), drives, external-names)) endif

Event: Enable collect-drives-simple; name this event ‘collect-drives-simple-off’.

Definition: loadings-and-drives-simple (flg, x0 , x1 , x2 , netlist, lds-table) = case on flg:

case = 0

then if primp (x0 )

then cons (fix-dependent-lds (primp2 (x0 , 'loadings),

append (pairlist (primp2 (x0 , 'inputs), x1 ), pairlist (primp2 (x0 ,

                                                       'outputs),

x2 ))),

fix-dependent-lds (primp2 (x0 , 'drives),

append (pairlist (primp2 (x0 , 'inputs),

x1 ), pairlist (primp2 (x0 ,

       'outputs),

x2 ))))

elseif lookup-module ('loadings,

cdr (lookup-module (x0 , lds-table)))

∧ lookup-module ('drives,

cdr (lookup-module (x0 , lds-table)))

then cons (fix-dependent-lds (cdr (lookup-module ('loadings,

cdr (lookup-module (x0 ,

lds-table)))),

append (pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), pairlist (module-outputs (lookup-module (x0 ,

netlist)),

x2 ))),

fix-dependent-lds (cdr (lookup-module ('drives,

cdr (lookup-module (x0 ,

lds-table)))),

append (pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), pairlist (module-outputs (lookup-module (x0 ,

netlist)),

x2 ))))

elseif listp (lookup-module (x0 , netlist)) then if loadings-and-drives-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil, nil, delete-module (x0 , netlist), lds-table)

then cons (fix-dependent-lds (collect-loadings-simple (module-inputs (lookup-module (x0 ,

netlist)),

car (loadings-and-drives-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil, nil, delete-module (x0 ,

netlist),

lds-table)),

module-outputs (lookup-module (x0 ,

netlist))),

append (pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), pairlist (module-outputs (lookup-module (x0 ,

netlist)),

x2 ))),

fix-dependent-lds (collect-drives-simple (module-outputs (lookup-module (x0 ,

netlist)),

cdr (loadings-and-drives-simple (1,

module-occurrences (lookup-module (x0 ,

netlist)),

nil, nil, delete-module (x0 ,

netlist),

lds-table)),

append (module-inputs (lookup-module (x0 ,

netlist)),

module-outputs (lookup-module (x0 ,

netlist)))),

append (pairlist (module-inputs (lookup-module (x0 ,

netlist)),

x1 ), pairlist (module-outputs (lookup-module (x0 ,

netlist)),

x2 ))))

else f endif else f endif

case = 1 then if x0 ≃ nil

then if fix-loadings (fix-drives (x2 , x2 ), x1 )

∧ net-drives (fix-drives (x2 , x2 ),

fix-loadings (fix-drives (x2 , x2 ), x1 ))

then cons (fix-loadings (fix-drives (x2 , x2 ), x1 ),

net-drives (fix-drives (x2 , x2 ),

fix-loadings (fix-drives (x2 , x2 ), x1 )))

else f endif elseif loadings-and-drives-simple (0,

occ-function (car (x0 )), occ-inputs (car (x0 )), occ-outputs (car (x0 )), netlist, lds-table)

then loadings-and-drives-simple (1, cdr (x0 ), add-loading-simples (occ-inputs (car (x0 )),

car (loadings-and-drives-simple (0, occ-function (car (x0 )), occ-inputs (car (x0 )), occ-outputs (car (x0 )), netlist, lds-table)),

x1 ),

append (pairlist (occ-outputs (car (x0 )),

cdr (loadings-and-drives-simple (0, occ-function (car (x0 )), occ-inputs (car (x0 )), occ-outputs (car (x0 )), netlist, lds-table))),

x2 ), netlist, lds-table)

else f endif otherwise f endcase

Event: Enable loadings-and-drives-simple; name this event ‘loadings-and-drives-simple-off’.

Definition: netlist-loadings-and-drives-simple (netlist) = if netlist ≃ nil then nil

elseif netlist-loadings-and-drives-simple (cdr (netlist)) then if loadings-and-drives-simple (0,

module-name (car (netlist)), module-inputs (car (netlist)), module-outputs (car (netlist)), netlist, netlist-loadings-and-drives-simple (cdr (netlist)))

then cons (list (module-name (car (netlist)),

cons ('loadings,

car (loadings-and-drives-simple (0, module-name (car (netlist)), module-inputs (car (netlist)), module-outputs (car (netlist)), netlist, netlist-loadings-and-drives-simple (cdr (netlist))))),

                  cons ('drives,

cdr (loadings-and-drives-simple (0, module-name (car (netlist)), module-inputs (car (netlist)), module-outputs (car (netlist)), netlist, netlist-loadings-and-drives-simple (cdr (netlist)))))),

netlist-loadings-and-drives-simple (cdr (netlist)))

else f endif else f endif

Event: Enable netlist-loadings-and-drives-simple; name this event ‘netlistloadings-and-drives-simple-off’.

Definition: top-level-predicate-simple (netlist) = if ¬ netlist-syntax-simple-okp (netlist)

then 'netlist-syntax-simple-okp-error

elseif ¬ simple-dependency-table (netlist)

then 'dependency-table-simple-error

elseif ¬ netlist-type-check-simple-okp (netlist)

then 'netlist-type-check-simple-okp-error

elseif ¬ netlist-state-types-simple (netlist)

then 'netlist-state-types-simple-error

elseif ¬ netlist-loadings-and-drives-simple (netlist)

then 'netlist-loadings-and-drives-simple-error

else t endif

Definition: name-okp (name) = if litatom (name) then t

else indexp (name) ∧ litatom (i-name (name)) endif

Event: Enable name-okp; name this event ‘name-okp-off’.

Definition: bad-names (name-list) = if listp (name-list)

else nil endif

then if name-okp (car (name-list)) then bad-names (cdr (name-list)) else insert (car (name-list), bad-names (cdr (name-list))) endif Event: Enable bad-names; name this event ‘bad-names-off’.

Definition: name-list-errors (name-list, duplicates-ok?) = list (nlistp-or-err (bad-names (name-list), 'bad-names),

if duplicates-ok? then t

else no-duplicates-or-err (name-list, 'duplicates) endif, nil-or-err (last-cdr (name-list), 'not-proper-list))

Event: Enable name-list-errors; name this event ‘name-list-errors-off’.

Definition: name-list-ok (name-list, label, duplicates-ok?) = err-and (name-list-errors (name-list, duplicates-ok?), label)

Event: Enable name-list-ok; name this event ‘name-list-ok-off’.

Definition: occ-arg-length-error (fn, expected-args, actual-args, label) = t-or-err (length (expected-args) = length (actual-args),

label,

           list ('occ-function,

fn,

list ('expected, length (expected-args)), list ('got, length (actual-args))))

Event: Enable occ-arg-length-error; name this event ‘occ-arg-length-error-off’.

Definition: occ-form-ok (occ, o-length) = err-and (list (t-or-err ((4 = o-length) ∨ (5 = o-length),

                     'bad-occurrence-length,

o-length), nil-or-err (last-cdr (occ), 'not-proper-list)),

           'occurrence-form)

Event: Enable occ-form-ok; name this event ‘occ-form-ok-off’.

Definition: occ-name-ok (o-name, o-length)

= if if o-length < 1 then f

else t endif then label-error (t-or-err (name-okp (o-name), 'bad-name, o-name),

                  'occurrence-name)

else t endif

Event: Enable occ-name-ok; name this event ‘occ-name-ok-off’.

Definition: occ-outputs-ok (o-outs, o-length) = if if o-length < 2 then f

else t endif then name-list-ok (o-outs, 'occurrence-outputs, f) else t endif

Event: Enable occ-outputs-ok; name this event ‘occ-outputs-ok-off’.

Definition: occ-inputs-ok (o-ins, o-length) = if if o-length < 4 then f

else t endif then name-list-ok (o-ins, 'occurrence-inputs, t) else t endif

Event: Enable occ-inputs-ok; name this event ‘occ-inputs-ok-off’.

Definition: occ-function-ok (o-fn, o-ins, o-outs, o-length, netlist) = if o-length < 3 then t

elseif primp (o-fn)

then err-and (list (if if o-length < 4 then f

else t endif then occ-arg-length-error (o-fn,

primp2 (o-fn, 'inputs),

o-ins,

                                          'wrong-number-of-inputs)

else t endif,

occ-arg-length-error (o-fn, primp2 (o-fn, 'outputs), o-outs,

                                     'wrong-number-of-outputs)),
                'occurrence-function)

elseif listp (lookup-module (o-fn, netlist)) then err-and (list (if if o-length < 4 then f

else t endif then occ-arg-length-error (o-fn,

module-inputs (lookup-module (o-fn,

netlist)),

o-ins,

                                          'wrong-number-of-inputs)

else t endif,

occ-arg-length-error (o-fn,

module-outputs (lookup-module (o-fn,

netlist)),

o-outs,

                                     'wrong-number-of-outputs)),
                'occurrence-function)
    else pred-error ('unknown-occurrence-function, o-fn) endif

Event: Enable occ-function-ok; name this event ‘occ-function-ok-off’.

Definition: occ-annotation-ok (o-anno, o-length) = if o-length = 5

then label-error (t-or-err (alistp (o-anno), 'not-alist, o-anno),

                  'occurrence-annotation)

else t endif

Event: Enable occ-annotation-ok; name this event ‘occ-annotation-ok-off’.

Definition: occ-syntax-errors (occ, netlist) = list (occ-form-ok (occ, length (occ)),

occ-name-ok (occ-name (occ), length (occ)), occ-outputs-ok (occ-outputs (occ), length (occ)), occ-inputs-ok (occ-inputs (occ), length (occ)), occ-function-ok (occ-function (occ),

occ-inputs (occ), occ-outputs (occ), length (occ), netlist),

occ-annotation-ok (occ-annotation (occ), length (occ)))

Event: Enable occ-syntax-errors; name this event ‘occ-syntax-errors-off’.

Definition: occ-syntax-ok (occ, netlist)

= err-and (occ-syntax-errors (occ, netlist), list ('occurrence, occ-name (occ)))

Event: Enable occ-syntax-ok; name this event ‘occ-syntax-ok-off’.

Definition: initial-occ-syntax-data (m-ins, m-outs) = cons (cons ('signals, m-ins),

cons (cons ('pending-io, intersection (m-ins, m-outs)),

             '((non-depends) (occ-names))))

Event: Enable initial-occ-syntax-data; name this event ‘initial-occ-syntax-data-off’.

Definition: update-occ-syntax-data (occ, occ-data) = list (cons ('signals,

append (if listp (value ('pending-io, occ-data)) then set-diff (occ-outputs (occ),

value ('pending-io, occ-data))

else occ-outputs (occ) endif, value ('signals, occ-data))),

       cons ('pending-io,

set-diff (value ('pending-io, occ-data), occ-outputs (occ))),

       cons ('non-depends,

append (set-diff (occ-inputs (occ), value ('signals, occ-data)),

value ('non-depends, occ-data))),

       cons ('occ-names,

cons (occ-name (occ), value ('occ-names, occ-data))))

Event: Enable update-occ-syntax-data; name this event ‘update-occ-syntax-data-off’.

Definition: composite-occ-body-syntax-errors (body, occ-data, outputs, states) = list (nil-or-err (body, 'not-proper-list),

nlistp-or-err (value ('pending-io, occ-data),

                  'io-signals-not-in-outputs),

subset-or-err (outputs, value ('signals, occ-data),

                   'outputs-not-in-signals),

subset-or-err (value ('non-depends, occ-data), value ('signals, occ-data),

                   'non-depends-not-in-signals),

subset-or-err (states, value ('occ-names, occ-data),

                   'states-not-in-occ-names),

no-duplicates-or-err (value ('signals, occ-data),

                         'duplicates-in-signals),

no-duplicates-or-err (value ('occ-names, occ-data),

                         'duplicates-in-occ-names))

Event: Enable composite-occ-body-syntax-errors; name this event ‘compositeocc-body-syntax-errors-off’.

Definition: occ-body-syntax-errors (body, occ-data, outputs, states, netlist) = if body ≃ nil

then composite-occ-body-syntax-errors (body, occ-data, outputs, states) else cons (occ-syntax-ok (car (body), netlist),

occ-body-syntax-errors (cdr (body),

update-occ-syntax-data (car (body),

occ-data),

outputs, states, netlist)) endif

Event: Enable occ-body-syntax-errors; name this event ‘occ-body-syntax-errors-off’.

Definition: module-form-ok (module, m-length) = err-and (list (t-or-err ((m-length = 5) ∨ (m-length = 6),

                     'bad-module-length,

m-length), nil-or-err (last-cdr (module), 'not-proper-list)),

           'module-form)

Event: Enable module-form-ok; name this event ‘module-form-ok-off’.

Definition: module-name-ok (m-name, m-length, netlist) = if if m-length < 1 then f

else t endif then err-and (list (t-or-err (name-okp (m-name), 'bad-name, m-name),

t-or-err (¬ lookup-module (m-name, netlist),

                          'duplicate-module-defns,

m-name), t-or-err (¬ primp (m-name),

                          'module-name-same-as-primitive,

m-name)),

                'module-name)

else t endif

Event: Enable module-name-ok; name this event ‘module-name-ok-off’.

Definition: module-inputs-ok (m-ins, m-length) = if if m-length < 2 then f

else t endif then name-list-ok (m-ins, 'module-inputs, f) else t endif

Event: Enable module-inputs-ok; name this event ‘module-inputs-ok-off’.

Definition: module-outputs-ok (m-outs, m-length) = if if m-length < 3 then f

else t endif then name-list-ok (m-outs, 'module-outputs, f) else t endif

Event: Enable module-outputs-ok; name this event ‘module-outputs-ok-off’.

Definition: states-list-or-nil (m-states, m-length) = if if m-length < 5 then f

else t endif then m-states-list (m-states) else nil endif

Event: Enable states-list-or-nil; name this event ‘states-list-or-nil-off’.

Definition: module-occurrences-ok (m-occs, m-ins, m-outs, m-states, m-length, netlist) = if if m-length < 4 then f

else t endif then err-and (cons (t-or-err (listp (m-occs), 'no-occurrences, m-occs), occ-body-syntax-errors (m-occs,

initial-occ-syntax-data (m-ins,

m-outs),

m-outs, states-list-or-nil (m-states,

m-length),

netlist)),

                'module-occurrences)

else t endif

Event: Enable module-occurrences-ok; name this event ‘module-occurrences-ok-off’.

Definition: module-statenames-ok (m-states, m-length) = if if m-length < 5 then f

else t endif then err-and (cons (t-or-err (if listp (m-states)

then listp (cdr (m-states))

else t endif,

                           'list-of-length-1-not-allowed,

m-states), name-list-errors (m-states-list (m-states), f)),

                'module-statenames)

else t endif

Event: Enable module-statenames-ok; name this event ‘module-statenames-ok-off’.

Definition: module-annotation-ok (m-anno, m-length) = if m-length = 6

then label-error (t-or-err (alistp (m-anno), 'not-alist, m-anno),

                  'module-annotation)

else t endif

Event: Enable module-annotation-ok; name this event ‘module-annotation-ok-off’.

Definition: module-syntax-errors (module, netlist) = list (module-form-ok (module, length (module)),

module-name-ok (module-name (module), length (module), netlist), module-inputs-ok (module-inputs (module), length (module)), module-outputs-ok (module-outputs (module), length (module)), module-occurrences-ok (module-occurrences (module),

module-inputs (module), module-outputs (module), module-statenames (module), length (module), netlist),

module-statenames-ok (module-statenames (module), length (module)), module-annotation-ok (module-annotation (module), length (module)))

Event: Enable module-syntax-errors; name this event ‘module-syntax-errors-off’.

Definition: module-syntax-ok (module, netlist) = err-and (module-syntax-errors (module, netlist),

list ('module, module-name (module)))

Event: Enable module-syntax-ok; name this event ‘module-syntax-ok-off’.

Definition: netlist-syntax-errors (netlist) = if listp (netlist)

then cons (module-syntax-ok (car (netlist), cdr (netlist)), netlist-syntax-errors (cdr (netlist))) else list (nil-or-err (netlist, 'not-proper-list)) endif

Event: Enable netlist-syntax-errors; name this event ‘netlist-syntax-errors-off’.

Definition: netlist-syntax-ok (netlist) = err-and (netlist-syntax-errors (netlist), 'netlist-syntax-errors)

Event: Enable netlist-syntax-ok; name this event ‘netlist-syntax-ok-off’.

Definition: letterp (char) = (char ∈ unpack ('abcdefghijklmnopqrstuvwxyz))

Event: Enable letterp; name this event ‘letterp-off’.

Definition: digitp (char) = (char ∈ cdr (unpack ('a0123456789)))

Event: Enable digitp; name this event ‘digitp-off’.

Definition: bad-lsi-name-chars (char-list, special-characters) = if listp (char-list)

then if letterp (car (char-list))

∨ digitp (car (char-list))

∨ (car (char-list) ∈ special-characters) then bad-lsi-name-chars (cdr (char-list), special-characters) else insert (car (char-list),

bad-lsi-name-chars (cdr (char-list),

special-characters)) endif

else nil endif

Event: Enable bad-lsi-name-chars; name this event ‘bad-lsi-name-chars-off’.

Definition: lsi-keywords

= '(action angle annotations bloat block bus cell celstat
      chksum clk line direction dummy end flip function
      hm bidi hm input hm output library name nc net pin
      powercells priority psecured region scale technology
      tsecured via wire)

Event: Enable lsi-keywords; name this event ‘lsi-keywords-off’.

Event: Enable *1*lsi-keywords; name this event ‘g*1*lsi-keywords-off’.

Definition: lsi-name-ok (name, token-size) = if name ∈ lsi-keywords

then pred-error ('lsi-name-is-keyword, name)

elseif litatom (name)

then err-and (list (t-or-err (if token-size < length (unpack (name)) then f else t endif,

                          'name-too-long,
                          list (list ('name-length,

length (unpack (name))),

                              list ('max-allowed-length,

token-size))),

t-or-err (letterp (car (unpack (name))),

                          'name-begins-with-nonletter,

car (unpack (name))), nlistp-or-err (bad-lsi-name-chars (cdr (unpack (name)),

cdr (unpack ('a- ))),

                              'illegal-chars-in-name),

t-or-err (last-cdr (unpack (name)) = 0,

                          'not-standard-litatom,

list ('last-cdr, last-cdr (unpack (name))))),

                list ('bad-lsi-name, name))

else pred-error ('lsi-name-not-litatom, name) endif

Event: Enable lsi-name-ok; name this event ‘lsi-name-ok-off’.

Definition: lsi-bad-names (name-list, token-size) = if listp (name-list)

then cons (lsi-name-ok (car (name-list), token-size),

lsi-bad-names (cdr (name-list), token-size))

else nil endif

Event: Enable lsi-bad-names; name this event ‘lsi-bad-names-off’.

Definition: lsi-name-list-errors (name-list, token-size, duplicates-ok?) = list (err-and (lsi-bad-names (name-list, token-size), 'bad-lsi-names),

if duplicates-ok? then t

else no-duplicates-or-err (name-list, 'duplicates) endif, nil-or-err (last-cdr (name-list), 'not-proper-list))

Event: Enable lsi-name-list-errors; name this event ‘lsi-name-list-errors-off’.

Definition: lsi-name-list-ok (name-list, token-size, label, duplicates-ok?) = err-and (lsi-name-list-errors (name-list, token-size, duplicates-ok?),

label)

Event: Enable lsi-name-list-ok; name this event ‘lsi-name-list-ok-off’.

Definition: lsi-function-name (fname) = if primp (fname) ∧ primp-lookup (fname, 'lsi-name)

then if listp (primp2 (fname, 'lsi-name))

then car (primp2 (fname, 'lsi-name)) else primp2 (fname, 'lsi-name) endif

else fname endif Event: Enable lsi-function-name; name this event ‘lsi-function-name-off’.

Definition: name-length (name) = length (unpack (name))

Event: Enable name-length; name this event ‘name-length-off’.

Definition: hierarchical-name-max (n1 , n2 ) = if (n1 ≃ nil) ∧ (n2 ≃ nil) then 0

elseif n1 ≃ nil then n2 elseif n2 ≃ nil then n1 elseif car (n1 ) < car (n2 ) then n2 else n1 endif

Event: Enable hierarchical-name-max; name this event ‘hierarchical-name-max-off’.

Definition: max-hierarchical-length-and-name (names) = if listp (names)

then hierarchical-name-max (list (1 + name-length (car (names)),

car (names)), max-hierarchical-length-and-name (cdr (names)))

else 0 endif

Event: Enable max-hierarchical-length-and-name; name this event ‘max-hierarchical-length-and-name-off’.

Definition: max-occ-hierarchical-name (occ, hierarchical-table, hierarchical-size) = if listp (if primp (occ-function (occ))

then max-hierarchical-length-and-name (append (occ-inputs (occ),

occ-outputs (occ)))

else value (occ-function (occ), hierarchical-table) endif) then if if hierarchical-size < ((1 + name-length (occ-name (occ)))

+ car (if primp (occ-function (occ))

then max-hierarchical-length-and-name (append (occ-inputs (occ),

occ-outputs (occ)))

else value (occ-function (occ),

hierarchical-table) endif))

then f

else t endif then cons ((1 + name-length (occ-name (occ)))

+ car (if primp (occ-function (occ))

then max-hierarchical-length-and-name (append (occ-inputs (occ),

occ-outputs (occ)))

else value (occ-function (occ),

hierarchical-table) endif),

cons (occ-name (occ),

cdr (if primp (occ-function (occ))

then max-hierarchical-length-and-name (append (occ-inputs (occ),

occ-outputs (occ)))

else value (occ-function (occ),

hierarchical-table) endif)))

         else pred-error ('hierarchical-name-too-long,
                      list (list ('name-length,

(1 + name-length (occ-name (occ))) + car (if primp (occ-function (occ))

then max-hierarchical-length-and-name (append (occ-inputs (occ),

occ-outputs (occ)))

else value (occ-function (occ),

hierarchical-table) endif)),

                          list ('max-allowed-length,

hierarchical-size), list ('name,

cons (occ-name (occ),

cdr (if primp (occ-function (occ))

then max-hierarchical-length-and-name (append (occ-inputs (occ),

occ-outputs (occ)))

else value (occ-function (occ),

hierarchical-table) endif))))) endif

else 0 endif

Event: Enable max-occ-hierarchical-name; name this event ‘max-occ-hierarchical-name-off’.

Definition: lsi-occ-name-ok (o-name, o-length, o-outs, occ-data, token-size) = if if o-length < 1 then f

else t endif then err-and (list (lsi-name-ok (o-name, token-size),

t-or-err (o-name ∉ value ('signals, occ-data),

                          'occ-name-is-signal,

o-name), t-or-err ((cdr (o-outs) = nil)

∨ (o-name ∉ o-outs),

                          'occ-name-is-same-as-output-name,

o-name)),

                'occurrence-name)

else t endif

Event: Enable lsi-occ-name-ok; name this event ‘lsi-occ-name-ok-off’.

Definition: lsi-occ-outputs-ok (o-outs, o-length, occ-data, token-size) = if if o-length < 2 then f

else t endif then err-and (list (lsi-name-list-ok (o-outs,

token-size,

                                 'occ-outputs,

f),

disjoint-or-err (o-outs, value ('occ-names, occ-data),

                                'occ-outputs-in-occ-names)),
                'occurrence-outputs)

else t endif

Event: Enable lsi-occ-outputs-ok; name this event ‘lsi-occ-outputs-ok-off’.

Definition: lsi-occ-inputs-ok (o-ins, o-length, token-size) = if if o-length < 4 then f

else t endif then lsi-name-list-ok (o-ins, token-size, 'occurrence-inputs, t) else t endif

Event: Enable lsi-occ-inputs-ok; name this event ‘lsi-occ-inputs-ok-off’.

Definition: lsi-occ-syntax-ok (occ, hierarchical-name-error, occ-data, netlist, token-size) = err-and (list (occ-form-ok (occ, length (occ)),

lsi-occ-name-ok (occ-name (occ), length (occ), occ-outputs (occ), occ-data, token-size),

lsi-occ-outputs-ok (occ-outputs (occ), length (occ), occ-data,

token-size),

lsi-occ-inputs-ok (occ-inputs (occ), length (occ), token-size), occ-function-ok (occ-function (occ),

occ-inputs (occ), occ-outputs (occ), length (occ), netlist),

occ-annotation-ok (occ-annotation (occ), length (occ)), hierarchical-name-error), list ('occurrence, occ-name (occ)))

Event: Enable lsi-occ-syntax-ok; name this event ‘lsi-occ-syntax-ok-off’.

Definition: initial-lsi-occ-syntax-data (m-ins, m-outs)

= cons ('(occ-fns),
        cons ('(hierarchical-name . 0),

initial-occ-syntax-data (m-ins, m-outs)))

Event: Enable initial-lsi-occ-syntax-data; name this event ‘initial-lsi-occ-syntax-data-off’.

Definition: update-lsi-occ-syntax-data (occ, o-hname, occ-data) = cons (cons ('occ-fns,

cons (lsi-function-name (occ-function (occ)), value ('occ-fns, occ-data))),

        cons (cons ('hierarchical-name,

hierarchical-name-max (value ('hierarchical-name,

occ-data), o-hname)),

update-occ-syntax-data (occ, occ-data)))

Event: Enable update-lsi-occ-syntax-data; name this event ‘update-lsi-occ-syntax-data-off’.

Definition: lsi-occ-body-syntax-check (body,

occ-data, outputs, states, netlist, token-size, hierarchical-table, hierarchical-size)

= if body ≃ nil

then append (composite-occ-body-syntax-errors (body, occ-data, outputs, states),

list (alist-entry ('hierarchical-name, occ-data),

disjoint-or-err (value ('signals, occ-data), value ('occ-fns, occ-data),

'signal-occ-fn-overlap),

disjoint-or-err (value ('occ-names, occ-data), value ('occ-fns, occ-data),

'occ-name-occ-fn-overlap)))

else cons (lsi-occ-syntax-ok (car (body),

max-occ-hierarchical-name (car (body), hierarchical-table, hierarchical-size),

occ-data, netlist, token-size),

lsi-occ-body-syntax-check (cdr (body),

update-lsi-occ-syntax-data (car (body),

max-occ-hierarchical-name (car (body), hierarchical-table, hierarchical-size),

occ-data),

outputs, states, netlist, token-size, hierarchical-table, hierarchical-size)) endif

Event: Enable lsi-occ-body-syntax-check; name this event ‘lsi-occ-body-syntax-check-off’.

Definition: lsi-module-name-ok (m-name, m-length, token-size, netlist) = if if m-length < 1 then f

else t endif then err-and (list (lsi-name-ok (m-name, token-size),

t-or-err (¬ lookup-module (m-name, netlist),

'duplicate-module-defns,

m-name), t-or-err (¬ primp (m-name),

                          'module-name-same-as-primitive,

m-name)),

                'module-name)

else t endif

Event: Enable lsi-module-name-ok; name this event ‘lsi-module-name-ok-off’.

Definition: lsi-module-inputs-ok (m-ins, m-length, token-size) = if if m-length < 2 then f

else t endif then lsi-name-list-ok (m-ins, token-size, 'module-inputs, f) else t endif

Event: Enable lsi-module-inputs-ok; name this event ‘lsi-module-inputs-ok-off’.

Definition: lsi-module-outputs-ok (m-outs, m-length, token-size) = if if m-length < 3 then f

else t endif then lsi-name-list-ok (m-outs, token-size, 'module-outputs, f) else t endif

Event: Enable lsi-module-outputs-ok; name this event ‘lsi-module-outputs-ok-off’.

Definition: lsi-module-occurrences-check (m-occs,

m-ins, m-outs, m-states, m-length, netlist, token-size, hierarchical-table, hierarchical-size)

= if if m-length < 4 then f

else t endif then cons (t-or-err (listp (m-occs), 'no-occurrences, m-occs), lsi-occ-body-syntax-check (m-occs, initial-lsi-occ-syntax-data (m-ins,

m-outs),

m-outs, states-list-or-nil (m-states,

m-length),

netlist, token-size, hierarchical-table, hierarchical-size))

else t endif

Event: Enable lsi-module-occurrences-check; name this event ‘lsi-module-occurrences-check-off’.

Definition: lsi-module-syntax-check (module,

netlist, token-size, hierarchical-table, hierarchical-size)

= list (cons (module-name (module),

value ('hierarchical-name,

lsi-module-occurrences-check (module-occurrences (module), module-inputs (module), module-outputs (module), module-statenames (module), length (module), netlist, token-size, hierarchical-table, hierarchical-size))),

err-and (list (module-form-ok (module, length (module)),

lsi-module-name-ok (module-name (module), length (module), token-size, netlist),

lsi-module-inputs-ok (module-inputs (module), length (module), token-size),

lsi-module-outputs-ok (module-outputs (module), length (module), token-size),

err-and (lsi-module-occurrences-check (module-occurrences (module), module-inputs (module), module-outputs (module), module-statenames (module), length (module), netlist, token-size, hierarchical-table, hierarchical-size),

                         'module-occurrences),

module-statenames-ok (module-statenames (module),

length (module)),

module-annotation-ok (module-annotation (module),

length (module))),

list ('module, module-name (module))))

Event: Enable lsi-module-syntax-check; name this event ‘lsi-module-syntax-check-off’.

Definition: lsi-netlist-syntax-check (netlist, token-size, hierarchical-size) = if listp (netlist)

then append (lsi-module-syntax-check (car (netlist), cdr (netlist), token-size, lsi-netlist-syntax-check (cdr (netlist),

token-size,

hierarchical-size),

hierarchical-size),

lsi-netlist-syntax-check (cdr (netlist), token-size, hierarchical-size))

else list (nil-or-err (netlist, 'not-proper-list)) endif

Event: Enable lsi-netlist-syntax-check; name this event ‘lsi-netlist-syntax-check-off’.

Definition: lsi-netlist-syntax-ok (netlist, token-size, hierarchical-size) = err-and (lsi-netlist-syntax-check (netlist, token-size, hierarchical-size),

           'lsi-netlist-syntax-errors)

Event: Enable lsi-netlist-syntax-ok; name this event ‘lsi-netlist-syntax-ok-off’.

Definition: primitive-properties

= '(delays drives input-types inputs loadings lsi-name
      new-states out-depends output-types outputs results
      state-types states gates pads primitives transistors)

Event: Enable primitive-properties; name this event ‘primitive-properties-off’.

Event: Enable *1*primitive-properties; name this event ‘g*1*primitive-properties-off’.

Definition: all-module-props

= '(delays drives input-types inputs loadings out-depends
      output-types outputs state-types states gates pads
      primitives transistors)

Event: Enable all-module-props; name this event ‘all-module-props-off’.

Event: Enable *1*all-module-props; name this event ‘g*1*all-module-props-off’.

Event: Add the shell unknown, with recognizer function symbol unknownp and no accessors.

Definition: value-or-unknown (key, alist) = if boundp (key, alist) then value (key, alist)

else unknown endif

Event: Enable value-or-unknown; name this event ‘value-or-unknown-off’.

Definition: collect-value-or-unknown (keys, alist) = if listp (keys)

then cons (value-or-unknown (car (keys), alist),

collect-value-or-unknown (cdr (keys), alist))

else nil endif

Event: Enable collect-value-or-unknown; name this event ‘collect-value-or-unknown-off’.

Event: Add the shell io-out, with recognizer function symbol io-outp and 1 accessor: io-out-signal, with type restriction (none-of) and default value false.

Definition: mark-io-out (name, io-outs) = if name ∈ io-outs then io-out (name)

else name endif

Event: Enable mark-io-out; name this event ‘mark-io-out-off’.

Definition: mark-io-outs-0 (names, io-outs) = if listp (names)

then cons (mark-io-out (car (names), io-outs),

mark-io-outs-0 (cdr (names), io-outs))

else nil endif

Event: Enable mark-io-outs-0; name this event ‘mark-io-outs-0-off’.

Definition: mark-io-outs (names, io-outs) = if disjoint (io-outs, names) then names

else mark-io-outs-0 (names, io-outs) endif

Event: Enable mark-io-outs; name this event ‘mark-io-outs-off’.

Definition: unmark-io-out (name) = if io-outp (name) then io-out-signal (name)

else name endif

Event: Enable unmark-io-out; name this event ‘unmark-io-out-off’.

Definition: unmark-io-outs (names) = if listp (names)

then if (unmark-io-out (car (names)) = car (names))

∧ (unmark-io-outs (cdr (names)) = cdr (names)) then names else cons (unmark-io-out (car (names)),

unmark-io-outs (cdr (names))) endif

else names endif

Event: Enable unmark-io-outs; name this event ‘unmark-io-outs-off’.

Definition: value2 (s, in-map, out-map) = if boundp (s, in-map) then value (s, in-map)

else value (unmark-io-out (s), out-map) endif

Event: Enable value2; name this event ‘value2-off’.

Definition: collect-value2 (lst, in-map, out-map) = if listp (lst)

then cons (value2 (car (lst), in-map, out-map),

collect-value2 (cdr (lst), in-map, out-map))

else nil endif

Event: Enable collect-value2; name this event ‘collect-value2-off’.

Definition: signal-namep (x) = (litatom (x) ∨ indexp (x) ∨ io-outp (x))

Event: Enable signal-namep; name this event ‘signal-namep-off’.

Definition: parent-synonym0 (name, slist, used-names) = if name ∈ used-names then name

elseif boundp (name, slist)

then if signal-namep (value (name, slist))

then parent-synonym0 (value (name, slist), slist, cons (name, used-names))

else name endif else name endif

Event: Enable parent-synonym0; name this event ‘parent-synonym0-off’.

Definition: parent-synonym (name, slist) = parent-synonym0 (name, slist, nil)

Event: Enable parent-synonym; name this event ‘parent-synonym-off’.

Definition: parent-synonyms-list (lst, slist) = if listp (lst) then cons (parent-synonym (car (lst), slist),

parent-synonyms-list (cdr (lst), slist))

else lst endif

Event: Enable parent-synonyms-list; name this event ‘parent-synonyms-list-off’.

Definition: extract-names (lst) = if lst ≃ nil then nil

elseif signal-namep (car (lst))

then insert (car (lst), extract-names (cdr (lst)))

else extract-names (cdr (lst)) endif

Event: Enable extract-names; name this event ‘extract-names-off’.

Definition: externalize-parents (names, alist, inputs, outputs) = if listp (names)

then externalize-parents (cdr (names),

if (parent-synonym (car (names), alist)

∈ inputs)

∨ (parent-synonym (car (names), alist)

∈ outputs) then alist else cons (cons (parent-synonym (car (names),

alist),

car (names)), cons (cons (car (names),

value-or-unknown (parent-synonym (car (names),

alist),

alist)),

unbind (car (names),

unbind (parent-synonym (car (names),

alist),

alist)))) endif,

inputs, outputs)

else alist endif

Event: Enable externalize-parents; name this event ‘externalize-parents-off’.

Definition: subtype (x, y)

= if y = 'free then t elseif x = 'boolp

    then y ∈ '(boolp tri-state ttl-tri-state ttl)
    elseif x = 'ttl-tri-state
    then y ∈ '(tri-state ttl-tri-state)

else x = y endif

Event: Enable subtype; name this event ‘subtype-off’.

Definition: types-compatiblep (t1 , t2 ) = if t1 = t2 then t

elseif (t1 = 'free) ∨ (t2 = 'free) then t

    elseif t1 = 'tri-state then t2 = 'ttl-tri-state
    elseif t2 = 'tri-state then t1 = 'ttl-tri-state

else f endif

Event: Enable types-compatiblep; name this event ‘types-compatiblep-off’.

Definition: tri-state-typep (type) = (type ∈ '(tri-state ttl-tri-state))

Event: Enable tri-state-typep; name this event ‘tri-state-typep-off’.

Definition: type-value0 (n, alist, free, used-names) = if (n ∈ used-names) ∨ (¬ boundp (n, alist))

then if free then 'free else list (n) endif elseif listp (value (n, alist)) then type-value0 (car (value (n, alist)), alist, free, cons (n, used-names)) else value (n, alist) endif

Event: Enable type-value0; name this event ‘type-value0-off’.

Definition: type-value (n, alist, free) = type-value0 (n, alist, free, nil)

Event: Enable type-value; name this event ‘type-value-off’.

Definition: input-type (name, alist) = type-value (unmark-io-out (name), alist, t)

Event: Enable input-type; name this event ‘input-type-off’.

Definition: output-type (name, out-map, in-map) = if listp (type-value (name, out-map, f))

then type-value (car (type-value (name, out-map, f)), in-map, f) else type-value (name, out-map, f) endif

Event: Enable output-type; name this event ‘output-type-off’.

Definition: initial-occ-in-types = nil

Definition: initial-occ-out-types = nil

Definition: add-in-type (name, type, type-map) = if type = 'free then type-map

elseif boundp (unmark-io-out (name), type-map)

then if unknownp (value (unmark-io-out (name), type-map))

∨ subtype (value (unmark-io-out (name), type-map), type) then type-map elseif unknownp (type)

∨ subtype (type, value (unmark-io-out (name), type-map)) then cons (cons (unmark-io-out (name), type),

unbind (unmark-io-out (name), type-map))

else cons (pred-error (list ('signal, unmark-io-out (name)), list (list ('old-type,

value (unmark-io-out (name), type-map)),

list ('new-type, type))),

cons (cons (unmark-io-out (name), unknown),

unbind (unmark-io-out (name), type-map))) endif

else cons (cons (unmark-io-out (name), type), type-map) endif

Event: Enable add-in-type; name this event ‘add-in-type-off’.

Definition: add-in-types (inputs, types, type-map) = if listp (inputs)

then add-in-types (cdr (inputs), cdr (types), add-in-type (car (inputs), car (types), type-map))

else type-map endif Event: Enable add-in-types; name this event ‘add-in-types-off’.

Definition: update-in-types (in-types, o-ins, o-fn-props) = add-in-types (o-ins, value ('input-types, o-fn-props), in-types)

Event: Enable update-in-types; name this event ‘update-in-types-off’.

Definition: add-out-type (name, type, arg-map, type-map) = cons (cons (name,

if listp (type) then collect-value (type, arg-map) else type endif),

type-map)

Event: Enable add-out-type; name this event ‘add-out-type-off’.

Definition: add-out-types (outputs, types, arg-map, type-map) = if listp (outputs)

then add-out-types (cdr (outputs), cdr (types), arg-map, add-out-type (car (outputs),

car (types), arg-map, type-map))

else type-map endif

Event: Enable add-out-types; name this event ‘add-out-types-off’.

Definition: update-out-types (out-types, o-outs, o-fn-props, in-map) = add-out-types (o-outs,

value ('output-types, o-fn-props), in-map, out-types)

Event: Enable update-out-types; name this event ‘update-out-types-off’.

Definition: io-type-error (name, in-type, out-type)

= pred-error (list (if io-outp (name) then 'io-signal else 'signal endif, unmark-io-out (name)), list (list ('input-type, in-type),

list ('output-type, out-type)))

Event: Enable io-type-error; name this event ‘io-type-error-off’.

Definition: io-types-compatible (name, in-type, out-type, t-wire-ins) = if unknownp (in-type) then unknownp (out-type)

elseif unknownp (out-type) then unknownp (in-type)

elseif io-outp (name)

then if tri-state-typep (out-type) ∧ subtype (out-type, in-type) then t else io-type-error (name, in-type, out-type) endif

elseif name ∈ t-wire-ins

then if tri-state-typep (in-type)

∧ types-compatiblep (in-type, out-type) then t else io-type-error (name, in-type, out-type) endif

elseif subtype (out-type, in-type) then t

else io-type-error (name, in-type, out-type) endif

Event: Enable io-types-compatible; name this event ‘io-types-compatible-off’.

Definition: ok-in-type (ok, name, out-type, in-map) = if (¬ ok) ∨ net-errorp (ok)

then set-value (unmark-io-out (name), unknown, in-map)

elseif io-outp (name)

then set-value (unmark-io-out (name), out-type, in-map)

else in-map endif

Event: Enable ok-in-type; name this event ‘ok-in-type-off’.

Definition: ok-out-type (ok, name, out-map) = if net-errorp (ok) then cons (ok, set-value (name, unknown, out-map))

elseif ok then out-map

else set-value (name, unknown, out-map) endif

Event: Enable ok-out-type; name this event ‘ok-out-type-off’.

Definition: transfer-in-type (name, out-type, in-map) = if listp (out-type)

then add-in-type (car (out-type), input-type (name, in-map), in-map) else in-map endif

Event: Enable transfer-in-type; name this event ‘transfer-in-type-off’.

Definition: compose-type (name, type, maps, t-wire-ins) = cons (ok-in-type (io-types-compatible (name,

input-type (name, car (maps)), if listp (if listp (type)

then output-type (car (type), cdr (maps), car (maps))

else type endif)

                                   then 'free

elseif listp (type)

then output-type (car (type), cdr (maps), car (maps))

else type endif, t-wire-ins),

name,

if listp (type)

then output-type (car (type), cdr (maps), car (maps)) else type endif, car (maps)), ok-out-type (io-types-compatible (name,

input-type (name, car (maps)), if listp (if listp (type)

then output-type (car (type), cdr (maps), car (maps))

else type endif)

                                    then 'free

elseif listp (type)

then output-type (car (type), cdr (maps), car (maps))

else type endif, t-wire-ins),

name,

cdr (maps)))

Event: Enable compose-type; name this event ‘compose-type-off’.

Definition: composed-type-maps (out-types, in-map, out-map, t-wire-ins) = if listp (out-types)

then compose-type (caar (out-types), cdar (out-types), composed-type-maps (cdr (out-types),

transfer-in-type (caar (out-types), cdar (out-types), in-map),

out-map, t-wire-ins),

t-wire-ins)

else cons (in-map, out-map) endif

Event: Enable composed-type-maps; name this event ‘composed-type-maps-off’.

Definition: compose-io-types (in-map, out-map, t-wire-ins) = composed-type-maps (out-map, in-map, out-map, t-wire-ins)

Event: Enable compose-io-types; name this event ‘compose-io-types-off’.

Definition: collect-in-types (names, alist) = if listp (names)

then cons (type-value (car (names), alist, t),

collect-in-types (cdr (names), alist))

else nil endif

Event: Enable collect-in-types; name this event ‘collect-in-types-off’.

Definition: collect-out-type (name, out-map, inputs, in-map) = if listp (output-type (name, out-map, in-map))

∧ (car (output-type (name, out-map, in-map)) ∉ inputs) then unknown else output-type (name, out-map, in-map) endif Event: Enable collect-out-type; name this event ‘collect-out-type-off’.

Definition: collect-out-types (outputs, out-map, inputs, in-map) = if listp (outputs)

then cons (collect-out-type (car (outputs), out-map, inputs, in-map),

collect-out-types (cdr (outputs), out-map, inputs, in-map))

else nil endif

Event: Enable collect-out-types; name this event ‘collect-out-types-off’.

Definition: in-types-error (in-map) = err-and (in-map, 'input-type-conflicts)

Event: Enable in-types-error; name this event ‘in-types-error-off’.

Definition: out-types-error (out-map) = err-and (out-map, 'io-type-conflicts)

Event: Enable out-types-error; name this event ‘out-types-error-off’.

Definition: map (dr) = case on length (dr):

case = 2

then (car (dr) ∈ N) ∧ (cadr (dr) = 'ma) ∧ (cddr (dr) = nil)

case = 3

then (car (dr) ∈ N)

∧ ((length (cadr (dr)) = 2) ∧ (caadr (dr) = 'point) ∧ (cadadr (dr) ∈ N))

∧ (caddr (dr) = 'ma) ∧ (cdddr (dr) = nil)

otherwise f endcase

Event: Enable map; name this event ‘map-off’.

Definition: pfp (ld) = if length (ld) = 2

then (car (ld) ∈ N) ∧ (cadr (ld) = 'pf) ∧ (cddr (ld) = nil)

else f endif Event: Enable pfp; name this event ‘pfp-off’.

Definition: ma-to-pf (x) = cons ((car (x) ∗ 10) + cadadr (x), '(pf))

Event: Enable ma-to-pf; name this event ‘ma-to-pf-off’.

Definition: pf-to-ma (x) = if (car (x) mod 10) ≃ 0 then cons (car (x) ÷ 10, '(ma))

else cons (car (x) ÷ 10, cons (list ('point, car (x) mod 10), '(ma))) endif

Event: Enable pf-to-ma; name this event ‘pf-to-ma-off’.

Definition: std-load-to-pf (x) = cons (x ∗ 10, '(pf))

Event: Enable std-load-to-pf; name this event ‘std-load-to-pf-off’.

Definition: pf-to-std-load (x) = if (car (x) mod 10) < 5 then car (x) ÷ 10

else (car (x) ÷ 10) + 1 endif

Event: Enable pf-to-std-load; name this event ‘pf-to-std-load-off’.

Definition: ma-to-std-drive (x) = car (x)

Event: Enable ma-to-std-drive; name this event ‘ma-to-std-drive-off’.

Definition: std-drive-to-ma (x) = cons (x, '(ma))

Event: Enable std-drive-to-ma; name this event ‘std-drive-to-ma-off’.

Definition: zero-loadingp (a) = if pfp (a) then car (a) ≃ 0

else a ≃ 0 endif

Event: Enable zero-loadingp; name this event ‘zero-loadingp-off’.

Definition: pf-plus (a, b) = cons (car (a) + car (b), '(pf))

Event: Enable pf-plus; name this event ‘pf-plus-off’.

Definition: pf-difference (a, b) = cons (car (a) − car (b), '(pf))

Event: Enable pf-difference; name this event ‘pf-difference-off’.

Definition: pf-lessp (a, b) = (car (a) < car (b))

Event: Enable pf-lessp; name this event ‘pf-lessp-off’.

Definition: ma-lessp (a, b) = if car (a) < car (b) then t

elseif car (a) = car (b) then cadadr (a) < cadadr (b)

else f endif

Event: Enable ma-lessp; name this event ‘ma-lessp-off’.

Definition: loading-plus (x, y) = if x ∈ N

then if y ∈ N then x + y elseif pfp (y) then pf-plus (std-load-to-pf (x), y) else x endif

elseif pfp (x)

then if pfp (y) then pf-plus (x, y)

elseif y ∈ N then pf-plus (x, std-load-to-pf (y)) else x endif

elseif (y ∈ N) ∨ pfp (y) then y

else 0 endif

Event: Enable loading-plus; name this event ‘loading-plus-off’.

Definition: initial-occ-loadings = nil

Definition: initial-occ-drives = nil

Definition: add-loading (name, loading, load-map) = if zero-loadingp (loading) then load-map

elseif boundp (name, load-map)

then cons (cons (name, loading-plus (loading, value (name, load-map))),

unbind (name, load-map)) else cons (cons (name, loading), load-map) endif

Event: Enable add-loading; name this event ‘add-loading-off’.

Definition: add-loadings (names, loadings, load-map) = if listp (names)

then add-loadings (cdr (names), cdr (loadings), add-loading (car (names), car (loadings), load-map))

else load-map endif

Event: Enable add-loadings; name this event ‘add-loadings-off’.

Definition: update-loadings (loadings, o-ins, o-fn-props) = add-loadings (o-ins, value ('loadings, o-fn-props), loadings)

Event: Enable update-loadings; name this event ‘update-loadings-off’.

Definition: local-drive (drive, listp, in-map, out-map, drive-map) = if listp

then if listp (drive)

then cons (local-drive (car (drive), f, in-map, out-map, drive-map),

local-drive (cdr (drive), t, in-map, out-map, drive-map))

else nil endif elseif signal-namep (drive) then parent-synonym (value2 (drive, in-map, out-map), drive-map) elseif listp (drive) ∧ (car (drive) = 'min) then cons ('min, local-drive (cdr (drive), t, in-map, out-map, drive-map)) else drive endif

Event: Enable local-drive; name this event ‘local-drive-off’.

Definition: add-drives (outputs, drives, in-map, out-map, drive-map) = if listp (outputs)

then add-drives (cdr (outputs), cdr (drives), in-map, out-map, cons (cons (car (outputs),

local-drive (car (drives), f, in-map, out-map, drive-map)),

drive-map))

else drive-map endif

Event: Enable add-drives; name this event ‘add-drives-off’.

Definition: update-drives (drives, o-outs, o-fn-props, in-map, out-map) = add-drives (o-outs, value ('drives, o-fn-props), in-map, out-map, drives)

Event: Enable update-drives; name this event ‘update-drives-off’.

Definition: transfer-loading (drive, listp, load, loadings) = if listp

then if listp (drive)

then transfer-loading (cdr (drive), t, load, transfer-loading (car (drive),

f, load, loadings))

else loadings endif elseif signal-namep (drive) then add-loading (drive, load, loadings) elseif listp (drive) ∧ (car (drive) = 'min) then transfer-loading (cdr (drive), t, load, loadings) else loadings endif

Event: Enable transfer-loading; name this event ‘transfer-loading-off’.

Definition: transfer-loadings (loadings, drives) = if listp (drives)

then transfer-loadings (transfer-loading (cdar (drives), f, value (caar (drives), loadings), loadings),

cdr (drives))

else loadings endif

Event: Enable transfer-loadings; name this event ‘transfer-loadings-off’.

Definition: literal-net-drive (drive, load, label) = if drive ∈ N

then if drive < if load ∈ N then load elseif pfp (load) then pf-to-std-load (load) else 0 endif

then pred-error (label,

list (list ('drive, drive),

cons ('loading,

cons (load,

if load = if load ∈ N then load elseif pfp (load) then pf-to-std-load (load) else 0 endif

then nil else list (if load ∈ N

then load elseif pfp (load) then pf-to-std-load (load) else 0 endif) endif))))

else drive − if load ∈ N then load elseif pfp (load) then pf-to-std-load (load) else 0 endif endif

elseif map (drive) then if pf-lessp (ma-to-pf (drive),

if pfp (load) then load elseif load ∈ N then std-load-to-pf (load) else '(0 pf) endif)

then pred-error (label,

list (list ('drive, drive, ma-to-pf (drive)),

cons ('loading,

cons (load,

if load = if pfp (load)

then load elseif load ∈ N then std-load-to-pf (load) else '(0 pf) endif

then nil else list (if pfp (load) then load elseif load ∈ N then std-load-to-pf (load) else '(0

pf) endif) endif))))

else pf-to-ma (pf-difference (ma-to-pf (drive), if pfp (load) then load elseif load ∈ N then std-load-to-pf (load) else '(0 pf) endif)) endif

else unknown endif

Event: Enable literal-net-drive; name this event ‘literal-net-drive-off’.

Definition: net-min-args (a, load, listp) = if listp

then if listp (a)

then net-min-args (car (a), load, f)

∪ net-min-args (cdr (a), load, t) else nil endif

elseif (a ∈ N) ∨ map (a) then list (literal-net-drive (a, load, 'min-arg)) elseif listp (a) ∧ (car (a) = 'min) then net-min-args (cdr (a), load, t) else list (a) endif

Event: Enable net-min-args; name this event ‘net-min-args-off’.

Definition: add-net-min-drive (name, args, load, drive-map) = if net-errorp (err-and (net-min-args (args, load, t), list ('signal, name)))

then if listp (extract-names (net-min-args (args, load, t)))

then cons (err-and (net-min-args (args, load, t),

list ('signal, name)), cons (cons (name,

cons ('min,

cons (unknown,

extract-names (net-min-args (args, load, t))))),

drive-map)) else cons (err-and (net-min-args (args, load, t),

list ('signal, name)), drive-map) endif

else cons (cons (name, cons ('min, net-min-args (args, load, t))), drive-map) endif

Event: Enable add-net-min-drive; name this event ‘add-net-min-drive-off’.

Definition: add-net-drive (drive, loadings, drive-map) = if listp (drive)

then if (cdr (drive) ∈ N) ∨ map (cdr (drive))

then cons (if net-errorp (literal-net-drive (cdr (drive),

value (car (drive), loadings),

                                            list ('signal,

car (drive))))

then literal-net-drive (cdr (drive), value (car (drive), loadings), list ('signal, car (drive)))

else cons (car (drive),

literal-net-drive (cdr (drive),

value (car (drive), loadings),

                                         list ('signal,

car (drive)))) endif,

drive-map)

elseif cadr (drive) = 'min

then add-net-min-drive (car (drive), cddr (drive), value (car (drive), loadings), drive-map)

else cons (drive, drive-map) endif else cons (drive, drive-map) endif

Event: Enable add-net-drive; name this event ‘add-net-drive-off’.

Definition: net-drives-simple (drs, lds) = if listp (drs)

then add-net-drive (car (drs), lds, net-drives-simple (cdr (drs), lds)) else nil endif

Event: Enable net-drives-simple; name this event ‘net-drives-simple-off’.

Definition: type-loading (load, type)

= if type ∈ '(boolp clk level parametric tri-state)

then if pfp (load) then pf-to-std-load (load)

else load endif

    elseif type ∈ '(ttl ttl-tri-state)

then if load ∈ N then std-load-to-pf (load)

else load endif else load endif

Event: Enable type-loading; name this event ‘type-loading-off’.

Definition: collect-loadings (names, types, loadings) = if listp (names)

then cons (type-loading (value (car (names), loadings), car (types)),

collect-loadings (cdr (names), cdr (types), loadings))

else nil endif

Event: Enable collect-loadings; name this event ‘collect-loadings-off’.

Definition: loadings-error (loadings) = err-and (loadings, 'bad-loadings)

Event: Enable loadings-error; name this event ‘loadings-error-off’.

Definition: collect-min-args (a, listp, drives, used-names, inputs, outputs) = if listp

then if listp (a)

then collect-min-args (car (a), f, drives, used-names, inputs, outputs)

∪ collect-min-args (cdr (a), t, drives, used-names, inputs, outputs)

else nil endif elseif signal-namep (a) then if a ∈ inputs then list (a)

elseif (¬ ((a ∈ outputs) ∨ (a ∈ used-names)))

∧ boundp (a, drives) then collect-min-args (value (a, drives), f, drives, cons (a, used-names), inputs, outputs)

else list (unknown) endif elseif listp (a) ∧ (car (a) = 'min) then collect-min-args (cdr (a), t, drives, used-names, inputs, outputs) elseif (a ∈ N) ∨ map (a) then list (a) else list (unknown) endif

Event: Enable collect-min-args; name this event ‘collect-min-args-off’.

Definition: numeric-drives (drs) = if listp (drs)

then if (car (drs) ∈ N) ∨ map (car (drs))

then cons (car (drs), numeric-drives (cdr (drs))) else numeric-drives (cdr (drs)) endif

else nil endif

Event: Enable numeric-drives; name this event ‘numeric-drives-off’.

Definition: type-drive (drive, type)

= if type ∈ '(boolp clk level parametric tri-state)

then if map (drive) then ma-to-std-drive (drive)

else drive endif

    elseif type ∈ '(ttl ttl-tri-state)

then if drive ∈ N then std-drive-to-ma (drive)

else drive endif else drive endif

Event: Enable type-drive; name this event ‘type-drive-off’.

Definition: drive-lessp (x, y) = if (x ∈ N) ∧ (y ∈ N) then x < y

elseif map (x) ∧ map (y) then ma-lessp (x, y)

else f endif

Event: Enable drive-lessp; name this event ‘drive-lessp-off’.

Definition: drive-min (lst, type) = if lst ≃ nil then unknown

elseif cdr (lst) ≃ nil then type-drive (car (lst), type)

elseif drive-lessp (type-drive (car (lst), type), drive-min (cdr (lst), type))

then type-drive (car (lst), type) else drive-min (cdr (lst), type) endif

Event: Enable drive-min; name this event ‘drive-min-off’.

Definition: make-drive-min (args, type, drives, inputs, outputs) = if extract-names (collect-min-args (args, t, drives, nil, inputs, outputs)) ≃ nil

then drive-min (numeric-drives (collect-min-args (args, t, drives, nil, inputs, outputs)),

type)

elseif numeric-drives (collect-min-args (args, t, drives, nil, inputs, outputs)) ≃ nil

then if listp (cdr (extract-names (collect-min-args (args, t, drives, nil, inputs, outputs))))

then cons ('min,

extract-names (collect-min-args (args, t, drives, nil, inputs, outputs)))

else cons ('min,

cons (unknown,

extract-names (collect-min-args (args, t, drives, nil, inputs, outputs)))) endif

else cons ('min,

cons (drive-min (numeric-drives (collect-min-args (args, t, drives, nil, inputs, outputs)),

type),

extract-names (collect-min-args (args, t, drives, nil, inputs, outputs)))) endif

Event: Enable make-drive-min; name this event ‘make-drive-min-off’.

Definition: collect-drives-0 (names, output-types, drives, inputs, outputs) = if listp (names)

then cons (if (value-or-unknown (car (names), drives) ∈ N)

∨ map (value-or-unknown (car (names), drives)) then type-drive (value-or-unknown (car (names), drives),

car (output-types))

elseif signal-namep (value-or-unknown (car (names), drives)) then parent-synonym (value-or-unknown (car (names), drives),

drives)

elseif listp (value-or-unknown (car (names), drives))

∧ (car (value-or-unknown (car (names), drives))

          = 'min)

then make-drive-min (cdr (value-or-unknown (car (names), drives)), car (output-types), drives, inputs, outputs)

else unknown endif, collect-drives-0 (cdr (names),

cdr (output-types), drives, inputs, outputs))

Event: Enable collect-drives-0; name this event ‘collect-drives-0-off’.

Definition: collect-drives (outputs, output-types, drives, inputs) = collect-drives-0 (outputs,

output-types,

externalize-parents (outputs, drives, inputs, outputs), inputs, outputs)

Event: Enable collect-drives; name this event ‘collect-drives-off’.

Definition: drives-error (drives) = err-and (drives, 'bad-drives)

Event: Enable drives-error; name this event ‘drives-error-off’.

Definition: ps-pfp (x) = (properp (x)

∧ (length (x) = 2) ∧ (car (x) ∈ N) ∧ (cadr (x) = 'ps-pf))

Event: Enable ps-pfp; name this event ‘ps-pfp-off’.

Definition: delay-lh (d) = if listp (d) ∧ (car (d) ≠ 'or) then car (d)

else f endif

Event: Enable delay-lh; name this event ‘delay-lh-off’.

Definition: delay-hl (d) = if listp (d) ∧ (car (d) ≠ 'or) then cadr (d)

else f endif

Event: Enable delay-hl; name this event ‘delay-hl-off’.

Definition: delay-slope-lh (d) = if listp (d) ∧ (car (d) ≠ 'or) then caar (d)

else f endif

Event: Enable delay-slope-lh; name this event ‘delay-slope-lh-off’.

Definition: delay-slope-hl (d) = if listp (d) ∧ (car (d) ≠ 'or) then caadr (d)

else f endif

Event: Enable delay-slope-hl; name this event ‘delay-slope-hl-off’.

Definition: delay-intercept-lh (d) = if listp (d) ∧ (car (d) ≠ 'or) then cadar (d)

else f endif

Event: Enable delay-intercept-lh; name this event ‘delay-intercept-lh-off’.

Definition: delay-intercept-hl (d) = if listp (d) ∧ (car (d) ≠ 'or) then cadadr (d)

else f endif

Event: Enable delay-intercept-hl; name this event ‘delay-intercept-hl-off’.

Definition: delay-dependencies (d) = if listp (d) ∧ (car (d) ≠ 'or) then cddr (d)

else nil endif

Event: Enable delay-dependencies; name this event ‘delay-dependencies-off’.

Definition: make-delay-0 (lh, hl, deps) = cons (lh, cons (hl, deps))

Event: Enable make-delay-0; name this event ‘make-delay-0-off’.

Definition: make-delay (s-lh, i-lh, s-hl, i-hl, deps) = make-delay-0 (list (s-lh, i-lh), list (s-hl, i-hl), deps)

Event: Enable make-delay; name this event ‘make-delay-off’.

Definition: determined-delayp (d) = (listp (d) ∧ (car (d) ≠ 'or) ∧ (delay-dependencies (d) ≃ nil))

Event: Enable determined-delayp; name this event ‘determined-delayp-off’.

Definition: make-range (lo, hi, deps) = if (lo = hi) ∧ (deps ≃ nil) then lo

else cons ('range, cons (lo, cons (hi, deps))) endif

Event: Enable make-range; name this event ‘make-range-off’.

Definition: rangep (x) = if listp (x) then car (x) = 'range

else f endif

Event: Enable rangep; name this event ‘rangep-off’.

Definition: range-min (x) = if rangep (x) then cadr (x)

else x endif

Event: Enable range-min; name this event ‘range-min-off’.

Definition: range-max (x) = if rangep (x) then caddr (x)

else x endif

Event: Enable range-max; name this event ‘range-max-off’.

Definition: range-dependencies (x) = if rangep (x) then cdddr (x)

else nil endif

Event: Enable range-dependencies; name this event ‘range-dependencies-off’.

Definition: determined-rangep (x) = if rangep (x) then range-dependencies (x) ≃ nil

else x ∈ N endif

Event: Enable determined-rangep; name this event ‘determined-rangep-off’.

Definition: per-std-load-delay-slope (slope) = if ps-pfp (slope) then car (slope) ∗ 10

else slope endif

Event: Enable per-std-load-delay-slope; name this event ‘per-std-load-delay-slope-off’.

Definition: per-pf-delay-slope (slope) = if slope ∈ N

then cons (if (slope mod 10) < 5 then slope ÷ 10 else 1 + (slope ÷ 10) endif,

             '(ps-pf))

else slope endif

Event: Enable per-pf-delay-slope; name this event ‘per-pf-delay-slope-off’.

Definition: range-plus (i1 , i2 , deps) = make-range (range-min (i1 ) + range-min (i2 ),

range-max (i1 ) + range-max (i2 ), deps)

Event: Enable range-plus; name this event ‘range-plus-off’.

Definition: slope-times-load (slope, load) = if slope ∈ N

then if load ∈ N then slope ∗ load elseif pfp (load) then slope ∗ pf-to-std-load (load) else 0 endif elseif ps-pfp (slope) then if pfp (load) then car (slope) ∗ car (load)

elseif load ∈ N then car (slope) ∗ car (std-load-to-pf (load)) else 0 endif

else 0 endif Event: Enable slope-times-load; name this event ‘slope-times-load-off’.

Definition: initial-occ-delays = nil

Theorem: local-delay-count-help-0 listp (x) → (count (x) = (1 + (count (car (x)) + count (cdr (x)))))

Theorem: local-delay-count-help listp (x) → ((count (x) = 0) = f)

Event: Enable local-delay-count-help-0; name this event ‘local-delay-count-help-0-off’.

Event: Disable range-dependencies; name this event ‘range-dependencies-on’.

Event: Disable delay-dependencies; name this event ‘delay-dependencies-on’.

Definition: local-delay (delay, out-depends, listp, in-map, out-map, delay-map) = if listp

then if listp (delay)

then cons (local-delay (car (delay), out-depends, f, in-map, out-map, delay-map),

local-delay (cdr (delay), out-depends, t, in-map, out-map, delay-map))

else nil endif elseif signal-namep (delay) then parent-synonym (value2 (delay, in-map, out-map), delay-map) elseif delay ≃ nil then delay elseif car (delay) = 'or then cons ('or, local-delay (cdr (delay), f, t, in-map, out-map, delay-map)) elseif rangep (delay) then if listp (range-dependencies (delay))

then make-range (range-min (delay), range-max (delay), local-delay (range-dependencies (delay),

f, t, in-map, out-map, delay-map))

else delay endif elseif listp (if listp (delay-dependencies (delay))

then delay-dependencies (delay) else out-depends endif)

then make-delay-0 (delay-lh (delay), delay-hl (delay), local-delay (if listp (delay-dependencies (delay))

then delay-dependencies (delay) else out-depends endif, f, t, in-map, out-map, delay-map))

else delay endif

Event: Enable local-delay-count-help; name this event ‘local-delay-count-help-off’.

Event: Enable range-dependencies; name this event ‘range-dependencies-off1’.

Event: Enable delay-dependencies; name this event ‘delay-dependencies-off1’.

Event: Enable local-delay; name this event ‘local-delay-off’.

Definition: add-delays (outputs, delays, out-depends, in-map, out-map, delay-map) = if listp (outputs)

then add-delays (cdr (outputs), cdr (delays), cdr (out-depends), in-map, out-map, cons (cons (car (outputs),

local-delay (car (delays), car (out-depends), f, in-map, out-map, delay-map)),

delay-map))

else delay-map endif

Event: Enable add-delays; name this event ‘add-delays-off’.

Definition: update-delays (delays, o-outs, o-fn-props, in-map, out-map) = add-delays (o-outs,

value ('delays, o-fn-props),

value ('out-depends, o-fn-props), in-map, out-map, delays)

Event: Enable update-delays; name this event ‘update-delays-off’.

Definition: add-load-delay (delay, load) = if zero-loadingp (load) then delay

else make-delay (delay-slope-lh (delay),

range-plus (delay-intercept-lh (delay),

slope-times-load (delay-slope-lh (delay), load),

nil),

delay-slope-hl (delay),

range-plus (delay-intercept-hl (delay),

slope-times-load (delay-slope-hl (delay), load),

nil),

delay-dependencies (delay)) endif

Event: Enable add-load-delay; name this event ‘add-load-delay-off’.

Definition: loaded-delay (delay, load, listp) = if listp

then if listp (delay)

then cons (loaded-delay (car (delay), load, f),

loaded-delay (cdr (delay), load, t))

else nil endif elseif delay ≃ nil then delay elseif car (delay) = 'or then cons ('or, loaded-delay (cdr (delay), load, t)) else add-load-delay (delay, load) endif

Event: Enable loaded-delay; name this event ‘loaded-delay-off’.

Definition: loaded-delays (delays, loadings) = if listp (delays)

then if car (delays) ≃ nil then cons (car (delays), loaded-delays (cdr (delays), loadings)) else cons (cons (caar (delays),

loaded-delay (cdar (delays), value (caar (delays), loadings), f)), loaded-delays (cdr (delays), loadings)) endif

else delays endif

Event: Enable loaded-delays; name this event ‘loaded-delays-off’.

Definition: merge-input-delays (r1 , r2 , or-args?) = if rangep (r1 ) ∨ (r1 ∈ N)

then if rangep (r2 ) ∨ (r2 ∈ N)

then make-range (if or-args?

then min (range-min (r1 ), range-min (r2 ))

else max (range-min (r1 ), range-min (r2 )) endif, max (range-max (r1 ), range-max (r2 )), range-dependencies (r1 ) ∪ range-dependencies (r2 ))

else make-range (range-min (r1 ), range-max (r1 ), insert (r2 , range-dependencies (r1 ))) endif

elseif rangep (r2 ) ∨ (r2 ∈ N) then make-range (range-min (r2 ),

range-max (r2 ),

insert (r1 , range-dependencies (r2 )))

else make-range (0, 0, insert (r1 , list (r2 ))) endif

Event: Enable merge-input-delays; name this event ‘merge-input-delays-off’.

Definition: mergeable-input-delay-p (d, approxp) = if approxp then rangep (d) ∨ (d ∈ N) ∨ signal-namep (d)

else determined-rangep (d) endif

Event: Enable mergeable-input-delay-p; name this event ‘mergeable-input-delay-p-off’.

Definition: insert-input-delay (d, dlist, or-args?, approxp) = if unknownp (d) then dlist

elseif dlist ≃ nil

then if or-args? ∧ (car (d) = 'or) then cdr (d)

else list (d) endif elseif or-args? ∧ listp (d) ∧ (car (d) = 'or) then insert-input-delay (cadr (d),

insert (car (dlist), cddr (d) ∪ cdr (dlist)), or-args?, approxp) elseif mergeable-input-delay-p (d, approxp ∧ (¬ or-args?)) then if mergeable-input-delay-p (car (dlist), approxp ∧ (¬ or-args?))

then cons (merge-input-delays (d, car (dlist), or-args?), cdr (dlist)) else cons (d, dlist) endif

elseif mergeable-input-delay-p (car (dlist), approxp ∧ (¬ or-args?))

then cons (car (dlist), insert (d, cdr (dlist)))

else insert (d, dlist) endif

Event: Enable insert-input-delay; name this event ‘insert-input-delay-off’.

Definition: literal-delay-to-range (d) = make-range (min (range-min (delay-intercept-lh (d)),

range-min (delay-intercept-hl (d))), max (range-max (delay-intercept-lh (d)),

range-max (delay-intercept-hl (d))), delay-dependencies (d))

Event: Enable literal-delay-to-range; name this event ‘literal-delay-to-range-off’.

Definition: or-delay-args-to-ranges (args, result) = if listp (args) then if car (args) ≃ nil

then insert-input-delay (car (args), or-delay-args-to-ranges (cdr (args), result), t, f)

elseif caar (args) = 'or

then or-delay-args-to-ranges (cdar (args),

or-delay-args-to-ranges (cdr (args),

result))

else insert-input-delay (literal-delay-to-range (car (args)),

or-delay-args-to-ranges (cdr (args),

result),

t,

f) endif

else result endif

Event: Enable or-delay-args-to-ranges; name this event ‘or-delay-args-to-ranges-off’.

Definition: make-delay-or (args) = if args ≃ nil then unknown

elseif listp (cdr (args)) then cons ('or, args)

elseif signal-namep (car (args)) then cons ('or, cons (unknown, args)) else car (args) endif

Event: Enable make-delay-or; name this event ‘make-delay-or-off’.

Definition: delay-to-range (d) = if d ≃ nil then d

elseif car (d) = 'or

then make-delay-or (or-delay-args-to-ranges (cdr (d), nil))

else literal-delay-to-range (d) endif

Event: Enable delay-to-range; name this event ‘delay-to-range-off’.

Event: Disable range-dependencies; name this event ‘range-dependencies-on1’.

Definition: addable-input-delay (in-delays, approxp) = if listp (in-delays) ∧ (cdr (in-delays) ≃ nil) then if if approxp

then rangep (car (in-delays)) ∨ (car (in-delays) ∈ N) else determined-rangep (car (in-delays)) endif

then car (in-delays) else f endif

else f endif

Event: Enable addable-input-delay; name this event ‘addable-input-delay-off’.

Definition: input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp) = if list?

then if listp (dep)

then insert-input-delay (input-delay0 (car (dep), delays, inputs, outputs, or-args?, f, used-names, approxp),

input-delay0 (cdr (dep), delays, inputs, outputs, or-args?, t, used-names, approxp),

or-args?, approxp)

else nil endif elseif dep ≃ nil then if dep ∈ N then dep

elseif dep ∈ inputs then dep elseif dep ∈ used-names then unknown elseif dep ∈ outputs then if or-args? then unknown

else parent-synonym (dep, delays) endif elseif boundp (dep, delays) then input-delay0 (delay-to-range (value (dep, delays)),

delays, inputs, outputs, or-args?, f, cons (dep, used-names), approxp)

else unknown endif elseif car (dep) = 'or then make-delay-or (input-delay0 (cdr (dep),

delays, inputs, outputs, t, t, used-names, approxp))

elseif rangep (dep) then if addable-input-delay (input-delay0 (range-dependencies (dep),

delays, inputs, outputs, f, t, used-names, approxp),

approxp)

then range-plus (dep,

addable-input-delay (input-delay0 (range-dependencies (dep), delays, inputs, outputs, f, t, used-names, approxp),

approxp),

range-dependencies (addable-input-delay (input-delay0 (range-dependencies (dep), delays, inputs, outputs, f, t, used-names, approxp),

approxp)))

else make-range (range-min (dep), range-max (dep), input-delay0 (range-dependencies (dep),

delays, inputs, outputs, f, t, used-names, approxp)) endif

else unknown endif

Event: Enable range-dependencies; name this event ‘range-dependencies-off2’.

Event: Enable input-delay0; name this event ‘input-delay0-off’.

Definition: input-delay (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp) = if listp (input-delay0 (dep,

delays, inputs, outputs, or-args?, list?, used-names, approxp))

∧ rangep (car (input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp)))

then if (range-min (car (input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp)))

= 0) ∧ (range-max (car (input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp)))

= 0) then range-dependencies (car (input-delay0 (dep,

delays, inputs, outputs, or-args?, list?, used-names, approxp)))

∪ cdr (input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp))

else input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp) endif

else input-delay0 (dep, delays, inputs, outputs, or-args?, list?, used-names, approxp) endif

Event: Enable input-delay; name this event ‘input-delay-off’.

Definition: type-delay-slope (slope, type)

= if type ∈ '(boolp clk level parametric tri-state)

then per-std-load-delay-slope (slope)

    elseif type ∈ '(ttl ttl-tri-state)

then per-pf-delay-slope (slope)

else slope endif

Event: Enable type-delay-slope; name this event ‘type-delay-slope-off’.

Definition: make-output-delay (delay, type, input-delay-list, approxp) = if addable-input-delay (input-delay-list, approxp)

then make-delay (type-delay-slope (delay-slope-lh (delay), type),

range-plus (delay-intercept-lh (delay),

addable-input-delay (input-delay-list,

approxp),

nil),

type-delay-slope (delay-slope-hl (delay), type),

range-plus (delay-intercept-hl (delay),

addable-input-delay (input-delay-list,

approxp),

nil),

range-dependencies (addable-input-delay (input-delay-list,

approxp)))

else make-delay (type-delay-slope (delay-slope-lh (delay), type), delay-intercept-lh (delay), type-delay-slope (delay-slope-hl (delay), type), delay-intercept-hl (delay), input-delay-list) endif

Event: Enable make-output-delay; name this event ‘make-output-delay-off’.

Definition: or-delay-args (a, listp, type, delays, used-names, inputs, outputs, approxp) = if listp

then if listp (a)

then or-delay-args (car (a), f, type, delays, used-names, inputs, outputs,

approxp)

∪ or-delay-args (cdr (a), t, type, delays, used-names, inputs, outputs, approxp)

else nil endif elseif signal-namep (a) then if a ∈ inputs then list (a)

elseif (¬ ((a ∈ outputs) ∨ (a ∈ used-names)))

∧ boundp (a, delays) then or-delay-args (value (a, delays),

f, type, delays, cons (a, used-names), inputs, outputs, approxp)

else list (unknown) endif elseif a ≃ nil then list (unknown) elseif car (a) = 'or then or-delay-args (cdr (a),

t, type, delays, used-names, inputs, outputs, approxp)

else list (make-output-delay (a, type, input-delay (delay-dependencies (a),

delays, inputs, outputs, f, t, used-names, approxp),

approxp)) endif Event: Enable or-delay-args; name this event ‘or-delay-args-off’.

Definition: output-delay (name, type, delays, inputs, outputs, approxp) = if signal-namep (value-or-unknown (name, delays))

then parent-synonym (value-or-unknown (name, delays), delays) elseif value-or-unknown (name, delays) ≃ nil then unknown elseif car (value-or-unknown (name, delays)) = 'or then make-delay-or (or-delay-args (cdr (value-or-unknown (name, delays)), t, type, delays, list (name), inputs, outputs, approxp))

else make-output-delay (value-or-unknown (name, delays), type, input-delay (delay-dependencies (value-or-unknown (name,

delays)),

delays, inputs, outputs, f, t, list (name), approxp),

approxp) endif

Event: Enable output-delay; name this event ‘output-delay-off’.

Definition: collect-delays-0 (names, types, delays, inputs, outputs, approxp) = if listp (names)

then cons (output-delay (car (names), car (types), delays, inputs, outputs, approxp),

collect-delays-0 (cdr (names), cdr (types), delays, inputs, outputs, approxp))

else nil endif

Event: Enable collect-delays-0; name this event ‘collect-delays-0-off’.

Definition: collect-delays (outputs, output-types, delays, inputs, approxp) = collect-delays-0 (outputs,

output-types,

externalize-parents (outputs, delays, inputs, outputs), inputs, outputs, approxp)

Event: Enable collect-delays; name this event ‘collect-delays-off’.

Definition: delays-error (delays) = err-and (delays, 'bad-delays)

Event: Enable delays-error; name this event ‘delays-error-off’.

Definition: initial-occ-out-depends (m-ins, m-outs) = cons (m-outs, pairlist (m-ins, listify (m-ins)))

Event: Enable initial-occ-out-depends; name this event ‘initial-occ-out-depends-off’.

Definition: add-out-depends (outputs, out-depends, arg-map, deps-map) = if listp (outputs)

then add-out-depends (cdr (outputs), cdr (out-depends), arg-map, cons (cons (car (outputs),

union-values (collect-value (car (out-depends),

arg-map),

deps-map)), cons (all-bound-or-err (collect-value (car (out-depends),

arg-map),

deps-map,

                                               list ('output,

car (outputs))),

deps-map)))

else deps-map endif

Event: Enable add-out-depends; name this event ‘add-out-depends-off’.

Definition: update-out-depends (out-depends, o-outs, o-fn-props, o-ins, arg-map) = cons (o-ins ∪ car (out-depends),

add-out-depends (o-outs, value ('out-depends, o-fn-props), arg-map, cdr (out-depends)))

Event: Enable update-out-depends; name this event ‘update-out-depends-off’.

Definition: collect-out-depends (outputs, dependencies) = collect-value (outputs, cdr (dependencies))

Event: Enable collect-out-depends; name this event ‘collect-out-depends-off’.

Definition: collect-out-depends-errors (deps-map, used-signals) = if listp (deps-map)

then if net-errorp (car (deps-map))

then if cadr (error-label (car (deps-map))) ∈ used-signals

then cons (car (deps-map),

collect-out-depends-errors (cdr (deps-map),

used-signals))

else collect-out-depends-errors (cdr (deps-map),

used-signals) endif

else collect-out-depends-errors (cdr (deps-map), used-signals) endif else nil endif

Event: Enable collect-out-depends-errors; name this event ‘collect-out-depends-errors-off’.

Definition: out-depends-error (dependencies) = nlistp-or-err (collect-out-depends-errors (cdr (dependencies),

car (dependencies)),

               'unbound-output-dependencies)

Event: Enable out-depends-error; name this event ‘out-depends-error-off’.

Definition: initial-occ-state-types = nil

Definition: update-state-types (state-types, o-name, o-fn-props) = if boundp ('state-types, o-fn-props)

then cons (cons (o-name, value ('state-types, o-fn-props)), state-types) else state-types endif

Event: Enable update-state-types; name this event ‘update-state-types-off’.

Definition: collect-state-types (states, state-types) = if listp (states) ∨ (states = nil)

then collect-value-or-unknown (states, state-types) else value-or-unknown (states, state-types) endif

Event: Enable collect-state-types; name this event ‘collect-state-types-off’.

Definition: state-types-error (state-types, states) = t-or-err (set-equal (strip-cars (state-types), m-states-list (states)),

           'bad-state-types,

list (list ('module-states, states), list ('computed-states, strip-cars (state-types))))

Event: Enable state-types-error; name this event ‘state-types-error-off’.

Definition: initial-occ-tri-state-data (m-outs) = cons (cons ('free-signals, m-outs),

        '((t-wire-ins) (synonyms)))

Event: Enable initial-occ-tri-state-data; name this event ‘initial-occ-tri-state-data-off’.

Definition: function-t-wire-ins (fn, data) = if boundp ('tri-state-data, data)

    then value ('t-wire-ins, value ('tri-state-data, data))

elseif fn = 't-wire then value ('inputs, data)

else nil endif Event: Enable function-t-wire-ins; name this event ‘function-t-wire-ins-off’.

Definition: function-synonyms (fn, data) = if boundp ('tri-state-data, data)

    then value ('synonyms, value ('tri-state-data, data))

elseif fn = 'id

then pairlist (value ('outputs, data), value ('inputs, data))

else nil endif

Event: Enable function-synonyms; name this event ‘function-synonyms-off’.

Definition: add-synonyms (f-synonyms, in-map, out-map, slist) = if listp (f-synonyms)

then add-synonyms (cdr (f-synonyms), in-map, out-map, cons (cons (value (caar (f-synonyms), out-map),

value2 (cdar (f-synonyms), in-map, out-map)), slist))

else slist endif

Event: Enable add-synonyms; name this event ‘add-synonyms-off’.

Definition: update-tri-state-data (data, o-ins, o-fn, o-fn-data, in-map, out-map)

= list (cons ('free-signals,

if listp (collect-value2 (function-t-wire-ins (o-fn, o-fn-data), in-map, out-map))

then set-diff (o-ins,

collect-value2 (function-t-wire-ins (o-fn,

o-fn-data),

in-map, out-map))

elseif o-fn = 'id then nil

else o-ins endif

∪ value ('free-signals, data)),

       cons ('t-wire-ins,

append (collect-value2 (function-t-wire-ins (o-fn, o-fn-data), in-map, out-map),

value ('t-wire-ins, data))),

       cons ('synonyms,

add-synonyms (function-synonyms (o-fn, o-fn-data), in-map, out-map, value ('synonyms, data))))

Event: Enable update-tri-state-data; name this event ‘update-tri-state-data-off’.

Definition: io-signal-renames (synonyms, io-signals, slist) = if listp (synonyms)

then if (io-outp (caar (synonyms)) ∨ io-outp (parent-synonym (cdar (synonyms), slist)) ∨ (parent-synonym (cdar (synonyms), slist) ∈ io-signals)) ∧ (caar (synonyms)

≠ parent-synonym (cdar (synonyms), slist)) then cons (cons (caar (synonyms),

parent-synonym (cdar (synonyms), slist)), io-signal-renames (cdr (synonyms), io-signals, slist))

else io-signal-renames (cdr (synonyms), io-signals, slist) endif else nil endif

Event: Enable io-signal-renames; name this event ‘io-signal-renames-off’.

Definition: io-rename-error (synonyms, io-signals) = nlistp-or-err (io-signal-renames (synonyms, io-signals, synonyms),

               'renamed-io-signals)

Event: Enable io-rename-error; name this event ‘io-rename-error-off’.

Definition: t-wire-error (free-signals, t-wire-ins) = err-and (list (disjoint-or-err (remove-duplicates (t-wire-ins),

free-signals,

                           't-wire-ins-used-elsewhere),

no-duplicates-or-err (t-wire-ins,

                                'duplicate-t-wire-inputs)),
           't-wire-errors)

Event: Enable t-wire-error; name this event ‘t-wire-error-off’.

Definition: compose-tri-state-data (data, io-signals)

= list (cons ('free-signals,

parent-synonyms-list (value ('free-signals, data),

value ('synonyms, data))),

       cons ('t-wire-ins,

parent-synonyms-list (value ('t-wire-ins, data),

value ('synonyms, data))),

cons ('synonyms, value ('synonyms, data)),

io-rename-error (value ('synonyms, data), io-signals),

t-wire-error (parent-synonyms-list (value ('free-signals, data),

value ('synonyms, data)),

parent-synonyms-list (value ('t-wire-ins, data), value ('synonyms, data))))

Event: Enable compose-tri-state-data; name this event ‘compose-tri-state-data-off’.

Definition: collect-synonyms (m-outs, synonyms) = if listp (m-outs)

then if car (m-outs) = parent-synonym (car (m-outs), synonyms) then collect-synonyms (cdr (m-outs), synonyms) else cons (cons (car (m-outs),

parent-synonym (car (m-outs), synonyms)), collect-synonyms (cdr (m-outs), synonyms)) endif

else nil endif

Event: Enable collect-synonyms; name this event ‘collect-synonyms-off’.

Definition: collect-tri-state-data (m-ins, m-outs, data) = list (cons ('t-wire-ins,

intersection (m-ins, value ('t-wire-ins, data))),

       cons ('synonyms,

collect-synonyms (m-outs,

externalize-parents (m-outs,

                                            value ('synonyms,

data), m-ins, m-outs))))

Event: Enable collect-tri-state-data; name this event ‘collect-tri-state-data-off’.

Definition: tri-state-errors (data) = if net-errorp (error-entry (data, 'renamed-io-signals))

∧ net-errorp (error-entry (data, 't-wire-errors)) then list (error-entry (data, 'renamed-io-signals),

error-entry (data, 't-wire-errors))

elseif net-errorp (error-entry (data, 'renamed-io-signals)) then error-entry (data, 'renamed-io-signals) elseif net-errorp (error-entry (data, 't-wire-errors)) then error-entry (data, 't-wire-errors) else nil endif

Event: Enable tri-state-errors; name this event ‘tri-state-errors-off’.

Definition: initial-occ-data (props, m-ins, m-outs) = if listp (props)

then if listp (case on car (props):

case = delays then cons ('delays, initial-occ-delays) case = drives then cons ('drives, initial-occ-drives) case = input-types then cons ('input-types, initial-occ-in-types) case = loadings then cons ('loadings, initial-occ-loadings) case = out-depends

 then cons ('out-depends,

initial-occ-out-depends (m-ins, m-outs))

case = output-types then cons ('output-types, initial-occ-out-types) case = state-types then cons ('state-types, initial-occ-state-types) case = tri-state-data

 then cons ('tri-state-data,

initial-occ-tri-state-data (m-outs))

otherwise if car (props)

            ∈ '(gates pads primitives
                 transistors)

then cons (car (props), 0) else nil endif endcase)

then cons (case on car (props): case = delays then cons ('delays, initial-occ-delays) case = drives then cons ('drives, initial-occ-drives) case = input-types then cons ('input-types, initial-occ-in-types) case = loadings then cons ('loadings, initial-occ-loadings) case = out-depends

 then cons ('out-depends,

initial-occ-out-depends (m-ins, m-outs))

case = output-types then cons ('output-types, initial-occ-out-types) case = state-types then cons ('state-types, initial-occ-state-types) case = tri-state-data

 then cons ('tri-state-data,

initial-occ-tri-state-data (m-outs))

otherwise if car (props)

            ∈ '(gates pads primitives
                 transistors)

then cons (car (props), 0) else nil endif endcase,

initial-occ-data (cdr (props), m-ins, m-outs))

else initial-occ-data (cdr (props), m-ins, m-outs) endif else nil endif

Event: Enable initial-occ-data; name this event ‘initial-occ-data-off’.

Definition: update-oprop-binding (o-name,

o-ins, o-outs, o-fn, o-fn-props, in-map, out-map, binding)

= if listp (binding)

then cons (car (binding), case on car (binding): case = delays then update-delays (cdr (binding),

o-outs, o-fn-props, in-map,

out-map)

case = drives then update-drives (cdr (binding),

o-outs, o-fn-props, in-map, out-map)

case = input-types then update-in-types (cdr (binding), o-ins, o-fn-props) case = loadings then update-loadings (cdr (binding), o-ins, o-fn-props) case = out-depends then update-out-depends (cdr (binding),

o-outs, o-fn-props, o-ins, in-map)

case = output-types then update-out-types (cdr (binding),

o-outs, o-fn-props, in-map)

case = state-types then update-state-types (cdr (binding), o-name, o-fn-props) case = tri-state-data then update-tri-state-data (cdr (binding),

o-ins, o-fn, o-fn-props, in-map, out-map)

otherwise if car (binding)

            ∈ '(gates pads primitives
                 transistors)

then value (car (binding), o-fn-props)

+ cdr (binding) else cdr (binding) endif endcase)

else binding endif

Event: Enable update-oprop-binding; name this event ‘update-oprop-binding-off’.

Definition: update-occ-bindings (o-name, o-ins, o-outs, o-fn, o-fn-props, in-map, out-map, bindings)

= if listp (bindings)

then cons (update-oprop-binding (o-name, o-ins, o-outs, o-fn, o-fn-props, in-map, out-map, car (bindings)),

update-occ-bindings (o-name, o-ins, o-outs, o-fn, o-fn-props, in-map, out-map, cdr (bindings)))

else nil endif

Event: Enable update-occ-bindings; name this event ‘update-occ-bindings-off’.

Definition: function-properties (fn, database) = if primp (fn) then cdr (primp (fn))

else value (fn, database) endif

Event: Enable function-properties; name this event ‘function-properties-off’.

Definition: collect-occurrence-data (body, bindings, io-outputs, io-signals, database) = if listp (body)

then collect-occurrence-data (cdr (body),

update-occ-bindings (occ-name (car (body)),

mark-io-outs (occ-inputs (car (body)), io-outputs), mark-io-outs (occ-outputs (car (body)),

io-signals),

occ-function (car (body)),

function-properties (occ-function (car (body)),

database),

pairlist (value ('inputs,

function-properties (occ-function (car (body)),

database)),

mark-io-outs (occ-inputs (car (body)), io-outputs)),

pairlist (value ('outputs,

function-properties (occ-function (car (body)),

database)),

mark-io-outs (occ-outputs (car (body)), io-signals)),

bindings),

append (intersection (io-signals,

occ-outputs (car (body))),

io-outputs), io-signals, database)

else bindings endif

Event: Enable collect-occurrence-data; name this event ‘collect-occurrence-data-off’.

Definition: composed-io-types (in-types, out-types, tri-state-data, io-signals)

= list (cons ('tri-state-data,

compose-tri-state-data (tri-state-data, io-signals)),

       cons ('input-types,

car (compose-io-types (in-types, out-types, value ('t-wire-ins, tri-state-data)))),

       cons ('output-types,

cdr (compose-io-types (in-types, out-types, value ('t-wire-ins, tri-state-data)))))

Event: Enable composed-io-types; name this event ‘composed-io-types-off’.

Definition: composed-loadings-drives-delays (loadings, drives, delays) = list (cons ('delays,

loaded-delays (delays, transfer-loadings (loadings, drives))),

       cons ('drives,

net-drives-simple (drives, transfer-loadings (loadings, drives))), cons ('loadings, transfer-loadings (loadings, drives)))

Event: Enable composed-loadings-drives-delays; name this event ‘composedloadings-drives-delays-off’.

Definition: add-composed-data (prop-name, bindings, io-signals, result) = if boundp (prop-name, result) ∨ (¬ boundp (prop-name, bindings))

then result

    elseif prop-name ∈ '(input-types output-types
                       tri-state-data)

then append (composed-io-types (value ('input-types, bindings), value ('output-types, bindings), value ('tri-state-data, bindings), io-signals),

result)

    elseif prop-name ∈ '(loadings drives delays)

then append (composed-loadings-drives-delays (value ('loadings,

bindings), value ('drives, bindings), value ('delays, bindings)),

result)

else cons (alist-entry (prop-name, bindings), result) endif

Event: Enable add-composed-data; name this event ‘add-composed-data-off’.

Definition: composed-occurrence-data (bindings, io-signals, result) = if listp (bindings)

then composed-occurrence-data (cdr (bindings), io-signals, if car (bindings) ≃ nil then cons (car (bindings), result) else add-composed-data (caar (bindings),

bindings, io-signals, result) endif)

else result endif

Event: Enable composed-occurrence-data; name this event ‘composed-occurrence-data-off’.

Definition: compose-occurrence-data (bindings, io-signals) = composed-occurrence-data (bindings, io-signals, nil)

Event: Enable compose-occurrence-data; name this event ‘compose-occurrence-data-off’.

Definition: occurrence-data (props, body, m-ins, m-outs, io-signals, database) = compose-occurrence-data (collect-occurrence-data (body,

initial-occ-data (props, m-ins, m-outs),

nil,

io-signals, database),

io-signals)

Event: Enable occurrence-data; name this event ‘occurrence-data-off’.

Definition: collect-module-prop (prop-name,

m-ins, in-types, m-outs, out-types, m-states, obindings, approximate-delays-p)

= case on prop-name:

case = delays

then cons ('delays,

collect-delays (m-outs, out-types, cdr (alist-entry (prop-name, obindings)), m-ins, approximate-delays-p))

case = drives

then cons ('drives,

collect-drives (m-outs, out-types, cdr (alist-entry (prop-name, obindings)), m-ins)) case = input-types then cons ('input-types, in-types) case = inputs then cons ('inputs, m-ins) case = loadings then cons ('loadings,

collect-loadings (m-ins, in-types, cdr (alist-entry (prop-name, obindings))))

case = out-depends

 then cons ('out-depends,

collect-out-depends (m-outs,

cdr (alist-entry (prop-name, obindings))))

case = output-types then cons ('output-types, out-types) case = outputs then cons ('outputs, unmark-io-outs (m-outs)) case = state-types then if m-states = nil then nil

      else cons ('state-types,

collect-state-types (m-states,

cdr (alist-entry (prop-name,

obindings)))) endif

case = states then if m-states = nil then nil

else cons ('states, m-states) endif case = tri-state-data

 then cons ('tri-state-data,

collect-tri-state-data (m-ins, m-outs, cdr (alist-entry (prop-name,

obindings))))

otherwise alist-entry (prop-name, obindings) endcase

Event: Enable collect-module-prop; name this event ‘collect-module-prop-off’.

Definition: collect-module-props (props,

m-ins, in-types, m-outs, out-types, m-states, obindings,

approximate-delays-p)

= if listp (props)

then if listp (collect-module-prop (car (props), m-ins, in-types, m-outs, out-types, m-states, obindings, approximate-delays-p))

then cons (collect-module-prop (car (props), m-ins, in-types, m-outs, out-types, m-states, obindings, approximate-delays-p),

collect-module-props (cdr (props), m-ins, in-types, m-outs, out-types, m-states, obindings, approximate-delays-p))

else collect-module-props (cdr (props), m-ins, in-types, m-outs, out-types, m-states, obindings, approximate-delays-p) endif

else nil endif

Event: Enable collect-module-props; name this event ‘collect-module-props-off’.

Definition: module-prop-error (obinding, m-states) = if listp (obinding)

then case on car (obinding):

case = delays then delays-error (cdr (obinding)) case = drives then drives-error (cdr (obinding)) case = input-types then in-types-error (cdr (obinding)) case = loadings then loadings-error (cdr (obinding)) case = out-depends then out-depends-error (cdr (obinding)) case = output-types then out-types-error (cdr (obinding)) case = state-types then state-types-error (cdr (obinding), m-states) case = tri-state-data then tri-state-errors (cdr (obinding)) otherwise nil endcase

else obinding endif

Event: Enable module-prop-error; name this event ‘module-prop-error-off’.

Definition: collect-module-errors (obindings, m-states) = if listp (obindings)

then if net-errorp (module-prop-error (car (obindings), m-states))

then cons (module-prop-error (car (obindings), m-states),

collect-module-errors (cdr (obindings), m-states))

elseif listp (module-prop-error (car (obindings), m-states)) then append (module-prop-error (car (obindings), m-states),

collect-module-errors (cdr (obindings), m-states))

else collect-module-errors (cdr (obindings), m-states) endif else nil endif

Event: Enable collect-module-errors; name this event ‘collect-module-errors-off’.

Definition: collect-module-data (props,

m-name, m-ins, m-outs, m-states, obindings, approximate-delays-p)

= if net-errorp (nlistp-or-err (collect-module-errors (obindings, m-states),

list ('module, m-name)))

then cons (m-name,

cons (nlistp-or-err (collect-module-errors (obindings, m-states),

list ('module, m-name)),

collect-module-props (props, m-ins,

if 'input-types ∈ props

then collect-in-types (m-ins,

                   value ('input-types,

obindings))

else nil endif, m-outs,

if 'output-types ∈ props

then collect-out-types (m-outs,

                    value ('output-types,

obindings), m-ins,

                    value ('input-types,

obindings))

else nil endif, m-states, obindings, approximate-delays-p)))

else cons (m-name,

collect-module-props (props, m-ins,

if 'input-types ∈ props

then collect-in-types (m-ins,

             value ('input-types,

obindings))

else nil endif, m-outs,

if 'output-types ∈ props

then collect-out-types (m-outs,

              value ('output-types,

obindings), m-ins,

              value ('input-types,

obindings))

else nil endif, m-states, obindings, approximate-delays-p)) endif Event: Enable collect-module-data; name this event ‘collect-module-data-off’.

Definition: module-data (module, props, database, approximate-delays-p) = collect-module-data (props,

module-name (module), module-inputs (module), mark-io-outs (module-outputs (module),

intersection (module-inputs (module),

module-outputs (module))),

module-statenames (module),

occurrence-data (props, module-occurrences (module), module-inputs (module), mark-io-outs (module-outputs (module),

intersection (module-inputs (module),

module-outputs (module))),

intersection (module-inputs (module),

module-outputs (module)),

database),

approximate-delays-p)

Event: Enable module-data; name this event ‘module-data-off’.

Definition: module-database (netlist, props, approximate-delays-p) = if listp (netlist)

then cons (module-data (car (netlist), props, module-database (cdr (netlist),

props,

approximate-delays-p),

approximate-delays-p),

module-database (cdr (netlist), props, approximate-delays-p))

else nil endif

Event: Enable module-database; name this event ‘module-database-off’.

Definition: required-for-prop (prop) = case on prop:

case = delays

    then '(delays loadings drives input-types output-types

           inputs outputs tri-state-data)

case = drives

     then '(drives loadings input-types output-types inputs
            outputs tri-state-data)

case = input-types

     then '(input-types output-types inputs outputs
            tri-state-data)

case = loadings

     then '(loadings drives input-types output-types inputs
            outputs tri-state-data)

case = out-depends

     then '(out-depends inputs outputs)

case = output-types

     then '(output-types input-types inputs outputs
            tri-state-data)

otherwise if prop ∈ all-module-props then list (prop) else nil endif endcase

Event: Enable required-for-prop; name this event ‘required-for-prop-off’.

Definition: get-required-props (props, wanted-props) = if listp (props)

then required-for-prop (car (props))

∪ get-required-props (cdr (props), wanted-props) else wanted-props endif

Event: Enable get-required-props; name this event ‘get-required-props-off’.

Definition: required-props (props) = get-required-props (props, props)

Event: Enable required-props; name this event ‘required-props-off’.

Definition: unbind-netlist-props-0 (props, database) = if listp (database)

then cons (cons (caar (database), if net-errorp (cadar (database)) then cons (cadar (database),

unbind-list (props, cddar (database)))

else unbind-list (props, cdar (database)) endif), unbind-netlist-props-0 (props, cdr (database)))

else nil endif Event: Enable unbind-netlist-props-0; name this event ‘unbind-netlist-props-0-off’.

Definition: unbind-netlist-props (props, database) = if listp (props) then unbind-netlist-props-0 (reverse (props), database)

else database endif

Event: Enable unbind-netlist-props; name this event ‘unbind-netlist-props-off’.

Definition: netlist-properties (netlist, props, approximate-delays-p) = if net-errorp (subset-or-err (props,

all-module-props,

                           'unknown-properties))

then subset-or-err (props, all-module-props, 'unknown-properties) elseif listp (collect-net-errors (module-database (netlist,

required-props (props), approximate-delays-p)))

then pred-error ('netlist-errors,

collect-net-errors (module-database (netlist, required-props (props), approximate-delays-p)))

else unbind-netlist-props (set-diff (required-props (props), props),

module-database (netlist, required-props (props), approximate-delays-p)) endif

Event: Enable netlist-properties; name this event ‘netlist-properties-off’.

Definition: netlist-database (netlist, approximate-delays-p) = unbind-netlist-props (set-diff (required-props (all-module-props),

all-module-props), module-database (netlist,

required-props (all-module-props), approximate-delays-p))

Event: Enable netlist-database; name this event ‘netlist-database-off’.

Definition: predicate-properties

= '(drives input-types loadings out-depends output-types
      state-types)

Event: Enable predicate-properties; name this event ‘predicate-properties-off’.

Event: Enable *1*predicate-properties; name this event ‘g*1*predicate-properties-off’.

Definition: top-level-predicate (netlist) = if net-errorp (netlist-syntax-ok (netlist))

then netlist-syntax-ok (netlist)

elseif net-errorp (netlist-properties (netlist, predicate-properties, t))

then netlist-properties (netlist, predicate-properties, t)

else t endif

Event: Enable top-level-predicate; name this event ‘top-level-predicate-off’.

Definition: lsi-top-level-predicate (netlist, token-size, max-hierarchical-name-length) = if net-errorp (lsi-netlist-syntax-ok (netlist,

token-size,

max-hierarchical-name-length))

then lsi-netlist-syntax-ok (netlist, token-size, max-hierarchical-name-length)

elseif net-errorp (netlist-properties (netlist, predicate-properties, t))

then netlist-properties (netlist, predicate-properties, t)

else t endif

Event: Enable lsi-top-level-predicate; name this event ‘lsi-top-level-predicate-off’.

Definition: pname-listp (x) = if listp (x)

then name-okp (car (x))

∧ (car (x) ∉ cdr (x)) ∧ pname-listp (cdr (x))

else x = nil endif

Event: Enable pname-listp; name this event ‘pname-listp-off’.

Definition: function-call-ok (x, number-of-args) = if listp (x) ∧ litatom (car (x))

then if properp (x)

then if number-of-args ∈ N

then t-or-err (length (cdr (x)) = number-of-args,

                          cons ('function,

cons (car (x),

cons ('has,

cons (number-of-args, '(args))))),

list ('it, 'is, 'given, length (cdr (x)), 'in, x))

else t endif

         else pred-error ('ill-formed-function-call, x) endif

else pred-error ('not-function-call, x) endif

Event: Enable function-call-ok; name this event ‘function-call-ok-off’.

Definition: io-label (arg, what) = if arg ∈ N then list ('unknown, what, arg)

else list (what, arg) endif

Event: Enable io-label; name this event ‘io-label-off’.

Definition: input-label (input) = io-label (input, 'input)

Event: Enable input-label; name this event ‘input-label-off’.

Definition: output-label (output) = io-label (output, 'output)

Event: Enable output-label; name this event ‘output-label-off’.

Definition: state-label (state) = io-label (state, 'state)

Event: Enable state-label; name this event ‘state-label-off’.

Definition: ucar (x) = if listp (x) then car (x)

else unknown endif

Event: Enable ucar; name this event ‘ucar-off’.

Definition: ucdr (x) = if listp (x) then cdr (x)

else unknown endif

Event: Enable ucdr; name this event ‘ucdr-off’.

Definition: io-car (args) = if listp (args) then car (args)

elseif args ∈ N then args

else 1 endif

Event: Enable io-car; name this event ‘io-car-off’.

Definition: io-cdr (args) = if args ∈ N then 1 + args

elseif args ≃ nil then 2

elseif cdr (args) ∈ N then nil

else cdr (args) endif

Event: Enable io-cdr; name this event ‘io-cdr-off’.

Definition: out-prop-signals (out-depends, inputs) = if unknownp (out-depends) then inputs

else out-depends endif

Event: Enable out-prop-signals; name this event ‘out-prop-signals-off’.

Definition: id-out-prop-signals (output-type, out-depends, inputs) = if listp (output-type) then output-type

else out-prop-signals (out-depends, inputs) endif

Event: Enable id-out-prop-signals; name this event ‘id-out-prop-signals-off’.

Definition: all-input-types

= '(boolp clk free level parametric tri-state ttl
      ttl-tri-state)

Event: Enable all-input-types; name this event ‘all-input-types-off’.

Event: Enable *1*all-input-types; name this event ‘g*1*all-input-types-off’.

Definition: all-output-types (inputs) = append (listify (inputs), delete* ('free, all-input-types))

Event: Enable all-output-types; name this event ‘all-output-types-off’.

Definition: pin-type-ok (type, input, io-signals, fname) = label-error (if fname = 't-wire

then t-or-err (type = 'tri-state,

                         't-wire-input-type-not-tri-state,

type)

elseif input ∈ io-signals

then t-or-err (tri-state-typep (type),

                         'bad-io-signal-type,

type) else t-or-err (type ∈ all-input-types,

                         'unknown-type,

type) endif,

input-label (input))

Event: Enable pin-type-ok; name this event ‘pin-type-ok-off’.

Definition: pin-type-errors (types, inputs, io-signals, fname) = if listp (types)

then cons (t-or-err (listp (inputs) ∨ (inputs ∈ N),

                    'too-many-input-types,

cons (length (types), '(extras))), cons (pin-type-ok (car (types), io-car (inputs), io-signals, fname),

pin-type-errors (cdr (types), io-cdr (inputs), io-signals, fname)))

else list (nil-or-err (types, 'not-proper-list), nlistp-or-err (inputs, 'inputs-without-types)) endif

Event: Enable pin-type-errors; name this event ‘pin-type-errors-off’.

Definition: pin-types-ok (in-types, alist) = err-and (pin-type-errors (in-types,

if unknownp (value ('inputs, alist)) then 1 else value ('inputs, alist) endif, intersection (value ('inputs, alist),

value ('outputs, alist)),

value ('primp-name, alist)),

           'input-types)

Event: Enable pin-types-ok; name this event ‘pin-types-ok-off’.

Definition: pout-type-ok (type, output, out-depends, inputs, io-signals, fname, in-type-map) = label-error (if fname = 't-wire

then t-or-err (type = 'tri-state,

                         't-wire-output-type-not-tri-state,

type)

elseif output ∈ io-signals then if tri-state-typep (type)

then t-or-err ((¬ tri-state-typep (value (output,

in-type-map)))

∨ (type = value (output,

in-type-map)),

                              'different-io-signal-in-and-out-types,
                              list (list ('input-type,

value (output, in-type-map)), list ('output-type, type)))

else pred-error ('bad-io-signal-type, type) endif elseif listp (type) then t-or-err (properp (type)

∧ (length (type) = 1)

∧ if unknownp (out-prop-signals (out-depends,

inputs))

then name-okp (car (type))

else car (type)

∈ out-prop-signals (out-depends,

inputs) endif,

                         'unknown-type,

type)

else t-or-err (type ∈ all-output-types (nil),

                         'unknown-type,

type) endif,

output-label (output))

Event: Enable pout-type-ok; name this event ‘pout-type-ok-off’.

Definition: pout-type-errors (types,

outputs, out-depends, inputs, io-signals, fname, in-type-map)

= if listp (types)

then cons (t-or-err (listp (outputs) ∨ (outputs ∈ N),

                    'too-many-output-types,

cons (length (types), '(extras))), cons (pout-type-ok (car (types),

io-car (outputs), ucar (out-depends), inputs, io-signals, fname, in-type-map),

pout-type-errors (cdr (types), io-cdr (outputs), ucdr (out-depends), inputs, io-signals, fname, in-type-map)))

else list (nil-or-err (types, 'not-proper-list), nlistp-or-err (outputs, 'outputs-without-types)) endif

Event: Enable pout-type-errors; name this event ‘pout-type-errors-off’.

Definition: pout-types-ok (out-types, alist) = err-and (pout-type-errors (out-types,

if unknownp (value ('outputs, alist)) then 1 else value ('outputs, alist) endif, value ('out-depends, alist), value ('inputs, alist), intersection (value ('inputs, alist),

value ('outputs, alist)),

value ('primp-name, alist), pairlist (value ('inputs, alist),

value ('input-types, alist))),

           'output-types)

Event: Enable pout-types-ok; name this event ‘pout-types-ok-off’.

Definition: p-name-prop-value-ok (name, out-type, out-depends, inputs, label) = t-or-err (if unknownp (id-out-prop-signals (out-type, out-depends, inputs))

then name-okp (name)

else name ∈ id-out-prop-signals (out-type, out-depends, inputs) endif,

label, name)

Event: Enable p-name-prop-value-ok; name this event ‘p-name-prop-value-ok-off’.

Definition: p-t-wire-args-ok (args, out-depends, inputs, label) = err-and (if unknownp (out-prop-signals (out-depends, inputs))

then list (name-list-ok (args, 'ill-formed-args, f)) else list (subset-or-err (args,

out-prop-signals (out-depends,

inputs),

                              'unknown-args),

no-duplicates-or-err (args,

                                    'duplicate-args),

nil-or-err (last-cdr (args),

                           'not-proper-list)) endif,

label)

Event: Enable p-t-wire-args-ok; name this event ‘p-t-wire-args-ok-off’.

Definition: phalf-delay-ok (d, type, label) = if length (d) = 2

    then err-and (list (if type ∈ '(boolp clk level parametric
                             tri-state)

then t-or-err (car (d) ∈ N,

                               'slope-not-number,

list (list ('slope, car (d)),

list ('output-type, type)))

elseif type ∈ '(ttl ttl-tri-state)

then t-or-err (ps-pfp (car (d)),

            'slope-not-ps-pf,

list (list ('slope, car (d)),

list ('output-type, type)))

else t-or-err ((car (d) ∈ N)

∨ ps-pfp (car (d)),

           'slope-not-number-or-ps-pf,

car (d)) endif,

t-or-err (cadr (d) ∈ N,

       'intercept-not-number,

cadr (d)), nil-or-err (last-cdr (d), 'not-proper-list)),

label)

else pred-error (label, list ('length-not-2, d)) endif

Event: Enable phalf-delay-ok; name this event ‘phalf-delay-ok-off’.

Definition: pdelay-ok (delay, output, type, out-depends, inputs) = label-error (if litatom (delay) ∨ indexp (delay)

then p-name-prop-value-ok (delay, type, out-depends, inputs,

                  'unknown-delay)

elseif listp (delay) ∧ (car (delay) = 'or) then p-t-wire-args-ok (cdr (delay),

out-depends,

inputs,

             'bad-or-delay)

elseif length (delay) = 2 then err-and (list (nlistp-or-err (type,

                     'expected-literal-type),

phalf-delay-ok (car (delay), type,

                      'low-to-high),

phalf-delay-ok (cadr (delay), type,

                      'high-to-low),

nil-or-err (last-cdr (delay),

                  'not-proper-list)),
      'bad-literal-delay)

else pred-error ('unknown-delay, delay) endif, output-label (output))

Event: Enable pdelay-ok; name this event ‘pdelay-ok-off’.

Definition: pdelays-errors (delays, outputs, types, out-depends, inputs) = if listp (delays)

then cons (t-or-err (listp (outputs) ∨ (outputs ∈ N),

                    'too-many-delays,

cons (length (delays), '(extras))), cons (pdelay-ok (car (delays),

io-car (outputs), ucar (types), ucar (out-depends), inputs), pdelays-errors (cdr (delays),

io-cdr (outputs), ucdr (types), ucdr (out-depends), inputs)))

else list (nil-or-err (delays, 'not-proper-list), nlistp-or-err (outputs, 'outputs-without-delays)) endif

Event: Enable pdelays-errors; name this event ‘pdelays-errors-off’.

Definition: pdelays-ok (delays, alist) = err-and (pdelays-errors (delays,

if unknownp (value ('outputs, alist)) then 1 else value ('outputs, alist) endif, value ('output-types, alist), value ('out-depends, alist), value ('inputs, alist)),

           'delays)

Event: Enable pdelays-ok; name this event ‘pdelays-ok-off’.

Definition: pdrive-ok (drive, output, type, out-depends, inputs) = label-error (if litatom (drive) ∨ indexp (drive)

then p-name-prop-value-ok (drive, type, out-depends, inputs,

                        'unknown-drive)

elseif listp (drive) ∧ (car (drive) = 'min) then p-t-wire-args-ok (cdr (drive),

out-depends,

inputs,

                   'bad-min-drive)
elseif type ∈ '(boolp clk level parametric
             tri-state)

then t-or-err (drive ∈ N,

            'bad-drive,

list (list ('drive, drive), list ('type, type)))

elseif type ∈ '(ttl ttl-tri-state)

then t-or-err (map (drive),

            'bad-drive,

list (list ('drive, drive), list ('type, type)))

elseif (drive ∈ N) ∨ map (drive) then t-or-err (type ≃ nil,

            'expected-literal-type,

list (list ('drive, drive), list ('type, type)))

else pred-error ('unknown-drive, drive) endif, output-label (output))

Event: Enable pdrive-ok; name this event ‘pdrive-ok-off’.

Definition: pdrives-errors (drives, outputs, types, out-depends, inputs) = if listp (drives)

then cons (t-or-err (listp (outputs) ∨ (outputs ∈ N),

       'too-many-drives,

cons (length (drives), '(extras))), cons (pdrive-ok (car (drives),

io-car (outputs), ucar (types), ucar (out-depends), inputs), pdrives-errors (cdr (drives),

io-cdr (outputs), ucdr (types), ucdr (out-depends),

inputs)))

else list (nil-or-err (drives, 'not-proper-list), nlistp-or-err (outputs, 'outputs-without-drives)) endif

Event: Enable pdrives-errors; name this event ‘pdrives-errors-off’.

Definition: pdrives-ok (drives, alist) = err-and (pdrives-errors (drives,

if unknownp (value ('outputs, alist)) then 1 else value ('outputs, alist) endif, value ('output-types, alist), value ('out-depends, alist), value ('inputs, alist)),

           'drives)

Event: Enable pdrives-ok; name this event ‘pdrives-ok-off’.

Definition: ploading-ok (loading, input, type) = label-error (t-or-err (if type ∈ '(boolp clk free level

                              parametric tri-state)

then loading ∈ N

                    elseif type ∈ '(ttl ttl-tri-state)

then pfp (loading)

else (loading ∈ N) ∨ pfp (loading) endif,

                    'bad-loading,

list (list ('loading, loading),

list ('input-type, type))),

input-label (input))

Event: Enable ploading-ok; name this event ‘ploading-ok-off’.

Definition: ploadings-errors (loadings, inputs, types) = if listp (loadings)

then cons (t-or-err (listp (inputs) ∨ (inputs ∈ N),

                    'too-many-loadings,

cons (length (loadings), '(extras))), cons (ploading-ok (car (loadings), io-car (inputs), ucar (types)),

ploadings-errors (cdr (loadings), io-cdr (inputs), ucdr (types)))) else list (nil-or-err (loadings, 'not-proper-list),

nlistp-or-err (inputs, 'inputs-without-loadings)) endif

Event: Enable ploadings-errors; name this event ‘ploadings-errors-off’.

Definition: ploadings-ok (loadings, alist) = err-and (ploadings-errors (loadings,

if unknownp (value ('inputs, alist)) then 1 else value ('inputs, alist) endif, value ('input-types, alist)),

           'loadings)

Event: Enable ploadings-ok; name this event ‘ploadings-ok-off’.

Definition: plsi-name-ok (lsi-name-entry, alist) = err-and (list (lsi-name-ok (if listp (lsi-name-entry)

then car (lsi-name-entry) else lsi-name-entry endif,

                         64),

if (lsi-name-entry ≃ nil)

∨ unknownp (value ('inputs, alist)) then t else t-or-err (set-equal (cdr (lsi-name-entry),

value ('inputs, alist)),

                          'input-conflict,

list (list ('inputs,

value ('inputs, alist)),

                             list ('lsi-inputs,

cdr (lsi-name-entry)))) endif,

if unknownp (value ('inputs, alist))

∨ unknownp (value ('outputs, alist)) then t else t-or-err (listp (intersection (value ('inputs,

alist),

                                         value ('outputs,

alist)))

= is-head (unpack ('bd),

unpack (if listp (lsi-name-entry) then car (lsi-name-entry) else lsi-name-entry endif)),

                          'bidirect-conflict,

list (list ('lsi-name, if listp (lsi-name-entry) then car (lsi-name-entry) else lsi-name-entry endif),

                             list ('io-signals,

intersection (value ('inputs,

alist),

                                           value ('outputs,

alist))))) endif),

           'lsi-name)

Event: Enable plsi-name-ok; name this event ‘plsi-name-ok-off’.

Definition: pout-depends-one-ok (out-depends, output, inputs) = if unknownp (inputs)

then name-list-ok (out-depends, output-label (output), f)

else err-and (list (subset-or-err (out-depends, inputs,

                              'unknown-output-dependencies),

no-duplicates-or-err (out-depends,

                                    'duplicates),

nil-or-err (last-cdr (out-depends),

                           'not-proper-list)),

output-label (output)) endif

Event: Enable pout-depends-one-ok; name this event ‘pout-depends-one-ok-off’.

Definition: pout-depends-errors (out-depends, outputs, inputs) = if listp (out-depends)

then cons (t-or-err (listp (outputs) ∨ (outputs ∈ N),

                    'too-many-out-depends,

cons (length (out-depends), '(extras))), cons (pout-depends-one-ok (car (out-depends),

io-car (outputs), inputs),

pout-depends-errors (cdr (out-depends), io-cdr (outputs), inputs)))

else list (nil-or-err (out-depends, 'not-proper-list),

nlistp-or-err (outputs,

                      'outputs-without-out-depends)) endif

Event: Enable pout-depends-errors; name this event ‘pout-depends-errors-off’.

Definition: pout-depends-ok (out-depends, alist) = err-and (pout-depends-errors (out-depends,

if unknownp (value ('outputs, alist)) then 1 else value ('outputs, alist) endif, value ('inputs, alist)),

           'out-depends)

Event: Enable pout-depends-ok; name this event ‘pout-depends-ok-off’.

Definition: pstates-ok (states) = if listp (states)

then err-and (cons (t-or-err (listp (cdr (states)),

                           'list-of-length-1-not-allowed,

states), name-list-errors (states, f)),

                'states)

elseif states = nil then t else t-or-err (name-okp (states),

               'states,

list ('bad-name, states)) endif

Event: Enable pstates-ok; name this event ‘pstates-ok-off’.

Definition: addressed-state (address-bits, word-value) = if address-bits ≃ 0 then word-value

else cons (addressed-state (address-bits − 1, word-value), addressed-state (address-bits − 1, word-value)) endif

Event: Enable addressed-state; name this event ‘addressed-state-off’.

Definition: boolp-list-ok (lst, label) = err-and (list (nlistp-or-err (remove-duplicates (delete* ('boolp, lst)),

                         'not-boolp),

nil-or-err (last-cdr (lst), 'not-proper-list)), label)

Event: Enable boolp-list-ok; name this event ‘boolp-list-ok-off’.

Definition: literal-state-type-ok (type) = if ramp (type) then boolp-list-ok (ram-guts (type), 'bad-ram-type)

elseif romp (type)

then boolp-list-ok (rom-guts (type), 'bad-rom-type)

elseif stubp (type)

then boolp-list-ok (stub-guts (type), 'bad-stub-type) else t-or-err (type = 'boolp, 'unknown-type, type) endif

Event: Enable literal-state-type-ok; name this event ‘literal-state-type-ok-off’.

Definition: pmemory-word-call-ok (type) = if listp (type) ∧ (car (type) ∈ '(ram rom stub))

then if net-errorp (function-call-ok (type, 1)) then function-call-ok (type, 1) else label-error (if caadr (type) = 'quote

then if net-errorp (function-call-ok (cadr (type),

1))

then function-call-ok (cadr (type), 1) else boolp-list-ok (cadadr (type),

                                           'bad-memory-bit-types) endif
                       else pred-error ('unknown-memory-bits-call,

cadr (type)) endif,

cons ('bad, cons (car (type), '(call)))) endif

else pred-error ('not-memory-word-call, type) endif

Event: Enable pmemory-word-call-ok; name this event ‘pmemory-word-call-ok-off’.

Definition: paddressed-state-call-ok (type) = if listp (type) ∧ (car (type) = 'addressed-state)

then if net-errorp (function-call-ok (type, 2)) then function-call-ok (type, 2) else err-and (list (t-or-err (cadr (type) ∈ N,

                               'address-bits-not-number,

cadr (type)), pmemory-word-call-ok (caddr (type))),

                    '(bad addressed-state call)) endif

else pred-error ('not-addressed-state-call, type) endif

Event: Enable paddressed-state-call-ok; name this event ‘paddressed-state-call-ok-off’.

Definition: one-pstate-type-ok (type) = if type ≃ nil then literal-state-type-ok (type)

elseif car (type) ∈ '(ram rom stub) then pmemory-word-call-ok (type)

    elseif car (type) = 'addressed-state

then paddressed-state-call-ok (type)

else boolp-list-ok (type, 'bad-type-list) endif

Event: Enable one-pstate-type-ok; name this event ‘one-pstate-type-ok-off’.

Definition: pstate-type-list-errors (types, fname) = if listp (types)

then if (fname = 'mem-32x32)

           ∧ (car (types) ∈ '(numberp number-listp))

then pstate-type-list-errors (cdr (types), fname) else insert (one-pstate-type-ok (car (types)),

pstate-type-list-errors (cdr (types), fname)) endif

else list (nil-or-err (types, 'not-proper-list)) endif

Event: Enable pstate-type-list-errors; name this event ‘pstate-type-list-errors-off’.

Definition: pstate-type-ok (type, state, fname) = if (type ≃ nil)

      ∨ (car (type) ∈ '(ram rom stub addressed-state))

then label-error (one-pstate-type-ok (type), state-label (state))

else err-and (pstate-type-list-errors (type, fname), state-label (state)) endif

Event: Enable pstate-type-ok; name this event ‘pstate-type-ok-off’.

Definition: pstate-types-errors (types, states, fname) = if listp (types)

then cons (t-or-err (listp (states) ∨ (states ∈ N),

                    'too-many-state-types,

cons (length (types), '(extras))), cons (pstate-type-ok (car (types), io-car (states), fname),

pstate-types-errors (cdr (types), io-cdr (states), fname)))

else list (nil-or-err (types, 'not-proper-list), nlistp-or-err (states, 'states-without-types)) endif Event: Enable pstate-types-errors; name this event ‘pstate-types-errors-off’.

Definition: pstate-types-ok (state-types, alist) = err-and (if listp (value ('states, alist))

∨ (value ('states, alist) = nil) then pstate-types-errors (state-types,

value ('states, alist), value ('primp-name, alist))

else list (pstate-type-ok (state-types, value ('states, alist), value ('primp-name, alist))) endif,

           'state-types)

Event: Enable pstate-types-ok; name this event ‘pstate-types-ok-off’.

Definition: unknown-args (x, signals, states, arg-listp) = if arg-listp

then if listp (x)

then unknown-args (car (x), signals, states, f)

∪ unknown-args (cdr (x), signals, states, t) else nil endif

elseif x ≃ nil

then if (x ∈ signals) ∨ (x ∈ states) then nil elseif unknownp (signals) ∨ unknownp (states) then if name-okp (x) then nil else list (x) endif

else list (x) endif elseif car (x) = 'quote then nil elseif litatom (car (x)) then unknown-args (cdr (x), signals, states, t) else nil endif

Event: Enable unknown-args; name this event ‘unknown-args-off’.

Definition: presult-form-errors (x, arg-listp) = if arg-listp

then if listp (x)

then if net-errorp (presult-form-errors (car (x), f)) then cons (presult-form-errors (car (x), f),

presult-form-errors (cdr (x), t))

else append (presult-form-errors (car (x), f),

presult-form-errors (cdr (x), t)) endif

elseif x = nil then nil

else list (pred-error ('not-proper-list, x)) endif elseif listp (x) then if net-errorp (function-call-ok (x,

case on car (x): case = quote then 1 case = cons then 2 otherwise unknown endcase))

then function-call-ok (x, case on car (x): case = quote then 1 case = cons then 2 otherwise unknown endcase)

elseif car (x) = 'quote then nil

else presult-form-errors (cdr (x), t) endif else nil endif

Event: Enable presult-form-errors; name this event ‘presult-form-errors-off’.

Definition: presult-ok (result, signals, states, label) = err-and (cons (nlistp-or-err (unknown-args (result, signals, states, f),

                          'unknown-args),

presult-form-errors (list (result), t)), label)

Event: Enable presult-ok; name this event ‘presult-ok-off’.

Definition: results-length (x) = if x ≃ nil then 0

elseif car (x) = 'cons then 1 + results-length (caddr (x))

else 0 endif

Event: Enable results-length; name this event ‘results-length-off’.

Definition: presults-errors (results, outputs, out-depends, inputs, states, label)

= if results ≃ nil then list (pred-error ('unknown-dual-eval-form, results)) elseif results = ''nil then list (nlistp-or-err (outputs,

cons ('missing, cons (label, '(values)))))

elseif car (results) = 'cons then if net-errorp (function-call-ok (results, 2))

then list (function-call-ok (results, 2))

else cons (t-or-err (listp (outputs) ∨ (outputs ∈ N),

                     'too-many-values,

cons (results-length (results),

                          '(or more extras))),

cons (presult-ok (cadr (results),

out-prop-signals (ucar (out-depends),

inputs),

states,

io-label (io-car (outputs), label)),

presults-errors (caddr (results), io-cdr (outputs), ucdr (out-depends), inputs, states, label))) endif

elseif listp (outputs) ∨ (outputs = nil) then list (pred-error (cons ('evaluation,

                       cons ('should,
                           cons ('return,

cons (length (outputs),

                                     '(results))))),

results),

presult-ok (results, inputs, states, list (label, 'list, outputs)))

else list (presult-ok (results, inputs, states,

                 'unknown-outputs)) endif

Event: Enable presults-errors; name this event ‘presults-errors-off’.

Definition: presults-ok (results, alist) = err-and (presults-errors (results, if unknownp (value ('outputs, alist)) then 1 else value ('outputs, alist) endif, value ('out-depends, alist), value ('inputs, alist), if unknownp (value ('states, alist)) then value ('states, alist) else m-states-list (value ('states,

alist)) endif,

'output),
'results)

Event: Enable presults-ok; name this event ‘presults-ok-off’.

Definition: pnew-states-ok (new-states, alist) = err-and (if listp (value ('states, alist))

∨ (value ('states, alist) = nil) then presults-errors (new-states,

value ('states, alist), unknown, value ('inputs, alist), value ('states, alist),

     'state)

elseif litatom (value ('states, alist))

∨ indexp (value ('states, alist)) then list (presult-ok (new-states,

value ('inputs, alist), list (value ('states, alist)), state-label (value ('states, alist))))

else presults-errors (new-states,

    1,

unknown,

value ('inputs, alist), unknown, 'state) endif,

'new-states)

Event: Enable pnew-states-ok; name this event ‘pnew-states-ok-off’.

Definition: primitive-prop-ok (prop, alist, keys) = if listp (prop)

then if car (prop) ∈ keys then pred-error ('duplicate-property, prop) elseif car (prop) = 'delays then pdelays-ok (cdr (prop), alist) elseif car (prop) = 'drives then pdrives-ok (cdr (prop), alist) elseif car (prop) = 'input-types then pin-types-ok (cdr (prop), alist) elseif car (prop) = 'inputs then name-list-ok (cdr (prop), 'inputs, f) elseif car (prop) = 'loadings then ploadings-ok (cdr (prop), alist) elseif car (prop) = 'lsi-name then plsi-name-ok (cdr (prop), alist) elseif car (prop) = 'new-states then pnew-states-ok (cdr (prop), alist) elseif car (prop) = 'out-depends then pout-depends-ok (cdr (prop), alist) elseif car (prop) = 'output-types then pout-types-ok (cdr (prop), alist) elseif car (prop) = 'outputs then name-list-ok (cdr (prop), 'outputs, f) elseif car (prop) = 'results then presults-ok (cdr (prop), alist) elseif car (prop) = 'state-types then pstate-types-ok (cdr (prop), alist) elseif car (prop) = 'states then pstates-ok (cdr (prop)) elseif car (prop)

     ∈ '(gates pads primitives transistors)

then t-or-err (cdr (prop) ∈ N, car (prop),

            list ('value-not-number, cdr (prop)))

else pred-error ('unknown-property, car (prop)) endif else pred-error ('not-key-value-pair, prop) endif

Event: Enable primitive-prop-ok; name this event ‘primitive-prop-ok-off’.

Definition: primitive-prop-errors (props, alist, keys) = if listp (props)

then cons (primitive-prop-ok (car (props), alist, keys),

primitive-prop-errors (cdr (props), alist, cons (caar (props), keys)))

else list (nlistp-or-err (delete* ('pads,

                     if subset ('(new-states
                               state-types

                                        states),

set-diff (primitive-properties,

keys)) then set-diff (set-diff (primitive-properties, keys),

                                         '(new-states
                                           state-types
                                           states))

else set-diff (primitive-properties, keys) endif),

                      'missing-properties),

nil-or-err (props, 'not-proper-list)) endif

Event: Enable primitive-prop-errors; name this event ‘primitive-prop-errors-off’.

Definition: ok-name-list (pname, props) = if pname-listp (value-or-unknown (pname, props))

then value-or-unknown (pname, props)

else unknown endif

Event: Enable ok-name-list; name this event ‘ok-name-list-off’.

Definition: ok-states (props) = if boundp ('states, props)

then if listp (value ('states, props))

∨ (value ('states, props) = nil) then if pname-listp (value ('states, props)) then value ('states, props) else unknown endif

elseif name-okp (value ('states, props))

then value ('states, props)

else unknown endif else nil endif

Event: Enable ok-states; name this event ‘ok-states-off’.

Definition: ok-out-depends (ods, inputs) = if listp (ods)

then cons (if pname-listp (car (ods))

∧ (unknownp (inputs) ∨ subset (car (ods), inputs)) then car (ods) else unknown endif, ok-out-depends (cdr (ods), inputs))

else nil endif

Event: Enable ok-out-depends; name this event ‘ok-out-depends-off’.

Definition: ok-input-types (types) = if listp (types)

then cons (if car (types) ∈ all-input-types then car (types) else unknown endif, ok-input-types (cdr (types)))

else nil endif

Event: Enable ok-input-types; name this event ‘ok-input-types-off’.

Definition: ok-output-types (out-types, out-depends, inputs) = if listp (out-types)

then cons (if if listp (car (out-types))

then properp (car (out-types))

∧ (length (car (out-types)) = 1)

∧ if unknownp (out-prop-signals (ucar (out-depends),

inputs))

then name-okp (caar (out-types))

else caar (out-types)

∈ out-prop-signals (ucar (out-depends),

inputs) endif

else car (out-types) ∈ all-output-types (nil) endif then car (out-types) else unknown endif, ok-output-types (cdr (out-types), ucdr (out-depends), inputs))

else nil endif

Event: Enable ok-output-types; name this event ‘ok-output-types-off’.

Definition: parent-props-alist (primp-entry) = list (cons ('primp-name, car (primp-entry)),

cons ('inputs, ok-name-list ('inputs, cdr (primp-entry))), cons ('outputs, ok-name-list ('outputs, cdr (primp-entry))), cons ('states, ok-states (cdr (primp-entry))),

       cons ('out-depends,

ok-out-depends (value ('out-depends, cdr (primp-entry)),

ok-name-list ('inputs, cdr (primp-entry)))),

       cons ('input-types,

ok-input-types (value ('input-types, cdr (primp-entry)))),

       cons ('output-types,

ok-output-types (value ('output-types, cdr (primp-entry)),

ok-out-depends (value ('out-depends,

cdr (primp-entry)), ok-name-list ('inputs,

cdr (primp-entry))),

ok-name-list ('inputs, cdr (primp-entry)))))

Event: Enable parent-props-alist; name this event ‘parent-props-alist-off’.

Definition: primitive-ok (p) = if listp (p)

then err-and (cons (t-or-err (name-okp (car (p)),

                           'bad-primitive-name,

car (p)), primitive-prop-errors (cdr (p),

parent-props-alist (p), nil)),

list ('primitive, car (p)))

else pred-error ('not-a-primitive, p) endif

Event: Enable primitive-ok; name this event ‘primitive-ok-off’.

Definition: primp-database-errors (d) = if d ≃ nil then nil

else cons (primitive-ok (car (d)), primp-database-errors (cdr (d))) endif

Event: Enable primp-database-errors; name this event ‘primp-database-errors-off’.

Definition: primp-database-predicate = err-and (primp-database-errors (primp-database),

           'primp-database-errors)

Event: Enable primp-database-predicate; name this event ‘primp-database-predicate-off’.

Event: Disable boundp; name this event ‘boundp-on’.

Definition: subnet0 (flg, x0 , netlist, used-modules, result) = case on flg:

case = 0

then if lookup-module (x0 , result) ∨ (x0 ∈ used-modules) then result elseif listp (lookup-module (x0 , netlist)) then cons (lookup-module (x0 , netlist), subnet0 (1,

module-occurrences (lookup-module (x0 , netlist)), netlist, cons (x0 , used-modules), result))

else result endif case = 1 then if x0 ≃ nil then result else subnet0 (1,

cdr (x0 ), netlist, used-modules, subnet0 (0,

occ-function (car (x0 )), netlist, used-modules, result)) endif

otherwise f endcase

Event: Enable boundp; name this event ‘boundp-off1’.

Event: Enable subnet0; name this event ‘subnet0-off’.

Definition: subnet (flg, x0 , netlist) = subnet0 (flg, x0 , netlist, nil, nil)

Event: Enable subnet; name this event ‘subnet-off’.

Definition: delete-null-entries (database) = if listp (database)

then if listp (cdar (database))

then cons (car (database), delete-null-entries (cdr (database))) else delete-null-entries (cdr (database)) endif

else nil endif

Event: Enable delete-null-entries; name this event ‘delete-null-entries-off’.

Definition: primitive-count (flg, x0 , type, netlist) = case on flg:

case = 0

then if primp (x0 ) then primp2 (x0 , type) elseif lookup-module (x0 , netlist) then if net-errorp (netlist-properties (subnet (0, x0 , netlist),

list (type), t))

then netlist-properties (subnet (0, x0 , netlist), list (type), t) else value (type,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

list (type), t))) endif

else pred-error ('unknown-module, x0 ) endif case = 1 then value (type,

occurrence-data (required-props (list (type)), x0 , nil, nil, nil, module-database (subnet (1, x0 , netlist),

required-props (list (type)), t)))

otherwise pred-error ('unknown-flag, list (list ('flg, flg), list ('x0, x0 ))) endcase

Event: Enable primitive-count; name this event ‘primitive-count-off’.

Definition: out-depends (flg, x0 , x1 , x2 , netlist) = case on flg:

case = 0 then if primp (x0 )

then list-union-values (primp2 (x0 , 'out-depends),

pairlist (primp2 (x0 , 'inputs), x1 ))

elseif lookup-module (x0 , netlist) then if net-errorp (netlist-properties (subnet (0, x0 , netlist),

           '(out-depends inputs),

t))

then netlist-properties (subnet (0, x0 , netlist),

     '(out-depends inputs),

t)

else list-union-values (value ('out-depends,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

                             '(out-depends
                               inputs),

t))),

pairlist (value ('inputs,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

                                    '(out-depends
                                      inputs),

t))),

x1 )) endif

else pred-error ('unknown-module, x0 ) endif case = 1

then value ('out-depends,

occurrence-data (required-props ('(out-depends)), x0 , x1 , mark-io-outs (x2 , intersection (x1 , x2 )), intersection (x1 , x2 ), module-database (subnet (1, x0 , netlist),

required-props ('(out-depends)), t)))

otherwise pred-error ('unknown-flag,

list (list ('flg, flg), list ('x0, x0 ), list ('x1, x1 ), list ('x2, x2 ))) endcase

Event: Enable out-depends; name this event ‘out-depends-off’.

Definition: dependency-table (netlist) = netlist-properties (netlist, '(out-depends), t)

Event: Enable dependency-table; name this event ‘dependency-table-off’.

Definition: output-dependencies (module-name, args, netlist) = if net-errorp (if primp (module-name)

then length (primp2 (module-name, 'inputs)) elseif lookup-module (module-name, netlist) then length (module-inputs (lookup-module (module-name,

netlist)))

else pred-error ('unknown-module, module-name) endif)

then if primp (module-name)

then length (primp2 (module-name, 'inputs)) elseif lookup-module (module-name, netlist) then length (module-inputs (lookup-module (module-name, netlist))) else pred-error ('unknown-module, module-name) endif

elseif length (args)

= if primp (module-name) then length (primp2 (module-name, 'inputs)) elseif lookup-module (module-name, netlist) then length (module-inputs (lookup-module (module-name,

netlist)))

else pred-error ('unknown-module, module-name) endif

then if net-errorp (out-depends (0, module-name, args, nil, netlist)) then out-depends (0, module-name, args, nil, netlist) else list-list-sort (out-depends (0,

module-name, args, nil, netlist)) endif

    else pred-error ('wrong-number-of-args,

list (list (module-name,

                        'expects,

if primp (module-name)

then length (primp2 (module-name,

                                           'inputs))

elseif lookup-module (module-name,

netlist)

then length (module-inputs (lookup-module (module-name,

netlist)))

else pred-error ('unknown-module,

module-name) endif),

list ('got, length (args), args))) endif

Event: Enable output-dependencies; name this event ‘output-dependencies-off’.

Definition: io-types-collector (types, alist) = if listp (types)

then cons (if listp (car (types)) then value (caar (types), alist) else car (types) endif, io-types-collector (cdr (types), alist))

else nil endif

Event: Enable io-types-collector; name this event ‘io-types-collector-off’.

Definition: io-types (flg, x0 , x1 , x2 , netlist) = case on flg:

case = 0

then if primp (x0 )

then list (primp-lookup (x0 , 'input-types),

                 cons ('output-types,

io-types-collector (primp2 (x0 , 'output-types),

pairlist (primp2 (x0 , 'inputs),

x1 ))))

elseif lookup-module (x0 , netlist)

then if net-errorp (netlist-properties (subnet (0, x0 , netlist),

                                        '(input-types
                                          output-types inputs),

t))

then netlist-properties (subnet (0, x0 , netlist),

                                  '(input-types output-types
                                    inputs),

t)

else list (alist-entry ('input-types, value (x0 , netlist-properties (subnet (0,

x0 , netlist),

               '(input-types
                 output-types
                 inputs),

t))),

cons ('output-types,

io-types-collector (value ('output-types,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

                              '(input-types
                                output-types
                                inputs),

t))),

pairlist (value ('inputs,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

                                     '(input-types
                                       output-types
                                       inputs),

t))),

x1 )))) endif

else pred-error ('unknown-module, x0 ) endif case = 1 then list (alist-entry ('input-types,

occurrence-data (required-props ('(input-types

               output-types)),

x0 , x1 , mark-io-outs (x2 ,

intersection (x1 ,

x2 )),

intersection (x1 , x2 ), module-database (subnet (1,

x0 , netlist),

required-props ('(input-types

                              output-types)),

t))),

             alist-entry ('output-types,

occurrence-data (required-props ('(input-types

                                                    output-types)),

x0 , x1 , mark-io-outs (x2 ,

intersection (x1 ,

x2 )),

intersection (x1 , x2 ),

module-database (subnet (1, x0 , netlist),

required-props ('(input-types

                                                                   output-types)),

t))))

otherwise pred-error ('unknown-flag,

list (list ('flg, flg), list ('x0, x0 ), list ('x1, x1 ), list ('x2, x2 ))) endcase

Event: Enable io-types; name this event ‘io-types-off’.

Definition: netlist-type-table (netlist) = netlist-properties (netlist, '(input-types output-types), t)

Event: Enable netlist-type-table; name this event ‘netlist-type-table-off’.

Definition: arg-types-matchp (actuals, formals) = if (actuals ≃ nil) ∨ (formals ≃ nil) then actuals = formals

elseif unknownp (car (actuals)) ∨ unknownp (car (formals)) then f elseif types-compatiblep (car (actuals), car (formals)) then arg-types-matchp (cdr (actuals), cdr (formals)) else f endif

Event: Enable arg-types-matchp; name this event ‘arg-types-matchp-off’.

Definition: arg-types-okp (fn, arg-types, netlist) = if boundp ('input-types, io-types (0, fn, arg-types, nil, netlist))

then arg-types-matchp (arg-types,

           value ('input-types,

io-types (0, fn, arg-types, nil, netlist)))

else f endif

Event: Enable arg-types-okp; name this event ‘arg-types-okp-off’.

Definition: state-type-requirement (flg, x0 , netlist) = case on flg:

case = 0 then if primp (x0 )

then if primp-lookup (x0 , 'state-types)

then primp2 (x0 , 'state-types) else nil endif

elseif lookup-module (x0 , netlist) then if net-errorp (netlist-properties (subnet (0, x0 , netlist),

                           '(state-types),

t))

then netlist-properties (subnet (0, x0 , netlist),

                    '(state-types),

t)

elseif boundp ('state-types,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

                                 '(state-types),

t)))

then value ('state-types,

value (x0 ,

netlist-properties (subnet (0, x0 , netlist),

                               '(state-types),

t)))

else nil endif else pred-error ('unknown-module, x0 ) endif

case = 1

then value ('state-types,

occurrence-data (required-props ('(state-types)), x0 , nil, nil, nil, module-database (subnet (1, x0 , netlist),

required-props ('(state-types)), t)))

otherwise pred-error ('unknown-flag,

list (list ('flg, flg), list ('x0, x0 ))) endcase

Event: Enable state-type-requirement; name this event ‘state-type-requirement-off’.

Definition: netlist-state-types (netlist) = if net-errorp (netlist-properties (netlist, '(state-types), t))

then netlist-properties (netlist, '(state-types), t) else delete-null-entries (netlist-properties (netlist,

                                       '(state-types),

t)) endif

Event: Enable netlist-state-types; name this event ‘netlist-state-types-off’.

Definition: type-count (type, word-type) = (count (type) + count (word-type))

Theorem: type-count-lessp1 listp (type) → (type-count (car (type), caddr (type)) < type-count (type, x))

Theorem: type-count-lessp2 listp (type) → (type-count (cadr (type), f) < type-count (type, x))

Theorem: type-count-lessp3 (count (t2 ) < count (t1 )) → ((type-count (wtype, t2 ) < type-count (t1 , wtype)) = t)

Event: Enable type-count; name this event ‘type-count-off’.

Definition: state-okp-0 (state, type, address-bits, word-type) = case on type:

case = nil

then state = nil case = boolp then boolp (state) otherwise if listp (type)

then case on car (type): case = addressed-state then state-okp-0 (state,

car (type), cadr (type), caddr (type)) case = ram then ramp (state)

∧ state-okp-0 (ram-guts (state), cadr (type),

                    0,

f)

case = rom then romp (state)

∧ state-okp-0 (rom-guts (state), cadr (type),

                    0,

f)

case = stub then stubp (state)

∧ state-okp-0 (stub-guts (state), cadr (type),

                    0,

f)

case = quote then state-okp-0 (state, cadr (type), 0, f) otherwise if listp (state)

then state-okp-0 (car (state), car (type), 0, f)

∧ state-okp-0 (cdr (state), cdr (type),

                             0,

f)

else f endif endcase

elseif type = 'addressed-state

then if address-bits ≃ 0 then state-okp-0 (state, word-type, 0, f) elseif listp (state) then state-okp-0 (car (state),

type,

address-bits − 1, word-type)

∧ state-okp-0 (cdr (state), type, address-bits − 1, word-type)

else f endif elseif type = 'numberp then state ∈ N

elseif type = 'number-listp

then if state ≃ nil then state = nil elseif car (state) ∈ N then state-okp-0 (cdr (state), type, 0, f) else f endif

elseif ramp (type) then if ramp (state)

then state-okp-0 (ram-guts (state), ram-guts (type), 0, f) else f endif

elseif romp (type) then if romp (state)

then state-okp-0 (rom-guts (state), rom-guts (type), 0, f) else f endif

elseif stubp (type) then if stubp (state)

then state-okp-0 (stub-guts (state), stub-guts (type), 0, f) else f endif else f endif endcase

Event: Enable state-okp-0; name this event ‘state-okp-0-off’.

Event: Enable type-count-lessp1; name this event ‘type-count-lessp1-off’.

Event: Enable type-count-lessp2; name this event ‘type-count-lessp2-off’.

Event: Enable type-count-lessp3; name this event ‘type-count-lessp3-off’.

Definition: state-okp (fn, state, netlist) = state-okp-0 (state, state-type-requirement (0, fn, netlist), 0, f)

Event: Enable state-okp; name this event ‘state-okp-off’.

Definition: fix-dependent-drs (drs, alist) = if listp (drs)

then cons (if signal-namep (car (drs)) then value (car (drs), alist) elseif listp (car (drs)) ∧ (caar (drs) = 'min) then cons ('min, fix-dependent-drs (cdar (drs), alist)) else car (drs) endif, fix-dependent-drs (cdr (drs), alist))

else nil endif

Event: Enable fix-dependent-drs; name this event ‘fix-dependent-drs-off’.

(DEFN LOADINGS-AND-DRIVES
(FLG X0 X1 X2 NETLIST)
(CASE FLG
(0
(COND
((PRIMP X0)
(LIST (PRIMP-LOOKUP X0 'LOADINGS)
(CONS 'DRIVES
(FIX-DEPENDENT-DRS (PRIMP2 X0 'DRIVES)
          (APPEND (PAIRLIST (PRIMP2 X0 'INPUTS) X1)
                  (PAIRLIST (PRIMP2 X0 'OUTPUTS)
                            X2))))))
((LOOKUP-MODULE X0 NETLIST)
(IF
(NET-ERRORP (NETLIST-PROPERTIES (SUBNET 0 X0 NETLIST)
            '(LOADINGS DRIVES INPUTS OUTPUTS)
            T))
(NETLIST-PROPERTIES (SUBNET 0 X0 NETLIST)
'(LOADINGS DRIVES INPUTS OUTPUTS)
T)
(LIST
(ALIST-ENTRY 'LOADINGS
(VALUE X0
(NETLIST-PROPERTIES (SUBNET 0 X0 NETLIST)
                    '(LOADINGS DRIVES INPUTS OUTPUTS)
                    T)))
(CONS 'DRIVES
(FIX-DEPENDENT-DRS
(VALUE 'DRIVES
(VALUE X0
(NETLIST-PROPERTIES (SUBNET 0 X0 NETLIST)
                 '(LOADINGS DRIVES INPUTS OUTPUTS)
                 T)))
(APPEND
(PAIRLIST
(VALUE 'INPUTS
(VALUE X0
(NETLIST-PROPERTIES (SUBNET 0 X0 NETLIST)
                    '(LOADINGS DRIVES INPUTS OUTPUTS)
                    T)))
X1)
(PAIRLIST

(VALUE 'OUTPUTS
(VALUE X0
(NETLIST-PROPERTIES (SUBNET 0 X0 NETLIST)
                   '(LOADINGS DRIVES INPUTS OUTPUTS)
                   T)))
X2)))))))
(T (PRED-ERROR 'UNKNOWN-MODULE X0))))
(1
(LIST
(ALIST-ENTRY 'LOADINGS
(OCCURRENCE-DATA (REQUIRED-PROPS '(LOADINGS DRIVES))
X0 X1
(MARK-IO-OUTS X2 (INTERSECTION X1 X2))
(INTERSECTION X1 X2)
(MODULE-DATABASE (SUBNET 1 X0 NETLIST)
                 (REQUIRED-PROPS '(LOADINGS DRIVES))
                 T)))
(ALIST-ENTRY 'DRIVES
(OCCURRENCE-DATA (REQUIRED-PROPS '(LOADINGS DRIVES))
X0 X1
(MARK-IO-OUTS X2 (INTERSECTION X1 X2))
(INTERSECTION X1 X2)
(MODULE-DATABASE (SUBNET 1 X0 NETLIST)
                 (REQUIRED-PROPS '(LOADINGS DRIVES))
                 T)))))
(OTHERWISE (PRED-ERROR 'UNKNOWN-FLAG
(LIST (LIST 'FLG FLG)
    (LIST 'X0 X0)
    (LIST 'X1 X1)
    (LIST 'X2 X2))))))

Event: Enable loadings-and-drives; name this event ‘loadings-and-drives-off’.

Definition: netlist-loadings-and-drives (netlist) = netlist-properties (netlist, '(loadings drives), t)

Event: Enable netlist-loadings-and-drives; name this event ‘netlist-loadings-and-drives-off’.

Definition: ao2& (netlist) = t

Event: Enable ao2&; name this event ‘ao2&-off’.

Definition: ao2$netlist = nil

Theorem: ao2$value ao2& (netlist) → (dual-eval (0, 'ao2, list (a, b, c, d), state, netlist)

= list (f-nor (f-and (a, b), f-and (c, d))))

Event: Enable ao2$value; name this event ‘ao2$value-off’.

Definition: ao4& (netlist) = t

Event: Enable ao4&; name this event ‘ao4&-off’.

Definition: ao4$netlist = nil

Theorem: ao4$value ao4& (netlist) → (dual-eval (0, 'ao4, list (a, b, c, d), state, netlist)

= list (f-nand (f-or (a, b), f-or (c, d))))

Event: Enable ao4$value; name this event ‘ao4$value-off’.

Definition: ao6& (netlist) = t

Event: Enable ao6&; name this event ‘ao6&-off’.

Definition: ao6$netlist = nil

Theorem: ao6$value ao6& (netlist) → (dual-eval (0, 'ao6, list (a, b, c), state, netlist)

= list (f-nor (f-and (a, b), c)))

Event: Enable ao6$value; name this event ‘ao6$value-off’.

Definition: ao7& (netlist) = t

Event: Enable ao7&; name this event ‘ao7&-off’.

Definition: ao7$netlist = nil

Theorem: ao7$value ao7& (netlist) → (dual-eval (0, 'ao7, list (a, b, c), state, netlist)

= list (f-nand (f-or (a, b), c)))

Event: Enable ao7$value; name this event ‘ao7$value-off’.

Definition: b-and& (netlist) = t Event: Enable b-and&; name this event ‘b-and&-off’.

Definition: b-and$netlist = nil Theorem: b-and$value b-and& (netlist) → (dual-eval (0, 'b-and, list (a, b), state, netlist) = list (f-and (a, b))) Event: Enable b-and$value; name this event ‘b-and$value-off’.

Definition: b-and3& (netlist) = t Event: Enable b-and3&; name this event ‘b-and3&-off’.

Definition: b-and3$netlist = nil Theorem: b-and3$value b-and3& (netlist) → (dual-eval (0, 'b-and3, list (a, b, c), state, netlist)

= list (f-and3 (a, b, c))) Event: Enable b-and3$value; name this event ‘b-and3$value-off’.

Definition: b-and4& (netlist) = t Event: Enable b-and4&; name this event ‘b-and4&-off’.

Definition: b-and4$netlist = nil Theorem: b-and4$value b-and4& (netlist) → (dual-eval (0, 'b-and4, list (a, b, c, d), state, netlist)

= list (f-and4 (a, b, c, d))) Event: Enable b-and4$value; name this event ‘b-and4$value-off’.

Definition: b-equv& (netlist) = t Event: Enable b-equv&; name this event ‘b-equv&-off’.

Definition: b-equv$netlist = nil

Theorem: b-equv$value b-equv& (netlist) → (dual-eval (0, 'b-equv, list (a, b), state, netlist)

= list (f-equv (a, b)))

Event: Enable b-equv$value; name this event ‘b-equv$value-off’.

Definition: b-equv3& (netlist) = t

Event: Enable b-equv3&; name this event ‘b-equv3&-off’.

Definition: b-equv3$netlist = nil

Theorem: b-equv3$value b-equv3& (netlist) → (dual-eval (0, 'b-equv3, list (a, b, c), state, netlist)

= list (f-equv3 (a, b, c)))

Event: Enable b-equv3$value; name this event ‘b-equv3$value-off’.

Definition: b-if& (netlist) = t

Event: Enable b-if&; name this event ‘b-if&-off’.

Definition: b-if$netlist = nil

Theorem: b-if$value b-if& (netlist) → (dual-eval (0, 'b-if, list (s, a, b), state, netlist) = list (f-if (s, a, b)))

Event: Enable b-if$value; name this event ‘b-if$value-off’.

Definition: b-nand& (netlist) = t

Event: Enable b-nand&; name this event ‘b-nand&-off’.

Definition: b-nand$netlist = nil

Theorem: b-nand$value b-nand& (netlist) → (dual-eval (0, 'b-nand, list (a, b), state, netlist)

= list (f-nand (a, b)))

Event: Enable b-nand$value; name this event ‘b-nand$value-off’.

Definition: b-nand3& (netlist) = t Event: Enable b-nand3&; name this event ‘b-nand3&-off’.

Definition: b-nand3$netlist = nil Theorem: b-nand3$value b-nand3& (netlist) → (dual-eval (0, 'b-nand3, list (a, b, c), state, netlist)

= list (f-nand3 (a, b, c))) Event: Enable b-nand3$value; name this event ‘b-nand3$value-off’.

Definition: b-nand4& (netlist) = t Event: Enable b-nand4&; name this event ‘b-nand4&-off’.

Definition: b-nand4$netlist = nil Theorem: b-nand4$value b-nand4& (netlist) → (dual-eval (0, 'b-nand4, list (a, b, c, d), state, netlist)

= list (f-nand4 (a, b, c, d))) Event: Enable b-nand4$value; name this event ‘b-nand4$value-off’.

Definition: b-nand5& (netlist) = t Event: Enable b-nand5&; name this event ‘b-nand5&-off’.

Definition: b-nand5$netlist = nil Theorem: b-nand5$value b-nand5& (netlist) → (dual-eval (0, 'b-nand5, list (a, b, c, d, e), state, netlist)

= list (f-nand5 (a, b, c, d, e))) Event: Enable b-nand5$value; name this event ‘b-nand5$value-off’.

Definition: b-nand6& (netlist) = t Event: Enable b-nand6&; name this event ‘b-nand6&-off’.

Definition: b-nand6$netlist = nil Theorem: b-nand6$value b-nand6& (netlist) → (dual-eval (0, 'b-nand6, list (a, b, c, d, e, g), state, netlist)

= list (f-nand6 (a, b, c, d, e, g))) Event: Enable b-nand6$value; name this event ‘b-nand6$value-off’.

Definition: b-nand8& (netlist) = t Event: Enable b-nand8&; name this event ‘b-nand8&-off’.

Definition: b-nand8$netlist = nil Theorem: b-nand8$value b-nand8& (netlist) → (dual-eval (0, 'b-nand8, list (a, b, c, d, e, g, h, i), state, netlist)

= list (f-nand8 (a, b, c, d, e, g, h, i))) Event: Enable b-nand8$value; name this event ‘b-nand8$value-off’.

Definition: b-nbuf& (netlist) = t Event: Enable b-nbuf&; name this event ‘b-nbuf&-off’.

Definition: b-nbuf$netlist = nil Theorem: b-nbuf$value b-nbuf& (netlist) → (dual-eval (0, 'b-nbuf, list (a), state, netlist)

= list (f-not (a), f-buf (a))) Event: Enable b-nbuf$value; name this event ‘b-nbuf$value-off’.

Definition: b-nor& (netlist) = t Event: Enable b-nor&; name this event ‘b-nor&-off’.

Definition: b-nor$netlist = nil Theorem: b-nor$value b-nor& (netlist) → (dual-eval (0, 'b-nor, list (a, b), state, netlist) = list (f-nor (a, b)))

Event: Enable b-nor$value; name this event ‘b-nor$value-off’.

Definition: b-nor3& (netlist) = t

Event: Enable b-nor3&; name this event ‘b-nor3&-off’.

Definition: b-nor3$netlist = nil

Theorem: b-nor3$value b-nor3& (netlist) → (dual-eval (0, 'b-nor3, list (a, b, c), state, netlist)

= list (f-nor3 (a, b, c)))

Event: Enable b-nor3$value; name this event ‘b-nor3$value-off’.

Definition: b-nor4& (netlist) = t

Event: Enable b-nor4&; name this event ‘b-nor4&-off’.

Definition: b-nor4$netlist = nil

Theorem: b-nor4$value b-nor4& (netlist) → (dual-eval (0, 'b-nor4, list (a, b, c, d), state, netlist)

= list (f-nor4 (a, b, c, d)))

Event: Enable b-nor4$value; name this event ‘b-nor4$value-off’.

Definition: b-nor5& (netlist) = t

Event: Enable b-nor5&; name this event ‘b-nor5&-off’.

Definition: b-nor5$netlist = nil

Theorem: b-nor5$value b-nor5& (netlist) → (dual-eval (0, 'b-nor5, list (a, b, c, d, e), state, netlist)

= list (f-nor5 (a, b, c, d, e)))

Event: Enable b-nor5$value; name this event ‘b-nor5$value-off’.

Definition: b-nor6& (netlist) = t Event: Enable b-nor6&; name this event ‘b-nor6&-off’.

Definition: b-nor6$netlist = nil Theorem: b-nor6$value b-nor6& (netlist) → (dual-eval (0, 'b-nor6, list (a, b, c, d, e, g), state, netlist)

= list (f-nor6 (a, b, c, d, e, g))) Event: Enable b-nor6$value; name this event ‘b-nor6$value-off’.

Definition: b-nor8& (netlist) = t Event: Enable b-nor8&; name this event ‘b-nor8&-off’.

Definition: b-nor8$netlist = nil Theorem: b-nor8$value b-nor8& (netlist) → (dual-eval (0, 'b-nor8, list (a, b, c, d, e, g, h, i), state, netlist)

= list (f-nor8 (a, b, c, d, e, g, h, i))) Event: Enable b-nor8$value; name this event ‘b-nor8$value-off’.

Definition: b-not& (netlist) = t Event: Enable b-not&; name this event ‘b-not&-off’.

Definition: b-not$netlist = nil Theorem: b-not$value b-not& (netlist) → (dual-eval (0, 'b-not, list (a), state, netlist) = list (f-not (a))) Event: Enable b-not$value; name this event ‘b-not$value-off’.

Definition: b-not-b4ip& (netlist) = t Event: Enable b-not-b4ip&; name this event ‘b-not-b4ip&-off’.

Definition: b-not-b4ip$netlist = nil

Theorem: b-not-b4ip$value b-not-b4ip& (netlist) → (dual-eval (0, 'b-not-b4ip, list (a), state, netlist)

= list (f-not (a)))

Event: Enable b-not-b4ip$value; name this event ‘b-not-b4ip$value-off’.

Definition: b-not-ivap& (netlist) = t

Event: Enable b-not-ivap&; name this event ‘b-not-ivap&-off’.

Definition: b-not-ivap$netlist = nil

Theorem: b-not-ivap$value b-not-ivap& (netlist) → (dual-eval (0, 'b-not-ivap, list (a), state, netlist)

= list (f-not (a)))

Event: Enable b-not-ivap$value; name this event ‘b-not-ivap$value-off’.

Definition: b-or& (netlist) = t

Event: Enable b-or&; name this event ‘b-or&-off’.

Definition: b-or$netlist = nil

Theorem: b-or$value b-or& (netlist) → (dual-eval (0, 'b-or, list (a, b), state, netlist) = list (f-or (a, b)))

Event: Enable b-or$value; name this event ‘b-or$value-off’.

Definition: b-or3& (netlist) = t

Event: Enable b-or3&; name this event ‘b-or3&-off’.

Definition: b-or3$netlist = nil

Theorem: b-or3$value b-or3& (netlist) → (dual-eval (0, 'b-or3, list (a, b, c), state, netlist)

= list (f-or3 (a, b, c)))

Event: Enable b-or3$value; name this event ‘b-or3$value-off’.

Definition: b-or4& (netlist) = t Event: Enable b-or4&; name this event ‘b-or4&-off’.

Definition: b-or4$netlist = nil Theorem: b-or4$value b-or4& (netlist) → (dual-eval (0, 'b-or4, list (a, b, c, d), state, netlist)

= list (f-or4 (a, b, c, d))) Event: Enable b-or4$value; name this event ‘b-or4$value-off’.

Definition: b-xor& (netlist) = t Event: Enable b-xor&; name this event ‘b-xor&-off’.

Definition: b-xor$netlist = nil Theorem: b-xor$value b-xor& (netlist) → (dual-eval (0, 'b-xor, list (a, b), state, netlist) = list (f-xor (a, b))) Event: Enable b-xor$value; name this event ‘b-xor$value-off’.

Definition: b-xor3& (netlist) = t Event: Enable b-xor3&; name this event ‘b-xor3&-off’.

Definition: b-xor3$netlist = nil Theorem: b-xor3$value b-xor3& (netlist) → (dual-eval (0, 'b-xor3, list (a, b, c), state, netlist)

= list (f-xor3 (a, b, c))) Event: Enable b-xor3$value; name this event ‘b-xor3$value-off’.

Definition: del2& (netlist) = t Event: Enable del2&; name this event ‘del2&-off’.

Definition: del2$netlist = nil Theorem: del2$value del2& (netlist) → (dual-eval (0, 'del2, list (a), state, netlist) = list (f-buf (a))) Event: Enable del2$value; name this event ‘del2$value-off’.

Definition: del4& (netlist) = t Event: Enable del4&; name this event ‘del4&-off’.

Definition: del4$netlist = nil Theorem: del4$value del4& (netlist) → (dual-eval (0, 'del4, list (a), state, netlist) = list (f-buf (a))) Event: Enable del4$value; name this event ‘del4$value-off’.

Definition: del10& (netlist) = t Event: Enable del10&; name this event ‘del10&-off’.

Definition: del10$netlist = nil Theorem: del10$value del10& (netlist) → (dual-eval (0, 'del10, list (a), state, netlist) = list (f-buf (a))) Event: Enable del10$value; name this event ‘del10$value-off’.

Definition: procmon& (netlist) = t Event: Enable procmon&; name this event ‘procmon&-off’.

Definition: procmon$netlist = nil Theorem: procmon$value procmon& (netlist) → (dual-eval (0, 'procmon, list (a, e, s, n), state, netlist)

= list (f-if (s, f-if (e, f-if (a, f, f), a), n)))

Event: Enable procmon$value; name this event ‘procmon$value-off’.

Definition: dp-ram-16x32& (netlist) = t

Event: Enable dp-ram-16x32&; name this event ‘dp-ram-16x32&-off’.

Definition: dp-ram-16x32$netlist = nil

Theorem: dp-ram-16x32$value dp-ram-16x32& (netlist) → (dual-eval (0,

'dp-ram-16x32,

list (read-a0 , read-a1 , read-a2 , read-a3 , write-b0 , write-b1 , write-b2 , write-b3 , wen, d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state, netlist)

= dual-port-ram-value (32,

4,

list (read-a0 , read-a1 , read-a2 , read-a3 , write-b0 , write-b1 , write-b2 , write-b3 , wen, d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state))

Event: Enable dp-ram-16x32$value; name this event ‘dp-ram-16x32$value-off’.

Definition: fd1& (netlist) = t

Event: Enable fd1&; name this event ‘fd1&-off’.

Definition: fd1$netlist = nil

Theorem: fd1$value fd1& (netlist) → (dual-eval (0, 'fd1, list (d, cp), state, netlist)

= list (f-buf (state), f-not (state)))

Event: Enable fd1$value; name this event ‘fd1$value-off’.

Definition: fd1s& (netlist) = t

Event: Enable fd1s&; name this event ‘fd1s&-off’.

Definition: fd1s$netlist = nil

Theorem: fd1s$value fd1s& (netlist) → (dual-eval (0, 'fd1s, list (d, cp, ti, te), state, netlist)

= list (f-buf (state), f-not (state)))

Event: Enable fd1s$value; name this event ‘fd1s$value-off’.

Definition: fd1sp& (netlist) = t Event: Enable fd1sp&; name this event ‘fd1sp&-off’.

Definition: fd1sp$netlist = nil Theorem: fd1sp$value fd1sp& (netlist) → (dual-eval (0, 'fd1sp, list (d, cp, ti, te), state, netlist)

= list (f-buf (state), f-not (state))) Event: Enable fd1sp$value; name this event ‘fd1sp$value-off’.

Definition: fd1slp& (netlist) = t Event: Enable fd1slp&; name this event ‘fd1slp&-off’.

Definition: fd1slp$netlist = nil Theorem: fd1slp$value fd1slp& (netlist) → (dual-eval (0, 'fd1slp, list (d, cp, ld, ti, te), state, netlist)

= list (f-buf (state), f-not (state))) Event: Enable fd1slp$value; name this event ‘fd1slp$value-off’.

Definition: id& (netlist) = t Event: Enable id&; name this event ‘id&-off’.

Definition: id$netlist = nil Theorem: id$value id& (netlist) → (dual-eval (0, 'id, list (a), state, netlist) = list (a)) Event: Enable id$value; name this event ‘id$value-off’.

Definition: mem-32x32& (netlist) = t Event: Enable mem-32x32&; name this event ‘mem-32x32&-off’.

Definition: mem-32x32$netlist = nil Theorem: mem-32x32$value mem-32x32& (netlist) → (dual-eval (0,

'mem-32x32,

list (rw-, strobe-, a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state, netlist)

= mem-value (list (rw-, strobe-, a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state))

Event: Enable mem-32x32$value; name this event ‘mem-32x32$value-off’.

Definition: ram-enable-circuit& (netlist) = t

Event: Enable ram-enable-circuit&; name this event ‘ram-enable-circuit&-off’.

Definition: ram-enable-circuit$netlist = nil

Theorem: ram-enable-circuit$value ram-enable-circuit& (netlist) → (dual-eval (0,

              'ram-enable-circuit,

list (clk, test-regfile-, disable-regfile-, we), state, netlist)

= list (f-nand (disable-regfile-, we)))

Event: Enable ram-enable-circuit$value; name this event ‘ram-enable-circuit$value-off’.

Definition: t-buf& (netlist) = t

Event: Enable t-buf&; name this event ‘t-buf&-off’.

Definition: t-buf$netlist = nil

Theorem: t-buf$value t-buf& (netlist) → (dual-eval (0, 't-buf, list (e, a), state, netlist) = list (ft-buf (e, a)))

Event: Enable t-buf$value; name this event ‘t-buf$value-off’.

Definition: t-wire& (netlist) = t

Event: Enable t-wire&; name this event ‘t-wire&-off’.

Definition: t-wire$netlist = nil

Theorem: t-wire$value t-wire& (netlist) → (dual-eval (0, 't-wire, list (a, b), state, netlist)

= list (ft-wire (a, b)))

Event: Enable t-wire$value; name this event ‘t-wire$value-off’.

Definition: pullup& (netlist) = t

Event: Enable pullup&; name this event ‘pullup&-off’.

Definition: pullup$netlist = nil

Theorem: pullup$value pullup& (netlist) → (dual-eval (0, 'pullup, list (a), state, netlist) = list (f-pullup (a)))

Event: Enable pullup$value; name this event ‘pullup$value-off’.

Definition: ttl-bidirect& (netlist) = t

Event: Enable ttl-bidirect&; name this event ‘ttl-bidirect&-off’.

Definition: ttl-bidirect$netlist = nil

Theorem: ttl-bidirect$value ttl-bidirect& (netlist) → (dual-eval (0, 'ttl-bidirect, list (io, a, en, pi), state, netlist)

= list (ft-buf (f-not (en), a), f-buf (ft-wire (io, ft-buf (f-not (en), a))), f-nand (ft-wire (io, ft-buf (f-not (en), a)), pi)))

Event: Enable ttl-bidirect$value; name this event ‘ttl-bidirect$value-off’.

Definition: ttl-clk-input& (netlist) = t

Event: Enable ttl-clk-input&; name this event ‘ttl-clk-input&-off’.

Definition: ttl-clk-input$netlist = nil Theorem: ttl-clk-input$value ttl-clk-input& (netlist) → (dual-eval (0, 'ttl-clk-input, list (a, pi), state, netlist)

= list (f-buf (a), f-nand (a, pi)))

Event: Enable ttl-clk-input$value; name this event ‘ttl-clk-input$value-off’.

Definition: ttl-input& (netlist) = t

Event: Enable ttl-input&; name this event ‘ttl-input&-off’.

Definition: ttl-input$netlist = nil

Theorem: ttl-input$value ttl-input& (netlist) → (dual-eval (0, 'ttl-input, list (a, pi), state, netlist)

= list (f-buf (a), f-nand (a, pi)))

Event: Enable ttl-input$value; name this event ‘ttl-input$value-off’.

Definition: ttl-output& (netlist) = t

Event: Enable ttl-output&; name this event ‘ttl-output&-off’.

Definition: ttl-output$netlist = nil

Theorem: ttl-output$value ttl-output& (netlist) → (dual-eval (0, 'ttl-output, list (a), state, netlist)

= list (f-buf (a)))

Event: Enable ttl-output$value; name this event ‘ttl-output$value-off’.

Definition: ttl-output-parametric& (netlist) = t

Event: Enable ttl-output-parametric&; name this event ‘ttl-output-parametric&- off’.

Definition: ttl-output-parametric$netlist = nil

Theorem: ttl-output-parametric$value ttl-output-parametric& (netlist) → (dual-eval (0, 'ttl-output-parametric, list (a), state, netlist)

= list (f-buf (a)))

Event: Enable ttl-output-parametric$value; name this event ‘ttl-output-parametric$value-off’.

Definition: ttl-output-fast& (netlist) = t

Event: Enable ttl-output-fast&; name this event ‘ttl-output-fast&-off’.

Definition: ttl-output-fast$netlist = nil

Theorem: ttl-output-fast$value ttl-output-fast& (netlist) → (dual-eval (0, 'ttl-output-fast, list (a), state, netlist)

= list (f-buf (a)))

Event: Enable ttl-output-fast$value; name this event ‘ttl-output-fast$value-off’.

Definition: ttl-tri-output& (netlist) = t

Event: Enable ttl-tri-output&; name this event ‘ttl-tri-output&-off’.

Definition: ttl-tri-output$netlist = nil

Theorem: ttl-tri-output$value ttl-tri-output& (netlist) → (dual-eval (0, 'ttl-tri-output, list (a, en), state, netlist)

= list (ft-buf (f-not (en), a)))

Event: Enable ttl-tri-output$value; name this event ‘ttl-tri-output$value-off’.

Definition: ttl-tri-output-fast& (netlist) = t

Event: Enable ttl-tri-output-fast&; name this event ‘ttl-tri-output-fast&-off’.

Definition: ttl-tri-output-fast$netlist = nil

Theorem: ttl-tri-output-fast$value ttl-tri-output-fast& (netlist) → (dual-eval (0, 'ttl-tri-output-fast, list (a, en), state, netlist)

= list (ft-buf (f-not (en), a)))

Event: Enable ttl-tri-output-fast$value; name this event ‘ttl-tri-output-fast$value-off’.

Definition: vdd& (netlist) = t

Event: Enable vdd&; name this event ‘vdd&-off’.

Definition: vdd$netlist = nil

Theorem: vdd$value vdd& (netlist) → (dual-eval (0, 'vdd, nil, state, netlist) = list (t))

Event: Enable vdd$value; name this event ‘vdd$value-off’.

Definition: vdd-parametric& (netlist) = t

Event: Enable vdd-parametric&; name this event ‘vdd-parametric&-off’.

Definition: vdd-parametric$netlist = nil

Theorem: vdd-parametric$value vdd-parametric& (netlist) → (dual-eval (0, 'vdd-parametric, nil, state, netlist) = list (t))

Event: Enable vdd-parametric$value; name this event ‘vdd-parametric$value-off’.

Definition: vss& (netlist) = t

Event: Enable vss&; name this event ‘vss&-off’.

Definition: vss$netlist = nil

Theorem: vss$value vss& (netlist) → (dual-eval (0, 'vss, nil, state, netlist) = list (f))

Event: Enable vss$value; name this event ‘vss$value-off’.

Theorem: dp-ram-16x32$state dp-ram-16x32& (netlist) → (dual-eval (2,

              'dp-ram-16x32,

list (read-a0 , read-a1 , read-a2 , read-a3 , write-b0 , write-b1 , write-b2 , write-b3 , wen, d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state, netlist)

= dual-port-ram-state (32,

         4,

list (read-a0 , read-a1 , read-a2 , read-a3 , write-b0 , write-b1 , write-b2 , write-b3 , wen, d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state))

Event: Enable dp-ram-16x32$state; name this event ‘dp-ram-16x32$state-off’.

Theorem: fd1$state fd1& (netlist)

→ (dual-eval (2, 'fd1, list (d, cp), state, netlist) = f-buf (d))

Event: Enable fd1$state; name this event ‘fd1$state-off’.

Theorem: fd1s$state fd1s& (netlist) → (dual-eval (2, 'fd1s, list (d, cp, ti, te), state, netlist)

= f-if (te, ti, d))

Event: Enable fd1s$state; name this event ‘fd1s$state-off’.

Theorem: fd1sp$state fd1sp& (netlist) → (dual-eval (2, 'fd1sp, list (d, cp, ti, te), state, netlist)

= f-if (te, ti, d))

Event: Enable fd1sp$state; name this event ‘fd1sp$state-off’.

Theorem: fd1slp$state fd1slp& (netlist) → (dual-eval (2, 'fd1slp, list (d, cp, ld, ti, te), state, netlist)

= f-if (te, ti, f-if (ld, d, state)))

Event: Enable fd1slp$state; name this event ‘fd1slp$state-off’.

Theorem: mem-32x32$state mem-32x32& (netlist) → (dual-eval (2,

'mem-32x32,

list (rw-, strobe-, a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state, netlist)

= mem-state (list (rw-, strobe-, a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 , d9 , d10 , d11 , d12 , d13 , d14 , d15 , d16 , d17 , d18 , d19 , d20 , d21 , d22 , d23 , d24 , d25 , d26 , d27 , d28 , d29 , d30 , d31 ),

state))

Event: Enable mem-32x32$state; name this event ‘mem-32x32$state-off’.

Definition: b-buf*

= '(b-buf
(in)
(out)
((g0 (out- out) b-nbuf (in)))
nil)

Definition: b-buf& (netlist) = ((lookup-module ('b-buf, netlist) = b-buf*)

∧ b-nbuf& (delete-module ('b-buf, netlist)))

Event: Enable b-buf&; name this event ‘b-buf&-off’.

Definition: b-buf$netlist = cons (b-buf*, b-nbuf$netlist)

Theorem: b-buf$value b-buf& (netlist) → (dual-eval (0, 'b-buf, list (in), state, netlist) = list (f-buf (in)))

Event: Enable b-buf$value; name this event ‘b-buf$value-off’.

Definition: b-buf-pwr*

= '(b-buf-pwr
      (in)
      (out)
      ((g0 (out-) b-not (in))
       (g1 (out) b-not-b4ip (out-)))
      nil)

Definition: b-buf-pwr& (netlist) = ((lookup-module ('b-buf-pwr, netlist) = b-buf-pwr*)

∧ b-not& (delete-module ('b-buf-pwr, netlist))

∧ b-not-b4ip& (delete-module ('b-buf-pwr, netlist)))

Event: Enable b-buf-pwr&; name this event ‘b-buf-pwr&-off’.

Definition: b-buf-pwr$netlist = cons (b-buf-pwr*, b-not$netlist ∪ b-not-b4ip$netlist)

Theorem: b-buf-pwr$value b-buf-pwr& (netlist) → (dual-eval (0, 'b-buf-pwr, list (in), state, netlist)

= list (f-buf (in)))

Event: Enable b-buf-pwr$value; name this event ‘b-buf-pwr$value-off’.

Theorem: dp-ram-16x32-args-crock ((length (a) = 4) ∧ properp (a) ∧ (length (b) = 4) ∧ properp (b) ∧ (length (c) = 32) ∧ properp (c)) → (append (a, append (b, cons (x, c)))

= append (list-as-collected-nth (a, 4, 0),

append (list-as-collected-nth (b, 4, 0), cons (x, list-as-collected-nth (c, 32, 0)))))

Event: Enable dp-ram-16x32-args-crock; name this event ‘dp-ram-16x32-args-crock-off’.

Theorem: dp-ram-16x32$structured-value (dp-ram-16x32& (netlist) ∧ (length (a) = 4) ∧ properp (a) ∧ (length (b) = 4) ∧ properp (b) ∧ (length (c) = 32) ∧ properp (c)) → (dual-eval (0,

             'dp-ram-16x32,

append (a, append (b, cons (x, c))), state, netlist)

= dual-port-ram-value (32, 4, append (a, append (b, cons (x, c))), state))

Event: Enable dp-ram-16x32$structured-value; name this event ‘dp-ram-16x32$structured-value-off’.

Theorem: dp-ram-16x32$structured-state (dp-ram-16x32& (netlist) ∧ (length (a) = 4) ∧ properp (a) ∧ (length (b) = 4) ∧ properp (b) ∧ (length (c) = 32) ∧ properp (c)) → (dual-eval (2,

             'dp-ram-16x32,

append (a, append (b, cons (x, c))), state, netlist)

= dual-port-ram-state (32, 4, append (a, append (b, cons (x, c))), state))

Event: Enable dp-ram-16x32$structured-state; name this event ‘dp-ram-16x32$structured-state-off’.

Theorem: mem-32x32-args-crock ((length (addr) = 32) ∧ properp (addr) ∧ (length (data) = 32) ∧ properp (data)) → (cons (rw-, cons (strobe-, append (addr, data)))

= cons (rw-,

cons (strobe-,

append (list-as-collected-nth (addr, 32, 0), list-as-collected-nth (data, 32, 0)))))

Event: Enable mem-32x32-args-crock; name this event ‘mem-32x32-args-crock-off’.

Theorem: list-32-nth-collapse (properp (args) ∧ (length (args) = 32)) → (list (nth (0, args),

nth (1, args), nth (2, args), nth (3, args), nth (4, args), nth (5, args), nth (6, args), nth (7, args), nth (8, args), nth (9, args), nth (10, args), nth (11, args), nth (12, args), nth (13, args), nth (14, args), nth (15, args), nth (16, args), nth (17, args), nth (18, args), nth (19, args), nth (20, args), nth (21, args), nth (22, args), nth (23, args), nth (24, args), nth (25, args), nth (26, args), nth (27, args), nth (28, args), nth (29, args), nth (30, args), nth (31, args))

= args)

Event: Enable list-32-nth-collapse; name this event ‘list-32-nth-collapse-off’.

Theorem: mem-32x32$structured-value-1 (mem-32x32& (netlist) ∧ (length (addr) = 32) ∧ properp (addr) ∧ (length (data) = 32) ∧ properp (data)) → (dual-eval (0,

'mem-32x32,

cons (rw-, cons (strobe-, append (addr, data))), state, netlist)

= memory-value (state, strobe-, rw-, list (nth (0, addr),

nth (1, addr), nth (2, addr), nth (3, addr), nth (4, addr), nth (5, addr), nth (6, addr), nth (7, addr), nth (8, addr), nth (9, addr), nth (10, addr), nth (11, addr), nth (12, addr), nth (13, addr), nth (14, addr), nth (15, addr), nth (16, addr), nth (17, addr), nth (18, addr), nth (19, addr), nth (20, addr), nth (21, addr), nth (22, addr), nth (23, addr), nth (24, addr), nth (25, addr), nth (26, addr), nth (27, addr), nth (28, addr), nth (29, addr), nth (30, addr), nth (31, addr)),

list (nth (0, data), nth (1, data), nth (2, data), nth (3, data), nth (4, data), nth (5, data), nth (6, data), nth (7, data), nth (8, data), nth (9, data), nth (10, data), nth (11, data), nth (12, data), nth (13, data), nth (14, data), nth (15, data), nth (16, data), nth (17, data), nth (18, data), nth (19, data), nth (20, data), nth (21, data), nth (22, data), nth (23, data), nth (24, data), nth (25, data), nth (26, data), nth (27, data), nth (28, data), nth (29, data), nth (30, data), nth (31, data))))

Event: Enable mem-32x32$structured-value-1; name this event ‘mem-32x32$structured-value-1-off’.

Theorem: mem-32x32$structured-value (mem-32x32& (netlist) ∧ (length (addr) = 32) ∧ properp (addr) ∧ (length (data) = 32) ∧ properp (data)) → (dual-eval (0,

             'mem-32x32,

cons (rw-, cons (strobe-, append (addr, data))), state, netlist)

= memory-value (state, strobe-, rw-, addr, data))

Event: Enable mem-32x32$structured-value; name this event ‘mem-32x32$structured-value-off’.

Theorem: mem-32x32$structured-state-1 (mem-32x32& (netlist) ∧ (length (addr) = 32) ∧ properp (addr) ∧ (length (data) = 32) ∧ properp (data)) → (dual-eval (2,

             'mem-32x32,

cons (rw-, cons (strobe-, append (addr, data))), state, netlist) = next-memory-state (state,

strobe-, rw-, list (nth (0, addr), nth (1, addr), nth (2, addr), nth (3, addr), nth (4, addr), nth (5, addr), nth (6, addr), nth (7, addr), nth (8, addr), nth (9, addr), nth (10, addr), nth (11, addr), nth (12, addr), nth (13, addr), nth (14, addr), nth (15, addr), nth (16, addr), nth (17, addr), nth (18, addr), nth (19, addr), nth (20, addr), nth (21, addr), nth (22, addr), nth (23, addr), nth (24, addr), nth (25, addr), nth (26, addr), nth (27, addr), nth (28, addr), nth (29, addr), nth (30, addr), nth (31, addr)),

list (nth (0, data), nth (1, data), nth (2, data), nth (3, data), nth (4, data), nth (5, data), nth (6, data), nth (7, data), nth (8, data), nth (9, data), nth (10, data), nth (11, data), nth (12, data), nth (13, data), nth (14, data), nth (15, data), nth (16, data), nth (17, data), nth (18, data), nth (19, data), nth (20, data), nth (21, data), nth (22, data), nth (23, data), nth (24, data), nth (25, data), nth (26, data), nth (27, data), nth (28, data), nth (29, data), nth (30, data), nth (31, data))))

Event: Enable mem-32x32$structured-state-1; name this event ‘mem-32x32$structured-state-1-off’.

Theorem: mem-32x32$structured-state (mem-32x32& (netlist) ∧ (length (addr) = 32) ∧ properp (addr) ∧ (length (data) = 32) ∧ properp (data)) → (dual-eval (2,

'mem-32x32,

cons (rw-, cons (strobe-, append (addr, data))), state, netlist)

= next-memory-state (state, strobe-, rw-, addr, data))

Event: Enable mem-32x32$structured-state; name this event ‘mem-32x32$structured-state-off’.

Definition: unbound-in-body (name, body) = if body ≃ nil then t

else (name ∉ occ-outputs (car (body))) ∧ unbound-in-body (name, cdr (body)) endif

Event: Enable unbound-in-body; name this event ‘unbound-in-body-off’.

Theorem: unbound-in-body-nlistp (body ≃ nil) → unbound-in-body (name, body)

Theorem: unbound-in-body-listp unbound-in-body (name, cons (occurrence, rest)) = ((name ∉ occ-outputs (occurrence)) ∧ unbound-in-body (name, rest))

Definition: all-unbound-in-body (names, body) = if body ≃ nil then t

else disjoint (names, occ-outputs (car (body))) ∧ all-unbound-in-body (names, cdr (body)) endif

Event: Enable all-unbound-in-body; name this event ‘all-unbound-in-body-off’.

Theorem: all-unbound-in-body-nlistp (body ≃ nil) → all-unbound-in-body (names, body)

Theorem: all-unbound-in-body-listp all-unbound-in-body (names, cons (occurrence, rest)) = (disjoint (names, occ-outputs (occurrence))

∧ all-unbound-in-body (names, rest))

Theorem: all-unbound-in-body-append all-unbound-in-body (append (names1 , names2 ), body) = (all-unbound-in-body (names1 , body)

∧ all-unbound-in-body (names2 , body))

Theorem: all-unbound-in-body-cons all-unbound-in-body (cons (name, names), body) = (unbound-in-body (name, body) ∧ all-unbound-in-body (names, body))

Theorem: all-unbound-in-body-nlistp-names (names ≃ nil) → all-unbound-in-body (names, body)

Theorem: unbound-in-body-dual-eval-1 ((flag = 1) ∧ unbound-in-body (name, body)) → (value (name, dual-eval (flag, body, bindings, state-bindings, netlist))

= value (name, bindings))

Theorem: all-unbound-in-body-dual-eval-1 ((flag = 1) ∧ all-unbound-in-body (names, body)) → (collect-value (names,

dual-eval (flag, body, bindings, state-bindings, netlist))

= collect-value (names, bindings))

Definition: vector-module-induction (body, m, n, bindings, state-bindings, netlist) = if n ≃ 0 then t

else vector-module-induction (cdr (body), 1 + m, n − 1, dual-eval-body-bindings (1,

body, bindings, state-bindings, netlist),

state-bindings, netlist) endif

Definition: v-buf$body (m, n) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('y, m)),

                'b-buf,

list (index ('a, m))), v-buf$body (1 + m, n − 1)) endif

Event: Enable v-buf$body; name this event ‘v-buf$body-off’.

Definition: v-buf* (n) = cons (index ('v-buf, n),

cons (indices ('a, 0, n), cons (indices ('y, 0, n), cons (v-buf$body (0, n), '(nil)))))

Theorem: v-buf*$destructure (car (v-buf* (n)) = index ('v-buf, n)) ∧ (cadr (v-buf* (n)) = indices ('a, 0, n)) ∧ (caddr (v-buf* (n)) = indices ('y, 0, n)) ∧ (cadddr (v-buf* (n)) = v-buf$body (0, n)) ∧ (caddddr (v-buf* (n)) = nil)

Event: Enable v-buf*; name this event ‘v-buf*-off’.

Event: Enable v-buf*$destructure; name this event ‘v-buf*$destructure-off’.

Definition: v-buf& (netlist, n) = ((lookup-module (index ('v-buf, n), netlist) = v-buf* (n))

∧ b-buf& (delete-module (index ('v-buf, n), netlist)))

Event: Enable v-buf&; name this event ‘v-buf&-off’.

Definition: v-buf$netlist (n) = cons (v-buf* (n), b-buf$netlist)

Theorem: v-buf$unbound-in-body (l < m) → unbound-in-body (index ('y, l), v-buf$body (m, n))

Event: Enable v-buf$unbound-in-body; name this event ‘v-buf$unbound-in-body-off’.

Theorem: v-buf$body-value (b-buf& (netlist) ∧ (body = v-buf$body (m, n))) → (collect-value (indices ('y, m, n),

dual-eval (1, body, bindings, state-bindings, netlist))

= v-threefix (collect-value (indices ('a, m, n), bindings)))

Event: Enable v-buf$body-value; name this event ‘v-buf$body-value-off’.

Theorem: v-buf$value (v-buf& (netlist, n) ∧ properp (a) ∧ (length (a) = n)) → (dual-eval (0, index ('v-buf, n), a, state, netlist) = v-threefix (a))

Event: Enable v-buf$value; name this event ‘v-buf$value-off’.

Definition: v-or$body (m, n) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('y, m)),

                'b-or,

list (index ('a, m), index ('b, m))), v-or$body (1 + m, n − 1)) endif

Event: Enable v-or$body; name this event ‘v-or$body-off’.

Definition: v-or* (n) = cons (index ('v-or, n),

cons (append (indices ('a, 0, n), indices ('b, 0, n)), cons (indices ('y, 0, n), cons (v-or$body (0, n), '(nil)))))

Theorem: v-or*$destructure (car (v-or* (n)) = index ('v-or, n)) ∧ (cadr (v-or* (n)) = append (indices ('a, 0, n), indices ('b, 0, n))) ∧ (caddr (v-or* (n)) = indices ('y, 0, n)) ∧ (cadddr (v-or* (n)) = v-or$body (0, n)) ∧ (caddddr (v-or* (n)) = nil)

Event: Enable v-or*; name this event ‘v-or*-off’.

Event: Enable v-or*$destructure; name this event ‘v-or*$destructure-off’.

Definition: v-or& (netlist, n) = ((lookup-module (index ('v-or, n), netlist) = v-or* (n))

∧ b-or& (delete-module (index ('v-or, n), netlist)))

Event: Enable v-or&; name this event ‘v-or&-off’.

Definition: v-or$netlist (n) = cons (v-or* (n), b-or$netlist)

Theorem: v-or$unbound-in-body (l < m) → unbound-in-body (index ('y, l), v-or$body (m, n))

Event: Enable v-or$unbound-in-body; name this event ‘v-or$unbound-in-body-off’.

Theorem: v-or$body-value (b-or& (netlist) ∧ (body = v-or$body (m, n))) → (collect-value (indices ('y, m, n),

dual-eval (1, body, bindings, state-bindings, netlist))

= fv-or (collect-value (indices ('a, m, n), bindings), collect-value (indices ('b, m, n), bindings)))

Event: Enable v-or$body-value; name this event ‘v-or$body-value-off’.

Theorem: v-or$value (v-or& (netlist, n) ∧ (properp (a) ∧ (length (a) = n)) ∧ properp (b) ∧ (length (b) = n)) → (dual-eval (0, index ('v-or, n), append (a, b), state, netlist)

= fv-or (a, b))

Event: Enable v-or$value; name this event ‘v-or$value-off’.

Definition: v-xor$body (m, n) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('y, m)),

                'b-xor,

list (index ('a, m), index ('b, m))), v-xor$body (1 + m, n − 1)) endif

Event: Enable v-xor$body; name this event ‘v-xor$body-off’.

Definition: v-xor* (n) = cons (index ('v-xor, n),

cons (append (indices ('a, 0, n), indices ('b, 0, n)), cons (indices ('y, 0, n), cons (v-xor$body (0, n), '(nil)))))

Theorem: v-xor*$destructure (car (v-xor* (n)) = index ('v-xor, n)) ∧ (cadr (v-xor* (n)) = append (indices ('a, 0, n), indices ('b, 0, n))) ∧ (caddr (v-xor* (n)) = indices ('y, 0, n)) ∧ (cadddr (v-xor* (n)) = v-xor$body (0, n)) ∧ (caddddr (v-xor* (n)) = nil)

Event: Enable v-xor*; name this event ‘v-xor*-off’.

Event: Enable v-xor*$destructure; name this event ‘v-xor*$destructure-off’.

Definition: v-xor& (netlist, n) = ((lookup-module (index ('v-xor, n), netlist) = v-xor* (n))

∧ b-xor& (delete-module (index ('v-xor, n), netlist)))

Event: Enable v-xor&; name this event ‘v-xor&-off’.

Definition: v-xor$netlist (n) = cons (v-xor* (n), b-xor$netlist)

Theorem: v-xor$unbound-in-body (l < m) → unbound-in-body (index ('y, l), v-xor$body (m, n))

Event: Enable v-xor$unbound-in-body; name this event ‘v-xor$unbound-in-body-off’.

Theorem: v-xor$body-value (b-xor& (netlist) ∧ (body = v-xor$body (m, n))) → (collect-value (indices ('y, m, n),

dual-eval (1, body, bindings, state-bindings, netlist))

= fv-xor (collect-value (indices ('a, m, n), bindings), collect-value (indices ('b, m, n), bindings)))

Event: Enable v-xor$body-value; name this event ‘v-xor$body-value-off’.

Theorem: v-xor$value (v-xor& (netlist, n) ∧ (properp (a) ∧ (length (a) = n)) ∧ properp (b) ∧ (length (b) = n)) → (dual-eval (0, index ('v-xor, n), append (a, b), state, netlist)

= fv-xor (a, b))

Event: Enable v-xor$value; name this event ‘v-xor$value-off’.

Definition: v-pullup$body (m, n) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('y, m)),

                'pullup,

list (index ('a, m))), v-pullup$body (1 + m, n − 1)) endif

Event: Enable v-pullup$body; name this event ‘v-pullup$body-off’.

Definition: v-pullup* (n) = cons (index ('v-pullup, n),

cons (indices ('a, 0, n), cons (indices ('y, 0, n), cons (v-pullup$body (0, n), '(nil)))))

Theorem: v-pullup*$destructure (car (v-pullup* (n)) = index ('v-pullup, n)) ∧ (cadr (v-pullup* (n)) = indices ('a, 0, n)) ∧ (caddr (v-pullup* (n)) = indices ('y, 0, n))

∧ (cadddr (v-pullup* (n)) = v-pullup$body (0, n)) ∧ (caddddr (v-pullup* (n)) = nil)

Event: Enable v-pullup*; name this event ‘v-pullup*-off’.

Event: Enable v-pullup*$destructure; name this event ‘v-pullup*$destructure-off’.

Definition: v-pullup& (netlist, n) = ((lookup-module (index ('v-pullup, n), netlist) = v-pullup* (n))

∧ pullup& (delete-module (index ('v-pullup, n), netlist)))

Event: Enable v-pullup&; name this event ‘v-pullup&-off’.

Definition: v-pullup$netlist (n) = cons (v-pullup* (n), pullup$netlist)

Theorem: v-pullup$unbound-in-body (l < m) → unbound-in-body (index ('y, l), v-pullup$body (m, n))

Event: Enable v-pullup$unbound-in-body; name this event ‘v-pullup$unbound-in-body-off’.

Theorem: v-pullup$body-value (pullup& (netlist) ∧ (body = v-pullup$body (m, n))) → (collect-value (indices ('y, m, n),

dual-eval (1, body, bindings, state-bindings, netlist))

= v-pullup (collect-value (indices ('a, m, n), bindings)))

Event: Enable v-pullup$body-value; name this event ‘v-pullup$body-value-off’.

Theorem: v-pullup$value (v-pullup& (netlist, n) ∧ properp (a) ∧ (length (a) = n)) → (dual-eval (0, index ('v-pullup, n), a, state, netlist) = v-pullup (a))

Event: Enable v-pullup$value; name this event ‘v-pullup$value-off’.

Definition: v-wire$body (m, n) = if n ≃ 0 then nil else cons (list (index ('g, m),

list (index ('y, m)),

                't-wire,

list (index ('a, m), index ('b, m))), v-wire$body (1 + m, n − 1)) endif

Event: Enable v-wire$body; name this event ‘v-wire$body-off’.

Definition: v-wire* (n) = cons (index ('v-wire, n),

cons (append (indices ('a, 0, n), indices ('b, 0, n)), cons (indices ('y, 0, n), cons (v-wire$body (0, n), '(nil)))))

Theorem: v-wire*$destructure (car (v-wire* (n)) = index ('v-wire, n)) ∧ (cadr (v-wire* (n)) = append (indices ('a, 0, n), indices ('b, 0, n))) ∧ (caddr (v-wire* (n)) = indices ('y, 0, n)) ∧ (cadddr (v-wire* (n)) = v-wire$body (0, n)) ∧ (caddddr (v-wire* (n)) = nil)

Event: Enable v-wire*; name this event ‘v-wire*-off’.

Event: Enable v-wire*$destructure; name this event ‘v-wire*$destructure-off’.

Definition: v-wire& (netlist, n) = ((lookup-module (index ('v-wire, n), netlist) = v-wire* (n))

∧ t-wire& (delete-module (index ('v-wire, n), netlist)))

Event: Enable v-wire&; name this event ‘v-wire&-off’.

Definition: v-wire$netlist (n) = cons (v-wire* (n), t-wire$netlist)

Theorem: v-wire$unbound-in-body (l < m) → unbound-in-body (index ('y, l), v-wire$body (m, n))

Event: Enable v-wire$unbound-in-body; name this event ‘v-wire$unbound-in-body-off’.

Theorem: v-wire$body-value (t-wire& (netlist) ∧ (body = v-wire$body (m, n))) → (collect-value (indices ('y, m, n),

dual-eval (1, body, bindings, state-bindings, netlist))

= v-wire (collect-value (indices ('a, m, n), bindings), collect-value (indices ('b, m, n), bindings)))

Event: Enable v-wire$body-value; name this event ‘v-wire$body-value-off’.

Theorem: v-wire$value (v-wire& (netlist, n) ∧ (properp (a) ∧ (length (a) = n)) ∧ properp (b) ∧ (length (b) = n)) → (dual-eval (0, index ('v-wire, n), append (a, b), state, netlist)

= v-wire (a, b))

Event: Enable v-wire$value; name this event ‘v-wire$value-off’.

Definition: rev-0 (x) = rev1 (x, 0)

Definition: number-to-digit (number) = nth (number, cdr (unpack ('a0123456789)))

Definition: number-to-list1 (number) = if number ≃ 0 then 0

else cons (number-to-digit (number mod 10), number-to-list1 (number ÷ 10)) endif

Definition: number-to-list (number) = if number ≃ 0 then cons (cadr (unpack ('a0)), 0)

else rev-0 (number-to-list1 (number)) endif

Definition: lisp-netlist (netlist) = if indexp (netlist)

then pack (append (unpack (i-name (netlist)),

cons (cadr (unpack ('a )),

number-to-list (i-num (netlist)))))

elseif netlist ≃ nil then netlist

else cons (lisp-netlist (car (netlist)), lisp-netlist (cdr (netlist))) endif

Definition: collect-primitives (flg, x0 , netlist) = case on flg: case = 0 then if primp (x0 ) ∨ (¬ lookup-module (x0 , netlist)) then list (x0 )

else flatten-list (collect-primitives (1,

module-occurrences (lookup-module (x0 ,

netlist)),

delete-module (x0 ,

netlist))) endif

case = 1 then if x0 ≃ nil then nil

else cons (collect-primitives (0, occ-function (car (x0 )), netlist), collect-primitives (1, cdr (x0 ), netlist)) endif

otherwise f endcase

Definition: count-primitives (flg, x0 , x1 , type, netlist) = case on flg:

case = 0 then if primp (x0 )

then if primp-lookup (x0 , type) then primp2 (x0 , type)

else f endif elseif listp (lookup-module (x0 , netlist)) then count-primitives (1,

module-occurrences (lookup-module (x0 ,

netlist)),

                         0,

type,

delete-module (x0 , netlist))

else f endif case = 1 then if x0 ≃ nil then x1

elseif count-primitives (0, occ-function (car (x0 )), nil, type, netlist)

then count-primitives (1, cdr (x0 ), x1 + count-primitives (0,

occ-function (car (x0 )), nil, type, netlist), type, netlist)

else f endif otherwise f endcase

Event: Enable count-primitives; name this event ‘count-primitives-off’.

Definition: half-adder*

= '(half-adder
      (a b)
      (sum carry)
      ((g0 (sum) b-xor (a b)) (g1 (carry) b-and (a b)))
      nil)

Definition: half-adder$netlist = cons (half-adder*, b-xor$netlist ∪ b-and$netlist)

Definition: half-adder& (netlist) = ((lookup-module ('half-adder, netlist) = half-adder*)

∧ b-xor& (delete-module ('half-adder, netlist)) ∧ b-and& (delete-module ('half-adder, netlist)))

Event: Enable half-adder&; name this event ‘half-adder&-off’.

Theorem: half-adder$value half-adder& (netlist) → (dual-eval (0, 'half-adder, list (a, b), state, netlist)

= list (f-xor (a, b), f-and (a, b)))

Event: Enable half-adder$value; name this event ‘half-adder$value-off’.

Definition: full-adder*

= '(full-adder
      (a b c)
      (sum carry)
      ((t0 (sum1 carry1) half-adder (a b))
       (t1 (sum carry2) half-adder (sum1 c))
       (t2 (carry) b-or (carry1 carry2)))
      nil)

Definition: full-adder$netlist = cons (full-adder*, half-adder$netlist ∪ b-or$netlist)

Definition: full-adder& (netlist) = ((lookup-module ('full-adder, netlist) = full-adder*)

∧ half-adder& (delete-module ('full-adder, netlist)) ∧ b-or& (delete-module ('full-adder, netlist)))

Event: Enable full-adder&; name this event ‘full-adder&-off’.

Definition: f$full-adder (a, b, c) = list (f-xor (f-xor (a, b), c), f-or (f-and (a, b), f-and (f-xor (a, b), c)))

Theorem: full-adder$value full-adder& (netlist) → (dual-eval (0, 'full-adder, list (a, b, c), state, netlist)

= f$full-adder (a, b, c))

Definition: full-adder (a, b, c) = list (b-xor3 (a, b, c), b-or (b-and (a, b-or (b, c)), b-and (b, c)))

Theorem: f$full-adder=full-adder (boolp (a) ∧ boolp (b) ∧ boolp (c)) → (f$full-adder (a, b, c) = full-adder (a, b, c))

Definition: m1*

= '(m1
      (clk en sel d q)
      (q)
      ((mux (b) b-if (sel d q))
       (latch (a an) fd1 (b clk))
       (tbuf (q) t-buf (en a)))
      latch)

Definition: m1$netlist = cons (m1*, (b-if$netlist ∪ fd1$netlist) ∪ t-buf$netlist)

Definition: m1& (netlist) = ((lookup-module ('m1, netlist) = m1*)

∧ b-if& (delete-module ('m1, netlist)) ∧ fd1& (delete-module ('m1, netlist)) ∧ t-buf& (delete-module ('m1, netlist)))

Event: Enable m1&; name this event ‘m1&-off’.

Theorem: m1$value m1& (netlist) → (dual-eval (0, 'm1, list (clk, en, sel, d, q), state, netlist)

= list (ft-buf (en, state)))

Event: Enable m1$value; name this event ‘m1$value-off’.

Theorem: m1$state m1& (netlist) → (dual-eval (2, 'm1, list (clk, en, sel, d, q), state, netlist)

= f-if (sel, d, q))

Event: Enable m1$state; name this event ‘m1$state-off’.

Definition: m2*

= '(m2
      (clk en0 en1 sel0 sel1 d0 d1)
      (q)
      ((occ0 (q0) m1 (clk en0 sel0 d0 q))
       (occ1 (q1) m1 (clk en1 sel1 d1 q))
       (wire (q) t-wire (q0 q1)))
      (occ0 occ1))

Definition: m2$netlist = cons (m2*, m1$netlist ∪ t-wire$netlist)

Definition: m2& (netlist) = ((lookup-module ('m2, netlist) = m2*)

∧ m1& (delete-module ('m2, netlist)) ∧ t-wire& (delete-module ('m2, netlist)))

Event: Enable m2&; name this event ‘m2&-off’.

Theorem: m2$value m2& (netlist) → (dual-eval (0, 'm2, list (clk, en0 , en1 , sel0 , sel1 , d0 , d1 ), state, netlist)

= list (ft-wire (ft-buf (en0 , car (state)), ft-buf (en1 , cadr (state)))))

Event: Enable m2$value; name this event ‘m2$value-off’.

Theorem: m2$state m2& (netlist) → (dual-eval (2, 'm2, list (clk, en0 , en1 , sel0 , sel1 , d0 , d1 ), state, netlist)

= list (f-if (sel0 , d0 , ft-wire (ft-buf (en0 , car (state)),

ft-buf (en1 , cadr (state)))),

f-if (sel1 , d1 , ft-wire (ft-buf (en0 , car (state)),

ft-buf (en1 , cadr (state))))))

Event: Enable m2$state; name this event ‘m2$state-off’.

Definition: bv-adder (c, a, b) = if a ≃ nil then list (c)

else cons (xor (c, xor (car (a), car (b))),

bv-adder ((car (a) ∧ car (b))

∨ (car (a) ∧ c) ∨ (car (b) ∧ c), cdr (a), cdr (b))) endif

Definition: bv-adder-body (m, n) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('sum, m), index ('carry, 1 + m)),

                'full-adder,

list (index ('a, m), index ('b, m), index ('carry, m))), bv-adder-body (1 + m, n − 1)) endif

Event: Enable bv-adder-body; name this event ‘bv-adder-body-off’.

Definition: bv-adder* (n) = cons (index ('bv-adder, n),

cons (cons (index ('carry, 0),

append (indices ('a, 0, n), indices ('b, 0, n))), cons (append (indices ('sum, 0, n), list (index ('carry, n))),

cons (bv-adder-body (0, n), '(nil)))))

Theorem: bv-adder*$destructure (car (bv-adder* (n)) = index ('bv-adder, n)) ∧ (cadr (bv-adder* (n))

= cons (index ('carry, 0),

append (indices ('a, 0, n), indices ('b, 0, n))))

∧ (caddr (bv-adder* (n))

= append (indices ('sum, 0, n), list (index ('carry, n)))) ∧ (cadddr (bv-adder* (n)) = bv-adder-body (0, n)) ∧ (caddddr (bv-adder* (n)) = nil)

Event: Enable bv-adder*; name this event ‘bv-adder*-off’.

Event: Enable bv-adder*$destructure; name this event ‘bv-adder*$destructure-off’.

Definition: bv-adder& (netlist, n) = ((lookup-module (index ('bv-adder, n), netlist) = bv-adder* (n))

∧ full-adder& (delete-module (index ('bv-adder, n), netlist)))

Event: Enable bv-adder&; name this event ‘bv-adder&-off’.

Definition: bv-adder$netlist (n) = cons (bv-adder* (n), full-adder$netlist)

Event: Enable bv-adder$netlist; name this event ‘bv-adder$netlist-off’.

Definition: bv-adder-body$induction (m, n, bindings, state-bindings, netlist) = if n ≃ 0 then bindings

else bv-adder-body$induction (1 + m, n − 1, append (pairlist (list (index ('sum,

m), index ('carry,

1 + m)),

dual-eval (0,

                                                    'full-adder,

collect-value (list (index ('a,

m), index ('b,

m), index ('carry, m)),

bindings),

value (index ('g,

m), state-bindings),

netlist)),

bindings), state-bindings, netlist) endif

Theorem: bv-adder$unbound-in-body-sum (l < m) → unbound-in-body (index ('sum, l), bv-adder-body (m, n))

Theorem: bv-adder$unbound-in-body-carry (l < (1 + m)) → unbound-in-body (index ('carry, l), bv-adder-body (m, n))

Event: Enable bv-adder$unbound-in-body-sum; name this event ‘bv-adder$unbound-in-body-sum-off’.

Event: Enable bv-adder$unbound-in-body-carry; name this event ‘bv-adder$unbound-in-body-carry-off’.

Theorem: bv-adder-body$value (full-adder& (netlist) ∧ boolp (value (index ('carry, m), bindings)) ∧ bvp (collect-value (indices ('a, m, n), bindings)) ∧ bvp (collect-value (indices ('b, m, n), bindings))) → (collect-value (append (indices ('sum, m, n),

list (index ('carry, n + m))), dual-eval (1,

bv-adder-body (m, n), bindings, state-bindings, netlist)) = bv-adder (value (index ('carry, m), bindings),

collect-value (indices ('a, m, n), bindings), collect-value (indices ('b, m, n), bindings)))

Theorem: bv-adder-body-special-case$value (full-adder& (netlist) ∧ boolp (value (index ('carry, 0), bindings)) ∧ bvp (collect-value (indices ('a, 0, n), bindings)) ∧ bvp (collect-value (indices ('b, 0, n), bindings)))

→ (collect-value (append (indices ('sum, 0, n), list (index ('carry, n))),

dual-eval (1, bv-adder-body (0, n), bindings, state-bindings, netlist))

= bv-adder (value (index ('carry, 0), bindings), collect-value (indices ('a, 0, n), bindings), collect-value (indices ('b, 0, n), bindings)))

Theorem: bv-adder$value (bv-adder& (netlist, n) ∧ boolp (c) ∧ bvp (a) ∧ bvp (b) ∧ (length (a) = n) ∧ (length (b) = n)) → (dual-eval (0, index ('bv-adder, n), cons (c, append (a, b)), state, netlist)

= bv-adder (c, a, b))

Event: Enable bv-adder-body-special-case$value; name this event ‘bv-adder-body-special-case$value-off’.

Event: Enable bv-adder-body$value; name this event ‘bv-adder-body$value-off’.

Event: Enable bv-adder$value; name this event ‘bv-adder$value-off’.

Definition: v-sum (c, a, b) = if a ≃ nil then nil

else cons (b-xor (c, b-xor (car (a), car (b))),

v-sum (b-or3 (b-and (car (a), car (b)), b-and (car (a), c), b-and (car (b), c)),

cdr (a),

cdr (b))) endif

Event: Enable v-sum; name this event ‘v-sum-off’.

Theorem: bvp-sum bvp (v-sum (c, a, b))

Theorem: length-sum length (v-sum (c, a, b)) = length (a)

Theorem: v-sum-congruence c → ((v-sum (c, a, b) = v-sum (t, a, b)) = t)

Theorem: a-1+1=a (bvp (a) ∧ c) → (v-sum (c, v-not (nat-to-v (0, length (a))), a) = a)

Definition: v-carry (c, a, b) = if a ≃ nil then boolfix (c)

else v-carry ((car (a) ∧ car (b))

∨ ((car (a) ∨ car (b)) ∧ c), cdr (a), cdr (b)) endif

Event: Enable v-carry; name this event ‘v-carry-off’.

Definition: v-propagate (a, b) = if a ≃ nil then t

else (car (a) ∨ car (b)) ∧ v-propagate (cdr (a), cdr (b)) endif

Event: Enable v-propagate; name this event ‘v-propagate-off’.

Definition: v-generate (a, b) = if a ≃ nil then f

else v-generate (cdr (a), cdr (b))

∨ (car (a) ∧ car (b) ∧ v-propagate (cdr (a), cdr (b))) endif

Event: Enable v-generate; name this event ‘v-generate-off’.

Definition: f$t-carry (c, prop, gen) = f-or (f-and (c, prop), gen)

Event: Enable f$t-carry; name this event ‘f$t-carry-off’.

Definition: t-carry (c, prop, gen) = b-not (ao6 (c, prop, gen))

Event: Enable t-carry; name this event ‘t-carry-off’.

Theorem: f$t-carry=t-carry (boolp (c) ∧ boolp (prop) ∧ boolp (gen)) → (f$t-carry (c, prop, gen) = t-carry (c, prop, gen))

Theorem: t-carry-congruence x → ((t-carry (x, p, g) = t-carry (t, p, g)) = t)

Definition: t-carry*

= '(t-carry
      (c prop gen)
      (z)
      ((g0 (z-) ao6 (c prop gen)) (g1 (z) b-not (z-)))
      nil)

Definition: t-carry& (netlist) = ((lookup-module ('t-carry, netlist) = t-carry*)

∧ ao6& (delete-module ('t-carry, netlist)) ∧ b-not& (delete-module ('t-carry, netlist)))

Event: Enable t-carry&; name this event ‘t-carry&-off’.

Definition: t-carry$netlist = cons (t-carry*, ao6$netlist ∪ b-not$netlist)

Theorem: t-carry$value t-carry& (netlist) → (dual-eval (0, 't-carry, list (c, prop, gen), state, netlist)

= list (f$t-carry (c, prop, gen)))

Event: Enable t-carry$value; name this event ‘t-carry$value-off’.

Theorem: v-append-propagate (length (a) = length (c)) → (v-propagate (append (a, b), append (c, d))

= (v-propagate (a, c) ∧ v-propagate (b, d)))

Theorem: v-propagate-append (length (a) = length (c)) → (b-and (v-propagate (a, c), v-propagate (b, d))

= v-propagate (append (a, b), append (c, d)))

Event: Enable v-propagate-append; name this event ‘v-propagate-append-off’.

Theorem: generate-append (length (a) = length (c)) → (t-carry (v-generate (a, c), v-propagate (b, d), v-generate (b, d))

= v-generate (append (a, b), append (c, d)))

Theorem: append-sum ((length (a) = length (b)) ∧ (c2 = v-carry (c1 , a, b))) → (append (v-sum (c1 , a, b), v-sum (c2 , c, d))

= v-sum (c1 , append (a, c), append (b, d)))

Theorem: t-carry-p-g-carry t-carry (c, v-propagate (a, b), v-generate (a, b)) = v-carry (c, a, b)

Theorem: v-adder-output=v-sum v-adder-output (c, a, b) = v-sum (c, a, b)

Theorem: v-adder-carry-out=v-carry v-adder-carry-out (c, a, b) = v-carry (c, a, b)

Definition: tv-adder (c, a, b, tree) = if tree ≃ nil

then list (b-or (car (a), car (b)), b-and (car (a), car (b)), b-xor (car (a), b-xor (car (b), c)))

else cons (b-and (car (tv-adder (c, tfirstn (a, tree), tfirstn (b, tree), car (tree))),

car (tv-adder (t-carry (c,

car (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree))),

cadr (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree)))),

trestn (a, tree), trestn (b, tree), cdr (tree)))),

cons (t-carry (cadr (tv-adder (c, tfirstn (a, tree), tfirstn (b, tree), car (tree))),

car (tv-adder (t-carry (c, car (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree))),

cadr (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree)))),

trestn (a, tree), trestn (b, tree), cdr (tree))),

cadr (tv-adder (t-carry (c,

car (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree))),

cadr (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree)))),

trestn (a, tree), trestn (b, tree), cdr (tree)))),

append (cddr (tv-adder (c, tfirstn (a, tree), tfirstn (b, tree), car (tree))),

cddr (tv-adder (t-carry (c,

car (tv-adder (c,

tfirstn (a,

tree), tfirstn (b,

tree), car (tree))),

cadr (tv-adder (c, tfirstn (a,

tree), tfirstn (b,

tree), car (tree)))),

trestn (a, tree), trestn (b, tree), cdr (tree)))))) endif

Event: Enable tv-adder; name this event ‘tv-adder-off’.

Theorem: car-tv-adder-as-p ((length (a) = tree-size (tree)) ∧ (length (b) = tree-size (tree))) → (car (tv-adder (c, a, b, tree)) = v-propagate (a, b))

Theorem: cadr-tv-adder-as-g ((length (a) = tree-size (tree)) ∧ (length (b) = tree-size (tree))) → (cadr (tv-adder (c, a, b, tree)) = v-generate (a, b))

Theorem: cddr-tv-adder-as-sum ((length (a) = tree-size (tree)) ∧ (length (b) = tree-size (tree))) → (cddr (tv-adder (c, a, b, tree)) = v-sum (c, a, b))

Theorem: equality-of-three-element-lists ((x ≠ 0) ∧ (y ≠ 0) ∧ (z ≠ 0)) → ((w = cons (x, cons (y, z)))

= ((car (w) = x) ∧ (cadr (w) = y) ∧ (cddr (w) = z)))

Theorem: tv-adder-as-p-g-sum ((length (a) = tree-size (tree)) ∧ (length (b) = tree-size (tree))) → (tv-adder (c, a, b, tree)

= cons (v-propagate (a, b), cons (v-generate (a, b), v-sum (c, a, b))))

Event: Enable car-tv-adder-as-p; name this event ‘car-tv-adder-as-p-off’.

Event: Enable cadr-tv-adder-as-g; name this event ‘cadr-tv-adder-as-g-off’.

Event: Enable cddr-tv-adder-as-sum; name this event ‘cddr-tv-adder-as-sum-off’.

Event: Enable tv-adder-as-p-g-sum; name this event ‘tv-adder-as-p-g-sum-off’.

Definition: tv-if-body (tree)

= if tree ≃ nil

then list (list ('leaf, list (index ('out, 0)),

'b-if,

list ('c, index ('a, 0), index ('b, 0))))

else append (if (tree-height (tree) mod 3) ≃ 0

then '((c-buf (c-buf) b-buf (c)))

else nil endif, list (list ('left,

tfirstn (indices ('out, 0, tree-size (tree)),

tree), index ('tv-if, tree-number (car (tree))), cons (if (tree-height (tree) mod 3) ≃ 0

     then 'c-buf

else 'c endif,

append (tfirstn (indices ('a,

                         0,

tree-size (tree)), tree), tfirstn (indices ('b,

                         0,

tree-size (tree)), tree)))),

list ('right,

trestn (indices ('out, 0, tree-size (tree)),

tree), index ('tv-if, tree-number (cdr (tree))), cons (if (tree-height (tree) mod 3) ≃ 0

     then 'c-buf

else 'c endif,

append (trestn (indices ('a,

                        0,

tree-size (tree)), tree), trestn (indices ('b,

                        0,

tree-size (tree)), tree)))))) endif

Definition: tv-if* (tree) = cons (index ('tv-if, tree-number (tree)),

cons (cons ('c, append (indices ('a, 0, tree-size (tree)),

indices ('b, 0, tree-size (tree)))),

cons (indices ('out, 0, tree-size (tree)), cons (tv-if-body (tree), '(nil)))))

Theorem: tv-if*$destructure (car (tv-if* (tree)) = index ('tv-if, tree-number (tree))) ∧ (cadr (tv-if* (tree))

= cons ('c,

append (indices ('a, 0, tree-size (tree)),

indices ('b, 0, tree-size (tree)))))

∧ (caddr (tv-if* (tree)) = indices ('out, 0, tree-size (tree))) ∧ (cadddr (tv-if* (tree)) = tv-if-body (tree)) ∧ (caddddr (tv-if* (tree)) = nil)

Event: Enable tv-if*; name this event ‘tv-if*-off’.

Event: Enable tv-if*$destructure; name this event ‘tv-if*$destructure-off’.

Definition: tv-if& (netlist, tree) = if tree ≃ nil

then (lookup-module (index ('tv-if, tree-number (tree)), netlist) = tv-if* (tree)) ∧ b-if& (delete-module (index ('tv-if, tree-number (tree)), netlist))

else (lookup-module (index ('tv-if, tree-number (tree)), netlist) = tv-if* (tree)) ∧ b-buf& (delete-module (index ('tv-if,

tree-number (tree)), netlist))

∧ tv-if& (delete-module (index ('tv-if,

tree-number (tree)), netlist),

car (tree))

∧ tv-if& (delete-module (index ('tv-if,

tree-number (tree)), netlist),

cdr (tree)) endif

Event: Enable tv-if&; name this event ‘tv-if&-off’.

Definition: tv-if$netlist (tree)

= if tree ≃ nil then cons (tv-if* (tree), b-if$netlist)

else cons (tv-if* (tree), tv-if$netlist (car (tree)) ∪ (tv-if$netlist (cdr (tree)) ∪ b-buf$netlist)) endif

Definition: tv-if-induction (tree, c, a, b, state, netlist) = if tree ≃ nil then t

else tv-if-induction (car (tree), c, tfirstn (a, tree), tfirstn (b, tree),

0,

delete-module (index ('tv-if,

tree-number (tree)), netlist))

∧ tv-if-induction (car (tree), x, tfirstn (a, tree), tfirstn (b, tree),

0,

delete-module (index ('tv-if,

tree-number (tree)), netlist))

∧ tv-if-induction (cdr (tree), c, trestn (a, tree), trestn (b, tree),

0,

delete-module (index ('tv-if,

tree-number (tree)), netlist))

∧ tv-if-induction (cdr (tree), x, trestn (a, tree), trestn (b, tree),

0,

delete-module (index ('tv-if,

tree-number (tree)), netlist)) endif

Theorem: tv-if-lemma-crock tv-if& (delete-module (index ('tv-if, tree-number (tree)), netlist), car (tree)) → (collect-value (indices ('out, 0, n), alist)

= append (collect-value (firstn (tree-size (car (tree)),

indices ('out, 0, n)), alist),

collect-value (restn (tree-size (car (tree)),

indices ('out, 0, n)), alist)))

Event: Enable tv-if-lemma-crock; name this event ‘tv-if-lemma-crock-off’.

Theorem: tv-if$value (tv-if& (netlist, tree) ∧ properp (a) ∧ properp (b) ∧ (length (a) = tree-size (tree)) ∧ (length (b) = tree-size (tree))) → (dual-eval (0,

index ('tv-if, tree-number (tree)), cons (c, append (a, b)), state, netlist)

= fv-if (c, a, b))

Event: Enable tv-if$value; name this event ‘tv-if$value-off’.

Definition: t-or-nor-body (tree, parity) = if tree ≃ nil

then list (list ('leaf,

'(out),

if parity then 'b-not else 'b-buf endif, list (index ('a, 0))))

elseif (car (tree) ≃ nil) ∧ (cdr (tree) ≃ nil) then list (list ('leaf,

'(out),

if parity then 'b-nor else 'b-or endif, list (index ('a, 0), index ('a, 1))))

else list (list ('left,

'(left-out),

index (if parity then 't-or else 't-nor endif, tree-number (car (tree))),

tfirstn (indices ('a, 0, tree-size (tree)), tree)),

           list ('right,
               '(right-out),

index (if parity then 't-or else 't-nor endif, tree-number (cdr (tree))),

trestn (indices ('a, 0, tree-size (tree)), tree)),

           cons ('output,
                cons ('(out),

cons (if parity then 'b-nor else 'b-nand endif,

                         '((left-out right-out)))))) endif

Definition: t-or-nor* (tree, parity) = cons (index (if parity then 't-nor

else 't-or endif, tree-number (tree)), cons (indices ('a, 0, tree-size (tree)),

cons ('(out), cons (t-or-nor-body (tree, parity), '(nil)))))

Theorem: t-or-nor*$destructure (car (t-or-nor* (tree, parity)) = index (if parity then 't-nor

else 't-or endif, tree-number (tree)))

∧ (cadr (t-or-nor* (tree, parity)) = indices ('a, 0, tree-size (tree))) ∧ (caddr (t-or-nor* (tree, parity)) = '(out)) ∧ (cadddr (t-or-nor* (tree, parity)) = t-or-nor-body (tree, parity)) ∧ (caddddr (t-or-nor* (tree, parity)) = nil)

Event: Enable t-or-nor*; name this event ‘t-or-nor*-off’.

Event: Enable t-or-nor*$destructure; name this event ‘t-or-nor*$destructure-off’.

Definition: t-or-nor& (netlist, tree, parity) = if (tree ≃ nil) ∨ ((car (tree) ≃ nil) ∧ (cdr (tree) ≃ nil))

then (lookup-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist)

= t-or-nor* (tree, parity))

∧ b-not& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-buf& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-nor& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-or& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-nand& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

else (lookup-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist)

= t-or-nor* (tree, parity)) ∧ t-or-nor& (delete-module (index (if parity

then 't-nor

else 't-or endif, tree-number (tree)),

netlist),

car (tree), ¬ parity)

∧ t-or-nor& (delete-module (index (if parity

then 't-nor

else 't-or endif, tree-number (tree)),

netlist),

cdr (tree), ¬ parity)

∧ b-not& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-buf& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-nor& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist))

∧ b-or& (delete-module (index (if parity then 't-nor else 't-or endif, tree-number (tree)),

netlist)) ∧ b-nand& (delete-module (index (if parity then 't-nor

else 't-or endif, tree-number (tree)),

netlist)) endif

Event: Enable t-or-nor&; name this event ‘t-or-nor&-off’.

Definition: t-or-nor$netlist (tree, parity) = if (tree ≃ nil) ∨ ((car (tree) ≃ nil) ∧ (cdr (tree) ≃ nil))

then cons (t-or-nor* (tree, parity), ((b-not$netlist ∪ b-buf$netlist) ∪ (b-nor$netlist ∪ b-or$netlist)) ∪ b-nand$netlist)

else cons (t-or-nor* (tree, parity), t-or-nor$netlist (car (tree), ¬ parity) ∪ t-or-nor$netlist (cdr (tree), ¬ parity)) endif

Definition: t-or-nor-induction (tree, parity, call-name, a, state, netlist) = if (tree ≃ nil) ∨ ((car (tree) ≃ nil) ∧ (cdr (tree) ≃ nil)) then t

else t-or-nor-induction (car (tree), ¬ parity, if ¬ parity then 't-nor else 't-or endif, tfirstn (a, tree),

                        0,

delete-module (index (if parity

                                          then 't-nor

else 't-or endif, tree-number (tree)),

netlist))

∧ t-or-nor-induction (cdr (tree), ¬ parity, if ¬ parity then 't-nor else 't-or endif, trestn (a, tree),

                           0,

delete-module (index (if parity

                                             then 't-nor

else 't-or endif, tree-number (tree)),

netlist)) endif

Definition: tr-or-nor (a, parity, tree) = if tree ≃ nil

then if parity then f-not (car (a)) else f-buf (car (a)) endif

elseif (car (tree) ≃ nil) ∧ (cdr (tree) ≃ nil) then if parity then f-nor (car (a), cadr (a)) else f-or (car (a), cadr (a)) endif

elseif parity

then f-nor (tr-or-nor (tfirstn (a, tree), ¬ parity, car (tree)),

tr-or-nor (trestn (a, tree), ¬ parity, cdr (tree)))

else f-nand (tr-or-nor (tfirstn (a, tree), ¬ parity, car (tree)), tr-or-nor (trestn (a, tree), ¬ parity, cdr (tree))) endif

Event: Enable tr-or-nor; name this event ‘tr-or-nor-off’.

Theorem: t-or-nor$value (t-or-nor& (netlist, tree, parity) ∧ (call-name = if parity then 't-nor

else 't-or endif)

∧ properp (a) ∧ (length (a) = tree-size (tree))) → (dual-eval (0, index (call-name, tree-number (tree)), a, state, netlist)

= list (tr-or-nor (a, parity, tree)))

Event: Enable t-or-nor$value; name this event ‘t-or-nor$value-off’.

Definition: btr-or-nor (a, parity, tree) = if tree ≃ nil

then if parity then b-not (car (a)) else b-buf (car (a)) endif

elseif (car (tree) ≃ nil) ∧ (cdr (tree) ≃ nil) then if parity then b-nor (car (a), cadr (a)) else b-or (car (a), cadr (a)) endif

elseif parity

then b-nor (btr-or-nor (tfirstn (a, tree), ¬ parity, car (tree)),

btr-or-nor (trestn (a, tree), ¬ parity, cdr (tree)))

else b-nand (btr-or-nor (tfirstn (a, tree), ¬ parity, car (tree)), btr-or-nor (trestn (a, tree), ¬ parity, cdr (tree))) endif

Event: Enable btr-or-nor; name this event ‘btr-or-nor-off’.

Theorem: tr-or-nor=btr-or-nor (bvp (a) ∧ (length (a) = tree-size (tree))) → (tr-or-nor (a, parity, tree) = btr-or-nor (a, parity, tree))

Theorem: btr-or-is-v-nzerop (length (a) = tree-size (tree)) → (btr-or-nor (a, parity, tree)

= if parity then v-zerop (a) else v-nzerop (a) endif)

Definition: tv-zerop* (tree) = cons (index ('tv-zerop, tree-number (tree)),

cons (indices ('in, 0, tree-size (tree)),

             cons ('(out),

cons (if (tree-height (tree) mod 2) = 1

then cons (list ('g0,

                                    '(out-),

index ('t-or, tree-number (tree)), indices ('in, 0, tree-size (tree))),

                                '((g1 (out) b-not (out-))))

else list (list ('g0,

                                  '(out),

index ('t-nor,

tree-number (tree)), indices ('in,

                                        0,

tree-size (tree)))) endif,

                      '(nil)))))

Theorem: tv-zerop*$destructure (car (tv-zerop* (tree)) = index ('tv-zerop, tree-number (tree))) ∧ (cadr (tv-zerop* (tree)) = indices ('in, 0, tree-size (tree))) ∧ (caddr (tv-zerop* (tree)) = '(out))

∧ (cadddr (tv-zerop* (tree))

= if (tree-height (tree) mod 2) = 1

then cons (list ('g0,

                      '(out-),

index ('t-or, tree-number (tree)), indices ('in, 0, tree-size (tree))),

                  '((g1 (out) b-not (out-))))

else list (list ('g0,

                    '(out),

index ('t-nor, tree-number (tree)), indices ('in, 0, tree-size (tree)))) endif)

∧ (caddddr (tv-zerop* (tree)) = nil)

Event: Enable tv-zerop*; name this event ‘tv-zerop*-off’.

Event: Enable tv-zerop*$destructure; name this event ‘tv-zerop*$destructure-off’.

Definition: tv-zerop& (netlist, tree) = ((lookup-module (index ('tv-zerop, tree-number (tree)), netlist)

= tv-zerop* (tree))

∧ t-or-nor& (delete-module (index ('tv-zerop, tree-number (tree)), netlist),

tree,

(tree-height (tree) mod 2) ≠ 1) ∧ b-not& (delete-module (index ('tv-zerop, tree-number (tree)), netlist)))

Event: Enable tv-zerop&; name this event ‘tv-zerop&-off’.

Definition: tv-zerop$netlist (tree) = cons (tv-zerop* (tree),

t-or-nor$netlist (tree, (tree-height (tree) mod 2) ≠ 1) ∪ b-not$netlist)

Definition: f$tv-zerop (a, tree) = if (tree-height (tree) mod 2) = 1 then f-not (tr-or-nor (a, f, tree))

else tr-or-nor (a, t, tree) endif

Event: Enable f$tv-zerop; name this event ‘f$tv-zerop-off’.

Theorem: tv-zerop$value (tv-zerop& (netlist, tree) ∧ (length (a) = tree-size (tree)) ∧ properp (a)) → (dual-eval (0, index ('tv-zerop, tree-number (tree)), a, state, netlist)

= list (f$tv-zerop (a, tree)))

Event: Enable tv-zerop$value; name this event ‘tv-zerop$value-off’.

Theorem: f$tv-zerop=v-zerop ((length (a) = tree-size (tree)) ∧ bvp (a)) → (f$tv-zerop (a, tree) = v-zerop (a))

Definition: f$fast-zero (v) = f-nor3 (tr-or-nor (firstn ((length (v) − 1) − 1, v),

f,

make-tree ((length (v) − 1) − 1)),

nth ((length (v) − 1) − 1, v), nth (length (v) − 1, v))

Event: Enable f$fast-zero; name this event ‘f$fast-zero-off’.

Theorem: f$fast-zero=tr-or-nor (properp (v) ∧ if length (v) < 3 then f

else t endif) → (f$fast-zero (v)

= tr-or-nor (v, t, cons (make-tree ((length (v) − 1) − 1), '(0 . 0))))

Theorem: f$fast-zero=v-zerop (bvp (v) ∧ if length (v) < 3 then f

else t endif) → (f$fast-zero (v) = v-zerop (v))

Definition: fast-zero* (n) = cons (index ('fast-zero, n),

cons (indices ('a, 0, n), cons ('(z),

cons (list (list ('front,

                             '(zfront),

index ('t-or,

tree-number (make-tree ((n − 1) − 1))), firstn ((n − 1) − 1, indices ('a, 0, n))),

                          list ('result,
                             '(z),
                             'b-nor3,
                             list ('zfront,

index ('a, (n − 1) − 1), index ('a, n − 1)))),

                      '(nil)))))

Theorem: fast-zero*$destructure (car (fast-zero* (n)) = index ('fast-zero, n)) ∧ (cadr (fast-zero* (n)) = indices ('a, 0, n)) ∧ (caddr (fast-zero* (n)) = '(z)) ∧ (cadddr (fast-zero* (n))

= list (list ('front,

                '(zfront),

index ('t-or, tree-number (make-tree ((n − 1) − 1))), firstn ((n − 1) − 1, indices ('a, 0, n))),

            list ('result,
                '(z),
                'b-nor3,
                list ('zfront,

index ('a, (n − 1) − 1),

index ('a, n − 1)))))

∧ (caddddr (fast-zero* (n)) = nil)

Event: Enable fast-zero*; name this event ‘fast-zero*-off’.

Event: Enable fast-zero*$destructure; name this event ‘fast-zero*$destructure-off’.

Definition: fast-zero& (netlist, n) = ((lookup-module (index ('fast-zero, n), netlist) = fast-zero* (n))

∧ t-or-nor& (delete-module (index ('fast-zero, n), netlist), make-tree ((n − 1) − 1), f)

∧ b-nor3& (delete-module (index ('fast-zero, n), netlist)))

Event: Enable fast-zero&; name this event ‘fast-zero&-off’.

Definition: fast-zero$netlist (n) = cons (fast-zero* (n),

t-or-nor$netlist (make-tree ((n − 1) − 1), f) ∪ b-nor3$netlist)

Theorem: check-fast-zero$netlist fast-zero& (fast-zero$netlist (5), 5)

Theorem: fast-zero$value (fast-zero& (netlist, n) ∧ properp (v) ∧ (length (v) = n) ∧ if n < 3 then f

else t endif) → (dual-eval (0, index ('fast-zero, n), v, state, netlist)

= list (f$fast-zero (v)))

Definition: v-equal* (n) = cons (index ('v-equal, n),

cons (append (indices ('a, 0, n), indices ('b, 0, n)),

             cons ('(equal),

cons (list (list ('g0, indices ('x, 0, n), index ('v-xor, n), append (indices ('a, 0, n),

indices ('b, 0, n))),

list ('g1,

                             '(equal),
                             index ('tv-zerop,

tree-number (make-tree (n))), indices ('x, 0, n))),

                      '(nil)))))

Theorem: v-equal*$destructure (car (v-equal* (n)) = index ('v-equal, n)) ∧ (cadr (v-equal* (n)) = append (indices ('a, 0, n), indices ('b, 0, n))) ∧ (caddr (v-equal* (n)) = '(equal)) ∧ (cadddr (v-equal* (n))

= list (list ('g0, indices ('x, 0, n), index ('v-xor, n), append (indices ('a, 0, n), indices ('b, 0, n))),

list ('g1,

                '(equal),

index ('tv-zerop, tree-number (make-tree (n))),

indices ('x, 0, n))))

∧ (caddddr (v-equal* (n)) = nil)

Event: Enable v-equal*; name this event ‘v-equal*-off’.

Event: Enable v-equal*$destructure; name this event ‘v-equal*$destructure-off’.

Definition: v-equal& (netlist, n) = ((lookup-module (index ('v-equal, n), netlist) = v-equal* (n))

∧ v-xor& (delete-module (index ('v-equal, n), netlist), n) ∧ tv-zerop& (delete-module (index ('v-equal, n), netlist),

make-tree (n)))

Event: Enable v-equal&; name this event ‘v-equal&-off’.

Definition: v-equal$netlist (n) = cons (v-equal* (n), v-xor$netlist (n) ∪ tv-zerop$netlist (make-tree (n)))

Definition: f$v-equal (a, b) = f$tv-zerop (fv-xor (a, b), make-tree (length (a)))

Event: Enable f$v-equal; name this event ‘f$v-equal-off’.

Theorem: v-equal$value (v-equal& (netlist, n) ∧ (n ≄ 0) ∧ properp (a) ∧ properp (b) ∧ (length (a) = n) ∧ (length (b) = n)) → (dual-eval (0, index ('v-equal, n), append (a, b), state, netlist)

= list (f$v-equal (a, b)))

Event: Enable v-equal$value; name this event ‘v-equal$value-off’.

Theorem: f$v-equal=equal* ((length (a) ≄ 0) ∧ bvp (a) ∧ bvp (b) ∧ (length (a) = length (b))) → (f$v-equal (a, b) = (a = b))

Definition: v-inc4 (a0 , a1 , a2 , a3 ) = list (b-not (a0 ),

b-xor (b-not (a1 ), b-not (a0 )),

b-equv (b-not (a2 ), b-nor (b-not (a0 ), b-not (a1 ))),

b-equv (b-not (a3 ), b-nor3 (b-not (a0 ), b-not (a1 ), b-not (a2 ))))

Definition: f$v-inc4 (a0 , a1 , a2 , a3 ) = list (f-not (a0 ),

f-xor (f-not (a1 ), f-not (a0 )),

f-equv (f-not (a2 ), f-nor (f-not (a0 ), f-not (a1 ))),

f-equv (f-not (a3 ), f-nor3 (f-not (a0 ), f-not (a1 ), f-not (a2 ))))

Event: Enable f$v-inc4; name this event ‘f$v-inc4-off’.

Definition: v-inc4*

= '(v-inc4
      (a0 a1 a2 a3)
      (w-10 w-3 w-8 w-14)
      ((g-12 (w-12) b-not (a2))
       (g-11 (w-11) b-not (a1))
       (g-10 (w-10) b-not (a0))
       (g-13 (w-13) b-nor3 (w-10 w-11 w-12))
       (g-9 (w-9) b-not (a3))
       (g-14 (w-14) b-equv (w-9 w-13))
       (g-7 (w-7) b-nor (w-10 w-11))
       (g-8 (w-8) b-equv (w-12 w-7))
       (g-3 (w-3) b-xor (w-11 w-10)))
      nil)

Definition: v-inc4& (netlist) = ((lookup-module ('v-inc4, netlist) = v-inc4*)

∧ b-nor3& (delete-module ('v-inc4, netlist)) ∧ b-not& (delete-module ('v-inc4, netlist)) ∧ b-nor& (delete-module ('v-inc4, netlist)) ∧ b-equv& (delete-module ('v-inc4, netlist)) ∧ b-xor& (delete-module ('v-inc4, netlist)))

Event: Enable v-inc4&; name this event ‘v-inc4&-off’.

Definition: v-inc4$netlist = cons (v-inc4*,

(((b-nor3$netlist ∪ b-not$netlist) ∪ b-nor$netlist) ∪ b-equv$netlist) ∪ b-xor$netlist)

Theorem: v-inc4$value v-inc4& (netlist) → (dual-eval (0, 'v-inc4, list (a0 , a1 , a2 , a3 ), state, netlist)

= f$v-inc4 (a0 , a1 , a2 , a3 ))

Event: Enable v-inc4$value; name this event ‘v-inc4$value-off’.

Theorem: f$v-inc4=v-inc4 (boolp (a0 ) ∧ boolp (a1 ) ∧ boolp (a2 ) ∧ boolp (a3 )) → (f$v-inc4 (a0 , a1 , a2 , a3 ) = v-inc4 (a0 , a1 , a2 , a3 ))

Definition: f$v-inc4$v (a) = list (f-not (car (a)),

f-xor (f-not (cadr (a)), f-not (car (a))),

f-equv (f-not (caddr (a)), f-nor (f-not (car (a)), f-not (cadr (a)))), f-equv (f-not (cadddr (a)),

f-nor3 (f-not (car (a)), f-not (cadr (a)), f-not (caddr (a)))))

Event: Enable f$v-inc4$v; name this event ‘f$v-inc4$v-off’.

Theorem: properp-length-f$v-inc4$v properp (f$v-inc4$v (a)) ∧ (length (f$v-inc4$v (a)) = 4)

Theorem: v-inc4$value-as-v-inc (v-inc4& (netlist) ∧ properp (a) ∧ (length (a) = 4)) → (dual-eval (0, 'v-inc4, a, state, netlist) = f$v-inc4$v (a))

Theorem: f$v-inc4$v=v-inc (bvp (a) ∧ (length (a) = 4)) → (f$v-inc4$v (a) = v-inc (a))

Definition: tv-dec-pass (c, a, tree) = if tree ≃ nil then list (b-buf (car (a)), b-equv (car (a), c))

else cons (b-or (car (tv-dec-pass (c, tfirstn (a, tree), car (tree))),

car (tv-dec-pass (b-or (c,

car (tv-dec-pass (c, tfirstn (a,

tree), car (tree)))),

trestn (a, tree), cdr (tree)))), append (cdr (tv-dec-pass (c, tfirstn (a, tree), car (tree))),

cdr (tv-dec-pass (b-or (c,

car (tv-dec-pass (c,

tfirstn (a,

tree), car (tree)))),

trestn (a, tree), cdr (tree))))) endif

Event: Enable tv-dec-pass; name this event ‘tv-dec-pass-off’.

Theorem: cdr-tv-dec-pass-length length (cdr (tv-dec-pass (c, a, tree))) = tree-size (tree)

Theorem: tv-dec-pass-length length (tv-dec-pass (c, a, tree)) = (1 + tree-size (tree))

Theorem: bvp-cdr-tv-dec-pass bvp (cdr (tv-dec-pass (c, a, tree)))

Theorem: bvp-tv-dec-pass bvp (tv-dec-pass (c, a, tree))

Theorem: bvp-length-tv-dec-pass bvp-length (tv-dec-pass (c, a, tree), n) = if (1 + tree-size (tree)) < n then f

else t endif

Theorem: tv-dec-pass-crock-1 ((length (a) = tree-size (tree)) ∧ bvp (a)) → (tv-adder (c, v-not (nat-to-v (0, length (a))), a, tree)

= cons (t, tv-dec-pass (c, a, tree)))

Theorem: tv-dec-pass-crock-2 ((length (a) = tree-size (tree)) ∧ bvp (a)) → (cdr (tv-dec-pass (c, a, tree))

= cddr (tv-adder (c, v-not (nat-to-v (0, length (a))), a, tree)))

Theorem: tv-dec-pass-works ((length (a) = tree-size (tree)) ∧ bvp (a)) → (cdr (tv-dec-pass (c, a, tree))

= if c then v-buf (a)

else v-dec (a) endif)

Definition: tv-dec-pass-ng (c, a, tree, make-g) = if tree ≃ nil

then if make-g then list (b-buf (car (a)), b-equv (car (a), c))

else list (b-equv (car (a), c)) endif elseif make-g then cons (b-or (car (tv-dec-pass-ng (c, tfirstn (a, tree), car (tree), t)),

car (tv-dec-pass-ng (b-or (c,

car (tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), cdr (tree), make-g))), append (cdr (tv-dec-pass-ng (c, tfirstn (a, tree), car (tree), t)),

cdr (tv-dec-pass-ng (b-or (c,

car (tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), cdr (tree), make-g))))

else append (cdr (tv-dec-pass-ng (c, tfirstn (a, tree), car (tree), t)),

tv-dec-pass-ng (b-or (c,

car (tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), cdr (tree), make-g)) endif

Event: Enable tv-dec-pass-ng; name this event ‘tv-dec-pass-ng-off’.

Theorem: tv-dec-pass-ng-length length (tv-dec-pass-ng (c, a, tree, make-g)) = if make-g then 1 + tree-size (tree)

else tree-size (tree) endif Theorem: tv-dec-pass-ng-length-1 make-g → (length (cdr (tv-dec-pass-ng (c, a, tree, make-g))) = tree-size (tree))

Theorem: bvp-tv-dec-pass-ng bvp (tv-dec-pass-ng (c, a, tree, make-g))

Theorem: bvp-cdr-tv-dec-pass-ng make-g → bvp (cdr (tv-dec-pass-ng (c, a, tree, make-g)))

Theorem: bvp-length-tv-dec-pass-ng bvp-length (tv-dec-pass-ng (c, a, tree, make-g), n) = if make-g

then if (1 + tree-size (tree)) < n then f

else t endif else n < (1 + tree-size (tree)) endif

Theorem: tv-dec-pass-ng-is-cdr-tv-dec-pass tv-dec-pass-ng (c, a, tree, make-g) = if make-g then tv-dec-pass (c, a, tree)

else cdr (tv-dec-pass (c, a, tree)) endif

Theorem: boolp-car-tv-dec-pass-ng boolp (car (tv-dec-pass-ng (c, a, tree, make-g)))

Theorem: tv-dec-pass-ng-works-1 (bvp (a) ∧ (length (a) = tree-size (tree)) ∧ make-g) → (cdr (tv-dec-pass-ng (c, a, tree, make-g))

= if c then v-buf (a) else v-dec (a) endif)

Theorem: tv-dec-pass-ng-works-2 (bvp (a) ∧ (length (a) = tree-size (tree)) ∧ (¬ make-g)) → (tv-dec-pass-ng (c, a, tree, make-g)

= if c then v-buf (a) else v-dec (a) endif)

Definition: f$tv-dec-pass-ng (c, a, tree, make-g) = if tree ≃ nil

then if make-g then list (car (a), f-equv (car (a), c))

else list (f-equv (car (a), c)) endif elseif make-g then cons (f-or (car (f$tv-dec-pass-ng (c, tfirstn (a, tree), car (tree), t)),

car (f$tv-dec-pass-ng (f-or (c, car (f$tv-dec-pass-ng (c, tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), cdr (tree), make-g))), append (cdr (f$tv-dec-pass-ng (c, tfirstn (a, tree), car (tree), t)),

cdr (f$tv-dec-pass-ng (f-or (c,

car (f$tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), cdr (tree), make-g))))

else append (cdr (f$tv-dec-pass-ng (c, tfirstn (a, tree), car (tree), t)),

f$tv-dec-pass-ng (f-or (c,

car (f$tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), cdr (tree), make-g)) endif

Event: Enable f$tv-dec-pass-ng; name this event ‘f$tv-dec-pass-ng-off’.

Theorem: f$tv-dec-pass-ng-length length (f$tv-dec-pass-ng (c, a, tree, make-g)) = if make-g then 1 + tree-size (tree)

else tree-size (tree) endif

Theorem: f$tv-dec-pass-ng-length-1 make-g → (length (cdr (f$tv-dec-pass-ng (c, a, tree, make-g)))

= tree-size (tree))

Theorem: properp-f$tv-dec-pass-ng properp (f$tv-dec-pass-ng (c, a, tree, make-g))

Theorem: properp-cdr-f$tv-dec-pass-ng make-g → properp (cdr (f$tv-dec-pass-ng (c, a, tree, make-g)))

Theorem: f$tv-dec-pass-ng=tv-dec-pass-ng$super-crock (f$tv-dec-pass-ng (c, a, tree, make-g) = tv-dec-pass-ng (c, a, tree, make-g)) → boolp (car (f$tv-dec-pass-ng (c, a, tree, make-g)))

Event: Enable f$tv-dec-pass-ng=tv-dec-pass-ng$super-crock; name this event ‘f$tv-dec-pass-ng=tv-dec-pass-ng$super-crock-off’.

Theorem: f$tv-dec-pass-ng=tv-dec-pass-ng (boolp (c) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (f$tv-dec-pass-ng (c, a, tree, make-g)

= tv-dec-pass-ng (c, a, tree, make-g))

Definition: dec-pass-cell*

= '(dec-pass-cell
      (c a)
      (g z)
      ((g0 (g) id (a)) (g1 (z) b-equv (a c)))
      nil)

Definition: dec-pass-cell& (netlist) = ((lookup-module ('dec-pass-cell, netlist) = dec-pass-cell*)

∧ id& (delete-module ('dec-pass-cell, netlist))

∧ b-equv& (delete-module ('dec-pass-cell, netlist)))

Event: Enable dec-pass-cell&; name this event ‘dec-pass-cell&-off’.

Definition: dec-pass-cell$netlist = cons (dec-pass-cell*, id$netlist ∪ b-equv$netlist)

Theorem: dec-pass-cell$value dec-pass-cell& (netlist) → (dual-eval (0, 'dec-pass-cell, list (c, a), state, netlist)

= list (a, f-equv (a, c)))

Definition: tv-dec-pass-name (tree, make-g) = if make-g then index ('tv-dec-pass-g, tree-number (tree))

else index ('tv-dec-pass-ng, tree-number (tree)) endif

Definition: tv-dec-pass-ng-body (tree, make-g)

= if tree ≃ nil

then list (list ('leaf, list ('g, index ('z, 0)),

 'dec-pass-cell,

list ('c, index ('a, 0))))

elseif make-g then cons (list ('left,

cons ('gl, tfirstn (indices ('z, 0, tree-size (tree)), tree)), index ('tv-dec-pass-g, tree-number (car (tree))), cons ('c, tfirstn (indices ('a, 0, tree-size (tree)), tree))),

cons ('(carry (cx) b-or (c gl)),

cons (list ('right,

cons ('gr,

trestn (indices ('z, 0, tree-size (tree)),

tree)),

           index ('tv-dec-pass-g,

tree-number (cdr (tree))), cons ('cx,

trestn (indices ('a, 0, tree-size (tree)),

tree))),

        '((generate (g) b-or (gl gr))))))

else list (list ('left,

cons ('gl,

tfirstn (indices ('z, 0, tree-size (tree)), tree)), index ('tv-dec-pass-g, tree-number (car (tree))), cons ('c,

tfirstn (indices ('a, 0, tree-size (tree)), tree))),

'(carry (cx) b-or (c gl)),
list ('right,

trestn (indices ('z, 0, tree-size (tree)), tree),

index ('tv-dec-pass-ng,

tree-number (cdr (tree))), cons ('cx,

trestn (indices ('a, 0, tree-size (tree)), tree)))) endif

Event: Enable tv-dec-pass-ng-body; name this event ‘tv-dec-pass-ng-body-off’.

Definition: tv-dec-pass-ng* (tree, make-g) = cons (tv-dec-pass-name (tree, make-g),

cons (cons ('c, indices ('a, 0, tree-size (tree))),

cons (if make-g then cons ('g, indices ('z, 0, tree-size (tree))) else indices ('z, 0, tree-size (tree)) endif,

cons (tv-dec-pass-ng-body (tree, make-g), '(nil)))))

Theorem: tv-dec-pass-ng*$destructure (car (tv-dec-pass-ng* (tree, make-g)) = tv-dec-pass-name (tree, make-g)) ∧ (cadr (tv-dec-pass-ng* (tree, make-g))

= cons ('c, indices ('a, 0, tree-size (tree)))) ∧ (caddr (tv-dec-pass-ng* (tree, make-g))

= if make-g then cons ('g, indices ('z, 0, tree-size (tree)))

else indices ('z, 0, tree-size (tree)) endif)

∧ (cadddr (tv-dec-pass-ng* (tree, make-g))

= tv-dec-pass-ng-body (tree, make-g)) ∧ (caddddr (tv-dec-pass-ng* (tree, make-g)) = nil)

Event: Enable tv-dec-pass-ng*; name this event ‘tv-dec-pass-ng*-off’.

Event: Enable tv-dec-pass-ng*$destructure; name this event ‘tv-dec-pass-ng*$destructure-off’.

Definition: tv-dec-pass-ng& (netlist, tree, make-g) = if tree ≃ nil

then (lookup-module (tv-dec-pass-name (tree, make-g), netlist) = tv-dec-pass-ng* (tree, make-g)) ∧ dec-pass-cell& (delete-module (tv-dec-pass-name (tree, make-g),

netlist))

else (lookup-module (tv-dec-pass-name (tree, make-g), netlist) = tv-dec-pass-ng* (tree, make-g)) ∧ tv-dec-pass-ng& (delete-module (tv-dec-pass-name (tree,

make-g),

netlist),

car (tree), t)

∧ tv-dec-pass-ng& (delete-module (tv-dec-pass-name (tree,

make-g),

netlist),

cdr (tree), make-g)

∧ b-or& (delete-module (tv-dec-pass-name (tree, make-g), netlist)) endif

Event: Enable tv-dec-pass-ng&; name this event ‘tv-dec-pass-ng&-off’.

Definition: tv-dec-pass-ng-induction (tree, c, a, make-g, name, state, netlist) = if tree ≃ nil then t

else tv-dec-pass-ng-induction (car (tree), c, tfirstn (a, tree), t,

index ('tv-dec-pass-g,

tree-number (car (tree))),

0,

delete-module (tv-dec-pass-name (tree,

make-g),

netlist))

∧ tv-dec-pass-ng-induction (cdr (tree),

f-or (c,

car (f$tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), t,

index ('tv-dec-pass-g,

tree-number (cdr (tree))),

0,

delete-module (tv-dec-pass-name (tree,

make-g),

netlist))

∧ tv-dec-pass-ng-induction (cdr (tree),

f-or (c,

car (f$tv-dec-pass-ng (c,

tfirstn (a,

tree), car (tree), t))),

trestn (a, tree), f,

index ('tv-dec-pass-ng,

tree-number (cdr (tree))),

0,

delete-module (tv-dec-pass-name (tree,

make-g),

netlist)) endif

Theorem: tv-dec-pass-ng-lemma-crock (tv-dec-pass-ng& (delete-module (index ('tv-dec-pass-g, tree-number (tree)),

netlist),

car (tree), make-g)

→ (collect-value (indices ('z, 0, n), bindings)

= append (collect-value (firstn (tree-size (car (tree)),

indices ('z, 0, n)), bindings), collect-value (restn (tree-size (car (tree)),

indices ('z, 0, n)), bindings))))

∧ (tv-dec-pass-ng& (delete-module (index ('tv-dec-pass-ng,

tree-number (tree)), netlist),

car (tree), make-g) → (collect-value (indices ('z, 0, n), bindings)

= append (collect-value (firstn (tree-size (car (tree)),

indices ('z, 0, n)), bindings), collect-value (restn (tree-size (car (tree)),

indices ('z, 0, n)), bindings))))

Event: Enable tv-dec-pass-ng-lemma-crock; name this event ‘tv-dec-pass-ng-lemma-crock-off’.

Theorem: tv-dec-pass-ng$value (tv-dec-pass-ng& (netlist, tree, make-g) ∧ (length (a) = tree-size (tree)) ∧ properp (a) ∧ boolp (make-g) ∧ (name = tv-dec-pass-name (tree, make-g))) → (dual-eval (0, name, cons (c, a), state, netlist)

= f$tv-dec-pass-ng (c, a, tree, make-g))

Event: Enable tv-dec-pass-ng$value; name this event ‘tv-dec-pass-ng$value-off’.

Definition: tv-dec-pass-ng$netlist (tree, make-g) = if tree ≃ nil then list (tv-dec-pass-ng* (tree, make-g), dec-pass-cell*)

else cons (tv-dec-pass-ng* (tree, make-g), tv-dec-pass-ng$netlist (car (tree), t) ∪ tv-dec-pass-ng$netlist (cdr (tree), make-g)) endif

Theorem: check-tv-dec-pass-ng$netlist boolp (make-g) → tv-dec-pass-ng& (tv-dec-pass-ng$netlist ('(0 0 . 0), make-g),

                   '(0 0 . 0),

make-g)

Definition: dec-pass* (n) = cons (index ('dec-pass, n),

cons (cons ('c, indices ('a, 0, n)), cons (indices ('z, 0, n),

                  cons (list ('(m0 (cn) b-not (c)),

list ('m1, indices ('z, 0, n),

                             index ('tv-dec-pass-ng,

tree-number (make-tree (n))), cons ('cn, indices ('a, 0, n)))),

                      '(nil)))))

Theorem: dec-pass*$destructure (car (dec-pass* (n)) = index ('dec-pass, n)) ∧ (cadr (dec-pass* (n)) = cons ('c, indices ('a, 0, n))) ∧ (caddr (dec-pass* (n)) = indices ('z, 0, n)) ∧ (cadddr (dec-pass* (n))

     = list ('(m0 (cn) b-not (c)),

list ('m1, indices ('z, 0, n),

                index ('tv-dec-pass-ng,

tree-number (make-tree (n))), cons ('cn, indices ('a, 0, n)))))

∧ (caddddr (dec-pass* (n)) = nil)

Event: Enable dec-pass*; name this event ‘dec-pass*-off’.

Event: Enable dec-pass*$destructure; name this event ‘dec-pass*$destructure-off’.

Definition: dec-pass& (netlist, n) = ((lookup-module (index ('dec-pass, n), netlist) = dec-pass* (n))

∧ b-not& (delete-module (index ('dec-pass, n), netlist))

∧ tv-dec-pass-ng& (delete-module (index ('dec-pass, n), netlist), make-tree (n), f))

Event: Enable dec-pass&; name this event ‘dec-pass&-off’.

Definition: f$dec-pass (c, a) = f$tv-dec-pass-ng (f-not (c), a, make-tree (length (a)), f)

Event: Enable f$dec-pass; name this event ‘f$dec-pass-off’.

Theorem: properp-length-f$dec-pass properp (f$dec-pass (c, v)) ∧ ((length (v) ≠ 0) → (length (f$dec-pass (c, v)) = length (v)))

Theorem: f$dec-pass=dec-or-pass (bvp (v) ∧ boolp (dec) ∧ (length (v) ≠ 0)) → (f$dec-pass (dec, v) = if* (dec, v-dec (v), v))

Theorem: dec-pass$value (dec-pass& (netlist, n) ∧ (n ≄ 0) ∧ (length (a) = n) ∧ properp (a)) → (dual-eval (0, index ('dec-pass, n), cons (c, a), state, netlist)

= f$dec-pass (c, a))

Event: Enable dec-pass$value; name this event ‘dec-pass$value-off’.

Definition: dec-pass$netlist (n) = cons (dec-pass* (n),

b-not$netlist ∪ tv-dec-pass-ng$netlist (make-tree (n), f))

Theorem: check-dec-pass$netlist dec-pass& (dec-pass$netlist (7), 7)

Definition: reg-body (m, n, ti, te) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('q, m), index ('qb, m)),

                'fd1s,

list (index ('d, m), 'clk, ti, te)), reg-body (1 + m, n − 1, index ('q, m), te)) endif

Event: Enable reg-body; name this event ‘reg-body-off’.

Definition: reg* (n) = list (index ('reg, n),

cons ('clk, cons ('te, cons ('ti, indices ('d, 0, n)))), indices ('q, 0, n), cons (cons ('te-buffer,

                 cons ('(te-buf),

cons (if n < 8 then 'b-buf

                          else 'b-buf-pwr endif,
                          '((te))))),
            cons ('(ti-del (ti-buf) del4 (ti)),

reg-body (0, n, 'ti-buf, 'te-buf))),

indices ('g, 0, n))

Theorem: reg*$destructure (car (reg* (n)) = index ('reg, n)) ∧ (cadr (reg* (n)) = cons ('clk, cons ('te, cons ('ti, indices ('d, 0, n))))) ∧ (caddr (reg* (n)) = indices ('q, 0, n)) ∧ (cadddr (reg* (n))

= cons (cons ('te-buffer,

                  cons ('(te-buf),

cons (if n < 8 then 'b-buf

                           else 'b-buf-pwr endif,
                           '((te))))),
             cons ('(ti-del (ti-buf) del4 (ti)),

reg-body (0, n, 'ti-buf, 'te-buf))))

∧ (caddddr (reg* (n)) = indices ('g, 0, n))

Event: Enable reg*; name this event ‘reg*-off’.

Event: Enable reg*$destructure; name this event ‘reg*$destructure-off’.

Definition: reg& (netlist, n) = ((lookup-module (index ('reg, n), netlist) = reg* (n))

∧ if n < 8 then b-buf& (delete-module (index ('reg, n), netlist)) else b-buf-pwr& (delete-module (index ('reg, n), netlist)) endif

∧ del4& (delete-module (index ('reg, n), netlist)) ∧ fd1s& (delete-module (index ('reg, n), netlist)))

Event: Enable reg&; name this event ‘reg&-off’.

Definition: reg$netlist (n) = cons (reg* (n),

if n < 8 then b-buf$netlist else b-buf-pwr$netlist endif ∪ (del4$netlist ∪ fd1s$netlist))

Theorem: reg-body$unbound-in-body unbound-in-body ('clk, reg-body (m, n, ti, te)) ∧ unbound-in-body ('ti, reg-body (m, n, ti, te)) ∧ unbound-in-body ('ti-del, reg-body (m, n, ti, te)) ∧ unbound-in-body ('te, reg-body (m, n, ti, te)) ∧ unbound-in-body ('te-buf, reg-body (m, n, ti, te)) ∧ unbound-in-body (index ('d, l), reg-body (m, n, ti, te)) ∧ ((l < m) → unbound-in-body (index ('q, l), reg-body (m, n, ti, te)))

Event: Enable reg-body$unbound-in-body; name this event ‘reg-body$unbound-in-body-off’.

Theorem: reg-body$all-unbound-in-body all-unbound-in-body (indices ('d, x, y), reg-body (m, n, ti, te))

Event: Enable reg-body$all-unbound-in-body; name this event ‘reg-body$all-unbound-in-body-off’.

Definition: reg-body-induction (m, n, ti, te, bindings, state-bindings, netlist) = if n ≃ 0 then t

else reg-body-induction (1 + m, n − 1, index ('q, m), te, dual-eval-body-bindings (1,

reg-body (m, n, ti, te),

bindings,

state-bindings, netlist),

state-bindings, netlist) endif

Theorem: reg-body$value fd1s& (netlist)

→ (collect-value (indices ('q, m, n),

dual-eval (1, reg-body (m, n, ti, te), bindings, state-bindings, netlist))

= v-threefix (collect-value (indices ('g, m, n), state-bindings)))

Theorem: reg$value (reg& (netlist, n) ∧ (length (state) = n) ∧ properp (state)) → (dual-eval (0, index ('reg, n), inputs, state, netlist)

= v-threefix (state))

Event: Enable reg$value; name this event ‘reg$value-off’.

Theorem: reg-body$state (fd1s& (netlist) ∧ (¬ value (te, bindings))) → (collect-value (indices ('g, m, n),

dual-eval (3, reg-body (m, n, ti, te), bindings, state-bindings, netlist))

= v-threefix (collect-value (indices ('d, m, n), bindings)))

Theorem: reg$state (reg& (netlist, n) ∧ (length (d) = n) ∧ properp (d) ∧ (¬ te)) → (dual-eval (2,

index ('reg, n), cons (clk, cons (te, cons (ti, d))), state, netlist)

= v-threefix (d))

Event: Enable reg$state; name this event ‘reg$state-off’.

Definition: we-reg-body (m, n, ti) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('q, m), index ('qb, m)),

'fd1slp,

cons (index ('d, m), cons ('clk,

cons ('we-buf, cons (ti, '(te-buf)))))),

we-reg-body (1 + m, n − 1, index ('q, m))) endif

Event: Enable we-reg-body; name this event ‘we-reg-body-off’.

Definition: we-reg* (n) = list (index ('we-reg, n),

cons ('clk, cons ('we, cons ('te, cons ('ti, indices ('d, 0, n))))), indices ('q, 0, n), cons (cons ('we-buffer,

                 cons ('(we-buf),

cons (if n < 8 then 'b-buf

                          else 'b-buf-pwr endif,
                          '((we))))),

cons (cons ('te-buffer,

                     cons ('(te-buf),

cons (if n < 8 then 'b-buf

                               else 'b-buf-pwr endif,
                               '((te))))),
                 cons ('(ti-del (ti-buf) del4 (ti)),

we-reg-body (0, n, 'ti-buf)))),

indices ('g, 0, n))

Theorem: we-reg*$destructure (car (we-reg* (n)) = index ('we-reg, n)) ∧ (cadr (we-reg* (n))

= cons ('clk, cons ('we, cons ('te, cons ('ti, indices ('d, 0, n)))))) ∧ (caddr (we-reg* (n)) = indices ('q, 0, n)) ∧ (cadddr (we-reg* (n))

= cons (cons ('we-buffer,

                  cons ('(we-buf),

cons (if n < 8 then 'b-buf

                           else 'b-buf-pwr endif,
                           '((we))))),

cons (cons ('te-buffer,

                      cons ('(te-buf),

cons (if n < 8 then 'b-buf

                                else 'b-buf-pwr endif,
                                '((te))))),
                  cons ('(ti-del (ti-buf) del4 (ti)),

we-reg-body (0, n, 'ti-buf)))))

∧ (caddddr (we-reg* (n)) = indices ('g, 0, n))

Event: Enable we-reg*; name this event ‘we-reg*-off’.

Event: Enable we-reg*$destructure; name this event ‘we-reg*$destructure-off’.

Definition: we-reg& (netlist, n) = ((lookup-module (index ('we-reg, n), netlist) = we-reg* (n))

∧ if n < 8 then b-buf& (delete-module (index ('we-reg, n), netlist)) else b-buf-pwr& (delete-module (index ('we-reg, n),

netlist)) endif

∧ del4& (delete-module (index ('we-reg, n), netlist)) ∧ fd1slp& (delete-module (index ('we-reg, n), netlist)))

Event: Enable we-reg&; name this event ‘we-reg&-off’.

Definition: we-reg$netlist (n) = cons (we-reg* (n),

if n < 8 then b-buf$netlist else b-buf-pwr$netlist endif ∪ (del4$netlist ∪ fd1slp$netlist))

Theorem: we-reg-body$unbound-in-body unbound-in-body ('clk, we-reg-body (m, n, ti)) ∧ unbound-in-body ('we, we-reg-body (m, n, ti)) ∧ unbound-in-body ('we-buf, we-reg-body (m, n, ti)) ∧ unbound-in-body ('ti, we-reg-body (m, n, ti)) ∧ unbound-in-body ('ti-buf, we-reg-body (m, n, ti)) ∧ unbound-in-body ('te, we-reg-body (m, n, ti)) ∧ unbound-in-body ('te-buf, we-reg-body (m, n, ti)) ∧ unbound-in-body (index ('d, l), we-reg-body (m, n, ti)) ∧ ((l < m) → unbound-in-body (index ('q, l), we-reg-body (m, n, ti)))

Event: Enable we-reg-body$unbound-in-body; name this event ‘we-reg-body$unbound-in-body-off’.

Theorem: we-reg-body$all-unbound-in-body all-unbound-in-body (indices ('d, x, y), we-reg-body (m, n, ti))

Event: Enable we-reg-body$all-unbound-in-body; name this event ‘we-reg-body$all-unbound-in-body-off’.

Definition: we-reg-body-induction (m, n, ti, bindings, state-bindings, netlist)

= if n ≃ 0 then t

else we-reg-body-induction (1 + m, n − 1, index ('q, m), dual-eval-body-bindings (1,

we-reg-body (m, n, ti),

bindings,

state-bindings, netlist),

state-bindings,

netlist) endif

Theorem: we-reg-body$value fd1slp& (netlist) → (collect-value (indices ('q, m, n),

dual-eval (1, we-reg-body (m, n, ti), bindings, state-bindings, netlist))

= v-threefix (collect-value (indices ('g, m, n), state-bindings)))

Event: Enable we-reg-body$value; name this event ‘we-reg-body$value-off’.

Theorem: we-reg$value (we-reg& (netlist, n) ∧ (length (state) = n) ∧ properp (state)) → (dual-eval (0, index ('we-reg, n), inputs, state, netlist)

= v-threefix (state))

Event: Enable we-reg$value; name this event ‘we-reg$value-off’.

Theorem: we-reg-body$state (fd1slp& (netlist) ∧ (¬ value ('te-buf, bindings))) → (collect-value (indices ('g, m, n),

dual-eval (3, we-reg-body (m, n, ti), bindings, state-bindings, netlist))

= fv-if (value ('we-buf, bindings), collect-value (indices ('d, m, n), bindings), collect-value (indices ('g, m, n), state-bindings)))

Event: Enable we-reg-body$state; name this event ‘we-reg-body$state-off’.

Theorem: we-reg$state (we-reg& (netlist, n) ∧ (length (d) = n) ∧ properp (d) ∧ (length (state) = n) ∧ properp (state) ∧ (¬ te)) → (dual-eval (2,

index ('we-reg, n),

cons (clk, cons (we, cons (te, cons (ti, d)))), state, netlist) = fv-if (we, d, state))

Event: Enable we-reg$state; name this event ‘we-reg$state-off’.

Definition: cvzbv (carry, overflow, vector) = cons (carry, cons (overflow, cons (v-zerop (vector), vector)))

Definition: c (cvzbv) = car (cvzbv)

Definition: v (cvzbv) = cadr (cvzbv)

Definition: bv (cvzbv) = cdddr (cvzbv)

Definition: n (cvzbv) = v-negp (bv (cvzbv))

Definition: zb (cvzbv) = caddr (cvzbv)

Event: Enable c; name this event ‘c-off’.

Event: Enable v; name this event ‘v-off’.

Event: Enable n; name this event ‘n-off’.

Event: Enable zb; name this event ‘zb-off’.

Event: Enable bv; name this event ‘bv-off’.

Theorem: boolp-n bvp (bv (v)) → boolp (n (v))

Theorem: boolp-bvp-cvzbv (boolp (c (cvzbv (c, v, bv))) = boolp (c)) ∧ (boolp (v (cvzbv (c, v, bv))) = boolp (v)) ∧ boolp (zb (cvzbv (c, v, bv))) ∧ (bvp (bv (cvzbv (c, v, bv))) = bvp (bv))

Theorem: bvp-cvzbv (boolp (c (cvzbv)) ∧ boolp (v (cvzbv)) ∧ boolp (zb (cvzbv)) ∧ bvp (bv (cvzbv))) → bvp (cvzbv)

Definition: cvzbv-v-ror (c, a) = cvzbv (if a ≃ nil then c

else nth (0, a) endif,

f,

v-ror (a, c))

Definition: cvzbv-v-adder (c, a, b) = cvzbv (v-adder-carry-out (c, a, b),

v-adder-overflowp (c, a, b), v-adder-output (c, a, b))

Definition: cvzbv-v-lsl (a) = cvzbv-v-adder (f, a, a)

Definition: cvzbv-v-subtracter (c, a, b) = cvzbv (v-subtracter-carry-out (c, a, b),

v-subtracter-overflowp (c, a, b), v-subtracter-output (c, a, b))

Definition: cvzbv-inc (a) = cvzbv-v-adder (t, a, nat-to-v (0, length (a)))

Definition: cvzbv-neg (a) = cvzbv-v-subtracter (f, a, nat-to-v (0, length (a)))

Definition: cvzbv-dec (a) = cvzbv-v-subtracter (t, nat-to-v (0, length (a)), a)

Definition: cvzbv-v-not (a) = cvzbv (f, f, v-not (a))

Definition: cvzbv-v-asr (a) = cvzbv (if listp (a) then nth (0, a)

else f endif, f, v-asr (a))

Definition: cvzbv-v-lsr (a) = cvzbv (if listp (a) then nth (0, a)

else f endif, f, v-lsr (a))

Definition: v-alu (c, a, b, op) = if op = list (f, f, f, f) then cvzbv (f, f, v-buf (a))

elseif op = list (t, f, f, f) then cvzbv-inc (a) elseif op = list (f, t, f, f) then cvzbv-v-adder (c, a, b) elseif op = list (t, t, f, f) then cvzbv-v-adder (f, a, b) elseif op = list (f, f, t, f) then cvzbv-neg (a) elseif op = list (t, f, t, f) then cvzbv-dec (a) elseif op = list (f, t, t, f) then cvzbv-v-subtracter (c, a, b) elseif op = list (t, t, t, f) then cvzbv-v-subtracter (f, a, b) elseif op = list (f, f, f, t) then cvzbv-v-ror (c, a) elseif op = list (t, f, f, t) then cvzbv-v-asr (a) elseif op = list (f, t, f, t) then cvzbv-v-lsr (a) elseif op = list (t, t, f, t) then cvzbv (f, f, v-xor (a, b)) elseif op = list (f, f, t, t) then cvzbv (f, f, v-or (a, b)) elseif op = list (t, f, t, t) then cvzbv (f, f, v-and (a, b)) elseif op = list (f, t, t, t) then cvzbv-v-not (a) else cvzbv (f, f, v-buf (a)) endif

Event: Enable v-alu; name this event ‘v-alu-off’.

Theorem: boolp-c-v-alu (boolp (c) ∧ bvp (a) ∧ (length (a) ≠ 0)) → boolp (c (v-alu (c, a, b, op)))

Theorem: boolp-v-v-alu (boolp (c) ∧ bvp (a) ∧ (length (a) ≠ 0)) → boolp (v (v-alu (c, a, b, op)))

Theorem: boolp-zb-v-alu boolp (zb (v-alu (c, a, b, op)))

Theorem: bvp-bv-v-alu bvp (a) → bvp (bv (v-alu (c, a, b, op)))

Theorem: bvp-v-alu (bvp (a) ∧ boolp (c) ∧ (length (a) ≠ 0)) → bvp (v-alu (c, a, b, op))

Theorem: length-cvzbv-subtracter length (cvzbv-v-subtracter (c, a, b)) = (1 + (1 + (1 + length (a))))

Theorem: length-cvzbv-adder length (cvzbv-v-adder (c, a, b)) = (1 + (1 + (1 + length (a))))

Theorem: length-v-alu length (v-alu (c, a, b, op)) = (1 + (1 + (1 + length (a))))

Theorem: bvp-length-bv (length (bv (x)) = (length (x) − 3)) ∧ ((bvp (x)

∧ if length (x) < 3 then f

else t endif) → bvp (bv (x)))

Definition: unary-op-code-p (op-code) = ((op-code = list (f, f, f, f))

∨ (op-code = list (t, f, f, f)) ∨ (op-code = list (f, f, t, f)) ∨ (op-code = list (t, f, t, f)) ∨ (op-code = list (f, f, f, t)) ∨ (op-code = list (t, f, f, t)) ∨ (op-code = list (f, t, f, t)) ∨ (op-code = list (f, t, t, t)) ∨ (op-code = list (t, t, t, t)))

Event: Enable unary-op-code-p; name this event ‘unary-op-code-p-off’.

Definition: v-alu-1 (c, a, op-code) = v-alu (c, a, a, op-code)

Event: Enable v-alu-1; name this event ‘v-alu-1-off’.

Theorem: bvp-v-alu-1 (bvp (a) ∧ boolp (c) ∧ (length (a) ≠ 0)) → bvp (v-alu-1 (c, a, op))

Theorem: length-v-alu-1 length (v-alu-1 (c, a, op)) = (1 + (1 + (1 + length (a))))

Theorem: unary-op-code-p->v-alu=v-alu-1 unary-op-code-p (op-code) → (v-alu (c, a, b, op-code) = v-alu-1 (c, a, op-code))

Event: Enable unary-op-code-p->v-alu=v-alu-1; name this event ‘unary-op-code-p->v-alu=v-alu-1-off’.

Definition: alu-inc-op = list (t, f, f, f)

Event: Enable alu-inc-op; name this event ‘alu-inc-op-off’.

Event: Enable *1*alu-inc-op; name this event ‘g*1*alu-inc-op-off’.

Theorem: bvp-length-alu-inc-op (length (alu-inc-op) = 4) ∧ bvp (alu-inc-op)

Definition: alu-dec-op = list (t, f, t, f)

Event: Enable alu-dec-op; name this event ‘alu-dec-op-off’.

Event: Enable *1*alu-dec-op; name this event ‘g*1*alu-dec-op-off’.

Theorem: bvp-length-alu-dec-op (length (alu-dec-op) = 4) ∧ bvp (alu-dec-op)

Theorem: bv-v-alu-alu-inc-alu-dec (bv (v-alu (c, a, b, alu-inc-op)) = v-inc (a)) ∧ (bv (v-alu (c, a, b, alu-dec-op)) = v-dec (a))

Definition: decode-mode (op0 , op1 , op2 , op3 ) = b-nor (b-nor3 (op0 , op1 , op2 ), op3 )

Definition: f$decode-mode (op0 , op1 , op2 , op3 ) = f-nor (f-nor3 (op0 , op1 , op2 ), op3 )

Event: Enable f$decode-mode; name this event ‘f$decode-mode-off’.

Definition: decode-mode*

= '(decode-mode
      (op0 op1 op2 op3)
      (w-1)
      ((g-0 (w-0) b-nor3 (op0 op1 op2))
       (g-1 (w-1) b-nor (w-0 op3)))
      nil)

Definition: decode-mode& (netlist) = ((lookup-module ('decode-mode, netlist) = decode-mode*)

∧ b-nor3& (delete-module ('decode-mode, netlist)) ∧ b-nor& (delete-module ('decode-mode, netlist)))

Event: Enable decode-mode&; name this event ‘decode-mode&-off’.

Definition: decode-mode$netlist = cons (decode-mode*, b-nor3$netlist ∪ b-nor$netlist)

Theorem: decode-mode$value decode-mode& (netlist) → (dual-eval (0, 'decode-mode, list (op0 , op1 , op2 , op3 ), state, netlist)

= list (f$decode-mode (op0 , op1 , op2 , op3 )))

Event: Enable decode-mode$value; name this event ‘decode-mode$value-off’.

Theorem: f$decode-mode=decode-mode (boolp (op0 ) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 )) → (f$decode-mode (op0 , op1 , op2 , op3 ) = decode-mode (op0 , op1 , op2 , op3 ))

Theorem: decode-mode$value-zero decode-mode& (netlist) → (dual-eval (0, 'decode-mode, alu-inc-op, state, netlist) = list (t))

Event: Enable decode-mode$value-zero; name this event ‘decode-mode$value-zero-off’.

Definition: decode-prop (zero, swap, op0 , op1 , op2 , op3 ) = list (b-nand3 (b-nand4 (b-not (op0 ),

b-not (op1 ),

b-not (b-not (op2 )), b-not (b-not (op3 ))), b-nand (b-not (b-not (op1 )), b-not (op3 )), b-nand3 (b-not (op2 ), b-not (op3 ), b-not (b-not (swap)))),

b-nor (b-not (op2 ),

b-nor (b-not (op3 ), b-nor (b-not (b-not (op0 )), b-not (op1 )))), b-and (b-nand3 (b-nand (b-not (b-not (op3 )),

b-equv (b-not (b-not (op0 )), b-not (b-not (op1 )))), b-nand (b-not (op2 ),

b-nand (b-not (b-not (swap)), b-not (op3 ))), b-nand4 (b-not (b-not (op0 )), b-not (op1 ), b-not (b-not (op2 )), b-not (op3 ))),

b-not (zero)))

Definition: f$decode-prop (zero, swap, op0 , op1 , op2 , op3 ) = list (f-nand3 (f-nand4 (f-not (op0 ),

f-not (op1 ),

f-not (f-not (op2 )), f-not (f-not (op3 ))), f-nand (f-not (f-not (op1 )), f-not (op3 )), f-nand3 (f-not (op2 ), f-not (op3 ), f-not (f-not (swap)))),

f-nor (f-not (op2 ),

f-nor (f-not (op3 ), f-nor (f-not (f-not (op0 )), f-not (op1 )))), f-and (f-nand3 (f-nand (f-not (f-not (op3 )),

f-equv (f-not (f-not (op0 )), f-not (f-not (op1 )))), f-nand (f-not (op2 ),

f-nand (f-not (f-not (swap)), f-not (op3 ))), f-nand4 (f-not (f-not (op0 )), f-not (op1 ), f-not (f-not (op2 )), f-not (op3 ))),

f-not (zero)))

Event: Enable f$decode-prop; name this event ‘f$decode-prop-off’.

Definition: decode-prop*

= '(decode-prop
(zero swap op0 op1 op2 op3)
(w-16 w-24 w-48)
((g-47 (w-47) b-not (zero))
(g-44 (w-44) b-not (op3))
(g-42 (w-42) b-not (op2))
(g-43 (w-43) b-not (w-42))
(g-41 (w-41) b-not (op1))
(g-39 (w-39) b-not (op0))
(g-40 (w-40) b-not (w-39))
(g-45 (w-45) b-nand4 (w-40 w-41 w-43 w-44))
(g-34 (w-34) b-not (swap))
(g-35 (w-35) b-not (w-34))
(g-37 (w-37) b-nand (w-35 w-44))

(g-38 (w-38) b-nand (w-42 w-37))
(g-30 (w-30) b-not (w-41))
(g-31 (w-31) b-equv (w-40 w-30))
(g-26 (w-26) b-not (w-44))
(g-32 (w-32) b-nand (w-26 w-31))
(g-46 (w-46) b-nand3 (w-32 w-38 w-45))
(g-48 (w-48) b-and (w-46 w-47))
(g-22 (w-22) b-nor (w-40 w-41))
(g-23 (w-23) b-nor (w-44 w-22))
(g-24 (w-24) b-nor (w-42 w-23))
(g-15 (w-15) b-nand3 (w-42 w-44 w-35))
(g-10 (w-10) b-nand (w-30 w-44))
(g-6 (w-6) b-nand4 (w-39 w-41 w-43 w-26))
(g-16 (w-16) b-nand3 (w-6 w-10 w-15)))
nil)

Definition: decode-prop& (netlist) = ((lookup-module ('decode-prop, netlist) = decode-prop*)

∧ b-equv& (delete-module ('decode-prop, netlist)) ∧ b-not& (delete-module ('decode-prop, netlist)) ∧ b-and& (delete-module ('decode-prop, netlist)) ∧ b-nor& (delete-module ('decode-prop, netlist)) ∧ b-nand& (delete-module ('decode-prop, netlist)) ∧ b-nand4& (delete-module ('decode-prop, netlist)) ∧ b-nand3& (delete-module ('decode-prop, netlist)))

Event: Enable decode-prop&; name this event ‘decode-prop&-off’.

Definition: decode-prop$netlist = cons (decode-prop*,

(((((b-equv$netlist ∪ b-not$netlist) ∪ b-and$netlist) ∪ b-nor$netlist) ∪ b-nand$netlist) ∪ b-nand4$netlist) ∪ b-nand3$netlist)

Theorem: decode-prop$value decode-prop& (netlist) → (dual-eval (0,

       'decode-prop,

list (zero, swap, op0 , op1 , op2 , op3 ), state,

netlist)

= f$decode-prop (zero, swap, op0 , op1 , op2 , op3 ))

Event: Enable decode-prop$value; name this event ‘decode-prop$value-off’.

Theorem: f$decode-prop=decode-prop (boolp (zero) ∧ boolp (swap) ∧ boolp (op0 ) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 )) → (f$decode-prop (zero, swap, op0 , op1 , op2 , op3 )

= decode-prop (zero, swap, op0 , op1 , op2 , op3 ))

Theorem: decode-prop$value-zero decode-prop& (netlist) → (dual-eval (0,

              'decode-prop,

cons (t, cons (f, alu-inc-op)), state, netlist)

= list (f, f, f))

Event: Enable decode-prop$value-zero; name this event ‘decode-prop$value-zero-off’.

Definition: decode-gen (zero, swap, op0 , op1 , op2 , op3 ) = list (b-nand3 (b-nand3 (b-not (b-not (op0 )),

b-not (b-not (op3 )),

b-xor (b-not (b-not (op1 )), b-not (b-not (op2 )))),

b-nand3 (b-not (b-not (op2 )), b-not (op3 ), b-nand (b-not (op1 ), b-not (swap))), b-nand3 (b-not (b-not (op1 )), b-not (op2 ), b-not (op3 ))),

b-nor (b-nand (b-nand4 (b-not (b-not (op0 )), b-not (b-not (op1 )), b-not (op2 ), b-not (b-not (op3 ))),

b-nand3 (b-not (b-not (op2 )), b-not (op3 ), b-nand (b-not (op1 ), b-not (swap)))),

b-not (b-not (zero))), b-nor (b-nand3 (b-nand3 (b-not (b-not (op0 )),

b-not (b-not (op3 )),

b-xor (b-not (b-not (op1 )), b-not (b-not (op2 )))),

b-nand3 (b-not (b-not (op0 )), b-not (op1 ), b-not (b-not (op2 ))),

b-nand3 (b-not (b-not (op1 )), b-not (op2 ), b-not (op3 ))),

b-not (b-not (zero))))

Definition: f$decode-gen (zero, swap, op0 , op1 , op2 , op3 ) = list (f-nand3 (f-nand3 (f-not (f-not (op0 )),

f-not (f-not (op3 )),

f-xor (f-not (f-not (op1 )), f-not (f-not (op2 )))), f-nand3 (f-not (f-not (op2 )), f-not (op3 ), f-nand (f-not (op1 ), f-not (swap))), f-nand3 (f-not (f-not (op1 )), f-not (op2 ), f-not (op3 ))),

f-nor (f-nand (f-nand4 (f-not (f-not (op0 )), f-not (f-not (op1 )), f-not (op2 ), f-not (f-not (op3 ))),

f-nand3 (f-not (f-not (op2 )), f-not (op3 ), f-nand (f-not (op1 ), f-not (swap)))),

f-not (f-not (zero))), f-nor (f-nand3 (f-nand3 (f-not (f-not (op0 )),

f-not (f-not (op3 )),

f-xor (f-not (f-not (op1 )), f-not (f-not (op2 )))), f-nand3 (f-not (f-not (op0 )), f-not (op1 ), f-not (f-not (op2 ))),

f-nand3 (f-not (f-not (op1 )), f-not (op2 ), f-not (op3 ))), f-not (f-not (zero))))

Event: Enable f$decode-gen; name this event ‘f$decode-gen-off’.

Definition: decode-gen*

= '(decode-gen
      (zero swap op0 op1 op2 op3)
      (w-22 w-41 w-66)
      ((g-64 (w-64) b-not (zero))
       (g-65 (w-65) b-not (w-64))

(g-61 (w-61) b-not (op3))
(g-60 (w-60) b-not (op2))
(g-58 (w-58) b-not (op1))
(g-59 (w-59) b-not (w-58))
(g-62 (w-62) b-nand3 (w-59 w-60 w-61))
(g-56 (w-56) b-not (w-60))
(g-52 (w-52) b-not (op0))
(g-53 (w-53) b-not (w-52))
(g-57 (w-57) b-nand3 (w-53 w-58 w-56))
(g-50 (w-50) b-xor (w-59 w-56))
(g-45 (w-45) b-not (w-61))
(g-51 (w-51) b-nand3 (w-53 w-45 w-50))
(g-63 (w-63) b-nand3 (w-51 w-57 w-62))
(g-66 (w-66) b-nor (w-63 w-65))
(g-35 (w-35) b-not (swap))
(g-36 (w-36) b-nand (w-58 w-35))
(g-37 (w-37) b-nand3 (w-56 w-61 w-36))
(g-30 (w-30) b-nand4 (w-53 w-59 w-60 w-45))
(g-38 (w-38) b-nand (w-30 w-37))
(g-41 (w-41) b-nor (w-38 w-65))
(g-22 (w-22) b-nand3 (w-51 w-37 w-62)))
nil)

Definition: decode-gen& (netlist) = ((lookup-module ('decode-gen, netlist) = decode-gen*)

∧ b-xor& (delete-module ('decode-gen, netlist)) ∧ b-not& (delete-module ('decode-gen, netlist)) ∧ b-nand4& (delete-module ('decode-gen, netlist)) ∧ b-nand& (delete-module ('decode-gen, netlist)) ∧ b-nor& (delete-module ('decode-gen, netlist)) ∧ b-nand3& (delete-module ('decode-gen, netlist)))

Event: Enable decode-gen&; name this event ‘decode-gen&-off’.

Definition: decode-gen$netlist = cons (decode-gen*,

((((b-xor$netlist ∪ b-not$netlist) ∪ b-nand4$netlist) ∪ b-nand$netlist) ∪ b-nor$netlist) ∪ b-nand3$netlist)

Theorem: decode-gen$value decode-gen& (netlist) → (dual-eval (0,

              'decode-gen,

list (zero, swap, op0 , op1 , op2 , op3 ), state, netlist)

= f$decode-gen (zero, swap, op0 , op1 , op2 , op3 ))

Event: Enable decode-gen$value; name this event ‘decode-gen$value-off’.

Theorem: f$decode-gen=decode-gen (boolp (zero) ∧ boolp (swap) ∧ boolp (op0 ) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 )) → (f$decode-gen (zero, swap, op0 , op1 , op2 , op3 )

= decode-gen (zero, swap, op0 , op1 , op2 , op3 ))

Theorem: decode-gen$value-zero decode-gen& (netlist) → (dual-eval (0, 'decode-gen, cons (t, cons (f, alu-inc-op)), state, netlist)

= list (f, f, f))

Event: Enable decode-gen$value-zero; name this event ‘decode-gen$value-zero-off’.

Definition: f$mpg (zsop) = append (f$decode-gen (car (zsop),

cadr (zsop), caddr (zsop), cadddr (zsop), caddddr (zsop), cadddddr (zsop)),

append (f$decode-prop (car (zsop), cadr (zsop), caddr (zsop), cadddr (zsop), caddddr (zsop), cadddddr (zsop)),

list (f$decode-mode (caddr (zsop), cadddr (zsop), caddddr (zsop), cadddddr (zsop)))))

Event: Enable f$mpg; name this event ‘f$mpg-off’.

Definition: mpg (zsop) = append (decode-gen (car (zsop),

cadr (zsop), caddr (zsop), cadddr (zsop), caddddr (zsop), cadddddr (zsop)),

append (decode-prop (car (zsop), cadr (zsop), caddr (zsop), cadddr (zsop), caddddr (zsop), cadddddr (zsop)),

list (decode-mode (caddr (zsop), cadddr (zsop), caddddr (zsop), cadddddr (zsop)))))

Event: Enable mpg; name this event ‘mpg-off’.

Theorem: f$mpg=mpg (bvp (zsop) ∧ (length (zsop) = 6)) → (f$mpg (zsop) = mpg (zsop))

Theorem: properp-length-f$mpg properp (f$mpg (zsop)) ∧ (length (f$mpg (zsop)) = 7)

Theorem: length-mpg length (mpg (zsop)) = 7

Theorem: bvp-mpg bvp (mpg (zsop))

Theorem: properp-mpg properp (mpg (zsop))

Theorem: mpg-if-op-code mpg (cons (a,

cons (b, if c then d else e endif)))

= if c then mpg (cons (a, cons (b, d)))

else mpg (cons (a, cons (b, e))) endif

Theorem: mpg-zero mpg (cons (t, cons (f, alu-inc-op))) = list (f, f, f, f, f, f, t)

Event: Enable mpg-zero; name this event ‘mpg-zero-off’.

Definition: mpg*

= '(mpg
      (zero swap op0 op1 op2 op3)
      (gbn gan ga pb pan pa mode)
      ((m (mode) decode-mode (op0 op1 op2 op3))
       (p
        (pb pan pa)
        decode-prop
        (zero swap op0 op1 op2 op3))
       (g
        (gbn gan ga)
        decode-gen
        (zero swap op0 op1 op2 op3)))
      nil)

Definition: mpg& (netlist) = ((lookup-module ('mpg, netlist) = mpg*)

∧ decode-mode& (delete-module ('mpg, netlist)) ∧ decode-prop& (delete-module ('mpg, netlist)) ∧ decode-gen& (delete-module ('mpg, netlist)))

Event: Enable mpg&; name this event ‘mpg&-off’.

Definition: mpg$netlist = cons (mpg*,

(decode-mode$netlist ∪ decode-prop$netlist) ∪ decode-gen$netlist)

Theorem: mpg$value (mpg& (netlist) ∧ properp (zsop) ∧ (length (zsop) = 6)) → (dual-eval (0, 'mpg, zsop, state, netlist) = f$mpg (zsop))

Event: Enable mpg$value; name this event ‘mpg$value-off’.

Theorem: mpg$value-zero (mpg& (netlist) ∧ (zsop = cons (t, cons (f, alu-inc-op)))) → (dual-eval (0, 'mpg, zsop, state, netlist) = list (f, f, f, f, f, f, t))

Event: Enable mpg$value-zero; name this event ‘mpg$value-zero-off’.

Definition: carry-in-help (czop) = b-or (b-nand3 (b-nand3 (b-not (cadddr (czop)),

b-not (caddddr (czop)), b-not (cadddddr (czop))),

b-nand3 (b-not (caddr (czop)), b-not (cadddr (czop)), b-not (b-not (caddddr (czop)))),

b-nand3 (b-not (b-not (caddr (czop))), b-not (b-not (cadddr (czop))), b-not (b-not (caddddr (czop))))),

b-nand3 (b-nand (b-not (b-not (cadddddr (czop))),

b-not (b-not (car (czop)))), b-nand3 (b-not (caddr (czop)),

b-not (caddddr (czop)), b-not (b-not (car (czop)))),

b-nand3 (b-not (caddr (czop)), b-not (b-not (caddddr (czop))), b-not (car (czop)))))

Event: Enable carry-in-help; name this event ‘carry-in-help-off’.

Definition: f$carry-in-help (czop) = f-or (f-nand3 (f-nand3 (f-not (cadddr (czop)),

f-not (caddddr (czop)), f-not (cadddddr (czop))),

f-nand3 (f-not (caddr (czop)), f-not (cadddr (czop)), f-not (f-not (caddddr (czop)))),

f-nand3 (f-not (f-not (caddr (czop))), f-not (f-not (cadddr (czop))), f-not (f-not (caddddr (czop))))),

f-nand3 (f-nand (f-not (f-not (cadddddr (czop))), f-not (f-not (car (czop)))), f-nand3 (f-not (caddr (czop)),

f-not (caddddr (czop)), f-not (f-not (car (czop)))),

f-nand3 (f-not (caddr (czop)), f-not (f-not (caddddr (czop))), f-not (car (czop)))))

Event: Enable f$carry-in-help; name this event ‘f$carry-in-help-off’.

Theorem: f$carry-in-help=carry-in-help (bvp (czop) ∧ (length (czop) = 6)) → (f$carry-in-help (czop) = carry-in-help (czop))

Definition: carry-in-help*

= '(carry-in-help
(cin z op0in op1in op2in op3in)
(cout)
((g0 (c- c) b-nbuf (cin))
(g1 (op0- op0) b-nbuf (op0in))
(g2 (op1- op1) b-nbuf (op1in))
(g3 (op2- op2) b-nbuf (op2in))
(g4 (op3- op3) b-nbuf (op3in))
(g5 (s5) b-nand3 (op1- op2- op3-))
(g6 (s6) b-nand3 (op0- op1- op2))
(g7 (s7) b-nand3 (op0 op1 op2))
(g8 (s8) b-nand3 (s5 s6 s7))
(g9 (s9) b-nand (op3 c))
(g10 (s10) b-nand3 (op0- op2- c))
(g11 (s11) b-nand3 (op0- op2 c-))
(g12 (s12) b-nand3 (s9 s10 s11))
(g13 (cout) b-or (s8 s12)))
nil)

Definition: carry-in-help& (netlist) = ((lookup-module ('carry-in-help, netlist) = carry-in-help*)

∧ b-nbuf& (delete-module ('carry-in-help, netlist)) ∧ b-nand& (delete-module ('carry-in-help, netlist)) ∧ b-nand3& (delete-module ('carry-in-help, netlist)) ∧ b-or& (delete-module ('carry-in-help, netlist)))

Event: Enable carry-in-help&; name this event ‘carry-in-help&-off’.

Definition: carry-in-help$netlist = cons (carry-in-help*,

((b-nbuf$netlist ∪ b-nand$netlist) ∪ b-nand3$netlist) ∪ b-or$netlist)

Theorem: carry-in-help-zero carry-in-help (cons (c, cons (t, alu-inc-op))) = t

Event: Enable carry-in-help-zero; name this event ‘carry-in-help-zero-off’.

Theorem: carry-in-help-if-op-code carry-in-help (cons (a,

cons (b, if c then d else e endif)))

= if c then carry-in-help (cons (a, cons (b, d)))

else carry-in-help (cons (a, cons (b, e))) endif

Theorem: carry-in-help$value carry-in-help& (netlist) → (dual-eval (0, 'carry-in-help, czop, state, netlist)

= list (f$carry-in-help (czop)))

Event: Enable carry-in-help$value; name this event ‘carry-in-help$value-off’.

Theorem: carry-in-help$value-zero (carry-in-help& (netlist) ∧ (czop = cons (c, cons (t, alu-inc-op)))) → (dual-eval (0, 'carry-in-help, czop, state, netlist) = list (t))

Event: Enable carry-in-help$value-zero; name this event ‘carry-in-help$value-zero-off’.

Definition: p-cell (a, an, b, pa, pan, pb) = b-nand3 (b-nand (a, pa), b-nand (an, pan), b-nand (b, pb))

Definition: f$p-cell (a, an, b, pa, pan, pb) = f-nand3 (f-nand (a, pa), f-nand (an, pan), f-nand (b, pb))

Event: Enable f$p-cell; name this event ‘f$p-cell-off’.

Definition: p-cell*

= '(p-cell
      (a an b pa pan pb)
      (w-3)
      ((g-2 (w-2) b-nand (b pb))
       (g-1 (w-1) b-nand (an pan))
       (g-0 (w-0) b-nand (a pa))
       (g-3 (w-3) b-nand3 (w-0 w-1 w-2)))
      nil)

Definition: p-cell& (netlist) = ((lookup-module ('p-cell, netlist) = p-cell*)

∧ b-nand& (delete-module ('p-cell, netlist)) ∧ b-nand3& (delete-module ('p-cell, netlist)))

Event: Enable p-cell&; name this event ‘p-cell&-off’.

Definition: p-cell$netlist = cons (p-cell*, b-nand$netlist ∪ b-nand3$netlist)

Theorem: p-cell$value p-cell& (netlist) → (dual-eval (0, 'p-cell, list (a, an, b, pa, pan, pb), state, netlist)

= list (f$p-cell (a, an, b, pa, pan, pb)))

Event: Enable p-cell$value; name this event ‘p-cell$value-off’.

Theorem: f$p-cell=p-cell (boolp (a) ∧ boolp (an) ∧ boolp (b) ∧ boolp (pa) ∧ boolp (pan) ∧ boolp (pb)) → (f$p-cell (a, an, b, pa, pan, pb) = p-cell (a, an, b, pa, pan, pb))

Theorem: p-cell$value-zero p-cell& (netlist) → (dual-eval (0, 'p-cell, list (a, an, b, f, f, f), state, netlist) = list (f))

Definition: g-cell (a, an, bn, ga, gan, gbn) = b-and3 (b-nand (a, ga), b-nand (an, gan), b-nand (bn, gbn))

Definition: f$g-cell (a, an, bn, ga, gan, gbn) = f-and3 (f-nand (a, ga), f-nand (an, gan), f-nand (bn, gbn))

Event: Enable f$g-cell; name this event ‘f$g-cell-off’.

Definition: g-cell*

= '(g-cell
      (a an bn ga gan gbn)
      (w-3)
      ((g-2 (w-2) b-nand (bn gbn))
       (g-1 (w-1) b-nand (an gan))
       (g-0 (w-0) b-nand (a ga))
       (g-3 (w-3) b-and3 (w-0 w-1 w-2)))
      nil)

Definition: g-cell& (netlist) = ((lookup-module ('g-cell, netlist) = g-cell*)

∧ b-nand& (delete-module ('g-cell, netlist)) ∧ b-and3& (delete-module ('g-cell, netlist)))

Event: Enable g-cell&; name this event ‘g-cell&-off’.

Definition: g-cell$netlist = cons (g-cell*, b-nand$netlist ∪ b-and3$netlist)

Theorem: g-cell$value g-cell& (netlist) → (dual-eval (0, 'g-cell, list (a, an, bn, ga, gan, gbn), state, netlist)

= list (f$g-cell (a, an, bn, ga, gan, gbn)))

Event: Enable g-cell$value; name this event ‘g-cell$value-off’.

Theorem: f$g-cell=g-cell (boolp (a) ∧ boolp (an) ∧ boolp (bn) ∧ boolp (ga) ∧ boolp (gan) ∧ boolp (gbn)) → (f$g-cell (a, an, bn, ga, gan, gbn) = g-cell (a, an, bn, ga, gan, gbn))

Theorem: g-cell$value-zero g-cell& (netlist) → (dual-eval (0, 'g-cell, list (a, an, bn, f, f, f), state, netlist)

= list (t))

Definition: alu-cell (c, a, b, mpg) = list (p-cell (a, b-not (a), b, cadddddr (mpg), caddddr (mpg), cadddr (mpg)),

g-cell (a, b-not (a), b-not (b), caddr (mpg), cadr (mpg), car (mpg)), b-equv3 (b-nand (c, caddddddr (mpg)),

p-cell (a, b-not (a), b, cadddddr (mpg), caddddr (mpg), cadddr (mpg)),

g-cell (a, b-not (a), b-not (b), caddr (mpg), cadr (mpg), car (mpg))))

Definition: f$alu-cell (c, a, b, mpg) = list (f$p-cell (a, f-not (a), b, cadddddr (mpg), caddddr (mpg), cadddr (mpg)),

f$g-cell (a, f-not (a), f-not (b), caddr (mpg), cadr (mpg), car (mpg)), f-equv3 (f-nand (c, caddddddr (mpg)),

f$p-cell (a, f-not (a), b, cadddddr (mpg), caddddr (mpg), cadddr (mpg)),

f$g-cell (a, f-not (a), f-not (b), caddr (mpg), cadr (mpg), car (mpg))))

Event: Enable f$alu-cell; name this event ‘f$alu-cell-off’.

Theorem: f$alu-cell=alu-cell (boolp (c) ∧ boolp (a) ∧ boolp (b) ∧ bvp (mpg) ∧ (length (mpg) = 7)) → (f$alu-cell (c, a, b, mpg) = alu-cell (c, a, b, mpg))

Definition: alu-cell*

= '(alu-cell
      (c a b gbn gan ga pb pan pa m)
      (p g z)
      ((n0 (an) b-not (a))
       (n1 (bn) b-not (b))
       (p0 (p) p-cell (a an b pa pan pb))
       (g0 (g) g-cell (a an bn ga gan gbn))
       (m0 (mc) b-nand (c m))
       (z0 (z) b-equv3 (mc p g)))
      nil)

Definition: alu-cell& (netlist) = ((lookup-module ('alu-cell, netlist) = alu-cell*)

∧ b-not& (delete-module ('alu-cell, netlist)) ∧ p-cell& (delete-module ('alu-cell, netlist)) ∧ g-cell& (delete-module ('alu-cell, netlist)) ∧ b-nand& (delete-module ('alu-cell, netlist)) ∧ b-equv3& (delete-module ('alu-cell, netlist)))

Event: Enable alu-cell&; name this event ‘alu-cell&-off’.

Definition: alu-cell$netlist = cons (alu-cell*,

(((b-not$netlist ∪ p-cell$netlist) ∪ g-cell$netlist) ∪ b-nand$netlist) ∪ b-equv3$netlist)

Theorem: alu-cell$value alu-cell& (netlist) → (dual-eval (0, 'alu-cell, cons (c, cons (a, cons (b, mpg))), state, netlist)

= f$alu-cell (c, a, b, mpg))

Event: Enable alu-cell$value; name this event ‘alu-cell$value-off’.

Theorem: alu-cell$value-zero (alu-cell& (netlist) ∧ (mpg = list (f, f, f, f, f, f, t))) → (dual-eval (0, 'alu-cell, cons (t, cons (a, cons (b, mpg))), state, netlist)

= list (f, t, f))

Event: Enable alu-cell$value-zero; name this event ‘alu-cell$value-zero-off’.

Theorem: f$alu-cell-v-threefix-mpg (length (mpg) = 7) → (f$alu-cell (c, a, b, v-threefix (mpg)) = f$alu-cell (c, a, b, mpg))

Definition: tv-alu-help (c, a, b, mpg, tree) = if tree ≃ nil then alu-cell (c, car (a), car (b), mpg)

else cons (b-and (car (tv-alu-help (c, tfirstn (a, tree), tfirstn (b, tree), mpg, car (tree))),

car (tv-alu-help (t-carry (c,

car (tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree)))),

cons (t-carry (cadr (tv-alu-help (c, tfirstn (a, tree), tfirstn (b, tree), mpg, car (tree))),

car (tv-alu-help (t-carry (c,

car (tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (tv-alu-help (c, tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree))),

cadr (tv-alu-help (t-carry (c,

car (tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree)))),

append (cddr (tv-alu-help (c, tfirstn (a, tree), tfirstn (b, tree), mpg, car (tree))),

cddr (tv-alu-help (t-carry (c,

car (tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (tv-alu-help (c, tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree)))))) endif

Event: Enable tv-alu-help; name this event ‘tv-alu-help-off’.

Theorem: cddr-tv-alu-help-length length (cddr (tv-alu-help (c, a, b, mpg, tree))) = tree-size (tree)

Theorem: tv-alu-help-length length (tv-alu-help (c, a, b, mpg, tree)) = (1 + (1 + tree-size (tree)))

Theorem: bvp-cddr-tv-alu-help bvp (cddr (tv-alu-help (c, a, b, mpg, tree)))

Theorem: bvp-tv-alu-help bvp (tv-alu-help (c, a, b, mpg, tree))

Theorem: bvp-length-tv-alu-help bvp-length (tv-alu-help (c, a, b, mpg, tree), n) = if (1 + (1 + tree-size (tree))) < n then f

else t endif

Theorem: tv-alu-help-zero ((mpg = list (f, f, f, f, f, f, t)) ∧ (length (a) = tree-size (tree)) ∧ (c = t)) → (tv-alu-help (c, a, b, mpg, tree)

= cons (f, cons (t, make-list (length (a), f))))

Event: Enable tv-alu-help-zero; name this event ‘tv-alu-help-zero-off’.

Theorem: tv-alu-help-v-and-works (bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ (mpg = list (t, t, f, f, f, f, f))) → (cddr (tv-alu-help (c, a, b, mpg, tree)) = v-and (a, b))

Event: Enable tv-alu-help-v-and-works; name this event ‘tv-alu-help-v-and-works-off’.

Theorem: tv-alu-help-v-or-works ((mpg = list (f, t, t, t, f, t, f)) ∧ bv2p (a, b) ∧ (length (a) = tree-size (tree))) → (cddr (tv-alu-help (c, a, b, mpg, tree)) = v-or (a, b))

Event: Enable tv-alu-help-v-or-works; name this event ‘tv-alu-help-v-or-works-off’.

Theorem: tv-alu-help-v-xor-works ((mpg = list (t, f, f, f, f, t, f)) ∧ bv2p (a, b) ∧ (length (a) = tree-size (tree))) → (cddr (tv-alu-help (c, a, b, mpg, tree)) = v-xor (a, b))

Event: Enable tv-alu-help-v-xor-works; name this event ‘tv-alu-help-v-xor-works-off’.

Theorem: tv-alu-help-v-not-works ((mpg = list (f, t, t, f, t, f, f)) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (cddr (tv-alu-help (c, a, b, mpg, tree)) = v-not (a))

Event: Enable tv-alu-help-v-not-works; name this event ‘tv-alu-help-v-not-works-off’.

Theorem: tv-alu-help-v-buf-works ((mpg = list (f, t, t, f, f, t, f)) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (cddr (tv-alu-help (c, a, b, mpg, tree)) = v-buf (a))

Event: Enable tv-alu-help-v-buf-works; name this event ‘tv-alu-help-v-buf-works-off’.

Theorem: tv-alu-help-tv-adder-works ((mpg = list (t, t, f, t, f, t, t)) ∧ bvp (a)

∧ (length (a) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree) = tv-adder (c, a, b, tree))

Event: Enable tv-alu-help-tv-adder-works; name this event ‘tv-alu-help-tv-adder-works-off’.

Theorem: tv-alu-help-tv-subtracter-works ((mpg = list (t, f, t, t, t, f, t)) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree) = tv-adder (c, v-not (a), b, tree))

Event: Enable tv-alu-help-tv-subtracter-works; name this event ‘tv-alu-help-tv-subtracter-works-off’.

Theorem: tv-alu-help-tv-inc-a-works ((mpg = list (f, t, t, f, f, t, t)) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree)

= tv-adder (c, a, nat-to-v (0, length (a)), tree))

Event: Enable tv-alu-help-tv-inc-a-works; name this event ‘tv-alu-help-tv-inc-a-works-off’.

Theorem: tv-alu-help-tv-inc-b-works ((mpg = list (f, t, t, t, f, f, t)) ∧ bvp (b) ∧ (length (b) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree)

= tv-adder (c, b, nat-to-v (0, length (b)), tree))

Event: Enable tv-alu-help-tv-inc-b-works; name this event ‘tv-alu-help-tv-inc-b-works-off’.

Theorem: tv-alu-help-tv-dec-a-works ((mpg = list (f, t, f, f, t, t, t)) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree)

= tv-adder (c, v-not (nat-to-v (0, length (a))), a, tree))

Event: Enable tv-alu-help-tv-dec-a-works; name this event ‘tv-alu-help-tv-dec-a-works-off’.

Theorem: tv-alu-help-tv-dec-b-works ((mpg = list (t, f, f, f, t, t, t)) ∧ bvp (b) ∧ (length (b) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree)

= tv-adder (c, v-not (nat-to-v (0, length (b))), b, tree))

Event: Enable tv-alu-help-tv-dec-b-works; name this event ‘tv-alu-help-tv-dec-b-works-off’.

Theorem: tv-alu-help-tv-neg-works ((mpg = list (f, t, t, f, t, f, t)) ∧ bvp (a) ∧ (length (a) = tree-size (tree))) → (tv-alu-help (c, a, b, mpg, tree)

= tv-adder (c, v-not (a), nat-to-v (0, length (a)), tree))

Event: Enable tv-alu-help-tv-neg-works; name this event ‘tv-alu-help-tv-neg-works-off’.

Definition: f$tv-alu-help (c, a, b, mpg, tree) = if tree ≃ nil then f$alu-cell (c, car (a), car (b), mpg)

else cons (f-and (car (f$tv-alu-help (c, tfirstn (a, tree), tfirstn (b, tree), mpg, car (tree))),

car (f$tv-alu-help (f$t-carry (c,

car (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))), trestn (a, tree), trestn (b, tree), mpg, cdr (tree)))),

cons (f$t-carry (cadr (f$tv-alu-help (c, tfirstn (a, tree), tfirstn (b, tree), mpg, car (tree))),

car (f$tv-alu-help (f$t-carry (c,

car (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree))),

cadr (f$tv-alu-help (f$t-carry (c,

car (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree)))),

append (cddr (f$tv-alu-help (c, tfirstn (a, tree), tfirstn (b, tree), mpg, car (tree))),

cddr (f$tv-alu-help (f$t-carry (c,

car (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree))),

cadr (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), mpg, car (tree)))),

trestn (a, tree), trestn (b, tree), mpg, cdr (tree)))))) endif

Event: Enable f$tv-alu-help; name this event ‘f$tv-alu-help-off’.

Theorem: cddr-f$tv-alu-help-length length (cddr (f$tv-alu-help (c, a, b, mpg, tree))) = tree-size (tree)

Theorem: f$tv-alu-help-length length (f$tv-alu-help (c, a, b, mpg, tree)) = (1 + (1 + tree-size (tree)))

Theorem: properp-cddr-f$tv-alu-help properp (cddr (f$tv-alu-help (c, a, b, mpg, tree)))

Theorem: properp-f$tv-alu-help properp (f$tv-alu-help (c, a, b, mpg, tree))

Theorem: boolp-car-f$tv-alu-help (boolp (c)

∧ bvp (a) ∧ (length (a) = tree-size (tree)) ∧ bvp (b) ∧ (length (b) = tree-size (tree)) ∧ bvp (mpg) ∧ (length (mpg) = 7)) → (boolp (car (f$tv-alu-help (c, a, b, mpg, tree)))

∧ boolp (cadr (f$tv-alu-help (c, a, b, mpg, tree))))

Theorem: bvp-cddr-f$tv-alu-help (boolp (c) ∧ bvp (a) ∧ (length (a) = tree-size (tree)) ∧ bvp (b) ∧ (length (b) = tree-size (tree)) ∧ bvp (mpg) ∧ (length (mpg) = 7)) → bvp (cddr (f$tv-alu-help (c, a, b, mpg, tree)))

Theorem: bvp-f$tv-alu-help (boolp (c) ∧ bvp (a) ∧ (length (a) = tree-size (tree)) ∧ bvp (b) ∧ (length (b) = tree-size (tree)) ∧ bvp (mpg) ∧ (length (mpg) = 7)) → bvp (f$tv-alu-help (c, a, b, mpg, tree))

Theorem: f$tv-alu-help=tv-alu-help (boolp (c) ∧ bvp (a) ∧ (length (a) = tree-size (tree)) ∧ bvp (b) ∧ (length (b) = tree-size (tree)) ∧ bvp (mpg) ∧ (length (mpg) = 7)) → (f$tv-alu-help (c, a, b, mpg, tree) = tv-alu-help (c, a, b, mpg, tree))

(DEFN TV-ALU-HELP-BODY
(TREE)
(IF
 (NLISTP TREE)

(LIST (LIST 'LEAF
    (LIST 'P 'G (INDEX 'OUT 0))
    'ALU-CELL
    (CONS 'C
          (CONS (INDEX 'A 0)
                (CONS (INDEX 'B 0)
                      (INDICES 'MPG 0 7))))))
(APPEND
(IF (EQUAL (REMAINDER (SUB1 (TREE-HEIGHT TREE))
               3)
    0)
(LIST (LIST 'BUFFERMPG
         (INDICES 'MPG- 0 7)
         (INDEX 'V-BUF 7)
         (INDICES 'MPG 0 7)))
NIL)
(CONS
(LIST 'LHS
(CONS 'PL
      (CONS 'GL
            (TFIRSTN (INDICES 'OUT 0 (TREE-SIZE TREE))
                     TREE)))
(INDEX 'TV-ALU-HELP
       (TREE-NUMBER (CAR TREE)))
(CONS 'C
      (APPEND (TFIRSTN (INDICES 'A 0 (TREE-SIZE TREE))
                       TREE)
              (APPEND (TFIRSTN (INDICES 'B 0 (TREE-SIZE TREE))
                               TREE)
                      (IF (EQUAL (REMAINDER (SUB1 (TREE-HEIGHT TREE))
                                            3)
                                 0)
                          (INDICES 'MPG- 0 7)
                          (INDICES 'MPG 0 7))))))
(CONS
'(LHS-CARRY (CL) T-CARRY (C PL GL))
(CONS
(LIST 'RHS
(CONS 'PR
      (CONS 'GR
            (TRESTN (INDICES 'OUT 0 (TREE-SIZE TREE))
                    TREE)))
(INDEX 'TV-ALU-HELP
       (TREE-NUMBER (CDR TREE)))

          (CONS 'CL
                (APPEND (TRESTN (INDICES 'A 0 (TREE-SIZE TREE))
                                TREE)
                        (APPEND (TRESTN (INDICES 'B 0 (TREE-SIZE TREE))
                                        TREE)
                                (IF (EQUAL (REMAINDER (SUB1 (TREE-HEIGHT TREE))
                                                      3)
                                           0)
                                    (INDICES 'MPG- 0 7)
                                    (INDICES 'MPG 0 7))))))
      '((P (P) B-AND (PL PR))
        (G (G) T-CARRY (GL PR GR)))))))))

Definition: tv-alu-help* (tree) = cons (index ('tv-alu-help, tree-number (tree)),

cons (cons ('c,

append (indices ('a, 0, tree-size (tree)),

append (indices ('b, 0, tree-size (tree)), indices ('mpg, 0, 7)))),

cons (cons ('p, cons ('g, indices ('out, 0, tree-size (tree)))), cons (tv-alu-help-body (tree), '(nil)))))

Theorem: tv-alu-help*$destructure (car (tv-alu-help* (tree)) = index ('tv-alu-help, tree-number (tree))) ∧ (cadr (tv-alu-help* (tree))

= cons ('c,

append (indices ('a, 0, tree-size (tree)),

append (indices ('b, 0, tree-size (tree)), indices ('mpg, 0, 7)))))

∧ (caddr (tv-alu-help* (tree))

= cons ('p, cons ('g, indices ('out, 0, tree-size (tree))))) ∧ (cadddr (tv-alu-help* (tree)) = tv-alu-help-body (tree)) ∧ (caddddr (tv-alu-help* (tree)) = nil)

Event: Enable tv-alu-help*; name this event ‘tv-alu-help*-off’.

Event: Enable tv-alu-help*$destructure; name this event ‘tv-alu-help*$destructure-off’.

Definition: tv-alu-help& (netlist, tree) = if tree ≃ nil

then (lookup-module (index ('tv-alu-help, tree-number (tree)), netlist)

= tv-alu-help* (tree))

∧ alu-cell& (delete-module (index ('tv-alu-help,

tree-number (tree)), netlist))

else (lookup-module (index ('tv-alu-help, tree-number (tree)),

netlist)

= tv-alu-help* (tree))

∧ t-carry& (delete-module (index ('tv-alu-help,

tree-number (tree)), netlist))

∧ b-and& (delete-module (index ('tv-alu-help,

tree-number (tree)), netlist))

∧ v-buf& (delete-module (index ('tv-alu-help,

tree-number (tree)), netlist),

                  7)

∧ tv-alu-help& (delete-module (index ('tv-alu-help,

tree-number (tree)), netlist),

car (tree))

∧ tv-alu-help& (delete-module (index ('tv-alu-help,

tree-number (tree)), netlist),

cdr (tree)) endif

Event: Enable tv-alu-help&; name this event ‘tv-alu-help&-off’.

Definition: tv-alu-help$netlist (tree) = if tree ≃ nil then cons (tv-alu-help* (tree), alu-cell$netlist)

else cons (tv-alu-help* (tree), tv-alu-help$netlist (car (tree)) ∪ (tv-alu-help$netlist (cdr (tree)) ∪ (t-carry$netlist

∪ (b-and$netlist ∪ v-buf$netlist (7))))) endif

Definition: tv-alu-help-induction (tree, c, a, b, mpg, state, netlist) = if tree ≃ nil then t

else tv-alu-help-induction (car (tree), c, tfirstn (a, tree), tfirstn (b, tree), if ((tree-height (tree) − 1) mod 3)

= 0 then v-threefix (mpg) else mpg endif,

0,

delete-module (index ('tv-alu-help,

tree-number (tree)), netlist))

∧ tv-alu-help-induction (cdr (tree),

f$t-carry (c,

car (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), if ((tree-height (tree) − 1)

mod 3)

                          = 0

then v-threefix (mpg)

else mpg endif, car (tree))),

cadr (f$tv-alu-help (c,

tfirstn (a,

tree), tfirstn (b,

tree), if ((tree-height (tree) − 1)

mod 3)

                           = 0

then v-threefix (mpg)

else mpg endif, car (tree)))),

trestn (a, tree), trestn (b, tree), if ((tree-height (tree) − 1)

mod 3)

  = 0

then v-threefix (mpg) else mpg endif,

0,

delete-module (index ('tv-alu-help,

tree-number (tree)), netlist)) endif Theorem: tv-alu-help-lemma-crock tv-alu-help& (delete-module (index ('tv-alu-help, tree-number (tree)), netlist),

car (tree))

→ (collect-value (indices ('out, 0, n), bindings)

= append (collect-value (firstn (tree-size (car (tree)),

indices ('out, 0, n)), bindings), collect-value (restn (tree-size (car (tree)),

indices ('out, 0, n)), bindings)))

Event: Enable tv-alu-help-lemma-crock; name this event ‘tv-alu-help-lemma-crock-off’.

Theorem: tv-alu-help$value-base-case ((tree ≃ nil) ∧ tv-alu-help& (netlist, tree) ∧ (length (a) = 1) ∧ properp (a) ∧ (length (b) = 1) ∧ properp (b) ∧ (length (mpg) = 7) ∧ properp (mpg)) → (dual-eval (0,

index ('tv-alu-help, tree-number (tree)), cons (c, append (a, append (b, mpg))), state, netlist)

= f$tv-alu-help (c, a, b, mpg, tree))

Event: Enable tv-alu-help$value-base-case; name this event ‘tv-alu-help$value-base-case-off’.

Theorem: f$tv-alu-help-v-threefix-mpg (length (mpg) = 7) → (f$tv-alu-help (c, a, b, v-threefix (mpg), tree)

= f$tv-alu-help (c, a, b, mpg, tree))

Theorem: tv-alu-help$value (tv-alu-help& (netlist, tree) ∧ properp (a) ∧ (length (a) = tree-size (tree)) ∧ properp (b) ∧ (length (b) = tree-size (tree))

∧ properp (mpg) ∧ (length (mpg) = 7)) → (dual-eval (0,

index ('tv-alu-help, tree-number (tree)), cons (c, append (a, append (b, mpg))), state, netlist)

= f$tv-alu-help (c, a, b, mpg, tree))

Event: Enable tv-alu-help$value; name this event ‘tv-alu-help$value-off’.

Definition: carry-out-help (a0 , result, zero, op0 , op1 , op2 , op3 ) = b-and (b-nand3 (b-nand4 (b-not (op3 ),

b-nand (b-not (op0 ), b-not (op1 )),

b-not (op2 ), result),

b-nand3 (b-not (op3 ), b-not (b-not (op2 )), b-not (result)), b-nand4 (b-not (b-not (op3 )), b-not (op2 ), b-nand (b-not (b-not (op0 )), b-not (b-not (op1 ))), a0 )),

b-not (zero))

Definition: f$carry-out-help (a0 , result, zero, op0 , op1 , op2 , op3 ) = f-and (f-nand3 (f-nand4 (f-not (op3 ),

f-nand (f-not (op0 ), f-not (op1 )),

f-not (op2 ), result),

f-nand3 (f-not (op3 ), f-not (f-not (op2 )), f-not (result)), f-nand4 (f-not (f-not (op3 )), f-not (op2 ), f-nand (f-not (f-not (op0 )), f-not (f-not (op1 ))), a0 )),

f-not (zero))

Event: Enable f$carry-out-help; name this event ‘f$carry-out-help-off’.

Definition: carry-out-help*

= '(carry-out-help
      (a0 result zero op0 op1 op2 op3)
      (w-22)

((g-21 (w-21) b-not (zero))
(g-16 (w-16) b-not (op1))
(g-17 (w-17) b-not (w-16))
(g-14 (w-14) b-not (op0))
(g-15 (w-15) b-not (w-14))
(g-18 (w-18) b-nand (w-15 w-17))
(g-13 (w-13) b-not (op2))
(g-11 (w-11) b-not (op3))
(g-12 (w-12) b-not (w-11))
(g-19 (w-19) b-nand4 (w-12 w-13 w-18 a0))
(g-9 (w-9) b-not (result))
(g-8 (w-8) b-not (w-13))
(g-10 (w-10) b-nand3 (w-11 w-8 w-9))
(g-3 (w-3) b-nand (w-14 w-16))
(g-5 (w-5) b-nand4 (w-11 w-3 w-13 result))
(g-20 (w-20) b-nand3 (w-5 w-10 w-19))
(g-22 (w-22) b-and (w-20 w-21)))
nil)

Definition: carry-out-help& (netlist) = ((lookup-module ('carry-out-help, netlist) = carry-out-help*)

∧ b-not& (delete-module ('carry-out-help, netlist)) ∧ b-nand& (delete-module ('carry-out-help, netlist)) ∧ b-nand4& (delete-module ('carry-out-help, netlist)) ∧ b-nand3& (delete-module ('carry-out-help, netlist)) ∧ b-and& (delete-module ('carry-out-help, netlist)))

Event: Enable carry-out-help&; name this event ‘carry-out-help&-off’.

Definition: carry-out-help$netlist = cons (carry-out-help*,

(((b-not$netlist ∪ b-nand$netlist) ∪ b-nand4$netlist) ∪ b-nand3$netlist) ∪ b-and$netlist)

Theorem: carry-out-help$value carry-out-help& (netlist) → (dual-eval (0,

       'carry-out-help,

list (a0 , result, zero, op0 , op1 , op2 , op3 ), state, netlist)

= list (f$carry-out-help (a0 , result, zero, op0 , op1 , op2 , op3 )))

Event: Enable carry-out-help$value; name this event ‘carry-out-help$value-off’.

Theorem: f$carry-out-help=carry-out-help (boolp (a0 ) ∧ boolp (result) ∧ boolp (zero) ∧ boolp (op0 ) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 )) → (f$carry-out-help (a0 , result, zero, op0 , op1 , op2 , op3 )

= carry-out-help (a0 , result, zero, op0 , op1 , op2 , op3 ))

Theorem: carry-out-help-congruence x → ((carry-out-help (x, a, zero, op0 , op1 , op2 , op3 )

= carry-out-help (t, a, zero, op0 , op1 , op2 , op3 ))

= t)

Theorem: carry-out-help$value-zero carry-out-help& (netlist) → (dual-eval (0,

              'carry-out-help,

list (a0 , result, t, op0 , op1 , op2 , op3 ), state, netlist)

= list (f))

Event: Enable carry-out-help$value-zero; name this event ‘carry-out-help$value-zero-off’.

Definition: overflow-help (rn, an, bn, zero, op0 , op1 , op2 , op3 ) = b-if (rn,

b-nor (b-nand (b-nor (b-nand3 (b-not (op3 ),

b-or3 (b-not (op1 ), b-not (op2 ), b-xor (b-not (b-not (an)), bn)),

b-nand3 (b-not (op1 ), b-not (b-not (op2 )), b-not (an))),

b-nand (b-nand3 (op1 , b-not (op2 ), b-xor (b-not (b-not (an)), bn)), b-nand3 (b-not (op1 ),

b-not (op2 ), b-not (b-not (an))))),

b-not (zero)), b-nand3 (b-nand (b-not (b-not (op2 )), b-not (an)),

b-nand3 (op0 , b-not (op1 ), b-not (b-not (an))), b-nand (b-not (op2 ), b-not (b-not (an))))),

b-nor (b-nand (b-nor (b-nand3 (b-not (op3 ),

b-or3 (b-not (op1 ), b-not (op2 ), b-xor (b-not (b-not (an)), bn)),

b-nand3 (b-not (op1 ), b-not (b-not (op2 )), b-not (an))),

b-nand (b-nand3 (op1 , b-not (op2 ), b-xor (b-not (b-not (an)), bn)),

b-nand3 (b-not (op1 ), b-not (op2 ), b-not (b-not (an))))),

b-not (zero)), b-not (b-nand3 (b-nand (b-not (b-not (op2 )), b-not (an)),

b-nand3 (op0 , b-not (op1 ), b-not (b-not (an))), b-nand (b-not (op2 ), b-not (b-not (an)))))))

Definition: f$overflow-help (rn, an, bn, zero, op0 , op1 , op2 , op3 ) = f-if (rn,

f-nor (f-nand (f-nor (f-nand3 (f-not (op3 ),

f-or3 (f-not (op1 ), f-not (op2 ), f-xor (f-not (f-not (an)), bn)),

f-nand3 (f-not (op1 ), f-not (f-not (op2 )), f-not (an))),

f-nand (f-nand3 (op1 , f-not (op2 ), f-xor (f-not (f-not (an)), bn)),

f-nand3 (f-not (op1 ), f-not (op2 ), f-not (f-not (an))))),

f-not (zero)), f-nand3 (f-nand (f-not (f-not (op2 )), f-not (an)),

f-nand3 (op0 , f-not (op1 ), f-not (f-not (an))),

f-nand (f-not (op2 ), f-not (f-not (an))))),

f-nor (f-nand (f-nor (f-nand3 (f-not (op3 ),

f-or3 (f-not (op1 ), f-not (op2 ), f-xor (f-not (f-not (an)), bn)),

f-nand3 (f-not (op1 ), f-not (f-not (op2 )), f-not (an))),

f-nand (f-nand3 (op1 , f-not (op2 ), f-xor (f-not (f-not (an)), bn)),

f-nand3 (f-not (op1 ), f-not (op2 ), f-not (f-not (an))))),

f-not (zero)), f-not (f-nand3 (f-nand (f-not (f-not (op2 )), f-not (an)),

f-nand3 (op0 , f-not (op1 ), f-not (f-not (an))), f-nand (f-not (op2 ), f-not (f-not (an)))))))

Event: Enable f$overflow-help; name this event ‘f$overflow-help-off’.

Definition: overflow-help*

= '(overflow-help
(rn an bn zero op0 op1 op2 op3)
(w-83)
((g-77 (w-77) b-not (an))
(g-78 (w-78) b-not (w-77))
(g-76 (w-76) b-not (op2))
(g-79 (w-79) b-nand (w-76 w-78))
(g-72 (w-72) b-not (op1))
(g-75 (w-75) b-nand3 (op0 w-72 w-78))
(g-69 (w-69) b-not (w-76))
(g-71 (w-71) b-nand (w-69 w-77))
(g-80 (w-80) b-nand3 (w-71 w-75 w-79))
(g-81 (w-81) b-not (w-80))
(g-66 (w-66) b-not (zero))
(g-63 (w-63) b-nand3 (w-72 w-76 w-78))
(g-57 (w-57) b-xor (w-78 bn))
(g-58 (w-58) b-nand3 (op1 w-76 w-57))
(g-64 (w-64) b-nand (w-58 w-63))
(g-52 (w-52) b-nand3 (w-72 w-69 w-77))
(g-47 (w-47) b-or3 (w-72 w-76 w-57))
(g-41 (w-41) b-not (op3))

       (g-53 (w-53) b-nand3 (w-41 w-47 w-52))
       (g-65 (w-65) b-nor (w-53 w-64))
       (g-67 (w-67) b-nand (w-65 w-66))
       (g-82 (w-82) b-nor (w-67 w-81))
       (g-40 (w-40) b-nor (w-67 w-80))
       (g-83 (w-83) b-if (rn w-40 w-82)))
      nil)

Definition: overflow-help& (netlist) = ((lookup-module ('overflow-help, netlist) = overflow-help*)

∧ b-xor& (delete-module ('overflow-help, netlist)) ∧ b-or3& (delete-module ('overflow-help, netlist)) ∧ b-not& (delete-module ('overflow-help, netlist)) ∧ b-nand3& (delete-module ('overflow-help, netlist)) ∧ b-nand& (delete-module ('overflow-help, netlist)) ∧ b-nor& (delete-module ('overflow-help, netlist)) ∧ b-if& (delete-module ('overflow-help, netlist)))

Event: Enable overflow-help&; name this event ‘overflow-help&-off’.

Definition: overflow-help$netlist = cons (overflow-help*,

(((((b-xor$netlist ∪ b-or3$netlist) ∪ b-not$netlist) ∪ b-nand3$netlist) ∪ b-nand$netlist) ∪ b-nor$netlist) ∪ b-if$netlist)

Theorem: overflow-help$value overflow-help& (netlist) → (dual-eval (0,

              'overflow-help,

list (rn, an, bn, zero, op0 , op1 , op2 , op3 ), state, netlist)

= list (f$overflow-help (rn, an, bn, zero, op0 , op1 , op2 , op3 )))

Event: Enable overflow-help$value; name this event ‘overflow-help$value-off’.

Theorem: f$overflow-help=overflow-help (boolp (rn) ∧ boolp (an)

∧ boolp (bn) ∧ boolp (zero) ∧ boolp (op0 ) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 )) → (f$overflow-help (rn, an, bn, zero, op0 , op1 , op2 , op3 )

= overflow-help (rn, an, bn, zero, op0 , op1 , op2 , op3 ))

Theorem: overflow-help$value-zero (overflow-help& (netlist) ∧ boolp (rn)) → (dual-eval (0,

              'overflow-help,

list (rn, an, bn, t, op0 , op1 , op2 , op3 ), state, netlist)

= list (f))

Event: Enable overflow-help$value-zero; name this event ‘overflow-help$value-zero-off’.

Definition: v-shift-right-names (a, si) = if a ≃ nil then nil

else append (cdr (a), list (si)) endif

Theorem: length-v-shift-right-names length (v-shift-right-names (a, si)) = length (a)

Theorem: properp-shift-right-names properp (v-shift-right-names (a, si))

Theorem: collect-value-v-shift-right v-threefix (collect-value (v-shift-right-names (a, si), alist)) = fv-shift-right (collect-value (a, alist), value (si, alist))

Definition: shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 ) = list (b-or3 (b-and (op0 , op1 ), b-nand (b-not (op2 ), op3 ), zero),

b-or (b-and (op0 , an), b-and (b-and (b-not (op0 ), b-not (op1 )), c)))

Definition: f$shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 ) = list (f-or3 (f-and (op0 , op1 ), f-nand (f-not (op2 ), op3 ), zero),

f-or (f-and (op0 , an), f-and (f-and (f-not (op0 ), f-not (op1 )), c)))

Event: Enable f$shift-or-buf-cntl; name this event ‘f$shift-or-buf-cntl-off’.

Definition: shift-or-buf-cntl*

= '(shift-or-buf-cntl
      (c an zero op0 op1 op2 op3)
      (w-3 w-9)
      ((g-6 (w-6) b-not (op1))
       (g-5 (w-5) b-not (op0))
       (g-7 (w-7) b-and (w-5 w-6))
       (g-8 (w-8) b-and (w-7 c))
       (g-4 (w-4) b-and (op0 an))
       (g-9 (w-9) b-or (w-4 w-8))
       (g-1 (w-1) b-not (op2))
       (g-2 (w-2) b-nand (w-1 op3))
       (g-0 (w-0) b-and (op0 op1))
       (g-3 (w-3) b-or3 (w-0 w-2 zero)))
      nil)

Definition: shift-or-buf-cntl& (netlist) = ((lookup-module ('shift-or-buf-cntl, netlist)

= shift-or-buf-cntl*)

∧ b-or& (delete-module ('shift-or-buf-cntl, netlist)) ∧ b-not& (delete-module ('shift-or-buf-cntl, netlist)) ∧ b-nand& (delete-module ('shift-or-buf-cntl, netlist)) ∧ b-and& (delete-module ('shift-or-buf-cntl, netlist)) ∧ b-or3& (delete-module ('shift-or-buf-cntl, netlist)))

Event: Enable shift-or-buf-cntl&; name this event ‘shift-or-buf-cntl&-off’.

Definition: shift-or-buf-cntl$netlist = cons (shift-or-buf-cntl*,

(((b-or$netlist ∪ b-not$netlist) ∪ b-nand$netlist) ∪ b-and$netlist) ∪ b-or3$netlist)

Theorem: shift-or-buf-cntl$value shift-or-buf-cntl& (netlist) → (dual-eval (0,

              'shift-or-buf-cntl,

list (c, an, zero, op0 , op1 , op2 , op3 ), state,

netlist)

= f$shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 ))

Event: Enable shift-or-buf-cntl$value; name this event ‘shift-or-buf-cntl$value-off’.

Theorem: f$shift-or-buf-cntl=shift-or-buf-cntl (boolp (c) ∧ boolp (an) ∧ boolp (zero) ∧ boolp (op0 ) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 )) → (f$shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 )

= shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 ))

Theorem: shift-or-buf-cntl$value-zero shift-or-buf-cntl& (netlist) → (car (dual-eval (0,

                  'shift-or-buf-cntl,

list (c, an, t, op0 , op1 , op2 , op3 ), state, netlist))

= t)

Definition: f$shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ) = fv-if (car (f$shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 )),

a,

fv-shift-right (a,

cadr (f$shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 ))))

Event: Enable f$shift-or-buf; name this event ‘f$shift-or-buf-off’.

Definition: shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ) = v-if (car (shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 )), a, v-shift-right (a,

cadr (shift-or-buf-cntl (c, an, zero, op0 , op1 , op2 , op3 ))))

Event: Enable shift-or-buf; name this event ‘shift-or-buf-off’.

Theorem: properp-length-f$shift-or-buf properp (f$shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 )) ∧ (length (f$shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 )) = length (a))

Theorem: length-shift-or-buf length (shift-or-buf (c, a, an, zero, op1 , op2 , op3 , op4 )) = length (a)

Theorem: bvp-shift-or-buf bvp (shift-or-buf (c, a, an, zero, op1 , op2 , op3 , op4 ))

Theorem: f$shift-or-buf=shift-or-buf (boolp (c) ∧ boolp (an) ∧ boolp (zero) ∧ boolp (op1 ) ∧ boolp (op2 ) ∧ boolp (op3 ) ∧ boolp (op4 ) ∧ bvp (a)) → (f$shift-or-buf (c, a, an, zero, op1 , op2 , op3 , op4 )

= shift-or-buf (c, a, an, zero, op1 , op2 , op3 , op4 ))

Theorem: shift-or-buf-is-buf (bvp (a) ∧ ((op0 ∧ op1 ) ∨ op2 ∨ (¬ op3 ) ∨ zero)) → (shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ) = a)

Theorem: shift-or-buf-is-asr (bvp (a) ∧ (an = nth (length (a) − 1, a)) ∧ op0 ∧ (¬ op1 ) ∧ (¬ op2 ) ∧ op3 ∧ (¬ zero)) → (shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ) = v-asr (a))

Theorem: shift-or-buf-is-ror (bvp (a) ∧ boolp (c)

∧ (¬ op0 ) ∧ (¬ op1 ) ∧ (¬ op2 ) ∧ op3 ∧ (¬ zero)) → (shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ) = v-ror (a, c))

Theorem: shift-or-buf-is-lsr (bvp (a) ∧ (¬ op0 ) ∧ op1 ∧ (¬ op2 ) ∧ op3 ∧ (¬ zero)) → (shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ) = v-lsr (a))

Definition: tv-shift-or-buf* (tree) = cons (index ('tv-shift-or-buf, tree-number (tree)),

cons (cons ('c,

append (indices ('a, 0, tree-size (tree)),

                        '(an zero op0 op1 op2 op3))),

cons (indices ('out, 0, tree-size (tree)),

cons (list ('(cntl

                           (ctl si)
                           shift-or-buf-cntl
                           (c an zero op0 op1 op2 op3)),

list ('mux, indices ('out, 0, tree-size (tree)), index ('tv-if, tree-number (tree)), cons ('ctl,

append (indices ('a,

                                               0,

tree-size (tree)), v-shift-right-names (indices ('a,

                                                                0,

tree-size (tree)), 'si))))),

                      '(nil)))))

Theorem: tv-shift-or-buf*$destructure (car (tv-shift-or-buf* (tree)) = index ('tv-shift-or-buf, tree-number (tree))) ∧ (cadr (tv-shift-or-buf* (tree))

= cons ('c,

append (indices ('a, 0, tree-size (tree)),

                    '(an zero op0 op1 op2 op3))))

∧ (caddr (tv-shift-or-buf* (tree)) = indices ('out, 0, tree-size (tree))) ∧ (cadddr (tv-shift-or-buf* (tree))

    = list ('(cntl

              (ctl si)
              shift-or-buf-cntl
              (c an zero op0 op1 op2 op3)),

list ('mux, indices ('out, 0, tree-size (tree)), index ('tv-if, tree-number (tree)), cons ('ctl,

append (indices ('a, 0, tree-size (tree)),

v-shift-right-names (indices ('a,

                                                   0,

tree-size (tree)), 'si))))))

∧ (caddddr (tv-shift-or-buf* (tree)) = nil)

Event: Enable tv-shift-or-buf*; name this event ‘tv-shift-or-buf*-off’.

Event: Enable tv-shift-or-buf*$destructure; name this event ‘tv-shift-or-buf*$destructure-off’.

Definition: tv-shift-or-buf& (netlist, tree) = ((lookup-module (index ('tv-shift-or-buf, tree-number (tree)),

netlist)

= tv-shift-or-buf* (tree))

∧ shift-or-buf-cntl& (delete-module (index ('tv-shift-or-buf,

tree-number (tree)), netlist))

∧ tv-if& (delete-module (index ('tv-shift-or-buf,

tree-number (tree)), netlist),

tree))

Event: Enable tv-shift-or-buf&; name this event ‘tv-shift-or-buf&-off’.

Definition: tv-shift-or-buf$netlist (tree) = cons (tv-shift-or-buf* (tree),

tv-if$netlist (tree) ∪ shift-or-buf-cntl$netlist)

Theorem: tv-shift-or-buf$value (tv-shift-or-buf& (netlist, tree) ∧ (length (a) = tree-size (tree)) ∧ properp (a))

→ (dual-eval (0, index ('tv-shift-or-buf, tree-number (tree)), cons (c, append (a, list (an, zero, op0 , op1 , op2 , op3 ))), state, netlist)

= f$shift-or-buf (c, a, an, zero, op0 , op1 , op2 , op3 ))

Event: Enable tv-shift-or-buf$value; name this event ‘tv-shift-or-buf$value-off’.

Theorem: tv-shift-or-buf$value-zero (tv-shift-or-buf& (netlist, tree) ∧ (length (a) = tree-size (tree)) ∧ bvp (a)) → (dual-eval (0,

index ('tv-shift-or-buf, tree-number (tree)), cons (c, append (a, list (an, t, op0 , op1 , op2 , op3 ))), state, netlist)

= a)

Event: Enable tv-shift-or-buf$value-zero; name this event ‘tv-shift-or-buf$value-zero-off’.

Definition: f$core-alu (c, a, b, zero, mpg, op, tree) = cons (f$carry-out-help (nth (0, a),

f$t-carry (c, car (f$tv-alu-help (c, a, b, mpg, tree)), cadr (f$tv-alu-help (c, a, b, mpg, tree))),

zero, car (op), cadr (op), caddr (op), cadddr (op)),

cons (f$overflow-help (nth (length (a) − 1,

cddr (f$tv-alu-help (c, a, b, mpg, tree))), nth (length (a) − 1, a), nth (length (a) − 1, b), zero, car (op), cadr (op), caddr (op),

cadddr (op)),

cons (f$fast-zero (f$shift-or-buf (c,

cddr (f$tv-alu-help (c, a, b, mpg, tree)),

nth (length (a) − 1, a), zero, car (op), cadr (op), caddr (op), cadddr (op))),

f$shift-or-buf (c, cddr (f$tv-alu-help (c, a, b, mpg, tree)), nth (length (a) − 1, a), zero, car (op), cadr (op), caddr (op), cadddr (op)))))

Event: Enable f$core-alu; name this event ‘f$core-alu-off’.

Definition: core-alu (c, a, b, zero, mpg, op, tree) = cons (carry-out-help (nth (0, a),

t-carry (c, car (tv-alu-help (c, a, b, mpg, tree)), cadr (tv-alu-help (c, a, b, mpg, tree))),

zero, car (op), cadr (op), caddr (op), cadddr (op)),

cons (overflow-help (nth (length (a) − 1,

cddr (tv-alu-help (c, a, b, mpg, tree))), nth (length (a) − 1, a), nth (length (a) − 1, b), zero, car (op), cadr (op), caddr (op), cadddr (op)), cons (v-zerop (shift-or-buf (c,

cddr (tv-alu-help (c, a, b, mpg, tree)), nth (length (a) − 1, a), zero, car (op), cadr (op), caddr (op), cadddr (op))),

shift-or-buf (c, cddr (tv-alu-help (c, a, b, mpg, tree)), nth (length (a) − 1, a), zero, car (op), cadr (op), caddr (op), cadddr (op)))))

Event: Enable core-alu; name this event ‘core-alu-off’.

Theorem: properp-length-f$core-alu properp (f$core-alu (c, a, b, zero, mpg, op, tree)) ∧ (length (f$core-alu (c, a, b, zero, mpg, op, tree))

= (1 + (1 + (1 + tree-size (tree)))))

Theorem: f$core-alu=core-alu (boolp (c) ∧ bvp (a) ∧ (length (a) = tree-size (tree)) ∧ bvp (b) ∧ (length (b) = tree-size (tree)) ∧ if length (a) < 3 then f

else t endif ∧ boolp (zero) ∧ bvp (mpg) ∧ (length (mpg) = 7) ∧ bvp (op) ∧ (length (op) = 4)) → (f$core-alu (c, a, b, zero, mpg, op, tree)

= core-alu (c, a, b, zero, mpg, op, tree))

Theorem: length-core-alu length (core-alu (c, a, b, zero, mpg, op, tree)) = (1 + (1 + (1 + tree-size (tree))))

Theorem: boolp-bvp-core-alu boolp (c (core-alu (c, a, b, zero, mpg, op, tree))) ∧ boolp (v (core-alu (c, a, b, zero, mpg, op, tree))) ∧ boolp (zb (core-alu (c, a, b, zero, mpg, op, tree))) ∧ bvp (bv (core-alu (c, a, b, zero, mpg, op, tree))) ∧ bvp (core-alu (c, a, b, zero, mpg, op, tree))

Theorem: core-alu-works-for-all-normal-cases$crock (bvp (a) ∧ (length (a) = tree-size (tree)) ∧ nth (0, a)) → (nth (0, a) = t)

Event: Enable core-alu-works-for-all-normal-cases$crock; name this event ‘corealu-works-for-all-normal-cases$crock-off’.

Theorem: core-alu-works-for-all-normal-cases ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c)) → (v-alu (c, a, b, list (f, f, f, f))

= core-alu (carry-in-help (list (c, f, f, f, f, f)), a, b, f, mpg (list (f, f, f, f, f, f)), list (f, f, f, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, f, f, f))

= core-alu (carry-in-help (list (c, f, t, f, f, f)), a, b, f, mpg (list (f, f, t, f, f, f)), list (t, f, f, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, t, f, f))

= core-alu (carry-in-help (list (c, f, f, t, f, f)), a, b, f, mpg (list (f, f, f, t, f, f)), list (f, t, f, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c)) → (v-alu (c, a, b, list (t, t, f, f))

= core-alu (carry-in-help (list (c, f, t, t, f, f)), a, b, f, mpg (list (f, f, t, t, f, f)), list (t, t, f, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, f, t, f))

= core-alu (carry-in-help (list (c, f, f, f, t, f)), a, b, f, mpg (list (f, f, f, f, t, f)), list (f, f, t, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, f, t, f))

= core-alu (carry-in-help (list (c, f, t, f, t, f)), a, b, f, mpg (list (f, f, t, f, t, f)), list (t, f, t, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, t, t, f))

= core-alu (carry-in-help (list (c, f, f, t, t, f)), a, b, f, mpg (list (f, f, f, t, t, f)), list (f, t, t, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, t, t, f))

= core-alu (carry-in-help (list (c, f, t, t, t, f)), a, b, f, mpg (list (f, f, t, t, t, f)), list (t, t, t, f), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, f, f, t))

= core-alu (carry-in-help (list (c, f, f, f, f, t)), a, b, f, mpg (list (f, f, f, f, f, t)), list (f, f, f, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, f, f, t))

= core-alu (carry-in-help (list (c, f, t, f, f, t)), a, b, f, mpg (list (f, f, t, f, f, t)), list (t, f, f, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, t, f, t))

= core-alu (carry-in-help (list (c, f, f, t, f, t)), a, b, f, mpg (list (f, f, f, t, f, t)), list (f, t, f, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, t, f, t))

= core-alu (carry-in-help (list (c, f, t, t, f, t)), a, b, f, mpg (list (f, f, t, t, f, t)), list (t, t, f, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, f, t, t))

= core-alu (carry-in-help (list (c, f, f, f, t, t)), a, b, f, mpg (list (f, f, f, f, t, t)), list (f, f, t, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, f, t, t))

= core-alu (carry-in-help (list (c, f, t, f, t, t)), a, b, f, mpg (list (f, f, t, f, t, t)), list (t, f, t, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (f, t, t, t))

= core-alu (carry-in-help (list (c, f, f, t, t, t)), a, b, f, mpg (list (f, f, f, t, t, t)), list (f, t, t, t), tree)))

∧ ((bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ boolp (c))

→ (v-alu (c, a, b, list (t, t, t, t))

= core-alu (carry-in-help (list (c, f, t, t, t, t)), a, b, f, mpg (list (f, f, t, t, t, t)), list (t, t, t, t), tree)))

Event: Enable core-alu-works-for-all-normal-cases; name this event ‘core-alu-works-for-all-normal-cases-off’.

Theorem: cases-on-a-4-bit-bvp (bvp (op) ∧ (length (op) = 4) ∧ if op = list (f, f, f, f) then p

elseif op = list (t, f, f, f) then p elseif op = list (f, t, f, f) then p elseif op = list (t, t, f, f) then p elseif op = list (f, f, t, f) then p elseif op = list (t, f, t, f) then p elseif op = list (f, t, t, f) then p elseif op = list (t, t, t, f) then p elseif op = list (f, f, f, t) then p elseif op = list (t, f, f, t) then p elseif op = list (f, t, f, t) then p elseif op = list (t, t, f, t) then p elseif op = list (f, f, t, t) then p elseif op = list (t, f, t, t) then p elseif op = list (f, t, t, t) then p elseif op = list (t, t, t, t) then p else t endif)

→ p

Theorem: core-alu-is-v-alu (bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ bvp (op) ∧ (length (op) = 4) ∧ (¬ zero) ∧ (mpg = mpg (cons (zero, cons (f, op)))) ∧ boolp (c)) → (core-alu (carry-in-help (cons (c, cons (f, op))), a, b, zero, mpg, op, tree)

= v-alu (c, a, b, op))

Theorem: core-alu-works-for-zero-case ((length (a) = tree-size (tree)) ∧ zero) → (core-alu (t, a, b, zero, list (f, f, f, f, f, f, t), op, tree)

= cvzbv (f, f, make-list (length (a), f)))

Theorem: core-alu-works-as-inc-b (bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ (¬ zero) ∧ swap) → (bv (core-alu (carry-in-help (cons (c, cons (zero, alu-inc-op))),

a, b, zero, mpg (cons (zero, cons (swap, alu-inc-op))), alu-inc-op, tree))

= v-inc (b))

Theorem: core-alu-works-as-dec-b (bv2p (a, b) ∧ (length (a) = tree-size (tree)) ∧ (¬ zero) ∧ swap) → (bv (core-alu (carry-in-help (cons (c, cons (zero, alu-dec-op))),

a, b, zero, mpg (cons (zero, cons (swap, alu-dec-op))), alu-dec-op, tree))

= v-dec (b))

Definition: core-alu* (tree) = cons (index ('core-alu, tree-number (tree)),

cons (cons ('c,

append (indices ('a, 0, tree-size (tree)),

append (indices ('b, 0, tree-size (tree)),

cons ('zero,

append (indices ('mpg, 0, 7),

indices ('op, 0, 4)))))),

cons (cons ('carry,

cons ('overflow,
cons ('zerop,

indices ('out, 0, tree-size (tree))))),

cons (list (list ('m-alu,

cons ('p,

cons ('g,

indices ('alu-out,

                0,

tree-size (tree)))),

index ('tv-alu-help,

tree-number (tree)), cons ('c,

append (indices ('a,

                  0,

tree-size (tree)), append (indices ('b,

                          0,

tree-size (tree)), indices ('mpg, 0, 7))))),

'(m-alu-carry
(alu-carry)
t-carry
(c p g)),
list ('m-carry-out-help,
'(carry),
'carry-out-help,

list (index ('a, 0),

    'alu-carry,
    'zero,

index ('op, 0), index ('op, 1), index ('op, 2), index ('op, 3))),

list ('m-overflow-help,

'(overflow),
'overflow-help,

list (index ('alu-out,

tree-size (tree) − 1), index ('a, tree-size (tree) − 1), index ('b, tree-size (tree) − 1),

    'zero,

index ('op, 0), index ('op, 1), index ('op, 2), index ('op, 3))),

list ('m-shift,

indices ('out, 0, tree-size (tree)),

index ('tv-shift-or-buf,

tree-number (tree)), cons ('c,

append (indices ('alu-out,

                  0,

tree-size (tree)), list (index ('a,

tree-size (tree) − 1),

               'zero,

index ('op, 0), index ('op, 1), index ('op, 2), index ('op, 3))))),

list ('m-zerop,
'(zerop),

index ('fast-zero, tree-size (tree)), indices ('out, 0, tree-size (tree)))),

'(nil)))))

Theorem: core-alu*$destructure (car (core-alu* (tree)) = index ('core-alu, tree-number (tree))) ∧ (cadr (core-alu* (tree))

= cons ('c,

append (indices ('a, 0, tree-size (tree)),

append (indices ('b, 0, tree-size (tree)),

cons ('zero,

append (indices ('mpg, 0, 7),

indices ('op, 0, 4)))))))

∧ (caddr (core-alu* (tree))

= cons ('carry,

cons ('overflow,

cons ('zerop, indices ('out, 0, tree-size (tree))))))

∧ (cadddr (core-alu* (tree))

= list (list ('m-alu,

cons ('p,

cons ('g,

indices ('alu-out, 0, tree-size (tree)))),

index ('tv-alu-help, tree-number (tree)), cons ('c,

append (indices ('a, 0, tree-size (tree)),

append (indices ('b, 0, tree-size (tree)), indices ('mpg, 0, 7))))),

'(m-alu-carry (alu-carry) t-carry (c p g)),
list ('m-carry-out-help,
'(carry),
'carry-out-help,

list (index ('a, 0),

'alu-carry,
'zero,

index ('op, 0), index ('op, 1), index ('op, 2), index ('op, 3))),

list ('m-overflow-help,
'(overflow),
'overflow-help,

list (index ('alu-out, tree-size (tree) − 1), index ('a, tree-size (tree) − 1), index ('b, tree-size (tree) − 1),

'zero,

index ('op, 0), index ('op, 1), index ('op, 2), index ('op, 3))),

list ('m-shift,

indices ('out, 0, tree-size (tree)), index ('tv-shift-or-buf, tree-number (tree)), cons ('c,

append (indices ('alu-out, 0, tree-size (tree)),

list (index ('a, tree-size (tree) − 1),

            'zero,

index ('op, 0), index ('op, 1), index ('op, 2), index ('op, 3))))),

            list ('m-zerop,
                '(zerop),

index ('fast-zero, tree-size (tree)), indices ('out, 0, tree-size (tree)))))

∧ (caddddr (core-alu* (tree)) = nil)

Event: Enable core-alu*; name this event ‘core-alu*-off’.

Event: Enable core-alu*$destructure; name this event ‘core-alu*$destructure-off’.

Definition: core-alu& (netlist, tree) = ((lookup-module (index ('core-alu, tree-number (tree)), netlist)

= core-alu* (tree))

∧ tv-alu-help& (delete-module (index ('core-alu,

tree-number (tree)), netlist),

tree)

∧ t-carry& (delete-module (index ('core-alu, tree-number (tree)), netlist))

∧ carry-out-help& (delete-module (index ('core-alu,

tree-number (tree)), netlist))

∧ overflow-help& (delete-module (index ('core-alu,

tree-number (tree)), netlist))

∧ tv-shift-or-buf& (delete-module (index ('core-alu,

tree-number (tree)), netlist),

tree)

∧ fast-zero& (delete-module (index ('core-alu, tree-number (tree)), netlist),

tree-size (tree)))

Event: Enable core-alu&; name this event ‘core-alu&-off’.

Definition: core-alu$netlist (tree) = cons (core-alu* (tree),

tv-alu-help$netlist (tree) ∪ (t-carry$netlist

∪ (carry-out-help$netlist ∪ (overflow-help$netlist

∪ (tv-shift-or-buf$netlist (tree) ∪ fast-zero$netlist (tree-size (tree)))))))

Theorem: core-alu$value (core-alu& (netlist, tree) ∧ (length (a) = tree-size (tree)) ∧ (length (b) = tree-size (tree)) ∧ if length (a) < 3 then f

else t endif ∧ properp (a) ∧ properp (b) ∧ properp (op) ∧ (length (op) = 4) ∧ properp (mpg) ∧ (length (mpg) = 7)) → (dual-eval (0,

index ('core-alu, tree-number (tree)),

cons (c, append (a, append (b, cons (zero, append (mpg, op))))), state, netlist)

= f$core-alu (c, a, b, zero, mpg, op, tree))

Event: Enable core-alu$value; name this event ‘core-alu$value-off’.

Definition: reg-size = 4

Definition: a-immediate-p (instruction) = nth (9, instruction)

Definition: a-immediate (instruction) = subrange (instruction, 0, 8)

Definition: rn-a (instruction) = subrange (instruction, 0, 3)

Definition: mode-a (instruction) = subrange (instruction, 4, 5)

Definition: rn-b (instruction) = subrange (instruction, 10, 13)

Definition: mode-b (instruction) = subrange (instruction, 14, 15)

Definition: set-flags (instruction) = subrange (instruction, 16, 19)

Definition: store-cc (instruction) = subrange (instruction, 20, 23)

Definition: op-code (instruction) = subrange (instruction, 24, 27) Event: Enable a-immediate-p; name this event ‘a-immediate-p-off’. Event: Enable a-immediate; name this event ‘a-immediate-off’. Event: Enable rn-a; name this event ‘rn-a-off’. Event: Enable rn-b; name this event ‘rn-b-off’. Event: Enable mode-a; name this event ‘mode-a-off’. Event: Enable mode-b; name this event ‘mode-b-off’. Event: Enable set-flags; name this event ‘set-flags-off’. Event: Enable store-cc; name this event ‘store-cc-off’. Event: Enable op-code; name this event ‘op-code-off’. Event: Let us define the theory ir-fields-theory to consist of the following events: a-immediate-p, a-immediate, rn-a, mode-a, rn-b, mode-b, set-flags, store-cc, op-code. Definition: z-set (set-flags) = nth (0, set-flags) Definition: n-set (set-flags) = nth (1, set-flags) Definition: v-set (set-flags) = nth (2, set-flags) Definition: c-set (set-flags) = nth (3, set-flags) Event: Enable z-set; name this event ‘z-set-off’. Event: Enable n-set; name this event ‘n-set-off’. Event: Enable v-set; name this event ‘v-set-off’.

Event: Enable c-set; name this event ‘c-set-off’. Event: Let us define the theory set-flags-theory to consist of the following events: z-set, n-set, v-set, c-set. Definition: z-flag (flags) = nth (0, flags) Definition: n-flag (flags) = nth (1, flags) Definition: v-flag (flags) = nth (2, flags) Definition: c-flag (flags) = nth (3, flags) Event: Enable z-flag; name this event ‘z-flag-off’. Event: Enable n-flag; name this event ‘n-flag-off’. Event: Enable v-flag; name this event ‘v-flag-off’. Event: Enable c-flag; name this event ‘c-flag-off’. Event: Let us define the theory flags-theory to consist of the following events: z-flag, n-flag, v-flag, c-flag. Definition: reg-direct-p (mode) = (mode = list (f, f)) Definition: reg-indirect-p (mode) = (mode = list (t, f)) Definition: pre-dec-p (mode) = (mode = list (f, t)) Definition: post-inc-p (mode) = (mode = list (t, t)) Event: Enable reg-direct-p; name this event ‘reg-direct-p-off’. Event: Enable reg-indirect-p; name this event ‘reg-indirect-p-off’. Event: Enable pre-dec-p; name this event ‘pre-dec-p-off’. Event: Enable post-inc-p; name this event ‘post-inc-p-off’. Event: Let us define the theory reg-mode-theory to consist of the following events: reg-direct-p, reg-indirect-p, pre-dec-p, post-inc-p.

Definition: store-resultp (store-cc, flags) = if store-cc = list (f, f, f, f) then ¬ c-flag (flags)

elseif store-cc = list (t, f, f, f) then c-flag (flags) elseif store-cc = list (f, t, f, f) then ¬ v-flag (flags) elseif store-cc = list (t, t, f, f) then v-flag (flags) elseif store-cc = list (f, f, t, f) then ¬ n-flag (flags) elseif store-cc = list (t, f, t, f) then n-flag (flags) elseif store-cc = list (f, t, t, f) then ¬ z-flag (flags) elseif store-cc = list (t, t, t, f) then z-flag (flags) elseif store-cc = list (f, f, f, t) then (¬ c-flag (flags)) ∧ (¬ z-flag (flags)) elseif store-cc = list (t, f, f, t) then c-flag (flags) ∨ z-flag (flags) elseif store-cc = list (f, t, f, t) then (n-flag (flags) ∧ v-flag (flags))

∨ ((¬ n-flag (flags)) ∧ (¬ v-flag (flags))) elseif store-cc = list (t, t, f, t) then (n-flag (flags) ∧ (¬ v-flag (flags)))

∨ ((¬ n-flag (flags)) ∧ v-flag (flags)) elseif store-cc = list (f, f, t, t) then (n-flag (flags) ∧ v-flag (flags) ∧ (¬ z-flag (flags)))

∨ ((¬ n-flag (flags))

∧ (¬ v-flag (flags)) ∧ (¬ z-flag (flags)))

elseif store-cc = list (t, f, t, t) then z-flag (flags)

∨ (n-flag (flags) ∧ (¬ v-flag (flags))) ∨ ((¬ n-flag (flags)) ∧ v-flag (flags))

elseif store-cc = list (f, t, t, t) then t else f endif

Event: Enable store-resultp; name this event ‘store-resultp-off’.

Definition: update-flags (flags, set-flags, cvzbv) = list (b-if (z-set (set-flags), zb (cvzbv), z-flag (flags)),

b-if (n-set (set-flags), n (cvzbv), n-flag (flags)), b-if (v-set (set-flags), v (cvzbv), v-flag (flags)), b-if (c-set (set-flags), c (cvzbv), c-flag (flags)))

Event: Enable update-flags; name this event ‘update-flags-off’.

Definition: regs (state) = nth (0, state)

Definition: flags (state) = nth (1, state)

Event: Enable regs; name this event ‘regs-off’.

Event: Enable flags; name this event ‘flags-off’.

Definition: fm9001-alu-operation (regs, flags, mem, ins, operand-a, operand-b, b-address) = list (list (if store-resultp (store-cc (ins), flags)

∧ reg-direct-p (mode-b (ins)) then write-mem (rn-b (ins),

regs,

bv (v-alu (c-flag (flags), operand-a, operand-b, op-code (ins))))

else regs endif, update-flags (flags,

set-flags (ins), v-alu (c-flag (flags), operand-a, operand-b, op-code (ins)))),

if store-resultp (store-cc (ins), flags) ∧ (¬ reg-direct-p (mode-b (ins)))

then write-mem (b-address, mem, bv (v-alu (c-flag (flags),

operand-a, operand-b, op-code (ins))))

else mem endif)

Definition: fm9001-operand-b (regs, flags, mem, ins, operand-a) = fm9001-alu-operation (if pre-dec-p (mode-b (ins))

then write-mem (rn-b (ins), regs, v-dec (read-mem (rn-b (ins), regs)))

elseif post-inc-p (mode-b (ins)) then write-mem (rn-b (ins),

regs,

v-inc (read-mem (rn-b (ins), regs))) else regs endif, flags, mem, ins, operand-a, if reg-direct-p (mode-b (ins)) then read-mem (rn-b (ins), regs) else read-mem (if pre-dec-p (mode-b (ins))

then v-dec (read-mem (rn-b (ins),

regs))

else read-mem (rn-b (ins),

regs) endif,

mem) endif,

if pre-dec-p (mode-b (ins))

then v-dec (read-mem (rn-b (ins), regs))

else read-mem (rn-b (ins), regs) endif)

Definition: fm9001-operand-a (regs, flags, mem, ins) = fm9001-operand-b (if a-immediate-p (ins) then regs

elseif pre-dec-p (mode-a (ins)) then write-mem (rn-a (ins),

regs,

v-dec (read-mem (rn-a (ins), regs)))

elseif post-inc-p (mode-a (ins)) then write-mem (rn-a (ins),

regs,

v-inc (read-mem (rn-a (ins), regs)))

else regs endif, flags, mem, ins, if a-immediate-p (ins) then sign-extend (a-immediate (ins), 32) elseif reg-direct-p (mode-a (ins)) then read-mem (rn-a (ins), regs) elseif pre-dec-p (mode-a (ins)) then read-mem (v-dec (read-mem (rn-a (ins), regs)), mem) else read-mem (read-mem (rn-a (ins), regs), mem) endif)

Definition: fm9001-fetch (regs, flags, mem, pc-reg) = fm9001-operand-a (write-mem (pc-reg, regs, v-inc (read-mem (pc-reg, regs))),

flags, mem, read-mem (read-mem (pc-reg, regs), mem))

Definition: fm9001-step (state, pc-reg) = fm9001-fetch (regs (car (state)), flags (car (state)), cadr (state), pc-reg)

Event: Enable fm9001-step; name this event ‘fm9001-step-off’.

Definition: fm9001 (state, n) = if n ≃ 0 then state

else fm9001 (fm9001-step (state, nat-to-v (15, reg-size)), n − 1) endif

Event: Enable fm9001; name this event ‘fm9001-off’.

Definition: fm9001-interpreter (state, pc-reg, n) = if n ≃ 0 then state

else fm9001-interpreter (fm9001-step (state, pc-reg), pc-reg, n − 1) endif

Event: Enable fm9001-interpreter; name this event ‘fm9001-interpreter-off’.

Theorem: open-fm9001-interpreter ((n ≃ 0) → (fm9001-interpreter (state, pc-reg, n) = state)) ∧ ((n ≄ 0)

→ (fm9001-interpreter (state, pc-reg, n)

= fm9001-interpreter (fm9001-step (state, pc-reg), pc-reg, n − 1)))

Definition: fm9001-intr (state, pc-reg-input) = if pc-reg-input ≃ nil then state

else fm9001-intr (fm9001-step (state, car (pc-reg-input)), cdr (pc-reg-input)) endif

Event: Enable fm9001-intr; name this event ‘fm9001-intr-off’.

Theorem: properp-length-ir-accessors properp (a-immediate (i-reg)) ∧ (length (a-immediate (i-reg)) = 9) ∧ properp (rn-a (i-reg))

∧ (length (rn-a (i-reg)) = 4) ∧ properp (mode-a (i-reg)) ∧ (length (mode-a (i-reg)) = 2) ∧ properp (rn-b (i-reg)) ∧ (length (rn-b (i-reg)) = 4) ∧ properp (mode-b (i-reg)) ∧ (length (mode-b (i-reg)) = 2) ∧ properp (set-flags (i-reg)) ∧ (length (set-flags (i-reg)) = 4) ∧ properp (store-cc (i-reg)) ∧ (length (store-cc (i-reg)) = 4) ∧ properp (op-code (i-reg)) ∧ (length (op-code (i-reg)) = 4)

Theorem: bvp-ir-accessors (bvp (i-reg) ∧ (length (i-reg) = 32)) → (bvp (a-immediate (i-reg))

∧ bvp (rn-a (i-reg)) ∧ bvp (mode-a (i-reg)) ∧ bvp (rn-b (i-reg)) ∧ bvp (mode-b (i-reg)) ∧ bvp (set-flags (i-reg)) ∧ bvp (store-cc (i-reg)) ∧ bvp (op-code (i-reg)))

Theorem: boolp-a-immediate-p (bvp (ir) ∧ (length (ir) = 32)) → boolp (a-immediate-p (ir))

Theorem: bvp-length-update-flags bvp (update-flags (flags, set-flags, cvzbv)) ∧ (length (update-flags (flags, set-flags, cvzbv)) = 4)

Theorem: boolp-c-flag-update-flags boolp (c-flag (update-flags (flags, set-flags, cvzbv)))

Theorem: bvp-a-immediate (bvp (ir) ∧ (8 < length (ir))) → bvp (a-immediate (ir))

Theorem: reg-direct->not-reg-indirect reg-direct-p (mode) → ((reg-indirect-p (mode) = f)

∧ (pre-dec-p (mode) = f) ∧ (post-inc-p (mode) = f))

Theorem: boolp-store-result-p (bvp (flags) ∧ (length (flags) = 4)) → boolp (store-resultp (store-cc, flags))

Theorem: unary-op-code-p-op-code->v-alu=v-alu-1 unary-op-code-p (op-code (i-reg)) → (v-alu (c, a, b, op-code (i-reg)) = v-alu-1 (c, a, op-code (i-reg)))

Definition: intp (x) = ((x ∈ N) ∨ negativep (x))

Definition: int-to-bv (x, size) = if negativep (x)

then v-subtracter-output (f, nat-to-v (negative-guts (x), size), nat-to-v (0, size))

else nat-to-v (x, size) endif

Definition: bv-to-int (x) = if nth (length (x) − 1, x) then − v-to-nat (v-inc (v-not (x)))

else v-to-nat (x) endif

Definition: c10-tf (x) = if x ≃ nil then nil

else cons (if car (x) = 0 then f else t endif, c10-tf (cdr (x))) endif

Definition: c10-int (x) = bv-to-int (c10-tf (x))

Definition: add (x, y) = if negativep (x)

then if negativep (y) then − (negative-guts (x) + negative-guts (y)) elseif y < negative-guts (x) then − (negative-guts (x) − y) else y − negative-guts (x) endif

elseif negativep (y)

then if x < negative-guts (y) then − (negative-guts (y) − x)

else x − negative-guts (y) endif else x + y endif

Definition: integer-minus (x) = if negativep (x) then negative-guts (x)

elseif x ≃ 0 then 0

else − x endif

Definition: sub (x, y) = add (x, integer-minus (y))

Definition: exp2 (y) = if y ≃ 0 then 1

else 2 ∗ exp2 (y − 1) endif

Theorem: quotient-stuff ((n ≠ 0) ∧ (n ∈ N)) → ((n ÷ 2) < n)

Definition: log2 (n) = if (n ≃ 0) ∨ (n = 1) then 0

else 1 + log2 (n ÷ 2) endif

Definition: asm-register (x) = case on x:

case = r0 then list (f, f, f, f, f, f) case = r1 then list (t, f, f, f, f, f) case = r2 then list (f, t, f, f, f, f) case = r3 then list (t, t, f, f, f, f) case = r4 then list (f, f, t, f, f, f) case = r5 then list (t, f, t, f, f, f) case = r6 then list (f, t, t, f, f, f) case = r7 then list (t, t, t, f, f, f) case = r8 then list (f, f, f, t, f, f) case = r9 then list (t, f, f, t, f, f) case = r10 then list (f, t, f, t, f, f) case = r11 then list (t, t, f, t, f, f) case = r12 then list (f, f, t, t, f, f) case = r13 then list (t, f, t, t, f, f) case = lnk then list (t, f, t, t, f, f) case = r14 then list (f, t, t, t, f, f) case = tos then list (f, t, t, t, f, f) case = r15 then list (t, t, t, t, f, f) case = pc then list (t, t, t, t, f, f) case = r0 then list (f, f, f, f, t, f) case = r1 then list (t, f, f, f, t, f) case = r2 then list (f, t, f, f, t, f) case = r3 then list (t, t, f, f, t, f) case = r4 then list (f, f, t, f, t, f) case = r5 then list (t, f, t, f, t, f) case = r6 then list (f, t, t, f, t, f) case = r7 then list (t, t, t, f, t, f) case = r8 then list (f, f, f, t, t, f) case = r9 then list (t, f, f, t, t, f) case = r10 then list (f, t, f, t, t, f) case = r11 then list (t, t, f, t, t, f) case = r12 then list (f, f, t, t, t, f) case = r13 then list (t, f, t, t, t, f) case = lnk then list (t, f, t, t, t, f) case = r14 then list (f, t, t, t, t, f) case = tos then list (f, t, t, t, t, f) case = r15 then list (t, t, t, t, t, f) case = pc then list (t, t, t, t, t, f) case = r0then list (f, f, f, f, f, t) case = r1then list (t, f, f, f, f, t) case = r2then list (f, t, f, f, f, t) case = r3then list (t, t, f, f, f, t) case = r4then list (f, f, t, f, f, t) case = r5then list (t, f, t, f, f, t) case = r6then list (f, t, t, f, f, t) case = r7then list (t, t, t, f, f, t) case = r8then list (f, f, f, t, f, t) case = r9then list (t, f, f, t, f, t) case = r10then list (f, t, f, t, f, t) case = r11then list (t, t, f, t, f, t) case = r12then list (f, f, t, t, f, t) case = r13then list (t, f, t, t, f, t) case = lnkthen list (t, f, t, t, f, t) case = r14then list (f, t, t, t, f, t) case = tosthen list (f, t, t, t, f, t) case = r15then list (t, t, t, t, f, t) case = pcthen list (t, t, t, t, f, t) case = r0+ then list (f, f, f, f, t, t) case = r1+ then list (t, f, f, f, t, t) case = r2+ then list (f, t, f, f, t, t) case = r3+ then list (t, t, f, f, t, t) case = r4+ then list (f, f, t, f, t, t) case = r5+ then list (t, f, t, f, t, t) case = r6+ then list (f, t, t, f, t, t) case = r7+ then list (t, t, t, f, t, t) case = r8+ then list (f, f, f, t, t, t) case = r9+ then list (t, f, f, t, t, t) case = r10+ then list (f, t, f, t, t, t) case = r11+ then list (t, t, f, t, t, t) case = r12+ then list (f, f, t, t, t, t) case = r13+ then list (t, f, t, t, t, t) case = lnk+ then list (t, f, t, t, t, t) case = r14+ then list (f, t, t, t, t, t) case = tos+ then list (f, t, t, t, t, t) case = r15+ then list (t, t, t, t, t, t) case = pc+ then list (t, t, t, t, t, t) otherwise list (f, f, f, f, f, f) endcase

Definition: asm-register-a (x) = if intp (x) then append (int-to-bv (x, 9), list (t))

else append (asm-register (x), list (f, f, f, f)) endif

Definition: asm-op-code (x)

= case on x: case = move then list (f, f, f, f) case = inc then list (t, f, f, f) case = addc then list (f, t, f, f) case = add then list (t, t, f, f) case = neg then list (f, f, t, f) case = dec then list (t, f, t, f) case = subb then list (f, t, t, f) case = sub then list (t, t, t, f) case = ror then list (f, f, f, t) case = asr then list (t, f, f, t) case = lsr then list (f, t, f, t) case = xor then list (t, t, f, t) case = or then list (f, f, t, t) case = and then list (t, f, t, t) case = not then list (f, t, t, t) case = m15 then list (t, t, t, t) otherwise list (f, f, f, f) endcase

Definition: asm-store-cc (x) = case on x:

case = cc then list (f, f, f, f) case = cs then list (t, f, f, f) case = vc then list (f, t, f, f) case = vs then list (t, t, f, f) case = pl then list (f, f, t, f) case = nc then list (f, f, t, f) case = mi then list (t, f, t, f) case = ns then list (t, f, t, f) case = ne then list (f, t, t, f) case = zc then list (f, t, t, f) case = eq then list (t, t, t, f) case = zs then list (t, t, t, f) case = hi then list (f, f, f, t) case = ls then list (t, f, f, t) case = ge then list (f, t, f, t) case = lt then list (t, t, f, t) case = gt then list (f, f, t, t) case = le then list (t, f, t, t) case = t then list (f, t, t, t) case = f then list (t, t, t, t) otherwise list (f, f, f, f) endcase

Definition: asm-flags (x) = if x = 't then list (t, t, t, t)

else list (car (unpack ('z)) ∈ unpack (x), car (unpack ('n)) ∈ unpack (x), car (unpack ('v)) ∈ unpack (x), car (unpack ('c)) ∈ unpack (x)) endif

Definition: resolve-names (list, cnt, alist) = if list ≃ nil then alist

elseif litatom (car (list))

then resolve-names (cdr (list), cnt, cons (cons (car (list), cnt), alist)) else resolve-names (cdr (list), 1 + cnt, alist) endif

Definition: update-list (list, alist) = if list ≃ nil then nil

else cons (if listp (car (list)) ∧ (caar (list) = 'value) then eval$ (t, cadar (list), alist) else car (list) endif, update-list (cdr (list), alist)) endif

Definition: asm-line (line) = if intp (line) then int-to-bv (line, 32)

else append (asm-register-a (caddddr (line)),

append (asm-register (cadddr (line)),

append (asm-flags (caddr (line)),

append (asm-store-cc (cadr (line)),

append (asm-op-code (car (line)), list (f, f, f, f)))))) endif

Definition: asm-list (list) = if list ≃ nil then nil

elseif litatom (car (list)) then asm-list (cdr (list))

else cons (asm-line (car (list)), asm-list (cdr (list))) endif

Definition: asm (list) = asm-list (update-list (list, resolve-names (list, 0, nil)))

Definition: t-and-f-to-1-and-0 (list) = if list ≃ nil then nil

else cons (if falsep (car (list)) then 0 else 1 endif, t-and-f-to-1-and-0 (cdr (list))) endif

Definition: asm-to-1-and-0 (list) = if list ≃ nil then nil

else cons (t-and-f-to-1-and-0 (car (list)), asm-to-1-and-0 (cdr (list))) endif Definition: v-to-nat-all (x) = if x ≃ nil then nil

else cons (v-to-nat (car (x)), v-to-nat-all (cdr (x))) endif

Definition: v-to-0s-through-fs (x, collect) = if x ≃ nil then collect

else v-to-0s-through-fs (cddddr (x),

cons (case on v-to-nat (firstn (4, x)): case = 0 then cadr (unpack ('x0)) case = 1 then cadr (unpack ('x1)) case = 2 then cadr (unpack ('x2)) case = 3 then cadr (unpack ('x3)) case = 4 then cadr (unpack ('x4)) case = 5 then cadr (unpack ('x5)) case = 6 then cadr (unpack ('x6)) case = 7 then cadr (unpack ('x7)) case = 8 then cadr (unpack ('x8)) case = 9 then cadr (unpack ('x9)) case = 10 then cadr (unpack ('xa)) case = 11 then cadr (unpack ('xb)) case = 12 then cadr (unpack ('xc)) case = 13 then cadr (unpack ('xd)) case = 14 then cadr (unpack ('xe)) otherwise cadr (unpack ('xf)) endcase, collect)) endif

Definition: v-to-hex (x) = pack (cons (car (unpack ('x)), v-to-0s-through-fs (x, 0)))

Definition: v-to-hex-all (x) = if x ≃ nil then nil

else cons (v-to-hex (car (x)), v-to-hex-all (cdr (x))) endif

Definition: make-pairs (list) = if (list ≃ nil) ∨ (cdr (list) ≃ nil) then nil

else cons (cons (car (list), cadr (list)), make-pairs (cddr (list))) endif

Definition: add-ram-marker (list-mem) = if list-mem ≃ nil then nil

else cons (ram (car (list-mem)), add-ram-marker (cdr (list-mem))) endif

Definition: list-to-mem3 (mem, depth) = if depth ≃ 0 then mem

else list-to-mem3 (make-pairs (mem), depth − 1) endif

Definition: list-to-mem2 (mem, depth) = car (list-to-mem3 (mem, depth))

Definition: list-to-mem1 (mem, default) = list-to-mem2 (add-ram-marker (append (mem,

make-list (exp2 (1 + log2 (length (mem))) − length (mem), default))),

1 + log2 (length (mem)))

Definition: stub-right (mem, levels, default) = if levels ≃ 0 then mem

else cons (stub-right (mem, levels − 1, default), stub (default)) endif

Definition: list-to-mem (mem, size, default) = if size < (1 + log2 (length (mem)))

    then '(list-to-mem= insufficient-size)

else stub-right (list-to-mem1 (mem, default), size − (1 + log2 (length (mem))), default) endif

Definition: list-to-tree-mem (mem) = list-to-mem (mem, 32, make-list (32, f))

Definition: mem-to-list (mem) = if listp (mem)

then append (mem-to-list (car (mem)), mem-to-list (cdr (mem)))

elseif stubp (mem) then nil

elseif ramp (mem) then list (ram-guts (mem)) elseif romp (mem) then list (rom-guts (mem)) else mem endif

Definition: un-fm9001 (state) = list (list (v-to-nat-all (mem-to-list (regs (car (state)))),

z-flag (flags (car (state))), n-flag (flags (car (state))), v-flag (flags (car (state))), c-flag (flags (car (state)))), v-to-hex-all (mem-to-list (cadr (state))))

Definition: execute-fm9001 (n, tree-pgm) = un-fm9001 (fm9001 (list (list (list-to-mem (make-list (15, nat-to-v (0, 32)),

                                      4,

make-list (32, f)),

list (t, f, f, f)), tree-pgm),

n))

Definition: asm-and-fm9001 (n, program) = execute-fm9001 (n, list-to-mem (asm (program), 32, make-list (32, f)))

Definition: store-resultp-mux (s0 , s1 , s2 , d0 , d1 , d2 , d3 , d4 , d5 , d6 ) = ao2 (b-not (s2 ),

ao2 (b-not (s1 ), ao2 (b-not (s0 ), d0 , s0 , d1 ), s1 , ao2 (b-not (s0 ), d2 , s0 , d3 )), s2 , ao2 (b-not (s1 ), ao2 (b-not (s0 ), d4 , s0 , d5 ), s1 , b-nand (b-not (s0 ), d6 )))

Definition: f$store-resultp-mux (s0 , s1 , s2 , d0 , d1 , d2 , d3 , d4 , d5 , d6 ) = f$ao2 (f-not (s2 ),

f$ao2 (f-not (s1 ), f$ao2 (f-not (s0 ), d0 , s0 , d1 ), s1 , f$ao2 (f-not (s0 ), d2 , s0 , d3 )), s2 , f$ao2 (f-not (s1 ),

f$ao2 (f-not (s0 ), d4 , s0 , d5 ), s1 , f-nand (f-not (s0 ), d6 )))

Event: Enable f$store-resultp-mux; name this event ‘f$store-resultp-mux-off’.

Definition: store-resultp-mux*

= '(store-resultp-mux
      (s0 s1 s2 d0 d1 d2 d3 d4 d5 d6)
      (w-13)
      ((g-10 (w-10) b-not (s0))
       (g-11 (w-11) b-nand (w-10 d6))
       (g-9 (w-9) ao2 (w-10 d4 s0 d5))
       (g-7 (w-7) b-not (s1))
       (g-12 (w-12) ao2 (w-7 w-9 s1 w-11))
       (g-5 (w-5) ao2 (w-10 d2 s0 d3))
       (g-3 (w-3) ao2 (w-10 d0 s0 d1))
       (g-6 (w-6) ao2 (w-7 w-3 s1 w-5))
       (g-0 (w-0) b-not (s2))
       (g-13 (w-13) ao2 (w-0 w-6 s2 w-12)))
      nil)

Definition: store-resultp-mux& (netlist) = ((lookup-module ('store-resultp-mux, netlist)

= store-resultp-mux*)

∧ b-nand& (delete-module ('store-resultp-mux, netlist)) ∧ b-not& (delete-module ('store-resultp-mux, netlist)) ∧ ao2& (delete-module ('store-resultp-mux, netlist)))

Event: Enable store-resultp-mux&; name this event ‘store-resultp-mux&-off’.

Definition: store-resultp-mux$netlist = cons (store-resultp-mux*,

(b-nand$netlist ∪ b-not$netlist) ∪ ao2$netlist)

Theorem: store-resultp-mux$value store-resultp-mux& (netlist) → (dual-eval (0,

              'store-resultp-mux,

list (s0 , s1 , s2 , d0 , d1 , d2 , d3 , d4 , d5 , d6 ), state, netlist)

= list (f$store-resultp-mux (s0 , s1 , s2 , d0 , d1 , d2 , d3 , d4 , d5 , d6 )))

Event: Enable store-resultp-mux$value; name this event ‘store-resultp-mux$value-off’.

Theorem: f$store-resultp-mux=store-resultp-mux (boolp (s0 ) ∧ boolp (s1 ) ∧ boolp (s2 ) ∧ boolp (d0 ) ∧ boolp (d1 ) ∧ boolp (d2 ) ∧ boolp (d3 ) ∧ boolp (d4 ) ∧ boolp (d5 ) ∧ boolp (d6 )) → (f$store-resultp-mux (s0 , s1 , s2 , d0 , d1 , d2 , d3 , d4 , d5 , d6 )

= store-resultp-mux (s0 , s1 , s2 , d0 , d1 , d2 , d3 , d4 , d5 , d6 ))

Definition: b-store-resultp (store-cc, flags) = b-xor (car (store-cc),

store-resultp-mux (cadr (store-cc), caddr (store-cc), cadddr (store-cc), cadddr (flags), caddr (flags), cadr (flags), car (flags), b-or (cadddr (flags), car (flags)), b-xor (cadr (flags), caddr (flags)), b-or (car (flags),

b-xor (cadr (flags), caddr (flags)))))

Event: Enable b-store-resultp; name this event ‘b-store-resultp-off’.

Definition: f$b-store-resultp (store-cc, flags) = f-xor (car (store-cc),

f$store-resultp-mux (cadr (store-cc), caddr (store-cc), cadddr (store-cc), cadddr (flags), caddr (flags), cadr (flags), car (flags), f-or (cadddr (flags), car (flags)), f-xor (cadr (flags), caddr (flags)), f-or (car (flags),

f-xor (cadr (flags), caddr (flags)))))

Event: Enable f$b-store-resultp; name this event ‘f$b-store-resultp-off’.

Theorem: f$b-store-resultp=b-store-resultp (bvp (store-cc) ∧ (length (store-cc) = 4) ∧ bvp (flags) ∧ (length (flags) = 4)) → (f$b-store-resultp (store-cc, flags)

= b-store-resultp (store-cc, flags))

Definition: b-store-resultp*

= '(b-store-resultp
      (s0 s1 s2 s3 z n v c)
      (result)
      ((g0 (cz) b-or (c z))
       (g1 (nv) b-xor (n v))
       (g2 (znv) b-or (z nv))
       (g3
        (mux)
        store-resultp-mux
        (s1 s2 s3 c v n z cz nv znv))
       (g4 (result) b-xor (s0 mux)))
      nil)

Definition: b-store-resultp& (netlist) = ((lookup-module ('b-store-resultp, netlist) = b-store-resultp*)

∧ b-or& (delete-module ('b-store-resultp, netlist)) ∧ store-resultp-mux& (delete-module ('b-store-resultp,

netlist))

∧ b-xor& (delete-module ('b-store-resultp, netlist)))

Event: Enable b-store-resultp&; name this event ‘b-store-resultp&-off’.

Definition: b-store-resultp$netlist = cons (b-store-resultp*,

(b-or$netlist ∪ store-resultp-mux$netlist) ∪ b-xor$netlist)

Theorem: b-store-resultp=store-resultp$help (boolp (s0 ) ∧ boolp (s1 ) ∧ boolp (s2 ) ∧ boolp (s3 ) ∧ boolp (s4 ) ∧ boolp (s5 ) ∧ boolp (s6 ) ∧ boolp (s7 )) → (b-store-resultp (list (s0 , s1 , s2 , s3 ), list (s4 , s5 , s6 , s7 ))

= store-resultp (list (s0 , s1 , s2 , s3 ), list (s4 , s5 , s6 , s7 )))

Theorem: b-store-resultp=store-resultp (bvp (store-cc) ∧ (length (store-cc) = 4) ∧ bvp (flags) ∧ (length (flags) = 4)) → (b-store-resultp (store-cc, flags) = store-resultp (store-cc, flags))

Theorem: b-store-resultp$value (b-store-resultp& (netlist) ∧ properp (store-cc) ∧ (length (store-cc) = 4) ∧ properp (store-cc) ∧ (length (flags) = 4)) → (dual-eval (0,

             'b-store-resultp,

append (store-cc, flags), state, netlist)

= list (f$b-store-resultp (store-cc, flags)))

Definition: f$unary-op-code-p (op) = f-nand4 (f-nand (f-not (cadddr (op)), f-not (cadr (op))),

f-nand (f-not (caddr (op)), f-not (cadr (op))), f-nand3 (cadddr (op), cadr (op), f-not (car (op))), f-nand3 (cadddr (op), caddr (op), cadr (op)))

Event: Enable f$unary-op-code-p; name this event ‘f$unary-op-code-p-off’.

Theorem: f$unary-op-code-p=unary-op-code-p (bvp (op) ∧ (length (op) = 4)) → (f$unary-op-code-p (op) = unary-op-code-p (op))

Definition: unary-op-code-p*

= '(unary-op-code-p
      (op0 op1 op2 op3)
      (z)
      ((g0 (op0-) b-not (op0))
       (g1 (op1-) b-not (op1))
       (g2 (op2-) b-not (op2))
       (g3 (op3-) b-not (op3))
       (g4 (s0) b-nand (op3- op1-))
       (g5 (s1) b-nand (op2- op1-))
       (g6 (s2) b-nand3 (op3 op1 op0-))
       (g7 (s3) b-nand3 (op3 op2 op1))
       (g8 (z) b-nand4 (s0 s1 s2 s3)))
      nil)

Definition: unary-op-code-p& (netlist) = ((lookup-module ('unary-op-code-p, netlist) = unary-op-code-p*)

∧ b-not& (delete-module ('unary-op-code-p, netlist)) ∧ b-nand& (delete-module ('unary-op-code-p, netlist)) ∧ b-nand3& (delete-module ('unary-op-code-p, netlist)) ∧ b-nand4& (delete-module ('unary-op-code-p, netlist)))

Event: Enable unary-op-code-p&; name this event ‘unary-op-code-p&-off’.

Definition: unary-op-code-p$netlist = cons (unary-op-code-p*,

((b-not$netlist ∪ b-nand$netlist) ∪ b-nand3$netlist) ∪ b-nand4$netlist)

Theorem: unary-op-code-p$value unary-op-code-p& (netlist) → (dual-eval (0, 'unary-op-code-p, op-code, state, netlist)

= list (f$unary-op-code-p (op-code)))

Event: Enable unary-op-code-p$value; name this event ‘unary-op-code-p$value-off’.

Definition: f$decode-reg-mode (m) = list (f-nor (car (m), cadr (m)), f-nor (car (m), f-not (cadr (m))), id (cadr (m)))

Event: Enable f$decode-reg-mode; name this event ‘f$decode-reg-mode-off’.

Definition: decode-reg-mode*

= '(decode-reg-mode
      (m0 m1)
      (direct pre-dec side-effect)
      ((g0 (direct) b-nor (m0 m1))
       (g1 (m1-) b-not (m1))
       (g2 (pre-dec) b-nor (m0 m1-))
       (g3 (side-effect) id (m1)))
      nil)

Definition: decode-reg-mode& (netlist) = ((lookup-module ('decode-reg-mode, netlist) = decode-reg-mode*)

∧ b-not& (delete-module ('decode-reg-mode, netlist)) ∧ b-nor& (delete-module ('decode-reg-mode, netlist)) ∧ id& (delete-module ('decode-reg-mode, netlist)))

Event: Enable decode-reg-mode&; name this event ‘decode-reg-mode&-off’.

Definition: decode-reg-mode$netlist = cons (decode-reg-mode*,

(b-not$netlist ∪ b-nor$netlist) ∪ id$netlist)

Theorem: decode-reg-mode$value decode-reg-mode& (netlist) → (dual-eval (0, 'decode-reg-mode, mode, state, netlist)

= f$decode-reg-mode (mode))

Event: Enable decode-reg-mode$value; name this event ‘decode-reg-mode$value-off’.

Theorem: f$decode-reg-mode-as-reg-mode (bvp (mode) ∧ (length (mode) = 2)) → (f$decode-reg-mode (mode)

= list (reg-direct-p (mode), pre-dec-p (mode), pre-dec-p (mode) ∨ post-inc-p (mode)))

Definition: f$select-op-code (select, dec, op) = list (f-nand (select, f-not (car (op))),

f-and (select, cadr (op)), f-if (select, caddr (op), dec), f-and (select, cadddr (op)))

Event: Enable f$select-op-code; name this event ‘f$select-op-code-off’.

Theorem: properp-length-f$select-op-code properp (f$select-op-code (select, dec, op)) ∧ (length (f$select-op-code (select, dec, op)) = 4)

Theorem: f$select-op-code-selects (boolp (select) ∧ boolp (dec) ∧ bvp (op) ∧ (length (op) = 4)) → (f$select-op-code (select, dec, op)

= v-if (select, op, v-if (dec, alu-dec-op, alu-inc-op)))

Definition: select-op-code*

= '(select-op-code
      (select dec op0 op1 op2 op3)
      (z0 z1 z2 z3)
      ((i0 (op0-) b-not (op0))
       (g0 (z0) b-nand (select op0-))
       (g1 (z1) b-and (select op1))
       (g2 (z2) b-if (select op2 dec))
       (g3 (z3) b-and (select op3)))
      nil)

Definition: select-op-code& (netlist) = ((lookup-module ('select-op-code, netlist) = select-op-code*)

∧ b-not& (delete-module ('select-op-code, netlist)) ∧ b-nand& (delete-module ('select-op-code, netlist)) ∧ b-if& (delete-module ('select-op-code, netlist)) ∧ b-and& (delete-module ('select-op-code, netlist)))

Event: Enable select-op-code&; name this event ‘select-op-code&-off’.

Definition: select-op-code$netlist = cons (select-op-code*,

((b-not$netlist ∪ b-nand$netlist) ∪ b-if$netlist) ∪ b-and$netlist)

Theorem: select-op-code$value (select-op-code& (netlist) ∧ properp (op) ∧ (length (op) = 4)) → (dual-eval (0,

              'select-op-code,

cons (select, cons (dec, op)), state, netlist)

= f$select-op-code (select, dec, op))

Event: Enable select-op-code$value; name this event ‘select-op-code$value-off’.

Definition: v-if-f-4*

= '(v-if-f-4
      (c a0 a1 a2 a3)
      (z0 z1 z2 z3)
      ((cb (c-) b-not (c))
       (g0 (z0) b-and (c- a0))
       (g1 (z1) b-and (c- a1))
       (g2 (z2) b-and (c- a2))
       (g3 (z3) b-and (c- a3)))
      nil)

Definition: v-if-f-4& (netlist) = ((lookup-module ('v-if-f-4, netlist) = v-if-f-4*)

∧ b-not& (delete-module ('v-if-f-4, netlist)) ∧ b-and& (delete-module ('v-if-f-4, netlist)))

Event: Enable v-if-f-4&; name this event ‘v-if-f-4&-off’.

Definition: v-if-f-4$netlist = cons (v-if-f-4*, b-not$netlist ∪ b-and$netlist)

Definition: f$v-if-f-4 (c, a) = list (f-and (f-not (c), car (a)),

f-and (f-not (c), cadr (a)), f-and (f-not (c), caddr (a)), f-and (f-not (c), cadddr (a)))

Event: Enable f$v-if-f-4; name this event ‘f$v-if-f-4-off’.

Theorem: properp-length-f$v-if-f-4 properp (f$v-if-f-4 (c, a)) ∧ (length (f$v-if-f-4 (c, a)) = 4)

Theorem: v-if-f-4$value v-if-f-4& (netlist) → (dual-eval (0, 'v-if-f-4, cons (c, a), state, netlist)

= f$v-if-f-4 (c, a))

Theorem: f$v-if-f-4=fv-if boolp (c) → (f$v-if-f-4 (c, a) = fv-if (c, make-list (4, f), a))

Theorem: v-if-f-4$reset-value v-if-f-4& (netlist) → (dual-eval (0, 'v-if-f-4, cons (t, a), state, netlist)

= make-list (4, f))

Event: Enable v-if-f-4$reset-value; name this event ‘v-if-f-4$reset-value-off’.

Definition: fanout-4*

= '(fanout-4
      (a)
      (z0 z1 z2 z3)
      ((aa (aa) b-buf (a))
       (g0 (z0) id (aa))
       (g1 (z1) id (aa))
       (g2 (z2) id (aa))
       (g3 (z3) id (aa)))
      nil)

Definition: fanout-4& (netlist) = ((lookup-module ('fanout-4, netlist) = fanout-4*)

∧ b-buf& (delete-module ('fanout-4, netlist)) ∧ id& (delete-module ('fanout-4, netlist)))

Event: Enable fanout-4&; name this event ‘fanout-4&-off’.

Definition: fanout-4$netlist = cons (fanout-4*, b-buf$netlist ∪ id$netlist)

Theorem: fanout-4$value fanout-4& (netlist) → (dual-eval (0, 'fanout-4, list (a), state, netlist)

= make-list (4, threefix (a)))

Event: Enable fanout-4$value; name this event ‘fanout-4$value-off’.

Definition: fanout-5*

= '(fanout-5
      (a)
      (z0 z1 z2 z3 z4)
      ((aa (aa) b-buf (a))
       (g0 (z0) id (aa))
       (g1 (z1) id (aa))
       (g2 (z2) id (aa))
       (g3 (z3) id (aa))
       (g4 (z4) id (aa)))
      nil)

Definition: fanout-5& (netlist) = ((lookup-module ('fanout-5, netlist) = fanout-5*)

∧ b-buf& (delete-module ('fanout-5, netlist)) ∧ id& (delete-module ('fanout-5, netlist)))

Event: Enable fanout-5&; name this event ‘fanout-5&-off’.

Definition: fanout-5$netlist = cons (fanout-5*, b-buf$netlist ∪ id$netlist)

Theorem: fanout-5$value fanout-5& (netlist) → (dual-eval (0, 'fanout-5, list (a), state, netlist)

= make-list (5, threefix (a)))

Event: Enable fanout-5$value; name this event ‘fanout-5$value-off’.

Definition: fanout-32*

= '(fanout-32
      (a)
      (s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
       s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27
       s28 s29 s30 s31)
      ((ga (aa) b-buf-pwr (a))
       (g0 (s0) id (aa))
       (g1 (s1) id (aa))
       (g2 (s2) id (aa))
       (g3 (s3) id (aa))
       (g4 (s4) id (aa))

(g5 (s5) id (aa))
(g6 (s6) id (aa))
(g7 (s7) id (aa))
(g8 (s8) id (aa))
(g9 (s9) id (aa))
(g10 (s10) id (aa))
(g11 (s11) id (aa))
(g12 (s12) id (aa))
(g13 (s13) id (aa))
(g14 (s14) id (aa))
(g15 (s15) id (aa))
(g16 (s16) id (aa))
(g17 (s17) id (aa))
(g18 (s18) id (aa))
(g19 (s19) id (aa))
(g20 (s20) id (aa))
(g21 (s21) id (aa))
(g22 (s22) id (aa))
(g23 (s23) id (aa))
(g24 (s24) id (aa))
(g25 (s25) id (aa))
(g26 (s26) id (aa))
(g27 (s27) id (aa))
(g28 (s28) id (aa))
(g29 (s29) id (aa))
(g30 (s30) id (aa))
(g31 (s31) id (aa)))
nil)

Definition: fanout-32& (netlist) = ((lookup-module ('fanout-32, netlist) = fanout-32*)

∧ b-buf-pwr& (delete-module ('fanout-32, netlist)) ∧ id& (delete-module ('fanout-32, netlist)))

Event: Enable fanout-32&; name this event ‘fanout-32&-off’.

Definition: fanout-32$netlist = cons (fanout-32*, b-buf-pwr$netlist ∪ id$netlist)

Theorem: fanout-32$value fanout-32& (netlist) → (dual-eval (0, 'fanout-32, list (a), state, netlist)

= make-list (32, threefix (a)))

Event: Enable fanout-32$value; name this event ‘fanout-32$value-off’.

Definition: f$decode-5 (s) = list (f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (caddddr (s)))), f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (caddddr (s)))), f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (caddddr (s)))), f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (caddddr (s)))), f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (caddddr (s)))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (caddddr (s)))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (caddddr (s)))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (caddddr (s)))),

f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))),

f-not (caddddr (s)))),

f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (caddddr (s)))),

f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)),

f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (cadddr (s)), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (caddr (s)), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (cadr (s))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (car (s)), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))),

f-nor (f-nand (f-not (f-not (car (s))), f-not (f-not (cadr (s)))),

f-nand3 (f-not (f-not (caddr (s))), f-not (f-not (cadddr (s))), f-not (f-not (caddddr (s))))))

Event: Enable f$decode-5; name this event ‘f$decode-5-off’.

Definition: decode-5 (s) = list (b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (caddddr (s)))), b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (caddddr (s)))), b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (caddddr (s)))), b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (caddddr (s)))), b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (caddddr (s)))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (caddddr (s)))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (caddddr (s)))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (caddddr (s)))),

b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))), b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (caddddr (s)))),

b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (cadddr (s)), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (cadr (s))), b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (caddr (s)), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (cadr (s))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (car (s)), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))),

b-nor (b-nand (b-not (b-not (car (s))), b-not (b-not (cadr (s)))),

b-nand3 (b-not (b-not (caddr (s))), b-not (b-not (cadddr (s))), b-not (b-not (caddddr (s))))))

Event: Enable decode-5; name this event ‘decode-5-off’.

Theorem: bvp-length-decode-5 bvp (decode-5 (s)) ∧ (length (decode-5 (s)) = 32)

Definition: decode-5*

= '(decode-5
(s0 s1 s2 s3 s4)
(x00 x10 x20 x30 x01 x11 x21 x31 x02 x12 x22 x32 x03
x13 x23 x33 x04 x14 x24 x34 x05 x15 x25 x35 x06 x16
x26 x36 x07 x17 x27 x37)
((gs0- (s0-) b-not (s0))

(gs1- (s1-) b-not (s1))
(gs2- (s2-) b-not (s2))
(gs3- (s3-) b-not (s3))
(gs4- (s4-) b-not (s4))
(gs0 (bs0) b-not (s0-))
(gs1 (bs1) b-not (s1-))
(gs2 (bs2) b-not (s2-))
(gs3 (bs3) b-not (s3-))
(gs4 (bs4) b-not (s4-))
(gl0 (l0) b-nand (s0- s1-))
(gl1 (l1) b-nand (bs0 s1-))
(gl2 (l2) b-nand (s0- bs1))
(gl3 (l3) b-nand (bs0 bs1))
(gh0 (h0) b-nand3 (s2- s3- s4-))
(gh1 (h1) b-nand3 (bs2 s3- s4-))
(gh2 (h2) b-nand3 (s2- bs3 s4-))
(gh3 (h3) b-nand3 (bs2 bs3 s4-))
(gh4 (h4) b-nand3 (s2- s3- bs4))
(gh5 (h5) b-nand3 (bs2 s3- bs4))
(gh6 (h6) b-nand3 (s2- bs3 bs4))
(gh7 (h7) b-nand3 (bs2 bs3 bs4))
(gx00 (x00) b-nor (l0 h0))
(gx10 (x10) b-nor (l1 h0))
(gx20 (x20) b-nor (l2 h0))
(gx30 (x30) b-nor (l3 h0))
(gx01 (x01) b-nor (l0 h1))
(gx11 (x11) b-nor (l1 h1))
(gx21 (x21) b-nor (l2 h1))
(gx31 (x31) b-nor (l3 h1))
(gx02 (x02) b-nor (l0 h2))
(gx12 (x12) b-nor (l1 h2))
(gx22 (x22) b-nor (l2 h2))
(gx32 (x32) b-nor (l3 h2))
(gx03 (x03) b-nor (l0 h3))
(gx13 (x13) b-nor (l1 h3))
(gx23 (x23) b-nor (l2 h3))
(gx33 (x33) b-nor (l3 h3))
(gx04 (x04) b-nor (l0 h4))
(gx14 (x14) b-nor (l1 h4))
(gx24 (x24) b-nor (l2 h4))
(gx34 (x34) b-nor (l3 h4))
(gx05 (x05) b-nor (l0 h5))
(gx15 (x15) b-nor (l1 h5))
(gx25 (x25) b-nor (l2 h5))

       (gx35 (x35) b-nor (l3 h5))
       (gx06 (x06) b-nor (l0 h6))
       (gx16 (x16) b-nor (l1 h6))
       (gx26 (x26) b-nor (l2 h6))
       (gx36 (x36) b-nor (l3 h6))
       (gx07 (x07) b-nor (l0 h7))
       (gx17 (x17) b-nor (l1 h7))
       (gx27 (x27) b-nor (l2 h7))
       (gx37 (x37) b-nor (l3 h7)))
      nil)

Definition: decode-5& (netlist) = ((lookup-module ('decode-5, netlist) = decode-5*)

∧ b-not& (delete-module ('decode-5, netlist)) ∧ b-nand& (delete-module ('decode-5, netlist)) ∧ b-nand3& (delete-module ('decode-5, netlist)) ∧ b-nor& (delete-module ('decode-5, netlist)))

Event: Enable decode-5&; name this event ‘decode-5&-off’.

Definition: decode-5$netlist = cons (decode-5*,

((b-not$netlist ∪ b-nand$netlist) ∪ b-nand3$netlist) ∪ b-nor$netlist)

Theorem: properp-length-f$decode-5 properp (f$decode-5 (s)) ∧ (length (f$decode-5 (s)) = 32)

Theorem: decode-5$value (decode-5& (netlist) ∧ (length (s) = 5)) → (dual-eval (0, 'decode-5, s, state, netlist) = f$decode-5 (s))

Theorem: f$decode-5=decode-5 (bvp (s) ∧ (length (s) = 5)) → (f$decode-5 (s) = decode-5 (s))

Event: Enable decode-5$value; name this event ‘decode-5$value-off’.

Definition: encode-32 (s0 ,

s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 )

= list (b-nand4 (b-nor4 (s1 , s3 , s5 , s7 ), b-nor4 (s9 , s11 , s13 , s15 ), b-nor4 (s17 , s19 , s21 , s23 ), b-nor (s25 , s29 )),

b-nand4 (b-nor4 (s2 , s3 , s6 , s7 ), b-nor4 (s10 , s11 , s14 , s15 ), b-nor4 (s18 , s19 , s22 , s23 ), b-not (s30 )),

b-nand4 (b-nor4 (s4 , s5 , s6 , s7 ), b-nor4 (s12 , s13 , s14 , s15 ), b-nor4 (s20 , s21 , s22 , s23 ), b-nor3 (s28 , s29 , s30 )),

b-nand4 (b-nor4 (s8 , s9 , s10 , s11 ), b-nor4 (s12 , s13 , s14 , s15 ), b-nor (s24 , s25 ), b-nor3 (s28 , s29 , s30 )), b-nand4 (b-nor4 (s16 , s17 , s18 , s19 ),

b-nor4 (s20 , s21 , s22 , s23 ), b-nor (s24 , s25 ), b-nor3 (s28 , s29 , s30 )))

Event: Enable encode-32; name this event ‘encode-32-off’.

Definition: f$encode-32 (s0 ,

s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 )

= list (f-nand4 (f-nor4 (s1 , s3 , s5 , s7 ), f-nor4 (s9 , s11 , s13 , s15 ), f-nor4 (s17 , s19 , s21 , s23 ), f-nor (s25 , s29 )), f-nand4 (f-nor4 (s2 , s3 , s6 , s7 ),

f-nor4 (s10 , s11 , s14 , s15 ), f-nor4 (s18 , s19 , s22 , s23 ), f-not (s30 )),

f-nand4 (f-nor4 (s4 , s5 , s6 , s7 ), f-nor4 (s12 , s13 , s14 , s15 ), f-nor4 (s20 , s21 , s22 , s23 ), f-nor3 (s28 , s29 , s30 )),

f-nand4 (f-nor4 (s8 , s9 , s10 , s11 ), f-nor4 (s12 , s13 , s14 , s15 ), f-nor (s24 , s25 ), f-nor3 (s28 , s29 , s30 )),

f-nand4 (f-nor4 (s16 , s17 , s18 , s19 ), f-nor4 (s20 , s21 , s22 , s23 ), f-nor (s24 , s25 ), f-nor3 (s28 , s29 , s30 )))

Event: Enable f$encode-32; name this event ‘f$encode-32-off’.

Definition: encode-32*

= '(encode-32
(s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27
s28 s29 s30 s31)
(w-4 w-9 w-14 w-19 w-24)
((g-23 (w-23) b-nor3 (s28 s29 s30))
(g-22 (w-22) b-nor (s24 s25))
(g-21 (w-21) b-nor4 (s20 s21 s22 s23))
(g-20 (w-20) b-nor4 (s16 s17 s18 s19))
(g-24 (w-24) b-nand4 (w-20 w-21 w-22 w-23))
(g-16 (w-16) b-nor4 (s12 s13 s14 s15))
(g-15 (w-15) b-nor4 (s8 s9 s10 s11))
(g-19 (w-19) b-nand4 (w-15 w-16 w-22 w-23))
(g-10 (w-10) b-nor4 (s4 s5 s6 s7))
(g-14 (w-14) b-nand4 (w-10 w-16 w-21 w-23))
(g-8 (w-8) b-not (s30))
(g-7 (w-7) b-nor4 (s18 s19 s22 s23))
(g-6 (w-6) b-nor4 (s10 s11 s14 s15))
(g-5 (w-5) b-nor4 (s2 s3 s6 s7))
(g-9 (w-9) b-nand4 (w-5 w-6 w-7 w-8))
(g-3 (w-3) b-nor (s25 s29))
(g-2 (w-2) b-nor4 (s17 s19 s21 s23))
(g-1 (w-1) b-nor4 (s9 s11 s13 s15))

(g-0 (w-0) b-nor4 (s1 s3 s5 s7))
(g-4 (w-4) b-nand4 (w-0 w-1 w-2 w-3)))
nil)

Definition: encode-32& (netlist) = ((lookup-module ('encode-32, netlist) = encode-32*)

∧ b-nor3& (delete-module ('encode-32, netlist)) ∧ b-not& (delete-module ('encode-32, netlist)) ∧ b-nor& (delete-module ('encode-32, netlist)) ∧ b-nor4& (delete-module ('encode-32, netlist)) ∧ b-nand4& (delete-module ('encode-32, netlist)))

Event: Enable encode-32&; name this event ‘encode-32&-off’.

Definition: encode-32$netlist = cons (encode-32*,

(((b-nor3$netlist ∪ b-not$netlist) ∪ b-nor$netlist) ∪ b-nor4$netlist) ∪ b-nand4$netlist)

Theorem: encode-32$value encode-32& (netlist) → (dual-eval (0,

'encode-32,

list (s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ),

state, netlist)

= f$encode-32 (s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ))

Event: Enable encode-32$value; name this event ‘encode-32$value-off’.

Theorem: f$encode-32=encode-32 (boolp (s0 ) ∧ boolp (s1 ) ∧ boolp (s2 ) ∧ boolp (s3 ) ∧ boolp (s4 ) ∧ boolp (s5 ) ∧ boolp (s6 ) ∧ boolp (s7 ) ∧ boolp (s8 ) ∧ boolp (s9 ) ∧ boolp (s10 ) ∧ boolp (s11 ) ∧ boolp (s12 ) ∧ boolp (s13 ) ∧ boolp (s14 ) ∧ boolp (s15 ) ∧ boolp (s16 ) ∧ boolp (s17 ) ∧ boolp (s18 ) ∧ boolp (s19 ) ∧ boolp (s20 ) ∧ boolp (s21 ) ∧ boolp (s22 ) ∧ boolp (s23 ) ∧ boolp (s24 ) ∧ boolp (s25 ) ∧ boolp (s26 ) ∧ boolp (s27 ) ∧ boolp (s28 ) ∧ boolp (s29 ) ∧ boolp (s30 ) ∧ boolp (s31 )) → (f$encode-32 (s0 ,

s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 )

= encode-32 (s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ))

Theorem: bvp-length-encode-32 bvp (encode-32 (s0 ,

s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ))

∧ (length (encode-32 (s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ))

= 5)

Theorem: properp-length-f$encode-32 properp (f$encode-32 (s0 ,

s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ))

∧ (length (f$encode-32 (s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , s16 , s17 , s18 , s19 , s20 , s21 , s22 , s23 , s24 , s25 , s26 , s27 , s28 , s29 , s30 , s31 ))

= 5)

Theorem: dual-eval-on-collected-nth-32 ((length (args) = 32) ∧ properp (args)) → (dual-eval (flag, name, args, state, netlist)

= dual-eval (flag, name, list (nth (0, args),

nth (1, args), nth (2, args), nth (3, args), nth (4, args), nth (5, args), nth (6, args), nth (7, args), nth (8, args), nth (9, args), nth (10, args), nth (11, args), nth (12, args), nth (13, args), nth (14, args), nth (15, args), nth (16, args), nth (17, args), nth (18, args), nth (19, args), nth (20, args), nth (21, args), nth (22, args), nth (23, args), nth (24, args), nth (25, args), nth (26, args), nth (27, args), nth (28, args), nth (29, args), nth (30, args), nth (31, args)),

state, netlist))

Theorem: encode-32$value-on-a-vector (encode-32& (netlist) ∧ properp (args) ∧ (length (args) = 32)) → (dual-eval (0, 'encode-32, args, state, netlist)

= f$encode-32 (nth (0, args), nth (1, args), nth (2, args), nth (3, args), nth (4, args), nth (5, args), nth (6, args), nth (7, args), nth (8, args), nth (9, args), nth (10, args), nth (11, args), nth (12, args), nth (13, args), nth (14, args), nth (15, args), nth (16, args), nth (17, args), nth (18, args), nth (19, args), nth (20, args), nth (21, args), nth (22, args), nth (23, args), nth (24, args), nth (25, args), nth (26, args), nth (27, args), nth (28, args), nth (29, args), nth (30, args), nth (31, args)))

Event: Enable encode-32$value-on-a-vector; name this event ‘encode-32$value-on-a-vector-off’.

Definition: set-some-flags (set-flags) = (z-set (set-flags)

∨ n-set (set-flags) ∨ v-set (set-flags) ∨ c-set (set-flags))

Event: Enable set-some-flags; name this event ‘set-some-flags-off’.

Theorem: not-set-some-flags-make-list-4-f ¬ set-some-flags (make-list (4, f))

Definition: flags-hyps (flags) = ((length (flags) = 4) ∧ bvp (flags))

Theorem: not-set-some-flags-update-flags (flags-hyps (flags) ∧ (¬ set-some-flags (set-flags))) → (update-flags (flags, set-flags, cvzbv) = flags)

Theorem: boolp-c-flag flags-hyps (flags) → boolp (c-flag (flags))

Definition: f$set-some-flags (set-flags) = f-or4 (car (set-flags),

cadr (set-flags), caddr (set-flags), cadddr (set-flags))

Event: Enable f$set-some-flags; name this event ‘f$set-some-flags-off’.

Theorem: f$set-some-flags=set-some=flags (bvp (set-flags) ∧ (length (set-flags) = 4)) → (f$set-some-flags (set-flags) = set-some-flags (set-flags))

Theorem: b-or4$value-as-f$set-some-flags (b-or4& (netlist) ∧ properp (set-flags) ∧ (length (set-flags) = 4)) → (dual-eval (0, 'b-or4, set-flags, state, netlist)

= list (f$set-some-flags (set-flags)))

Event: Enable b-or4$value-as-f$set-some-flags; name this event ‘b-or4$value-as-f$set-some-flags-off’.

Definition: f$all-t-regs-address (regs-address) = f-and4 (car (regs-address),

cadr (regs-address), caddr (regs-address), cadddr (regs-address))

Event: Enable f$all-t-regs-address; name this event ‘f$all-t-regs-address-off’.

Theorem: f$all-t-regs-address=set-some=flags (bvp (regs-address) ∧ (length (regs-address) = 4)) → (f$all-t-regs-address (regs-address)

= (regs-address = make-list (4, t)))

Theorem: b-and4$value-as-f$all-t-regs-address (b-and4& (netlist) ∧ properp (regs-address) ∧ (length (regs-address) = 4)) → (dual-eval (0, 'b-and4, regs-address, state, netlist)

= list (f$all-t-regs-address (regs-address)))

Event: Enable b-and4$value-as-f$all-t-regs-address; name this event ‘b-and4$value-as-f$all-t-regs-address-off’.

Definition: cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) = (boolp (rw-)

∧ (length (regs-address) = 4)

∧ bvp (regs-address) ∧ (length (i-reg) = 32) ∧ bvp (i-reg) ∧ flags-hyps (flags) ∧ (length (pc-reg) = 4) ∧ bvp (pc-reg))

Definition: v fetch0 = list (f, f, f, f, f)

Event: Enable v fetch0; name this event ‘v fetch0-off’. Event: Enable *1*v fetch0; name this event ‘g*1*v fetch0-off’. Definition: n fetch0 = v-to-nat (list (f, f, f, f, f)) Event: Enable n fetch0; name this event ‘n fetch0-off’. Event: Enable *1*n fetch0; name this event ‘g*1*n fetch0-off’. Definition: v fetch1 = list (t, f, f, f, f) Event: Enable v fetch1; name this event ‘v fetch1-off’. Event: Enable *1*v fetch1; name this event ‘g*1*v fetch1-off’. Definition: n fetch1 = v-to-nat (list (t, f, f, f, f)) Event: Enable n fetch1; name this event ‘n fetch1-off’. Event: Enable *1*n fetch1; name this event ‘g*1*n fetch1-off’. Definition: v fetch2 = list (f, t, f, f, f) Event: Enable v fetch2; name this event ‘v fetch2-off’. Event: Enable *1*v fetch2; name this event ‘g*1*v fetch2-off’. Definition: n fetch2 = v-to-nat (list (f, t, f, f, f)) Event: Enable n fetch2; name this event ‘n fetch2-off’. Event: Enable *1*n fetch2; name this event ‘g*1*n fetch2-off’. Definition: v fetch3 = list (t, t, f, f, f) Event: Enable v fetch3; name this event ‘v fetch3-off’. Event: Enable *1*v fetch3; name this event ‘g*1*v fetch3-off’.

Definition: n fetch3 = v-to-nat (list (t, t, f, f, f)) Event: Enable n fetch3; name this event ‘n fetch3-off’. Event: Enable *1*n fetch3; name this event ‘g*1*n fetch3-off’. Definition: v decode = list (f, f, t, f, f) Event: Enable v decode; name this event ‘v decode-off’. Event: Enable *1*v decode; name this event ‘g*1*v decode-off’. Definition: n decode = v-to-nat (list (f, f, t, f, f)) Event: Enable n decode; name this event ‘n decode-off’. Event: Enable *1*n decode; name this event ‘g*1*n decode-off’. Definition: v rega = list (t, f, t, f, f) Event: Enable v rega; name this event ‘v rega-off’. Event: Enable *1*v rega; name this event ‘g*1*v rega-off’. Definition: n rega = v-to-nat (list (t, f, t, f, f)) Event: Enable n rega; name this event ‘n rega-off’. Event: Enable *1*n rega; name this event ‘g*1*n rega-off’. Definition: v regb = list (f, t, t, f, f) Event: Enable v regb; name this event ‘v regb-off’. Event: Enable *1*v regb; name this event ‘g*1*v regb-off’. Definition: n regb = v-to-nat (list (f, t, t, f, f))

Event: Enable n regb; name this event ‘n regb-off’. Event: Enable *1*n regb; name this event ‘g*1*n regb-off’. Definition: v update = list (t, t, t, f, f) Event: Enable v update; name this event ‘v update-off’. Event: Enable *1*v update; name this event ‘g*1*v update-off’. Definition: n update = v-to-nat (list (t, t, t, f, f)) Event: Enable n update; name this event ‘n update-off’. Event: Enable *1*n update; name this event ‘g*1*n update-off’. Definition: v reada0 = list (f, f, f, t, f) Event: Enable v reada0; name this event ‘v reada0-off’. Event: Enable *1*v reada0; name this event ‘g*1*v reada0-off’. Definition: n reada0 = v-to-nat (list (f, f, f, t, f)) Event: Enable n reada0; name this event ‘n reada0-off’. Event: Enable *1*n reada0; name this event ‘g*1*n reada0-off’. Definition: v reada1 = list (t, f, f, t, f) Event: Enable v reada1; name this event ‘v reada1-off’. Event: Enable *1*v reada1; name this event ‘g*1*v reada1-off’. Definition: n reada1 = v-to-nat (list (t, f, f, t, f)) Event: Enable n reada1; name this event ‘n reada1-off’. Event: Enable *1*n reada1; name this event ‘g*1*n reada1-off’.

Definition: v reada2 = list (f, t, f, t, f) Event: Enable v reada2; name this event ‘v reada2-off’. Event: Enable *1*v reada2; name this event ‘g*1*v reada2-off’. Definition: n reada2 = v-to-nat (list (f, t, f, t, f)) Event: Enable n reada2; name this event ‘n reada2-off’. Event: Enable *1*n reada2; name this event ‘g*1*n reada2-off’. Definition: v reada3 = list (t, t, f, t, f) Event: Enable v reada3; name this event ‘v reada3-off’. Event: Enable *1*v reada3; name this event ‘g*1*v reada3-off’. Definition: n reada3 = v-to-nat (list (t, t, f, t, f)) Event: Enable n reada3; name this event ‘n reada3-off’. Event: Enable *1*n reada3; name this event ‘g*1*n reada3-off’. Definition: v readb0 = list (f, f, t, t, f) Event: Enable v readb0; name this event ‘v readb0-off’. Event: Enable *1*v readb0; name this event ‘g*1*v readb0-off’. Definition: n readb0 = v-to-nat (list (f, f, t, t, f)) Event: Enable n readb0; name this event ‘n readb0-off’. Event: Enable *1*n readb0; name this event ‘g*1*n readb0-off’. Definition: v readb1 = list (t, f, t, t, f)

Event: Enable v readb1; name this event ‘v readb1-off’. Event: Enable *1*v readb1; name this event ‘g*1*v readb1-off’. Definition: n readb1 = v-to-nat (list (t, f, t, t, f)) Event: Enable n readb1; name this event ‘n readb1-off’. Event: Enable *1*n readb1; name this event ‘g*1*n readb1-off’. Definition: v readb2 = list (f, t, t, t, f) Event: Enable v readb2; name this event ‘v readb2-off’. Event: Enable *1*v readb2; name this event ‘g*1*v readb2-off’. Definition: n readb2 = v-to-nat (list (f, t, t, t, f)) Event: Enable n readb2; name this event ‘n readb2-off’. Event: Enable *1*n readb2; name this event ‘g*1*n readb2-off’. Definition: v readb3 = list (t, t, t, t, f) Event: Enable v readb3; name this event ‘v readb3-off’. Event: Enable *1*v readb3; name this event ‘g*1*v readb3-off’. Definition: n readb3 = v-to-nat (list (t, t, t, t, f)) Event: Enable n readb3; name this event ‘n readb3-off’. Event: Enable *1*n readb3; name this event ‘g*1*n readb3-off’. Definition: v write0 = list (f, f, f, f, t) Event: Enable v write0; name this event ‘v write0-off’. Event: Enable *1*v write0; name this event ‘g*1*v write0-off’.

Definition: n write0 = v-to-nat (list (f, f, f, f, t)) Event: Enable n write0; name this event ‘n write0-off’. Event: Enable *1*n write0; name this event ‘g*1*n write0-off’. Definition: v write1 = list (t, f, f, f, t) Event: Enable v write1; name this event ‘v write1-off’. Event: Enable *1*v write1; name this event ‘g*1*v write1-off’. Definition: n write1 = v-to-nat (list (t, f, f, f, t)) Event: Enable n write1; name this event ‘n write1-off’. Event: Enable *1*n write1; name this event ‘g*1*n write1-off’. Definition: v write2 = list (f, t, f, f, t) Event: Enable v write2; name this event ‘v write2-off’. Event: Enable *1*v write2; name this event ‘g*1*v write2-off’. Definition: n write2 = v-to-nat (list (f, t, f, f, t)) Event: Enable n write2; name this event ‘n write2-off’. Event: Enable *1*n write2; name this event ‘g*1*n write2-off’. Definition: v write3 = list (t, t, f, f, t) Event: Enable v write3; name this event ‘v write3-off’. Event: Enable *1*v write3; name this event ‘g*1*v write3-off’. Definition: n write3 = v-to-nat (list (t, t, f, f, t))

Event: Enable n write3; name this event ‘n write3-off’. Event: Enable *1*n write3; name this event ‘g*1*n write3-off’. Definition: v sefa0 = list (f, f, t, f, t) Event: Enable v sefa0; name this event ‘v sefa0-off’. Event: Enable *1*v sefa0; name this event ‘g*1*v sefa0-off’. Definition: n sefa0 = v-to-nat (list (f, f, t, f, t)) Event: Enable n sefa0; name this event ‘n sefa0-off’. Event: Enable *1*n sefa0; name this event ‘g*1*n sefa0-off’. Definition: v sefa1 = list (t, f, t, f, t) Event: Enable v sefa1; name this event ‘v sefa1-off’. Event: Enable *1*v sefa1; name this event ‘g*1*v sefa1-off’. Definition: n sefa1 = v-to-nat (list (t, f, t, f, t)) Event: Enable n sefa1; name this event ‘n sefa1-off’. Event: Enable *1*n sefa1; name this event ‘g*1*n sefa1-off’. Definition: v sefb0 = list (f, t, t, f, t) Event: Enable v sefb0; name this event ‘v sefb0-off’. Event: Enable *1*v sefb0; name this event ‘g*1*v sefb0-off’. Definition: n sefb0 = v-to-nat (list (f, t, t, f, t)) Event: Enable n sefb0; name this event ‘n sefb0-off’. Event: Enable *1*n sefb0; name this event ‘g*1*n sefb0-off’.

Definition: v sefb1 = list (t, t, t, f, t) Event: Enable v sefb1; name this event ‘v sefb1-off’. Event: Enable *1*v sefb1; name this event ‘g*1*v sefb1-off’. Definition: n sefb1 = v-to-nat (list (t, t, t, f, t)) Event: Enable n sefb1; name this event ‘n sefb1-off’. Event: Enable *1*n sefb1; name this event ‘g*1*n sefb1-off’. Definition: v hold0 = list (f, f, f, t, t) Event: Enable v hold0; name this event ‘v hold0-off’. Event: Enable *1*v hold0; name this event ‘g*1*v hold0-off’. Definition: n hold0 = v-to-nat (list (f, f, f, t, t)) Event: Enable n hold0; name this event ‘n hold0-off’. Event: Enable *1*n hold0; name this event ‘g*1*n hold0-off’. Definition: v hold1 = list (t, f, f, t, t) Event: Enable v hold1; name this event ‘v hold1-off’. Event: Enable *1*v hold1; name this event ‘g*1*v hold1-off’. Definition: n hold1 = v-to-nat (list (t, f, f, t, t)) Event: Enable n hold1; name this event ‘n hold1-off’. Event: Enable *1*n hold1; name this event ‘g*1*n hold1-off’. Definition: v v11010 = list (f, t, f, t, t)

Event: Enable v v11010; name this event ‘v v11010-off’. Event: Enable *1*v v11010; name this event ‘g*1*v v11010-off’. Definition: n v11010 = v-to-nat (list (f, t, f, t, t)) Event: Enable n v11010; name this event ‘n v11010-off’. Event: Enable *1*n v11010; name this event ‘g*1*n v11010-off’. Definition: v v11011 = list (t, t, f, t, t) Event: Enable v v11011; name this event ‘v v11011-off’. Event: Enable *1*v v11011; name this event ‘g*1*v v11011-off’. Definition: n v11011 = v-to-nat (list (t, t, f, t, t)) Event: Enable n v11011; name this event ‘n v11011-off’. Event: Enable *1*n v11011; name this event ‘g*1*n v11011-off’. Definition: v reset0 = list (f, f, t, t, t) Event: Enable v reset0; name this event ‘v reset0-off’. Event: Enable *1*v reset0; name this event ‘g*1*v reset0-off’. Definition: n reset0 = v-to-nat (list (f, f, t, t, t)) Event: Enable n reset0; name this event ‘n reset0-off’. Event: Enable *1*n reset0; name this event ‘g*1*n reset0-off’. Definition: v reset1 = list (t, f, t, t, t) Event: Enable v reset1; name this event ‘v reset1-off’. Event: Enable *1*v reset1; name this event ‘g*1*v reset1-off’.

Definition: n reset1 = v-to-nat (list (t, f, t, t, t)) Event: Enable n reset1; name this event ‘n reset1-off’. Event: Enable *1*n reset1; name this event ‘g*1*n reset1-off’. Definition: v reset2 = list (f, t, t, t, t) Event: Enable v reset2; name this event ‘v reset2-off’. Event: Enable *1*v reset2; name this event ‘g*1*v reset2-off’. Definition: n reset2 = v-to-nat (list (f, t, t, t, t)) Event: Enable n reset2; name this event ‘n reset2-off’. Event: Enable *1*n reset2; name this event ‘g*1*n reset2-off’. Definition: v v11111 = list (t, t, t, t, t) Event: Enable v v11111; name this event ‘v v11111-off’. Event: Enable *1*v v11111; name this event ‘g*1*v v11111-off’. Definition: n v11111 = v-to-nat (list (t, t, t, t, t)) Event: Enable n v11111; name this event ‘n v11111-off’. Event: Enable *1*n v11111; name this event ‘g*1*n v11111-off’. Event: Let us define the theory vector-state-theory to consist of the following events: v fetch0, v fetch1, v fetch2, v fetch3, v decode, v rega, v regb, v update, v reada0, v reada1, v reada2, v reada3, v readb0, v readb1, v readb2, v readb3, v write0, v write1, v write2, v write3, v sefa0, v sefa1, v sefb0, v sefb1, v hold0, v hold1, v v11010, v v11011, v reset0, v reset1, v reset2, v v11111. Event: Let us define the theory natural-state-theory to consist of the following events: n fetch0, n fetch1, n fetch2, n fetch3, n decode, n rega, n regb, n update, n reada0, n reada1, n reada2, n reada3, n readb0, n readb1, n readb2, n readb3, n write0, n write1, n write2, n write3, n sefa0, n sefa1, n sefb0, n sefb1, n hold0, n hold1, n v11010, n v11011, n reset0, n reset1, n reset2, n v11111.

Theorem: bvp-length-state-vectors (length (v fetch0) = 5) ∧ bvp (v fetch0) ∧ (length (v fetch1) = 5) ∧ bvp (v fetch1) ∧ (length (v fetch2) = 5) ∧ bvp (v fetch2) ∧ (length (v fetch3) = 5) ∧ bvp (v fetch3) ∧ (length (v decode) = 5) ∧ bvp (v decode) ∧ (length (v rega) = 5) ∧ bvp (v rega) ∧ (length (v regb) = 5) ∧ bvp (v regb) ∧ (length (v update) = 5) ∧ bvp (v update) ∧ (length (v reada0) = 5) ∧ bvp (v reada0) ∧ (length (v reada1) = 5) ∧ bvp (v reada1) ∧ (length (v reada2) = 5) ∧ bvp (v reada2) ∧ (length (v reada3) = 5) ∧ bvp (v reada3) ∧ (length (v readb0) = 5) ∧ bvp (v readb0) ∧ (length (v readb1) = 5) ∧ bvp (v readb1) ∧ (length (v readb2) = 5) ∧ bvp (v readb2) ∧ (length (v readb3) = 5) ∧ bvp (v readb3) ∧ (length (v write0) = 5) ∧ bvp (v write0) ∧ (length (v write1) = 5) ∧ bvp (v write1) ∧ (length (v write2) = 5) ∧ bvp (v write2) ∧ (length (v write3) = 5)

∧ bvp (v write3) ∧ (length (v sefa0) = 5) ∧ bvp (v sefa0) ∧ (length (v sefa1) = 5) ∧ bvp (v sefa1) ∧ (length (v sefb0) = 5) ∧ bvp (v sefb0) ∧ (length (v sefb1) = 5) ∧ bvp (v sefb1) ∧ (length (v hold0) = 5) ∧ bvp (v hold0) ∧ (length (v hold1) = 5) ∧ bvp (v hold1) ∧ (length (v v11010) = 5) ∧ bvp (v v11010) ∧ (length (v v11011) = 5) ∧ bvp (v v11011) ∧ (length (v reset0) = 5) ∧ bvp (v reset0) ∧ (length (v reset1) = 5) ∧ bvp (v reset1) ∧ (length (v reset2) = 5) ∧ bvp (v reset2) ∧ (length (v v11111) = 5) ∧ bvp (v v11111)

Event: Enable bvp-length-state-vectors; name this event ‘bvp-length-state-vectors-off’.

Definition: rw- (cntl-state) = nth (0, cntl-state)

Event: Enable rw-; name this event ‘rw–off’.

Definition: strobe- (cntl-state) = nth (1, cntl-state)

Event: Enable strobe-; name this event ‘strobe–off’.

Definition: hdack- (cntl-state) = nth (2, cntl-state)

Event: Enable hdack-; name this event ‘hdack–off’.

Definition: we-regs (cntl-state) = nth (3, cntl-state)

Event: Enable we-regs; name this event ‘we-regs-off’. Definition: we-a-reg (cntl-state) = nth (4, cntl-state) Event: Enable we-a-reg; name this event ‘we-a-reg-off’. Definition: we-b-reg (cntl-state) = nth (5, cntl-state) Event: Enable we-b-reg; name this event ‘we-b-reg-off’. Definition: we-i-reg (cntl-state) = nth (6, cntl-state) Event: Enable we-i-reg; name this event ‘we-i-reg-off’. Definition: we-data-out (cntl-state) = nth (7, cntl-state) Event: Enable we-data-out; name this event ‘we-data-out-off’. Definition: we-addr-out (cntl-state) = nth (8, cntl-state) Event: Enable we-addr-out; name this event ‘we-addr-out-off’. Definition: we-hold- (cntl-state) = nth (9, cntl-state) Event: Enable we-hold-; name this event ‘we-hold–off’. Definition: we-pc-reg (cntl-state) = nth (10, cntl-state) Event: Enable we-pc-reg; name this event ‘we-pc-reg-off’. Definition: data-in-select (cntl-state) = nth (11, cntl-state) Event: Enable data-in-select; name this event ‘data-in-select-off’. Definition: dec-addr-out (cntl-state) = nth (12, cntl-state) Event: Enable dec-addr-out; name this event ‘dec-addr-out-off’. Definition: select-immediate (cntl-state) = nth (13, cntl-state) Event: Enable select-immediate; name this event ‘select-immediate-off’.

Definition: alu-c (cntl-state) = nth (14, cntl-state)

Event: Enable alu-c; name this event ‘alu-c-off’.

Definition: alu-zero (cntl-state) = nth (15, cntl-state)

Event: Enable alu-zero; name this event ‘alu-zero-off’.

Definition: state (cntl-state) = subrange (cntl-state, 16, 20)

Event: Enable state; name this event ‘state-off’.

Definition: we-flags (cntl-state) = subrange (cntl-state, 21, 24)

Event: Enable we-flags; name this event ‘we-flags-off’.

Definition: regs-address (cntl-state) = subrange (cntl-state, 25, 28)

Event: Enable regs-address; name this event ‘regs-address-off’.

Definition: alu-op (cntl-state) = subrange (cntl-state, 29, 32)

Event: Enable alu-op; name this event ‘alu-op-off’.

Definition: alu-mpg (cntl-state) = subrange (cntl-state, 33, 39)

Event: Enable alu-mpg; name this event ‘alu-mpg-off’.

Event: Let us define the theory control-state-accessor-theory to consist of the following events: rw-, strobe-, hdack-, we-regs, we-a-reg, we-b-reg, we-i-reg, wedata-out, we-addr-out, we-hold-, we-pc-reg, data-in-select, dec-addr-out, selectimmediate, alu-c, alu-zero, state, we-flags, regs-address, alu-op, alu-mpg.

(DEFN CV_FETCH0
 (RW- REGS-ADDRESS I-REG FLAGS PC-REG)
 (CONS RW-
  (CONS T
   (CONS T

(CONS F
(CONS T
 (CONS F
  (CONS F
   (CONS F
    (CONS T
     (CONS T
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS T (ALU-INC-OP))))
           (CONS T
            (APPEND
             (V_FETCH0)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                      (APPEND (ALU-INC-OP)
                              (APPEND (MPG (CONS T (CONS F (ALU-INC-OP))))
                                      NIL))))))))))))))))))))))

Event: Enable cv fetch0; name this event ‘cv fetch0-off’.

Theorem: cv fetch0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg)) = rw-)

∧ (strobe- (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-b-reg (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= t)

∧ (we-hold- (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-pc-reg (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv fetch0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags), cons (t, alu-inc-op)))) ∧ (alu-zero (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (state (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= v fetch0) ∧ (we-flags (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= alu-inc-op) ∧ (alu-mpg (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (t, cons (f, alu-inc-op)))))

Event: Enable cv fetch0$destructure; name this event ‘cv fetch0$destructureoff’.

(DEFN CV_FETCH1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
 (CONS F
  (CONS F
   (CONS F

    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_FETCH1)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv fetch1; name this event ‘cv fetch1-off’.

Theorem: cv fetch1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv fetch1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= v fetch1) ∧ (we-flags (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv fetch1$destructure; name this event ‘cv fetch1$destructureoff’.

(DEFN CV_FETCH2
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS F
(CONS T
(CONS T
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
 (CONS F
  (CONS F

        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (ALU-INC-OP))))
           (CONS F
            (APPEND
             (V_FETCH2)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                      (APPEND (ALU-INC-OP)
                              (APPEND (MPG (CONS F (CONS F (ALU-INC-OP))))
                                      NIL))))))))))))))))))))))

Event: Enable cv fetch2; name this event ‘cv fetch2-off’.

Theorem: cv fetch2$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-a-reg (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags), cons (f, alu-inc-op)))) ∧ (alu-zero (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= v fetch2) ∧ (we-flags (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= alu-inc-op) ∧ (alu-mpg (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, alu-inc-op)))))

Event: Enable cv fetch2$destructure; name this event ‘cv fetch2$destructureoff’.

(DEFN CV_FETCH3
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS F
(CONS T
(CONS F
(CONS F
(CONS F
(CONS T
(CONS F
(CONS F
(CONS F
 (CONS F
  (CONS T
   (CONS F
    (CONS F
     (CONS
      (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                           (CONS F (OP-CODE I-REG))))

           (CONS F
            (APPEND
             (V_FETCH3)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv fetch3; name this event ‘cv fetch3-off’.

Theorem: cv fetch3$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-data-out (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (dec-addr-out (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv fetch3 (rw-,

regs-address, i-reg, flags, pc-reg))

= f)

∧ (alu-c (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= v fetch3) ∧ (we-flags (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv fetch3$destructure; name this event ‘cv fetch3$destructureoff’.

(DEFN CV_DECODE
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_DECODE)
             (APPEND

              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv decode; name this event ‘cv decode-off’.

Theorem: cv decode$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv decode (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv decode (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv decode (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= v decode) ∧ (we-flags (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv decode (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv decode$destructure; name this event ‘cv decode$destructureoff’.

(DEFN CV_REGA
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS T
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS
     (A-IMMEDIATE-P I-REG)
     (CONS
      (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                           (CONS F (OP-CODE I-REG))))
      (CONS F
       (APPEND
        (V_REGA)
        (APPEND
         (MAKE-LIST 4 F)
         (APPEND
              (RN-A I-REG)

                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv rega; name this event ‘cv rega-off’.

Theorem: cv rega$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-b-reg (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-i-reg (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-data-out (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-pc-reg (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= a-immediate-p (i-reg)) ∧ (alu-c (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (state (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= v rega) ∧ (we-flags (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= rn-a (i-reg)) ∧ (alu-op (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv rega (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv rega$destructure; name this event ‘cv rega$destructure-off’.

(DEFN CV_REGB
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
 (CONS T
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_REGB)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                   (RN-B I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv regb; name this event ‘cv regb-off’.

Theorem: cv regb$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-b-reg (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-i-reg (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-data-out (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-pc-reg (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (state (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= v regb) ∧ (we-flags (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv regb (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv regb$destructure; name this event ‘cv regb$destructure-off’.

(DEFN CV_UPDATE
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS
(STORE-RESULTP (STORE-CC I-REG) FLAGS)
(CONS F
 (CONS T
  (CONS F
   (CONS F
    (CONS F
     (CONS F

      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_UPDATE)
             (APPEND
              (SET-FLAGS I-REG)
              (APPEND
                   (RN-B I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv update; name this event ‘cv update-off’.

Theorem: cv update$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv update (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv update (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= store-resultp (store-cc (i-reg), flags)) ∧ (we-a-reg (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f)

∧ (dec-addr-out (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv update (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= v update) ∧ (we-flags (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= set-flags (i-reg)) ∧ (regs-address (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv update (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv update$destructure; name this event ‘cv update$destructureoff’.

(DEFN CV_READA0
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS T
 (CONS F
  (CONS F
   (CONS F
    (CONS T
     (CONS F
      (CONS F
       (CONS F
        (CONS

         (PRE-DEC-P (MODE-A I-REG))
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_READA0)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                   (RN-A I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv reada0; name this event ‘cv reada0-off’.

Theorem: cv reada0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-b-reg (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-hold- (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= pre-dec-p (mode-a (i-reg)))

∧ (select-immediate (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= v reada0) ∧ (we-flags (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-a (i-reg)) ∧ (alu-op (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv reada0$destructure; name this event ‘cv reada0$destructureoff’.

(DEFN CV_READA1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS
(AND* (NOT* (A-IMMEDIATE-P I-REG))
      (OR* (PRE-DEC-P (MODE-A I-REG))
           (POST-INC-P (MODE-A I-REG))))
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F

        (CONS F
         (CONS F
          (CONS
           (IF* (PRE-DEC-P (MODE-A I-REG))
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (ALU-DEC-OP))))
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (ALU-INC-OP)))))
           (CONS F
            (APPEND
             (V_READA1)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                (RN-A I-REG)
                (APPEND (IF* (PRE-DEC-P (MODE-A I-REG))
                             (ALU-DEC-OP)
                             (ALU-INC-OP))
                        (APPEND (IF* (PRE-DEC-P (MODE-A I-REG))
                                     (MPG (CONS F (CONS F (ALU-DEC-OP))))
                                     (MPG (CONS F (CONS F (ALU-INC-OP)))))
                                NIL))))))))))))))))))))))

Event: Enable cv reada1; name this event ‘cv reada1-off’.

Theorem: cv reada1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg)))))

∧ (we-a-reg (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv reada1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-a (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f, alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f, alu-inc-op)))))

∧ (alu-zero (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= v reada1) ∧ (we-flags (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-a (i-reg)) ∧ (alu-op (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-a (i-reg)), alu-dec-op, alu-inc-op)) ∧ (alu-mpg (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-a (i-reg)), mpg (cons (f, cons (f, alu-dec-op))), mpg (cons (f, cons (f, alu-inc-op))))))

Event: Enable cv reada1$destructure; name this event ‘cv reada1$destructureoff’.

(DEFN CV_READA2
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T

(CONS F
(CONS T
(CONS F
(CONS F
 (CONS T
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_READA2)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                   (RN-B I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv reada2; name this event ‘cv reada2-off’.

Theorem: cv reada2$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv reada2 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= v reada2) ∧ (we-flags (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv reada2$destructure; name this event ‘cv reada2$destructureoff’.

(DEFN CV_READA3
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS F
(CONS T
(CONS F

(CONS T
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS T
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_READA3)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv reada3; name this event ‘cv reada3-off’.

Theorem: cv reada3$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-b-reg (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (dec-addr-out (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv reada3 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= v reada3) ∧ (we-flags (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv reada3$destructure; name this event ‘cv reada3$destructureoff’.

(DEFN CV_READB0
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
(CONS T
(CONS F
(CONS F

    (CONS T
     (CONS F
      (CONS F
       (CONS F
        (CONS
         (PRE-DEC-P (MODE-B I-REG))
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_READB0)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                   (RN-B I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv readb0; name this event ‘cv readb0-off’.

Theorem: cv readb0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-hold- (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= pre-dec-p (mode-b (i-reg))) ∧ (select-immediate (cv readb0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= v readb0) ∧ (we-flags (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv readb0$destructure; name this event ‘cv readb0$destructureoff’.

(DEFN CV_READB1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS
(OR* (A-IMMEDIATE-P I-REG)
 (REG-DIRECT-P (MODE-A I-REG)))
(CONS F
(CONS F
(CONS F

    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS
          (A-IMMEDIATE-P I-REG)
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_READB1)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                   (RN-A I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv readb1; name this event ‘cv readb1-off’.

Theorem: cv readb1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= or* (a-immediate-p (i-reg), reg-direct-p (mode-a (i-reg)))) ∧ (we-b-reg (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv readb1 (rw-,

regs-address, i-reg, flags, pc-reg))

= a-immediate-p (i-reg)) ∧ (alu-c (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= v readb1) ∧ (we-flags (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-a (i-reg)) ∧ (alu-op (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv readb1$destructure; name this event ‘cv readb1$destructureoff’.

(DEFN CV_READB2
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS F
(CONS T
(CONS
(AND* (NOT* (STORE-RESULTP (STORE-CC I-REG)
                      FLAGS))
 (OR* (PRE-DEC-P (MODE-B I-REG))
      (POST-INC-P (MODE-B I-REG))))
(CONS F
(CONS F

  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (IF* (PRE-DEC-P (MODE-B I-REG))
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (ALU-DEC-OP))))
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (ALU-INC-OP)))))
           (CONS F
            (APPEND
             (V_READB2)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                (RN-B I-REG)
                (APPEND (IF* (PRE-DEC-P (MODE-B I-REG))
                             (ALU-DEC-OP)
                             (ALU-INC-OP))
                        (APPEND (IF* (PRE-DEC-P (MODE-B I-REG))
                                     (MPG (CONS F (CONS T (ALU-DEC-OP))))
                                     (MPG (CONS F (CONS T (ALU-INC-OP)))))
                                NIL))))))))))))))))))))))

Event: Enable cv readb2; name this event ‘cv readb2-off’.

Theorem: cv readb2$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= and* (not* (store-resultp (store-cc (i-reg), flags)), or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg)))))

∧ (we-a-reg (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv readb2 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f, alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f, alu-inc-op)))))

∧ (alu-zero (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= v readb2) ∧ (we-flags (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)), alu-dec-op, alu-inc-op)) ∧ (alu-mpg (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)), mpg (cons (f, cons (t, alu-dec-op))), mpg (cons (f, cons (t, alu-inc-op))))))

Event: Enable cv readb2$destructure; name this event ‘cv readb2$destructureoff’.

(DEFN CV_READB3
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS F
(CONS T
(CONS F
(CONS F
 (CONS T
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS T
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_READB3)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv readb3; name this event ‘cv readb3-off’.

Theorem: cv readb3$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (dec-addr-out (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv readb3 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= v readb3) ∧ (we-flags (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv readb3$destructure; name this event ‘cv readb3$destructureoff’.

(DEFN CV_WRITE0
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)

(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
 (CONS T
  (CONS F
   (CONS T
    (CONS T
     (CONS F
      (CONS F
       (CONS F
        (CONS
         (PRE-DEC-P (MODE-B I-REG))
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_WRITE0)
             (APPEND
              (SET-FLAGS I-REG)
              (APPEND
                   (RN-B I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv write0; name this event ‘cv write0-off’.

Theorem: cv write0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv write0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv write0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-addr-out (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-hold- (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= pre-dec-p (mode-b (i-reg))) ∧ (select-immediate (cv write0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= v write0) ∧ (we-flags (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= set-flags (i-reg)) ∧ (regs-address (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv write0$destructure; name this event ‘cv write0$destructureoff’.

(DEFN CV_WRITE1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS F
(CONS T

(CONS T
(CONS
(OR* (PRE-DEC-P (MODE-B I-REG))
(POST-INC-P (MODE-B I-REG)))
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS
(IF* (PRE-DEC-P (MODE-B I-REG))
(CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                     (CONS F (ALU-DEC-OP))))
(CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                     (CONS F (ALU-INC-OP)))))
(CONS F
(APPEND
(V_WRITE1)
(APPEND
(MAKE-LIST 4 F)
(APPEND
(RN-B I-REG)
(APPEND (IF* (PRE-DEC-P (MODE-B I-REG))
             (ALU-DEC-OP)
             (ALU-INC-OP))
        (APPEND (IF* (PRE-DEC-P (MODE-B I-REG))
                     (MPG (CONS F (CONS T (ALU-DEC-OP))))
                     (MPG (CONS F (CONS T (ALU-INC-OP)))))
                NIL))))))))))))))))))))))

Event: Enable cv write1; name this event ‘cv write1-off’.

Theorem: cv write1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv write1 (rw-, regs-address, i-reg, flags, pc-reg)) = f)

∧ (strobe- (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv write1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))))

∧ (we-a-reg (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv write1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f, alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f, alu-inc-op)))))

∧ (alu-zero (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= v write1) ∧ (we-flags (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)), alu-dec-op, alu-inc-op)) ∧ (alu-mpg (cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)), mpg (cons (f, cons (t, alu-dec-op))), mpg (cons (f, cons (t, alu-inc-op))))))

Event: Enable cv write1$destructure; name this event ‘cv write1$destructureoff’.

(DEFN CV_WRITE2
 (RW- REGS-ADDRESS I-REG FLAGS PC-REG)
 (CONS F
  (CONS F
   (CONS T
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS F
           (CONS F
            (CONS F
             (CONS F
              (CONS F
               (CONS
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (OP-CODE I-REG))))
                (CONS F
                 (APPEND
                  (V_WRITE2)
                  (APPEND
                   (MAKE-LIST 4 F)
                   (APPEND PC-REG
                        (APPEND (OP-CODE I-REG)
                                (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                        NIL))))))))))))))))))))))

Event: Enable cv write2; name this event ‘cv write2-off’.

Theorem: cv write2$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv write2 (rw-, regs-address, i-reg, flags, pc-reg)) = f)

∧ (strobe- (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv write2 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv write2 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= v write2) ∧ (we-flags (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv write2$destructure; name this event ‘cv write2$destructureoff’.

(DEFN CV_WRITE3
 (RW- REGS-ADDRESS I-REG FLAGS PC-REG)
 (CONS F
  (CONS F
   (CONS T
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS F
           (CONS F
            (CONS F
             (CONS F
              (CONS F
               (CONS
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (OP-CODE I-REG))))
                (CONS F
                 (APPEND
                  (V_WRITE3)
                  (APPEND
                   (MAKE-LIST 4 F)
                   (APPEND PC-REG
                        (APPEND (OP-CODE I-REG)
                                (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                        NIL))))))))))))))))))))))

Event: Enable cv write3; name this event ‘cv write3-off’.

Theorem: cv write3$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv write3 (rw-, regs-address, i-reg, flags, pc-reg)) = f)

∧ (strobe- (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (hdack- (cv write3 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv write3 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= v write3) ∧ (we-flags (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv write3$destructure; name this event ‘cv write3$destructureoff’.

(DEFN CV_SEFA0
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS T
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_SEFA0)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND
                   (RN-A I-REG)
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv sefa0; name this event ‘cv sefa0-off’.

Theorem: cv sefa0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-b-reg (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f)

∧ (we-i-reg (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv sefa0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= v sefa0) ∧ (we-flags (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-a (i-reg)) ∧ (alu-op (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv sefa0$destructure; name this event ‘cv sefa0$destructureoff’.

(DEFN CV_SEFA1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T

(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS
(IF* (PRE-DEC-P (MODE-A I-REG))
(CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                     (CONS F (ALU-DEC-OP))))
(CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                     (CONS F (ALU-INC-OP)))))
(CONS F
(APPEND
(V_SEFA1)
(APPEND
(MAKE-LIST 4 F)
(APPEND
(RN-A I-REG)
(APPEND (IF* (PRE-DEC-P (MODE-A I-REG))
             (ALU-DEC-OP)
             (ALU-INC-OP))
        (APPEND (IF* (PRE-DEC-P (MODE-A I-REG))
                     (MPG (CONS F (CONS F (ALU-DEC-OP))))
                     (MPG (CONS F (CONS F (ALU-INC-OP)))))
                NIL))))))))))))))))))))))

Event: Enable cv sefa1; name this event ‘cv sefa1-off’.

Theorem: cv sefa1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-a-reg (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f)

∧ (we-b-reg (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv sefa1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-a (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f, alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f, alu-inc-op)))))

∧ (alu-zero (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= v sefa1) ∧ (we-flags (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-a (i-reg)) ∧ (alu-op (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-a (i-reg)), alu-dec-op, alu-inc-op)) ∧ (alu-mpg (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-a (i-reg)), mpg (cons (f, cons (f, alu-dec-op))), mpg (cons (f, cons (f, alu-inc-op))))))

Event: Enable cv sefa1$destructure; name this event ‘cv sefa1$destructureoff’.

(DEFN CV_SEFB0
 (RW- REGS-ADDRESS I-REG FLAGS PC-REG)
 (CONS T
  (CONS T
   (CONS T
    (CONS F
     (CONS F
      (CONS T
       (CONS F
        (CONS F
         (CONS F
          (CONS F
           (CONS F
            (CONS F
             (CONS F
              (CONS F
               (CONS
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (OP-CODE I-REG))))
                (CONS F
                 (APPEND
                  (V_SEFB0)
                  (APPEND
                   (MAKE-LIST 4 F)
                   (APPEND
                        (RN-B I-REG)
                        (APPEND (OP-CODE I-REG)
                                (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                        NIL))))))))))))))))))))))

Event: Enable cv sefb0; name this event ‘cv sefb0-off’.

Theorem: cv sefb0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv sefb0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= v sefb0) ∧ (we-flags (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv sefb0$destructure; name this event ‘cv sefb0$destructureoff’.

(DEFN CV_SEFB1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS F
(CONS
(IF* (PRE-DEC-P (MODE-B I-REG))
(CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                     (CONS F (ALU-DEC-OP))))
(CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                     (CONS F (ALU-INC-OP)))))
(CONS F
(APPEND
(V_SEFB1)
(APPEND
(MAKE-LIST 4 F)
(APPEND
(RN-B I-REG)
(APPEND (IF* (PRE-DEC-P (MODE-B I-REG))
             (ALU-DEC-OP)
             (ALU-INC-OP))
        (APPEND (IF* (PRE-DEC-P (MODE-B I-REG))
                     (MPG (CONS F (CONS T (ALU-DEC-OP))))
                     (MPG (CONS F (CONS T (ALU-INC-OP)))))
                NIL))))))))))))))))))))))

Event: Enable cv sefb1; name this event ‘cv sefb1-off’.

Theorem: cv sefb1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (we-regs (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-a-reg (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv sefb1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f, alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f, alu-inc-op)))))

∧ (alu-zero (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= v sefb1) ∧ (we-flags (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= rn-b (i-reg)) ∧ (alu-op (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)), alu-dec-op, alu-inc-op)) ∧ (alu-mpg (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

= if* (pre-dec-p (mode-b (i-reg)), mpg (cons (f, cons (t, alu-dec-op))),

mpg (cons (f, cons (t, alu-inc-op))))))

Event: Enable cv sefb1$destructure; name this event ‘cv sefb1$destructureoff’.

(DEFN CV_HOLD0
 (RW- REGS-ADDRESS I-REG FLAGS PC-REG)
 (CONS T
  (CONS T
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS T
           (CONS T
            (CONS F
             (CONS F
              (CONS F
               (CONS
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (OP-CODE I-REG))))
                (CONS F
                 (APPEND
                  (V_HOLD0)
                  (APPEND
                   (MAKE-LIST 4 F)
                   (APPEND PC-REG
                        (APPEND (OP-CODE I-REG)
                                (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                        NIL))))))))))))))))))))))

Event: Enable cv hold0; name this event ‘cv hold0-off’.

Theorem: cv hold0$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)) = f)

∧ (we-regs (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-pc-reg (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (data-in-select (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv hold0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= v hold0) ∧ (we-flags (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv hold0$destructure; name this event ‘cv hold0$destructureoff’.

(DEFN CV_HOLD1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_HOLD1)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv hold1; name this event ‘cv hold1-off’.

Theorem: cv hold1$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv hold1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= v hold1) ∧ (we-flags (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv hold1$destructure; name this event ‘cv hold1$destructureoff’.

(DEFN CV_V11010
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T

(CONS T
(CONS F
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_V11010)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv v11010; name this event ‘cv v11010-off’.

Theorem: cv v11010$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv v11010 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= v v11010) ∧ (we-flags (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv v11010$destructure; name this event ‘cv v11010$destructureoff’.

(DEFN CV_V11011
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
(CONS F

  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS F (OP-CODE I-REG))))
           (CONS F
            (APPEND
             (V_V11011)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND PC-REG
                   (APPEND (OP-CODE I-REG)
                           (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                   NIL))))))))))))))))))))))

Event: Enable cv v11011; name this event ‘cv v11011-off’.

Theorem: cv v11011$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv v11011 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= v v11011) ∧ (we-flags (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg)) ∧ (alu-mpg (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv v11011$destructure; name this event ‘cv v11011$destructureoff’.

(DEFN CV_RESET0
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS T
(CONS F
(CONS F
(CONS F
(CONS T
(CONS F
(CONS T

      (CONS T
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS T (ALU-INC-OP))))
           (CONS T
            (APPEND
             (V_RESET0)
             (APPEND
              (MAKE-LIST 4 T)
              (APPEND (MAKE-LIST 4 F)
                      (APPEND (ALU-INC-OP)
                              (APPEND (MPG (CONS T (CONS F (ALU-INC-OP))))
                                      NIL))))))))))))))))))))))

Event: Enable cv reset0; name this event ‘cv reset0-off’.

Theorem: cv reset0$destructure t → ((rw- (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-a-reg (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-addr-out (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-pc-reg (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (data-in-select (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv reset0 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags), cons (t, alu-inc-op)))) ∧ (alu-zero (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (state (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= v reset0) ∧ (we-flags (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, t)) ∧ (regs-address (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (alu-op (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= alu-inc-op) ∧ (alu-mpg (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (t, cons (f, alu-inc-op)))))

Event: Enable cv reset0$destructure; name this event ‘cv reset0$destructureoff’.

(DEFN CV_RESET1
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS F
(CONS T
(CONS T
(CONS T
(CONS F
(CONS T
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS
      (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                           (CONS T (ALU-INC-OP))))
      (CONS T

            (APPEND
             (V_RESET1)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND (MAKE-LIST 4 F)
                      (APPEND (ALU-INC-OP)
                              (APPEND (MPG (CONS T (CONS F (ALU-INC-OP))))
                                      NIL))))))))))))))))))))))

Event: Enable cv reset1; name this event ‘cv reset1-off’.

Theorem: cv reset1$destructure t → ((rw- (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (hdack- (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg)) = f) ∧ (we-a-reg (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-b-reg (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-i-reg (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-data-out (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-hold- (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv reset1 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags), cons (t, alu-inc-op)))) ∧ (alu-zero (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= t)

∧ (state (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= v reset1) ∧ (we-flags (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (alu-op (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= alu-inc-op) ∧ (alu-mpg (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (t, cons (f, alu-inc-op)))))

Event: Enable cv reset1$destructure; name this event ‘cv reset1$destructureoff’.

(DEFN CV_RESET2
(RW- REGS-ADDRESS I-REG FLAGS PC-REG)
(CONS T
(CONS T
(CONS T
(CONS T
(CONS F
 (CONS F
  (CONS F
   (CONS F
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS
           (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                (CONS T (ALU-INC-OP))))
           (CONS T
            (APPEND
             (V_RESET2)
             (APPEND
              (MAKE-LIST 4 F)
              (APPEND (V-INC REGS-ADDRESS)
                      (APPEND (ALU-INC-OP)
                              (APPEND (MPG (CONS T (CONS F (ALU-INC-OP))))
                                      NIL))))))))))))))))))))))

Event: Enable cv reset2; name this event ‘cv reset2-off’.

Theorem: cv reset2$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (we-a-reg (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv reset2 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags), cons (t, alu-inc-op)))) ∧ (alu-zero (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (state (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= v reset2) ∧ (we-flags (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= v-inc (regs-address)) ∧ (alu-op (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= alu-inc-op) ∧ (alu-mpg (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

= mpg (cons (t, cons (f, alu-inc-op)))))

Event: Enable cv reset2$destructure; name this event ‘cv reset2$destructureoff’.

(DEFN CV_V11111
 (RW- REGS-ADDRESS I-REG FLAGS PC-REG)
 (CONS T
  (CONS T
   (CONS T
    (CONS F
     (CONS F
      (CONS F
       (CONS F
        (CONS F
         (CONS F
          (CONS F
           (CONS F
            (CONS F
             (CONS F
              (CONS F
               (CONS
                (CARRY-IN-HELP (CONS (C-FLAG FLAGS)
                                     (CONS F (OP-CODE I-REG))))
                (CONS F
                 (APPEND
                  (V_V11111)
                  (APPEND
                   (MAKE-LIST 4 F)
                   (APPEND PC-REG
                        (APPEND (OP-CODE I-REG)
                                (APPEND (MPG (CONS F (CONS F (OP-CODE I-REG))))
                                        NIL))))))))))))))))))))))

Event: Enable cv v11111; name this event ‘cv v11111-off’.

Theorem: cv v11111$destructure cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → ((rw- (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg)) = t)

∧ (strobe- (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= t) ∧ (hdack- (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg)) = t) ∧ (we-regs (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-a-reg (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-b-reg (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-i-reg (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-data-out (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-addr-out (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-hold- (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (we-pc-reg (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (data-in-select (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (dec-addr-out (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (select-immediate (cv v11111 (rw-,

regs-address, i-reg, flags, pc-reg))

= f) ∧ (alu-c (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= carry-in-help (cons (c-flag (flags),

cons (f, op-code (i-reg)))))

∧ (alu-zero (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= f) ∧ (state (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= v v11111) ∧ (we-flags (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= make-list (4, f)) ∧ (regs-address (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= pc-reg) ∧ (alu-op (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg))

= op-code (i-reg))

∧ (alu-mpg (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg)) = mpg (cons (f, cons (f, op-code (i-reg))))))

Event: Enable cv v11111$destructure; name this event ‘cv v11111$destructureoff’.

Event: Let us define the theory cv-theory to consist of the following events: cv fetch0, cv fetch1, cv fetch2, cv fetch3, cv decode, cv rega, cv regb, cv update, cv reada0, cv reada1, cv reada2, cv reada3, cv readb0, cv readb1, cv readb2, cv readb3, cv write0, cv write1, cv write2, cv write3, cv sefa0, cv sefa1, cv sefb0, cv sefb1, cv hold0, cv hold1, cv v11010, cv v11011, cv reset0, cv reset1, cv reset2, cv v11111.

Event: Let us define the theory cv-destructure-theory to consist of the following events: cv fetch0$destructure, cv fetch1$destructure, cv fetch2$destructure, cv fetch3$destructure, cv decode$destructure, cv rega$destructure, cv regb$destructure, cv update$destructure, cv reada0$destructure, cv reada1$destructure, cv reada2$destructure, cv reada3$destructure, cv readb0$destructure, cv readb1$destructure, cv readb2$destructure, cv readb3$destructure, cv write0$destructure, cv write1$destructure, cv write2$destructure, cv write3$destructure, cv sefa0$destructure, cv sefa1$destructure, cv sefb0$destructure, cv sefb1$destructure, cv hold0$destructure, cv hold1$destructure, cv v11010$destructure, cv v11011$destructure, cv reset0$destructure, cv reset1$destructure, cv reset2$destructure, cv v11111$destructure.

Theorem: bvp-cv-vectors cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → (bvp (cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

∧ bvp (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv decode (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv rega (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv regb (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv update (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reada0 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reada1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reada2 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reada3 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv readb0 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv readb1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv readb2 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv readb3 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv write0 (rw-, regs-address, i-reg, flags, pc-reg))

∧ bvp (cv write1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv write2 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv write3 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv hold1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv v11010 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv v11011 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reset0 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reset1 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv reset2 (rw-, regs-address, i-reg, flags, pc-reg)) ∧ bvp (cv v11111 (rw-, regs-address, i-reg, flags, pc-reg)))

Event: Enable bvp-cv-vectors; name this event ‘bvp-cv-vectors-off’.

Theorem: cv fetch1$rw-doan-matta cv fetch1 (f, regs-address, i-reg, flags, pc-reg) = cv fetch1 (t, regs-address, i-reg, flags, pc-reg)

Theorem: properp-length-cv fetch1 (cv-hyps (rw-, regs-address, i-reg, flags, pc-reg) → (length (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg)) = 40)) ∧ properp (cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

Definition: f$control-let (i-reg, flags, regs-address) = list (id (a-immediate-p (i-reg)),

f$b-store-resultp (store-cc (i-reg), flags), f$set-some-flags (set-flags (i-reg)), f-or (id (a-immediate-p (i-reg)),

car (f$decode-reg-mode (mode-a (i-reg)))), car (f$decode-reg-mode (mode-b (i-reg))), f$unary-op-code-p (op-code (i-reg)), cadr (f$decode-reg-mode (mode-a (i-reg))), cadr (f$decode-reg-mode (mode-b (i-reg))), id (c-flag (flags)), f$all-t-regs-address (regs-address), f-and (f-not (id (a-immediate-p (i-reg))),

caddr (f$decode-reg-mode (mode-a (i-reg)))), caddr (f$decode-reg-mode (mode-b (i-reg))))

Event: Enable f$control-let; name this event ‘f$control-let-off’.

(DEFN CONTROL-LET* NIL
(CONS 'CONTROL-LET
(CONS
(APPEND (INDICES 'I-REG 0 32)
(APPEND (INDICES 'FLAGS 0 4)
       (INDICES 'REGS-ADDRESS 0 4)))
(CONS
'(A-IMMEDIATE-P STORE SET-SOME-FLAGS DIRECT-A DIRECT-B UNARY PRE-DEC-A
        PRE-DEC-B C ALL-T-REGS-ADDRESS SIDE-EFFECT-A SIDE-EFFECT-B)
(CONS
(CONS
(LIST 'G0
'(A-IMMEDIATE-P)
'ID
(LIST (A-IMMEDIATE-P (INDICES 'I-REG 0 32))))
(CONS
'(G1 (A-IMMEDIATE-P-)
B-NOT
(A-IMMEDIATE-P))
(CONS
(LIST 'G2
  '(STORE)
  'B-STORE-RESULTP
  (APPEND (STORE-CC (INDICES 'I-REG 0 32))
          (INDICES 'FLAGS 0 4)))
(CONS
(LIST 'G3
   '(SET-SOME-FLAGS)
   'B-OR4
   (SET-FLAGS (INDICES 'I-REG 0 32)))
(CONS
(LIST 'G4
    '(ALMOST-DIRECT-A PRE-DEC-A ALMOST-SIDE-EFFECT-A)
    'DECODE-REG-MODE
    (MODE-A (INDICES 'I-REG 0 32)))
(CONS
 (LIST 'G5
       '(DIRECT-B PRE-DEC-B SIDE-EFFECT-B)
       'DECODE-REG-MODE
       (MODE-B (INDICES 'I-REG 0 32)))
 (CONS (LIST 'G6
             '(UNARY)

                     'UNARY-OP-CODE-P
                     (OP-CODE (INDICES 'I-REG 0 32)))
               (CONS (LIST 'G7
                           '(C)
                           'ID
                           (LIST (C-FLAG (INDICES 'FLAGS 0 4))))
                     (CONS (LIST 'G8
                                 '(ALL-T-REGS-ADDRESS)
                                 'B-AND4
                                 (INDICES 'REGS-ADDRESS 0 4))
                           '((G9 (SIDE-EFFECT-A)
                                 B-AND
                                 (A-IMMEDIATE-P- ALMOST-SIDE-EFFECT-A))
                             (GA (DIRECT-A)
                                 B-OR
                                 (A-IMMEDIATE-P ALMOST-DIRECT-A))))))))))))
 '(NIL))))))

Definition: control-let& (netlist) = ((lookup-module ('control-let, netlist) = control-let*)

∧ b-not& (delete-module ('control-let, netlist)) ∧ b-store-resultp& (delete-module ('control-let, netlist)) ∧ b-or4& (delete-module ('control-let, netlist)) ∧ decode-reg-mode& (delete-module ('control-let, netlist)) ∧ unary-op-code-p& (delete-module ('control-let, netlist)) ∧ id& (delete-module ('control-let, netlist)) ∧ b-and4& (delete-module ('control-let, netlist)) ∧ b-and& (delete-module ('control-let, netlist)) ∧ b-or& (delete-module ('control-let, netlist)))

Event: Enable control-let&; name this event ‘control-let&-off’.

Definition: control-let$netlist = cons (control-let*,

(((((((b-not$netlist ∪ b-store-resultp$netlist) ∪ b-or4$netlist) ∪ decode-reg-mode$netlist) ∪ unary-op-code-p$netlist) ∪ id$netlist) ∪ b-and4$netlist) ∪ b-and$netlist) ∪ b-or$netlist)

Theorem: control-let$value (control-let& (netlist) ∧ properp (i-reg) ∧ (length (i-reg) = 32) ∧ properp (flags) ∧ (length (flags) = 4) ∧ properp (regs-address) ∧ (length (regs-address) = 4)) → (dual-eval (0,

             'control-let,

append (i-reg, append (flags, regs-address)), state, netlist)

= f$control-let (i-reg, flags, regs-address))

Event: Enable control-let$value; name this event ‘control-let$value-off’.

Theorem: f$control-let=control-let (bvp (i-reg) ∧ (length (i-reg) = 32) ∧ bvp (flags) ∧ (length (flags) = 4) ∧ bvp (regs-address) ∧ (length (regs-address) = 4)) → (f$control-let (i-reg, flags, regs-address)

= list (a-immediate-p (i-reg), store-resultp (store-cc (i-reg), flags), set-some-flags (set-flags (i-reg)), or* (a-immediate-p (i-reg), reg-direct-p (mode-a (i-reg))), reg-direct-p (mode-b (i-reg)), unary-op-code-p (op-code (i-reg)), pre-dec-p (mode-a (i-reg)), pre-dec-p (mode-b (i-reg)), c-flag (flags), regs-address = list (t, t, t, t), and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg)))),

or* (pre-dec-p (mode-b (i-reg)), post-inc-p (mode-b (i-reg)))))

Definition: next-state (decoded-state,

store,

set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-)

= list (b-nand (b-and4 (b-nand (all-t-regs-address, nth (30, decoded-state)), b-not (nth (25, decoded-state)), b-not (nth (23, decoded-state)), b-nand (b-not (side-effect-b), nth (21, decoded-state))),

b-and3 (b-nand (b-not (dtack-), nth (19, decoded-state)), b-nand (b-not (b-and (side-effect-b, unary)), nth (7, decoded-state)),

b-nand4 (b-not (side-effect-b), b-not (side-effect-a), b-not (b-or (store, set-some-flags)), nth (4, decoded-state)))),

nth (0, decoded-state), b-and (hold-, nth (1, decoded-state)), b-nand (b-nand (dtack-, nth (3, decoded-state)),

b-not (nth (2, decoded-state))), b-and (b-not (dtack-), nth (3, decoded-state)), b-and4 (b-or (direct-b, unary),

direct-a,

b-or (store, set-some-flags), nth (4, decoded-state)),

b-and3 (b-not (unary), direct-b, nth (5, decoded-state)), b-nand6 (b-nand3 (b-not (store),

b-not (dtack-),

nth (15, decoded-state)),

b-nand5 (b-not (store), unary, b-not (direct-b), b-not (dtack-), nth (11, decoded-state)),

b-nand3 (direct-b, b-not (dtack-), nth (11, decoded-state)), b-not (nth (6, decoded-state)), b-nand3 (b-not (store),

b-not (direct-b),

nth (5, decoded-state)),

b-nand3 (unary, direct-b, nth (5, decoded-state))),

b-and3 (b-not (direct-a), b-or (store, set-some-flags), nth (4, decoded-state)),

nth (8, decoded-state), nth (9, decoded-state), b-nand (b-nand (dtack-, nth (11, decoded-state)),

b-not (nth (10, decoded-state))), b-nand (b-nand4 (b-not (unary),

b-not (direct-b), b-not (dtack-), nth (11, decoded-state)), b-nand4 (b-not (b-or (direct-b, unary)),

direct-a,

b-or (store, set-some-flags), nth (4, decoded-state))),

nth (12, decoded-state), nth (13, decoded-state), b-nand (b-nand (dtack-, nth (15, decoded-state)),

b-not (nth (14, decoded-state))), b-nand3 (b-nand3 (store, b-not (dtack-), nth (15, decoded-state)),

b-nand5 (store, unary, b-not (direct-b), b-not (dtack-), nth (11, decoded-state)),

b-nand3 (store, b-not (direct-b), nth (5, decoded-state))),

nth (16, decoded-state), nth (17, decoded-state), b-nand (b-nand (dtack-, nth (19, decoded-state)),

b-not (nth (18, decoded-state))), b-and3 (side-effect-a,

b-not (b-or (store, set-some-flags)), nth (4, decoded-state)),

nth (20, decoded-state), b-nand (b-nand (side-effect-b, nth (21, decoded-state)),

b-nand4 (side-effect-b, b-not (side-effect-a), b-not (b-or (store, set-some-flags)), nth (4, decoded-state))),

b-nand (b-not (nth (22, decoded-state)),

b-nand (b-and (side-effect-b, unary), nth (7, decoded-state))), b-nand (b-nand (b-not (hold-), nth (24, decoded-state)),

b-nand (b-not (hold-), nth (1, decoded-state))), b-and (hold-, nth (24, decoded-state)), vss, vss, b-nand3 (b-not (nth (31, decoded-state)),

b-not (nth (27, decoded-state)), b-not (nth (26, decoded-state))),

nth (28, decoded-state), b-nand (b-nand (b-not (all-t-regs-address), nth (30, decoded-state)),

b-not (nth (29, decoded-state))), vss)

Definition: f$next-state (decoded-state,

store,

set-some-flags,

unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-)

= list (f-nand (f-and4 (f-nand (all-t-regs-address, nth (30, decoded-state)), f-not (nth (25, decoded-state)), f-not (nth (23, decoded-state)), f-nand (f-not (side-effect-b), nth (21, decoded-state))),

f-and3 (f-nand (f-not (dtack-), nth (19, decoded-state)), f-nand (f-not (f-and (side-effect-b, unary)), nth (7, decoded-state)),

f-nand4 (f-not (side-effect-b), f-not (side-effect-a), f-not (f-or (store, set-some-flags)), nth (4, decoded-state)))),

nth (0, decoded-state), f-and (hold-, nth (1, decoded-state)), f-nand (f-nand (dtack-, nth (3, decoded-state)),

f-not (nth (2, decoded-state))), f-and (f-not (dtack-), nth (3, decoded-state)), f-and4 (f-or (direct-b, unary),

direct-a,

f-or (store, set-some-flags), nth (4, decoded-state)),

f-and3 (f-not (unary), direct-b, nth (5, decoded-state)), f-nand6 (f-nand3 (f-not (store),

f-not (dtack-),

nth (15, decoded-state)), f-nand5 (f-not (store), unary, f-not (direct-b), f-not (dtack-), nth (11, decoded-state)),

f-nand3 (direct-b, f-not (dtack-), nth (11, decoded-state)), f-not (nth (6, decoded-state)), f-nand3 (f-not (store),

f-not (direct-b),

nth (5, decoded-state)), f-nand3 (unary, direct-b, nth (5, decoded-state))),

f-and3 (f-not (direct-a), f-or (store, set-some-flags), nth (4, decoded-state)),

nth (8, decoded-state), nth (9, decoded-state), f-nand (f-nand (dtack-, nth (11, decoded-state)),

f-not (nth (10, decoded-state))), f-nand (f-nand4 (f-not (unary),

f-not (direct-b), f-not (dtack-), nth (11, decoded-state)), f-nand4 (f-not (f-or (direct-b, unary)),

direct-a,

f-or (store, set-some-flags), nth (4, decoded-state))),

nth (12, decoded-state), nth (13, decoded-state), f-nand (f-nand (dtack-, nth (15, decoded-state)),

f-not (nth (14, decoded-state))), f-nand3 (f-nand3 (store, f-not (dtack-), nth (15, decoded-state)),

f-nand5 (store, unary, f-not (direct-b), f-not (dtack-), nth (11, decoded-state)),

f-nand3 (store, f-not (direct-b), nth (5, decoded-state))), nth (16, decoded-state), nth (17, decoded-state), f-nand (f-nand (dtack-, nth (19, decoded-state)),

f-not (nth (18, decoded-state))), f-and3 (side-effect-a,

f-not (f-or (store, set-some-flags)),

nth (4, decoded-state)), nth (20, decoded-state), f-nand (f-nand (side-effect-b, nth (21, decoded-state)),

f-nand4 (side-effect-b, f-not (side-effect-a), f-not (f-or (store, set-some-flags)), nth (4, decoded-state))),

f-nand (f-not (nth (22, decoded-state)),

f-nand (f-and (side-effect-b, unary), nth (7, decoded-state))), f-nand (f-nand (f-not (hold-), nth (24, decoded-state)),

f-nand (f-not (hold-), nth (1, decoded-state))), f-and (hold-, nth (24, decoded-state)), vss, vss, f-nand3 (f-not (nth (31, decoded-state)),

f-not (nth (27, decoded-state)), f-not (nth (26, decoded-state))),

nth (28, decoded-state), f-nand (f-nand (f-not (all-t-regs-address), nth (30, decoded-state)),

f-not (nth (29, decoded-state))), vss)

Event: Enable f$next-state; name this event ‘f$next-state-off’.

Theorem: f$next-state=next-state (bvp (decoded-state) ∧ (length (decoded-state) = 32) ∧ boolp (store) ∧ boolp (set-some-flags) ∧ boolp (unary) ∧ boolp (direct-a) ∧ boolp (direct-b) ∧ boolp (side-effect-a) ∧ boolp (side-effect-b) ∧ boolp (all-t-regs-address) ∧ boolp (dtack-) ∧ boolp (hold-)) → (f$next-state (decoded-state,

store,

set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-)

= next-state (decoded-state, store, set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-))

Definition: next-state*

= cons ('next-state,

cons (append (indices ('s, 0, 32),

'(store set-some-flags unary direct-a
direct-b side-effect-a side-effect-b
all-t-regs-address dtack- hold-)),
cons ('(w-17 w-18 w-19 w-22 w-24 w-27 w-29 w-44
w-47 w-48 w-49 w-52 w-61 w-62 w-63 w-66
w-74 w-75 w-76 w-79 w-82 w-83 w-89 w-93
w-98 w-99 w-112 w-113 w-105 w-106 w-110
w-111),

cons (append (list (list ('r-0,

'(fetch0),
'id,

list (index ('s, 0))), list ('r-1,

'(fetch1),
'id,

list (index ('s, 1))), list ('r-2,

'(fetch2),
'id,

list (index ('s, 2))), list ('r-3,

'(fetch3),
'id,

list (index ('s, 3))), list ('r-4,

'(decode),
'id,

list (index ('s, 4))), list ('r-5,

'(rega),
'id,

list (index ('s, 5))), list ('r-6,

'(regb),
'id,

list (index ('s, 6))), list ('r-7,

'(update),
'id,

list (index ('s, 7))), list ('r-8,

'(reada0),
'id,

list (index ('s, 8))), list ('r-9,

'(reada1),
'id,

list (index ('s, 9))), list ('r-10,

'(reada2),
'id,

list (index ('s, 10))), list ('r-11,

'(reada3),
'id,

list (index ('s, 11))), list ('r-12,

'(readb0),
'id,

list (index ('s, 12))), list ('r-13,

'(readb1),
'id,

list (index ('s, 13))), list ('r-14,

'(readb2),
'id,

list (index ('s, 14))), list ('r-15,

'(readb3),
'id,

list (index ('s, 15))), list ('r-16,

'(write0),
'id,

list (index ('s, 16))), list ('r-17,

'(write1),
'id,

list (index ('s, 17))), list ('r-18,

'(write2),
'id,

list (index ('s, 18))), list ('r-19,

'(write3),
'id,

list (index ('s, 19))), list ('r-20,

'(sefa0),
'id,

list (index ('s, 20))), list ('r-21,

'(sefa1),
'id,

list (index ('s, 21))), list ('r-22,

'(sefb0),
'id,

list (index ('s, 22))), list ('r-23,

'(sefb1),
'id,

list (index ('s, 23))), list ('r-24,

'(hold0),
'id,

list (index ('s, 24))), list ('r-25,

'(hold1),
'id,

list (index ('s, 25))), list ('r-26,

'(v11010),
'id,

list (index ('s, 26))), list ('r-27,

'(v11011),
'id,

list (index ('s, 27))), list ('r-28,

'(reset0),
'id,

list (index ('s, 28))), list ('r-29,

'(reset1),
'id,

list (index ('s, 29))), list ('r-30,

'(reset2),
'id,

list (index ('s, 30))), list ('r-31,

'(v11111),
'id,

list (index ('s, 31)))),

'((g-111 (w-111) vss nil)
(g-109 (w-109) b-not (reset1))
(g-107
(w-107)
b-not
(all-t-regs-address))
(g-108
(w-108)
b-nand
(w-107 reset2))
(g-110
(w-110)
b-nand
(w-108 w-109))
(g-106 (w-106) id (reset0))
(g-104 (w-104) b-not (v11010))
(g-103 (w-103) b-not (v11011))
(g-102 (w-102) b-not (v11111))
(g-105
(w-105)

b-nand3
(w-102 w-103 w-104))
(g-99
(w-99)
b-and
(hold- hold0))
(g-96 (w-96) b-not (hold-))
(g-97
(w-97)
b-nand
(w-96 fetch1))
(g-95
(w-95)
b-nand
(w-96 hold0))
(g-98
(w-98)
b-nand
(w-95 w-97))
(g-91
(w-91)
b-and
(side-effect-b unary))
(g-92
(w-92)
b-nand
(w-91 update))
(g-90 (w-90) b-not (sefb0))
(g-93
(w-93)
b-nand
(w-90 w-92))
(g-86
(w-86)
b-or
(store set-some-flags))
(g-87 (w-87) b-not (w-86))
(g-85
(w-85)
b-not
(side-effect-a))
(g-88
(w-88)
b-nand4

(side-effect-b w-85 w-87 decode))
(g-84
(w-84)
b-nand
(side-effect-b sefa1))
(g-89
(w-89)
b-nand
(w-84 w-88))
(g-83 (w-83) id (sefa0))
(g-82
(w-82)
b-and3
(side-effect-a w-87 decode))
(g-78 (w-78) b-not (write2))
(g-77
(w-77)
b-nand
(dtack- write3))
(g-79
(w-79)
b-nand
(w-77 w-78))
(g-76 (w-76) id (write1))
(g-75 (w-75) id (write0))
(g-72 (w-72) b-not (direct-b))
(g-73
(w-73)
b-nand3
(store w-72 rega))
(g-70 (w-70) b-not (dtack-))
(g-71
(w-71)
b-nand5
(store unary w-72 w-70 reada3))
(g-68
(w-68)
b-nand3
(store w-70 readb3))
(g-74
(w-74)
b-nand3
(w-68 w-71 w-73))
(g-65 (w-65) b-not (readb2))

(g-64
(w-64)
b-nand
(dtack- readb3))
(g-66
(w-66)
b-nand
(w-64 w-65))
(g-63 (w-63) id (readb1))
(g-62 (w-62) id (readb0))
(g-57
(w-57)
b-or
(direct-b unary))
(g-58 (w-58) b-not (w-57))
(g-60
(w-60)
b-nand4
(w-58 direct-a w-86 decode))
(g-53 (w-53) b-not (unary))
(g-56
(w-56)
b-nand4
(w-53 w-72 w-70 reada3))
(g-61
(w-61)
b-nand
(w-56 w-60))
(g-51 (w-51) b-not (reada2))
(g-50
(w-50)
b-nand
(dtack- reada3))
(g-52
(w-52)
b-nand
(w-50 w-51))
(g-49 (w-49) id (reada1))
(g-48 (w-48) id (reada0))
(g-45 (w-45) b-not (direct-a))
(g-47
(w-47)
b-and3
(w-45 w-86 decode))

(g-43
(w-43)
b-nand3
(unary direct-b rega))
(g-40 (w-40) b-not (store))
(g-42
(w-42)
b-nand3
(w-40 w-72 rega))
(g-39 (w-39) b-not (regb))
(g-38
(w-38)
b-nand3
(direct-b w-70 reada3))
(g-36
(w-36)
b-nand5
(w-40 unary w-72 w-70 reada3))
(g-32
(w-32)
b-nand3
(w-40 w-70 readb3))
(g-44
(w-44)
b-nand6
(w-32 w-36 w-38 w-39 w-42 w-43))
(g-29
(w-29)
b-and3
(w-53 direct-b rega))
(g-27
(w-27)
b-and4
(w-57 direct-a w-86 decode))
(g-24
(w-24)
b-and
(w-70 fetch3))
(g-21 (w-21) b-not (fetch2))
(g-20
(w-20)
b-nand
(dtack- fetch3))
(g-22

(w-22)
b-nand
(w-20 w-21))
(g-19
(w-19)
b-and
(hold- fetch1))
(g-18 (w-18) id (fetch0))
(g-11
(w-11)
b-not
(side-effect-b))
(g-15
(w-15)
b-nand4
(w-11 w-85 w-87 decode))
(g-9 (w-9) b-not (w-91))
(g-10
(w-10)
b-nand
(w-9 update))
(g-7
(w-7)
b-nand
(w-70 write3))
(g-16
(w-16)
b-and3
(w-7 w-10 w-15))
(g-4
(w-4)
b-nand
(w-11 sefa1))
(g-2 (w-2) b-not (sefb1))
(g-1 (w-1) b-not (hold1))
(g-0
(w-0)
b-nand
(all-t-regs-address reset2))
(g-5
(w-5)
b-and4
(w-0 w-1 w-2 w-4))
(g-17

                            (w-17)
                            b-nand
                            (w-5 w-16))
                           (g-112 (w-112) id (w-111))
                           (g-113 (w-113) id (w-111)))),
                  '(nil)))))

Definition: next-state& (netlist) = ((lookup-module ('next-state, netlist) = next-state*)

∧ vss& (delete-module ('next-state, netlist)) ∧ b-or& (delete-module ('next-state, netlist)) ∧ b-nand5& (delete-module ('next-state, netlist)) ∧ b-nand3& (delete-module ('next-state, netlist)) ∧ b-nand6& (delete-module ('next-state, netlist)) ∧ b-and& (delete-module ('next-state, netlist)) ∧ b-nand4& (delete-module ('next-state, netlist)) ∧ b-and3& (delete-module ('next-state, netlist)) ∧ b-not& (delete-module ('next-state, netlist)) ∧ b-and4& (delete-module ('next-state, netlist)) ∧ b-nand& (delete-module ('next-state, netlist)) ∧ id& (delete-module ('next-state, netlist)))

Event: Enable next-state&; name this event ‘next-state&-off’.

Definition: next-state$netlist = cons (next-state*,

((((((((((vss$netlist ∪ b-or$netlist) ∪ b-nand5$netlist) ∪ b-nand3$netlist) ∪ b-nand6$netlist) ∪ b-and$netlist) ∪ b-nand4$netlist) ∪ b-and3$netlist) ∪ b-not$netlist) ∪ b-and4$netlist) ∪ b-nand$netlist) ∪ id$netlist)

Theorem: bvp-length-next-state (length (next-state (decoded-state,

store,

set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-))

= 32)

∧ ((bvp (decoded-state) ∧ (length (decoded-state) = 32))

→ bvp (next-state (decoded-state, store, set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-)))

Theorem: properp-length-f$next-state (length (f$next-state (decoded-state,

store, set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-))

= 32)

∧ properp (f$next-state (decoded-state, store, set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-,

hold-))

Theorem: next-state$value (next-state& (netlist) ∧ properp (decoded-state) ∧ (length (decoded-state) = 32)) → (dual-eval (0,

'next-state,

append (decoded-state,

list (store, set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-)),

state, netlist)

= f$next-state (decoded-state, store, set-some-flags, unary, direct-a, direct-b, side-effect-a, side-effect-b, all-t-regs-address, dtack-, hold-))

Event: Enable next-state$value; name this event ‘next-state$value-off’.

(DEFN CV
(DECODED-STATE RN-A RN-B OP-CODE PC-REG REGS-ADDRESS SET-FLAGS STORE C
A-IMMEDIATE-P RW- DIRECT-A SIDE-EFFECT-A SIDE-EFFECT-B
PRE-DEC-A PRE-DEC-B)
(CONS
(B-AND (B-NAND (B-NOT RW-)
(NTH 0 DECODED-STATE))

(B-NOR3 (NTH 17 DECODED-STATE)
(NTH 18 DECODED-STATE)
(NTH 19 DECODED-STATE)))
(CONS
(B-NOR8 (NTH 2 DECODED-STATE)
(NTH 3 DECODED-STATE)
(NTH 10 DECODED-STATE)
(NTH 11 DECODED-STATE)
(NTH 14 DECODED-STATE)
(NTH 15 DECODED-STATE)
(NTH 18 DECODED-STATE)
(NTH 19 DECODED-STATE))
(CONS
(B-NOT (NTH 24 DECODED-STATE))
(CONS
(B-NAND5 (B-NAND STORE (NTH 7 DECODED-STATE))
(B-NAND SIDE-EFFECT-A
(NTH 9 DECODED-STATE))
(B-NAND3 (B-NOT STORE)
 SIDE-EFFECT-B
 (NTH 14 DECODED-STATE))
(B-NAND SIDE-EFFECT-B
(NTH 17 DECODED-STATE))
(B-NOR5 (NTH 2 DECODED-STATE)
(NTH 21 DECODED-STATE)
(NTH 23 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 30 DECODED-STATE)))
(CONS
(B-NAND (B-NAND DIRECT-A
(NTH 13 DECODED-STATE))
(B-NOR6 (NTH 0 DECODED-STATE)
(NTH 5 DECODED-STATE)
(NTH 8 DECODED-STATE)
(NTH 11 DECODED-STATE)
(NTH 20 DECODED-STATE)
(NTH 29 DECODED-STATE)))
(CONS
(B-NAND (B-NOR4 (NTH 6 DECODED-STATE)
 (NTH 7 DECODED-STATE)
 (NTH 10 DECODED-STATE)
 (NTH 12 DECODED-STATE))
(B-NOR4 (NTH 15 DECODED-STATE)
 (NTH 16 DECODED-STATE)

     (NTH 22 DECODED-STATE)
     (NTH 29 DECODED-STATE)))
(CONS
(B-OR (NTH 3 DECODED-STATE)
(NTH 29 DECODED-STATE))
(CONS
(B-OR (NTH 16 DECODED-STATE)
(NTH 28 DECODED-STATE))
(CONS
(B-NAND (B-NOR3 (NTH 0 DECODED-STATE)
        (NTH 8 DECODED-STATE)
        (NTH 12 DECODED-STATE))
(B-NOR (NTH 16 DECODED-STATE)
       (NTH 29 DECODED-STATE)))
(CONS
(B-OR3 (NTH 0 DECODED-STATE)
(NTH 24 DECODED-STATE)
(NTH 28 DECODED-STATE))
(CONS
(B-OR (NTH 24 DECODED-STATE)
(NTH 28 DECODED-STATE))
(CONS
(B-OR3 (NTH 3 DECODED-STATE)
  (NTH 11 DECODED-STATE)
  (NTH 15 DECODED-STATE))
(CONS
(B-NAND (B-NAND PRE-DEC-A
            (NTH 8 DECODED-STATE))
    (B-NAND PRE-DEC-B
            (B-OR (NTH 12 DECODED-STATE)
                  (NTH 16 DECODED-STATE))))
(CONS
(B-AND A-IMMEDIATE-P
    (B-OR (NTH 5 DECODED-STATE)
          (NTH 13 DECODED-STATE)))
(CONS
(CARRY-IN-HELP
(CONS C
(CONS
   (B-OR4 (NTH 0 DECODED-STATE)
          (NTH 28 DECODED-STATE)
          (NTH 29 DECODED-STATE)
          (NTH 30 DECODED-STATE))
   (V-IF (B-NOR4 (NTH 2 DECODED-STATE)

      (B-OR (NTH 9 DECODED-STATE)
            (NTH 21 DECODED-STATE))
      (B-OR3 (NTH 14 DECODED-STATE)
             (NTH 17 DECODED-STATE)
             (NTH 23 DECODED-STATE))
      (B-OR4 (NTH 0 DECODED-STATE)
             (NTH 28 DECODED-STATE)
             (NTH 29 DECODED-STATE)
             (NTH 30 DECODED-STATE)))
OP-CODE
(V-IF (B-NAND (B-NAND (B-OR (NTH 9 DECODED-STATE)
                          (NTH 21 DECODED-STATE))
                    PRE-DEC-A)
            (B-NAND (B-OR3 (NTH 14 DECODED-STATE)
                           (NTH 17 DECODED-STATE)
                           (NTH 23 DECODED-STATE))
                    PRE-DEC-B))
    (ALU-DEC-OP)
    (ALU-INC-OP))))))
(CONS
(B-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE))
(APPEND
(ENCODE-32 (NTH 0 DECODED-STATE)
(NTH 1 DECODED-STATE)
(NTH 2 DECODED-STATE)
(NTH 3 DECODED-STATE)
(NTH 4 DECODED-STATE)
(NTH 5 DECODED-STATE)
(NTH 6 DECODED-STATE)
(NTH 7 DECODED-STATE)
(NTH 8 DECODED-STATE)
(NTH 9 DECODED-STATE)
(NTH 10 DECODED-STATE)
(NTH 11 DECODED-STATE)
(NTH 12 DECODED-STATE)
(NTH 13 DECODED-STATE)
(NTH 14 DECODED-STATE)
(NTH 15 DECODED-STATE)
(NTH 16 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 18 DECODED-STATE)

(NTH 19 DECODED-STATE)
(NTH 20 DECODED-STATE)
(NTH 21 DECODED-STATE)
(NTH 22 DECODED-STATE)
(NTH 23 DECODED-STATE)
(NTH 24 DECODED-STATE)
(NTH 25 DECODED-STATE)
(NTH 26 DECODED-STATE)
(NTH 27 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE)
(NTH 31 DECODED-STATE))
(APPEND
(V-IF (B-NOR (NTH 7 DECODED-STATE)
   (NTH 16 DECODED-STATE))
(V-IF (NTH 28 DECODED-STATE)
  (MAKE-LIST 4 T)
  (MAKE-LIST 4 F))
SET-FLAGS)
(APPEND
(V-IF (B-NAND (B-NOR3 (NTH 5 DECODED-STATE)
             (NTH 8 DECODED-STATE)
             (NTH 9 DECODED-STATE))
     (B-NOR3 (NTH 13 DECODED-STATE)
             (NTH 20 DECODED-STATE)
             (NTH 21 DECODED-STATE)))
RN-A
(V-IF (B-NAND (B-NOR5 (NTH 6 DECODED-STATE)
                   (NTH 7 DECODED-STATE)
                   (NTH 10 DECODED-STATE)
                   (NTH 12 DECODED-STATE)
                   (NTH 14 DECODED-STATE))
           (B-NOR4 (NTH 16 DECODED-STATE)
                   (NTH 17 DECODED-STATE)
                   (NTH 22 DECODED-STATE)
                   (NTH 23 DECODED-STATE)))
   RN-B
   (V-IF (B-OR (NTH 28 DECODED-STATE)
               (NTH 29 DECODED-STATE))
         (MAKE-LIST 4 F)
         (V-IF (NTH 30 DECODED-STATE)
               (V-INC REGS-ADDRESS)
               PC-REG))))

(APPEND
(V-IF (B-NOR4 (NTH 2 DECODED-STATE)
(B-OR (NTH 9 DECODED-STATE)
(NTH 21 DECODED-STATE))
(B-OR3 (NTH 14 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 23 DECODED-STATE))
(B-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE)))
OP-CODE
(V-IF (B-NAND (B-NAND (B-OR (NTH 9 DECODED-STATE)
             (NTH 21 DECODED-STATE))
       PRE-DEC-A)
(B-NAND (B-OR3 (NTH 14 DECODED-STATE)
              (NTH 17 DECODED-STATE)
              (NTH 23 DECODED-STATE))
       PRE-DEC-B))
(ALU-DEC-OP)
(ALU-INC-OP)))
(MPG
(CONS
(B-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE))
(CONS
(B-OR3 (NTH 14 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 23 DECODED-STATE))
(V-IF
(B-NOR4 (NTH 2 DECODED-STATE)
(B-OR (NTH 9 DECODED-STATE)
(NTH 21 DECODED-STATE))
(B-OR3 (NTH 14 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 23 DECODED-STATE))
(B-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE)))
OP-CODE
(V-IF (B-NAND (B-NAND (B-OR (NTH 9 DECODED-STATE)

                                            (NTH 21 DECODED-STATE))
                                      PRE-DEC-A)
                              (B-NAND (B-OR3 (NTH 14 DECODED-STATE)
                                             (NTH 17 DECODED-STATE)
                                             (NTH 23 DECODED-STATE))
                                      PRE-DEC-B))
                      (ALU-DEC-OP)
                      (ALU-INC-OP)))))))))))))))))))))))))))

Event: Enable cv; name this event ‘cv-off’.

(DEFN F$CV
(DECODED-STATE RN-A RN-B OP-CODE PC-REG REGS-ADDRESS SET-FLAGS STORE C
     A-IMMEDIATE-P RW- DIRECT-A SIDE-EFFECT-A SIDE-EFFECT-B
     PRE-DEC-A PRE-DEC-B)
(CONS
(F-AND (F-NAND (F-NOT RW-)
      (NTH 0 DECODED-STATE))
(F-NOR3 (NTH 17 DECODED-STATE)
      (NTH 18 DECODED-STATE)
      (NTH 19 DECODED-STATE)))
(CONS
(F-NOR8 (NTH 2 DECODED-STATE)
(NTH 3 DECODED-STATE)
(NTH 10 DECODED-STATE)
(NTH 11 DECODED-STATE)
(NTH 14 DECODED-STATE)
(NTH 15 DECODED-STATE)
(NTH 18 DECODED-STATE)
(NTH 19 DECODED-STATE))
(CONS
(F-NOT (NTH 24 DECODED-STATE))
(CONS
(F-NAND5 (F-NAND STORE (NTH 7 DECODED-STATE))
   (F-NAND SIDE-EFFECT-A
           (NTH 9 DECODED-STATE))
   (F-NAND3 (F-NOT STORE)
            SIDE-EFFECT-B
            (NTH 14 DECODED-STATE))
   (F-NAND SIDE-EFFECT-B
           (NTH 17 DECODED-STATE))
   (F-NOR5 (NTH 2 DECODED-STATE)

(NTH 21 DECODED-STATE)
(NTH 23 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 30 DECODED-STATE)))
(CONS
(F-NAND (F-NAND DIRECT-A
(NTH 13 DECODED-STATE))
(F-NOR6 (NTH 0 DECODED-STATE)
(NTH 5 DECODED-STATE)
(NTH 8 DECODED-STATE)
(NTH 11 DECODED-STATE)
(NTH 20 DECODED-STATE)
(NTH 29 DECODED-STATE)))
(CONS
(F-NAND (F-NOR4 (NTH 6 DECODED-STATE)
 (NTH 7 DECODED-STATE)
 (NTH 10 DECODED-STATE)
 (NTH 12 DECODED-STATE))
(F-NOR4 (NTH 15 DECODED-STATE)
 (NTH 16 DECODED-STATE)
 (NTH 22 DECODED-STATE)
 (NTH 29 DECODED-STATE)))
(CONS
(F-OR (NTH 3 DECODED-STATE)
(NTH 29 DECODED-STATE))
(CONS
(F-OR (NTH 16 DECODED-STATE)
(NTH 28 DECODED-STATE))
(CONS
(F-NAND (F-NOR3 (NTH 0 DECODED-STATE)
    (NTH 8 DECODED-STATE)
    (NTH 12 DECODED-STATE))
(F-NOR (NTH 16 DECODED-STATE)
   (NTH 29 DECODED-STATE)))
(CONS
(F-OR3 (NTH 0 DECODED-STATE)
(NTH 24 DECODED-STATE)
(NTH 28 DECODED-STATE))
(CONS
(F-OR (NTH 24 DECODED-STATE)
(NTH 28 DECODED-STATE))
(CONS
(F-OR3 (NTH 3 DECODED-STATE)
(NTH 11 DECODED-STATE)

(NTH 15 DECODED-STATE))
(CONS
(F-NAND (F-NAND PRE-DEC-A
(NTH 8 DECODED-STATE))
(F-NAND PRE-DEC-B
(F-OR (NTH 12 DECODED-STATE)
(NTH 16 DECODED-STATE))))
(CONS
(F-AND A-IMMEDIATE-P
(F-OR (NTH 5 DECODED-STATE)
(NTH 13 DECODED-STATE)))
(CONS
(F$CARRY-IN-HELP
(CONS C
(CONS
(F-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE))
(F$SELECT-OP-CODE
(F-NOR4 (NTH 2 DECODED-STATE)
(F-OR (NTH 9 DECODED-STATE)
(NTH 21 DECODED-STATE))
(F-OR3 (NTH 14 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 23 DECODED-STATE))
(F-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE)))
(F-NAND (F-NAND (F-OR (NTH 9 DECODED-STATE)
       (NTH 21 DECODED-STATE))
 PRE-DEC-A)
(F-NAND (F-OR3 (NTH 14 DECODED-STATE)
        (NTH 17 DECODED-STATE)
        (NTH 23 DECODED-STATE))
 PRE-DEC-B))
OP-CODE))))
(CONS
(F-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE))
(APPEND

(F$ENCODE-32 (NTH 0 DECODED-STATE)
(NTH 1 DECODED-STATE)
(NTH 2 DECODED-STATE)
(NTH 3 DECODED-STATE)
(NTH 4 DECODED-STATE)
(NTH 5 DECODED-STATE)
(NTH 6 DECODED-STATE)
(NTH 7 DECODED-STATE)
(NTH 8 DECODED-STATE)
(NTH 9 DECODED-STATE)
(NTH 10 DECODED-STATE)
(NTH 11 DECODED-STATE)
(NTH 12 DECODED-STATE)
(NTH 13 DECODED-STATE)
(NTH 14 DECODED-STATE)
(NTH 15 DECODED-STATE)
(NTH 16 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 18 DECODED-STATE)
(NTH 19 DECODED-STATE)
(NTH 20 DECODED-STATE)
(NTH 21 DECODED-STATE)
(NTH 22 DECODED-STATE)
(NTH 23 DECODED-STATE)
(NTH 24 DECODED-STATE)
(NTH 25 DECODED-STATE)
(NTH 26 DECODED-STATE)
(NTH 27 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE)
(NTH 31 DECODED-STATE))
(APPEND
(FV-IF (F-NOR (NTH 7 DECODED-STATE)
  (NTH 16 DECODED-STATE))
(MAKE-LIST 4
      (THREEFIX (NTH 28 DECODED-STATE)))
SET-FLAGS)
(APPEND
(FV-IF (F-NAND (F-NOR3 (NTH 5 DECODED-STATE)
            (NTH 8 DECODED-STATE)
            (NTH 9 DECODED-STATE))
    (F-NOR3 (NTH 13 DECODED-STATE)
            (NTH 20 DECODED-STATE)

(NTH 21 DECODED-STATE)))
RN-A
(FV-IF (F-NAND (F-NOR5 (NTH 6 DECODED-STATE)
(NTH 7 DECODED-STATE)
(NTH 10 DECODED-STATE)
(NTH 12 DECODED-STATE)
(NTH 14 DECODED-STATE))
(F-NOR4 (NTH 16 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 22 DECODED-STATE)
(NTH 23 DECODED-STATE)))
RN-B
(F$V-IF-F-4 (F-OR (NTH 28 DECODED-STATE)
  (NTH 29 DECODED-STATE))
(FV-IF (NTH 30 DECODED-STATE)
   (F$V-INC4$V REGS-ADDRESS)
   PC-REG))))
(APPEND
(F$SELECT-OP-CODE
(F-NOR4 (NTH 2 DECODED-STATE)
(F-OR (NTH 9 DECODED-STATE)
(NTH 21 DECODED-STATE))
(F-OR3 (NTH 14 DECODED-STATE)
(NTH 17 DECODED-STATE)
(NTH 23 DECODED-STATE))
(F-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE)))
(F-NAND (F-NAND (F-OR (NTH 9 DECODED-STATE)
     (NTH 21 DECODED-STATE))
PRE-DEC-A)
(F-NAND (F-OR3 (NTH 14 DECODED-STATE)
      (NTH 17 DECODED-STATE)
      (NTH 23 DECODED-STATE))
PRE-DEC-B))
OP-CODE)
(F$MPG
(CONS
(F-OR4 (NTH 0 DECODED-STATE)
(NTH 28 DECODED-STATE)
(NTH 29 DECODED-STATE)
(NTH 30 DECODED-STATE))
(CONS

                       (F-OR3 (NTH 14 DECODED-STATE)
                              (NTH 17 DECODED-STATE)
                              (NTH 23 DECODED-STATE))
                       (F$SELECT-OP-CODE
                                (F-NOR4 (NTH 2 DECODED-STATE)
                                        (F-OR (NTH 9 DECODED-STATE)
                                              (NTH 21 DECODED-STATE))
                                        (F-OR3 (NTH 14 DECODED-STATE)
                                               (NTH 17 DECODED-STATE)
                                               (NTH 23 DECODED-STATE))
                                        (F-OR4 (NTH 0 DECODED-STATE)
                                               (NTH 28 DECODED-STATE)
                                               (NTH 29 DECODED-STATE)
                                               (NTH 30 DECODED-STATE)))
                                (F-NAND (F-NAND (F-OR (NTH 9 DECODED-STATE)
                                                      (NTH 21 DECODED-STATE))
                                                PRE-DEC-A)
                                        (F-NAND (F-OR3 (NTH 14 DECODED-STATE)
                                                       (NTH 17 DECODED-STATE)
                                                       (NTH 23 DECODED-STATE))
                                                PRE-DEC-B))
                                OP-CODE)))))))))))))))))))))))))

Event: Enable f$cv; name this event ‘f$cv-off’.

Theorem: make-list-crock-for-f$cv=cv boolp (v) → (make-list (4, v)

= if v then list (t, t, t, t) else list (f, f, f, f) endif)

Event: Enable make-list-crock-for-f$cv=cv; name this event ‘make-list-crock-for-f$cv=cv-off’.

Theorem: f$cv=cv (bvp (decoded-state) ∧ (length (decoded-state) = 32) ∧ bvp (rn-a) ∧ (length (rn-a) = 4) ∧ bvp (rn-b) ∧ (length (rn-b) = 4) ∧ bvp (op-code) ∧ (length (op-code) = 4)

∧ bvp (pc-reg) ∧ (length (pc-reg) = 4) ∧ bvp (regs-address) ∧ (length (regs-address) = 4) ∧ bvp (set-flags) ∧ (length (set-flags) = 4) ∧ boolp (store) ∧ boolp (c) ∧ boolp (a-immediate-p) ∧ boolp (rw-) ∧ boolp (direct-a) ∧ boolp (side-effect-a) ∧ boolp (side-effect-b) ∧ boolp (pre-dec-a) ∧ boolp (pre-dec-b)) → (f$cv (decoded-state,

rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b) = cv (decoded-state, rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b))

Theorem: bvp-length-cv (((length (set-flags) = 4) ∧ (length (rn-a) = 4) ∧ (length (rn-b) = 4) ∧ (length (op-code) = 4)) → (length (cv (decoded-state,

rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b))

= 40)) ∧ ((bvp (decoded-state) ∧ (length (decoded-state) = 32))

→ bvp (cv (decoded-state, rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b)))

Theorem: properp-length-f$cv (((length (set-flags) = 4) ∧ (length (rn-a) = 4) ∧ (length (rn-b) = 4) ∧ (length (op-code) = 4)) → (length (f$cv (decoded-state,

rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b))

= 40)) ∧ ((properp (decoded-state) ∧ (length (decoded-state) = 32))

→ properp (f$cv (decoded-state, rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b)))

Definition: cv* = cons ('cv,

cons (append8 (indices ('decoded-state, 0, 32), indices ('rn-a, 0, 4), indices ('rn-b, 0, 4), indices ('op-code, 0, 4), indices ('pc-reg, 0, 4),

indices ('regs-address, 0, 4),
indices ('set-flags, 0, 4),
'(store c a-immediate-p rw- direct-a
side-effect-a side-effect-b pre-dec-a
pre-dec-b)),
cons (append6 ('(new-rw- strobe- hdack- we-regs
we-a-reg we-b-reg we-i-reg
we-data-out we-addr-out we-hold-
we-pc-reg data-in-select
dec-addr-out select-immediate alu-c
alu-zero),

indices ('state, 0, 5), indices ('we-flags, 0, 4),

indices ('new-regs-address, 0, 4),

indices ('alu-op, 0, 4), indices ('alu-mpg, 0, 7)),

cons (list (list ('g-fetch0,

'(fetch0),
'id,

list (index ('decoded-state, 0))),

list ('g-fetch1,
'(fetch1),
'id,

list (index ('decoded-state, 1))),

list ('g-fetch2,
'(fetch2),
'id,

list (index ('decoded-state, 2))),

list ('g-fetch3,
'(fetch3),
'id,

list (index ('decoded-state, 3))),

list ('g-decode,
'(decode),
'id,

list (index ('decoded-state, 4))),

list ('g-rega,
'(rega),
'id,

list (index ('decoded-state, 5))),

list ('g-regb,

'(regb),
'id,

list (index ('decoded-state, 6))),

list ('g-update,
'(update),
'id,

list (index ('decoded-state, 7))),

list ('g-reada0,
'(reada0),
'id,

list (index ('decoded-state, 8))),

list ('g-reada1,
'(reada1),
'id,

list (index ('decoded-state, 9))),

list ('g-reada2,
'(reada2),
'id,
list (index ('decoded-state, 10))),
list ('g-reada3,
'(reada3),
'id,
list (index ('decoded-state, 11))),
list ('g-readb0,
'(readb0),
'id,
list (index ('decoded-state, 12))),
list ('g-readb1,
'(readb1),
'id,
list (index ('decoded-state, 13))),
list ('g-readb2,
'(readb2),
'id,
list (index ('decoded-state, 14))),
list ('g-readb3,
'(readb3),
'id,
list (index ('decoded-state, 15))),
list ('g-write0,
'(write0),
'id,
list (index ('decoded-state, 16))),
list ('g-write1,

'(write1),
'id,
list (index ('decoded-state, 17))),
list ('g-write2,
'(write2),
'id,
list (index ('decoded-state, 18))),
list ('g-write3,
'(write3),
'id,
list (index ('decoded-state, 19))),
list ('g-sefa0,
'(sefa0),
'id,
list (index ('decoded-state, 20))),
list ('g-sefa1,
'(sefa1),
'id,
list (index ('decoded-state, 21))),
list ('g-sefb0,
'(sefb0),
'id,
list (index ('decoded-state, 22))),
list ('g-sefb1,
'(sefb1),
'id,
list (index ('decoded-state, 23))),
list ('g-hold0,
'(hold0),
'id,
list (index ('decoded-state, 24))),
list ('g-hold1,
'(hold1),
'id,
list (index ('decoded-state, 25))),
list ('g-v11010,
'(v11010),
'id,
list (index ('decoded-state, 26))),
list ('g-v11011,
'(v11011),
'id,
list (index ('decoded-state, 27))),
list ('g-reset0,

  '(reset0),
  'id,
  list (index ('decoded-state, 28))),
list ('g-reset1,
  '(reset1),
  'id,
  list (index ('decoded-state, 29))),
list ('g-reset2,
  '(reset2),
  'id,
  list (index ('decoded-state, 30))),
list ('g-v11111,
  '(v11111),
  'id,
  list (index ('decoded-state, 31))),
'(g0 (store-) b-not (store)),
'(g1
(alu-zero)
b-or4
(fetch0 reset0 reset1 reset2)),
'(g2
(alu-swap)
b-or3
(readb2 write1 sefb1)),
'(g3
(incdeca)
b-or
(reada1 sefa1)),
'(g4
(s4)
b-nor4
(fetch2 incdeca alu-swap alu-zero)),
'(g5
(s5)
b-nand
(incdeca pre-dec-a)),
'(g6
(s6)
b-nand
(alu-swap pre-dec-b)),
'(g7 (s7) b-nand (s5 s6)),

list ('g8, indices ('alu-op, 0, 4),

  'select-op-code,

cons ('s4,

cons ('s7, indices ('op-code, 0, 4)))),

'(g10 (s10) b-not (rw-)),
'(g11 (s11) b-nand (s10 fetch0)),
'(g12
(s12)
b-nor3
(write1 write2 write3)),
'(g13 (new-rw-) b-and (s11 s12)),
'(g14
(strobe-)
b-nor8
(fetch2 fetch3 reada2 reada3
 readb2 readb3 write2 write3)),
'(g15 (hdack-) b-not (hold0)),
'(g17
(s17)
b-nand
(store update)),
'(g18
(s18)
b-nand
(side-effect-a reada1)),
'(g19
(s19)
b-nand3
(store- side-effect-b readb2)),
'(g20
(s20)
b-nand
(side-effect-b write1)),
'(g21
(s21)
b-nor5
(fetch2 sefa1 sefb1 reset0 reset2)),
'(g22
(we-regs)
b-nand5
(s17 s18 s19 s20 s21)),
'(g23
(s23)
b-nand
(direct-a readb1)),
'(g24

(s24)
b-nor6
(fetch0 rega reada0 reada3 sefa0
 reset1)),
'(g25
(we-a-reg)
b-nand
(s23 s24)),
'(g26
(s26)
b-nor4
(regb update reada2 readb0)),
'(g27
(s27)
b-nor4
(readb3 write0 sefb0 reset1)),
'(g28
(we-b-reg)
b-nand
(s26 s27)),
'(g29
(we-i-reg)
b-or
(fetch3 reset1)),
'(g30
(we-data-out)
b-or
(write0 reset0)),
'(g31
(s31)
b-nor3
(fetch0 reada0 readb0)),
'(g32
(s32)
b-nor
(write0 reset1)),
'(g33
(we-addr-out)
b-nand
(s31 s32)),
'(g34
(we-hold-)
b-or3
(fetch0 hold0 reset0)),

'(g35
(we-pc-reg)
b-or
(hold0 reset0)),
'(g36
(data-in-select)
b-or3
(fetch3 reada3 readb3)),
'(g37
(s37)
b-nand
(pre-dec-a reada0)),
'(g38 (s38) b-or (readb0 write0)),
'(g39
(s39)
b-nand
(pre-dec-b s38)),
'(g40
(dec-addr-out)
b-nand
(s37 s39)),
'(g41 (s41) b-or (rega readb1)),
'(g42
(select-immediate)
b-and
(a-immediate-p s41)),

list ('g43,

  '(alu-c),
  'carry-in-help,

cons ('c,

      cons ('alu-zero,

indices ('alu-op, 0, 4)))),

list ('g44, indices ('state, 0, 5),

  'encode-32,
  indices ('decoded-state, 0, 32)),

cons ('g45,

cons (indices ('fanout-reset0, 0, 4),

       '(fanout-4 (reset0)))),
'(g46
(s46)
b-nor
(update write0)),

list ('g47, indices ('we-flags, 0, 4), index ('tv-if,

tree-number (make-tree (4))), cons ('s46,

append (indices ('fanout-reset0,

                    0,

4), indices ('set-flags, 0, 4)))),

'(g48
(s48)
b-nor3
(rega reada0 reada1)),
'(g49
(s49)
b-nor3
(readb1 sefa0 sefa1)),
'(g50
(select-rn-a)
b-nand
(s48 s49)),
'(g51
(s51)
b-nor5
(regb update reada2 readb0 readb2)),
'(g52
(s52)
b-nor4
(write0 write1 sefb0 sefb1)),
'(g53
(select-rn-b)
b-nand
(s51 s52)),
'(g54
(select-all-f)
b-or
(reset0 reset1)),

list ('g55,

  indices ('v-inc-regs-address, 0, 4),
  'v-inc4,
  indices ('regs-address, 0, 4)),

list ('g56, indices ('s56, 0, 4), index ('tv-if,

tree-number (make-tree (4))),

cons ('reset2,
     append (indices ('v-inc-regs-address,
                  0,

4), indices ('pc-reg, 0, 4)))),

list ('g57, indices ('s57, 0, 4),

'v-if-f-4,
cons ('select-all-f,

indices ('s56, 0, 4))),

list ('g58, indices ('s58, 0, 4), index ('tv-if,

tree-number (make-tree (4))),

cons ('select-rn-b,

append (indices ('rn-b, 0, 4),

indices ('s57, 0, 4)))),

list ('g59,

indices ('new-regs-address, 0, 4),

index ('tv-if,

tree-number (make-tree (4))),

cons ('select-rn-a,

append (indices ('rn-a, 0, 4),

indices ('s58, 0, 4)))),

list ('g60, indices ('alu-mpg, 0, 7),

'mpg,
cons ('alu-zero,
     cons ('alu-swap,

indices ('alu-op, 0, 4))))),

'(nil)))))

Definition: cv& (netlist) = ((lookup-module ('cv, netlist) = cv*)

∧ id& (delete-module ('cv, netlist)) ∧ b-not& (delete-module ('cv, netlist)) ∧ b-or& (delete-module ('cv, netlist)) ∧ b-or3& (delete-module ('cv, netlist)) ∧ b-or4& (delete-module ('cv, netlist)) ∧ b-nand& (delete-module ('cv, netlist)) ∧ b-nand3& (delete-module ('cv, netlist)) ∧ b-nand5& (delete-module ('cv, netlist)) ∧ b-nor& (delete-module ('cv, netlist))

∧ b-nor3& (delete-module ('cv, netlist)) ∧ b-nor4& (delete-module ('cv, netlist)) ∧ b-nor5& (delete-module ('cv, netlist)) ∧ b-nor6& (delete-module ('cv, netlist)) ∧ b-nor8& (delete-module ('cv, netlist)) ∧ b-and& (delete-module ('cv, netlist)) ∧ select-op-code& (delete-module ('cv, netlist)) ∧ tv-if& (delete-module ('cv, netlist), make-tree (4)) ∧ carry-in-help& (delete-module ('cv, netlist)) ∧ encode-32& (delete-module ('cv, netlist)) ∧ fanout-4& (delete-module ('cv, netlist)) ∧ v-inc4& (delete-module ('cv, netlist)) ∧ v-if-f-4& (delete-module ('cv, netlist)) ∧ mpg& (delete-module ('cv, netlist)))

Event: Enable cv&; name this event ‘cv&-off’.

Definition: cv$netlist = cons (cv*,

((((id$netlist ∪ b-not$netlist)

∪ (b-or$netlist ∪ (b-or3$netlist ∪ b-or4$netlist))) ∪ ((b-nand$netlist ∪ b-nand3$netlist)

∪ (b-nor$netlist ∪ b-nor3$netlist))) ∪ (((b-nor4$netlist ∪ b-nor5$netlist)

∪ (b-nor6$netlist ∪ b-nor8$netlist))

∪ ((b-and$netlist ∪ select-op-code$netlist)

∪ (tv-if$netlist (make-tree (4))

∪ carry-in-help$netlist))))

∪ (((encode-32$netlist ∪ fanout-4$netlist) ∪ (v-inc4$netlist ∪ v-if-f-4$netlist)) ∪ (mpg$netlist ∪ b-nand5$netlist)))

Theorem: check-cv$netlist cv& (cv$netlist)

Theorem: cv$value (cv& (netlist) ∧ properp (decoded-state) ∧ (length (decoded-state) = 32) ∧ properp (rn-a) ∧ (length (rn-a) = 4) ∧ properp (rn-b) ∧ (length (rn-b) = 4)

∧ properp (op-code) ∧ (length (op-code) = 4) ∧ properp (pc-reg) ∧ (length (pc-reg) = 4) ∧ properp (regs-address) ∧ (length (regs-address) = 4) ∧ properp (set-flags) ∧ (length (set-flags) = 4)) → (dual-eval (0,

'cv,

append (decoded-state,

append (rn-a,

append (rn-b,

append (op-code,

append (pc-reg,

append (regs-address,

append (set-flags,

list (store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b)))))))),

state, netlist)

= f$cv (decoded-state, rn-a, rn-b, op-code, pc-reg, regs-address, set-flags, store, c, a-immediate-p, rw-, direct-a, side-effect-a, side-effect-b, pre-dec-a, pre-dec-b))

Event: Enable cv$value; name this event ‘cv$value-off’.

Definition: next-cntl-state (reset-,

dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address)

= cv (next-state (decode-5 (v-if (reset-, state, v v11111)), store-resultp (store-cc (i-reg), flags), set-some-flags (set-flags (i-reg)), unary-op-code-p (op-code (i-reg)), or* (a-immediate-p (i-reg), reg-direct-p (mode-a (i-reg))), reg-direct-p (mode-b (i-reg)), and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg)))),

or* (pre-dec-p (mode-b (i-reg)), post-inc-p (mode-b (i-reg))), regs-address = list (t, t, t, t), dtack-, hold-),

rn-a (i-reg), rn-b (i-reg), op-code (i-reg), pc-reg, regs-address, set-flags (i-reg), store-resultp (store-cc (i-reg), flags), c-flag (flags), a-immediate-p (i-reg), rw-, or* (a-immediate-p (i-reg), reg-direct-p (mode-a (i-reg))), and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)), post-inc-p (mode-a (i-reg)))), or* (pre-dec-p (mode-b (i-reg)), post-inc-p (mode-b (i-reg))), pre-dec-p (mode-a (i-reg)), pre-dec-p (mode-b (i-reg)))

Event: Enable next-cntl-state; name this event ‘next-cntl-state-off’.

Theorem: bvp-length-next-cntl-state (length (next-cntl-state (reset-,

dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address))

= 40)

∧ bvp (next-cntl-state (reset-, dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address))

Definition: f$next-cntl-state (reset-,

dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address)

= f$cv (f$next-state (f$decode-5 (fv-or (make-list (5, f-not (reset-)), state)), cadr (f$control-let (i-reg, flags, regs-address)), caddr (f$control-let (i-reg, flags, regs-address)), cadddddr (f$control-let (i-reg, flags, regs-address)), cadddr (f$control-let (i-reg, flags, regs-address)), caddddr (f$control-let (i-reg, flags, regs-address)), caddddddddddr (f$control-let (i-reg,

flags,

regs-address)),

cadddddddddddr (f$control-let (i-reg, flags, regs-address)),

cadddddddddr (f$control-let (i-reg, flags, regs-address)), dtack-, hold-),

rn-a (i-reg), rn-b (i-reg), op-code (i-reg), pc-reg, regs-address, set-flags (i-reg), cadr (f$control-let (i-reg, flags, regs-address)), caddddddddr (f$control-let (i-reg, flags, regs-address)), car (f$control-let (i-reg, flags, regs-address)), rw-, cadddr (f$control-let (i-reg, flags, regs-address)), caddddddddddr (f$control-let (i-reg, flags, regs-address)), cadddddddddddr (f$control-let (i-reg, flags, regs-address)), caddddddr (f$control-let (i-reg, flags, regs-address)), cadddddddr (f$control-let (i-reg, flags, regs-address)))

Event: Enable f$next-cntl-state; name this event ‘f$next-cntl-state-off’.

Theorem: properp-length-f$next-cntl-state (length (f$next-cntl-state (reset-,

dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address))

= 40)

∧ properp (f$next-cntl-state (reset-, dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address))

Theorem: v-or-crock-for-f$next-cntl-state ((length (state) = 5) ∧ bvp (state)) → ((v-or (list (f, f, f, f, f), state) = state)

∧ (v-or (list (t, t, t, t, t), state) = list (t, t, t, t, t)))

Event: Enable v-or-crock-for-f$next-cntl-state; name this event ‘v-or-crock-for-f$next-cntl-state-off’.

Theorem: f$next-cntl-state=next-cntl-state (boolp (reset-) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ boolp (rw-) ∧ bvp (state) ∧ (length (state) = 5) ∧ bvp (i-reg) ∧ (length (i-reg) = 32) ∧ bvp (flags) ∧ (length (flags) = 4) ∧ bvp (pc-reg) ∧ (length (pc-reg) = 4) ∧ bvp (regs-address) ∧ (length (regs-address) = 4)) → (f$next-cntl-state (reset-,

dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address)

= next-cntl-state (reset-, dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address))

Definition: next-cntl-state*

= cons ('next-cntl-state,
       cons (append6 ('(reset- dtack- hold- rw-),

indices ('state, 0, 5), indices ('i-reg, 0, 32), indices ('flags, 0, 4), indices ('pc-reg, 0, 4),

indices ('regs-address, 0, 4)),
cons (indices ('next-cntl-state, 0, 40),
cons (list (list ('control-signals,
'(a-immediate-p store
  set-some-flags direct-a
  direct-b unary pre-dec-a
  pre-dec-b c all-t-regs-address
  side-effect-a side-effect-b),
'control-let,

append (indices ('i-reg, 0, 32),

append (indices ('flags, 0, 4),

              indices ('regs-address,
                     0,

4)))),

'(not-reset
(reset)
b-not
(reset-)),
cons ('reset5x,

cons (indices ('reset5x, 0, 5),

      '(fanout-5 (reset)))),
list ('xstate,

indices ('xstate, 0, 5), index ('v-or, 5), append (indices ('reset5x, 0, 5),

indices ('state, 0, 5))),

list ('dstate,
indices ('decoded-state, 0, 32),
'decode-5,

indices ('xstate, 0, 5)),

list ('nxstate,
indices ('next-state, 0, 32),
'next-state,

append (indices ('decoded-state,

              0,
              32),
       '(store set-some-flags
         unary direct-a direct-b
         side-effect-a
         side-effect-b
         all-t-regs-address

                                       dtack- hold-))),
                          list ('cvector,
                             indices ('next-cntl-state, 0, 40),
                             'cv,

append8 (indices ('next-state, 0, 32), rn-a (indices ('i-reg, 0, 32)), rn-b (indices ('i-reg, 0, 32)), op-code (indices ('i-reg, 0, 32)), indices ('pc-reg, 0, 4),

                                      indices ('regs-address, 0, 4),

set-flags (indices ('i-reg,

                                                    0,

32)),

                                      '(store c a-immediate-p
                                        rw- direct-a
                                        side-effect-a
                                        side-effect-b pre-dec-a
                                        pre-dec-b)))),
                      '(nil)))))

Definition: next-cntl-state& (netlist) = ((lookup-module ('next-cntl-state, netlist) = next-cntl-state*)

∧ control-let& (delete-module ('next-cntl-state, netlist)) ∧ b-not& (delete-module ('next-cntl-state, netlist)) ∧ fanout-5& (delete-module ('next-cntl-state, netlist)) ∧ v-or& (delete-module ('next-cntl-state, netlist), 5) ∧ decode-5& (delete-module ('next-cntl-state, netlist)) ∧ next-state& (delete-module ('next-cntl-state, netlist)) ∧ cv& (delete-module ('next-cntl-state, netlist)))

Event: Enable next-cntl-state&; name this event ‘next-cntl-state&-off’.

Definition: next-cntl-state$netlist = cons (next-cntl-state*,

(((control-let$netlist ∪ b-not$netlist) ∪ (fanout-5$netlist ∪ v-or$netlist (5))) ∪ (decode-5$netlist ∪ next-state$netlist)) ∪ cv$netlist)

Theorem: check-next-cntl-state$netlist next-cntl-state& (next-cntl-state$netlist)

Theorem: next-cntl-state$value (next-cntl-state& (netlist) ∧ properp (state) ∧ (length (state) = 5) ∧ properp (i-reg) ∧ (length (i-reg) = 32) ∧ properp (flags) ∧ (length (flags) = 4) ∧ properp (pc-reg) ∧ (length (pc-reg) = 4) ∧ properp (regs-address) ∧ (length (regs-address) = 4)) → (dual-eval (0,

             'next-cntl-state,

cons (reset-,

cons (dtack-,

cons (hold-,

cons (rw-,

append (state,

append (i-reg,

append (flags,

append (pc-reg,

regs-address)))))))),

dual-eval-state,

netlist) = f$next-cntl-state (reset-,

dtack-, hold-, rw-, state, i-reg, flags, pc-reg, regs-address))

Event: Enable next-cntl-state$value; name this event ‘next-cntl-state$value-off’.

Theorem: next-cntl-state$fetch0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v fetch0, i-reg, flags, pc-reg, regs-address)

= cv fetch1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$fetch1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v fetch1, i-reg, flags, pc-reg, regs-address)

= if* (hold-, cv fetch2 (rw-, regs-address, i-reg, flags, pc-reg), cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$fetch2 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v fetch2, i-reg, flags, pc-reg, regs-address)

= cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$fetch3 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v fetch3, i-reg, flags, pc-reg,

regs-address)

= if* (dtack-, cv fetch3 (rw-, regs-address, i-reg, flags, pc-reg), cv decode (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$decode ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v decode, i-reg, flags, pc-reg, regs-address)

= if* (or* (store-resultp (store-cc (i-reg), flags),

set-some-flags (set-flags (i-reg))), if* (or* (a-immediate-p (i-reg), reg-direct-p (mode-a (i-reg))),

if* (or* (reg-direct-p (mode-b (i-reg)),

unary-op-code-p (op-code (i-reg))), cv rega (rw-, regs-address, i-reg, flags, pc-reg), cv readb0 (rw-, regs-address, i-reg, flags, pc-reg)),

cv reada0 (rw-, regs-address, i-reg, flags, pc-reg)), if* (and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg)))),

cv sefa0 (rw-, regs-address, i-reg, flags, pc-reg), if* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg), cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg)))))

Theorem: next-cntl-state$rega ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v rega, i-reg, flags, pc-reg, regs-address)

= if* (reg-direct-p (mode-b (i-reg)),

if* (unary-op-code-p (op-code (i-reg)), cv update (rw-, regs-address, i-reg, flags, pc-reg), cv regb (rw-, regs-address, i-reg, flags, pc-reg)),

if* (store-resultp (store-cc (i-reg), flags), cv write0 (rw-, regs-address, i-reg, flags, pc-reg), cv update (rw-, regs-address, i-reg, flags, pc-reg))))

Theorem: next-cntl-state$regb ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v regb, i-reg, flags, pc-reg, regs-address)

= cv update (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$update ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v update, i-reg, flags, pc-reg, regs-address)

= if* (and* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), unary-op-code-p (op-code (i-reg))),

cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg), cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$reada0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reada0, i-reg, flags, pc-reg, regs-address)

= cv reada1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$reada1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reada1, i-reg, flags, pc-reg, regs-address)

= cv reada2 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$reada2 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reada2, i-reg, flags, pc-reg, regs-address)

= cv reada3 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$reada3 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reada3, i-reg, flags, pc-reg, regs-address)

= if* (dtack-, cv reada3 (rw-, regs-address, i-reg, flags, pc-reg), if* (reg-direct-p (mode-b (i-reg)),

cv update (rw-, regs-address, i-reg, flags, pc-reg), if* (unary-op-code-p (op-code (i-reg)),

if* (store-resultp (store-cc (i-reg), flags), cv write0 (rw-, regs-address, i-reg, flags, pc-reg), cv update (rw-, regs-address, i-reg, flags, pc-reg)),

cv readb0 (rw-, regs-address, i-reg, flags, pc-reg)))))

Theorem: next-cntl-state$readb0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v readb0, i-reg, flags, pc-reg, regs-address)

= cv readb1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$readb1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v readb1, i-reg, flags, pc-reg, regs-address)

= cv readb2 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$readb2 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v readb2, i-reg, flags, pc-reg, regs-address)

= cv readb3 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$readb3 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v readb3, i-reg, flags, pc-reg, regs-address)

= if* (dtack-, cv readb3 (rw-, regs-address, i-reg, flags, pc-reg), if* (store-resultp (store-cc (i-reg), flags),

cv write0 (rw-, regs-address, i-reg, flags, pc-reg), cv update (rw-, regs-address, i-reg, flags, pc-reg))))

Theorem: next-cntl-state$write0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v write0, i-reg, flags, pc-reg, regs-address)

= cv write1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$write1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v write1, i-reg, flags, pc-reg, regs-address)

= cv write2 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$write2 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v write2, i-reg, flags, pc-reg, regs-address)

= cv write3 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$write3 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v write3, i-reg, flags, pc-reg, regs-address)

= if* (dtack-, cv write3 (rw-, regs-address, i-reg, flags, pc-reg), cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$sefa0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v sefa0, i-reg, flags, pc-reg, regs-address)

= cv sefa1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$sefa1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v sefa1, i-reg, flags, pc-reg, regs-address)

= if* (or* (pre-dec-p (mode-b (i-reg)), post-inc-p (mode-b (i-reg))), cv sefb0 (rw-, regs-address, i-reg, flags, pc-reg), cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$sefb0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v sefb0, i-reg, flags, pc-reg, regs-address)

= cv sefb1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$sefb1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v sefb1, i-reg, flags, pc-reg, regs-address)

= cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$hold0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v hold0, i-reg, flags, pc-reg, regs-address)

= if* (hold-, cv hold1 (rw-, regs-address, i-reg, flags, pc-reg), cv hold0 (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$hold1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v hold1, i-reg, flags, pc-reg, regs-address)

= cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$v11010 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v v11010, i-reg, flags, pc-reg, regs-address)

= cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$v11011 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v v11011, i-reg, flags, pc-reg, regs-address)

= cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$reset0 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reset0, i-reg, flags, pc-reg, regs-address)

= cv reset1 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$reset1 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reset1, i-reg, flags, pc-reg, regs-address)

= cv reset2 (rw-, regs-address, i-reg, flags, pc-reg))

Theorem: next-cntl-state$reset2 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v reset2, i-reg, flags, pc-reg, regs-address)

= if* (regs-address = list (t, t, t, t), cv fetch0 (rw-, regs-address, i-reg, flags, pc-reg), cv reset2 (rw-, regs-address, i-reg, flags, pc-reg)))

Theorem: next-cntl-state$v11111 ((reset- = t) ∧ cv-hyps (rw-, regs-address, i-reg, flags, pc-reg)) → (next-cntl-state (reset-,

dtack-, hold-, rw-, v v11111, i-reg, flags, pc-reg, regs-address)

= cv reset0 (rw-, regs-address, i-reg, flags, pc-reg))

Definition: read-regs (address, regs) = if cadr (regs) ∧ v-iff (address, cadddr (regs)) then caddr (regs)

else read-mem (address, car (regs)) endif

Event: Enable read-regs; name this event ‘read-regs-off’.

Definition: write-regs (we, address, regs, data) = list (if cadr (regs) then write-mem (cadddr (regs), car (regs), caddr (regs))

else car (regs) endif,

we,

if we then data

else caddr (regs) endif, if we then address else cadddr (regs) endif)

Event: Enable write-regs; name this event ‘write-regs-off’.

Theorem: write-regs-f-write-regs-f write-regs (f, addr1 , write-regs (f, addr2 , regs, data2 ), data1 ) = write-regs (f, addr1 , regs, data1 )

Theorem: write-regs-f-bv-crock write-regs (f, addr, regs, bv (x)) = write-regs (f, 0, regs, 0)

Theorem: properp-length-write-regs properp (write-regs (we, address, regs, data)) ∧ (length (write-regs (we, address, regs, data)) = 4)

Theorem: write-regs-if write-regs (if c then a

else b endif, address, regs,

data)

= if c then write-regs (a, address, regs, data)

else write-regs (b, address, regs, data) endif

Theorem: write-regs-ok (memory-okp (n, m, car (write-regs (we, address, regs, data))) = if cadr (regs)

then memory-okp (n, m, write-mem (cadddr (regs), car (regs), caddr (regs))) else memory-okp (n, m, car (regs)) endif)

∧ (boolp (cadr (write-regs (we, address, regs, data))) = boolp (we)) ∧ (bvp (caddr (write-regs (we, address, regs, data)))

= if we then bvp (data)

else bvp (caddr (regs)) endif)

∧ (length (caddr (write-regs (we, address, regs, data)))

= if we then length (data)

else length (caddr (regs)) endif)

∧ (bvp (cadddr (write-regs (we, address, regs, data)))

= if we then bvp (address)

else bvp (cadddr (regs)) endif)

∧ (length (cadddr (write-regs (we, address, regs, data)))

= if we then length (address) else length (cadddr (regs)) endif)

Theorem: read-regs-write-regs-f (all-ramp-mem (length (addr), car (regs)) ∧ (length (addr) = length (cadddr (regs))) ∧ bvp (addr)) → (read-regs (addr, write-regs (f, address, regs, value))

= read-regs (addr, regs))

Theorem: all-ramp-mem-after-write-regs (all-ramp-mem (n, car (regs)) ∧ (length (cadddr (regs)) = n)) → all-ramp-mem (n, car (write-regs (we, address, regs, data)))

Theorem: read-regs=read-mem (¬ cadr (regs)) → (read-regs (v-addr, regs) = read-mem (v-addr, car (regs)))

Theorem: read-regs=read-mem-write-mem (all-ramp-mem (length (v-addr1 ), car (regs)) ∧ (length (v-addr1 ) = length (cadddr (regs))) ∧ cadr (regs)) → (read-regs (v-addr1 , regs)

= read-mem (v-addr1 , write-mem (cadddr (regs), car (regs), caddr (regs))))

Theorem: bvp-length-read-regs-32 (memory-okp (length (v-addr), 32, car (regs)) ∧ bvp (caddr (regs)) ∧ (length (caddr (regs)) = 32)) → (bvp (read-regs (v-addr, regs))

∧ (length (read-regs (v-addr, regs)) = 32))

Definition: regfile*

= cons ('regfile,

cons (cons ('clk,

cons ('te,

cons ('ti,

cons ('we,

  cons ('disable-regfile-,
       cons ('test-regfile-,

append (indices ('address,

                         0,

4), indices ('data, 0, 32)))))))),

cons (cons ('to, indices ('out, 0, 32)),

cons (list ('(we-latch
(we-dp-ram we-dp-ram-)
fd1s
(we clk ti te)),
list ('address-latch,
indices ('address-dp-ram, 0, 4),

index ('we-reg, 4), cons ('clk,

cons ('we,

cons ('te,

              cons ('we-dp-ram,

indices ('address,

                         0,

4)))))),

list ('data-latch,
indices ('data-dp-ram, 0, 32),
index ('we-reg, 32),

cons ('clk,

cons ('we,

cons ('te,

              cons (index ('address-dp-ram,

3), indices ('data,

32)))))),

'(reg-en-circuit
(we-)
ram-enable-circuit
(clk test-regfile- disable-regfile-
we-dp-ram)),

list ('ram, indices ('ramout, 0, 32),

'dp-ram-16x32,

append (indices ('address, 0, 4),

append (indices ('address-dp-ram,

                     0,

4), cons ('we-,

                   indices ('data-dp-ram,
                          0,

32))))),

list ('compare,
'(read-equal-write),
index ('v-equal, 4),

append (indices ('address, 0, 4),

       indices ('address-dp-ram,
              0,

4))),

'(mux-control
(s)
b-and3
(we-dp-ram read-equal-write
test-regfile-)),

list ('mux, indices ('out, 0, 32), index ('tv-if,

tree-number (make-tree (32))), cons ('s,

append (indices ('data-dp-ram,

                  0,
                  32),

indices ('ramout, 0, 32)))),

list ('scanout,
'(to),
'id,

list (index ('data-dp-ram, 31)))),

'((ram we-latch data-latch address-latch))))))

Theorem: regfile*$destructure (car (regfile*) = 'regfile) ∧ (cadr (regfile*)

= cons ('clk,

cons ('te,

cons ('ti,

cons ('we,

           cons ('disable-regfile-,
                cons ('test-regfile-,

append (indices ('address, 0, 4),

indices ('data, 0, 32)))))))))

∧ (caddr (regfile*) = cons ('to, indices ('out, 0, 32))) ∧ (cadddr (regfile*)

= list ('(we-latch
(we-dp-ram we-dp-ram-)
fd1s
(we clk ti te)),
list ('address-latch,
indices ('address-dp-ram, 0, 4),

index ('we-reg, 4), cons ('clk,

cons ('we,

cons ('te,

              cons ('we-dp-ram,

indices ('address, 0, 4)))))),

list ('data-latch,
indices ('data-dp-ram, 0, 32),
index ('we-reg, 32),

cons ('clk,

cons ('we,

cons ('te,

              cons (index ('address-dp-ram, 3),

indices ('data, 0, 32)))))),

'(reg-en-circuit
(we-)
ram-enable-circuit
(clk test-regfile- disable-regfile-
we-dp-ram)),

list ('ram, indices ('ramout, 0, 32),

'dp-ram-16x32,

append (indices ('address, 0, 4),

append (indices ('address-dp-ram, 0, 4), cons ('we-,

indices ('data-dp-ram, 0, 32))))),

list ('compare,
'(read-equal-write),
index ('v-equal, 4),

append (indices ('address, 0, 4),

       indices ('address-dp-ram, 0, 4))),
'(mux-control
(s)
b-and3
(we-dp-ram read-equal-write test-regfile-)),

list ('mux, indices ('out, 0, 32), index ('tv-if, tree-number (make-tree (32))), cons ('s,

append (indices ('data-dp-ram, 0, 32), indices ('ramout, 0, 32)))),

list ('scanout,
'(to),
'id,

list (index ('data-dp-ram, 31)))))

∧ (caddddr (regfile*)

= '(ram we-latch data-latch address-latch))

Event: Enable regfile*; name this event ‘regfile*-off’.

Event: Enable regfile*$destructure; name this event ‘regfile*$destructure-off’.

Event: Enable *1*regfile*; name this event ‘g*1*regfile*-off’.

Definition: regfile& (netlist) = ((lookup-module ('regfile, netlist) = regfile*)

∧ fd1s& (delete-module ('regfile, netlist)) ∧ we-reg& (delete-module ('regfile, netlist), 4) ∧ we-reg& (delete-module ('regfile, netlist), 32) ∧ ram-enable-circuit& (delete-module ('regfile, netlist)) ∧ dp-ram-16x32& (delete-module ('regfile, netlist)) ∧ v-equal& (delete-module ('regfile, netlist), 4) ∧ b-and3& (delete-module ('regfile, netlist)) ∧ tv-if& (delete-module ('regfile, netlist), make-tree (32)) ∧ id& (delete-module ('regfile, netlist)))

Event: Enable regfile&; name this event ‘regfile&-off’.

Definition: regfile$netlist = cons (regfile*,

(((fd1s$netlist ∪ we-reg$netlist (4))

∪ (we-reg$netlist (32) ∪ ram-enable-circuit$netlist)) ∪ (dp-ram-16x32$netlist

∪ (v-equal$netlist (4) ∪ b-and3$netlist))) ∪ (tv-if$netlist (make-tree (32)) ∪ id$netlist))

Theorem: check-regfile$netlist regfile& (regfile$netlist)

Definition: f$read-regs (address, regs) = fv-if (f-and3 (f-buf (cadr (regs)),

f$v-equal (address, v-threefix (cadddr (regs))), t),

v-threefix (caddr (regs)), dual-port-ram-value (32,

                          4,

append (address,

append (v-threefix (cadddr (regs)), cons (f-nand (t,

f-buf (cadr (regs))), v-threefix (caddr (regs))))),

car (regs)))

Event: Enable f$read-regs; name this event ‘f$read-regs-off’.

Theorem: properp-length-f$read-regs properp (f$read-regs (address, mem)) ∧ ((length (caddr (mem)) = 32)

→ (length (f$read-regs (address, mem)) = 32))

Theorem: f$read-regs=read-regs (memory-okp (4, 32, car (regs)) ∧ boolp (cadr (regs)) ∧ bvp (caddr (regs)) ∧ (length (caddr (regs)) = 32) ∧ bvp (cadddr (regs)) ∧ (length (cadddr (regs)) = 4) ∧ bvp (address) ∧ (length (address) = 4)) → (f$read-regs (address, regs) = read-regs (address, regs))

Theorem: regfile$value (regfile& (netlist) ∧ (test-regfile- = t) ∧ (disable-regfile- = t) ∧ memory-properp (4, 32, mem) ∧ properp (last-data) ∧ (length (last-data) = 32) ∧ properp (address) ∧ (length (address) = 4) ∧ properp (last-address) ∧ (length (last-address) = 4)) → (cdr (dual-eval (0,

                'regfile,

cons (clk,

cons (te,

cons (ti,

cons (we,

cons (disable-regfile-,

cons (test-regfile-,

append (address, data))))))),

list (mem, last-we, last-data, last-address), netlist))

= f$read-regs (address, list (mem, last-we, last-data, last-address)))

Event: Enable regfile$value; name this event ‘regfile$value-off’.

Definition: f$write-regs (we, address, regs, data) = list (dual-port-ram-state (32,

                       4,

append (address,

append (v-threefix (cadddr (regs)), cons (f-nand (t,

f-buf (cadr (regs))), v-threefix (caddr (regs))))),

car (regs)),

threefix (we),

fv-if (we, data, caddr (regs)), fv-if (we, address, cadddr (regs)))

Event: Enable f$write-regs; name this event ‘f$write-regs-off’.

Theorem: properp-length-f$write-regs properp (f$write-regs (we, address, regs, data)) ∧ (length (f$write-regs (we, address, regs, data)) = 4)

Theorem: f$write-regs=write-regs (boolp (we) ∧ boolp (cadr (regs)) ∧ bvp (caddr (regs)) ∧ (length (caddr (regs)) = 32) ∧ bvp (cadddr (regs)) ∧ (length (cadddr (regs)) = 4) ∧ bvp (address) ∧ (length (address) = 4) ∧ bvp (data) ∧ (length (data) = 32)) → (f$write-regs (we, address, regs, data)

= write-regs (we, address, regs, data))

Theorem: regfile$state (regfile& (netlist) ∧ (¬ te) ∧ (test-regfile- = t) ∧ (disable-regfile- = t) ∧ properp (data) ∧ (length (data) = 32) ∧ properp (last-data) ∧ (length (last-data) = 32) ∧ properp (address) ∧ (length (address) = 4) ∧ properp (last-address) ∧ (length (last-address) = 4)) → (dual-eval (2,

             'regfile,

cons (clk,

cons (te,

cons (ti,

cons (we,

cons (disable-regfile-,

cons (test-regfile-,

append (address, data))))))),

list (regfile, last-we, last-data, last-address), netlist)

= f$write-regs (we, address, list (regfile, last-we, last-data, last-address), data))

Event: Enable regfile$state; name this event ‘regfile$state-off’.

Definition: flags* = cons ('flags,

cons (cons ('clk,

cons ('te,

cons ('ti,

append (indices ('set-flags, 0, 4),

indices ('cvzbv, 0, 35))))),

cons ('(z n v c),

cons (list (list ('z-latch,

'(z zb),
'fd1slp,

cons (zb (indices ('cvzbv, 0, 35)),

cons ('clk,

cons (z-set (indices ('set-flags,

                          0,

4)),

              '(ti te))))),
list ('n-latch,
'(n nb),
'fd1slp,

cons (index ('cvzbv, 34),

cons ('clk,

cons (n-set (indices ('set-flags,

                          0,

4)),

              '(z te))))),
list ('v-latch,
'(v vb),
'fd1slp,

cons (v (indices ('cvzbv, 0, 35)),

cons ('clk,

cons (v-set (indices ('set-flags,

                          0,

4)),

              '(n te))))),
list ('c-latch,
'(c cb),
'fd1slp,

cons (c (indices ('cvzbv, 0, 35)), cons ('clk, cons (c-set (indices ('set-flags,

                                       0,

4)),

                            '(v te)))))),
       '((z-latch n-latch v-latch c-latch))))))

Theorem: flags*$destructure (car (flags*) = 'flags) ∧ (cadr (flags*)

= cons ('clk,

cons ('te,

cons ('ti,

append (indices ('set-flags, 0, 4),

indices ('cvzbv, 0, 35))))))

∧ (caddr (flags*) = '(z n v c)) ∧ (cadddr (flags*)

= list (list ('z-latch,

'(z zb),
'fd1slp,

cons (zb (indices ('cvzbv, 0, 35)),

cons ('clk,

cons (z-set (indices ('set-flags, 0, 4)),

              '(ti te))))),
list ('n-latch,
'(n nb),
'fd1slp,

cons (index ('cvzbv, 34),

cons ('clk,

cons (n-set (indices ('set-flags, 0, 4)),

              '(z te))))),
list ('v-latch,
'(v vb),
'fd1slp,

cons (v (indices ('cvzbv, 0, 35)),

cons ('clk,

cons (v-set (indices ('set-flags, 0, 4)),

              '(n te))))),
list ('c-latch,
'(c cb),
'fd1slp,

cons (c (indices ('cvzbv, 0, 35)),

cons ('clk,

cons (c-set (indices ('set-flags, 0, 4)),

              '(v te)))))))

 ∧ (caddddr (flags*) = '(z-latch n-latch v-latch c-latch))

Event: Enable flags*; name this event ‘flags*-off’.

Event: Enable flags*$destructure; name this event ‘flags*$destructure-off’.

Event: Enable *1*flags*; name this event ‘g*1*flags*-off’.

Definition: flags& (netlist) = ((lookup-module ('flags, netlist) = flags*)

∧ fd1slp& (delete-module ('flags, netlist)))

Event: Enable flags&; name this event ‘flags&-off’.

Definition: flags$netlist = cons (flags*, fd1slp$netlist)

Theorem: check-flags$netlist flags& (flags$netlist)

Theorem: flags$value (flags& (netlist) ∧ properp (flags) ∧ (length (flags) = 4)) → (dual-eval (0,

              'flags,

cons (clk, cons (te, cons (ti, append (set-flags, cvzbv)))), flags, netlist)

= v-threefix (flags))

Event: Enable flags$value; name this event ‘flags$value-off’.

Definition: f$update-flags (flags, set-flags, cvzbv) = list (f-if (z-set (set-flags), zb (cvzbv), z-flag (flags)),

f-if (n-set (set-flags), n (cvzbv), n-flag (flags)), f-if (v-set (set-flags), v (cvzbv), v-flag (flags)), f-if (c-set (set-flags), c (cvzbv), c-flag (flags)))

Event: Enable f$update-flags; name this event ‘f$update-flags-off’.

Theorem: properp-length-f$update-flags properp (f$update-flags (flags, set-flags, cvzbv)) ∧ (length (f$update-flags (flags, set-flags, cvzbv)) = 4)

Theorem: f$update-flags=update-flags (bvp (flags) ∧ (length (flags) = 4) ∧ bvp (set-flags) ∧ (length (set-flags) = 4) ∧ bvp (cvzbv) ∧ (length (cvzbv) = 35)) → (f$update-flags (flags, set-flags, cvzbv)

= update-flags (flags, set-flags, cvzbv))

Theorem: flags$state-help (flags& (netlist) ∧ properp (flags) ∧ (length (flags) = 4) ∧ (set-flags = list (set-z, set-n, set-v, set-c)) ∧ (cvzbv = cons (c, cons (v, cons (z, bv)))) ∧ properp (cvzbv) ∧ (length (cvzbv) = 35) ∧ (¬ te)) → (dual-eval (2,

             'flags,

cons (clk, cons (te, cons (ti, append (set-flags, cvzbv)))), flags, netlist)

= f$update-flags (flags, set-flags, cvzbv))

Event: Enable flags$state-help; name this event ‘flags$state-help-off’.

Theorem: flags$state (flags& (netlist) ∧ properp (flags) ∧ (length (flags) = 4) ∧ properp (set-flags) ∧ (length (set-flags) = 4) ∧ properp (cvzbv) ∧ (length (cvzbv) = 35) ∧ (¬ te)) → (dual-eval (2,

             'flags,

cons (clk, cons (te, cons (ti, append (set-flags, cvzbv)))), flags, netlist)

= f$update-flags (flags, set-flags, cvzbv))

Event: Enable flags$state; name this event ‘flags$state-off’.

Theorem: flags$partial-state-help (flags& (netlist) ∧ properp (flags) ∧ (length (flags) = 4) ∧ (set-flags = make-list (4, t)) ∧ (cvzbv = cons (c, cons (v, cons (z, bv)))) ∧ bvp (cvzbv) ∧ (length (cvzbv) = 35) ∧ (¬ te)) → (dual-eval (2,

             'flags,

cons (clk, cons (te, cons (ti, append (set-flags, cvzbv)))), flags, netlist)

= update-flags (flags, set-flags, cvzbv))

Event: Enable flags$partial-state-help; name this event ‘flags$partial-state-help-off’.

Theorem: flags$partial-state (flags& (netlist) ∧ properp (flags) ∧ (length (flags) = 4) ∧ (set-flags = make-list (4, t)) ∧ bvp (cvzbv) ∧ (length (cvzbv) = 35) ∧ (¬ te)) → (dual-eval (2,

             'flags,

cons (clk, cons (te, cons (ti, append (set-flags, cvzbv)))), flags, netlist)

= update-flags (flags, set-flags, cvzbv))

Event: Enable flags$partial-state; name this event ‘flags$partial-state-off’.

Definition: extend-immediate*

= cons ('extend-immediate,
       cons (cons ('select-immediate,

append (indices ('immediate, 0, 9),

indices ('reg-data, 0, 32))),

cons (indices ('z, 0, 32), cons (list (list ('buffer,

'(sign-bit),
'b-buf-pwr,

list (index ('immediate, 8))), list ('mux,

indices ('z, 0, 32), index ('tv-if,

tree-number (make-tree (32))),

cons ('select-immediate,

append (append (indices ('immediate,

                          0,

9), make-list (23,

                            'sign-bit)),

indices ('reg-data, 0, 32))))),

'(nil)))))

Theorem: extend-immediate*$destructure (car (extend-immediate*) = 'extend-immediate) ∧ (cadr (extend-immediate*)

= cons ('select-immediate,

append (indices ('immediate, 0, 9),

indices ('reg-data, 0, 32))))

∧ (caddr (extend-immediate*) = indices ('z, 0, 32)) ∧ (cadddr (extend-immediate*)

= list (list ('buffer,

'(sign-bit),
'b-buf-pwr,

list (index ('immediate, 8))), list ('mux,

indices ('z, 0, 32), index ('tv-if, tree-number (make-tree (32))),

cons ('select-immediate,

append (append (indices ('immediate, 0, 9),

make-list (23, 'sign-bit)), indices ('reg-data, 0, 32))))))

∧ (caddddr (extend-immediate*) = nil)

Event: Enable extend-immediate*; name this event ‘extend-immediate*-off’.

Event: Enable extend-immediate*$destructure; name this event ‘extend-immediate*$destructure-off’.

Event: Enable *1*extend-immediate*; name this event ‘g*1*extend-immediate*- off’.

Definition: extend-immediate& (netlist) = ((lookup-module ('extend-immediate, netlist)

= extend-immediate*)

∧ b-buf-pwr& (delete-module ('extend-immediate, netlist))

∧ tv-if& (delete-module ('extend-immediate, netlist), make-tree (32)))

Event: Enable extend-immediate&; name this event ‘extend-immediate&-off’.

Definition: extend-immediate$netlist = cons (extend-immediate*,

b-buf-pwr$netlist ∪ tv-if$netlist (make-tree (32)))

Theorem: check-extend-immediate$netlist extend-immediate& (extend-immediate$netlist)

Definition: f$extend-immediate (select-immediate, immediate, reg-data) = fv-if (select-immediate,

append (immediate, if boolp (nth (8, immediate)) then make-list (23, nth (8, immediate)) else make-list (23, x) endif),

reg-data)

Event: Enable f$extend-immediate; name this event ‘f$extend-immediate-off’.

Theorem: properp-length-f$extend-immediate properp (f$extend-immediate (select-immediate, immediate, reg-bus)) ∧ ((length (immediate) = 9)

→ (length (f$extend-immediate (select-immediate, immediate, reg-bus)) = 32))

Theorem: f$extend-immediate=extend-immediate (bvp (immediate) ∧ (length (immediate) = 9) ∧ bvp (reg-data) ∧ (length (reg-data) = 32) ∧ boolp (select-immediate)) → (f$extend-immediate (select-immediate, immediate, reg-data)

= if* (select-immediate, sign-extend (immediate, 32), reg-data))

Theorem: extend-immediate$value (extend-immediate& (netlist) ∧ properp (immediate) ∧ (length (immediate) = 9) ∧ properp (reg-data) ∧ (length (reg-data) = 32)) → (dual-eval (0,

              'extend-immediate,

cons (select-immediate, append (immediate, reg-data)), state, netlist)

= f$extend-immediate (select-immediate, immediate, reg-data))

Event: Enable extend-immediate$value; name this event ‘extend-immediate$value-off’.

Definition: ttl-input-pads-body (m, n, pi) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('out, m), index ('po, m)),

                'ttl-input,

list (index ('in, m), pi)), cons (list (index ('b, m),

list (index ('b-out, m)),

                     'b-buf,

list (index ('out, m))), ttl-input-pads-body (1 + m, n − 1, index ('po, m)))) endif

Event: Enable ttl-input-pads-body; name this event ‘ttl-input-pads-body-off’.

Definition: ttl-input-pads-body$induction (m, n, pi, bindings, state-bindings, netlist) = if n ≃ 0 then t

else ttl-input-pads-body$induction (1 + m, n − 1, index ('po, m), dual-eval-body-bindings (2,

ttl-input-pads-body (m, n, pi),

bindings,

state-bindings,

netlist),

state-bindings, netlist) endif

Definition: ttl-input-pads* (n) = cons (index ('ttl-input-pads, n),

cons (cons ('pi, indices ('in, 0, n)),

cons (cons (index ('po, n − 1), indices ('b-out, 0, n)), cons (ttl-input-pads-body (0, n, 'pi), '(nil)))))

Theorem: ttl-input-pads*$destructure (car (ttl-input-pads* (n)) = index ('ttl-input-pads, n)) ∧ (cadr (ttl-input-pads* (n)) = cons ('pi, indices ('in, 0, n))) ∧ (caddr (ttl-input-pads* (n))

= cons (index ('po, n − 1), indices ('b-out, 0, n))) ∧ (cadddr (ttl-input-pads* (n)) = ttl-input-pads-body (0, n, 'pi)) ∧ (caddddr (ttl-input-pads* (n)) = nil)

Event: Enable ttl-input-pads*; name this event ‘ttl-input-pads*-off’.

Event: Enable ttl-input-pads*$destructure; name this event ‘ttl-input-pads*$destructure-off’.

Definition: ttl-input-pads& (netlist, n) = ((lookup-module (index ('ttl-input-pads, n), netlist)

= ttl-input-pads* (n))

∧ ttl-input& (delete-module (index ('ttl-input-pads, n),

netlist)) ∧ b-buf& (delete-module (index ('ttl-input-pads, n), netlist)))

Event: Enable ttl-input-pads&; name this event ‘ttl-input-pads&-off’.

Definition: ttl-input-pads$netlist (n) = cons (ttl-input-pads* (n), ttl-input$netlist ∪ b-buf$netlist)

Theorem: ttl-input-pads-body$unbound-in-body (l < m) → unbound-in-body (index ('b-out, l), ttl-input-pads-body (m, n, pi))

Event: Enable ttl-input-pads-body$unbound-in-body; name this event ‘ttlinput-pads-body$unbound-in-body-off’.

Theorem: ttl-input-pads-body$value (ttl-input& (netlist) ∧ b-buf& (netlist)) → (collect-value (indices ('b-out, m, n),

dual-eval (1, ttl-input-pads-body (m, n, pi), bindings, state-bindings, netlist)) = v-threefix (collect-value (indices ('in, m, n), bindings)))

Event: Enable ttl-input-pads-body$value; name this event ‘ttl-input-pads-body$value-off’.

Theorem: ttl-input-pads$value (ttl-input-pads& (netlist, n) ∧ (length (inputs) = n) ∧ properp (inputs)) → (cdr (dual-eval (0,

                  index ('ttl-input-pads, n),

cons (pi, inputs),

state, netlist))

= v-threefix (inputs))

Event: Enable ttl-input-pads$value; name this event ‘ttl-input-pads$value-off’.

Definition: ttl-output-pads-body (m, n) = if n ≃ 0 then nil

else cons (list (index ('b, m), list (index ('b-in, m)),

                'b-buf,

list (index ('in, m))), cons (list (index ('g, m),

list (index ('out, m)),

                     'ttl-output,

list (index ('b-in, m))), ttl-output-pads-body (1 + m, n − 1))) endif

Event: Enable ttl-output-pads-body; name this event ‘ttl-output-pads-body-off’.

Definition: ttl-output-pads-body$induction (m, n, bindings, state-bindings, netlist) = if n ≃ 0 then t else ttl-output-pads-body$induction (1 + m,

n − 1,

dual-eval-body-bindings (2,

ttl-output-pads-body (m,

n),

bindings,

state-bindings,

netlist),

state-bindings, netlist) endif

Definition: ttl-output-pads* (n)

= cons (index ('ttl-output-pads, n),

cons (indices ('in, 0, n),

cons (indices ('out, 0, n), cons (ttl-output-pads-body (0, n), '(nil)))))

Theorem: ttl-output-pads*$destructure (car (ttl-output-pads* (n)) = index ('ttl-output-pads, n)) ∧ (cadr (ttl-output-pads* (n)) = indices ('in, 0, n)) ∧ (caddr (ttl-output-pads* (n)) = indices ('out, 0, n)) ∧ (cadddr (ttl-output-pads* (n)) = ttl-output-pads-body (0, n)) ∧ (caddddr (ttl-output-pads* (n)) = nil)

Event: Enable ttl-output-pads*; name this event ‘ttl-output-pads*-off’.

Event: Enable ttl-output-pads*$destructure; name this event ‘ttl-output-pads*$destructure-off’.

Definition: ttl-output-pads& (netlist, n) = ((lookup-module (index ('ttl-output-pads, n), netlist)

= ttl-output-pads* (n))

∧ ttl-output& (delete-module (index ('ttl-output-pads, n),

netlist)) ∧ b-buf& (delete-module (index ('ttl-output-pads, n), netlist)))

Event: Enable ttl-output-pads&; name this event ‘ttl-output-pads&-off’.

Definition: ttl-output-pads$netlist (n) = cons (ttl-output-pads* (n), ttl-output$netlist ∪ b-buf$netlist)

Theorem: ttl-output-pads-body$unbound-in-body (l < m) → unbound-in-body (index ('out, l), ttl-output-pads-body (m, n))

Event: Enable ttl-output-pads-body$unbound-in-body; name this event ‘ttloutput-pads-body$unbound-in-body-off’.

Theorem: ttl-output-pads-body$value (ttl-output& (netlist) ∧ b-buf& (netlist)) → (collect-value (indices ('out, m, n),

dual-eval (1, ttl-output-pads-body (m, n), bindings, state-bindings, netlist)) = v-threefix (collect-value (indices ('in, m, n), bindings)))

Event: Enable ttl-output-pads-body$value; name this event ‘ttl-output-pads-body$value-off’.

Theorem: ttl-output-pads$value (ttl-output-pads& (netlist, n) ∧ (length (inputs) = n) ∧ properp (inputs)) → (dual-eval (0, index ('ttl-output-pads, n), inputs, state, netlist)

= v-threefix (inputs))

Definition: ttl-tri-output-pads-body (m, n) = if n ≃ 0 then nil

else cons (list (index ('g, m), list (index ('out, m)),

                'ttl-tri-output,

cons (index ('in, m), '(enable-buf))), ttl-tri-output-pads-body (1 + m, n − 1)) endif

Event: Enable ttl-tri-output-pads-body; name this event ‘ttl-tri-output-pads-body-off’.

Definition: ttl-tri-output-pads-body$induction (m, n, bindings, state-bindings, netlist) = if n ≃ 0 then t

else ttl-tri-output-pads-body$induction (1 + m, n − 1, dual-eval-body-bindings (1,

ttl-tri-output-pads-body (m,

n),

bindings,

state-bindings, netlist),

state-bindings, netlist) endif

Definition: ttl-tri-output-pads* (n)

= cons (index ('ttl-tri-output-pads, n),

cons (cons ('enable, indices ('in, 0, n)), cons (indices ('out, 0, n),

cons (cons (cons ('enable-buffer,

                                cons ('(enable-buf),

cons (if n < 8 then 'b-buf

                                         else 'b-buf-pwr endif,
                                         '((enable))))),

ttl-tri-output-pads-body (0, n)),

                      '(nil)))))

Theorem: ttl-tri-output-pads*$destructure (car (ttl-tri-output-pads* (n)) = index ('ttl-tri-output-pads, n)) ∧ (cadr (ttl-tri-output-pads* (n)) = cons ('enable, indices ('in, 0, n))) ∧ (caddr (ttl-tri-output-pads* (n)) = indices ('out, 0, n)) ∧ (cadddr (ttl-tri-output-pads* (n))

     = cons (cons ('enable-buffer,
                  cons ('(enable-buf),

cons (if n < 8 then 'b-buf

                           else 'b-buf-pwr endif,
                           '((enable))))),

ttl-tri-output-pads-body (0, n)))

∧ (caddddr (ttl-tri-output-pads* (n)) = nil)

Event: Enable ttl-tri-output-pads*; name this event ‘ttl-tri-output-pads*-off’.

Event: Enable ttl-tri-output-pads*$destructure; name this event ‘ttl-tri-output-pads*$destructure-off’.

Definition: ttl-tri-output-pads& (netlist, n) = ((lookup-module (index ('ttl-tri-output-pads, n), netlist)

= ttl-tri-output-pads* (n))

∧ ttl-tri-output& (delete-module (index ('ttl-tri-output-pads, n),

netlist))

∧ if n < 8

then b-buf& (delete-module (index ('ttl-tri-output-pads, n), netlist)) else b-buf-pwr& (delete-module (index ('ttl-tri-output-pads,

n), netlist)) endif)

Event: Enable ttl-tri-output-pads&; name this event ‘ttl-tri-output-pads&-off’.

Definition: ttl-tri-output-pads$netlist (n) = cons (ttl-tri-output-pads* (n),

if n < 8 then b-buf$netlist else b-buf-pwr$netlist endif ∪ ttl-tri-output$netlist)

Theorem: ttl-tri-output-pads-body$unbound-in-body (l < m) → unbound-in-body (index ('out, l), ttl-tri-output-pads-body (m, n))

Event: Enable ttl-tri-output-pads-body$unbound-in-body; name this event ‘ttl-tri-output-pads-body$unbound-in-body-off’.

Theorem: ttl-tri-output-pads-body$value ttl-tri-output& (netlist) → (collect-value (indices ('out, m, n),

dual-eval (1, ttl-tri-output-pads-body (m, n), bindings, state-bindings, netlist)) = vft-buf (f-not (value ('enable-buf, bindings)),

collect-value (indices ('in, m, n), bindings)))

Event: Enable ttl-tri-output-pads-body$value; name this event ‘ttl-tri-output-pads-body$value-off’.

Theorem: ttl-tri-output-pads$value (ttl-tri-output-pads& (netlist, n) ∧ (length (inputs) = n) ∧ properp (inputs)) → (dual-eval (0,

              index ('ttl-tri-output-pads, n),

cons (enable, inputs),

state, netlist)

= vft-buf (f-not (enable), inputs))

Event: Enable ttl-tri-output-pads$value; name this event ‘ttl-tri-output-pads$value-off’.

Definition: ttl-bidirect-pads-body (m, n, pi) = if n ≃ 0 then nil

else cons (list (index ('g, m),

list (index ('data, m), index ('out, m), index ('po, m)),

                'ttl-bidirect,

list (index ('data, m), index ('in, m),

                    'buf-enable,

pi)), ttl-bidirect-pads-body (1 + m, n − 1, index ('po, m))) endif

Event: Enable ttl-bidirect-pads-body; name this event ‘ttl-bidirect-pads-body-off’.

Definition: ttl-bidirect-pads-body$induction (m, n, pi, bindings, state-bindings, netlist) = if n ≃ 0 then t

else ttl-bidirect-pads-body$induction (1 + m, n − 1, index ('po, m), dual-eval-body-bindings (1,

ttl-bidirect-pads-body (m, n, pi),

bindings,

state-bindings,

netlist),

state-bindings, netlist) endif

Definition: ttl-bidirect-pads* (n)

= cons (index ('ttl-bidirect-pads, n),

cons (cons ('enable,

cons ('pi,

append (indices ('data, 0, n), indices ('in, 0, n)))),

cons (cons (index ('po, n − 1),

append (indices ('data, 0, n), indices ('out, 0, n))), cons (cons (cons ('enable-buf,

                                cons ('(buf-enable),

cons (if n < 8 then 'b-buf

                                         else 'b-buf-pwr endif,
                                         '((enable))))),

ttl-bidirect-pads-body (0, n, 'pi)),

                      '(nil)))))

Theorem: ttl-bidirect-pads*$destructure (car (ttl-bidirect-pads* (n)) = index ('ttl-bidirect-pads, n)) ∧ (cadr (ttl-bidirect-pads* (n))

     = cons ('enable,

cons ('pi, append (indices ('data, 0, n), indices ('in, 0, n)))))

∧ (caddr (ttl-bidirect-pads* (n))

= cons (index ('po, n − 1),

append (indices ('data, 0, n), indices ('out, 0, n))))

∧ (cadddr (ttl-bidirect-pads* (n))

= cons (cons ('enable-buf,

                  cons ('(buf-enable),

cons (if n < 8 then 'b-buf

                           else 'b-buf-pwr endif,
                           '((enable))))),

ttl-bidirect-pads-body (0, n, 'pi)))

∧ (caddddr (ttl-bidirect-pads* (n)) = nil)

Event: Enable ttl-bidirect-pads*; name this event ‘ttl-bidirect-pads*-off’.

Event: Enable ttl-bidirect-pads*$destructure; name this event ‘ttl-bidirect-pads*$destructure-off’.

Definition: ttl-bidirect-pads& (netlist, n) = ((lookup-module (index ('ttl-bidirect-pads, n), netlist)

= ttl-bidirect-pads* (n))

∧ ttl-bidirect& (delete-module (index ('ttl-bidirect-pads, n),

netlist))

∧ if n < 8 then b-buf& (delete-module (index ('ttl-bidirect-pads, n), netlist)) else b-buf-pwr& (delete-module (index ('ttl-bidirect-pads,

n), netlist)) endif)

Event: Enable ttl-bidirect-pads&; name this event ‘ttl-bidirect-pads&-off’.

Definition: ttl-bidirect-pads$netlist (n) = cons (ttl-bidirect-pads* (n),

ttl-bidirect$netlist

∪ if n < 8 then b-buf$netlist else b-buf-pwr$netlist endif)

Theorem: ttl-bidirect-pads-body$unbound-in-body (l < m) → (unbound-in-body (index ('data, l), ttl-bidirect-pads-body (m, n, pi))

∧ unbound-in-body (index ('out, l),

ttl-bidirect-pads-body (m, n, pi))

∧ unbound-in-body (index ('po, l), ttl-bidirect-pads-body (m, n, pi)) ∧ unbound-in-body (index ('in, l), ttl-bidirect-pads-body (m, n, pi)))

Event: Enable ttl-bidirect-pads-body$unbound-in-body; name this event ‘ttlbidirect-pads-body$unbound-in-body-off’.

Theorem: ttl-bidirect-pads-body$value ttl-bidirect& (netlist) → ((collect-value (indices ('data, m, n),

dual-eval (1, ttl-bidirect-pads-body (m, n, pi), bindings, state-bindings, netlist))

= if value ('buf-enable, bindings) = f then v-threefix (collect-value (indices ('in, m, n), bindings)) elseif value ('buf-enable, bindings) = t then make-list (n, z) else make-list (n, x) endif) ∧ (collect-value (indices ('out, m, n),

dual-eval (1, ttl-bidirect-pads-body (m, n, pi), bindings, state-bindings,

netlist))

= if value ('buf-enable, bindings) = f

then v-threefix (v-wire (collect-value (indices ('data, m, n),

bindings), v-threefix (collect-value (indices ('in,

m, n),

bindings))))

elseif value ('buf-enable, bindings) = t

then v-threefix (collect-value (indices ('data, m, n),

bindings))

else make-list (n, x) endif))

Event: Enable ttl-bidirect-pads-body$value; name this event ‘ttl-bidirect-pads-body$value-off’.

Theorem: ttl-bidirect-pads$value (ttl-bidirect-pads& (netlist, n) ∧ (length (data) = n) ∧ properp (data) ∧ (length (inputs) = n) ∧ properp (inputs)) → (cdr (dual-eval (0,

                  index ('ttl-bidirect-pads, n),

cons (enable, cons (pi, append (data, inputs))), state-bindings, netlist))

= append (vft-buf (f-not (enable), inputs), v-threefix (v-wire (data, vft-buf (f-not (enable), inputs)))))

Event: Enable ttl-bidirect-pads$value; name this event ‘ttl-bidirect-pads$value-off’.

Definition: a-reg (state) = nth (2, state)

Definition: b-reg (state) = nth (3, state)

Definition: i-reg (state) = nth (4, state)

Definition: data-out (state) = nth (5, state)

Definition: addr-out (state) = nth (6, state)

Definition: reset- (state) = nth (7, state) Definition: dtack- (state) = nth (8, state) Definition: hold- (state) = nth (9, state) Definition: pc-reg (state) = nth (10, state) Definition: cntl-state (state) = nth (11, state) Event: Enable a-reg; name this event ‘a-reg-off’. Event: Enable b-reg; name this event ‘b-reg-off’. Event: Enable i-reg; name this event ‘i-reg-off’. Event: Enable data-out; name this event ‘data-out-off’. Event: Enable addr-out; name this event ‘addr-out-off’. Event: Enable reset-; name this event ‘reset–off’. Event: Enable dtack-; name this event ‘dtack–off’. Event: Enable hold-; name this event ‘hold–off’. Event: Enable pc-reg; name this event ‘pc-reg-off’. Event: Enable cntl-state; name this event ‘cntl-state-off’. Event: Let us define the theory fm9001-hardware-state-accessors to consist of the following events: regs, flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cntl-state. Definition: reset–input (ext-in) = nth (0, ext-in) Definition: hold–input (ext-in) = nth (1, ext-in) Definition: pc-reg-input (ext-in) = subrange (ext-in, 2, 5)

Event: Enable reset–input; name this event ‘reset–input-off’.

Event: Enable hold–input; name this event ‘hold–input-off’.

Event: Enable pc-reg-input; name this event ‘pc-reg-input-off’.

Event: Let us define the theory fm9001-external-input-accessors to consist of the following events: reset–input, hold–input, pc-reg-input.

Definition: fm9001-next-state (total-state, external-inputs) = list (list (f$write-regs (we-regs (v-threefix (cntl-state (car (total-state)))),

regs-address (v-threefix (cntl-state (car (total-state)))), regs (car (total-state)), bv (f$core-alu (alu-c (v-threefix (cntl-state (car (total-state)))), v-threefix (a-reg (car (total-state))), v-threefix (b-reg (car (total-state))), alu-zero (v-threefix (cntl-state (car (total-state)))), alu-mpg (v-threefix (cntl-state (car (total-state)))), alu-op (v-threefix (cntl-state (car (total-state)))), make-tree (32)))),

f$update-flags (flags (car (total-state)), we-flags (v-threefix (cntl-state (car (total-state)))), f$core-alu (alu-c (v-threefix (cntl-state (car (total-state)))), v-threefix (a-reg (car (total-state))), v-threefix (b-reg (car (total-state))), alu-zero (v-threefix (cntl-state (car (total-state)))), alu-mpg (v-threefix (cntl-state (car (total-state)))), alu-op (v-threefix (cntl-state (car (total-state)))), make-tree (32))),

fv-if (we-a-reg (v-threefix (cntl-state (car (total-state)))),

fv-if (f-nand (data-in-select (v-threefix (cntl-state (car (total-state)))),

f-not (dtack- (car (total-state)))), f$extend-immediate (select-immediate (v-threefix (cntl-state (car (total-state)))),

a-immediate (v-threefix (i-reg (car (total-state)))),

f$read-regs (regs-address (v-threefix (cntl-state (car (total-state)))),

regs (car (total-state)))),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state)))), cdr (memory-value (cadr (total-state),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))), strobe- (v-threefix (cntl-state (car (total-state)))))), f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

f-buf (rw- (v-threefix (cntl-state (car (total-state))))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

v-threefix (addr-out (car (total-state))))),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state))))))),

a-reg (car (total-state))), fv-if (we-b-reg (v-threefix (cntl-state (car (total-state)))),

fv-if (f-nand (data-in-select (v-threefix (cntl-state (car (total-state)))),

f-not (dtack- (car (total-state)))), f$extend-immediate (select-immediate (v-threefix (cntl-state (car (total-state)))),

a-immediate (v-threefix (i-reg (car (total-state)))), f$read-regs (regs-address (v-threefix (cntl-state (car (total-state)))),

regs (car (total-state)))),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state)))), cdr (memory-value (cadr (total-state),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

strobe- (v-threefix (cntl-state (car (total-state)))))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

f-buf (rw- (v-threefix (cntl-state (car (total-state))))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

v-threefix (addr-out (car (total-state))))),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state))))))),

b-reg (car (total-state))), fv-if (we-i-reg (v-threefix (cntl-state (car (total-state)))),

fv-if (f-nand (data-in-select (v-threefix (cntl-state (car (total-state)))),

f-not (dtack- (car (total-state)))), f$extend-immediate (select-immediate (v-threefix (cntl-state (car (total-state)))),

a-immediate (v-threefix (i-reg (car (total-state)))), f$read-regs (regs-address (v-threefix (cntl-state (car (total-state)))),

regs (car (total-state)))),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state)))), cdr (memory-value (cadr (total-state),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

strobe- (v-threefix (cntl-state (car (total-state)))))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))), f-buf (rw- (v-threefix (cntl-state (car (total-state))))))), v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))), v-threefix (addr-out (car (total-state))))),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state))))))),

i-reg (car (total-state))), fv-if (we-data-out (v-threefix (cntl-state (car (total-state)))),

bv (f$core-alu (alu-c (v-threefix (cntl-state (car (total-state)))), v-threefix (a-reg (car (total-state))), v-threefix (b-reg (car (total-state))), alu-zero (v-threefix (cntl-state (car (total-state)))), alu-mpg (v-threefix (cntl-state (car (total-state)))), alu-op (v-threefix (cntl-state (car (total-state)))), make-tree (32))),

data-out (car (total-state))), fv-if (we-addr-out (v-threefix (cntl-state (car (total-state)))),

f$dec-pass (dec-addr-out (v-threefix (cntl-state (car (total-state)))),

f$extend-immediate (select-immediate (v-threefix (cntl-state (car (total-state)))), a-immediate (v-threefix (i-reg (car (total-state)))), f$read-regs (regs-address (v-threefix (cntl-state (car (total-state)))),

regs (car (total-state))))),

addr-out (car (total-state))), f-buf (reset–input (external-inputs)), f-or (strobe- (v-threefix (cntl-state (car (total-state)))),

f-buf (car (memory-value (cadr (total-state),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

strobe- (v-threefix (cntl-state (car (total-state)))))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

f-buf (rw- (v-threefix (cntl-state (car (total-state))))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))), v-threefix (addr-out (car (total-state))))),

make-list (32, x))))),

f-if (we-hold- (v-threefix (cntl-state (car (total-state)))), f-buf (hold–input (external-inputs)), hold- (car (total-state))),

fv-if (we-pc-reg (v-threefix (cntl-state (car (total-state)))), pc-reg-input (external-inputs), pc-reg (car (total-state))),

v-threefix (f$next-cntl-state (f-buf (reset- (car (total-state))), f-buf (dtack- (car (total-state))), f-buf (hold- (car (total-state))), rw- (v-threefix (cntl-state (car (total-state)))), state (v-threefix (cntl-state (car (total-state)))), v-threefix (i-reg (car (total-state))), v-threefix (flags (car (total-state))), v-threefix (pc-reg (car (total-state))), regs-address (v-threefix (cntl-state (car (total-state))))))),

next-memory-state (cadr (total-state),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

strobe- (v-threefix (cntl-state (car (total-state)))))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

f-buf (rw- (v-threefix (cntl-state (car (total-state))))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))), v-threefix (addr-out (car (total-state))))),

v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state (car (total-state)))))),

v-threefix (data-out (car (total-state)))), cdr (memory-value (cadr (total-state),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

strobe- (v-threefix (cntl-state (car (total-state)))))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))),

f-buf (rw- (v-threefix (cntl-state (car (total-state))))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state (car (total-state))))), v-threefix (addr-out (car (total-state))))),

make-list (32, x)))))))

Event: Enable fm9001-next-state; name this event ‘fm9001-next-state-off’.

Definition: run-fm9001 (state, inputs, n) = if n ≃ 0 then state

else run-fm9001 (fm9001-next-state (state, car (inputs)), cdr (inputs), n − 1) endif

Event: Enable run-fm9001; name this event ‘run-fm9001-off’.

Theorem: run-fm9001-base-case (n ≃ 0) → (run-fm9001 (state, inputs, n) = state)

Theorem: run-fm9001-step-case (n ≄ 0) → (run-fm9001 (state, inputs, n)

= run-fm9001 (fm9001-next-state (state, car (inputs)), cdr (inputs), n − 1))

Event: Enable run-fm9001-step-case; name this event ‘run-fm9001-step-case-off’.

Theorem: run-fm9001-plus run-fm9001 (state, inputs, n + m) = run-fm9001 (run-fm9001 (state, inputs, n), nthcdr (n, inputs), m)

Definition: fm9001-state-structure (state) = ((length (state) = 2)

∧ properp (state) ∧ (length (car (state)) = 12) ∧ properp (car (state)) ∧ (length (cadr (state)) = 8) ∧ properp (cadr (state)) ∧ (length (caar (state)) = 4) ∧ properp (caar (state)))

Theorem: fm9001-state-structure$step fm9001-state-structure (state) → fm9001-state-structure (fm9001-next-state (state, external-inputs))

Theorem: fm9001-state-structure$induction fm9001-state-structure (state) → fm9001-state-structure (run-fm9001 (state, inputs, steps))

Theorem: fm9001-state-as-a-list fm9001-state-structure (state) → (state = list (list (list (caaar (state),

cadaar (state), caddaar (state), cadddaar (state)),

cadar (state), caddar (state), cadddar (state), caddddar (state), cadddddar (state), caddddddar (state), cadddddddar (state), caddddddddar (state), cadddddddddar (state), caddddddddddar (state), cadddddddddddar (state)),

list (caadr (state), cadadr (state), caddadr (state), cadddadr (state), caddddadr (state), cadddddadr (state), caddddddadr (state), cadddddddadr (state))))

(DEFN CHIP-MODULE* NIL
(CONS 'CHIP-MODULE
(CONS
(CONS 'CLK
(CONS 'TI
(CONS 'TE
(CONS 'DTACK-
(CONS 'RESET-
 (CONS 'HOLD-
       (CONS 'DISABLE-REGFILE-
             (CONS 'TEST-REGFILE-
                   (APPEND (INDICES 'PC-REG-IN 0 4)
                           (INDICES 'DATA-IN 0 32))))))))))
(CONS
(CONS 'TO
(CONS 'TIMING
(CONS 'HDACK-
(CONS 'EN-ADDR-OUT-
(CONS 'RW-
(CONS 'STROBE-
(APPEND (INDICES 'ADDR-OUT 0 32)
    (APPEND (INDICES 'DATA-OUT 0 32)
            (APPEND (INDICES 'FLAGS 0 4)
                    (APPEND (INDICES 'CNTL-STATE 0 5)
                            (SUBRANGE (INDICES 'I-REG 0 32)
                                      28 31)))))))))))
(CONS
(LIST
(LIST 'CNTL-STATE
(CONS 'RW-SIG-
(CONS 'STROBE-
(CONS 'HDACK-
(CONS 'WE-REGS
(CONS 'WE-A-REG

     (CONS 'WE-B-REG
      (CONS 'WE-I-REG
       (CONS 'WE-DATA-OUT
        (CONS 'WE-ADDR-OUT
         (CONS 'WE-HOLD-
          (CONS 'WE-PC-REG
           (CONS 'DATA-IN-SELECT
            (CONS 'DEC-ADDR-OUT
             (CONS 'SELECT-IMMEDIATE
              (CONS 'ALU-C
               (CONS 'ALU-ZERO
                (APPEND
                 (INDICES 'CNTL-STATE 0 5)
                 (APPEND (INDICES 'WE-FLAGS 0 4)
                         (APPEND (INDICES 'REGS-ADDRESS 0 4)
                                 (APPEND (INDICES 'ALU-OP 0 4)
                                         (INDICES 'ALU-MPG
                                                  0
                                                  7)))))))))))))))))))))
(INDEX 'REG 40)
(CONS 'CLK
      (CONS 'TE-SIG
            (CONS 'TI
                  (INDICES 'NEXT-STATE 0 40)))))
(LIST 'REGS
(CONS 'REGFILE-TO
      (INDICES 'REGFILE-OUT 0 32))
'REGFILE
(CONS 'CLK
 (CONS 'TE-SIG
   (CONS (INDEX 'ALU-MPG 6)
         (CONS 'WE-REGS
               (CONS 'DISABLE-REGFILE-
                     (CONS 'TEST-REGFILE-
                           (APPEND (INDICES 'REGS-ADDRESS 0 4)
                                   (BV (INDICES 'ALU-BUS 0 35))))))))))
(LIST 'CVNZ-FLAGS
     (INDICES 'FLAGS 0 4)
     'FLAGS
     (CONS 'CLK
           (CONS 'TE-SIG
                 (CONS 'REGFILE-TO
                       (APPEND (INDICES 'WE-FLAGS 0 4)
                               (INDICES 'ALU-BUS 0 35))))))

(LIST 'A-REG
(INDICES 'A-REG 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-A-REG
            (CONS 'TE-SIG
                  (CONS (INDEX 'FLAGS 3)
                        (INDICES 'ABI-BUS 0 32))))))
(LIST 'B-REG
(INDICES 'B-REG 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-B-REG
            (CONS 'TE-SIG
                  (CONS (INDEX 'A-REG 31)
                        (INDICES 'ABI-BUS 0 32))))))
(LIST 'I-REG
(INDICES 'I-REG 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-I-REG
            (CONS 'TE-SIG
                  (CONS (INDEX 'B-REG 31)
                        (INDICES 'ABI-BUS 0 32))))))
(LIST 'DATA-OUT
(INDICES 'DATA-OUT 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-DATA-OUT
            (CONS 'TE-SIG
                  (CONS (INDEX 'I-REG 31)
                        (BV (INDICES 'ALU-BUS 0 35)))))))
(LIST 'ADDR-OUT
(INDICES 'ADDR-OUT 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-ADDR-OUT
            (CONS 'TE-SIG
                  (CONS (INDEX 'DATA-OUT 31)
                        (INDICES 'ADDR-OUT-BUS 0 32))))))
(LIST 'RESET-LATCH
'(LAST-RESET- LAST-RESET-INV)
'FD1S
(LIST 'RESET-

      'CLK
      (INDEX 'ADDR-OUT 31)
      'TE-SIG))
'(DTACK--OR (DTACK--OR-STROBE-)
      B-OR
      (STROBE- DTACK-))
'(DTACK-LATCH (LAST-DTACK- LAST-DTACK-INV)
        FD1S
        (DTACK--OR-STROBE- CLK LAST-RESET- TE-SIG))
'(HOLD-LATCH (LAST-HOLD- LAST-HOLD-INV)
       FD1SLP
       (HOLD- CLK WE-HOLD- LAST-DTACK- TE-SIG))
(LIST 'PC-REG
(INDICES 'PC-REG 0 4)
(INDEX 'WE-REG 4)
(CONS 'CLK
      (CONS 'WE-PC-REG
            (CONS 'TE-SIG
                  (CONS 'LAST-HOLD-
                        (INDICES 'PC-REG-IN 0 4))))))
(LIST 'IMMEDIATE-PASS
(INDICES 'REG-BUS 0 32)
'EXTEND-IMMEDIATE
(CONS 'SELECT-IMMEDIATE
      (APPEND (A-IMMEDIATE (INDICES 'I-REG 0 32))
              (INDICES 'REGFILE-OUT 0 32))))
(LIST 'DEC-PASS
(INDICES 'ADDR-OUT-BUS 0 32)
(INDEX 'DEC-PASS 32)
(CONS 'DEC-ADDR-OUT
      (INDICES 'REG-BUS 0 32)))
'(MUX-CNTL (ABI-CNTL)
     B-NAND
     (DATA-IN-SELECT LAST-DTACK-INV))
(LIST 'DATA-IN-MUX
(INDICES 'ABI-BUS 0 32)
(INDEX 'TV-IF
       (TREE-NUMBER (MAKE-TREE 32)))
(CONS 'ABI-CNTL
      (APPEND (INDICES 'REG-BUS 0 32)
              (INDICES 'DATA-IN 0 32))))
(LIST 'ALU
(INDICES 'ALU-BUS 0 35)
(INDEX 'CORE-ALU

       (TREE-NUMBER (MAKE-TREE 32)))
(CONS 'ALU-C
      (APPEND (INDICES 'A-REG 0 32)
              (APPEND (INDICES 'B-REG 0 32)
                      (CONS 'ALU-ZERO
                            (APPEND (INDICES 'ALU-MPG 0 7)
                                    (INDICES 'ALU-OP 0 4)))))))
(LIST 'NEXT-STATE
(INDICES 'NEXT-STATE 0 40)
'NEXT-CNTL-STATE
(CONS 'LAST-RESET-
(CONS 'LAST-DTACK-
(CONS 'LAST-HOLD-
(CONS 'RW-SIG-
(APPEND
      (INDICES 'CNTL-STATE 0 5)
      (APPEND (INDICES 'I-REG 0 32)
              (APPEND (INDICES 'FLAGS 0 4)
                      (APPEND (INDICES 'PC-REG 0 4)
                              (INDICES 'REGS-ADDRESS 0 4))))))))))
'(TE-BUFFER (TE-SIG) B-BUF-PWR (TE))
'(RW-BUFFER (RW-) B-BUF (RW-SIG-))
'(EN-ADDR-OUT-GATE (EN-ADDR-OUT-)
             B-NOT
             (HDACK-))
(LIST 'TIMING-GATE
'(TIMING)
'ID
(LIST (INDEX 'ALU-BUS 2)))
(LIST 'SCANOUT
'(TO)
'ID
(LIST (INDEX 'PC-REG 3))))
'((REGS CVNZ-FLAGS A-REG B-REG I-REG DATA-OUT ADDR-OUT RESET-LATCH
 DTACK-LATCH HOLD-LATCH PC-REG CNTL-STATE)))))))

(PROVE-LEMMA CHIP-MODULE*$DESTRUCTURE
(REWRITE)
(AND
(EQUAL (CAR (CHIP-MODULE*))
'CHIP-MODULE)
(EQUAL

(CADR (CHIP-MODULE*))
(CONS 'CLK
 (CONS 'TI
  (CONS 'TE
    (CONS 'DTACK-
          (CONS 'RESET-
                (CONS 'HOLD-
                      (CONS 'DISABLE-REGFILE-
                            (CONS 'TEST-REGFILE-
                                  (APPEND (INDICES 'PC-REG-IN 0 4)
                                          (INDICES 'DATA-IN 0 32)))))))))))
(EQUAL
(CADDR (CHIP-MODULE*))
(CONS 'TO
 (CONS 'TIMING
  (CONS 'HDACK-
   (CONS 'EN-ADDR-OUT-
    (CONS 'RW-
      (CONS 'STROBE-
            (APPEND (INDICES 'ADDR-OUT 0 32)
                    (APPEND (INDICES 'DATA-OUT 0 32)
                            (APPEND (INDICES 'FLAGS 0 4)
                                    (APPEND (INDICES 'CNTL-STATE 0 5)
                                            (SUBRANGE (INDICES 'I-REG 0 32)
                                                      28 31))))))))))))
(EQUAL
(CADDDR (CHIP-MODULE*))
(LIST
 (LIST 'CNTL-STATE
  (CONS 'RW-SIG-
   (CONS 'STROBE-
    (CONS 'HDACK-
     (CONS 'WE-REGS
      (CONS 'WE-A-REG
       (CONS 'WE-B-REG
        (CONS 'WE-I-REG
         (CONS 'WE-DATA-OUT
          (CONS 'WE-ADDR-OUT
           (CONS 'WE-HOLD-
            (CONS 'WE-PC-REG
             (CONS 'DATA-IN-SELECT
              (CONS 'DEC-ADDR-OUT
               (CONS 'SELECT-IMMEDIATE
                (CONS 'ALU-C

          (CONS 'ALU-ZERO
           (APPEND
              (INDICES 'CNTL-STATE 0 5)
              (APPEND (INDICES 'WE-FLAGS 0 4)
                      (APPEND (INDICES 'REGS-ADDRESS 0 4)
                              (APPEND (INDICES 'ALU-OP 0 4)
                                      (INDICES 'ALU-MPG
                                               0
                                               7)))))))))))))))))))))
(INDEX 'REG 40)
(CONS 'CLK
 (CONS 'TE-SIG
       (CONS 'TI
             (INDICES 'NEXT-STATE 0 40)))))
(LIST 'REGS
(CONS 'REGFILE-TO
 (INDICES 'REGFILE-OUT 0 32))
'REGFILE
(CONS 'CLK
(CONS 'TE-SIG
(CONS (INDEX 'ALU-MPG 6)
      (CONS 'WE-REGS
            (CONS 'DISABLE-REGFILE-
                  (CONS 'TEST-REGFILE-
                        (APPEND (INDICES 'REGS-ADDRESS 0 4)
                                (BV (INDICES 'ALU-BUS 0 35))))))))))
(LIST 'CVNZ-FLAGS
(INDICES 'FLAGS 0 4)
'FLAGS
(CONS 'CLK
      (CONS 'TE-SIG
            (CONS 'REGFILE-TO
                  (APPEND (INDICES 'WE-FLAGS 0 4)
                          (INDICES 'ALU-BUS 0 35))))))
(LIST 'A-REG
(INDICES 'A-REG 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-A-REG
            (CONS 'TE-SIG
                  (CONS (INDEX 'FLAGS 3)
                        (INDICES 'ABI-BUS 0 32))))))
(LIST 'B-REG
(INDICES 'B-REG 0 32)

(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-B-REG
            (CONS 'TE-SIG
                  (CONS (INDEX 'A-REG 31)
                        (INDICES 'ABI-BUS 0 32))))))
(LIST 'I-REG
(INDICES 'I-REG 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-I-REG
            (CONS 'TE-SIG
                  (CONS (INDEX 'B-REG 31)
                        (INDICES 'ABI-BUS 0 32))))))
(LIST 'DATA-OUT
(INDICES 'DATA-OUT 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-DATA-OUT
            (CONS 'TE-SIG
                  (CONS (INDEX 'I-REG 31)
                        (BV (INDICES 'ALU-BUS 0 35)))))))
(LIST 'ADDR-OUT
(INDICES 'ADDR-OUT 0 32)
(INDEX 'WE-REG 32)
(CONS 'CLK
      (CONS 'WE-ADDR-OUT
            (CONS 'TE-SIG
                  (CONS (INDEX 'DATA-OUT 31)
                        (INDICES 'ADDR-OUT-BUS 0 32))))))
(LIST 'RESET-LATCH
'(LAST-RESET- LAST-RESET-INV)
'FD1S
(LIST 'RESET-
      'CLK
      (INDEX 'ADDR-OUT 31)
      'TE-SIG))
'(DTACK--OR (DTACK--OR-STROBE-)
      B-OR
      (STROBE- DTACK-))
'(DTACK-LATCH (LAST-DTACK- LAST-DTACK-INV)
        FD1S
        (DTACK--OR-STROBE- CLK LAST-RESET- TE-SIG))
'(HOLD-LATCH (LAST-HOLD- LAST-HOLD-INV)

       FD1SLP
       (HOLD- CLK WE-HOLD- LAST-DTACK- TE-SIG))
(LIST 'PC-REG
(INDICES 'PC-REG 0 4)
(INDEX 'WE-REG 4)
(CONS 'CLK
      (CONS 'WE-PC-REG
            (CONS 'TE-SIG
                  (CONS 'LAST-HOLD-
                        (INDICES 'PC-REG-IN 0 4))))))
(LIST 'IMMEDIATE-PASS
(INDICES 'REG-BUS 0 32)
'EXTEND-IMMEDIATE
(CONS 'SELECT-IMMEDIATE
      (APPEND (A-IMMEDIATE (INDICES 'I-REG 0 32))
              (INDICES 'REGFILE-OUT 0 32))))
(LIST 'DEC-PASS
(INDICES 'ADDR-OUT-BUS 0 32)
(INDEX 'DEC-PASS 32)
(CONS 'DEC-ADDR-OUT
      (INDICES 'REG-BUS 0 32)))
'(MUX-CNTL (ABI-CNTL)
     B-NAND
     (DATA-IN-SELECT LAST-DTACK-INV))
(LIST 'DATA-IN-MUX
(INDICES 'ABI-BUS 0 32)
(INDEX 'TV-IF
       (TREE-NUMBER (MAKE-TREE 32)))
(CONS 'ABI-CNTL
      (APPEND (INDICES 'REG-BUS 0 32)
              (INDICES 'DATA-IN 0 32))))
(LIST 'ALU
(INDICES 'ALU-BUS 0 35)
(INDEX 'CORE-ALU
       (TREE-NUMBER (MAKE-TREE 32)))
(CONS 'ALU-C
      (APPEND (INDICES 'A-REG 0 32)
              (APPEND (INDICES 'B-REG 0 32)
                      (CONS 'ALU-ZERO
                            (APPEND (INDICES 'ALU-MPG 0 7)
                                    (INDICES 'ALU-OP 0 4)))))))
(LIST 'NEXT-STATE
(INDICES 'NEXT-STATE 0 40)
'NEXT-CNTL-STATE

(CONS 'LAST-RESET-
(CONS 'LAST-DTACK-
(CONS 'LAST-HOLD-
(CONS 'RW-SIG-
(APPEND (INDICES 'CNTL-STATE 0 5)
        (APPEND (INDICES 'I-REG 0 32)
                (APPEND (INDICES 'FLAGS 0 4)
                        (APPEND (INDICES 'PC-REG 0 4)
                                (INDICES 'REGS-ADDRESS 0 4))))))))))
'(TE-BUFFER (TE-SIG) B-BUF-PWR (TE))
'(RW-BUFFER (RW-) B-BUF (RW-SIG-))
'(EN-ADDR-OUT-GATE (EN-ADDR-OUT-)
             B-NOT
             (HDACK-))
(LIST 'TIMING-GATE
'(TIMING)
'ID
(LIST (INDEX 'ALU-BUS 2)))
(LIST 'SCANOUT
'(TO)
'ID
(LIST (INDEX 'PC-REG 3)))))
(EQUAL (CADDDDR (CHIP-MODULE*))
'(REGS CVNZ-FLAGS A-REG B-REG I-REG DATA-OUT ADDR-OUT RESET-LATCH
      DTACK-LATCH HOLD-LATCH PC-REG CNTL-STATE))))

Event: Enable chip-module*; name this event ‘chip-module*-off’.

Event: Enable chip-module*$destructure; name this event ‘chip-module*$destructure-off’.

Event: Enable *1*chip-module*; name this event ‘g*1*chip-module*-off’.

Definition: chip-module& (netlist) = ((lookup-module ('chip-module, netlist) = chip-module*)

∧ regfile& (delete-module ('chip-module, netlist)) ∧ flags& (delete-module ('chip-module, netlist)) ∧ we-reg& (delete-module ('chip-module, netlist), 32) ∧ fd1s& (delete-module ('chip-module, netlist)) ∧ fd1slp& (delete-module ('chip-module, netlist)) ∧ we-reg& (delete-module ('chip-module, netlist), 4) ∧ reg& (delete-module ('chip-module, netlist), 40)

∧ id& (delete-module ('chip-module, netlist)) ∧ b-buf-pwr& (delete-module ('chip-module, netlist)) ∧ b-buf& (delete-module ('chip-module, netlist)) ∧ b-not& (delete-module ('chip-module, netlist)) ∧ extend-immediate& (delete-module ('chip-module, netlist)) ∧ dec-pass& (delete-module ('chip-module, netlist), 32) ∧ tv-if& (delete-module ('chip-module, netlist), make-tree (32)) ∧ core-alu& (delete-module ('chip-module, netlist),

make-tree (32))

∧ next-cntl-state& (delete-module ('chip-module, netlist)))

Event: Enable chip-module&; name this event ‘chip-module&-off’.

Definition: chip-module$netlist = cons (chip-module*,

regfile$netlist

∪ ((((flags$netlist ∪ we-reg$netlist (32)) ∪ (fd1s$netlist ∪ fd1slp$netlist)) ∪ (((we-reg$netlist (4) ∪ reg$netlist (40))

∪ (id$netlist

∪ extend-immediate$netlist)) ∪ ((dec-pass$netlist (32)

∪ tv-if$netlist (make-tree (32))) ∪ (core-alu$netlist (make-tree (32))

∪ next-cntl-state$netlist))))

∪ (b-buf-pwr$netlist ∪ (b-buf$netlist ∪ b-not$netlist))))

Theorem: equal-length-40-as-collected-nth+subrange ((length (l) = 40) ∧ properp (l)) → (l = append (list-as-collected-nth (l, 16, 0), subrange (l, 16, 39)))

(PROVE-LEMMA LIST-AS-CNTL-STATE-CROCK NIL
(IMPLIES
(AND (PROPERP LIST)
   (EQUAL (LENGTH LIST) 40))
(EQUAL LIST
(CONS
(RW- LIST)
(CONS
 (STROBE- LIST)

    (CONS
     (HDACK- LIST)
     (CONS
      (WE-REGS LIST)
      (CONS
       (WE-A-REG LIST)
       (CONS
        (WE-B-REG LIST)
        (CONS
         (WE-I-REG LIST)
         (CONS
          (WE-DATA-OUT LIST)
          (CONS
           (WE-ADDR-OUT LIST)
           (CONS
            (WE-HOLD- LIST)
            (CONS
             (WE-PC-REG LIST)
             (CONS
              (DATA-IN-SELECT LIST)
              (CONS
               (DEC-ADDR-OUT LIST)
               (CONS
                (SELECT-IMMEDIATE LIST)
                (CONS
                 (ALU-C LIST)
                 (CONS
                  (ALU-ZERO LIST)
                  (APPEND
                   (STATE LIST)
                   (APPEND
                          (WE-FLAGS LIST)
                          (APPEND (REGS-ADDRESS LIST)
                                  (APPEND (ALU-OP LIST)
                                          (ALU-MPG LIST)))))))))))))))))))))))
((ENABLE-THEORY CONTROL-STATE-ACCESSOR-THEORY)
 (ENABLE OPEN-SUBRANGE)
 (USE (EQUAL-LENGTH-40-AS-COLLECTED-NTH+SUBRANGE (L LIST)))))

(PROVE-LEMMA REG-40$VALUE-AS-CNTL-STATE
(REWRITE)
(IMPLIES

(AND (REG& NETLIST 40)
(PROPERP STATE)
(EQUAL (LENGTH STATE) 40))
(EQUAL
(DUAL-EVAL 0
       (INDEX 'REG 40)
       ARGS STATE NETLIST)
(CONS
(RW- (V-THREEFIX STATE))
(CONS
(STROBE- (V-THREEFIX STATE))
(CONS
(HDACK- (V-THREEFIX STATE))
(CONS
(WE-REGS (V-THREEFIX STATE))
(CONS
 (WE-A-REG (V-THREEFIX STATE))
 (CONS
  (WE-B-REG (V-THREEFIX STATE))
  (CONS
   (WE-I-REG (V-THREEFIX STATE))
   (CONS
    (WE-DATA-OUT (V-THREEFIX STATE))
    (CONS
     (WE-ADDR-OUT (V-THREEFIX STATE))
     (CONS
      (WE-HOLD- (V-THREEFIX STATE))
      (CONS
       (WE-PC-REG (V-THREEFIX STATE))
       (CONS
        (DATA-IN-SELECT (V-THREEFIX STATE))
        (CONS
         (DEC-ADDR-OUT (V-THREEFIX STATE))
         (CONS
          (SELECT-IMMEDIATE (V-THREEFIX STATE))
          (CONS
           (ALU-C (V-THREEFIX STATE))
           (CONS
            (ALU-ZERO (V-THREEFIX STATE))
            (APPEND
             (STATE (V-THREEFIX STATE))
             (APPEND
              (WE-FLAGS (V-THREEFIX STATE))
              (APPEND

                  (REGS-ADDRESS (V-THREEFIX STATE))
                  (APPEND
                         (ALU-OP (V-THREEFIX STATE))
                         (ALU-MPG (V-THREEFIX STATE))))))))))))))))))))))))
((ENABLE REG$VALUE)
(USE (LIST-AS-CNTL-STATE-CROCK (LIST (V-THREEFIX STATE))))))

Event: Enable reg-40$value-as-cntl-state; name this event ‘reg-40$value-as-cntl-state-off’.

Theorem: bv-as-subrange (if length (x) < 3 then f else t endif ∧ properp (x)) → (bv (x) = subrange (x, 3, length (x) − 1))

Event: Enable bv-as-subrange; name this event ‘bv-as-subrange-off’.

Definition: machine-state-invariant (machine-state) = (all-ramp-mem (4, caar (machine-state))

∧ memory-properp (4, 32, caar (machine-state)) ∧ properp (caddar (machine-state)) ∧ (length (caddar (machine-state)) = 32) ∧ properp (cadddar (machine-state)) ∧ (length (cadddar (machine-state)) = 4) ∧ properp (cadr (machine-state)) ∧ (length (cadr (machine-state)) = 4) ∧ properp (caddr (machine-state)) ∧ (length (caddr (machine-state)) = 32) ∧ properp (cadddr (machine-state)) ∧ (length (cadddr (machine-state)) = 32) ∧ properp (caddddr (machine-state)) ∧ (length (caddddr (machine-state)) = 32) ∧ properp (cadddddr (machine-state)) ∧ (length (cadddddr (machine-state)) = 32) ∧ properp (caddddddr (machine-state)) ∧ (length (caddddddr (machine-state)) = 32) ∧ properp (caddddddddddr (machine-state)) ∧ (length (caddddddddddr (machine-state)) = 4) ∧ properp (cadddddddddddr (machine-state)) ∧ (length (cadddddddddddr (machine-state)) = 40))

Theorem: chip-module$state (chip-module& (netlist) ∧ machine-state-invariant (list (list (regs-regs,

regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state))

∧ (te = f) ∧ (disable-regfile- = t) ∧ (test-regfile- = t) ∧ properp (pc-reg-in) ∧ (length (pc-reg-in) = 4) ∧ properp (data-in) ∧ (length (data-in) = 32)) → (dual-eval (2,

'chip-module,

cons (clk,

cons (ti,

cons (te,

cons (dtack-,

cons (reset-,

cons (hold-,

cons (disable-regfile-,

cons (test-regfile-,

append (pc-reg-in,

data-in))))))))),

list (list (regs-regs, regs-we, regs-data, regs-addr), flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

netlist)

= list (f$write-regs (we-regs (v-threefix (cntl-state)), regs-address (v-threefix (cntl-state)), list (regs-regs, regs-we, regs-data, regs-addr), bv (f$core-alu (alu-c (v-threefix (cntl-state)),

v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32)))),

f$update-flags (flags, we-flags (v-threefix (cntl-state)), f$core-alu (alu-c (v-threefix (cntl-state)),

v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32))),

fv-if (we-a-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)),

f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

data-in), a-reg),

fv-if (we-b-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)),

f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data,

regs-addr))),

data-in), b-reg),

fv-if (we-i-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)),

f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

data-in), i-reg),

fv-if (we-data-out (v-threefix (cntl-state)),

bv (f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32))),

data-out), fv-if (we-addr-out (v-threefix (cntl-state)),

f$dec-pass (dec-addr-out (v-threefix (cntl-state)),

f$extend-immediate (select-immediate (v-threefix (cntl-state)), a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr)))),

addr-out), f-buf (reset-), f-or (strobe- (v-threefix (cntl-state)), dtack-), f-if (we-hold- (v-threefix (cntl-state)), hold-, last-hold-), fv-if (we-pc-reg (v-threefix (cntl-state)),

pc-reg-in, last-pc-reg),

v-threefix (f$next-cntl-state (f-buf (last-reset-), f-buf (last-dtack-), f-buf (last-hold-), rw- (v-threefix (cntl-state)), state (v-threefix (cntl-state)), v-threefix (i-reg), v-threefix (flags), v-threefix (last-pc-reg), regs-address (v-threefix (cntl-state))))))

Theorem: chip-module$value (chip-module& (netlist) ∧ machine-state-invariant (list (list (regs-regs,

regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state))

∧ properp (pc-reg-in) ∧ (length (pc-reg-in) = 4) ∧ properp (data-in) ∧ (length (data-in) = 32)) → (dual-eval (0,

'chip-module,

cons (clk,

cons (ti,

cons (te,

cons (dtack-,

cons (reset-,

cons (hold-,

cons (disable-regfile-,

cons (test-regfile-,

append (pc-reg-in,

data-in))))))))),

list (list (regs-regs, regs-we, regs-data, regs-addr), flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

netlist)

= cons (nth (3, v-threefix (last-pc-reg)),

cons (nth (2,

f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32))),

cons (hdack- (v-threefix (cntl-state)),

cons (f-not (hdack- (v-threefix (cntl-state))),

cons (f-buf (rw- (v-threefix (cntl-state))),

cons (strobe- (v-threefix (cntl-state)),

append5 (v-threefix (addr-out), v-threefix (data-out), v-threefix (flags), state (v-threefix (cntl-state)), subrange (v-threefix (i-reg),

                                    28,

31)))))))))

(DEFN CHIP* NIL
(CONS 'CHIP
(CONS
(CONS 'CLK
(CONS 'TI
(CONS 'TE
(CONS 'DTACK-
(CONS 'RESET-
 (CONS 'HOLD-
       (CONS 'DISABLE-REGFILE-
             (CONS 'TEST-REGFILE-
                   (APPEND (INDICES 'PC-REG-IN 0 4)
                           (INDICES 'DATA-BUS 0 32))))))))))

(CONS
(CONS 'PO
(CONS 'TO
(CONS 'TIMING
 (CONS 'HDACK-
  (CONS 'RW-
   (CONS 'STROBE-
         (APPEND (INDICES 'ADDR-OUT 0 32)
                 (APPEND (INDICES 'DATA-BUS 0 32)
                         (APPEND (INDICES 'FLAGS 0 4)
                                 (APPEND (INDICES 'CNTL-STATE 0 5)
                                         (INDICES 'I-REG 28 4)))))))))))
(CONS
(LIST
(LIST 'BODY
 (CONS 'I-TO
  (CONS 'I-TIMING
   (CONS 'I-HDACK-
    (CONS 'I-EN-ADDR-OUT-
     (CONS 'I-RW-
      (CONS 'I-STROBE-
       (APPEND (INDICES 'I-ADDR-OUT 0 32)
               (APPEND (INDICES 'I-DATA-OUT 0 32)
                       (APPEND (INDICES 'I-FLAGS 0 4)
                               (APPEND (INDICES 'I-CNTL-STATE 0 5)
                                       (INDICES 'I-I-REG 28 4)))))))))))
 'CHIP-MODULE
 (CONS 'I-CLK
  (CONS 'I-TI
   (CONS 'I-TE
    (CONS 'I-DTACK-
     (CONS 'I-RESET-
           (CONS 'I-HOLD-
                 (CONS 'I-DISABLE-REGFILE-
                       (CONS 'I-TEST-REGFILE-
                             (APPEND (INDICES 'I-PC-REG 0 4)
                                     (INDICES 'I-DATA-IN 0 32)))))))))))
'(PLUS-5 (B-TRUE-P) VDD-PARAMETRIC NIL)
'(CLOCK-PAD (I-CLK CLK-PO)
            TTL-CLK-INPUT
            (CLK B-TRUE-P))
'(TI-PAD (I-TI TI-PO)
         TTL-INPUT
         (TI B-TRUE-P))

'(TE-PAD (I-TE TE-PO)
         TTL-INPUT
         (TE TI-PO))
'(DTACK-PAD (I-DTACK- DTACK-PO)
            TTL-INPUT
            (DTACK- TE-PO))
'(RESET-PAD (I-RESET- RESET-PO)
            TTL-INPUT
            (RESET- DTACK-PO))
'(HOLD-PAD (I-HOLD- HOLD-PO)
           TTL-INPUT
           (HOLD- RESET-PO))
'(DISABLE-REGFILE-PAD (I-DISABLE-REGFILE- DISABLE-REGFILE-PO)
                      TTL-INPUT
                      (DISABLE-REGFILE- HOLD-PO))
'(TEST-REGFILE-PAD (I-TEST-REGFILE- TEST-REGFILE-PO)
                   TTL-INPUT
                   (TEST-REGFILE- DISABLE-REGFILE-PO))
(LIST 'DATA-BUS-PADS
      (CONS 'DATA-BUS-PO
            (APPEND (INDICES 'DATA-BUS 0 32)
                    (INDICES 'I-DATA-IN 0 32)))
      (INDEX 'TTL-BIDIRECT-PADS 32)
      (CONS 'I-RW-
            (CONS 'TEST-REGFILE-PO
                  (APPEND (INDICES 'DATA-BUS 0 32)
                          (INDICES 'I-DATA-OUT 0 32)))))
(LIST 'PC-REG-PADS
      (CONS 'PC-REG-PO
            (INDICES 'I-PC-REG 0 4))
      (INDEX 'TTL-INPUT-PADS 4)
      (CONS 'DATA-BUS-PO
            (INDICES 'PC-REG-IN 0 4)))
'(MONITOR (I-PO)
          PROCMON
          (PC-REG-PO CLK-PO B-TRUE-P B-TRUE-P))
'(PO-PAD (PO)
         TTL-OUTPUT-PARAMETRIC
         (I-PO))
'(TO-PAD (TO) TTL-OUTPUT (I-TO))
'(TIMING-PAD (TIMING)
             TTL-OUTPUT-FAST
             (I-TIMING))
'(HDACK-PAD (HDACK-)

      TTL-OUTPUT-FAST
      (I-HDACK-))
'(RW-PAD (RW-)
   TTL-TRI-OUTPUT-FAST
   (I-RW- I-EN-ADDR-OUT-))
'(STROBE-PAD (STROBE-)
       TTL-TRI-OUTPUT-FAST
       (I-STROBE- I-EN-ADDR-OUT-))
(LIST 'ADDR-OUT-PADS
(INDICES 'ADDR-OUT 0 32)
(INDEX 'TTL-TRI-OUTPUT-PADS 32)
(CONS 'I-EN-ADDR-OUT-
      (INDICES 'I-ADDR-OUT 0 32)))
(LIST 'FLAGS-PADS
(INDICES 'FLAGS 0 4)
(INDEX 'TTL-OUTPUT-PADS 4)
(INDICES 'I-FLAGS 0 4))
(LIST 'CNTL-STATE-PADS
(INDICES 'CNTL-STATE 0 5)
(INDEX 'TTL-OUTPUT-PADS 5)
(INDICES 'I-CNTL-STATE 0 5))
(LIST 'I-REG-PADS
(INDICES 'I-REG 28 4)
(INDEX 'TTL-OUTPUT-PADS 4)
(INDICES 'I-I-REG 28 4)))
'(BODY))))))

(PROVE-LEMMA CHIP*$DESTRUCTURE
(REWRITE)
(AND
(EQUAL (CAR (CHIP*)) 'CHIP)
(EQUAL
(CADR (CHIP*))
(CONS 'CLK
(CONS 'TI
(CONS 'TE
(CONS 'DTACK-
(CONS 'RESET-
      (CONS 'HOLD-
            (CONS 'DISABLE-REGFILE-
                  (CONS 'TEST-REGFILE-
                        (APPEND (INDICES 'PC-REG-IN 0 4)

                                         (INDICES 'DATA-BUS 0 32)))))))))))
(EQUAL
(CADDR (CHIP*))
(CONS 'PO
 (CONS 'TO
  (CONS 'TIMING
   (CONS 'HDACK-
    (CONS 'RW-
     (CONS 'STROBE-
           (APPEND (INDICES 'ADDR-OUT 0 32)
                   (APPEND (INDICES 'DATA-BUS 0 32)
                           (APPEND (INDICES 'FLAGS 0 4)
                                   (APPEND (INDICES 'CNTL-STATE 0 5)
                                           (INDICES 'I-REG 28 4))))))))))))
(EQUAL
(CADDDR (CHIP*))
(LIST
 (LIST 'BODY
  (CONS 'I-TO
   (CONS 'I-TIMING
    (CONS 'I-HDACK-
     (CONS 'I-EN-ADDR-OUT-
      (CONS 'I-RW-
       (CONS 'I-STROBE-
          (APPEND (INDICES 'I-ADDR-OUT 0 32)
                  (APPEND (INDICES 'I-DATA-OUT 0 32)
                          (APPEND (INDICES 'I-FLAGS 0 4)
                                  (APPEND (INDICES 'I-CNTL-STATE 0 5)
                                          (INDICES 'I-I-REG 28 4)))))))))))
  'CHIP-MODULE
  (CONS 'I-CLK
   (CONS 'I-TI
    (CONS 'I-TE
     (CONS 'I-DTACK-
        (CONS 'I-RESET-
              (CONS 'I-HOLD-
                    (CONS 'I-DISABLE-REGFILE-
                          (CONS 'I-TEST-REGFILE-
                                (APPEND (INDICES 'I-PC-REG 0 4)
                                        (INDICES 'I-DATA-IN 0 32)))))))))))
 '(PLUS-5 (B-TRUE-P) VDD-PARAMETRIC NIL)
 '(CLOCK-PAD (I-CLK CLK-PO)
             TTL-CLK-INPUT
             (CLK B-TRUE-P))

'(TI-PAD (I-TI TI-PO)
         TTL-INPUT
         (TI B-TRUE-P))
'(TE-PAD (I-TE TE-PO)
         TTL-INPUT
         (TE TI-PO))
'(DTACK-PAD (I-DTACK- DTACK-PO)
            TTL-INPUT
            (DTACK- TE-PO))
'(RESET-PAD (I-RESET- RESET-PO)
            TTL-INPUT
            (RESET- DTACK-PO))
'(HOLD-PAD (I-HOLD- HOLD-PO)
           TTL-INPUT
           (HOLD- RESET-PO))
'(DISABLE-REGFILE-PAD (I-DISABLE-REGFILE- DISABLE-REGFILE-PO)
                      TTL-INPUT
                      (DISABLE-REGFILE- HOLD-PO))
'(TEST-REGFILE-PAD (I-TEST-REGFILE- TEST-REGFILE-PO)
                   TTL-INPUT
                   (TEST-REGFILE- DISABLE-REGFILE-PO))
(LIST 'DATA-BUS-PADS
      (CONS 'DATA-BUS-PO
            (APPEND (INDICES 'DATA-BUS 0 32)
                    (INDICES 'I-DATA-IN 0 32)))
      (INDEX 'TTL-BIDIRECT-PADS 32)
      (CONS 'I-RW-
            (CONS 'TEST-REGFILE-PO
                  (APPEND (INDICES 'DATA-BUS 0 32)
                          (INDICES 'I-DATA-OUT 0 32)))))
(LIST 'PC-REG-PADS
      (CONS 'PC-REG-PO
            (INDICES 'I-PC-REG 0 4))
      (INDEX 'TTL-INPUT-PADS 4)
      (CONS 'DATA-BUS-PO
            (INDICES 'PC-REG-IN 0 4)))
'(MONITOR (I-PO)
          PROCMON
          (PC-REG-PO CLK-PO B-TRUE-P B-TRUE-P))
'(PO-PAD (PO)
         TTL-OUTPUT-PARAMETRIC
         (I-PO))
'(TO-PAD (TO) TTL-OUTPUT (I-TO))
'(TIMING-PAD (TIMING)

       TTL-OUTPUT-FAST
       (I-TIMING))
'(HDACK-PAD (HDACK-)
      TTL-OUTPUT-FAST
      (I-HDACK-))
'(RW-PAD (RW-)
   TTL-TRI-OUTPUT-FAST
   (I-RW- I-EN-ADDR-OUT-))
'(STROBE-PAD (STROBE-)
       TTL-TRI-OUTPUT-FAST
       (I-STROBE- I-EN-ADDR-OUT-))
(LIST 'ADDR-OUT-PADS
(INDICES 'ADDR-OUT 0 32)
(INDEX 'TTL-TRI-OUTPUT-PADS 32)
(CONS 'I-EN-ADDR-OUT-
      (INDICES 'I-ADDR-OUT 0 32)))
(LIST 'FLAGS-PADS
(INDICES 'FLAGS 0 4)
(INDEX 'TTL-OUTPUT-PADS 4)
(INDICES 'I-FLAGS 0 4))
(LIST 'CNTL-STATE-PADS
(INDICES 'CNTL-STATE 0 5)
(INDEX 'TTL-OUTPUT-PADS 5)
(INDICES 'I-CNTL-STATE 0 5))
(LIST 'I-REG-PADS
(INDICES 'I-REG 28 4)
(INDEX 'TTL-OUTPUT-PADS 4)
(INDICES 'I-I-REG 28 4))))
(EQUAL (CADDDDR (CHIP*)) 'BODY)))

Event: Enable chip*; name this event ‘chip*-off’.

Event: Enable chip*$destructure; name this event ‘chip*$destructure-off’.

Event: Enable *1*chip*; name this event ‘g*1*chip*-off’.

Definition: chip& (netlist) = ((lookup-module ('chip, netlist) = chip*)

∧ vdd-parametric& (delete-module ('chip, netlist)) ∧ ttl-clk-input& (delete-module ('chip, netlist)) ∧ ttl-input& (delete-module ('chip, netlist)) ∧ ttl-input-pads& (delete-module ('chip, netlist), 4)

∧ chip-module& (delete-module ('chip, netlist)) ∧ ttl-bidirect-pads& (delete-module ('chip, netlist), 32) ∧ ttl-output-parametric& (delete-module ('chip, netlist)) ∧ ttl-output& (delete-module ('chip, netlist)) ∧ ttl-output-fast& (delete-module ('chip, netlist)) ∧ ttl-tri-output-fast& (delete-module ('chip, netlist)) ∧ ttl-tri-output-pads& (delete-module ('chip, netlist), 32) ∧ ttl-output-pads& (delete-module ('chip, netlist), 4) ∧ ttl-output-pads& (delete-module ('chip, netlist), 5) ∧ procmon& (delete-module ('chip, netlist)))

Event: Enable chip&; name this event ‘chip&-off’.

Definition: chip$netlist = cons (chip*,

(((ttl-bidirect-pads$netlist (32) ∪ chip-module$netlist) ∪ (ttl-input$netlist ∪ ttl-input-pads$netlist (4))) ∪ ((ttl-clk-input$netlist ∪ vdd-parametric$netlist)

∪ (ttl-output-parametric$netlist

∪ ttl-output$netlist)))

∪ (((ttl-output-fast$netlist ∪ ttl-tri-output-fast$netlist) ∪ (ttl-tri-output-pads$netlist (32)

∪ ttl-output-pads$netlist (4))) ∪ (ttl-output-pads$netlist (5) ∪ procmon$netlist)))

Theorem: chip$state (chip& (netlist) ∧ machine-state-invariant (list (list (regs-regs,

regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state))

∧ (te = f) ∧ (disable-regfile- = t) ∧ (test-regfile- = t) ∧ properp (pc-reg-in) ∧ (length (pc-reg-in) = 4) ∧ properp (data-in) ∧ (length (data-in) = 32)) → (dual-eval (2,

'chip,

cons (clk,

cons (ti,

cons (te,

cons (dtack-,

cons (reset-,

cons (hold-,

cons (disable-regfile-,

cons (test-regfile-,

append (pc-reg-in,

data-in))))))))),

list (list (regs-regs, regs-we, regs-data, regs-addr), flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

netlist)

= list (f$write-regs (we-regs (v-threefix (cntl-state)), regs-address (v-threefix (cntl-state)), list (regs-regs, regs-we, regs-data, regs-addr), bv (f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32)))),

f$update-flags (flags, we-flags (v-threefix (cntl-state)), f$core-alu (alu-c (v-threefix (cntl-state)),

v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32))),

fv-if (we-a-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

v-wire (data-in,

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)))),

a-reg), fv-if (we-b-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

v-wire (data-in,

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)))),

b-reg), fv-if (we-i-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data,

regs-addr))),

v-wire (data-in,

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)))),

i-reg), fv-if (we-data-out (v-threefix (cntl-state)),

bv (f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32))),

data-out), fv-if (we-addr-out (v-threefix (cntl-state)),

f$dec-pass (dec-addr-out (v-threefix (cntl-state)),

f$extend-immediate (select-immediate (v-threefix (cntl-state)), a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr)))),

addr-out), f-buf (reset-), f-or (strobe- (v-threefix (cntl-state)), f-buf (dtack-)), f-if (we-hold- (v-threefix (cntl-state)),

f-buf (hold-), last-hold-),

fv-if (we-pc-reg (v-threefix (cntl-state)), pc-reg-in, last-pc-reg),

v-threefix (f$next-cntl-state (f-buf (last-reset-), f-buf (last-dtack-), f-buf (last-hold-), rw- (v-threefix (cntl-state)), state (v-threefix (cntl-state)), v-threefix (i-reg), v-threefix (flags), v-threefix (last-pc-reg), regs-address (v-threefix (cntl-state))))))

Theorem: chip$value (chip& (netlist)

∧ machine-state-invariant (list (list (regs-regs, regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state))

∧ properp (pc-reg-in) ∧ (length (pc-reg-in) = 4) ∧ properp (data-in) ∧ (length (data-in) = 32)) → (cdr (dual-eval (0,

'chip,

cons (clk,

cons (ti,

cons (te,

cons (dtack-,

cons (reset-,

cons (hold-,

cons (disable-regfile-,

cons (test-regfile-,

append (pc-reg-in,

data-in))))))))),

list (list (regs-regs, regs-we, regs-data, regs-addr), flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

netlist))

= cons (f-buf (nth (3, v-threefix (last-pc-reg))),

cons (f-buf (nth (2,

f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32)))),

cons (f-buf (hdack- (v-threefix (cntl-state))),

cons (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state)))), cons (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state))), append5 (vft-buf (f-buf (hdack- (v-threefix (cntl-state))),

v-threefix (addr-out)), vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)), v-threefix (flags), v-threefix (state (v-threefix (cntl-state))), v-threefix (subrange (v-threefix (i-reg),

                      28,

31)))))))))

(DEFN CHIP-SYSTEM* NIL
(CONS 'CHIP-SYSTEM
(CONS
(CONS 'CLK
(CONS 'TI
(CONS 'TE
(CONS 'RESET-
(CONS 'HOLD-
(CONS 'DISABLE-REGFILE-
   (CONS 'TEST-REGFILE-
         (INDICES 'PC-REG 0 4))))))))
(CONS NIL
(CONS
(LIST
(LIST 'FM9001
(CONS 'PO
(CONS 'TO
(CONS 'TIMING

(CONS 'HDACK-
(CONS 'RW-
(CONS 'STROBE-
   (APPEND (INDICES 'ADDR-OUT 0 32)
           (APPEND (INDICES 'FM9001-DATA 0 32)
                   (APPEND (INDICES 'FLAGS 0 4)
                           (APPEND (INDICES 'CNTL-STATE 0 5)
                                   (INDICES 'I-REG 28 4)))))))))))
'CHIP
(CONS 'CLK
(CONS 'TI
(CONS 'TE
(CONS 'DTACK-
(CONS 'RESET-
      (CONS 'HOLD-
            (CONS 'DISABLE-REGFILE-
                  (CONS 'TEST-REGFILE-
                        (APPEND (INDICES 'PC-REG 0 4)
                                (INDICES 'DATA-BUS 0 32)))))))))))
'(PULLUP-RW- (RW-BUS) PULLUP (RW-))
'(PULLUP-STROBE- (STROBE-BUS)
           PULLUP
           (STROBE-))
(LIST 'ADDRESS
(INDICES 'ADDR-BUS 0 32)
(INDEX 'V-PULLUP 32)
(INDICES 'ADDR-OUT 0 32))
(LIST 'MEM
(CONS 'DTACK-
      (INDICES 'MEM-DATA 0 32))
'MEM-32X32
(CONS 'RW-BUS
      (CONS 'STROBE-BUS
            (APPEND (INDICES 'ADDR-BUS 0 32)
                    (INDICES 'DATA-BUS 0 32)))))
(LIST 'DATA-WIRE
(INDICES 'DATA-WIRE 0 32)
(INDEX 'V-WIRE 32)
(APPEND (INDICES 'FM9001-DATA 0 32)
        (INDICES 'MEM-DATA 0 32)))
(LIST 'DATA
(INDICES 'DATA-BUS 0 32)
(INDEX 'V-PULLUP 32)
(INDICES 'DATA-WIRE 0 32)))

'((FM9001 MEM)))))))

(PROVE-LEMMA CHIP-SYSTEM*$DESTRUCTURE
(REWRITE)
(AND
(EQUAL (CAR (CHIP-SYSTEM*))
    'CHIP-SYSTEM)
(EQUAL
  (CADR (CHIP-SYSTEM*))
  (CONS 'CLK
        (CONS 'TI
              (CONS 'TE
                    (CONS 'RESET-
                          (CONS 'HOLD-
                                (CONS 'DISABLE-REGFILE-
                                      (CONS 'TEST-REGFILE-
                                            (INDICES 'PC-REG 0 4)))))))))
(EQUAL (CADDR (CHIP-SYSTEM*)) NIL)
(EQUAL
(CADDDR (CHIP-SYSTEM*))
(LIST
(LIST 'FM9001
(CONS 'PO
 (CONS 'TO
  (CONS 'TIMING
   (CONS 'HDACK-
    (CONS 'RW-
     (CONS 'STROBE-
          (APPEND (INDICES 'ADDR-OUT 0 32)
                  (APPEND (INDICES 'FM9001-DATA 0 32)
                          (APPEND (INDICES 'FLAGS 0 4)
                                  (APPEND (INDICES 'CNTL-STATE 0 5)
                                          (INDICES 'I-REG 28 4)))))))))))
'CHIP
(CONS 'CLK
 (CONS 'TI
  (CONS 'TE
   (CONS 'DTACK-
       (CONS 'RESET-
             (CONS 'HOLD-
                   (CONS 'DISABLE-REGFILE-
                         (CONS 'TEST-REGFILE-

                          (APPEND (INDICES 'PC-REG 0 4)
                                  (INDICES 'DATA-BUS 0 32)))))))))))
'(PULLUP-RW- (RW-BUS) PULLUP (RW-))
'(PULLUP-STROBE- (STROBE-BUS)
           PULLUP
           (STROBE-))
(LIST 'ADDRESS
(INDICES 'ADDR-BUS 0 32)
(INDEX 'V-PULLUP 32)
(INDICES 'ADDR-OUT 0 32))
(LIST 'MEM
(CONS 'DTACK-
      (INDICES 'MEM-DATA 0 32))
'MEM-32X32
(CONS 'RW-BUS
      (CONS 'STROBE-BUS
            (APPEND (INDICES 'ADDR-BUS 0 32)
                    (INDICES 'DATA-BUS 0 32)))))
(LIST 'DATA-WIRE
(INDICES 'DATA-WIRE 0 32)
(INDEX 'V-WIRE 32)
(APPEND (INDICES 'FM9001-DATA 0 32)
        (INDICES 'MEM-DATA 0 32)))
(LIST 'DATA
(INDICES 'DATA-BUS 0 32)
(INDEX 'V-PULLUP 32)
(INDICES 'DATA-WIRE 0 32))))
(EQUAL (CADDDDR (CHIP-SYSTEM*))
'(FM9001 MEM))))

Event: Enable chip-system*; name this event ‘chip-system*-off’.

Event: Enable chip-system*$destructure; name this event ‘chip-system*$destructure-off’.

Event: Enable *1*chip-system*; name this event ‘g*1*chip-system*-off’.

Definition: chip-system& (netlist) = ((lookup-module ('chip-system, netlist) = chip-system*)

∧ chip& (delete-module ('chip-system, netlist)) ∧ pullup& (delete-module ('chip-system, netlist)) ∧ v-pullup& (delete-module ('chip-system, netlist), 32)

∧ mem-32x32& (delete-module ('chip-system, netlist)) ∧ v-wire& (delete-module ('chip-system, netlist), 32))

Event: Enable chip-system&; name this event ‘chip-system&-off’.

Definition: chip-system$netlist = cons (chip-system*,

pullup$netlist

∪ (v-pullup$netlist (32)

∪ (mem-32x32$netlist ∪ (v-wire$netlist (32) ∪ chip$netlist))))

Definition: memory-state-invariant (mem-state) = (memory-properp (32, 32, car (mem-state))

∧ properp (caddddddr (mem-state)) ∧ properp (cadddddddr (mem-state)) ∧ (length (cadddddddr (mem-state)) = 32))

Definition: chip-system-invariant (state) = (machine-state-invariant (car (state))

∧ memory-state-invariant (cadr (state)))

Theorem: equal-memory-value-for-chip-system$state memory-value (state, strobe, rw-, address, collect-value (args, alist)) = memory-value (state, strobe, rw-, address, make-list (length (args), x))

Theorem: chip-system$state-help (chip-system& (netlist) ∧ chip-system-invariant (list (list (list (regs-regs,

regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

mem-state))

∧ (te = f) ∧ (disable-regfile- = t) ∧ (test-regfile- = t) ∧ properp (pc-reg-in) ∧ (length (pc-reg-in) = 4)) → (dual-eval (2,

'chip-system,

cons (clk,

cons (ti,

cons (te,

cons (reset-,

cons (hold-,

cons (disable-regfile-,

cons (test-regfile-, pc-reg-in))))))),

list (list (list (regs-regs, regs-we, regs-data, regs-addr), flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

mem-state), netlist)

= list (list (f$write-regs (we-regs (v-threefix (cntl-state)), regs-address (v-threefix (cntl-state)), list (regs-regs, regs-we, regs-data, regs-addr),

bv (f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32)))), f$update-flags (flags,

we-flags (v-threefix (cntl-state)), f$core-alu (alu-c (v-threefix (cntl-state)),

v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)), make-tree (32))),

fv-if (we-a-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)),

f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state)))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state))), v-threefix (addr-out))),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out))))),

a-reg), fv-if (we-b-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)),

f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state)))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state))),

v-threefix (addr-out))),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out))))),

b-reg), fv-if (we-i-reg (v-threefix (cntl-state)),

fv-if (f-nand (data-in-select (v-threefix (cntl-state)),

f-not (last-dtack-)), f$extend-immediate (select-immediate (v-threefix (cntl-state)),

a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr))),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state)))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state))),

v-threefix (addr-out))),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out))))),

i-reg), fv-if (we-data-out (v-threefix (cntl-state)),

bv (f$core-alu (alu-c (v-threefix (cntl-state)), v-threefix (a-reg), v-threefix (b-reg), alu-zero (v-threefix (cntl-state)), alu-mpg (v-threefix (cntl-state)), alu-op (v-threefix (cntl-state)),

make-tree (32))),

data-out), fv-if (we-addr-out (v-threefix (cntl-state)),

f$dec-pass (dec-addr-out (v-threefix (cntl-state)),

f$extend-immediate (select-immediate (v-threefix (cntl-state)), a-immediate (v-threefix (i-reg)), f$read-regs (regs-address (v-threefix (cntl-state)),

list (regs-regs, regs-we, regs-data, regs-addr)))),

addr-out), f-buf (reset-), f-or (strobe- (v-threefix (cntl-state)),

f-buf (car (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state)))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state))),

v-threefix (addr-out))),

make-list (32, x))))),

f-if (we-hold- (v-threefix (cntl-state)), f-buf (hold-), last-hold-),

fv-if (we-pc-reg (v-threefix (cntl-state)), pc-reg-in, last-pc-reg),

v-threefix (f$next-cntl-state (f-buf (last-reset-), f-buf (last-dtack-), f-buf (last-hold-), rw- (v-threefix (cntl-state)), state (v-threefix (cntl-state)), v-threefix (i-reg), v-threefix (flags), v-threefix (last-pc-reg), regs-address (v-threefix (cntl-state))))),

next-memory-state (mem-state,

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state)))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state))), v-threefix (addr-out))), v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (v-threefix (cntl-state)))),

v-threefix (data-out)), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

strobe- (v-threefix (cntl-state)))),

f-pullup (ft-buf (f-buf (hdack- (v-threefix (cntl-state))),

f-buf (rw- (v-threefix (cntl-state))))),

v-pullup (vft-buf (f-buf (hdack- (v-threefix (cntl-state))), v-threefix (addr-out))),

make-list (32, x))))))))

Event: Enable chip-system$state-help; name this event ‘chip-system$state-help-off’.

Theorem: chip-system$state (chip-system& (netlist) ∧ chip-system-invariant (list (list (list (regs-regs,

regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

mem-state))

∧ (te = f) ∧ (disable-regfile- = t) ∧ (test-regfile- = t) ∧ properp (pc-reg-in) ∧ (length (pc-reg-in) = 4)) → (dual-eval (2,

'chip-system,

cons (clk,

cons (ti,

cons (te, cons (reset-, cons (hold-,

cons (disable-regfile-,

cons (test-regfile-, pc-reg-in))))))),

list (list (list (regs-regs, regs-we, regs-data, regs-addr), flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

mem-state), netlist)

= fm9001-next-state (list (list (list (regs-regs, regs-we, regs-data, regs-addr),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

mem-state), cons (reset-, cons (hold-, pc-reg-in))))

Event: Enable chip-system$state; name this event ‘chip-system$state-off’.

Theorem: next-memory-state-preserves-memory-invariant (memory-state-invariant (mem-state) ∧ properp (data) ∧ (length (data) = 32) ∧ (length (address) = 32)) → memory-state-invariant (next-memory-state (mem-state,

strobe-, rw-, address, data))

Theorem: memory-properp-dual-port-ram-state-crock (memory-properp (4, 32, regs) ∧ (length (a-address) = 4) ∧ (length (b-address) = 4) ∧ properp (data) ∧ (length (data) = 32)) → memory-properp (4,

                  32,

dual-port-ram-state (32,

                                    4,

append (a-address,

append (b-address,

cons (we, data))),

regs))

Theorem: all-ramp-mem-dual-port-ram-state-crock (all-ramp-mem (4, regs) ∧ (length (a-address) = 4) ∧ (length (b-address) = 4) ∧ properp (data) ∧ (length (data) = 32)) → all-ramp-mem (4,

dual-port-ram-state (32,

                                 4,

append (a-address,

append (b-address,

cons (we, data))),

regs))

Theorem: fm9001-preserves-chip-system-invariant (chip-system-invariant (state) ∧ properp (pc-reg-input (inputs)) ∧ (length (pc-reg-input (inputs)) = 4)) → chip-system-invariant (fm9001-next-state (state, inputs))

Definition: chip-system-input-invariant (inputs) = ((caddr (inputs) = f)

∧ (cadddddr (inputs) = t)

∧ (caddddddr (inputs) = t)

∧ properp (cdddddddr (inputs))

∧ (length (cdddddddr (inputs)) = 4))

Theorem: rewrite-chip-system-input-invariant chip-system-input-invariant (inputs) = ((inputs = cons (car (inputs),

cons (cadr (inputs),

cons (caddr (inputs),

cons (cadddr (inputs),

cons (caddddr (inputs),

cons (cadddddr (inputs),

cons (caddddddr (inputs),

cdddddddr (inputs)))))))))

∧ (caddr (inputs) = f) ∧ (cadddddr (inputs) = t) ∧ (caddddddr (inputs) = t) ∧ properp (cdddddddr (inputs)) ∧ (length (cdddddddr (inputs)) = 4))

Definition: chip-system-operating-inputs-p (inputs, n) = if n ≃ 0 then t

else chip-system-input-invariant (car (inputs)) ∧ chip-system-operating-inputs-p (cdr (inputs), n − 1) endif

Event: Enable chip-system-operating-inputs-p; name this event ‘chip-system-operating-inputs-p-off’.

Theorem: open-chip-system-operating-inputs-p ((n ≃ 0) → (chip-system-operating-inputs-p (inputs, n) = t)) ∧ ((n ≄ 0)

→ (chip-system-operating-inputs-p (inputs, n)

= (chip-system-input-invariant (car (inputs))

∧ chip-system-operating-inputs-p (cdr (inputs), n − 1))))

Definition: map-up-1-input (inputs) = cons (cadddr (inputs), cons (caddddr (inputs), cdddddddr (inputs)))

Definition: map-up-inputs (inputs) = if inputs ≃ nil then nil

else cons (map-up-1-input (car (inputs)), map-up-inputs (cdr (inputs))) endif

Event: Enable map-up-inputs; name this event ‘map-up-inputs-off’.

Theorem: open-map-up-inputs ((inputs ≃ nil) → (map-up-inputs (inputs) = nil)) ∧ (listp (inputs)

→ (map-up-inputs (inputs)

= cons (map-up-1-input (car (inputs)), map-up-inputs (cdr (inputs)))))

Theorem: chip-system=fm9001$step (chip-system& (netlist) ∧ fm9001-state-structure (state) ∧ chip-system-invariant (state) ∧ chip-system-input-invariant (inputs)) → (dual-eval (2, 'chip-system, inputs, state, netlist)

= fm9001-next-state (state, map-up-1-input (inputs)))

Event: Enable chip-system=fm9001$step; name this event ‘chip-system=fm9001$step-off’.

Definition: chip-system=run-fm9001$induction (state, inputs, fm9001-inputs, n) = if n ≃ 0 then t

else chip-system=run-fm9001$induction (fm9001-next-state (state,

car (fm9001-inputs)),

cdr (inputs),

cdr (fm9001-inputs), n − 1) endif

Theorem: chip-system=run-fm9001 (chip-system& (netlist) ∧ fm9001-state-structure (state) ∧ chip-system-invariant (state) ∧ chip-system-operating-inputs-p (inputs, n) ∧ (fm9001-inputs = map-up-inputs (inputs))) → (simulate-dual-eval-2 ('chip-system, inputs, state, netlist, n)

= run-fm9001 (state, fm9001-inputs, n))

Definition: run-inputs-p (inputs, n) = if n ≃ 0 then t

else (reset–input (car (inputs)) = t)

∧ properp (pc-reg-input (car (inputs))) ∧ (length (pc-reg-input (car (inputs))) = 4) ∧ run-inputs-p (cdr (inputs), n − 1) endif

Event: Enable run-inputs-p; name this event ‘run-inputs-p-off’.

Theorem: open-run-inputs-p ((n ≃ 0) → (run-inputs-p (inputs, n) = t)) ∧ ((n ≄ 0)

→ (run-inputs-p (inputs, n)

= ((reset–input (car (inputs)) = t) ∧ properp (pc-reg-input (car (inputs))) ∧ (length (pc-reg-input (car (inputs))) = 4) ∧ run-inputs-p (cdr (inputs), n − 1))))

Theorem: run-inputs-p-plus run-inputs-p (inputs, n + m) = (run-inputs-p (inputs, n) ∧ run-inputs-p (nthcdr (n, inputs), m))

Theorem: run-inputs-p-1 (run-inputs-p (inputs, n) ∧ (n ≄ 0)) → run-inputs-p (inputs, 1)

Theorem: open-run-inputs-p-add1 run-inputs-p (inputs, 1 + n) = ((reset–input (car (inputs)) = t)

∧ properp (pc-reg-input (car (inputs))) ∧ (length (pc-reg-input (car (inputs))) = 4) ∧ run-inputs-p (cdr (inputs), n))

Definition: regfile-okp (regs) = ((length (regs) = 4)

∧ memory-okp (4, 32, car (regs))

∧ all-ramp-mem (4, car (regs))

∧ boolp (cadr (regs))

∧ (bvp (caddr (regs)) ∧ (length (caddr (regs)) = 32))

∧ bvp (cadddr (regs))

∧ (length (cadddr (regs)) = 4))

Theorem: rewrite-fm9001-next-state-for-step-lemmas (bvp (flags) ∧ bvp (a-reg) ∧ bvp (b-reg) ∧ bvp (i-reg) ∧ bvp (data-out) ∧ bvp (addr-out) ∧ boolp (last-reset-) ∧ boolp (last-dtack-) ∧ boolp (last-hold-) ∧ bvp (last-pc-reg) ∧ bvp (cntl-state))

→ (fm9001-next-state (list (list (regs, flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, last-pc-reg, cntl-state),

mem-state), external-inputs)

= list (list (f$write-regs (we-regs (cntl-state), regs-address (cntl-state), regs, bv (f$core-alu (alu-c (cntl-state),

a-reg, b-reg, alu-zero (cntl-state), alu-mpg (cntl-state), alu-op (cntl-state), make-tree (32)))),

f$update-flags (flags, we-flags (cntl-state), f$core-alu (alu-c (cntl-state),

a-reg, b-reg, alu-zero (cntl-state), alu-mpg (cntl-state), alu-op (cntl-state), make-tree (32))),

fv-if (we-a-reg (cntl-state),

fv-if (f-nand (data-in-select (cntl-state),

f-not (last-dtack-)), f$extend-immediate (select-immediate (cntl-state),

a-immediate (i-reg),

f$read-regs (regs-address (cntl-state),

regs)),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

strobe- (cntl-state))),

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

f-buf (rw- (cntl-state)))),

v-pullup (vft-buf (f-buf (hdack- (cntl-state)),

addr-out)),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out)))),

a-reg), fv-if (we-b-reg (cntl-state),

fv-if (f-nand (data-in-select (cntl-state),

f-not (last-dtack-)), f$extend-immediate (select-immediate (cntl-state),

a-immediate (i-reg), f$read-regs (regs-address (cntl-state),

regs)),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

strobe- (cntl-state))),

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

f-buf (rw- (cntl-state)))),

v-pullup (vft-buf (f-buf (hdack- (cntl-state)),

addr-out)),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out)))),

b-reg), fv-if (we-i-reg (cntl-state),

fv-if (f-nand (data-in-select (cntl-state),

f-not (last-dtack-)), f$extend-immediate (select-immediate (cntl-state),

a-immediate (i-reg), f$read-regs (regs-address (cntl-state),

regs)),

v-threefix (v-wire (v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

strobe- (cntl-state))),

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

f-buf (rw- (cntl-state)))),

v-pullup (vft-buf (f-buf (hdack- (cntl-state)), addr-out)),

make-list (32,

x))))),

vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out)))),

i-reg), fv-if (we-data-out (cntl-state),

bv (f$core-alu (alu-c (cntl-state), a-reg, b-reg, alu-zero (cntl-state), alu-mpg (cntl-state), alu-op (cntl-state), make-tree (32))),

data-out), fv-if (we-addr-out (cntl-state),

f$dec-pass (dec-addr-out (cntl-state),

f$extend-immediate (select-immediate (cntl-state), a-immediate (i-reg), f$read-regs (regs-address (cntl-state), regs))),

addr-out), f-buf (reset–input (external-inputs)), f-or (strobe- (cntl-state),

f-buf (car (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

strobe- (cntl-state))),

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

f-buf (rw- (cntl-state)))),

v-pullup (vft-buf (f-buf (hdack- (cntl-state)), addr-out)),

make-list (32, x))))),

f-if (we-hold- (cntl-state), f-buf (hold–input (external-inputs)), last-hold-),

fv-if (we-pc-reg (cntl-state), pc-reg-input (external-inputs), last-pc-reg),

v-threefix (f$next-cntl-state (last-reset-, last-dtack-, last-hold-, rw- (cntl-state), state (cntl-state), i-reg, flags, last-pc-reg, regs-address (cntl-state)))),

next-memory-state (mem-state,

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

strobe- (cntl-state))),

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

f-buf (rw- (cntl-state)))),

v-pullup (vft-buf (f-buf (hdack- (cntl-state)), addr-out)),

v-pullup (v-wire (vft-buf (f-not (f-buf (rw- (cntl-state))),

data-out), cdr (memory-value (mem-state,

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

strobe- (cntl-state))),

f-pullup (ft-buf (f-buf (hdack- (cntl-state)),

f-buf (rw- (cntl-state)))),

v-pullup (vft-buf (f-buf (hdack- (cntl-state)), addr-out)),

make-list (32, x))))))))

Theorem: fetch0$step0 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs, flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch0 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (last-pc-reg, regs), b-reg, i-reg, data-out, read-regs (last-pc-reg, regs), t, t, f-buf (f-buf (hold–input (car (inputs)))), pc-reg, cv fetch1 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

    0,

clock, t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: fetch0$step1 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch0 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (last-pc-reg, regs), b-reg, i-reg, data-out, read-regs (last-pc-reg, regs), t, t, f-buf (f-buf (hold–input (car (inputs)))), pc-reg, cv fetch1 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

0,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: fetch0$step2 (cv-hyps (f, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg)

∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ (mem-count ≃ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch0 (f,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

2,

clock, mem-count, mem-dtack, f, addr-out, data-out)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (last-pc-reg, regs), b-reg, i-reg, data-out, read-regs (last-pc-reg, regs), t, t, f-buf (f-buf (hold–input (car (inputs)))), pc-reg, cv fetch1 (t,

last-pc-reg, i-reg, flags, pc-reg)), list (write-mem (addr-out, mem, data-out),

                         0,

clock,

                         0,

t, f, addr-out, data-out)),

cdr (inputs), n − 1))

Theorem: fetch1$step (cv-hyps (last-rw-, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ boolp (last-rw-)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch1 (last-rw-,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, last-rw-, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (hold-,

cv fetch2 (t, last-pc-reg, i-reg, flags, pc-reg),

cv hold0 (t, last-pc-reg, i-reg, flags, pc-reg))),

list (mem, clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: fetch2$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch2 (t,

last-regs-address, last-i-reg, last-flags,

last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, addr-out, last-data)),

inputs, n)

= if car (clock) ≃ 0

then run-fm9001 (list (list (write-regs (t, last-pc-reg, regs, v-inc (a-reg)),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv fetch3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

cdr (clock),

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (t, last-pc-reg, regs,

v-inc (a-reg)),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv fetch3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

cdr (clock), car (clock) − 1, f, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1) endif)

Theorem: fetch3$step0 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (f) ∧ boolp (hold-)

∧ (reset- = t) ∧ (mem-count ≃ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, f, hold-, pc-reg, cv fetch3 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 1, clock, mem-count, t, t, addr-out, last-data)), inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, read-mem (addr-out, mem), data-out, addr-out, t, f, hold-, pc-reg, cv decode (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock,

0,

t, t, addr-out,

v-threefix (last-data))), cdr (inputs), n − 1))

Theorem: fetch3$step1 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (t) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, t, hold-, pc-reg, cv fetch3 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 1, clock, mem-count, f, t, addr-out, last-data)), inputs, n) = if mem-count ≃ 0

then run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, read-regs (last-pc-reg, regs), data-out, addr-out, t, f, hold-, pc-reg, cv fetch3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, read-regs (last-pc-reg, regs), data-out, addr-out, t, t, hold-, pc-reg, cv fetch3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock, mem-count − 1, f, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1) endif)

Theorem: decode$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv decode (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (or* (store-resultp (store-cc (i-reg),

flags), set-some-flags (set-flags (i-reg))),

if* (or* (a-immediate-p (i-reg),

reg-direct-p (mode-a (i-reg))), if* (or* (reg-direct-p (mode-b (i-reg)),

unary-op-code-p (op-code (i-reg))), cv rega (t,

last-pc-reg, i-reg, flags, pc-reg),

cv readb0 (t, last-pc-reg, i-reg, flags, pc-reg)),

cv reada0 (t, last-pc-reg, i-reg, flags, pc-reg)), if* (and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg)))),

cv sefa0 (t, last-pc-reg, i-reg, flags, pc-reg),

if* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), cv sefb0 (t,

last-pc-reg, i-reg, flags, pc-reg),

cv fetch0 (t, last-pc-reg, i-reg, flags, pc-reg))))),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: rega$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1)

∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv rega (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, if* (a-immediate-p (last-i-reg),

sign-extend (a-immediate (i-reg), 32), read-regs (rn-a (last-i-reg), regs)),

b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (reg-direct-p (mode-b (i-reg)), if* (unary-op-code-p (op-code (i-reg)),

cv update (t, rn-a (last-i-reg), i-reg, flags, pc-reg),

cv regb (t, rn-a (last-i-reg), i-reg, flags, pc-reg)),

if* (store-resultp (store-cc (i-reg),

flags),

cv write0 (t, rn-a (last-i-reg), i-reg, flags, pc-reg),

cv update (t, rn-a (last-i-reg), i-reg, flags, pc-reg)))),

list (mem,

0,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: regb$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out)

∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv regb (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv update (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: update$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ ((mem-state = 0) ∨ (mem-state = 1))) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv update (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, mem-state, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (store-resultp (store-cc (last-i-reg),

last-flags),

rn-b (last-i-reg),

regs,

bv (v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg)))),

update-flags (flags, set-flags (last-i-reg), v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg))),

a-reg,

read-regs (rn-b (last-i-reg), regs),

i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (and* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))),

unary-op-code-p (op-code (i-reg))), cv sefb1 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg),

cv fetch0 (t, rn-b (last-i-reg), i-reg, flags, pc-reg))),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: reada0$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv reada0 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (rn-a (last-i-reg), regs), b-reg, i-reg, data-out, if* (pre-dec-p (mode-a (last-i-reg)),

v-dec (read-regs (rn-a (last-i-reg),

regs)),

read-regs (rn-a (last-i-reg), regs)), t, t, hold-, pc-reg, cv reada1 (t,

rn-a (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

    0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: reada1$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv reada1 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)), list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (and* (not* (a-immediate-p (last-i-reg)),

or* (pre-dec-p (mode-a (last-i-reg)),

post-inc-p (mode-a (last-i-reg)))),

rn-a (last-i-reg),

regs,

bv (core-alu (if* (pre-dec-p (mode-a (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-a (last-i-reg)),

mpg (cons (f,

cons (f,

alu-dec-op))),

mpg (cons (f,

cons (f,

alu-inc-op)))),

if* (pre-dec-p (mode-a (last-i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv reada2 (t,

rn-a (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: reada2$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv reada2 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, addr-out, last-data)),

inputs, n)

= if car (clock) ≃ 0

then run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv reada3 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

1,

cdr (clock),

0,

t, t, addr-out, v-threefix (last-data))), cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (rn-b (last-i-reg),

regs),

i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv reada3 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

1,

cdr (clock), car (clock) − 1, f, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1) endif)

Theorem: reada3$step0 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0)

∧ run-inputs-p (inputs, 1) ∧ boolp (f) ∧ boolp (hold-) ∧ (reset- = t) ∧ (mem-count ≃ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, f, hold-, pc-reg, cv reada3 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 1, clock, mem-count, t, t, addr-out, last-data)), inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-mem (addr-out, mem), b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, if* (reg-direct-p (mode-b (i-reg)),

cv update (t, last-pc-reg, i-reg, flags, pc-reg),

if* (unary-op-code-p (op-code (i-reg)), if* (store-resultp (store-cc (i-reg),

flags), cv write0 (t,

last-pc-reg, i-reg, flags, pc-reg),

cv update (t, last-pc-reg, i-reg, flags, pc-reg)),

cv readb0 (t, last-pc-reg, i-reg, flags, pc-reg)))),

list (mem,

                         1,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: reada3$step1 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (t) ∧ boolp (hold-) ∧ (reset- = t)

∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, t, hold-, pc-reg, cv reada3 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 1, clock, mem-count, f, t, addr-out, last-data)), inputs, n)

= if mem-count ≃ 0

then run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (last-pc-reg, regs), b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv reada3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock,

0,

t, t, addr-out,

v-threefix (last-data))), cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (last-pc-reg, regs), b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv reada3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock, mem-count − 1, f, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1) endif)

Theorem: readb0$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0)

∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ ((mem-state = 0) ∨ (mem-state = 1))) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv readb0 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, mem-state, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, data-out, if* (pre-dec-p (mode-b (last-i-reg)),

v-dec (read-regs (rn-b (last-i-reg),

regs)),

read-regs (rn-b (last-i-reg), regs)), t, t, hold-, pc-reg, cv readb1 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: readb1$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv readb1 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, if* (or* (a-immediate-p (last-i-reg),

reg-direct-p (mode-a (last-i-reg))), if* (a-immediate-p (last-i-reg),

sign-extend (a-immediate (i-reg),

                 32),

read-regs (rn-a (last-i-reg), regs)), a-reg),

b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv readb2 (t,

rn-a (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

0,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: readb2$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv readb2 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

                      0,

clock, mem-count, mem-dtack, t, addr-out, last-data)),

inputs, n)

= if car (clock) ≃ 0

then run-fm9001 (list (list (write-regs (and* (not* (store-resultp (store-cc (last-i-reg),

last-flags)),

or* (pre-dec-p (mode-b (last-i-reg)),

post-inc-p (mode-b (last-i-reg)))),

rn-b (last-i-reg),

regs,

bv (core-alu (if* (pre-dec-p (mode-b (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-b (last-i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (last-i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv readb3 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

1,

cdr (clock),

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (and* (not* (store-resultp (store-cc (last-i-reg),

last-flags)),

or* (pre-dec-p (mode-b (last-i-reg)),

post-inc-p (mode-b (last-i-reg)))),

rn-b (last-i-reg),

regs,

bv (core-alu (if* (pre-dec-p (mode-b (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-b (last-i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (last-i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv readb3 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

1,

cdr (clock), car (clock) − 1, f, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1) endif)

Theorem: readb3$step0 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (f) ∧ boolp (hold-) ∧ (reset- = t)

∧ (mem-count ≃ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, f, hold-, pc-reg, cv readb3 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 1, clock, mem-count, t, t, addr-out, last-data)), inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-mem (addr-out, mem), i-reg, data-out, addr-out, t, f, hold-, pc-reg, if* (store-resultp (store-cc (i-reg), flags),

cv write0 (t, last-pc-reg, i-reg, flags, pc-reg),

cv update (t, last-pc-reg, i-reg, flags, pc-reg))),

list (mem,

    1,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: readb3$step1 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (t) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, t, hold-, pc-reg, cv readb3 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 1, clock, mem-count, f, t, addr-out, last-data)), inputs, n)

= if mem-count ≃ 0

then run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (last-pc-reg, regs), i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv readb3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (last-pc-reg, regs), i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv readb3 (t,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

                              1,

clock,

mem-count − 1,

f, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1) endif)

Theorem: write0$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ ((mem-state = 0) ∨ (mem-state = 1))) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv write0 (t, last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, mem-state, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0),

update-flags (flags, set-flags (last-i-reg), v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg))),

a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, bv (v-alu (c-flag (last-flags),

a-reg, b-reg, op-code (last-i-reg))),

if* (pre-dec-p (mode-b (last-i-reg)),

v-dec (read-regs (rn-b (last-i-reg),

regs)),

read-regs (rn-b (last-i-reg), regs)), t, t, hold-, pc-reg, cv write1 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

0,

clock, t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: write1$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv write1 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (or* (pre-dec-p (mode-b (last-i-reg)),

post-inc-p (mode-b (last-i-reg))), rn-b (last-i-reg), regs, bv (core-alu (if* (pre-dec-p (mode-b (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-b (last-i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (last-i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv write2 (f,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem, 0, clock, 0, t, f, addr-out, data-out)), cdr (inputs), n − 1))

Theorem: write2$step (cv-hyps (f, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv write2 (f,

last-regs-address, last-i-reg, last-flags, last-pc-reg)), list (mem,

0,

clock, mem-count, mem-dtack, f, addr-out, data-out)),

inputs, n)

= if car (clock) ≃ 0

then run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv write3 (f,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

2,

cdr (clock),

0,

t, f, addr-out, data-out)),

cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv write3 (f,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

                              2,

cdr (clock), car (clock) − 1, f, f, addr-out, data-out)),

cdr (inputs), n − 1) endif)

Theorem: write3$step0 (cv-hyps (f, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (f) ∧ boolp (hold-) ∧ (reset- = t) ∧ (mem-count ≃ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, f, hold-, pc-reg, cv write3 (f,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 2, clock, mem-count, t, f, addr-out, data-out)), inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv fetch0 (f,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem, 2, clock, 0, t, f, addr-out, data-out)), cdr (inputs), n − 1))

Theorem: write3$step1 (cv-hyps (f, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out)

∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (t) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, t, hold-, pc-reg, cv write3 (f,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem, 2, clock, mem-count, f, f, addr-out, data-out)), inputs, n)

= if mem-count ≃ 0

then run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv write3 (f,

last-pc-reg, i-reg, flags,

pc-reg)),

list (mem,

 2,

clock,

 0,

t, f, addr-out, data-out)),

cdr (inputs), n − 1)

else run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv write3 (f,

last-pc-reg, i-reg, flags, pc-reg)),

list (mem,

2,

clock, mem-count − 1, f, f, addr-out, data-out)),

cdr (inputs), n − 1) endif)

Theorem: sefa0$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg)

∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefa0 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, read-regs (rn-a (last-i-reg), regs), b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv sefa1 (t,

rn-a (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: sefa1$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefa1 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (t, rn-a (last-i-reg), regs, bv (core-alu (if* (pre-dec-p (mode-a (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-a (last-i-reg)),

mpg (cons (f,

cons (f,

alu-dec-op))),

mpg (cons (f,

cons (f,

alu-inc-op)))),

if* (pre-dec-p (mode-a (last-i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), cv sefb0 (t,

rn-a (last-i-reg), i-reg, flags, pc-reg),

cv fetch0 (t, rn-a (last-i-reg), i-reg, flags, pc-reg))),

list (mem,

0,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: sefb0$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg)

∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefb0 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv sefb1 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

                         0,

clock,

                         0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Theorem: sefb1$step (cv-hyps (t, last-regs-address, last-i-reg, last-flags, last-pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ (n ≄ 0) ∧ run-inputs-p (inputs, 1) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefb1 (t,

last-regs-address, last-i-reg, last-flags, last-pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, n)

= run-fm9001 (list (list (write-regs (t, rn-b (last-i-reg), regs, bv (core-alu (if* (pre-dec-p (mode-b (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-b (last-i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (last-i-reg)), alu-dec-op, alu-inc-op),

make-tree (32)))),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv fetch0 (t,

rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem,

0,

clock,

0,

t, t, addr-out, v-threefix (last-data))),

cdr (inputs), n − 1))

Event: Let us define the theory fm9001-step-theory to consist of the following events: sefb1$step, sefb0$step, sefa1$step, sefa0$step, write3$step1, write3$step0, write2$step, write1$step, write0$step, readb3$step1, readb3$step0, readb2$step, readb1$step, readb0$step, reada3$step1, reada3$step0, reada2$step, reada1$step, reada0$step, update$step, regb$step, rega$step, decode$step, fetch3$step1, fetch3$step0, fetch2$step, fetch1$step, fetch0$step2, fetch0$step1, fetch0$step0.

Definition: read-fn (reg0 , reg1 , n) = if n ≃ 0 then reg0

else read-fn (reg1 , reg1 , n − 1) endif

Event: Enable read-fn; name this event ‘read-fn-off’.

Theorem: open-read-fn ((n ≃ 0) → (read-fn (reg0 , reg1 , n) = reg0 )) ∧ ((n ≄ 0) → (read-fn (reg0 , reg1 , n) = read-fn (reg1 , reg1 , n − 1)))

Theorem: length-read-fn ((length (reg0 ) = 32) ∧ (length (reg1 ) = 32)) → (length (read-fn (reg0 , reg1 , n)) = 32)

Theorem: properp-read-fn (properp (reg0 ) ∧ properp (reg1 )) → properp (read-fn (reg0 , reg1 , n))

Theorem: bvp-read-fn (bvp (reg0 ) ∧ bvp (reg1 )) → bvp (read-fn (reg0 , reg1 , n))

Definition: fetch3$induction (n,

clock, count, inputs, regs, a-reg, b-reg, rw-, regs-address, i-reg, flags, pc-reg, last-rw-, last-regs-address, last-i-reg, last-flags, last-data)

= if n ≃ 0 then t

else fetch3$induction (n − 1, clock, count − 1, cdr (inputs), write-regs (f, 0, regs, 0), a-reg, b-reg, t, regs-address, read-regs (pc-reg, regs), flags, pc-reg, rw-, pc-reg, i-reg, flags,

v-threefix (last-data)) endif

Theorem: fetch3$progress-help (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + n) ∧ if count < n then f

else t endif) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv fetch3 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 1, clock, count, f, t, addr-out, last-data)), inputs, 1 + n) = list (list (write-regs (f, 0, regs, 0),

flags, a-reg, b-reg, read-fn (i-reg, read-regs (pc-reg, regs), 1 + n), data-out, addr-out, t, ¬ if n < count then f

else t endif, hold-, pc-reg, cv fetch3 (t,

pc-reg,

read-fn (i-reg, read-regs (pc-reg, regs), n), flags, pc-reg)),

list (mem,

1,

clock, count − (1 + n), if n < count then f else t endif, t, addr-out, v-threefix (last-data))))

Theorem: fetch3$progress (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, count) ∧ (count ≄ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv fetch3 (t,

last-regs-address,

last-i-reg, last-flags, pc-reg)),

list (mem, 1, clock, count − 1, f, t, addr-out, last-data)), inputs, count)

= list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, read-fn (i-reg, read-regs (pc-reg, regs), count), data-out, addr-out, t, f, hold-, pc-reg, cv fetch3 (t,

pc-reg,

read-fn (i-reg, read-regs (pc-reg, regs), count − 1),

flags, pc-reg)),

list (mem, 1, clock, 0, t, t, addr-out, v-threefix (last-data))))

Definition: reada3$induction (n,

clock, count, inputs, regs, a-reg, b-reg, rw-, regs-address, i-reg, flags, pc-reg, last-rw-, last-regs-address, last-i-reg, last-flags, last-data)

= if n ≃ 0 then t

else reada3$induction (n − 1, clock, count − 1, cdr (inputs), write-regs (f, 0, regs, 0), read-regs (pc-reg, regs), b-reg, t, regs-address, i-reg, flags, pc-reg, rw-, pc-reg, i-reg, flags, v-threefix (last-data)) endif

Theorem: reada3$progress-help (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + n) ∧ if count < n then f

else t endif) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv reada3 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 1, clock, count, f, t, addr-out, last-data)), inputs, 1 + n)

= list (list (write-regs (f, 0, regs, 0), flags, read-fn (a-reg, read-regs (pc-reg, regs), 1 + n), b-reg, i-reg, data-out, addr-out, t, ¬ if n < count then f

else t endif, hold-, pc-reg, cv reada3 (t, pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock, count − (1 + n), if n < count then f else t endif, t, addr-out, v-threefix (last-data))))

Theorem: reada3$progress (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem)

∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, count) ∧ (count ≄ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv reada3 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 1, clock, count − 1, f, t, addr-out, last-data)), inputs, count) = list (list (write-regs (f, 0, regs, 0),

flags,

read-fn (a-reg, read-regs (pc-reg, regs), count), b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv reada3 (t, pc-reg, i-reg, flags, pc-reg)),

list (mem, 1, clock, 0, t, t, addr-out, v-threefix (last-data))))

Definition: readb3$induction (n,

clock, count, inputs, regs, a-reg, b-reg, rw-, regs-address, i-reg, flags, pc-reg, last-rw-, last-regs-address, last-i-reg, last-flags, last-data)

= if n ≃ 0 then t

else readb3$induction (n − 1, clock, count − 1, cdr (inputs), write-regs (f, 0, regs, 0), a-reg, read-regs (pc-reg, regs), t, regs-address, i-reg, flags, pc-reg, rw-, pc-reg, i-reg, flags, v-threefix (last-data)) endif

Theorem: readb3$progress-help (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32)

∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + n) ∧ if count < n then f

else t endif) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv readb3 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 1, clock, count, f, t, addr-out, last-data)), inputs, 1 + n)

= list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-fn (b-reg, read-regs (pc-reg, regs), 1 + n), i-reg, data-out, addr-out, t, ¬ if n < count then f

else t endif, hold-, pc-reg, cv readb3 (t, pc-reg, i-reg, flags, pc-reg)),

list (mem,

1,

clock,

count − (1 + n), if n < count then f else t endif, t, addr-out, v-threefix (last-data))))

Theorem: readb3$progress (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, count) ∧ (count ≄ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv readb3 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 1, clock, count − 1, f, t, addr-out, last-data)), inputs, count) = list (list (write-regs (f, 0, regs, 0), flags, a-reg, read-fn (b-reg, read-regs (pc-reg, regs), count), i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv readb3 (t, pc-reg, i-reg, flags, pc-reg)),

list (mem, 1, clock, 0, t, t, addr-out, v-threefix (last-data))))

Definition: write3$induction (n,

clock, count, inputs, regs, a-reg, b-reg, rw-, regs-address, i-reg, flags, pc-reg, last-rw-, last-regs-address, last-i-reg, last-flags, last-data)

= if n ≃ 0 then t

else write3$induction (n − 1, clock, count − 1, cdr (inputs), write-regs (f, 0, regs, 0), a-reg, b-reg, f, regs-address, i-reg, flags, pc-reg, rw-, pc-reg, i-reg, flags, v-threefix (last-data)) endif

Theorem: write3$progress-help (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + n) ∧ if count < n then f

else t endif) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv write3 (f,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 2, clock, count, f, f, addr-out, data-out)), inputs, 1 + n) = list (list (write-regs (f, 0, regs, 0),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, ¬ if n < count then f

else t endif, hold-, pc-reg, cv write3 (f, pc-reg, i-reg, flags, pc-reg)),

list (mem,

2,

clock, count − (1 + n), if n < count then f else t endif, f, addr-out, data-out)))

Theorem: write3$progress (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, last-regs-address, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (hold-) ∧ run-inputs-p (inputs, count) ∧ (count ≄ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv write3 (f,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, 2, clock, count − 1, f, f, addr-out, data-out)), inputs, count)

= list (list (write-regs (f, 0, regs, 0), flags, a-reg, b-reg, i-reg, data-out, addr-out, t, f, hold-, pc-reg, cv write3 (f, pc-reg, i-reg, flags, pc-reg)),

list (mem, 2, clock, 0, t, f, addr-out, data-out)))

Definition: zerop-not-zerop-cases (n) = if n ≃ 0 then t

elseif n ≄ 0 then t else zerop-not-zerop-cases (n) endif

Theorem: fetch0->fetch0$sim0 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out)

∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs,

1)

= list (list (write-regs (f, 0, regs, 0), flags, read-regs (pc-reg, regs), b-reg, i-reg, data-out, read-regs (pc-reg, regs), t, t, f-buf (f-buf (hold–input (car (inputs)))), pc-reg, cv fetch1 (t, pc-reg, i-reg, flags, pc-reg)),

list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: fetch0->fetch0$sim1 (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

1,

clock, mem-count, mem-dtack, t, last-address, last-data)), inputs,

               1)

= list (list (write-regs (f, 0, regs, 0), flags, read-regs (pc-reg, regs), b-reg, i-reg, data-out, read-regs (pc-reg, regs), t, t, f-buf (f-buf (hold–input (car (inputs)))), pc-reg, cv fetch1 (t, pc-reg, i-reg, flags, pc-reg)),

list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: fetch0->fetch0$sim2 (cv-hyps (f, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1) ∧ (reset- = t) ∧ (mem-count ≃ 0)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch0 (f,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

       2,

clock,

mem-count, mem-dtack, f, addr-out, data-out)),

inputs,

1)

= list (list (write-regs (f, 0, regs, 0), flags, read-regs (pc-reg, regs), b-reg, i-reg, data-out, read-regs (pc-reg, regs), t, t, f-buf (f-buf (hold–input (car (inputs)))), pc-reg, cv fetch1 (t, pc-reg, i-reg, flags, pc-reg)),

list (write-mem (addr-out, mem, data-out),

0,

clock,

0,

t, f, addr-out, data-out)))

Theorem: fetch1->decode$sim ((dtack-wait = car (clock)) ∧ cv-hyps (last-rw-, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg)

∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + (1 + (car (clock) + 2))) ∧ (reset- = t) ∧ (hold- = t) ∧ boolp (last-rw-)) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv fetch1 (last-rw-,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, last-rw-, last-address, last-data)),

inputs, 1 + (1 + (car (clock) + 2)))

= list (list (write-regs (f,

  0,

write-regs (t, pc-reg, write-regs (f, 0, regs, 0),

v-inc (a-reg)),

0),

flags, a-reg, b-reg, read-mem (addr-out, mem), data-out, addr-out, t, t, t, pc-reg, if* (or* (store-resultp (store-cc (read-mem (addr-out,

mem)),

flags),

set-some-flags (set-flags (read-mem (addr-out,

mem)))),

if* (or* (a-immediate-p (read-mem (addr-out, mem)),

reg-direct-p (mode-a (read-mem (addr-out,

mem)))),

if* (or* (reg-direct-p (mode-b (read-mem (addr-out,

mem))),

unary-op-code-p (op-code (read-mem (addr-out,

mem)))),

cv rega (t, pc-reg, read-mem (addr-out, mem), flags, pc-reg),

cv readb0 (t, pc-reg, read-mem (addr-out, mem), flags, pc-reg)),

cv reada0 (t, pc-reg, read-mem (addr-out, mem), flags, pc-reg)),

if* (and* (not* (a-immediate-p (read-mem (addr-out,

mem))),

or* (pre-dec-p (mode-a (read-mem (addr-out,

mem))),

post-inc-p (mode-a (read-mem (addr-out,

mem))))),

cv sefa0 (t, pc-reg, read-mem (addr-out, mem), flags, pc-reg),

if* (or* (pre-dec-p (mode-b (read-mem (addr-out,

mem))),

post-inc-p (mode-b (read-mem (addr-out,

mem)))),

cv sefb0 (t, pc-reg, read-mem (addr-out, mem), flags, pc-reg),

cv fetch0 (t, pc-reg, read-mem (addr-out, mem), flags, pc-reg))))),

list (mem,

               0,

cdr (clock),

               0,

t, t, addr-out, v-threefix (last-data))))

Theorem: rega->rega$sim (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-)

∧ run-inputs-p (inputs, 1) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv rega (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs,

1)

= list (list (write-regs (f, 0, regs, 0), flags, if* (a-immediate-p (last-i-reg),

sign-extend (a-immediate (i-reg), 32), read-regs (rn-a (last-i-reg), regs)),

b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (reg-direct-p (mode-b (i-reg)),

if* (unary-op-code-p (op-code (i-reg)), cv update (t,

rn-a (last-i-reg), i-reg, flags, pc-reg),

cv regb (t, rn-a (last-i-reg), i-reg, flags, pc-reg)),

if* (store-resultp (store-cc (i-reg), flags),

cv write0 (t, rn-a (last-i-reg), i-reg, flags, pc-reg),

cv update (t, rn-a (last-i-reg), i-reg, flags, pc-reg)))), list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: regb->update$sim (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 2) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv regb (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs,

2)

= list (list (write-regs (store-resultp (store-cc (i-reg), flags), rn-b (i-reg), write-regs (f, 0, regs, 0), bv (v-alu (c-flag (flags),

a-reg,

read-regs (rn-b (last-i-reg), regs), op-code (i-reg)))),

update-flags (flags, set-flags (i-reg), v-alu (c-flag (flags), a-reg, read-regs (rn-b (last-i-reg), regs), op-code (i-reg))),

a-reg, read-regs (rn-b (i-reg), regs), i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (and* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), unary-op-code-p (op-code (i-reg))), cv sefb1 (t, rn-b (i-reg), i-reg, flags, pc-reg), cv fetch0 (t, rn-b (i-reg), i-reg, flags, pc-reg))), list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: update->update$sim (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1) ∧ (reset- = t) ∧ ((mem-state = 0) ∨ (mem-state = 1))) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv update (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, mem-state, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs,

1)

= list (list (write-regs (store-resultp (store-cc (last-i-reg),

last-flags),

rn-b (last-i-reg),

regs,

bv (v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg)))),

update-flags (flags, set-flags (last-i-reg), v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg))),

a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (and* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), unary-op-code-p (op-code (i-reg))), cv sefb1 (t, rn-b (last-i-reg), i-reg, flags, pc-reg), cv fetch0 (t, rn-b (last-i-reg), i-reg, flags, pc-reg))),

list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: reada0->reada3$sim ((dtack-wait = car (clock)) ∧ cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs)

∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + (1 + (1 + (car (clock) + 1)))) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv reada0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, 1 + (1 + (1 + (car (clock) + 1))))

= list (list (write-regs (f,

  0,

write-regs (and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)), post-inc-p (mode-a (i-reg)))), rn-a (i-reg), write-regs (f, 0, regs, 0), bv (core-alu (if* (pre-dec-p (mode-a (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-inc-op)))),

read-regs (rn-a (last-i-reg),

regs),

b-reg, f, if* (pre-dec-p (mode-a (i-reg)),

mpg (cons (f,

cons (f,

alu-dec-op))),

mpg (cons (f,

cons (f,

alu-inc-op)))),

if* (pre-dec-p (mode-a (i-reg)), alu-dec-op, alu-inc-op),

make-tree (32)))),

0),

flags, read-mem (if* (pre-dec-p (mode-a (last-i-reg)),

v-dec (read-regs (rn-a (last-i-reg), regs)), read-regs (rn-a (last-i-reg), regs)),

mem),

read-regs (rn-b (i-reg),

write-regs (and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg)))),

rn-a (i-reg), write-regs (f, 0, regs, 0), bv (core-alu (if* (pre-dec-p (mode-a (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-inc-op)))),

read-regs (rn-a (last-i-reg),

regs),

b-reg, f, if* (pre-dec-p (mode-a (i-reg)),

mpg (cons (f,

cons (f,

alu-dec-op))),

mpg (cons (f,

cons (f,

alu-inc-op)))),

if* (pre-dec-p (mode-a (i-reg)), alu-dec-op, alu-inc-op), make-tree (32))))),

i-reg, data-out, if* (pre-dec-p (mode-a (last-i-reg)),

v-dec (read-regs (rn-a (last-i-reg), regs)), read-regs (rn-a (last-i-reg), regs)),

t, f, hold-, pc-reg, if* (reg-direct-p (mode-b (i-reg)),

cv update (t, pc-reg, i-reg, flags, pc-reg), if* (unary-op-code-p (op-code (i-reg)),

if* (store-resultp (store-cc (i-reg), flags), cv write0 (t, pc-reg, i-reg, flags, pc-reg), cv update (t, pc-reg, i-reg, flags, pc-reg)),

cv readb0 (t, pc-reg, i-reg, flags, pc-reg)))),

list (mem,

1,

cdr (clock),

0,

t, t, if* (pre-dec-p (mode-a (last-i-reg)),

v-dec (read-regs (rn-a (last-i-reg), regs)), read-regs (rn-a (last-i-reg), regs)),

v-threefix (last-data))))

Theorem: readb0->readb3$sim ((dtack-wait = car (clock)) ∧ cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg)

∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + (1 + (1 + (car (clock) + 1)))) ∧ (reset- = t) ∧ ((mem-state = 0) ∨ (mem-state = 1))) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv readb0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, mem-state, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, 1 + (1 + (1 + (car (clock) + 1))))

= list (list (write-regs (f,

  0,

write-regs (and* (not* (store-resultp (store-cc (i-reg),

flags)),

or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg)))),

rn-b (i-reg), write-regs (f, 0, regs, 0), bv (core-alu (if* (pre-dec-p (mode-b (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-inc-op)))),

if* (or* (a-immediate-p (i-reg),

reg-direct-p (mode-a (i-reg))), if* (a-immediate-p (i-reg),

sign-extend (a-immediate (i-reg),

              32),

read-regs (rn-a (i-reg), regs)),

a-reg), read-regs (rn-b (last-i-reg),

regs),

f, if* (pre-dec-p (mode-b (i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (i-reg)), alu-dec-op, alu-inc-op),

make-tree (32)))),

0),

flags, if* (or* (a-immediate-p (i-reg),

reg-direct-p (mode-a (i-reg))), if* (a-immediate-p (i-reg),

sign-extend (a-immediate (i-reg), 32), read-regs (rn-a (i-reg), regs)),

a-reg), read-mem (if* (pre-dec-p (mode-b (last-i-reg)), v-dec (read-regs (rn-b (last-i-reg), regs)), read-regs (rn-b (last-i-reg), regs)),

mem),

i-reg, data-out, if* (pre-dec-p (mode-b (last-i-reg)),

v-dec (read-regs (rn-b (last-i-reg), regs)), read-regs (rn-b (last-i-reg), regs)),

t, f, hold-, pc-reg, if* (store-resultp (store-cc (i-reg), flags),

cv write0 (t, pc-reg, i-reg, flags, pc-reg), cv update (t, pc-reg, i-reg, flags, pc-reg))),

list (mem,

               1,

cdr (clock),

               0,

t, t, if* (pre-dec-p (mode-b (last-i-reg)),

v-dec (read-regs (rn-b (last-i-reg), regs)), read-regs (rn-b (last-i-reg), regs)),

v-threefix (last-data))))

Theorem: write0->write3$sim ((dtack-wait = car (clock)) ∧ cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1 + (1 + (1 + (car (clock) + 1)))) ∧ (reset- = t)

∧ ((mem-state = 0) ∨ (mem-state = 1))) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv write0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, mem-state, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs, 1 + (1 + (1 + (car (clock) + 1))))

= list (list (write-regs (f,

  0,

write-regs (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), rn-b (i-reg), write-regs (f, 0, regs, 0), bv (core-alu (if* (pre-dec-p (mode-b (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-inc-op)))),

a-reg,

read-regs (rn-b (last-i-reg), regs),

f, if* (pre-dec-p (mode-b (i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

0),

update-flags (flags, set-flags (last-i-reg), v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg))),

a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, bv (v-alu (c-flag (last-flags),

a-reg, b-reg, op-code (last-i-reg))),

if* (pre-dec-p (mode-b (last-i-reg)), v-dec (read-regs (rn-b (last-i-reg), regs)), read-regs (rn-b (last-i-reg), regs)),

t, f, hold-, pc-reg, cv fetch0 (f,

pc-reg, i-reg, update-flags (flags,

set-flags (last-i-reg), v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg))),

pc-reg)),

list (mem,

2,

cdr (clock),

               0,

t, f, if* (pre-dec-p (mode-b (last-i-reg)),

v-dec (read-regs (rn-b (last-i-reg), regs)), read-regs (rn-b (last-i-reg), regs)),

bv (v-alu (c-flag (last-flags), a-reg, b-reg, op-code (last-i-reg))))))

Theorem: sefa0->sefa1$sim (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 2) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefa0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs,

2)

= list (list (write-regs (t, rn-a (i-reg), write-regs (f, 0, regs, 0), bv (core-alu (if* (pre-dec-p (mode-a (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-inc-op)))),

read-regs (rn-a (last-i-reg), regs),

b-reg, f, if* (pre-dec-p (mode-a (i-reg)),

mpg (cons (f,

cons (f,

alu-dec-op))),

mpg (cons (f,

cons (f,

alu-inc-op)))),

if* (pre-dec-p (mode-a (i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, read-regs (rn-a (last-i-reg), regs), b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, if* (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), cv sefb0 (t, rn-a (i-reg), i-reg, flags, pc-reg), cv fetch0 (t, rn-a (i-reg), i-reg, flags, pc-reg))), list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: sefb0->sefb1$sim (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 2) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefb0 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem, clock, mem-count, mem-dtack, t, last-address, last-data)),

inputs,

2)

= list (list (write-regs (t, rn-b (i-reg), write-regs (f, 0, regs, 0), bv (core-alu (if* (pre-dec-p (mode-b (i-reg)),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (flags),

cons (f,

alu-inc-op)))),

a-reg,

read-regs (rn-b (last-i-reg), regs),

f,

if* (pre-dec-p (mode-b (i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, a-reg, read-regs (rn-b (last-i-reg), regs), i-reg, data-out, addr-out, t, t, hold-, pc-reg,

cv fetch0 (t, rn-b (i-reg), i-reg, flags, pc-reg)), list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Theorem: sefb1->sefb1$sim (cv-hyps (t, last-regs-address, last-i-reg, last-flags, pc-reg) ∧ cv-hyps (t, pc-reg, i-reg, flags, pc-reg) ∧ memory-okp (32, 32, mem) ∧ regfile-okp (regs) ∧ bvp (a-reg) ∧ (length (a-reg) = 32) ∧ bvp (b-reg) ∧ (length (b-reg) = 32) ∧ bvp (addr-out) ∧ (length (addr-out) = 32) ∧ bvp (data-out) ∧ (length (data-out) = 32) ∧ boolp (dtack-) ∧ boolp (hold-) ∧ run-inputs-p (inputs, 1) ∧ (reset- = t) ∧ nil) → (run-fm9001 (list (list (regs,

flags, a-reg, b-reg, i-reg, data-out, addr-out, reset-, dtack-, hold-, pc-reg, cv sefb1 (t,

last-regs-address, last-i-reg, last-flags, pc-reg)),

list (mem,

0,

clock, mem-count, mem-dtack, t, last-address,

last-data)), inputs,

1)

= list (list (write-regs (t, rn-b (last-i-reg), regs, bv (core-alu (if* (pre-dec-p (mode-b (last-i-reg)),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-dec-op))),

carry-in-help (cons (c-flag (last-flags),

cons (f,

alu-inc-op)))),

a-reg, b-reg, f, if* (pre-dec-p (mode-b (last-i-reg)),

mpg (cons (f,

cons (t,

alu-dec-op))),

mpg (cons (f,

cons (t,

alu-inc-op)))),

if* (pre-dec-p (mode-b (last-i-reg)), alu-dec-op, alu-inc-op), make-tree (32)))),

flags, a-reg, b-reg, i-reg, data-out, addr-out, t, t, hold-, pc-reg, cv fetch0 (t, rn-b (last-i-reg), i-reg, flags, pc-reg)),

list (mem, 0, clock, 0, t, t, addr-out, v-threefix (last-data))))

Definition: t fetch0 (clock, i-reg, flags) = 1

Definition: t sefb1 (clock, i-reg, flags) = (1 + t fetch0 (clock, i-reg, flags))

Definition: t sefb0 (clock, i-reg, flags) = (2 + t fetch0 (clock, i-reg, flags))

Definition: t sefa0 (clock, i-reg, flags) = (2 + if or* (pre-dec-p (mode-b (i-reg)), post-inc-p (mode-b (i-reg)))

then t sefb0 (clock, i-reg, flags)

else t fetch0 (clock, i-reg, flags) endif)

Definition: t write0 (clock, i-reg, flags) = ((1 + (1 + (1 + (car (clock) + 1))))

+ t fetch0 (cdr (clock), i-reg, flags))

Definition: t update (clock, i-reg, flags) = (1 + if b-and (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), unary-op-code-p (op-code (i-reg)))

then t sefb1 (clock, i-reg, flags)

else t fetch0 (clock, i-reg, flags) endif)

Definition: t readb0 (clock, i-reg, flags) = ((1 + (1 + (1 + (car (clock) + 1))))

+ if store-resultp (store-cc (i-reg), flags) then t write0 (cdr (clock), i-reg, flags) else t update (cdr (clock), i-reg, flags) endif)

Definition: t reada0 (clock, i-reg, flags) = ((1 + (1 + (1 + (car (clock) + 1))))

+ if reg-direct-p (mode-b (i-reg))

then t update (cdr (clock), i-reg, flags) elseif unary-op-code-p (op-code (i-reg)) then if store-resultp (store-cc (i-reg), flags)

then t write0 (cdr (clock), i-reg, flags)

else t update (cdr (clock), i-reg, flags) endif else t readb0 (cdr (clock), i-reg, flags) endif)

Definition: t regb (clock, i-reg, flags) = (2 + if b-and (or* (pre-dec-p (mode-b (i-reg)),

post-inc-p (mode-b (i-reg))), unary-op-code-p (op-code (i-reg)))

then t sefb1 (clock, i-reg, flags)

else t fetch0 (clock, i-reg, flags) endif)

Definition: t rega (clock, i-reg, flags) = (1 + if reg-direct-p (mode-b (i-reg))

then if unary-op-code-p (op-code (i-reg)) then t update (clock, i-reg, flags) else t regb (clock, i-reg, flags) endif

elseif store-resultp (store-cc (i-reg), flags)

then t write0 (clock, i-reg, flags)

else t update (clock, i-reg, flags) endif)

Definition: t fetch1 (clock, i-reg, flags) = ((1 + (1 + (car (clock) + 2)))

+ if b-or (store-resultp (store-cc (i-reg), flags),

set-some-flags (set-flags (i-reg))) then if or* (a-immediate-p (i-reg), reg-direct-p (mode-a (i-reg)))

then if b-or (reg-direct-p (mode-b (i-reg)),

unary-op-code-p (op-code (i-reg))) then t rega (cdr (clock), i-reg, flags) else t readb0 (cdr (clock), i-reg, flags) endif

else t reada0 (cdr (clock), i-reg, flags) endif elseif and* (not* (a-immediate-p (i-reg)),

or* (pre-dec-p (mode-a (i-reg)),

post-inc-p (mode-a (i-reg))))

then t sefa0 (cdr (clock), i-reg, flags)

elseif or* (pre-dec-p (mode-b (i-reg)), post-inc-p (mode-b (i-reg))) then t sefb0 (cdr (clock), i-reg, flags) else t fetch0 (cdr (clock), i-reg, flags) endif)

Definition: operating-inputs-p (inputs, n) = if n ≃ 0 then t

else (reset–input (car (inputs)) = t) ∧ (hold–input (car (inputs)) = t) ∧ bvp (pc-reg-input (car (inputs))) ∧ (length (pc-reg-input (car (inputs))) = 4) ∧ operating-inputs-p (cdr (inputs), n − 1) endif

Event: Enable operating-inputs-p; name this event ‘operating-inputs-p-off’.

Theorem: open-operating-inputs-p ((n ≃ 0) → (operating-inputs-p (inputs, n) = t)) ∧ ((n ≄ 0)

→ (operating-inputs-p (inputs, n)

= ((reset–input (car (inputs)) = t) ∧ (hold–input (car (inputs)) = t) ∧ bvp (pc-reg-input (car (inputs))) ∧ (length (pc-reg-input (car (inputs))) = 4) ∧ operating-inputs-p (cdr (inputs), n − 1))))

Theorem: operating-inputs-p-implies-run-inputs-p operating-inputs-p (inputs, n) → run-inputs-p (inputs, n)

Theorem: operating-inputs-p-plus operating-inputs-p (inputs, n + m) = (operating-inputs-p (inputs, n)

∧ operating-inputs-p (nthcdr (n, inputs), m))

Theorem: operating-inputs-p-1 (operating-inputs-p (inputs, n) ∧ (n ≄ 0)) → operating-inputs-p (inputs, 1)

Theorem: operating-inputs-p-implies-hold–input (operating-inputs-p (inputs, n) ∧ (n ≄ 0)) → (hold–input (car (inputs)) = t)

Definition: microcycles (state) = t fetch1 (caddadr (state),

read-mem (read-mem (caddddddddddar (state), caaar (state)),

caadr (state)),

cadar (state))

Definition: total-microcycles (state, inputs, n) = if n ≃ 0 then 0

else microcycles (state)

+ total-microcycles (run-fm9001 (state, inputs, microcycles (state)),

nthcdr (microcycles (state), inputs), n − 1) endif

Event: Enable total-microcycles; name this event ‘total-microcycles-off’.

Theorem: open-total-microcycles ((n ≃ 0) → (total-microcycles (state, inputs, n) = 0)) ∧ ((n ≄ 0)

→ (total-microcycles (state, inputs, n)

= (microcycles (state)

+ total-microcycles (run-fm9001 (state, inputs, microcycles (state)),

nthcdr (microcycles (state), inputs),

n − 1))))

Definition: macrocycle-invariant (state, pc) = (all-ramp-mem (4, caaar (state))

∧ memory-okp (4, 32, caaar (state)) ∧ (cadaar (state) = f) ∧ bvp (caddaar (state)) ∧ (length (caddaar (state)) = 32) ∧ bvp (cadddaar (state)) ∧ (length (cadddaar (state)) = 4) ∧ bvp (cadar (state)) ∧ (length (cadar (state)) = 4) ∧ (caddar (state)

= read-regs (caddddddddddar (state), caar (state))) ∧ bvp (cadddar (state)) ∧ (length (cadddar (state)) = 32) ∧ bvp (caddddar (state)) ∧ (length (caddddar (state)) = 32) ∧ bvp (cadddddar (state)) ∧ (length (cadddddar (state)) = 32) ∧ (caddddddar (state)

= read-regs (caddddddddddar (state), caar (state))) ∧ (cadddddddar (state) = t) ∧ boolp (caddddddddar (state)) ∧ (cadddddddddar (state) = t) ∧ bvp (caddddddddddar (state)) ∧ (length (caddddddddddar (state)) = 4) ∧ (caddddddddddar (state) = pc) ∧ (cadddddddddddar (state)

= cv fetch1 (cadddddadr (state), caddddddddddar (state), caddddar (state), cadar (state), caddddddddddar (state)))

∧ memory-okp (32, 32, caadr (state)) ∧ (cadadr (state) = 0) ∧ (cadddadr (state) ∈ N)

∧ boolp (cadddddadr (state)) ∧ bvp (caddddddadr (state)) ∧ (length (caddddddadr (state)) = 32) ∧ properp (cadddddddadr (state)) ∧ (length (cadddddddadr (state)) = 32))

Theorem: macrocycle-invariant==>chip-system-invariant$help macrocycle-invariant (list (list (list (regs-regs, regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)),

pc)

→ chip-system-invariant (list (list (list (regs-regs, regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)))

Theorem: macrocycle-invariant==>chip-system-invariant (fm9001-state-structure (state) ∧ macrocycle-invariant (state, pc)) → chip-system-invariant (state)

Definition: macrocycle-invariant* (state, pc) = macrocycle-invariant (state, pc)

Event: Enable macrocycle-invariant*; name this event ‘macrocycle-invariant*- off’.

Theorem: macrocycle-invariant*=macrocycle-invariant macrocycle-invariant* (cons (x, y), pc) = macrocycle-invariant (cons (x, y), pc)

Theorem: macrocycle-invariant-is-invariant$help (macrocycle-invariant (list (list (list (regs-regs,

regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address,

last-data)), pc)

∧ operating-inputs-p (inputs,

microcycles (list (list (list (regs-regs, regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)))))

→ macrocycle-invariant* (run-fm9001 (list (list (list (regs-regs, regs-we, regs-data, regs-address),

flags,

a-reg,

b-reg,

i-reg,

data-out,

addr-out,

last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)),

inputs, microcycles (list (list (list (regs-regs,

regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)))),

pc)

Theorem: macrocycle-invariant-is-invariant (fm9001-state-structure (state) ∧ macrocycle-invariant (state, pc) ∧ operating-inputs-p (inputs, microcycles (state))) → macrocycle-invariant (run-fm9001 (state, inputs, microcycles (state)), pc)

Definition: p-map-up (p-state) = list (car (regs (p-state)), flags (p-state))

Definition: mem-map-up (mem-state) = car (mem-state)

Definition: map-up (state) = list (p-map-up (car (state)), mem-map-up (cadr (state)))

Event: Enable map-up; name this event ‘map-up-off’.

Theorem: open-map-up map-up (cons (x, y)) = list (list (car (regs (car (cons (x, y)))), flags (car (cons (x, y)))),

caadr (cons (x, y)))

Definition: fm9001-step* (state, pc-reg) = fm9001-step (state, pc-reg)

Event: Enable fm9001-step*; name this event ‘fm9001-step*-off’.

Theorem: fm9001-step*-lemma (cons (x, y) = fm9001-step* (state, pc-reg)) = (cons (x, y) = fm9001-step (state, pc-reg))

Theorem: middle=high$help (macrocycle-invariant (list (list (list (regs-regs,

regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)),

pc-reg)

∧ operating-inputs-p (inputs,

microcycles (list (list (list (regs-regs, regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)))))

→ (map-up (run-fm9001 (list (list (list (regs-regs, regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)), inputs, microcycles (list (list (list (regs-regs,

regs-we, regs-data, regs-address),

flags, a-reg, b-reg, i-reg, data-out, addr-out, last-reset-, last-dtack-, last-hold-, pc-reg, cntl-state),

list (mem, cntl, clock, count, dtack, last-rw-, last-address, last-data)))))

= fm9001-step* (list (list (regs-regs, flags), mem), pc-reg))

Theorem: macrocycle-invariant==>pc-reg macrocycle-invariant (state, pc-reg) → (pc-reg (car (state)) = pc-reg)

Theorem: middle=high (fm9001-state-structure (state) ∧ macrocycle-invariant (state, pc) ∧ operating-inputs-p (inputs, microcycles (state))) → (map-up (run-fm9001 (state, inputs, microcycles (state)))

= fm9001-step (map-up (state), pc))

Theorem: fm9001-interpreter-correct (fm9001-state-structure (state) ∧ macrocycle-invariant (state, pc) ∧ operating-inputs-p (inputs,

total-microcycles (state, inputs, instructions)))

→ (map-up (run-fm9001 (state, inputs, total-microcycles (state, inputs, instructions)))

= fm9001-interpreter (map-up (state), pc, instructions))

Theorem: chip-system=fm9001-interpreter (chip-system& (netlist) ∧ fm9001-state-structure (state) ∧ macrocycle-invariant (state, pc) ∧ chip-system-operating-inputs-p (inputs,

total-microcycles (state, map-up-inputs (inputs), instructions))

∧ operating-inputs-p (map-up-inputs (inputs),

total-microcycles (state, map-up-inputs (inputs), instructions)))

→ (map-up (simulate-dual-eval-2 ('chip-system, inputs, state, netlist, total-microcycles (state,

map-up-inputs (inputs), instructions)))

= fm9001-interpreter (map-up (state), pc, instructions))

Theorem: fm9001=fm9001-interpreter fm9001 (state, n) = fm9001-interpreter (state, make-list (4, t), n)

Definition: map-down-relation (high-level-state, low-level-state) = ((regs (car (high-level-state)) = car (regs (car (low-level-state))))

∧ (flags (car (high-level-state)) = flags (car (low-level-state))) ∧ (cadr (high-level-state) = caadr (low-level-state)))

Event: Enable map-down-relation; name this event ‘map-down-relation-off’.

Definition: high-level-state-structure (state) = (properp (state)

∧ properp (car (state)) ∧ (length (car (state)) = 2) ∧ (length (state) = 2))

Event: Enable high-level-state-structure; name this event ‘high-level-state-structure-off’.

Theorem: map-down-relation-lemma (high-level-state-structure (high-level-state)

∧ map-down-relation (high-level-state, low-level-state)) → (map-up (low-level-state) = high-level-state)

Theorem: fm9001-interpreter-correct$map-down (high-level-state-structure (high-level-state) ∧ map-down-relation (high-level-state, low-level-state) ∧ fm9001-state-structure (low-level-state) ∧ macrocycle-invariant (low-level-state, pc) ∧ operating-inputs-p (inputs,

total-microcycles (low-level-state, inputs, n)))

→ (map-up (run-fm9001 (low-level-state, inputs, total-microcycles (low-level-state, inputs, n)))

= fm9001-interpreter (high-level-state, pc, n))

Definition: fm9001-machine-statep (p-state) = (properp (p-state)

∧ (length (p-state) = 2) ∧ all-ramp-mem (4, car (p-state)) ∧ memory-okp (4, 32, car (p-state)) ∧ bvp (cadr (p-state)) ∧ (length (cadr (p-state)) = 4))

Definition: fm9001-statep (state) = (properp (state)

∧ (length (state) = 2) ∧ fm9001-machine-statep (car (state)) ∧ memory-okp (32, 32, cadr (state)))

Definition: p-map-down (p-state) = list (list (car (p-state), f, make-list (32, f), make-list (4, t)),

cadr (p-state), read-mem (make-list (4, t), car (p-state)), make-list (32, f), make-list (32, f), make-list (32, f), read-mem (make-list (4, t), car (p-state)), t, t, t, make-list (4, t), cv fetch1 (t, list (t, t, t, t), make-list (32, f), list (t, f, f, f), make-list (4, t)))

Definition: mem-map-down (memory) = list (memory, 0, 0, 0, t, t, make-list (32, f), make-list (32, x))

Definition: map-down (state) = list (p-map-down (car (state)), mem-map-down (cadr (state)))

Theorem: map-up-inverts-map-down fm9001-statep (state) → (map-up (map-down (state)) = state)

Theorem: fm9001-statep-implies-fm9001-state-structure fm9001-statep (state) → fm9001-state-structure (map-down (state))

Theorem: fm9001-statep-implies-macrocycle-invariant-lemma1 (cv fetch1 (t, list (t, t, t, t), make-list (32, f), list (t, f, f, f), make-list (4, t)) = cv fetch1 (t, make-list (4, t), make-list (32, f), z, make-list (4, t))) = t

Theorem: fm9001-statep-implies-macrocycle-invariant fm9001-statep (state) → macrocycle-invariant (map-down (state), make-list (4, t))

Theorem: fm9001=chip-system-lemma1 nth (10, car (map-down (state))) = list (t, t, t, t)

Theorem: fm9001=chip-system (chip-system& (netlist) ∧ fm9001-statep (state) ∧ chip-system-operating-inputs-p (inputs,

total-microcycles (map-down (state), map-up-inputs (inputs), n))

∧ operating-inputs-p (map-up-inputs (inputs),

total-microcycles (map-down (state), map-up-inputs (inputs), n)))

→ (fm9001 (state, n)

= map-up (simulate-dual-eval-2 ('chip-system, inputs, map-down (state), netlist, total-microcycles (map-down (state),

map-up-inputs (inputs), n))))

Definition: no-holds-reset-or-test (i, c) = (chip-system-operating-inputs-p (i, c)

∧ operating-inputs-p (map-up-inputs (i), c))

Theorem: fm9001=chip-system-summary (fm9001-statep (s) ∧ no-holds-reset-or-test (i,

total-microcycles (map-down (s), map-up-inputs (i), n)))

→ (fm9001 (s, n)

= map-up (simulate-dual-eval-2 ('chip-system, i, map-down (s), chip-system$netlist, total-microcycles (map-down (s),

map-up-inputs (i),

n))))

Definition: b-knownp (x) = ((x = t) ∨ (x = f) ∨ (x = z))

Theorem: b-knownp-compound-recognizer b-knownp (x) = (truep (x) ∨ falsep (x) ∨ zp (x))

Event: Enable b-knownp; name this event ‘b-knownp-off’.

Event: Enable *1*b-knownp; name this event ‘g*1*b-knownp-off’.

Definition: b-approx (a1 , a2 ) = if b-knownp (a1 ) then a1 = a2

else t endif

Definition: v-approx (v1 , v2 ) = if listp (v1 )

then listp (v2 )

∧ b-approx (car (v1 ), car (v2 )) ∧ v-approx (cdr (v1 ), cdr (v2 ))

else v1 = v2 endif

Definition: v-knownp (x) = if listp (x) then b-knownp (car (x)) ∧ v-knownp (cdr (x))

else t endif

Theorem: v-knownp-implies-v-approx-is-equal ((x ≠ y) ∧ v-knownp (x)) → (¬ v-approx (x, y))

Event: Enable plus-add1; name this event ‘plus-add1-off’.

Definition: mem-width = 32

Definition: s-approx (s1 , s2 ) = if listp (s1 ) ∨ listp (s2 )

then if listp (s1 )

then if listp (s2 )

then s-approx (car (s1 ), car (s2 ))

∧ s-approx (cdr (s1 ), cdr (s2 )) else f endif

else f endif elseif (s1 = nil) ∨ (s2 = nil) then s1 = s2 elseif ramp (s1 ) ∨ ramp (s2 ) then if ramp (s1 )

then if ramp (s2 ) then v-approx (ram-guts (s1 ), ram-guts (s2 ))

else f endif else f endif

elseif romp (s1 ) ∨ romp (s2 ) then if romp (s1 )

then if romp (s2 ) then v-approx (rom-guts (s1 ), rom-guts (s2 ))

else f endif else f endif

elseif stubp (s1 ) ∨ stubp (s2 ) then if stubp (s1 )

then if stubp (s2 ) then v-approx (stub-guts (s1 ), stub-guts (s2 ))

else f endif else f endif

else b-approx (s1 , s2 ) endif

Theorem: s-approx-x-x s-approx (x, x)

Definition: good-s (s) = if listp (s) then good-s (car (s)) ∧ good-s (cdr (s))

elseif ramp (s) then (length (ram-guts (s)) = mem-width) ∧ properp (ram-guts (s)) elseif romp (s) then (length (rom-guts (s)) = mem-width) ∧ properp (rom-guts (s)) elseif stubp (s) then (length (stub-guts (s)) = mem-width) ∧ properp (stub-guts (s)) else t endif

Definition: s-knownp (s) = if listp (s) then s-knownp (car (s)) ∧ s-knownp (cdr (s))

elseif s = nil then t elseif ramp (s) then v-knownp (ram-guts (s)) elseif romp (s) then v-knownp (rom-guts (s)) elseif stubp (s) then v-knownp (stub-guts (s)) else b-knownp (s) endif

Theorem: s-knownp-implies-s-approx-is-equal (s-knownp (x) ∧ (x ≠ y)) → (¬ s-approx (x, y))

Event: Disable plus-add1; name this event ‘plus-add1-on’.

Definition: v-approx-alist (alist1 , alist2 ) = if listp (alist1 )

then listp (alist2 )

∧ (caar (alist1 ) = caar (alist2 ))

∧ b-approx (cdar (alist1 ), cdar (alist2 )) ∧ v-approx-alist (cdr (alist1 ), cdr (alist2 ))

else alist2 ≃ nil endif

Definition: s-approx-alist (alist1 , alist2 ) = if listp (alist1 )

then listp (alist2 )

∧ (caar (alist1 ) = caar (alist2 ))

∧ s-approx (cdar (alist1 ), cdar (alist2 )) ∧ s-approx-alist (cdr (alist1 ), cdr (alist2 ))

else alist2 ≃ nil endif

Definition: monotonicity-property (flag, fn, netlist, a1 , a2 , s1 , s2 ) = case on flag:

case = 0 then (v-approx (a1 , a2 ) ∧ s-approx (s1 , s2 ))

→ v-approx (dual-eval (0, fn, a1 , s1 , netlist),

dual-eval (0, fn, a2 , s2 , netlist))

case = 1 then (v-approx-alist (a1 , a2 )

∧ alistp (a1 ) ∧ alistp (a2 ) ∧ s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → v-approx-alist (dual-eval (1, fn, a1 , s1 , netlist),

dual-eval (1, fn, a2 , s2 , netlist))

case = 2 then (v-approx (a1 , a2 ) ∧ s-approx (s1 , s2 ))

→ s-approx (dual-eval (2, fn, a1 , s1 , netlist),

dual-eval (2, fn, a2 , s2 , netlist))

case = 3 then (v-approx-alist (a1 , a2 )

∧ alistp (a1 ) ∧ alistp (a2 ) ∧ s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → s-approx-alist (dual-eval (3, fn, a1 , s1 , netlist),

dual-eval (3, fn, a2 , s2 , netlist))

otherwise t endcase

Event: Enable monotonicity-property; name this event ‘monotonicity-property-off’.

Theorem: monotonicity-property-consequence-0 (monotonicity-property (0, fn, netlist, a1 , a2 , s1 , s2 ) ∧ v-approx (a1 , a2 ) ∧ s-approx (s1 , s2 )) → v-approx (dual-eval (0, fn, a1 , s1 , netlist), dual-eval (0, fn, a2 , s2 , netlist))

Theorem: monotonicity-property-consequence-1 (monotonicity-property (1, fn, netlist, a1 , a2 , s1 , s2 ) ∧ v-approx-alist (a1 , a2 ) ∧ alistp (a1 ) ∧ alistp (a2 )

∧ s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → v-approx-alist (dual-eval (1, fn, a1 , s1 , netlist),

dual-eval (1, fn, a2 , s2 , netlist))

Theorem: monotonicity-property-consequence-2 (monotonicity-property (2, fn, netlist, a1 , a2 , s1 , s2 ) ∧ v-approx (a1 , a2 ) ∧ s-approx (s1 , s2 )) → s-approx (dual-eval (2, fn, a1 , s1 , netlist), dual-eval (2, fn, a2 , s2 , netlist))

Theorem: monotonicity-property-consequence-3 (monotonicity-property (3, fn, netlist, a1 , a2 , s1 , s2 ) ∧ v-approx-alist (a1 , a2 ) ∧ alistp (a1 ) ∧ alistp (a2 ) ∧ s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → s-approx-alist (dual-eval (3, fn, a1 , s1 , netlist),

dual-eval (3, fn, a2 , s2 , netlist))

Theorem: monotonicity-property-opener-0 monotonicity-property (0, fn, netlist, a1 , a2 , s1 , s2 ) ↔ ((v-approx (a1 , a2 ) ∧ s-approx (s1 , s2 ))

→ v-approx (dual-eval (0, fn, a1 , s1 , netlist), dual-eval (0, fn, a2 , s2 , netlist)))

Theorem: monotonicity-property-opener-1 monotonicity-property (1, fn, netlist, a1 , a2 , s1 , s2 ) ↔ ((v-approx-alist (a1 , a2 )

∧ alistp (a1 ) ∧ alistp (a2 ) ∧ s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → v-approx-alist (dual-eval (1, fn, a1 , s1 , netlist),

dual-eval (1, fn, a2 , s2 , netlist)))

Theorem: monotonicity-property-opener-2 monotonicity-property (2, fn, netlist, a1 , a2 , s1 , s2 ) ↔ ((v-approx (a1 , a2 ) ∧ s-approx (s1 , s2 ))

→ s-approx (dual-eval (2, fn, a1 , s1 , netlist), dual-eval (2, fn, a2 , s2 , netlist)))

Theorem: monotonicity-property-opener-3 monotonicity-property (3, fn, netlist, a1 , a2 , s1 , s2 ) ↔ ((v-approx-alist (a1 , a2 )

∧ alistp (a1 ) ∧ alistp (a2 ) ∧ s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → s-approx-alist (dual-eval (3, fn, a1 , s1 , netlist),

dual-eval (3, fn, a2 , s2 , netlist)))

Event: Enable monotonicity-property-opener-0; name this event ‘monotonicityproperty-opener-0-off’.

Event: Enable monotonicity-property-opener-1; name this event ‘monotonicityproperty-opener-1-off’.

Event: Enable monotonicity-property-opener-2; name this event ‘monotonicityproperty-opener-2-off’.

Event: Enable monotonicity-property-opener-3; name this event ‘monotonicityproperty-opener-3-off’.

Theorem: f-buf-monotone b-approx (a1 , a2 ) → b-approx (f-buf (a1 ), f-buf (a2 ))

Theorem: f-and-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-and (a1 , b1 ), f-and (a2 , b2 ))

Theorem: f-and3-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 )) → b-approx (f-and3 (a1 , b1 , c1 ), f-and3 (a2 , b2 , c2 ))

Theorem: f-and4-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 )) → b-approx (f-and4 (a1 , b1 , c1 , d1 ), f-and4 (a2 , b2 , c2 , d2 ))

Theorem: f-not-monotone b-approx (a1 , a2 ) → b-approx (f-not (a1 ), f-not (a2 ))

Theorem: f-nand-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-nand (a1 , b1 ), f-nand (a2 , b2 ))

Theorem: f-nand3-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 )) → b-approx (f-nand3 (a1 , b1 , c1 ), f-nand3 (a2 , b2 , c2 ))

Theorem: f-nand4-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 )) → b-approx (f-nand4 (a1 , b1 , c1 , d1 ), f-nand4 (a2 , b2 , c2 , d2 ))

Theorem: f-nand5-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 ) ∧ b-approx (e1 , e2 )) → b-approx (f-nand5 (a1 , b1 , c1 , d1 , e1 ), f-nand5 (a2 , b2 , c2 , d2 , e2 ))

Theorem: f-nand6-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 ) ∧ b-approx (e1 , e2 ) ∧ b-approx (g1 , g2 )) → b-approx (f-nand6 (a1 , b1 , c1 , d1 , e1 , g1 ), f-nand6 (a2 , b2 , c2 , d2 , e2 , g2 ))

Theorem: f-nand8-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 ) ∧ b-approx (e1 , e2 ) ∧ b-approx (g1 , g2 ) ∧ b-approx (h1 , h2 ) ∧ b-approx (i1 , i2 )) → b-approx (f-nand8 (a1 , b1 , c1 , d1 , e1 , g1 , h1 , i1 ),

f-nand8 (a2 , b2 , c2 , d2 , e2 , g2 , h2 , i2 ))

Theorem: f-or-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-or (a1 , b1 ), f-or (a2 , b2 ))

Theorem: f-or3-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 )) → b-approx (f-or3 (a1 , b1 , c1 ), f-or3 (a2 , b2 , c2 ))

Theorem: f-or4-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 )) → b-approx (f-or4 (a1 , b1 , c1 , d1 ), f-or4 (a2 , b2 , c2 , d2 ))

Theorem: f-nor-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-nor (a1 , b1 ), f-nor (a2 , b2 ))

Theorem: f-nor3-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 )) → b-approx (f-nor3 (a1 , b1 , c1 ), f-nor3 (a2 , b2 , c2 ))

Theorem: f-nor4-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 )) → b-approx (f-nor4 (a1 , b1 , c1 , d1 ), f-nor4 (a2 , b2 , c2 , d2 ))

Theorem: f-nor5-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 ) ∧ b-approx (e1 , e2 )) → b-approx (f-nor5 (a1 , b1 , c1 , d1 , e1 ), f-nor5 (a2 , b2 , c2 , d2 , e2 ))

Theorem: f-nor6-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 ) ∧ b-approx (e1 , e2 ) ∧ b-approx (g1 , g2 )) → b-approx (f-nor6 (a1 , b1 , c1 , d1 , e1 , g1 ), f-nor6 (a2 , b2 , c2 , d2 , e2 , g2 ))

Theorem: f-nor8-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 ) ∧ b-approx (d1 , d2 ) ∧ b-approx (e1 , e2 ) ∧ b-approx (g1 , g2 ) ∧ b-approx (h1 , h2 ) ∧ b-approx (i1 , i2 )) → b-approx (f-nor8 (a1 , b1 , c1 , d1 , e1 , g1 , h1 , i1 ),

f-nor8 (a2 , b2 , c2 , d2 , e2 , g2 , h2 , i2 ))

Theorem: f-xor-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-xor (a1 , b1 ), f-xor (a2 , b2 ))

Theorem: f-equv-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-equv (a1 , b1 ), f-equv (a2 , b2 ))

Theorem: f-xor3-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 )) → b-approx (f-xor3 (a1 , b1 , c1 ), f-xor3 (a2 , b2 , c2 ))

Theorem: f-equv3-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 ) ∧ b-approx (c1 , c2 )) → b-approx (f-equv3 (a1 , b1 , c1 ), f-equv3 (a2 , b2 , c2 ))

Theorem: f-if-monotone (b-approx (c1 , c2 ) ∧ b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (f-if (c1 , a1 , b1 ), f-if (c2 , a2 , b2 ))

Theorem: ft-buf-monotone (b-approx (c1 , c2 ) ∧ b-approx (a1 , a2 )) → b-approx (ft-buf (c1 , a1 ), ft-buf (c2 , a2 ))

Theorem: ft-wire-monotone (b-approx (a1 , a2 ) ∧ b-approx (b1 , b2 )) → b-approx (ft-wire (a1 , b1 ), ft-wire (a2 , b2 ))

Theorem: f-pullup-monotone b-approx (a1 , a2 ) → b-approx (f-pullup (a1 ), f-pullup (a2 ))

Event: Enable f-buf; name this event ‘f-buf-off’.

Event: Enable f-and; name this event ‘f-and-off’.

Event: Enable f-and3; name this event ‘f-and3-off’.

Event: Enable f-and4; name this event ‘f-and4-off’.

Event: Enable f-not; name this event ‘f-not-off’.

Event: Enable f-nand; name this event ‘f-nand-off’.

Event: Enable f-nand3; name this event ‘f-nand3-off’.

Event: Enable f-nand4; name this event ‘f-nand4-off’.

Event: Enable f-nand5; name this event ‘f-nand5-off’. Event: Enable f-nand6; name this event ‘f-nand6-off’. Event: Enable f-nand8; name this event ‘f-nand8-off’. Event: Enable f-or; name this event ‘f-or-off’. Event: Enable f-or3; name this event ‘f-or3-off’. Event: Enable f-or4; name this event ‘f-or4-off’. Event: Enable f-nor; name this event ‘f-nor-off’. Event: Enable f-nor3; name this event ‘f-nor3-off’. Event: Enable f-nor4; name this event ‘f-nor4-off’. Event: Enable f-nor5; name this event ‘f-nor5-off’. Event: Enable f-nor6; name this event ‘f-nor6-off’. Event: Enable f-nor8; name this event ‘f-nor8-off’. Event: Enable f-xor; name this event ‘f-xor-off’. Event: Enable f-xor3; name this event ‘f-xor3-off’. Event: Enable f-equv; name this event ‘f-equv-off’. Event: Enable f-equv3; name this event ‘f-equv3-off’. Event: Enable f-if; name this event ‘f-if-off’. Event: Enable ft-buf; name this event ‘ft-buf-off’.

Event: Enable ft-wire; name this event ‘ft-wire-off’.

Event: Enable f-pullup; name this event ‘f-pullup-off’.

Event: Let us define the theory monotonicity-lemmas to consist of the following events: f-buf-monotone, f-and-monotone, f-and3-monotone, f-and4-monotone, fnot-monotone, f-nand-monotone, f-nand3-monotone, f-nand4-monotone, f-nand5-monotone, f-nand6-monotone, f-nand8-monotone, f-or-monotone, f-or3-monotone, f-or4-monotone, f-nor-monotone, f-nor3-monotone, f-nor4-monotone, f-nor5-monotone, f-nor6-monotone, f-nor8-monotone, f-xor-monotone, f-xor3-monotone, f-equv-monotone, f-equv3-monotone, f-if-monotone, ft-buf-monotone, ft-wire-monotone, f-pullup-monotone.

Event: Enable b-approx; name this event ‘b-approx-off’.

Theorem: dual-eval-0-primp primp (name) → (dual-eval (0, name, args, state, netlist)

= dual-apply-value (name, args, state))

Theorem: dual-eval-2-primp primp (name) → (dual-eval (2, name, args, state, netlist)

= dual-apply-state (name, args, state))

Theorem: s-approx-implies-b-approx s-approx (x, y) → b-approx (x, y)

Theorem: f-buf-type-set truep (f-buf (x)) ∨ falsep (f-buf (x)) ∨ xp (f-buf (x))

Theorem: fourp-f-buf fourp (f-buf (x))

Theorem: fourp-f-if fourp (f-if (x, y, z))

Theorem: fourp-implies-s-approx-is-b-approx (fourp (x) ∧ fourp (y) ∧ b-approx (x, y)) → (s-approx (x, y) = t)

Theorem: dual-eval-ao2-value dual-eval (0, 'ao2, args, state, netlist) = list (f-nor (f-and (car (args), cadr (args)),

f-and (caddr (args), cadddr (args))))

Theorem: dual-eval-ao2-state dual-eval (2, 'ao2, args, state, netlist) = 0

Theorem: ao2-monotone monotonicity-property (0, 'ao2, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ao2, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ao4-value dual-eval (0, 'ao4, args, state, netlist) = list (f-nand (f-or (car (args), cadr (args)), f-or (caddr (args), cadddr (args))))

Theorem: dual-eval-ao4-state dual-eval (2, 'ao4, args, state, netlist) = 0

Theorem: ao4-monotone monotonicity-property (0, 'ao4, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ao4, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ao6-value dual-eval (0, 'ao6, args, state, netlist) = list (f-nor (f-and (car (args), cadr (args)), caddr (args)))

Theorem: dual-eval-ao6-state dual-eval (2, 'ao6, args, state, netlist) = 0

Theorem: ao6-monotone monotonicity-property (0, 'ao6, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ao6, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ao7-value dual-eval (0, 'ao7, args, state, netlist) = list (f-nand (f-or (car (args), cadr (args)), caddr (args)))

Theorem: dual-eval-ao7-state dual-eval (2, 'ao7, args, state, netlist) = 0

Theorem: ao7-monotone monotonicity-property (0, 'ao7, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ao7, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-and-value dual-eval (0, 'b-and, args, state, netlist) = list (f-and (car (args), cadr (args)))

Theorem: dual-eval-b-and-state dual-eval (2, 'b-and, args, state, netlist) = 0 Theorem: b-and-monotone monotonicity-property (0, 'b-and, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-and, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-and3-value dual-eval (0, 'b-and3, args, state, netlist) = list (f-and3 (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-and3-state dual-eval (2, 'b-and3, args, state, netlist) = 0

Theorem: b-and3-monotone monotonicity-property (0, 'b-and3, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-and3, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-and4-value dual-eval (0, 'b-and4, args, state, netlist) = list (f-and4 (car (args), cadr (args), caddr (args), cadddr (args)))

Theorem: dual-eval-b-and4-state dual-eval (2, 'b-and4, args, state, netlist) = 0

Theorem: b-and4-monotone monotonicity-property (0, 'b-and4, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-and4, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-equv-value dual-eval (0, 'b-equv, args, state, netlist) = list (f-equv (car (args), cadr (args)))

Theorem: dual-eval-b-equv-state dual-eval (2, 'b-equv, args, state, netlist) = 0

Theorem: b-equv-monotone monotonicity-property (0, 'b-equv, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-equv, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-equv3-value dual-eval (0, 'b-equv3, args, state, netlist) = list (f-equv3 (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-equv3-state dual-eval (2, 'b-equv3, args, state, netlist) = 0

Theorem: b-equv3-monotone monotonicity-property (0, 'b-equv3, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-equv3, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-if-value dual-eval (0, 'b-if, args, state, netlist) = list (f-if (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-if-state dual-eval (2, 'b-if, args, state, netlist) = 0

Theorem: b-if-monotone monotonicity-property (0, 'b-if, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-if, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nand-value dual-eval (0, 'b-nand, args, state, netlist) = list (f-nand (car (args), cadr (args)))

Theorem: dual-eval-b-nand-state dual-eval (2, 'b-nand, args, state, netlist) = 0

Theorem: b-nand-monotone monotonicity-property (0, 'b-nand, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nand, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nand3-value dual-eval (0, 'b-nand3, args, state, netlist) = list (f-nand3 (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-nand3-state dual-eval (2, 'b-nand3, args, state, netlist) = 0

Theorem: b-nand3-monotone monotonicity-property (0, 'b-nand3, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nand3, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nand4-value dual-eval (0, 'b-nand4, args, state, netlist) = list (f-nand4 (car (args), cadr (args), caddr (args), cadddr (args)))

Theorem: dual-eval-b-nand4-state dual-eval (2, 'b-nand4, args, state, netlist) = 0

Theorem: b-nand4-monotone monotonicity-property (0, 'b-nand4, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nand4, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nand5-value dual-eval (0, 'b-nand5, args, state, netlist) = list (f-nand5 (car (args),

cadr (args), caddr (args), cadddr (args), caddddr (args)))

Theorem: dual-eval-b-nand5-state dual-eval (2, 'b-nand5, args, state, netlist) = 0

Theorem: b-nand5-monotone monotonicity-property (0, 'b-nand5, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nand5, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nand6-value dual-eval (0, 'b-nand6, args, state, netlist) = list (f-nand6 (car (args),

cadr (args), caddr (args), cadddr (args), caddddr (args), cadddddr (args)))

Theorem: dual-eval-b-nand6-state dual-eval (2, 'b-nand6, args, state, netlist) = 0

Theorem: b-nand6-monotone monotonicity-property (0, 'b-nand6, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nand6, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nand8-value dual-eval (0, 'b-nand8, args, state, netlist) = list (f-nand8 (car (args),

cadr (args), caddr (args), cadddr (args), caddddr (args), cadddddr (args), caddddddr (args), cadddddddr (args)))

Theorem: dual-eval-b-nand8-state dual-eval (2, 'b-nand8, args, state, netlist) = 0 Theorem: b-nand8-monotone monotonicity-property (0, 'b-nand8, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nand8, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nbuf-value dual-eval (0, 'b-nbuf, args, state, netlist) = list (f-not (car (args)), f-buf (car (args)))

Theorem: dual-eval-b-nbuf-state dual-eval (2, 'b-nbuf, args, state, netlist) = 0

Theorem: b-nbuf-monotone monotonicity-property (0, 'b-nbuf, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nbuf, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nor-value dual-eval (0, 'b-nor, args, state, netlist) = list (f-nor (car (args), cadr (args)))

Theorem: dual-eval-b-nor-state dual-eval (2, 'b-nor, args, state, netlist) = 0

Theorem: b-nor-monotone monotonicity-property (0, 'b-nor, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nor, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nor3-value dual-eval (0, 'b-nor3, args, state, netlist) = list (f-nor3 (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-nor3-state dual-eval (2, 'b-nor3, args, state, netlist) = 0

Theorem: b-nor3-monotone monotonicity-property (0, 'b-nor3, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nor3, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nor4-value dual-eval (0, 'b-nor4, args, state, netlist) = list (f-nor4 (car (args), cadr (args), caddr (args), cadddr (args)))

Theorem: dual-eval-b-nor4-state dual-eval (2, 'b-nor4, args, state, netlist) = 0

Theorem: b-nor4-monotone monotonicity-property (0, 'b-nor4, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nor4, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nor5-value dual-eval (0, 'b-nor5, args, state, netlist) = list (f-nor5 (car (args),

cadr (args), caddr (args), cadddr (args), caddddr (args)))

Theorem: dual-eval-b-nor5-state dual-eval (2, 'b-nor5, args, state, netlist) = 0

Theorem: b-nor5-monotone monotonicity-property (0, 'b-nor5, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nor5, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nor6-value dual-eval (0, 'b-nor6, args, state, netlist) = list (f-nor6 (car (args),

cadr (args), caddr (args), cadddr (args), caddddr (args), cadddddr (args)))

Theorem: dual-eval-b-nor6-state dual-eval (2, 'b-nor6, args, state, netlist) = 0

Theorem: b-nor6-monotone monotonicity-property (0, 'b-nor6, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nor6, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-nor8-value dual-eval (0, 'b-nor8, args, state, netlist) = list (f-nor8 (car (args),

cadr (args), caddr (args), cadddr (args), caddddr (args), cadddddr (args), caddddddr (args), cadddddddr (args)))

Theorem: dual-eval-b-nor8-state dual-eval (2, 'b-nor8, args, state, netlist) = 0 Theorem: b-nor8-monotone monotonicity-property (0, 'b-nor8, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-nor8, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-not-value dual-eval (0, 'b-not, args, state, netlist) = list (f-not (car (args)))

Theorem: dual-eval-b-not-state dual-eval (2, 'b-not, args, state, netlist) = 0

Theorem: b-not-monotone monotonicity-property (0, 'b-not, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-not, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-not-b4ip-value dual-eval (0, 'b-not-b4ip, args, state, netlist) = list (f-not (car (args)))

Theorem: dual-eval-b-not-b4ip-state dual-eval (2, 'b-not-b4ip, args, state, netlist) = 0

Theorem: b-not-b4ip-monotone monotonicity-property (0, 'b-not-b4ip, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-not-b4ip, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-not-ivap-value dual-eval (0, 'b-not-ivap, args, state, netlist) = list (f-not (car (args)))

Theorem: dual-eval-b-not-ivap-state dual-eval (2, 'b-not-ivap, args, state, netlist) = 0

Theorem: b-not-ivap-monotone monotonicity-property (0, 'b-not-ivap, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-not-ivap, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-or-value dual-eval (0, 'b-or, args, state, netlist) = list (f-or (car (args), cadr (args)))

Theorem: dual-eval-b-or-state dual-eval (2, 'b-or, args, state, netlist) = 0

Theorem: b-or-monotone monotonicity-property (0, 'b-or, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-or, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-or3-value dual-eval (0, 'b-or3, args, state, netlist) = list (f-or3 (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-or3-state dual-eval (2, 'b-or3, args, state, netlist) = 0

Theorem: b-or3-monotone monotonicity-property (0, 'b-or3, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-or3, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-or4-value dual-eval (0, 'b-or4, args, state, netlist) = list (f-or4 (car (args), cadr (args), caddr (args), cadddr (args)))

Theorem: dual-eval-b-or4-state dual-eval (2, 'b-or4, args, state, netlist) = 0

Theorem: b-or4-monotone monotonicity-property (0, 'b-or4, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-or4, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-xor-value dual-eval (0, 'b-xor, args, state, netlist) = list (f-xor (car (args), cadr (args)))

Theorem: dual-eval-b-xor-state dual-eval (2, 'b-xor, args, state, netlist) = 0

Theorem: b-xor-monotone monotonicity-property (0, 'b-xor, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-xor, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-b-xor3-value dual-eval (0, 'b-xor3, args, state, netlist) = list (f-xor3 (car (args), cadr (args), caddr (args)))

Theorem: dual-eval-b-xor3-state dual-eval (2, 'b-xor3, args, state, netlist) = 0

Theorem: b-xor3-monotone monotonicity-property (0, 'b-xor3, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'b-xor3, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-del2-value dual-eval (0, 'del2, args, state, netlist) = list (f-buf (car (args)))

Theorem: dual-eval-del2-state dual-eval (2, 'del2, args, state, netlist) = 0 Theorem: del2-monotone monotonicity-property (0, 'del2, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'del2, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-del4-value dual-eval (0, 'del4, args, state, netlist) = list (f-buf (car (args)))

Theorem: dual-eval-del4-state dual-eval (2, 'del4, args, state, netlist) = 0

Theorem: del4-monotone monotonicity-property (0, 'del4, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'del4, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-del10-value dual-eval (0, 'del10, args, state, netlist) = list (f-buf (car (args)))

Theorem: dual-eval-del10-state dual-eval (2, 'del10, args, state, netlist) = 0

Theorem: del10-monotone monotonicity-property (0, 'del10, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'del10, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-procmon-value dual-eval (0, 'procmon, args, state, netlist) = list (f-if (caddr (args),

f-if (cadr (args), f-if (car (args), f, f), car (args)), cadddr (args)))

Theorem: dual-eval-procmon-state dual-eval (2, 'procmon, args, state, netlist) = 0

Theorem: procmon-monotone monotonicity-property (0, 'procmon, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'procmon, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-fd1-value dual-eval (0, 'fd1, args, state, netlist) = list (f-buf (state), f-not (state))

Theorem: dual-eval-fd1-state dual-eval (2, 'fd1, args, state, netlist) = f-buf (car (args))

Theorem: fd1-monotone monotonicity-property (0, 'fd1, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'fd1, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-fd1s-value dual-eval (0, 'fd1s, args, state, netlist) = list (f-buf (state), f-not (state))

Theorem: dual-eval-fd1s-state dual-eval (2, 'fd1s, args, state, netlist) = f-if (cadddr (args), caddr (args), car (args))

Theorem: fd1s-monotone monotonicity-property (0, 'fd1s, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'fd1s, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-fd1sp-value dual-eval (0, 'fd1sp, args, state, netlist) = list (f-buf (state), f-not (state))

Theorem: dual-eval-fd1sp-state dual-eval (2, 'fd1sp, args, state, netlist) = f-if (cadddr (args), caddr (args), car (args))

Theorem: fd1sp-monotone monotonicity-property (0, 'fd1sp, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'fd1sp, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-fd1slp-value dual-eval (0, 'fd1slp, args, state, netlist) = list (f-buf (state), f-not (state))

Theorem: dual-eval-fd1slp-state dual-eval (2, 'fd1slp, args, state, netlist) = f-if (caddddr (args), cadddr (args), f-if (caddr (args), car (args), state))

Theorem: fd1slp-monotone monotonicity-property (0, 'fd1slp, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'fd1slp, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-id-value dual-eval (0, 'id, args, state, netlist) = list (car (args))

Theorem: dual-eval-id-state dual-eval (2, 'id, args, state, netlist) = 0

Theorem: id-monotone monotonicity-property (0, 'id, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'id, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ram-enable-circuit-value dual-eval (0, 'ram-enable-circuit, args, state, netlist) = list (f-nand (caddr (args), cadddr (args)))

Theorem: dual-eval-ram-enable-circuit-state dual-eval (2, 'ram-enable-circuit, args, state, netlist) = 0

Theorem: ram-enable-circuit-monotone monotonicity-property (0, 'ram-enable-circuit, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ram-enable-circuit, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-t-buf-value dual-eval (0, 't-buf, args, state, netlist) = list (ft-buf (car (args), cadr (args)))

Theorem: dual-eval-t-buf-state dual-eval (2, 't-buf, args, state, netlist) = 0

Theorem: t-buf-monotone monotonicity-property (0, 't-buf, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 't-buf, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-t-wire-value dual-eval (0, 't-wire, args, state, netlist) = list (ft-wire (car (args), cadr (args)))

Theorem: dual-eval-t-wire-state dual-eval (2, 't-wire, args, state, netlist) = 0

Theorem: t-wire-monotone monotonicity-property (0, 't-wire, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 't-wire, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-pullup-value dual-eval (0, 'pullup, args, state, netlist) = list (f-pullup (car (args)))

Theorem: dual-eval-pullup-state dual-eval (2, 'pullup, args, state, netlist) = 0

Theorem: pullup-monotone monotonicity-property (0, 'pullup, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'pullup, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-bidirect-value dual-eval (0, 'ttl-bidirect, args, state, netlist) = list (ft-buf (f-not (caddr (args)), cadr (args)),

f-buf (ft-wire (car (args), ft-buf (f-not (caddr (args)), cadr (args)))), f-nand (ft-wire (car (args), ft-buf (f-not (caddr (args)), cadr (args))),

cadddr (args)))

Theorem: dual-eval-ttl-bidirect-state dual-eval (2, 'ttl-bidirect, args, state, netlist) = 0

Theorem: ttl-bidirect-monotone monotonicity-property (0, 'ttl-bidirect, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ttl-bidirect, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-clk-input-value dual-eval (0, 'ttl-clk-input, args, state, netlist) = list (f-buf (car (args)), f-nand (car (args), cadr (args)))

Theorem: dual-eval-ttl-clk-input-state dual-eval (2, 'ttl-clk-input, args, state, netlist) = 0

Theorem: ttl-clk-input-monotone monotonicity-property (0, 'ttl-clk-input, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ttl-clk-input, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-input-value dual-eval (0, 'ttl-input, args, state, netlist) = list (f-buf (car (args)), f-nand (car (args), cadr (args)))

Theorem: dual-eval-ttl-input-state dual-eval (2, 'ttl-input, args, state, netlist) = 0

Theorem: ttl-input-monotone monotonicity-property (0, 'ttl-input, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ttl-input, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-output-value dual-eval (0, 'ttl-output, args, state, netlist) = list (f-buf (car (args)))

Theorem: dual-eval-ttl-output-state dual-eval (2, 'ttl-output, args, state, netlist) = 0

Theorem: ttl-output-monotone monotonicity-property (0, 'ttl-output, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ttl-output, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-output-parametric-value dual-eval (0, 'ttl-output-parametric, args, state, netlist) = list (f-buf (car (args)))

Theorem: dual-eval-ttl-output-parametric-state dual-eval (2, 'ttl-output-parametric, args, state, netlist) = 0 Theorem: ttl-output-parametric-monotone monotonicity-property (0, 'ttl-output-parametric, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2,

                       'ttl-output-parametric,

netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-output-fast-value dual-eval (0, 'ttl-output-fast, args, state, netlist) = list (f-buf (car (args)))

Theorem: dual-eval-ttl-output-fast-state dual-eval (2, 'ttl-output-fast, args, state, netlist) = 0

Theorem: ttl-output-fast-monotone monotonicity-property (0, 'ttl-output-fast, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ttl-output-fast, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-tri-output-value dual-eval (0, 'ttl-tri-output, args, state, netlist) = list (ft-buf (f-not (cadr (args)), car (args)))

Theorem: dual-eval-ttl-tri-output-state dual-eval (2, 'ttl-tri-output, args, state, netlist) = 0

Theorem: ttl-tri-output-monotone monotonicity-property (0, 'ttl-tri-output, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'ttl-tri-output, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-ttl-tri-output-fast-value dual-eval (0, 'ttl-tri-output-fast, args, state, netlist) = list (ft-buf (f-not (cadr (args)), car (args)))

Theorem: dual-eval-ttl-tri-output-fast-state dual-eval (2, 'ttl-tri-output-fast, args, state, netlist) = 0

Theorem: ttl-tri-output-fast-monotone monotonicity-property (0, 'ttl-tri-output-fast, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2,

                       'ttl-tri-output-fast,

netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-vdd-value dual-eval (0, 'vdd, args, state, netlist) = list (t)

Theorem: dual-eval-vdd-state dual-eval (2, 'vdd, args, state, netlist) = 0

Theorem: vdd-monotone monotonicity-property (0, 'vdd, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'vdd, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-vdd-parametric-value dual-eval (0, 'vdd-parametric, args, state, netlist) = list (t)

Theorem: dual-eval-vdd-parametric-state dual-eval (2, 'vdd-parametric, args, state, netlist) = 0

Theorem: vdd-parametric-monotone monotonicity-property (0, 'vdd-parametric, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'vdd-parametric, netlist, a1 , a2 , s1 , s2 )

Theorem: dual-eval-vss-value dual-eval (0, 'vss, args, state, netlist) = list (f)

Theorem: dual-eval-vss-state dual-eval (2, 'vss, args, state, netlist) = 0

Theorem: vss-monotone monotonicity-property (0, 'vss, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (2, 'vss, netlist, a1 , a2 , s1 , s2 )

Event: Let us define the theory primitives-monotone to consist of the following events: ao2-monotone, ao4-monotone, ao6-monotone, ao7-monotone, b-and-monotone, b-and3-monotone, b-and4-monotone, b-equv-monotone, b-equv3-monotone, b-if-monotone, b-nand-monotone, b-nand3-monotone, b-nand4-monotone, b-nand5-monotone, b-nand6-monotone, b-nand8-monotone, b-nbuf-monotone, b-nor-monotone, b-nor3-monotone, b-nor4-monotone, b-nor5-monotone, b-nor6-monotone, b-nor8-monotone, b-not-monotone, b-not-b4ip-monotone, b-not-ivap-monotone, b-or-monotone, b-or3-monotone, b-or4-monotone, b-xor-monotone, b-xor3-monotone, del2-monotone, del4-monotone, del10-monotone, procmon-monotone, fd1-monotone, fd1s-monotone, fd1sp-monotone, fd1slp-monotone, id-monotone, ram-enable-circuit-monotone, t-buf-monotone, t-wire-monotone, pullup-monotone, ttl-bidirect-monotone, ttl-clk-input-monotone, ttl-input-monotone, ttl-output-monotone, ttloutput-parametric-monotone, ttl-output-fast-monotone, ttl-tri-output-monotone, ttl-tri-output-fast-monotone, vdd-monotone, vdd-parametric-monotone, vss-monotone.

Theorem: bvp-rev1 (bvp (x) ∧ bvp (acc)) → bvp (rev1 (x, acc))

Theorem: bvp-reverse bvp (x) → bvp (reverse (x))

Theorem: v-approx-bvp bvp (x) → (v-approx (x, y) = (x = y))

Definition: read-mem1-monotone-induction (v-addr, mem1 , mem2 ) = if stubp (mem1 )

∨ stubp (mem2 ) ∨ (v-addr ≃ nil) ∨ (mem1 ≃ nil) ∨ (mem2 ≃ nil) then t

elseif car (v-addr)

then read-mem1-monotone-induction (cdr (v-addr), cdr (mem1 ), cdr (mem2 )) else read-mem1-monotone-induction (cdr (v-addr),

car (mem1 ),

car (mem2 )) endif

Theorem: read-mem1-monotone (bvp (v-addr) ∧ s-approx (mem1 , mem2 )) → v-approx (read-mem1 (v-addr, mem1 ), read-mem1 (v-addr, mem2 ))

Theorem: bvp-implies-v-knownp bvp (x) → v-knownp (x)

Theorem: v-approx-x-x v-approx (x, x)

Theorem: v-approx-implies-b-approx-nth ((nth (n, x) = c) ∧ (nth (n, y) ≠ c) ∧ b-knownp (c)) → (¬ v-approx (x, y))

Event: Disable *1*b-knownp; name this event ‘g*1*b-knownp-on’.

Theorem: v-approx-implies-subranges-equal (v-approx (x, y) ∧ bvp (subrange (x, i, j ))) → (subrange (x, i, j ) = subrange (y, i, j ))

Theorem: v-approx-bvp-subrange (v-approx (a1 , a2 ) ∧ bvp (subrange (a1 , i, j ))) → bvp (subrange (a2 , i, j ))

Theorem: v-approx-make-list-x ((length (y) = bits) ∧ properp (y)) → v-approx (make-list (bits, x), y)

Theorem: read-mem-monotone (bvp (v-addr) ∧ s-approx (mem1 , mem2 )) → v-approx (read-mem (v-addr, mem1 ), read-mem (v-addr, mem2 ))

Theorem: equal-length-read-mem1 s-approx (s1 , s2 ) → ((length (read-mem1 (a, s2 )) = length (read-mem1 (a, s1 ))) = t)

Theorem: equal-length-read-mem s-approx (s1 , s2 ) → ((length (read-mem (a, s2 )) = length (read-mem (a, s1 ))) = t)

Theorem: s-approx-implies-properp-read-mem1 (s-approx (s1 , s2 ) ∧ properp (read-mem1 (a, s1 ))) → properp (read-mem1 (a, s2 ))

Theorem: s-approx-implies-properp-read-mem (s-approx (s1 , s2 ) ∧ properp (read-mem (a, s1 ))) → properp (read-mem (a, s2 ))

Theorem: dual-port-ram-value-monotone ((address-lines ∈ N) ∧ s-approx (s1 , s2 ) ∧ v-approx (a1 , a2 )) → v-approx (dual-port-ram-value (bits, address-lines, a1 , s1 ),

dual-port-ram-value (bits, address-lines, a2 , s2 ))

Theorem: eval$-append (litatom (x) ∧ (x ∈ lst)) → (eval$ (t, x, append (pairlist (lst, y), z)) = eval$ (t, x, pairlist (lst, y)))

Theorem: eval$-pairlist-cons litatom (x) → (eval$ (t, x, pairlist (cons (c, lst), y))

= if x = c then car (y) else eval$ (t, x, pairlist (lst, cdr (y))) endif)

Theorem: eval$-append-2 (litatom (x) ∧ (x ∉ lst)) → (eval$ (t, x, append (pairlist (lst, y), z)) = eval$ (t, x, z))

Theorem: dual-apply-value-dp-ram-16x32-lemma-1 dual-apply-value ('dp-ram-16x32, a, s) = eval$ (t,

cdr (lookup-module ('results, cdr (primp ('dp-ram-16x32)))), append (pairlist (cdr (lookup-module ('inputs,

cdr (primp ('dp-ram-16x32)))),

a), pairstates (cdr (lookup-module ('states,

cdr (primp ('dp-ram-16x32)))),

s)))

Theorem: dual-apply-value-dp-ram-16x32-lemma-2 dual-apply-value ('dp-ram-16x32, a, s) = dual-port-ram-value (32,

4,

list (eval$ (t,

'read-a0,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'read-a1,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'read-a2,
append (pairlist ('(read-a0 read-a1

read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'read-a3,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b0,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a),

pairstates ('state, s))),

eval$ (t,

'write-b1,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b2,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b3,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20

d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'wen,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd0,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd1,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3

d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd2,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd3,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd4,
append (pairlist ('(read-a0 read-a1

read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd5,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd6,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a),

pairstates ('state, s))),

eval$ (t,

'd7,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd8,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd9,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20

d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd10,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd11,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd12,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3

d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd13,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd14,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd15,
append (pairlist ('(read-a0 read-a1

read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd16,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd17,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a),

pairstates ('state, s))),

eval$ (t,

'd18,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd19,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd20,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20

d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd21,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd22,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd23,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3

d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd24,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd25,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd26,
append (pairlist ('(read-a0 read-a1

read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd27,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd28,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a),

pairstates ('state, s))),

eval$ (t,

'd29,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd30,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd31,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20

                     d21 d22 d23 d24
                     d25 d26 d27 d28
                     d29 d30 d31),

a), pairstates ('state, s)))),

eval$ (t,

  'state,
  append (pairlist ('(read-a0 read-a1
                  read-a2 read-a3
                  write-b0 write-b1
                  write-b2 write-b3
                  wen d0 d1 d2 d3 d4
                  d5 d6 d7 d8 d9 d10
                  d11 d12 d13 d14 d15
                  d16 d17 d18 d19 d20
                  d21 d22 d23 d24 d25
                  d26 d27 d28 d29 d30
                  d31),

a), pairstates ('state, s))))

Theorem: dual-apply-value-dp-ram-16x32-lemma-3 dual-apply-value ('dp-ram-16x32, a, s) = dual-port-ram-value (32,

4,

list (car (a), cadr (a), caddr (a), cadddr (a), caddddr (a), cadddddr (a), caddddddr (a), cadddddddr (a), caddddddddr (a), cadddddddddr (a), caddddddddddr (a), cadddddddddddr (a), caddddddddddddr (a), cadddddddddddddr (a), caddddddddddddddr (a), cadddddddddddddddr (a), caddddddddddddddddr (a), cadddddddddddddddddr (a), caddddddddddddddddddr (a), cadddddddddddddddddddr (a), caddddddddddddddddddddr (a), cadddddddddddddddddddddr (a), caddddddddddddddddddddddr (a), cadddddddddddddddddddddddr (a), caddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddddddddr (a)),

s)

Definition: dual-port-ram-value-body (bits, a-address, b-address, wen, state) = if (¬ bvp (a-address))

∨ ((wen ≠ t)

∧ ((¬ bvp (b-address)) ∨ (a-address = b-address))) then make-list (bits, x) elseif properp (read-mem (a-address, state))

∧ (length (read-mem (a-address, state)) = bits) then read-mem (a-address, state) else make-list (bits, x) endif

Theorem: dual-port-ram-value-is-dual-port-ram-value-body dual-port-ram-value (bits, address-lines, args, state) = dual-port-ram-value-body (bits,

subrange (args, 0, address-lines − 1), subrange (args,

address-lines,

(2 ∗ address-lines) − 1),

nth (2 ∗ address-lines, args), state)

Theorem: dual-apply-value-dp-ram-16x32 dual-apply-value ('dp-ram-16x32, a, s) = dual-port-ram-value (32, 4, a, s)

Theorem: dp-ram-16x32-monotone-value monotonicity-property (0, 'dp-ram-16x32, netlist, a1 , a2 , s1 , s2 )

Event: Enable v-knownp; name this event ‘v-knownp-off’.

Event: Enable s-knownp-implies-s-approx-is-equal; name this event ‘s-knownp-implies-s-approx-is-equal-off’.

Event: Enable bvp; name this event ‘bvp-off1’.

Event: Enable fourp-implies-s-approx-is-b-approx; name this event ‘fourpimplies-s-approx-is-b-approx-off’.

Event: Enable v-approx; name this event ‘v-approx-off’.

Event: Enable s-knownp; name this event ‘s-knownp-off’.

Theorem: s-approx-opener ((listp (s1 ) ∨ listp (s2 )) → (s-approx (s1 , s2 )

= if listp (s1 )

then if listp (s2 )

then s-approx (car (s1 ), car (s2 ))

∧ s-approx (cdr (s1 ), cdr (s2 )) else f endif

else f endif))

∧ (((s1 = nil) ∨ (s2 = nil))

→ (s-approx (s1 , s2 ) = (s1 = s2 ))) ∧ ((ramp (s1 ) ∨ ramp (s2 ))

→ (s-approx (s1 , s2 ) = if ramp (s1 )

then if ramp (s2 ) then v-approx (ram-guts (s1 ), ram-guts (s2 )) else f endif

else f endif))

∧ ((romp (s1 ) ∨ romp (s2 ))

→ (s-approx (s1 , s2 ) = if romp (s1 ) then if romp (s2 )

then v-approx (rom-guts (s1 ), rom-guts (s2 )) else f endif

else f endif))

∧ ((stubp (s1 ) ∨ stubp (s2 ))

→ (s-approx (s1 , s2 )

= if stubp (s1 )

then if stubp (s2 ) then v-approx (stub-guts (s1 ), stub-guts (s2 )) else f endif

else f endif))

∧ ((¬ (listp (s1 )

∨ listp (s2 ) ∨ (s1 = nil) ∨ (s2 = nil) ∨ ramp (s1 ) ∨ ramp (s2 ) ∨ romp (s1 ) ∨ romp (s2 ) ∨ stubp (s1 ) ∨ stubp (s2 )))

→ (s-approx (s1 , s2 ) = b-approx (s1 , s2 )))

Event: Enable s-approx; name this event ‘s-approx-off’.

Event: Enable *1*mem-width; name this event ‘g*1*mem-width-off’.

Event: Enable mem-width; name this event ‘mem-width-off’.

Theorem: v-approx-implies-nth-does-not-go-from-f-to-t ((¬ nth (n, a1 )) ∧ nth (n, a2 )) → (¬ v-approx (a1 , a2 ))

Theorem: write-mem1-opener (stubp (mem) → (write-mem1 (v-addr, mem, value) = mem)) ∧ ((v-addr ≃ nil)

→ (write-mem1 (v-addr, mem, value)

= if ramp (mem) then ram (value)

else mem endif))

∧ ((listp (v-addr) ∧ (mem ≃ nil))

→ (write-mem1 (v-addr, mem, value) = mem)) ∧ ((listp (mem) ∧ listp (v-addr) ∧ car (v-addr))

→ (write-mem1 (v-addr, mem, value)

= cons (car (mem), write-mem1 (cdr (v-addr), cdr (mem), value))))

∧ ((listp (mem) ∧ listp (v-addr) ∧ (¬ car (v-addr)))

→ (write-mem1 (v-addr, mem, value) = cons (write-mem1 (cdr (v-addr), car (mem), value), cdr (mem))))

Definition: write-mem1-monotone-induction (v-addr, mem1 , mem2 ) = if stubp (mem1 ) ∨ stubp (mem2 ) then t

elseif v-addr ≃ nil then t elseif (mem1 ≃ nil) ∨ (mem2 ≃ nil) then t elseif car (v-addr) then write-mem1-monotone-induction (cdr (v-addr), cdr (mem1 ), cdr (mem2 )) else write-mem1-monotone-induction (cdr (v-addr),

car (mem1 ),

car (mem2 )) endif

Theorem: write-mem1-monotone (s-approx (mem1 , mem2 ) ∧ v-approx (data1 , data2 ) ∧ properp (data1 ) ∧ properp (data2 ) ∧ (length (data1 ) = mem-width) ∧ (length (data2 ) = mem-width)) → s-approx (write-mem1 (v-addr, mem1 , data1 ), write-mem1 (v-addr, mem2 , data2 ))

Theorem: write-mem-monotone (s-approx (mem1 , mem2 ) ∧ v-approx (data1 , data2 ) ∧ properp (data1 ) ∧ properp (data2 ) ∧ (length (data1 ) = mem-width) ∧ (length (data2 ) = mem-width)) → s-approx (write-mem (v-addr, mem1 , data1 ), write-mem (v-addr, mem2 , data2 ))

Theorem: v-approx-length v-approx (v1 , v2 ) → (length (v1 ) ≮ length (v2 ))

Definition: write-mem1-double-induction (v-addr, mem1 , mem2 ) = if stubp (mem1 ) ∨ stubp (mem2 ) then t

elseif v-addr ≃ nil then t elseif (mem1 ≃ nil) ∨ (mem2 ≃ nil) then t elseif car (v-addr) then write-mem1-double-induction (cdr (v-addr), cdr (mem1 ), cdr (mem2 )) else write-mem1-double-induction (cdr (v-addr),

car (mem1 ),

car (mem2 )) endif Theorem: s-approx-write-mem1-id (s-approx (s1 , s2 ) ∧ good-s (s2 )) → s-approx (write-mem1 (v-addr, s1 , make-list (mem-width, x)), s2 )

Theorem: s-approx-write-mem-id (good-s (s2 ) ∧ s-approx (s1 , s2 )) → s-approx (write-mem (v-addr, s1 , make-list (mem-width, x)), s2 )

Theorem: s-approx-constant-ram-x-id (good-s (s2 ) ∧ s-approx (s1 , s2 )) → s-approx (constant-ram (s1 , make-list (mem-width, x)), s2 )

Theorem: s-approx-constant-ram-x-constant-ram-x s-approx (s1 , s2 ) → s-approx (constant-ram (s1 , make-list (mem-width, x)),

constant-ram (s2 , make-list (mem-width, x)))

Theorem: v-approx-preserves-length v-approx (a1 , a2 ) → (length (a1 ) = length (a2 ))

Theorem: v-approx-subrange v-approx (a1 , a2 ) → v-approx (subrange (a1 , i, j ), subrange (a2 , i, j ))

Theorem: mem-width-non-zero mem-width ≠ 0

Theorem: s-approx-constant-ram-x-write-mem1-case-3 ((¬ stubp (s1 )) ∧ (¬ stubp (s2 )) ∧ listp (v-addr) ∧ (¬ listp (s1 )) ∧ s-approx (s1 , s2 ) ∧ properp (v) ∧ (length (v) = mem-width) ∧ (¬ ramp (s1 ))) → s-approx (s1 , write-mem1 (v-addr, s2 , v))

Theorem: s-approx-constant-ram-x-write-mem1 (s-approx (s1 , s2 ) ∧ properp (v) ∧ (length (v) = mem-width) ∧ good-s (s2 )) → s-approx (constant-ram (s1 , make-list (mem-width, x)),

write-mem1 (v-addr, s2 , v))

Theorem: s-approx-constant-ram-x-write-mem (s-approx (s1 , s2 ) ∧ properp (v) ∧ (length (v) = mem-width) ∧ good-s (s2 )) → s-approx (constant-ram (s1 , make-list (mem-width, x)),

write-mem (v-addr, s2 , v))

Theorem: v-approx-preserves-properp (¬ (properp (v1 ) ↔ properp (v2 ))) → (¬ v-approx (v1 , v2 ))

Theorem: mem-width-linear-facts (31 < mem-width) ∧ (mem-width < 33)

Theorem: dual-port-ram-state-monotone (s-approx (s1 , s2 ) ∧ good-s (s2 ) ∧ v-approx (a1 , a2 )) → s-approx (dual-port-ram-state (mem-width, 4, a1 , s1 ),

dual-port-ram-state (mem-width, 4, a2 , s2 ))

Theorem: dual-port-ram-state-monotone-rewrite (s-approx (s1 , s2 ) ∧ good-s (s2 ) ∧ v-approx (a1 , a2 )) → s-approx (dual-port-ram-state (32, 4, a1 , s1 ),

dual-port-ram-state (32, 4, a2 , s2 ))

Theorem: dual-apply-state-dp-ram-16x32-lemma-1 dual-apply-state ('dp-ram-16x32, a, s) = eval$ (t,

cdr (lookup-module ('new-states, cdr (primp ('dp-ram-16x32)))), append (pairlist (cdr (lookup-module ('inputs,

cdr (primp ('dp-ram-16x32)))),

a), pairstates (cdr (lookup-module ('states,

cdr (primp ('dp-ram-16x32)))),

s)))

Theorem: dual-apply-state-dp-ram-16x32-lemma-2 dual-apply-state ('dp-ram-16x32, a, s) = dual-port-ram-state (32,

4,

list (eval$ (t,

'read-a0,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'read-a1,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'read-a2,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'read-a3,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16

d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b0,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b1,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b2,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3

wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'write-b3,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'wen,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd0,

append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd1,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd2,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd3,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd4,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd5,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16

d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd6,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd7,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd8,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3

wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd9,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd10,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd11,

append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd12,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd13,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd14,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd15,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd16,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16

d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd17,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd18,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd19,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3

wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd20,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd21,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd22,

append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd23,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd24,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd25,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd26,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd27,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16

d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd28,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd29,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd30,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3

wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s))),

eval$ (t,

'd31,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3
d4 d5 d6 d7 d8
d9 d10 d11 d12
d13 d14 d15 d16
d17 d18 d19 d20
d21 d22 d23 d24
d25 d26 d27 d28
d29 d30 d31),

a), pairstates ('state, s)))),

eval$ (t,

'state,
append (pairlist ('(read-a0 read-a1
read-a2 read-a3
write-b0 write-b1
write-b2 write-b3
wen d0 d1 d2 d3 d4
d5 d6 d7 d8 d9 d10
d11 d12 d13 d14 d15
d16 d17 d18 d19 d20
d21 d22 d23 d24 d25
d26 d27 d28 d29 d30
d31),

a), pairstates ('state, s))))

Theorem: dual-apply-state-dp-ram-16x32-lemma-3 dual-apply-state ('dp-ram-16x32, a, s)

= dual-port-ram-state (32,

4,

list (car (a), cadr (a), caddr (a), cadddr (a), caddddr (a), cadddddr (a), caddddddr (a), cadddddddr (a), caddddddddr (a), cadddddddddr (a), caddddddddddr (a), cadddddddddddr (a), caddddddddddddr (a), cadddddddddddddr (a), caddddddddddddddr (a), cadddddddddddddddr (a), caddddddddddddddddr (a), cadddddddddddddddddr (a), caddddddddddddddddddr (a), cadddddddddddddddddddr (a), caddddddddddddddddddddr (a), cadddddddddddddddddddddr (a), caddddddddddddddddddddddr (a), cadddddddddddddddddddddddr (a), caddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddddddr (a), cadddddddddddddddddddddddddddddddddddddddr (a), caddddddddddddddddddddddddddddddddddddddddr (a)),

s)

Definition: dual-port-ram-state-body (bits, b-address, wen, data, state) = if wen = t then state

elseif ¬ bvp (b-address) then constant-ram (state, make-list (bits, x)) elseif wen = f then write-mem (b-address, state, data) else write-mem (b-address, state, make-list (bits, x)) endif

Theorem: dual-port-ram-state-is-dual-port-ram-state-body dual-port-ram-state (bits, address-lines, args, state) = dual-port-ram-state-body (bits,

subrange (args, address-lines, (2 ∗ address-lines) − 1),

nth (2 ∗ address-lines, args), subrange (args,

1 + (2 ∗ address-lines), (2 ∗ address-lines) + bits),

state)

Theorem: dual-apply-state-dp-ram-16x32 dual-apply-state ('dp-ram-16x32, a, s) = dual-port-ram-state (32, 4, a, s)

Theorem: dp-ram-16x32-monotone-state good-s (s2 ) → monotonicity-property (2, 'dp-ram-16x32, netlist, a1 , a2 , s1 , s2 )

Theorem: dp-ram-16x32-monotone monotonicity-property (0, 'dp-ram-16x32, netlist, a1 , a2 , s1 , s2 ) ∧ (good-s (s2 )

→ monotonicity-property (2,

                             'dp-ram-16x32,

netlist, a1 , a2 , s1 , s2 ))

Event: Enable bvp-reverse; name this event ‘bvp-reverse-off’.

Event: Enable v-approx-bvp; name this event ‘v-approx-bvp-off’.

Event: Enable read-mem1-monotone; name this event ‘read-mem1-monotone-off’.

Event: Enable bvp-implies-v-knownp; name this event ‘bvp-implies-v-knownp-off’. Event: Enable v-approx-x-x; name this event ‘v-approx-x-x-off’. Event: Enable v-approx-implies-b-approx-nth; name this event ‘v-approx-implies-b-approx-nth-off’. Event: Enable *1*b-knownp; name this event ‘g*1*b-knownp-off1’. Event: Enable v-approx-implies-subranges-equal; name this event ‘v-approx-implies-subranges-equal-off’. Event: Enable v-approx-bvp-subrange; name this event ‘v-approx-bvp-subrange-off’. Event: Enable v-approx-make-list-x; name this event ‘v-approx-make-list-x-off’. Event: Enable read-mem-monotone; name this event ‘read-mem-monotone-off’. Event: Enable equal-length-read-mem1; name this event ‘equal-length-read-mem1-off’. Event: Enable equal-length-read-mem; name this event ‘equal-length-read-mem-off’. Event: Enable s-approx-implies-properp-read-mem1; name this event ‘s-approx-implies-properp-read-mem1-off’. Event: Enable s-approx-implies-properp-read-mem; name this event ‘s-approx-implies-properp-read-mem-off’. Event: Enable dual-port-ram-value-monotone; name this event ‘dual-port-ram-value-monotone-off’.

Event: Enable eval$-append; name this event ‘eval$-append-off’. Event: Enable eval$-pairlist-cons; name this event ‘eval$-pairlist-cons-off’. Event: Enable eval$-append-2; name this event ‘eval$-append-2-off’. Event: Enable dual-apply-value-dp-ram-16x32-lemma-1; name this event ‘dualapply-value-dp-ram-16x32-lemma-1-off’. Event: Enable dual-apply-value-dp-ram-16x32-lemma-2; name this event ‘dualapply-value-dp-ram-16x32-lemma-2-off’. Event: Enable dual-apply-value-dp-ram-16x32-lemma-3; name this event ‘dualapply-value-dp-ram-16x32-lemma-3-off’. Event: Enable dual-port-ram-value-is-dual-port-ram-value-body; name this event ‘dual-port-ram-value-is-dual-port-ram-value-body-off’. Event: Enable dual-apply-value-dp-ram-16x32; name this event ‘dual-apply-value-dp-ram-16x32-off’. Event: Enable dp-ram-16x32-monotone-value; name this event ‘dp-ram-16x32-monotone-value-off’. Event: Disable v-knownp; name this event ‘v-knownp-on’. Event: Disable s-knownp-implies-s-approx-is-equal; name this event ‘s-knownp-implies-s-approx-is-equal-on’. Event: Disable bvp; name this event ‘bvp-on’. Event: Disable fourp-implies-s-approx-is-b-approx; name this event ‘fourpimplies-s-approx-is-b-approx-on’. Event: Disable v-approx; name this event ‘v-approx-on’. Event: Disable s-knownp; name this event ‘s-knownp-on’.

Event: Enable s-approx-opener; name this event ‘s-approx-opener-off’. Event: Disable s-approx; name this event ‘s-approx-on’. Event: Disable *1*mem-width; name this event ‘g*1*mem-width-on’. Event: Disable mem-width; name this event ‘mem-width-on’. Event: Enable v-approx-implies-nth-does-not-go-from-f-to-t; name this event ‘v-approx-implies-nth-does-not-go-from-f-to-t-off’. Event: Enable write-mem1-opener; name this event ‘write-mem1-opener-off’. Event: Enable write-mem1-monotone; name this event ‘write-mem1-monotone-off’. Event: Enable write-mem-monotone; name this event ‘write-mem-monotone-off’. Event: Enable v-approx-length; name this event ‘v-approx-length-off’. Event: Enable s-approx-write-mem1-id; name this event ‘s-approx-write-mem1-id-off’. Event: Enable s-approx-write-mem-id; name this event ‘s-approx-write-mem-id-off’. Event: Enable s-approx-constant-ram-x-id; name this event ‘s-approx-constant-ram-x-id-off’. Event: Enable s-approx-constant-ram-x-constant-ram-x; name this event ‘sapprox-constant-ram-x-constant-ram-x-off’. Event: Enable v-approx-preserves-length; name this event ‘v-approx-preserves-length-off’. Event: Enable v-approx-subrange; name this event ‘v-approx-subrange-off’.

Event: Enable mem-width-non-zero; name this event ‘mem-width-non-zero-off’.

Event: Enable s-approx-constant-ram-x-write-mem1-case-3; name this event ‘s-approx-constant-ram-x-write-mem1-case-3-off’.

Event: Enable s-approx-constant-ram-x-write-mem1; name this event ‘s-approx-constant-ram-x-write-mem1-off’.

Event: Enable s-approx-constant-ram-x-write-mem; name this event ‘s-approx-constant-ram-x-write-mem-off’.

Event: Enable v-approx-preserves-properp; name this event ‘v-approx-preserves-properp-off’.

Event: Enable mem-width-linear-facts; name this event ‘mem-width-linear-facts-off’.

Event: Enable dual-port-ram-state-monotone-rewrite; name this event ‘dualport-ram-state-monotone-rewrite-off’.

Event: Enable dual-apply-state-dp-ram-16x32-lemma-1; name this event ‘dualapply-state-dp-ram-16x32-lemma-1-off’.

Event: Enable dual-apply-state-dp-ram-16x32-lemma-2; name this event ‘dualapply-state-dp-ram-16x32-lemma-2-off’.

Event: Enable dual-apply-state-dp-ram-16x32-lemma-3; name this event ‘dualapply-state-dp-ram-16x32-lemma-3-off’.

Event: Enable dual-port-ram-state-is-dual-port-ram-state-body; name this event ‘dual-port-ram-state-is-dual-port-ram-state-body-off’.

Event: Enable dual-apply-state-dp-ram-16x32; name this event ‘dual-apply-state-dp-ram-16x32-off’.

Event: Enable dp-ram-16x32-monotone-state; name this event ‘dp-ram-16x32-monotone-state-off’.

Event: Enable dp-ram-16x32-monotone; name this event ‘dp-ram-16x32-monotone-off’.

Definition: ok-netlistp (flag, fn, netlist, exceptions) = case on flag:

case = 0

then if primp (fn) then fn ∉ exceptions elseif listp (lookup-module (fn, netlist)) then ok-netlistp (1,

module-occurrences (lookup-module (fn, netlist)), delete-module (fn, netlist), exceptions)

else f endif case = 1 then if listp (fn)

then ok-netlistp (0, occ-function (car (fn)), netlist, exceptions) ∧ ok-netlistp (1, cdr (fn), netlist, exceptions)

else t endif case = 2 then if primp (fn) then fn ∉ exceptions

elseif listp (lookup-module (fn, netlist))

then ok-netlistp (3, module-occurrences (lookup-module (fn, netlist)), delete-module (fn, netlist), exceptions)

else f endif case = 3 then if listp (fn)

then ok-netlistp (2, occ-function (car (fn)), netlist, exceptions) ∧ ok-netlistp (3, cdr (fn), netlist, exceptions)

else t endif otherwise f endcase

Theorem: primp-monotone (primp (fn) ∧ ((flag = 0)

∨ ((flag = 2)

∧ ((fn = 'dp-ram-16x32) → good-s (s2 ))))

 ∧ (fn ≠ 'mem-32x32))

→ (monotonicity-property (flag, fn, netlist, a1 , a2 , s1 , s2 ) ∧ monotonicity-property (flag, fn, netlist, a1 , a2 , s1 , s2 ))

Definition: dual-eval-monotone-induction (flag, fn, netlist, a1 , a2 , s1 , s2 ) = case on flag:

case = 0 then if primp (fn) then t

elseif listp (lookup-module (fn, netlist)) then dual-eval-monotone-induction (1,

module-occurrences (lookup-module (fn,

netlist)),

delete-module (fn, netlist), pairlist (module-inputs (lookup-module (fn,

netlist)),

a1 ), pairlist (module-inputs (lookup-module (fn,

netlist)),

a2 ), pairstates (module-statenames (lookup-module (fn,

netlist)),

s1 ),

pairstates (module-statenames (lookup-module (fn,

netlist)),

s2 ))

else t endif case = 1 then if listp (fn)

then dual-eval-monotone-induction (0, occ-function (car (fn)), netlist, collect-value (occ-inputs (car (fn)),

a1 ),

collect-value (occ-inputs (car (fn)),

a2 ),

value (occ-name (car (fn)), s1 ), value (occ-name (car (fn)), s2 ))

∧ dual-eval-monotone-induction (1, cdr (fn), netlist, append (pairlist (occ-outputs (car (fn)),

dual-eval (0, occ-function (car (fn)), collect-value (occ-inputs (car (fn)), a1 ), value (occ-name (car (fn)),

s1 ), netlist)),

a1 ), append (pairlist (occ-outputs (car (fn)),

dual-eval (0, occ-function (car (fn)), collect-value (occ-inputs (car (fn)), a2 ), value (occ-name (car (fn)),

s2 ), netlist)),

a2 ), s1 , s2 )

else t endif case = 2 then if primp (fn) then t

elseif listp (lookup-module (fn, netlist)) then dual-eval-monotone-induction (1,

module-occurrences (lookup-module (fn,

netlist)),

delete-module (fn, netlist), pairlist (module-inputs (lookup-module (fn,

netlist)),

a1 ), pairlist (module-inputs (lookup-module (fn,

netlist)),

a2 ), pairstates (module-statenames (lookup-module (fn,

netlist)),

s1 ),

pairstates (module-statenames (lookup-module (fn,

netlist)),

s2 ))

∧ dual-eval-monotone-induction (3,

module-occurrences (lookup-module (fn,

netlist)),

delete-module (fn,

netlist),

dual-eval (1,

module-occurrences (lookup-module (fn,

netlist)),

pairlist (module-inputs (lookup-module (fn,

netlist)),

a1 ), pairstates (module-statenames (lookup-module (fn,

netlist)),

s1 ),

delete-module (fn,

netlist)),

dual-eval (1,

module-occurrences (lookup-module (fn,

netlist)),

pairlist (module-inputs (lookup-module (fn,

netlist)),

a2 ), pairstates (module-statenames (lookup-module (fn,

netlist)),

s2 ),

delete-module (fn,

netlist)),

pairstates (module-statenames (lookup-module (fn,

netlist)),

s1 ),

pairstates (module-statenames (lookup-module (fn,

netlist)),

s2 ))

else t endif case = 3 then if listp (fn)

then dual-eval-monotone-induction (2, occ-function (car (fn)), netlist, collect-value (occ-inputs (car (fn)),

a1 ),

collect-value (occ-inputs (car (fn)),

a2 ),

value (occ-name (car (fn)), s1 ), value (occ-name (car (fn)), s2 ))

∧ dual-eval-monotone-induction (3, cdr (fn), netlist, a1 , a2 , s1 , s2 )

else t endif otherwise t endcase

Event: Disable v-approx-x-x; name this event ‘v-approx-x-x-on’.

Theorem: v-approx-alist-implies-b-approx-value (alistp (alist1 ) ∧ alistp (alist2 ) ∧ v-approx-alist (alist1 , alist2 )) → b-approx (value (x, alist1 ), value (x, alist2 ))

Theorem: alistp-pairlist alistp (pairlist (x, y))

Theorem: alistp-append alistp (x) → (alistp (append (x, y)) = alistp (y))

Theorem: alistp-dual-eval-1 (alistp (bindings) ∧ (flag = 1)) → alistp (dual-eval (flag, occurrences, bindings, state-bindints, netlist))

Theorem: v-approx-alist-implies-v-approx-collect-value (alistp (alist1 ) ∧ alistp (alist2 ) ∧ v-approx-alist (alist1 , alist2 )) → v-approx (collect-value (x, alist1 ), collect-value (x, alist2 ))

Definition: s-approx-list (x, y) = if listp (x)

then listp (y)

∧ s-approx (car (x), car (y)) ∧ s-approx-list (cdr (x), cdr (y))

else y ≃ nil endif

Theorem: s-approx-list-implies-s-approx-alist s-approx-list (s1 , s2 ) → s-approx-alist (pairlist (x, s1 ), pairlist (x, s2 ))

Theorem: v-approx-implies-v-approx-alist v-approx (v1 , v2 ) → v-approx-alist (pairlist (x, v1 ), pairlist (x, v2 ))

Theorem: alistp-opener alistp (cons (a, z)) = (listp (a) ∧ alistp (z))

Theorem: s-approx-alist-implies-s-approx-value (s-approx-alist (s1 , s2 ) ∧ alistp (s1 ) ∧ alistp (s2 )) → s-approx (value (w, s1 ), value (w, s2 ))

Theorem: v-approx-alist-append (v-approx-alist (a, c) ∧ v-approx-alist (b, d)) → v-approx-alist (append (a, b), append (c, d))

Definition: double-cdr-induction (x, y) = if listp (x) ∧ listp (y) then double-cdr-induction (cdr (x), cdr (y))

else t endif Theorem: s-approx-alist-implies-s-approx-list-collect-value (s-approx-alist (x, y) ∧ alistp (x) ∧ alistp (y)) → s-approx-list (collect-value (a, x), collect-value (a, y))

Theorem: alistp-dual-eval-3 (alistp (state-bindings) ∧ (flag = 3)) → alistp (dual-eval (flag, occurrences, bindings, state-bindings, netlist))

Theorem: s-approx-implies-s-approx-alist s-approx (s1 , s2 ) → s-approx-alist (pairlist (x, s1 ), pairlist (x, s2 ))

Theorem: s-approx-alist-implies-s-approx-collect-value (s-approx-alist (x, y) ∧ alistp (x) ∧ alistp (y)) → s-approx (collect-value (a, x), collect-value (a, y))

Theorem: ok-netlistp-reduction ((flag = 2) ∨ (flag = 3)) → (ok-netlistp (flag, fn, netlist, exceptions)

= if flag = 2 then ok-netlistp (0, fn, netlist, exceptions) else ok-netlistp (1, fn, netlist, exceptions) endif)

Theorem: ok-netlistp-reduction-rewrite (ok-netlistp (2, fn, netlist, exceptions) = ok-netlistp (0, fn, netlist, exceptions)) ∧ (ok-netlistp (3, fn, netlist, exceptions)

= ok-netlistp (1, fn, netlist, exceptions))

Theorem: dual-eval-monotone-no-ram ok-netlistp (flag, fn, netlist, '(mem-32x32 dp-ram-16x32)) → monotonicity-property (flag, fn, netlist, a1 , a2 , s1 , s2 )

Definition: good-s-alist (x) = if listp (x)

then listp (car (x)) ∧ good-s (cdar (x)) ∧ good-s-alist (cdr (x))

else x = nil endif

Theorem: good-s-alist-pairlist good-s (s) → good-s-alist (pairlist (x, s))

Theorem: good-s-value good-s-alist (x) → good-s (value (w, x))

Theorem: dual-eval-monotone ok-netlistp (flag, fn, netlist, '(mem-32x32)) → (if (flag = 0) ∨ (flag = 2) then good-s (s2 )

else good-s-alist (s2 ) endif

→ monotonicity-property (flag, fn, netlist, a1 , a2 , s1 , s2 ))

Theorem: good-s-collect-value good-s-alist (s) → good-s (collect-value (keys, s))

Theorem: f-buf-preserves-good-s good-s (f-buf (x))

Theorem: f-if-preserves-good-s good-s (f-if (x, y, z))

Theorem: good-s-0 good-s (0)

Theorem: ao2-preserves-good-s good-s (s) → good-s (dual-apply-state ('ao2, args, s))

Theorem: ao4-preserves-good-s good-s (s) → good-s (dual-apply-state ('ao4, args, s))

Theorem: ao6-preserves-good-s good-s (s) → good-s (dual-apply-state ('ao6, args, s))

Theorem: ao7-preserves-good-s good-s (s) → good-s (dual-apply-state ('ao7, args, s))

Theorem: b-and-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-and, args, s))

Theorem: b-and3-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-and3, args, s))

Theorem: b-and4-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-and4, args, s))

Theorem: b-equv-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-equv, args, s))

Theorem: b-equv3-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-equv3, args, s))

Theorem: b-if-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-if, args, s))

Theorem: b-nand-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nand, args, s))

Theorem: b-nand3-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nand3, args, s))

Theorem: b-nand4-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nand4, args, s))

Theorem: b-nand5-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nand5, args, s))

Theorem: b-nand6-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nand6, args, s))

Theorem: b-nand8-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nand8, args, s))

Theorem: b-nbuf-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nbuf, args, s))

Theorem: b-nor-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nor, args, s))

Theorem: b-nor3-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nor3, args, s))

Theorem: b-nor4-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nor4, args, s))

Theorem: b-nor5-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nor5, args, s))

Theorem: b-nor6-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nor6, args, s))

Theorem: b-nor8-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-nor8, args, s))

Theorem: b-not-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-not, args, s))

Theorem: b-not-b4ip-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-not-b4ip, args, s))

Theorem: b-not-ivap-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-not-ivap, args, s))

Theorem: b-or-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-or, args, s))

Theorem: b-or3-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-or3, args, s))

Theorem: b-or4-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-or4, args, s))

Theorem: b-xor-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-xor, args, s))

Theorem: b-xor3-preserves-good-s good-s (s) → good-s (dual-apply-state ('b-xor3, args, s))

Theorem: del2-preserves-good-s good-s (s) → good-s (dual-apply-state ('del2, args, s))

Theorem: del4-preserves-good-s good-s (s) → good-s (dual-apply-state ('del4, args, s))

Theorem: del10-preserves-good-s good-s (s) → good-s (dual-apply-state ('del10, args, s))

Theorem: procmon-preserves-good-s good-s (s) → good-s (dual-apply-state ('procmon, args, s))

Theorem: fd1-preserves-good-s good-s (s) → good-s (dual-apply-state ('fd1, args, s))

Theorem: fd1s-preserves-good-s good-s (s) → good-s (dual-apply-state ('fd1s, args, s))

Theorem: fd1sp-preserves-good-s good-s (s) → good-s (dual-apply-state ('fd1sp, args, s))

Theorem: fd1slp-preserves-good-s good-s (s) → good-s (dual-apply-state ('fd1slp, args, s))

Theorem: id-preserves-good-s good-s (s) → good-s (dual-apply-state ('id, args, s))

Theorem: ram-enable-circuit-preserves-good-s good-s (s) → good-s (dual-apply-state ('ram-enable-circuit, args, s))

Theorem: t-buf-preserves-good-s good-s (s) → good-s (dual-apply-state ('t-buf, args, s))

Theorem: t-wire-preserves-good-s good-s (s) → good-s (dual-apply-state ('t-wire, args, s))

Theorem: pullup-preserves-good-s good-s (s) → good-s (dual-apply-state ('pullup, args, s))

Theorem: ttl-bidirect-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-bidirect, args, s))

Theorem: ttl-clk-input-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-clk-input, args, s))

Theorem: ttl-input-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-input, args, s))

Theorem: ttl-output-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-output, args, s))

Theorem: ttl-output-parametric-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-output-parametric, args, s))

Theorem: ttl-output-fast-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-output-fast, args, s))

Theorem: ttl-tri-output-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-tri-output, args, s))

Theorem: ttl-tri-output-fast-preserves-good-s good-s (s) → good-s (dual-apply-state ('ttl-tri-output-fast, args, s))

Theorem: vdd-preserves-good-s good-s (s) → good-s (dual-apply-state ('vdd, args, s))

Theorem: vdd-parametric-preserves-good-s good-s (s) → good-s (dual-apply-state ('vdd-parametric, args, s))

Theorem: vss-preserves-good-s good-s (s) → good-s (dual-apply-state ('vss, args, s))

Theorem: good-s-constant-ram good-s (s) → good-s (constant-ram (s, make-list (32, x)))

Theorem: good-s-write-mem-1 (good-s (s) ∧ properp (value) ∧ (length (value) = 32)) → good-s (write-mem1 (v-addr, s, value))

Theorem: good-s-write-mem (good-s (s) ∧ properp (value) ∧ (length (value) = 32)) → good-s (write-mem (v-addr, s, value))

Theorem: dp-ram-16x32-preserves-good-s good-s (s) → good-s (dual-apply-state ('dp-ram-16x32, args, s))

Event: Let us define the theory good-s-primitives-theory to consist of the following events: ao2-preserves-good-s, ao4-preserves-good-s, ao6-preserves-good-s, ao7-preserves-good-s, b-and-preserves-good-s, b-and3-preserves-good-s, b-and4-preserves-good-s, b-equv-preserves-good-s, b-equv3-preserves-good-s, b-if-preserves-good-s, b-nand-preserves-good-s, b-nand3-preserves-good-s, b-nand4-preserves-good-s, b-nand5-preserves-good-s, b-nand6-preserves-good-s, b-nand8-preserves-good-s, b-nbuf-preserves-good-s, b-nor-preserves-good-s, b-nor3-preserves-good-s, b-nor4-preserves-good-s, b-nor5-preserves-good-s, b-nor6-preserves-good-s, bnor8-preserves-good-s, b-not-preserves-good-s, b-not-b4ip-preserves-good-s, bnot-ivap-preserves-good-s, b-or-preserves-good-s, b-or3-preserves-good-s, b-or4-preserves-good-s, b-xor-preserves-good-s, b-xor3-preserves-good-s, del2-preserves-good-s, del4-preserves-good-s, del10-preserves-good-s, procmon-preserves-good-s, fd1-preserves-good-s, fd1s-preserves-good-s, fd1sp-preserves-good-s, fd1slppreserves-good-s, id-preserves-good-s, ram-enable-circuit-preserves-good-s, t-buf-preserves-good-s, t-wire-preserves-good-s, pullup-preserves-good-s, ttl-bidirect-preserves-good-s, ttl-clk-input-preserves-good-s, ttl-input-preserves-good-s, ttloutput-preserves-good-s, ttl-output-parametric-preserves-good-s, ttl-output-fast-preserves-good-s, ttl-tri-output-preserves-good-s, ttl-tri-output-fast-preserves-good-s, vdd-preserves-good-s, vdd-parametric-preserves-good-s, vss-preserves-good-s, dp-ram-16x32-preserves-good-s.

Theorem: primp-preserves-good-s (good-s (s) ∧ primp (fn) ∧ (fn ≠ 'mem-32x32)) → good-s (dual-apply-state (fn, args, s))

Theorem: good-s-preserved ok-netlistp (flag, fn, netlist, '(mem-32x32)) → ((((flag = 2) ∧ good-s (s))

→ good-s (dual-eval (flag, fn, a, s, netlist)))

∧ (((flag = 3) ∧ good-s-alist (s)) → good-s-alist (dual-eval (flag, fn, a, s, netlist))))

Definition: v-approx-list (x, y) = if listp (x)

then listp (y)

∧ v-approx (car (x), car (y)) ∧ v-approx-list (cdr (x), cdr (y))

else y ≃ nil endif

Definition: v-s-approx-list (x, y) = if listp (x)

then listp (y)

∧ v-approx (caar (x), caar (y)) ∧ s-approx (cadar (x), cadar (y)) ∧ v-s-approx-list (cdr (x), cdr (y))

else t endif

Definition: nat-lst-lst-induction (n, x, y) = if (n ≃ 0) ∨ (x ≃ nil) ∨ (y ≃ nil) then t

else nat-lst-lst-induction (n − 1, cdr (x), cdr (y)) endif

Event: Disable open-nth; name this event ‘open-nth-on’.

Theorem: v-approx-car-nth (v-s-approx-list (final-1 , final-2 ) ∧ (n < length (final-1 ))) → v-approx (car (nth (n, final-1 )), car (nth (n, final-2 )))

Theorem: s-approx-cadr-nth (v-s-approx-list (final-1 , final-2 ) ∧ (n < length (final-1 ))) → s-approx (cadr (nth (n, final-1 )), cadr (nth (n, final-2 )))

Definition: simulate-monotone-induction (fn, inputs-1 , state-1 , netlist, inputs-2 , state-2 ) = if listp (inputs-1 )

then simulate-monotone-induction (fn, cdr (inputs-1 ), dual-eval (2,

fn,

car (inputs-1 ), state-1 , netlist),

netlist,

cdr (inputs-2 ), dual-eval (2,

fn,

car (inputs-2 ), state-2 , netlist))

else t endif

Theorem: simulate-monotone (v-approx-list (inputs-1 , inputs-2 ) ∧ s-approx (state-1 , state-2 ) ∧ good-s (state-2 ) ∧ ok-netlistp (0, fn, netlist, '(mem-32x32))

∧ ok-netlistp (2, fn, netlist, '(mem-32x32))) → v-s-approx-list (simulate (fn, inputs-1 , state-1 , netlist),

simulate (fn, inputs-2 , state-2 , netlist))

Theorem: v-approx-list-x-x v-approx-list (x, x)

Definition: doublet-p (x) = (x = list (car (x), cadr (x)))

Definition: doublet-n-simulate-induction (fn, inputs, state, netlist, n) = if n ≃ 0 then t

else doublet-n-simulate-induction (fn, cdr (inputs), dual-eval (2,

fn,

car (inputs), state, netlist),

netlist,

n − 1) endif

Theorem: doublet-n-simulate (n < length (inputs)) → doublet-p (nth (n, simulate (fn, inputs, state, netlist)))

Theorem: doublet-p-equal-approx (doublet-p (x) ∧ doublet-p (y) ∧ v-knownp (car (x)) ∧ s-knownp (cadr (x)) ∧ v-approx (car (x), car (y)) ∧ s-approx (cadr (x), cadr (y))) → (x = y)

Event: Enable doublet-p; name this event ‘doublet-p-off’.

Theorem: length-simulate length (simulate (fn, inputs, state, netlist)) = length (inputs)

Theorem: xs-suffice-for-reset-lemma-verbose ((n < length (inputs)) ∧ s-approx (state-1 , state-2 ) ∧ v-knownp (car (nth (n, simulate (fn, inputs, state-1 , netlist)))) ∧ s-knownp (cadr (nth (n, simulate (fn, inputs, state-1 , netlist))))

∧ good-s (state-2 ) ∧ ok-netlistp (0, fn, netlist, '(mem-32x32)) ∧ ok-netlistp (2, fn, netlist, '(mem-32x32))) → (nth (n, simulate (fn, inputs, state-1 , netlist))

= nth (n, simulate (fn, inputs, state-2 , netlist)))

Theorem: xs-suffice-for-reset-lemma ((n < length (inputs)) ∧ s-approx (state-1 , state-2 ) ∧ v-knownp (car (nth (n, simulate (fn, inputs, state-1 , netlist)))) ∧ s-knownp (cadr (nth (n, simulate (fn, inputs, state-1 , netlist)))) ∧ good-s (state-2 ) ∧ ok-netlistp (0, fn, netlist, '(mem-32x32))) → (nth (n, simulate (fn, inputs, state-1 , netlist))

= nth (n, simulate (fn, inputs, state-2 , netlist)))

Definition: compile-uncompiled-defns = t

Event: Disable compile-uncompiled-defns; name this event ‘compile-uncompiled-defns-on’.

Event: For efficiency, compile those definitions not yet compiled.

Definition: unknown-regfile = list (cons (cons (cons (cons (ram (make-list (32, x)), ram (make-list (32, x))),

cons (ram (make-list (32, x)), ram (make-list (32, x)))), cons (cons (ram (make-list (32, x)), ram (make-list (32, x))),

cons (ram (make-list (32, x)), ram (make-list (32, x))))),

cons (cons (cons (ram (make-list (32, x)), ram (make-list (32, x))),

cons (ram (make-list (32, x)), ram (make-list (32, x)))), cons (cons (ram (make-list (32, x)), ram (make-list (32, x))),

cons (ram (make-list (32, x)), ram (make-list (32, x)))))),

x,

make-list (32, x), make-list (4, x))

Definition: unknown-machine-state = list (unknown-regfile,

make-list (4, x), make-list (32, x), make-list (32, x), make-list (32, x), make-list (32, x), make-list (32, x), x, x, x, make-list (4, x), make-list (40, x))

Definition: unknown-memory-state = list (stub (make-list (32, f)),

       0,
       0,
       0,

x, x, make-list (32, x), make-list (32, x))

Definition: unknown-state = list (unknown-machine-state, unknown-memory-state)

Theorem: chip-system-invariant-unknown-state chip-system-invariant (unknown-state)

Theorem: fm9001-state-structure-unknown-state fm9001-state-structure (unknown-state)

Definition: reset-vector = cons (x,

cons (x, cons (f, cons (f, cons (t, cons (t, cons (t, make-list (4, t))))))))

Definition: run-vector = cons (x,

cons (x, cons (f, cons (t, cons (t, cons (t, cons (t, make-list (4, t))))))))

Definition: reset-sequence = cons (reset-vector, make-list (19, run-vector))

Theorem: chip-system-operating-inputs-p-reset-sequence chip-system-operating-inputs-p (reset-sequence, 20)

Definition: initialized-regfile = list (cons (cons (cons (cons (ram (make-list (32, f)), ram (make-list (32, f))),

cons (ram (make-list (32, f)), ram (make-list (32, f)))), cons (cons (ram (make-list (32, f)), ram (make-list (32, f))),

cons (ram (make-list (32, f)), ram (make-list (32, f))))),

cons (cons (cons (ram (make-list (32, f)), ram (make-list (32, f))),

cons (ram (make-list (32, f)), ram (make-list (32, f)))), cons (cons (ram (make-list (32, f)), ram (make-list (32, f))),

cons (ram (make-list (32, f)), ram (make-list (32, f)))))),

f, make-list (32, f), make-list (4, t))

Definition: initialized-machine-state = list (initialized-regfile,

list (t, f, f, f), make-list (32, f), make-list (32, f), make-list (32, f), make-list (32, f), make-list (32, f), t, t, t, make-list (4, t), cv fetch1 (t,

list (t, t, t, t), make-list (32, f), list (t, f, f, f), make-list (4, t)))

Definition: initialized-memory-state = list (stub (make-list (32, f)),

0,
0,
0,

t, t, make-list (32, f), make-list (32, x))

Definition: final-state = list (initialized-machine-state, initialized-memory-state)

Theorem: reset-works run-fm9001 (unknown-state,

map-up-inputs (reset-sequence), length (reset-sequence))

= final-state

Theorem: unknown-state-okp fm9001-state-structure (unknown-state) ∧ chip-system-invariant (unknown-state) ∧ chip-system-operating-inputs-p (reset-sequence, 20)

Theorem: final-state-okp chip-system& (chip-system$netlist) ∧ fm9001-state-structure (final-state) ∧ macrocycle-invariant (final-state, make-list (4, t))

Theorem: instance-theorem (chip-system& (chip-system$netlist) ∧ fm9001-state-structure (final-state) ∧ macrocycle-invariant (final-state, pc) ∧ chip-system-operating-inputs-p (inputs,

total-microcycles (final-state, map-up-inputs (inputs), n))

∧ operating-inputs-p (map-up-inputs (inputs),

total-microcycles (final-state, map-up-inputs (inputs), n)))

→ (map-up (simulate-dual-eval-2 ('chip-system, inputs, final-state, chip-system$netlist, total-microcycles (final-state,

map-up-inputs (inputs), n)))

= fm9001-interpreter (map-up (final-state), pc, n))

Theorem: fm9001-statep-map-up-final-state fm9001-statep (map-up (final-state))

Definition: reset-vector-chip = cons (x, cons (x,

cons (f,

cons (x,

cons (f,

cons (t,

cons (t,

cons (t,

append (make-list (4, t), make-list (32, x))))))))))

Definition: run-vector-chip-1 = cons (t,

cons (x,

cons (f,

cons (t,

cons (t,

cons (t,

cons (t,

cons (t,

append (make-list (4, t), make-list (32, t))))))))))

Definition: run-vector-chip-2 = cons (f,

cons (x,

cons (f,

cons (t,

cons (t,

cons (t,

cons (t,

cons (t,

append (make-list (4, t), make-list (32, t))))))))))

Definition: reset-sequence-chip-1 = cons (reset-vector-chip, make-list (19, run-vector-chip-1))

Definition: reset-sequence-chip-2 = cons (reset-vector-chip, make-list (19, run-vector-chip-2))

Theorem: reset-sequence-chip-1-vs-2 simulate ('chip, reset-sequence-chip-1, unknown-machine-state, chip$netlist) = simulate ('chip,

reset-sequence-chip-2, unknown-machine-state, chip$netlist)

Theorem: simulate-reset-chip-final-state cadr (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, unknown-machine-state, chip$netlist)))

= car (final-state)

Theorem: for-final-1-of-reset-sequence-chip (((length (reset-sequence-chip-1) − 1) < length (reset-sequence-chip-1)) = t) ∧ v-knownp (car (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, unknown-machine-state, chip$netlist))))

∧ s-knownp (cadr (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, unknown-machine-state, chip$netlist))))

∧ ok-netlistp (0, 'chip, chip$netlist, '(mem-32x32))

Event: Enable for-final-1-of-reset-sequence-chip; name this event ‘for-final-1-of-reset-sequence-chip-off’.

Theorem: xs-suffice-for-reset-chip-lemma-instance (s-approx (unknown-machine-state, state-2 ) ∧ good-s (state-2 )) → (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, unknown-machine-state, chip$netlist)) = nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, state-2 , chip$netlist)))

Theorem: fm9001-machine-statep-p-map-up-initialized-machine-state fm9001-machine-statep (p-map-up (initialized-machine-state))

Definition: v-fourp (x) = if x ≃ nil then x = nil

else fourp (car (x)) ∧ v-fourp (cdr (x)) endif

Definition: all-xs (vec) = if vec ≃ nil then vec = nil

else (car (vec) = x) ∧ all-xs (cdr (vec)) endif

Event: Disable b-knownp; name this event ‘b-knownp-on’.

Event: Disable b-approx; name this event ‘b-approx-on’.

Theorem: all-xs-approximates (all-xs (vec1 ) ∧ (length (vec1 ) = length (vec2 )) ∧ properp (vec2 )) → v-approx (vec1 , vec2 )

Theorem: all-xs-make-list all-xs (make-list (n, x))

Definition: memory-v-fourp (n, width, mem) = if stubp (mem)

then v-fourp (stub-guts (mem)) ∧ (length (stub-guts (mem)) = width) elseif n ≃ 0 then if ramp (mem)

then v-fourp (ram-guts (mem))

∧ (length (ram-guts (mem)) = width) elseif romp (mem) then v-fourp (rom-guts (mem))

∧ (length (rom-guts (mem)) = width) else f endif

else listp (mem)

∧ memory-v-fourp (n − 1, width, car (mem))

∧ memory-v-fourp (n − 1, width, cdr (mem)) endif

Definition: new-machine-state-invariant (machine-state) = ((length (machine-state) = 12)

∧ properp (machine-state)

∧ (length (car (machine-state)) = 4) ∧ properp (car (machine-state)) ∧ all-ramp-mem (4, caar (machine-state)) ∧ fourp (cadar (machine-state)) ∧ memory-v-fourp (4, 32, caar (machine-state)) ∧ v-fourp (caddar (machine-state)) ∧ (length (caddar (machine-state)) = 32) ∧ v-fourp (cadddar (machine-state)) ∧ (length (cadddar (machine-state)) = 4) ∧ v-fourp (cadr (machine-state)) ∧ (length (cadr (machine-state)) = 4) ∧ v-fourp (caddr (machine-state)) ∧ (length (caddr (machine-state)) = 32) ∧ v-fourp (cadddr (machine-state)) ∧ (length (cadddr (machine-state)) = 32) ∧ v-fourp (caddddr (machine-state)) ∧ (length (caddddr (machine-state)) = 32) ∧ v-fourp (cadddddr (machine-state)) ∧ (length (cadddddr (machine-state)) = 32) ∧ v-fourp (caddddddr (machine-state)) ∧ (length (caddddddr (machine-state)) = 32) ∧ fourp (cadddddddr (machine-state)) ∧ fourp (caddddddddr (machine-state)) ∧ fourp (cadddddddddr (machine-state)) ∧ v-fourp (caddddddddddr (machine-state)) ∧ (length (caddddddddddr (machine-state)) = 4) ∧ v-fourp (cadddddddddddr (machine-state)) ∧ (length (cadddddddddddr (machine-state)) = 40))

Theorem: s-approx-make-list ((length (vec1 ) = length (vec2 )) ∧ v-fourp (vec2 ) ∧ all-xs (vec1 )) → s-approx (vec1 , vec2 )

Theorem: v-fourp-implies-properp v-fourp (x) → properp (x)

Theorem: listp-implies-not-fourp listp (x) → (¬ fourp (x))

Theorem: ramp-implies-not-fourp ramp (x) → (¬ fourp (x))

Theorem: romp-implies-not-fourp romp (x) → (¬ fourp (x))

Theorem: stubp-implies-not-fourp stubp (x) → (¬ fourp (x))

Theorem: b-approx-x b-approx (x, y)

Theorem: machine-state-invariant-implies-s-approx-lemma (new-machine-state-invariant (state) ∧ (state = list (list (s1-1 , s1-2 , s1-3 , s1-4 ),

s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 )))

→ s-approx (unknown-machine-state, state)

Theorem: machine-state-invariant-implies-s-approx-lemma-2 ((length (state) = 12) ∧ properp (state) ∧ (length (car (state)) = 4) ∧ properp (car (state))) → (state = list (list (caar (state),

cadar (state), caddar (state), cadddar (state)),

cadr (state), caddr (state), cadddr (state), caddddr (state), cadddddr (state), caddddddr (state), cadddddddr (state), caddddddddr (state), cadddddddddr (state), caddddddddddr (state), cadddddddddddr (state)))

Theorem: machine-state-invariant-implies-s-approx-lemma-3 new-machine-state-invariant (state)

→ ((length (state) = 12)

∧ properp (state)

∧ (length (car (state)) = 4) ∧ properp (car (state)))

Theorem: machine-state-invariant-implies-s-approx new-machine-state-invariant (state) → s-approx (unknown-machine-state, state)

Theorem: good-s-opener (listp (s) → (good-s (s) = (good-s (car (s)) ∧ good-s (cdr (s))))) ∧ (ramp (s)

→ (good-s (s)

= ((length (ram-guts (s)) = mem-width) ∧ properp (ram-guts (s)))))

∧ (romp (s)

→ (good-s (s)

= ((length (rom-guts (s)) = mem-width) ∧ properp (rom-guts (s)))))

∧ (stubp (s)

→ (good-s (s)

= ((length (stub-guts (s)) = mem-width) ∧ properp (stub-guts (s)))))

∧ (fourp (s) → good-s (s))

Theorem: memory-v-fourp-implies-good-s memory-v-fourp (n, 32, v) → good-s (v)

Theorem: v-fourp-is-good-s v-fourp (v) → good-s (v)

Theorem: new-machine-state-invariant-implies-good-s new-machine-state-invariant (state) → good-s (state)

Theorem: xs-suffice-for-reset-chip-final-state-for-any-unknown-state new-machine-state-invariant (state) → (cadr (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, unknown-machine-state, chip$netlist))) = cadr (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, state, chip$netlist))))

Theorem: xs-suffice-for-reset-chip-final-state-for-any-unknown-state-better new-machine-state-invariant (state) → (cadr (nth (length (reset-sequence-chip-1) − 1,

simulate ('chip, reset-sequence-chip-1, state, chip$netlist)))

= initialized-machine-state)

Theorem: new-machine-state-invariant-is-non-trivial new-machine-state-invariant (unknown-machine-state)

Theorem: memory-v-fourp-implies-memory-properp memory-v-fourp (n, width, mem) → memory-properp (n, width, mem)

Theorem: new-machine-state-invariant-implies-machine-state-invariant new-machine-state-invariant (machine-state) → machine-state-invariant (machine-state)

Theorem: fm9001-statep-implies-memory-ok-p-instance memory-okp (32,

           32,

cadr (map-up (list (initialized-machine-state, machine-memory))))

→ fm9001-statep (map-up (list (initialized-machine-state, machine-memory)))

Theorem: fm9001=chip-system-true-after-reset-lemma (chip-system& (netlist) ∧ memory-okp (32,

                32,

cadr (map-up (list (initialized-machine-state, machine-memory))))

∧ chip-system-operating-inputs-p (inputs,

total-microcycles (map-down (map-up (list (initialized-machine-state,

machine-memory))),

map-up-inputs (inputs), n))

∧ operating-inputs-p (map-up-inputs (inputs),

total-microcycles (map-down (map-up (list (initialized-machine-state,

machine-memory))),

map-up-inputs (inputs), n)))

→ (fm9001 (map-up (list (initialized-machine-state, machine-memory)), n)

= map-up (simulate-dual-eval-2 ('chip-system, inputs, map-down (map-up (list (initialized-machine-state,

machine-memory))),

netlist,

total-microcycles (map-down (map-up (list (initialized-machine-state, machine-memory))), map-up-inputs (inputs), n))))

Theorem: map-down-inverts-map-up memory-okp (32,

32,

cadr (map-up (list (initialized-machine-state,

list (memory,

0,
0,
0,

t, t, make-list (32, f), make-list (32, x))))))

→ (map-down (map-up (list (initialized-machine-state,

list (memory,

0,
0,
0,

t, t, make-list (32, f), make-list (32, x)))))

= list (initialized-machine-state, list (memory, 0, 0, 0, t, t, make-list (32, f), make-list (32, x))))

Theorem: cadr-map-up cadr (map-up (list (s, mem))) = car (mem)

Theorem: fm9001=chip-system-true-after-reset (chip-system& (netlist) ∧ memory-okp (32, 32, memory) ∧ chip-system-operating-inputs-p (inputs,

total-microcycles (list (initialized-machine-state,

list (memory,

                       0,
                       0,
                       0,

t, t, make-list (32,

f),

make-list (32, x))), map-up-inputs (inputs), n))

∧ operating-inputs-p (map-up-inputs (inputs),

total-microcycles (list (initialized-machine-state,

list (memory,

0,
0,
0,

t, t, make-list (32, f), make-list (32, x))),

map-up-inputs (inputs), n)))

→ (fm9001 (map-up (list (initialized-machine-state,

list (memory,

0,
0,
0,

t, t, make-list (32, f), make-list (32, x)))),

n) = map-up (simulate-dual-eval-2 ('chip-system,

inputs, list (initialized-machine-state,

list (memory,

0,
0,
0,

t, t, make-list (32, f), make-list (32, x))),

netlist, total-microcycles (list (initialized-machine-state,

list (memory,

             0,
             0,
             0,

t, t, make-list (32,

f),

make-list (32,

x))),

map-up-inputs (inputs), n))))

Event: Enable map-down-inverts-map-up; name this event ‘map-down-inverts-map-up-off’.

Event: Enable b-knownp; name this event ‘b-knownp-off1’.

Event: Enable b-approx; name this event ‘b-approx-off1’.

Theorem: simulate-contains-simulate-dual-eval-2 ((n ≄ 0) ∧ if length (inputs) < n then f

else t endif) → (cadr (nth (n − 1, simulate (fn, inputs, state, netlist)))

= simulate-dual-eval-2 (fn, inputs, state, netlist, n))

Theorem: length-reset-sequence-chip-1 length (reset-sequence-chip-1) = 20

Theorem: reset-chip simulate-dual-eval-2 ('chip,

reset-sequence-chip-1, unknown-machine-state, chip$netlist, length (reset-sequence-chip-1))

= initialized-machine-state

Theorem: reset-chip-from-any-state (s-approx (unknown-machine-state, any-state) ∧ good-s (any-state)) → (simulate-dual-eval-2 ('chip,

reset-sequence-chip-1,

any-state, chip$netlist, length (reset-sequence-chip-1))

= initialized-machine-state)

Theorem: chip-system=fm9001-interpreter$after-reset (chip-system& (netlist) ∧ memory-okp (32, 32, memory)

∧ chip-system-operating-inputs-p (inputs,

total-microcycles (list (initialized-machine-state,

list (memory,

0,

clock,

0,

x, t, make-list (32,

f),

make-list (32,

x))),

map-up-inputs (inputs), instructions))

∧ operating-inputs-p (map-up-inputs (inputs),

total-microcycles (list (initialized-machine-state,

list (memory,

0,

clock,

0,

x, t, make-list (32, f), make-list (32, x))),

map-up-inputs (inputs), instructions)))

→ (map-up (simulate-dual-eval-2 ('chip-system, inputs, list (initialized-machine-state,

list (memory,

0,

clock,

0,

x, t, make-list (32, f), make-list (32, x))),

netlist, total-microcycles (list (initialized-machine-state,

list (memory,

0,

clock,

0,

x, t, make-list (32,

f),

make-list (32,

x))),

map-up-inputs (inputs), instructions)))

= fm9001-interpreter (map-up (list (initialized-machine-state,

list (memory,

                                        0,

clock,

                                        0,

x, t, make-list (32, f), make-list (32, x)))),

make-list (4, t), instructions))

Event: Disable compile-uncompiled-defns; name this event ‘compile-uncompiled-defns-on1’.

Event: For efficiency, compile those definitions not yet compiled.

Theorem: chip-well-formed (top-level-predicate (chip-module$netlist) = t) ∧ (top-level-predicate (chip$netlist) = t)

Theorem: chip-well-formed-after-indexed-names-removed (top-level-predicate (lisp-netlist (chip-module$netlist)) = t) ∧ (top-level-predicate (lisp-netlist (chip$netlist)) = t)

Theorem: chip-well-formed-simple (top-level-predicate-simple (chip-module$netlist) = t) ∧ (top-level-predicate-simple (lisp-netlist (chip-module$netlist)) = t)

Event: Enable chip-well-formed-simple; name this event ‘chip-well-formed-simple-off’.

Event: Enable chip-well-formed-after-indexed-names-removed; name this event ‘chip-well-formed-after-indexed-names-removed-off’.

Event: Enable chip-well-formed; name this event ‘chip-well-formed-off’.

Event: Enable chip-system=fm9001-interpreter$after-reset; name this event ‘chip-system=fm9001-interpreter$after-reset-off’.

Event: Enable reset-chip-from-any-state; name this event ‘reset-chip-from-any-state-off’.

Event: Enable reset-chip; name this event ‘reset-chip-off’.

Event: Enable length-reset-sequence-chip-1; name this event ‘length-reset-sequence-chip-1-off’.

Event: Enable simulate-contains-simulate-dual-eval-2; name this event ‘simulatecontains-simulate-dual-eval-2-off’.

Event: Enable fm9001=chip-system-true-after-reset; name this event ‘fm9001=chipsystem-true-after-reset-off’.

Event: Enable cadr-map-up; name this event ‘cadr-map-up-off’.

Event: Enable fm9001=chip-system-true-after-reset-lemma; name this event ‘fm9001=chip-system-true-after-reset-lemma-off’.

Event: Enable fm9001-statep-implies-memory-ok-p-instance; name this event ‘fm9001-statep-implies-memory-ok-p-instance-off’.

Event: Enable new-machine-state-invariant-implies-machine-state-invariant; name this event ‘new-machine-state-invariant-implies-machine-state-invariant-off’.

Event: Enable memory-v-fourp-implies-memory-properp; name this event ‘memoryv-fourp-implies-memory-properp-off’.

Event: Enable new-machine-state-invariant-is-non-trivial; name this event ‘newmachine-state-invariant-is-non-trivial-off’.

Event: Enable xs-suffice-for-reset-chip-final-state-for-any-unknown-state-better; name this event ‘xs-suffice-for-reset-chip-final-state-for-any-unknown-state-better-off’.

Event: Enable xs-suffice-for-reset-chip-final-state-for-any-unknown-state; name this event ‘xs-suffice-for-reset-chip-final-state-for-any-unknown-state-off’. Event: Enable new-machine-state-invariant-implies-good-s; name this event ‘new-machine-state-invariant-implies-good-s-off’. Event: Enable v-fourp-is-good-s; name this event ‘v-fourp-is-good-s-off’. Event: Enable memory-v-fourp-implies-good-s; name this event ‘memory-v-fourp-implies-good-s-off’. Event: Enable good-s-opener; name this event ‘good-s-opener-off’. Event: Enable machine-state-invariant-implies-s-approx; name this event ‘machinestate-invariant-implies-s-approx-off’. Event: Enable machine-state-invariant-implies-s-approx-lemma-3; name this event ‘machine-state-invariant-implies-s-approx-lemma-3-off’. Event: Enable machine-state-invariant-implies-s-approx-lemma-2; name this event ‘machine-state-invariant-implies-s-approx-lemma-2-off’. Event: Enable machine-state-invariant-implies-s-approx-lemma; name this event ‘machine-state-invariant-implies-s-approx-lemma-off’. Event: Enable b-approx-x; name this event ‘b-approx-x-off’. Event: Enable stubp-implies-not-fourp; name this event ‘stubp-implies-not-fourp-off’. Event: Enable romp-implies-not-fourp; name this event ‘romp-implies-not-fourp-off’. Event: Enable ramp-implies-not-fourp; name this event ‘ramp-implies-not-fourp-off’. Event: Enable listp-implies-not-fourp; name this event ‘listp-implies-not-fourp-off’. Event: Enable v-fourp-implies-properp; name this event ‘v-fourp-implies-properp-off’. Event: Enable s-approx-make-list; name this event ‘s-approx-make-list-off’. Event: Enable new-machine-state-invariant; name this event ‘new-machine-state-invariant-off’. Event: Enable *1*new-machine-state-invariant; name this event ‘g*1*newmachine-state-invariant-off’. Event: Enable memory-v-fourp; name this event ‘memory-v-fourp-off’. Event: Enable *1*memory-v-fourp; name this event ‘g*1*memory-v-fourp-off’. Event: Enable all-xs-make-list; name this event ‘all-xs-make-list-off’. Event: Enable all-xs-approximates; name this event ‘all-xs-approximates-off’. Event: Enable all-xs; name this event ‘all-xs-off’. Event: Enable *1*all-xs; name this event ‘g*1*all-xs-off’. Event: Enable v-fourp; name this event ‘v-fourp-off’. Event: Enable *1*v-fourp; name this event ‘g*1*v-fourp-off’. Event: Enable fm9001-machine-statep-p-map-up-initialized-machine-state; name this event ‘fm9001-machine-statep-p-map-up-initialized-machine-state-off’. Event: Enable xs-suffice-for-reset-chip-lemma-instance; name this event ‘xssuffice-for-reset-chip-lemma-instance-off’. Event: Enable simulate-reset-chip-final-state; name this event ‘simulate-reset-chip-final-state-off’. Event: Enable reset-sequence-chip-1-vs-2; name this event ‘reset-sequence-chip-1-vs-2-off’. Event: Enable reset-sequence-chip-2; name this event ‘reset-sequence-chip-2-off’. Event: Enable *1*reset-sequence-chip-2; name this event ‘g*1*reset-sequence-chip-2-off’. Event: Enable reset-sequence-chip-1; name this event ‘reset-sequence-chip-1-off’. Event: Enable *1*reset-sequence-chip-1; name this event ‘g*1*reset-sequence-chip-1-off’. Event: Enable run-vector-chip-2; name this event ‘run-vector-chip-2-off’. Event: Enable *1*run-vector-chip-2; name this event ‘g*1*run-vector-chip-2-off’. Event: Enable run-vector-chip-1; name this event ‘run-vector-chip-1-off’. Event: Enable *1*run-vector-chip-1; name this event ‘g*1*run-vector-chip-1-off’. Event: Enable reset-vector-chip; name this event ‘reset-vector-chip-off’. Event: Enable *1*reset-vector-chip; name this event ‘g*1*reset-vector-chip-off’. Event: Enable fm9001-statep-map-up-final-state; name this event ‘fm9001statep-map-up-final-state-off’. Event: Enable instance-theorem; name this event ‘instance-theorem-off’.

Event: Enable final-state-okp; name this event ‘final-state-okp-off’. Event: Enable unknown-state-okp; name this event ‘unknown-state-okp-off’. Event: Enable reset-works; name this event ‘reset-works-off’. Event: Enable final-state; name this event ‘final-state-off’. Event: Enable *1*final-state; name this event ‘g*1*final-state-off’. Event: Enable initialized-memory-state; name this event ‘initialized-memory-state-off’. Event: Enable *1*initialized-memory-state; name this event ‘g*1*initializedmemory-state-off’. Event: Enable initialized-machine-state; name this event ‘initialized-machine-state-off’. Event: Enable *1*initialized-machine-state; name this event ‘g*1*initializedmachine-state-off’. Event: Enable initialized-regfile; name this event ‘initialized-regfile-off’. Event: Enable *1*initialized-regfile; name this event ‘g*1*initialized-regfile-off’. Event: Enable chip-system-operating-inputs-p-reset-sequence; name this event ‘chip-system-operating-inputs-p-reset-sequence-off’. Event: Enable reset-sequence; name this event ‘reset-sequence-off’. Event: Enable *1*reset-sequence; name this event ‘g*1*reset-sequence-off’. Event: Enable run-vector; name this event ‘run-vector-off’.

Event: Enable *1*run-vector; name this event ‘g*1*run-vector-off’. Event: Enable reset-vector; name this event ‘reset-vector-off’. Event: Enable *1*reset-vector; name this event ‘g*1*reset-vector-off’. Event: Enable fm9001-state-structure-unknown-state; name this event ‘fm9001state-structure-unknown-state-off’. Event: Enable chip-system-invariant-unknown-state; name this event ‘chipsystem-invariant-unknown-state-off’. Event: Enable unknown-state; name this event ‘unknown-state-off’. Event: Enable *1*unknown-state; name this event ‘g*1*unknown-state-off’. Event: Enable unknown-memory-state; name this event ‘unknown-memory-state-off’. Event: Enable *1*unknown-memory-state; name this event ‘g*1*unknownmemory-state-off’. Event: Enable unknown-machine-state; name this event ‘unknown-machine-state-off’. Event: Enable *1*unknown-machine-state; name this event ‘g*1*unknownmachine-state-off’. Event: Enable unknown-regfile; name this event ‘unknown-regfile-off’. Event: Enable *1*unknown-regfile; name this event ‘g*1*unknown-regfile-off’. Event: Enable compile-uncompiled-defns; name this event ‘compile-uncompiled-defns-off’. Event: Enable *1*compile-uncompiled-defns; name this event ‘g*1*compileuncompiled-defns-off’.

Event: Enable xs-suffice-for-reset-lemma; name this event ‘xs-suffice-for-reset-lemma-off’. Event: Enable xs-suffice-for-reset-lemma-verbose; name this event ‘xs-suffice-for-reset-lemma-verbose-off’. Event: Enable length-simulate; name this event ‘length-simulate-off’. Event: Enable doublet-p-equal-approx; name this event ‘doublet-p-equal-approx-off’. Event: Enable doublet-n-simulate; name this event ‘doublet-n-simulate-off’. Event: Enable doublet-n-simulate-induction; name this event ‘doublet-n-simulate-induction-off’. Event: Enable *1*doublet-n-simulate-induction; name this event ‘g*1*doubletn-simulate-induction-off’. Event: Enable *1*doublet-p; name this event ‘g*1*doublet-p-off’. Event: Enable v-approx-list-x-x; name this event ‘v-approx-list-x-x-off’. Event: Enable simulate-monotone; name this event ‘simulate-monotone-off’. Event: Enable simulate-monotone-induction; name this event ‘simulate-monotone-induction-off’. Event: Enable *1*simulate-monotone-induction; name this event ‘g*1*simulatemonotone-induction-off’. Event: Enable s-approx-cadr-nth; name this event ‘s-approx-cadr-nth-off’. Event: Enable v-approx-car-nth; name this event ‘v-approx-car-nth-off’. Event: Enable nat-lst-lst-induction; name this event ‘nat-lst-lst-induction-off’.

Event: Enable *1*nat-lst-lst-induction; name this event ‘g*1*nat-lst-lst-induction-off’. Event: Enable v-s-approx-list; name this event ‘v-s-approx-list-off’. Event: Enable *1*v-s-approx-list; name this event ‘g*1*v-s-approx-list-off’. Event: Enable v-approx-list; name this event ‘v-approx-list-off’. Event: Enable *1*v-approx-list; name this event ‘g*1*v-approx-list-off’. Event: Enable good-s-preserved; name this event ‘good-s-preserved-off’. Event: Enable primp-preserves-good-s; name this event ‘primp-preserves-good-s-off’. Event: Enable dp-ram-16x32-preserves-good-s; name this event ‘dp-ram-16x32-preserves-good-s-off’. Event: Enable good-s-write-mem; name this event ‘good-s-write-mem-off’. Event: Enable good-s-write-mem-1; name this event ‘good-s-write-mem-1-off’. Event: Enable good-s-constant-ram; name this event ‘good-s-constant-ram-off’. Event: Enable vss-preserves-good-s; name this event ‘vss-preserves-good-s-off’. Event: Enable vdd-parametric-preserves-good-s; name this event ‘vdd-parametric-preserves-good-s-off’. Event: Enable vdd-preserves-good-s; name this event ‘vdd-preserves-good-s-off’. Event: Enable ttl-tri-output-fast-preserves-good-s; name this event ‘ttl-tri-output-fast-preserves-good-s-off’.

Event: Enable ttl-tri-output-preserves-good-s; name this event ‘ttl-tri-output-preserves-good-s-off’.

Event: Enable ttl-output-fast-preserves-good-s; name this event ‘ttl-output-fast-preserves-good-s-off’.

Event: Enable ttl-output-parametric-preserves-good-s; name this event ‘ttloutput-parametric-preserves-good-s-off’.

Event: Enable ttl-output-preserves-good-s; name this event ‘ttl-output-preserves-good-s-off’.

Event: Enable ttl-input-preserves-good-s; name this event ‘ttl-input-preserves-good-s-off’.

Event: Enable ttl-clk-input-preserves-good-s; name this event ‘ttl-clk-input-preserves-good-s-off’.

Event: Enable ttl-bidirect-preserves-good-s; name this event ‘ttl-bidirect-preserves-good-s-off’.

Event: Enable pullup-preserves-good-s; name this event ‘pullup-preserves-good-s-off’.

Event: Enable t-wire-preserves-good-s; name this event ‘t-wire-preserves-good-s-off’.

Event: Enable t-buf-preserves-good-s; name this event ‘t-buf-preserves-good-s-off’.

Event: Enable ram-enable-circuit-preserves-good-s; name this event ‘ram-enable-circuit-preserves-good-s-off’.

Event: Enable id-preserves-good-s; name this event ‘id-preserves-good-s-off’.

Event: Enable fd1slp-preserves-good-s; name this event ‘fd1slp-preserves-good-s-off’.

Event: Enable fd1sp-preserves-good-s; name this event ‘fd1sp-preserves-good-s-off’.

Event: Enable fd1s-preserves-good-s; name this event ‘fd1s-preserves-good-s-off’.

Event: Enable fd1-preserves-good-s; name this event ‘fd1-preserves-good-s-off’.

Event: Enable procmon-preserves-good-s; name this event ‘procmon-preserves-good-s-off’.

Event: Enable del10-preserves-good-s; name this event ‘del10-preserves-good-s-off’.

Event: Enable del4-preserves-good-s; name this event ‘del4-preserves-good-s-off’.

Event: Enable del2-preserves-good-s; name this event ‘del2-preserves-good-s-off’.

Event: Enable b-xor3-preserves-good-s; name this event ‘b-xor3-preserves-good-s-off’.

Event: Enable b-xor-preserves-good-s; name this event ‘b-xor-preserves-good-s-off’.

Event: Enable b-or4-preserves-good-s; name this event ‘b-or4-preserves-good-s-off’.

Event: Enable b-or3-preserves-good-s; name this event ‘b-or3-preserves-good-s-off’.

Event: Enable b-or-preserves-good-s; name this event ‘b-or-preserves-good-s-off’.

Event: Enable b-not-ivap-preserves-good-s; name this event ‘b-not-ivap-preserves-good-s-off’.

Event: Enable b-not-b4ip-preserves-good-s; name this event ‘b-not-b4ip-preserves-good-s-off’.

Event: Enable b-not-preserves-good-s; name this event ‘b-not-preserves-good-s-off’.

Event: Enable b-nor8-preserves-good-s; name this event ‘b-nor8-preserves-good-s-off’.

Event: Enable b-nor6-preserves-good-s; name this event ‘b-nor6-preserves-good-s-off’.

Event: Enable b-nor5-preserves-good-s; name this event ‘b-nor5-preserves-good-s-off’.

Event: Enable b-nor4-preserves-good-s; name this event ‘b-nor4-preserves-good-s-off’.

Event: Enable b-nor3-preserves-good-s; name this event ‘b-nor3-preserves-good-s-off’.

Event: Enable b-nor-preserves-good-s; name this event ‘b-nor-preserves-good-s-off’.

Event: Enable b-nbuf-preserves-good-s; name this event ‘b-nbuf-preserves-good-s-off’.

Event: Enable b-nand8-preserves-good-s; name this event ‘b-nand8-preserves-good-s-off’.

Event: Enable b-nand6-preserves-good-s; name this event ‘b-nand6-preserves-good-s-off’.

Event: Enable b-nand5-preserves-good-s; name this event ‘b-nand5-preserves-good-s-off’.

Event: Enable b-nand4-preserves-good-s; name this event ‘b-nand4-preserves-good-s-off’.

Event: Enable b-nand3-preserves-good-s; name this event ‘b-nand3-preserves-good-s-off’.

Event: Enable b-nand-preserves-good-s; name this event ‘b-nand-preserves-good-s-off’.

Event: Enable b-if-preserves-good-s; name this event ‘b-if-preserves-good-s-off’.

Event: Enable b-equv3-preserves-good-s; name this event ‘b-equv3-preserves-good-s-off’.

Event: Enable b-equv-preserves-good-s; name this event ‘b-equv-preserves-good-s-off’.

Event: Enable b-and4-preserves-good-s; name this event ‘b-and4-preserves-good-s-off’.

Event: Enable b-and3-preserves-good-s; name this event ‘b-and3-preserves-good-s-off’.

Event: Enable b-and-preserves-good-s; name this event ‘b-and-preserves-good-s-off’.

Event: Enable ao7-preserves-good-s; name this event ‘ao7-preserves-good-s-off’.

Event: Enable ao6-preserves-good-s; name this event ‘ao6-preserves-good-s-off’.

Event: Enable ao4-preserves-good-s; name this event ‘ao4-preserves-good-s-off’.

Event: Enable ao2-preserves-good-s; name this event ‘ao2-preserves-good-s-off’.

Event: Enable good-s-0; name this event ‘good-s-0-off’.

Event: Enable f-if-preserves-good-s; name this event ‘f-if-preserves-good-s-off’. Event: Enable f-buf-preserves-good-s; name this event ‘f-buf-preserves-good-s-off’. Event: Enable good-s-collect-value; name this event ‘good-s-collect-value-off’. Event: Enable dual-eval-monotone; name this event ‘dual-eval-monotone-off’. Event: Enable good-s-value; name this event ‘good-s-value-off’. Event: Enable good-s-alist-pairlist; name this event ‘good-s-alist-pairlist-off’. Event: Enable good-s-alist; name this event ‘good-s-alist-off’. Event: Enable *1*good-s-alist; name this event ‘g*1*good-s-alist-off’. Event: Enable dual-eval-monotone-no-ram; name this event ‘dual-eval-monotone-no-ram-off’. Event: Enable ok-netlistp-reduction-rewrite; name this event ‘ok-netlistp-reduction-rewrite-off’. Event: Enable ok-netlistp-reduction; name this event ‘ok-netlistp-reduction-off’. Event: Enable s-approx-alist-implies-s-approx-collect-value; name this event ‘s-approx-alist-implies-s-approx-collect-value-off’. Event: Enable s-approx-implies-s-approx-alist; name this event ‘s-approx-implies-s-approx-alist-off’. Event: Enable alistp-dual-eval-3; name this event ‘alistp-dual-eval-3-off’. Event: Enable s-approx-alist-implies-s-approx-list-collect-value; name this event ‘s-approx-alist-implies-s-approx-list-collect-value-off’.

Event: Enable double-cdr-induction; name this event ‘double-cdr-induction-off’. Event: Enable *1*double-cdr-induction; name this event ‘g*1*double-cdr-induction-off’. Event: Enable v-approx-alist-append; name this event ‘v-approx-alist-append-off’. Event: Enable s-approx-alist-implies-s-approx-value; name this event ‘s-approx-alist-implies-s-approx-value-off’. Event: Enable alistp-opener; name this event ‘alistp-opener-off’. Event: Enable v-approx-implies-v-approx-alist; name this event ‘v-approx-implies-v-approx-alist-off’. Event: Enable s-approx-list-implies-s-approx-alist; name this event ‘s-approx-list-implies-s-approx-alist-off’. Event: Enable s-approx-list; name this event ‘s-approx-list-off’. Event: Enable *1*s-approx-list; name this event ‘g*1*s-approx-list-off’. Event: Enable v-approx-alist-implies-v-approx-collect-value; name this event ‘v-approx-alist-implies-v-approx-collect-value-off’. Event: Enable alistp-dual-eval-1; name this event ‘alistp-dual-eval-1-off’. Event: Enable alistp-append; name this event ‘alistp-append-off’. Event: Enable alistp-pairlist; name this event ‘alistp-pairlist-off’. Event: Enable v-approx-alist-implies-b-approx-value; name this event ‘v-approx-alist-implies-b-approx-value-off’. Event: Enable dual-eval-monotone-induction; name this event ‘dual-eval-monotone-induction-off’. Event: Enable *1*dual-eval-monotone-induction; name this event ‘g*1*dualeval-monotone-induction-off’. Event: Enable primp-monotone; name this event ‘primp-monotone-off’. Event: Enable ok-netlistp; name this event ‘ok-netlistp-off’. Event: Enable *1*ok-netlistp; name this event ‘g*1*ok-netlistp-off’. Event: Enable dual-port-ram-state-body; name this event ‘dual-port-ram-state-body-off’. Event: Enable *1*dual-port-ram-state-body; name this event ‘g*1*dual-port-ram-state-body-off’. Event: Enable dual-port-ram-state-monotone; name this event ‘dual-port-ram-state-monotone-off’. Event: Enable write-mem1-double-induction; name this event ‘write-mem1-double-induction-off’. Event: Enable *1*write-mem1-double-induction; name this event ‘g*1*writemem1-double-induction-off’. Event: Enable write-mem1-monotone-induction; name this event ‘write-mem1-monotone-induction-off’. Event: Enable *1*write-mem1-monotone-induction; name this event ‘g*1*writemem1-monotone-induction-off’. Event: Enable dual-port-ram-value-body; name this event ‘dual-port-ram-value-body-off’. Event: Enable *1*dual-port-ram-value-body; name this event ‘g*1*dual-port-ram-value-body-off’.

Event: Enable v-approx-x-x; name this event ‘v-approx-x-x-off1’. Event: Enable read-mem1-monotone-induction; name this event ‘read-mem1-monotone-induction-off’. Event: Enable *1*read-mem1-monotone-induction; name this event ‘g*1*readmem1-monotone-induction-off’. Event: Enable bvp-rev1; name this event ‘bvp-rev1-off’. Event: Enable vss-monotone; name this event ‘vss-monotone-off’. Event: Enable dual-eval-vss-state; name this event ‘dual-eval-vss-state-off’. Event: Enable dual-eval-vss-value; name this event ‘dual-eval-vss-value-off’. Event: Enable vdd-parametric-monotone; name this event ‘vdd-parametric-monotone-off’. Event: Enable dual-eval-vdd-parametric-state; name this event ‘dual-eval-vdd-parametric-state-off’. Event: Enable dual-eval-vdd-parametric-value; name this event ‘dual-eval-vdd-parametric-value-off’. Event: Enable vdd-monotone; name this event ‘vdd-monotone-off’. Event: Enable dual-eval-vdd-state; name this event ‘dual-eval-vdd-state-off’. Event: Enable dual-eval-vdd-value; name this event ‘dual-eval-vdd-value-off’. Event: Enable ttl-tri-output-fast-monotone; name this event ‘ttl-tri-output-fast-monotone-off’. Event: Enable dual-eval-ttl-tri-output-fast-state; name this event ‘dual-eval-ttl-tri-output-fast-state-off’.

Event: Enable dual-eval-ttl-tri-output-fast-value; name this event ‘dual-eval-ttl-tri-output-fast-value-off’.

Event: Enable ttl-tri-output-monotone; name this event ‘ttl-tri-output-monotone-off’.

Event: Enable dual-eval-ttl-tri-output-state; name this event ‘dual-eval-ttl-tri-output-state-off’.

Event: Enable dual-eval-ttl-tri-output-value; name this event ‘dual-eval-ttl-tri-output-value-off’.

Event: Enable ttl-output-fast-monotone; name this event ‘ttl-output-fast-monotone-off’.

Event: Enable dual-eval-ttl-output-fast-state; name this event ‘dual-eval-ttl-output-fast-state-off’.

Event: Enable dual-eval-ttl-output-fast-value; name this event ‘dual-eval-ttl-output-fast-value-off’.

Event: Enable ttl-output-parametric-monotone; name this event ‘ttl-output-parametric-monotone-off’.

Event: Enable dual-eval-ttl-output-parametric-state; name this event ‘dualeval-ttl-output-parametric-state-off’.

Event: Enable dual-eval-ttl-output-parametric-value; name this event ‘dualeval-ttl-output-parametric-value-off’.

Event: Enable ttl-output-monotone; name this event ‘ttl-output-monotone-off’.

Event: Enable dual-eval-ttl-output-state; name this event ‘dual-eval-ttl-output-state-off’.

Event: Enable dual-eval-ttl-output-value; name this event ‘dual-eval-ttl-output-value-off’.

Event: Enable ttl-input-monotone; name this event ‘ttl-input-monotone-off’. Event: Enable dual-eval-ttl-input-state; name this event ‘dual-eval-ttl-input-state-off’. Event: Enable dual-eval-ttl-input-value; name this event ‘dual-eval-ttl-input-value-off’. Event: Enable ttl-clk-input-monotone; name this event ‘ttl-clk-input-monotone-off’. Event: Enable dual-eval-ttl-clk-input-state; name this event ‘dual-eval-ttl-clk-input-state-off’. Event: Enable dual-eval-ttl-clk-input-value; name this event ‘dual-eval-ttl-clk-input-value-off’. Event: Enable ttl-bidirect-monotone; name this event ‘ttl-bidirect-monotone-off’. Event: Enable dual-eval-ttl-bidirect-state; name this event ‘dual-eval-ttl-bidirect-state-off’. Event: Enable dual-eval-ttl-bidirect-value; name this event ‘dual-eval-ttl-bidirect-value-off’. Event: Enable pullup-monotone; name this event ‘pullup-monotone-off’. Event: Enable dual-eval-pullup-state; name this event ‘dual-eval-pullup-state-off’. Event: Enable dual-eval-pullup-value; name this event ‘dual-eval-pullup-value-off’. Event: Enable t-wire-monotone; name this event ‘t-wire-monotone-off’. Event: Enable dual-eval-t-wire-state; name this event ‘dual-eval-t-wire-state-off’. Event: Enable dual-eval-t-wire-value; name this event ‘dual-eval-t-wire-value-off’. Event: Enable t-buf-monotone; name this event ‘t-buf-monotone-off’. Event: Enable dual-eval-t-buf-state; name this event ‘dual-eval-t-buf-state-off’. Event: Enable dual-eval-t-buf-value; name this event ‘dual-eval-t-buf-value-off’. Event: Enable ram-enable-circuit-monotone; name this event ‘ram-enable-circuit-monotone-off’. Event: Enable dual-eval-ram-enable-circuit-state; name this event ‘dual-eval-ram-enable-circuit-state-off’. Event: Enable dual-eval-ram-enable-circuit-value; name this event ‘dual-eval-ram-enable-circuit-value-off’. Event: Enable id-monotone; name this event ‘id-monotone-off’. Event: Enable dual-eval-id-state; name this event ‘dual-eval-id-state-off’. Event: Enable dual-eval-id-value; name this event ‘dual-eval-id-value-off’. Event: Enable fd1slp-monotone; name this event ‘fd1slp-monotone-off’. Event: Enable dual-eval-fd1slp-state; name this event ‘dual-eval-fd1slp-state-off’. Event: Enable dual-eval-fd1slp-value; name this event ‘dual-eval-fd1slp-value-off’. Event: Enable fd1sp-monotone; name this event ‘fd1sp-monotone-off’.

Event: Enable dual-eval-fd1sp-state; name this event ‘dual-eval-fd1sp-state-off’. Event: Enable dual-eval-fd1sp-value; name this event ‘dual-eval-fd1sp-value-off’. Event: Enable fd1s-monotone; name this event ‘fd1s-monotone-off’. Event: Enable dual-eval-fd1s-state; name this event ‘dual-eval-fd1s-state-off’. Event: Enable dual-eval-fd1s-value; name this event ‘dual-eval-fd1s-value-off’. Event: Enable fd1-monotone; name this event ‘fd1-monotone-off’. Event: Enable dual-eval-fd1-state; name this event ‘dual-eval-fd1-state-off’. Event: Enable dual-eval-fd1-value; name this event ‘dual-eval-fd1-value-off’. Event: Enable procmon-monotone; name this event ‘procmon-monotone-off’. Event: Enable dual-eval-procmon-state; name this event ‘dual-eval-procmon-state-off’. Event: Enable dual-eval-procmon-value; name this event ‘dual-eval-procmon-value-off’. Event: Enable del10-monotone; name this event ‘del10-monotone-off’. Event: Enable dual-eval-del10-state; name this event ‘dual-eval-del10-state-off’. Event: Enable dual-eval-del10-value; name this event ‘dual-eval-del10-value-off’. Event: Enable del4-monotone; name this event ‘del4-monotone-off’.

Event: Enable dual-eval-del4-state; name this event ‘dual-eval-del4-state-off’. Event: Enable dual-eval-del4-value; name this event ‘dual-eval-del4-value-off’. Event: Enable del2-monotone; name this event ‘del2-monotone-off’. Event: Enable dual-eval-del2-state; name this event ‘dual-eval-del2-state-off’. Event: Enable dual-eval-del2-value; name this event ‘dual-eval-del2-value-off’. Event: Enable b-xor3-monotone; name this event ‘b-xor3-monotone-off’. Event: Enable dual-eval-b-xor3-state; name this event ‘dual-eval-b-xor3-state-off’. Event: Enable dual-eval-b-xor3-value; name this event ‘dual-eval-b-xor3-value-off’. Event: Enable b-xor-monotone; name this event ‘b-xor-monotone-off’. Event: Enable dual-eval-b-xor-state; name this event ‘dual-eval-b-xor-state-off’. Event: Enable dual-eval-b-xor-value; name this event ‘dual-eval-b-xor-value-off’. Event: Enable b-or4-monotone; name this event ‘b-or4-monotone-off’. Event: Enable dual-eval-b-or4-state; name this event ‘dual-eval-b-or4-state-off’. Event: Enable dual-eval-b-or4-value; name this event ‘dual-eval-b-or4-value-off’. Event: Enable b-or3-monotone; name this event ‘b-or3-monotone-off’.

Event: Enable dual-eval-b-or3-state; name this event ‘dual-eval-b-or3-state-off’. Event: Enable dual-eval-b-or3-value; name this event ‘dual-eval-b-or3-value-off’. Event: Enable b-or-monotone; name this event ‘b-or-monotone-off’. Event: Enable dual-eval-b-or-state; name this event ‘dual-eval-b-or-state-off’. Event: Enable dual-eval-b-or-value; name this event ‘dual-eval-b-or-value-off’. Event: Enable b-not-ivap-monotone; name this event ‘b-not-ivap-monotone-off’. Event: Enable dual-eval-b-not-ivap-state; name this event ‘dual-eval-b-not-ivap-state-off’. Event: Enable dual-eval-b-not-ivap-value; name this event ‘dual-eval-b-not-ivap-value-off’. Event: Enable b-not-b4ip-monotone; name this event ‘b-not-b4ip-monotone-off’. Event: Enable dual-eval-b-not-b4ip-state; name this event ‘dual-eval-b-not-b4ip-state-off’. Event: Enable dual-eval-b-not-b4ip-value; name this event ‘dual-eval-b-not-b4ip-value-off’. Event: Enable b-not-monotone; name this event ‘b-not-monotone-off’. Event: Enable dual-eval-b-not-state; name this event ‘dual-eval-b-not-state-off’. Event: Enable dual-eval-b-not-value; name this event ‘dual-eval-b-not-value-off’.

Event: Enable b-nor8-monotone; name this event ‘b-nor8-monotone-off’. Event: Enable dual-eval-b-nor8-state; name this event ‘dual-eval-b-nor8-state-off’. Event: Enable dual-eval-b-nor8-value; name this event ‘dual-eval-b-nor8-value-off’. Event: Enable b-nor6-monotone; name this event ‘b-nor6-monotone-off’. Event: Enable dual-eval-b-nor6-state; name this event ‘dual-eval-b-nor6-state-off’. Event: Enable dual-eval-b-nor6-value; name this event ‘dual-eval-b-nor6-value-off’. Event: Enable b-nor5-monotone; name this event ‘b-nor5-monotone-off’. Event: Enable dual-eval-b-nor5-state; name this event ‘dual-eval-b-nor5-state-off’. Event: Enable dual-eval-b-nor5-value; name this event ‘dual-eval-b-nor5-value-off’. Event: Enable b-nor4-monotone; name this event ‘b-nor4-monotone-off’. Event: Enable dual-eval-b-nor4-state; name this event ‘dual-eval-b-nor4-state-off’. Event: Enable dual-eval-b-nor4-value; name this event ‘dual-eval-b-nor4-value-off’. Event: Enable b-nor3-monotone; name this event ‘b-nor3-monotone-off’. Event: Enable dual-eval-b-nor3-state; name this event ‘dual-eval-b-nor3-state-off’.

Event: Enable dual-eval-b-nor3-value; name this event ‘dual-eval-b-nor3-value-off’. Event: Enable b-nor-monotone; name this event ‘b-nor-monotone-off’. Event: Enable dual-eval-b-nor-state; name this event ‘dual-eval-b-nor-state-off’. Event: Enable dual-eval-b-nor-value; name this event ‘dual-eval-b-nor-value-off’. Event: Enable b-nbuf-monotone; name this event ‘b-nbuf-monotone-off’. Event: Enable dual-eval-b-nbuf-state; name this event ‘dual-eval-b-nbuf-state-off’. Event: Enable dual-eval-b-nbuf-value; name this event ‘dual-eval-b-nbuf-value-off’. Event: Enable b-nand8-monotone; name this event ‘b-nand8-monotone-off’. Event: Enable dual-eval-b-nand8-state; name this event ‘dual-eval-b-nand8-state-off’. Event: Enable dual-eval-b-nand8-value; name this event ‘dual-eval-b-nand8-value-off’. Event: Enable b-nand6-monotone; name this event ‘b-nand6-monotone-off’. Event: Enable dual-eval-b-nand6-state; name this event ‘dual-eval-b-nand6-state-off’. Event: Enable dual-eval-b-nand6-value; name this event ‘dual-eval-b-nand6-value-off’. Event: Enable b-nand5-monotone; name this event ‘b-nand5-monotone-off’.

Event: Enable dual-eval-b-nand5-state; name this event ‘dual-eval-b-nand5-state-off’. Event: Enable dual-eval-b-nand5-value; name this event ‘dual-eval-b-nand5-value-off’. Event: Enable b-nand4-monotone; name this event ‘b-nand4-monotone-off’. Event: Enable dual-eval-b-nand4-state; name this event ‘dual-eval-b-nand4-state-off’. Event: Enable dual-eval-b-nand4-value; name this event ‘dual-eval-b-nand4-value-off’. Event: Enable b-nand3-monotone; name this event ‘b-nand3-monotone-off’. Event: Enable dual-eval-b-nand3-state; name this event ‘dual-eval-b-nand3-state-off’. Event: Enable dual-eval-b-nand3-value; name this event ‘dual-eval-b-nand3-value-off’. Event: Enable b-nand-monotone; name this event ‘b-nand-monotone-off’. Event: Enable dual-eval-b-nand-state; name this event ‘dual-eval-b-nand-state-off’. Event: Enable dual-eval-b-nand-value; name this event ‘dual-eval-b-nand-value-off’. Event: Enable b-if-monotone; name this event ‘b-if-monotone-off’. Event: Enable dual-eval-b-if-state; name this event ‘dual-eval-b-if-state-off’. Event: Enable dual-eval-b-if-value; name this event ‘dual-eval-b-if-value-off’. Event: Enable b-equv3-monotone; name this event ‘b-equv3-monotone-off’.

Event: Enable dual-eval-b-equv3-state; name this event ‘dual-eval-b-equv3-state-off’. Event: Enable dual-eval-b-equv3-value; name this event ‘dual-eval-b-equv3-value-off’. Event: Enable b-equv-monotone; name this event ‘b-equv-monotone-off’. Event: Enable dual-eval-b-equv-state; name this event ‘dual-eval-b-equv-state-off’. Event: Enable dual-eval-b-equv-value; name this event ‘dual-eval-b-equv-value-off’. Event: Enable b-and4-monotone; name this event ‘b-and4-monotone-off’. Event: Enable dual-eval-b-and4-state; name this event ‘dual-eval-b-and4-state-off’. Event: Enable dual-eval-b-and4-value; name this event ‘dual-eval-b-and4-value-off’. Event: Enable b-and3-monotone; name this event ‘b-and3-monotone-off’. Event: Enable dual-eval-b-and3-state; name this event ‘dual-eval-b-and3-state-off’. Event: Enable dual-eval-b-and3-value; name this event ‘dual-eval-b-and3-value-off’. Event: Enable b-and-monotone; name this event ‘b-and-monotone-off’. Event: Enable dual-eval-b-and-state; name this event ‘dual-eval-b-and-state-off’. Event: Enable dual-eval-b-and-value; name this event ‘dual-eval-b-and-value-off’.

Event: Enable ao7-monotone; name this event ‘ao7-monotone-off’. Event: Enable dual-eval-ao7-state; name this event ‘dual-eval-ao7-state-off’. Event: Enable dual-eval-ao7-value; name this event ‘dual-eval-ao7-value-off’. Event: Enable ao6-monotone; name this event ‘ao6-monotone-off’. Event: Enable dual-eval-ao6-state; name this event ‘dual-eval-ao6-state-off’. Event: Enable dual-eval-ao6-value; name this event ‘dual-eval-ao6-value-off’. Event: Enable ao4-monotone; name this event ‘ao4-monotone-off’. Event: Enable dual-eval-ao4-state; name this event ‘dual-eval-ao4-state-off’. Event: Enable dual-eval-ao4-value; name this event ‘dual-eval-ao4-value-off’. Event: Enable ao2-monotone; name this event ‘ao2-monotone-off’. Event: Enable dual-eval-ao2-state; name this event ‘dual-eval-ao2-state-off’. Event: Enable dual-eval-ao2-value; name this event ‘dual-eval-ao2-value-off’. Event: Enable fourp-implies-s-approx-is-b-approx; name this event ‘fourpimplies-s-approx-is-b-approx-off1’. Event: Enable fourp-f-if; name this event ‘fourp-f-if-off’. Event: Enable fourp-f-buf; name this event ‘fourp-f-buf-off’. Event: Enable f-buf-type-set; name this event ‘f-buf-type-set-off’. Event: Enable s-approx-implies-b-approx; name this event ‘s-approx-implies-b-approx-off’.

Event: Enable dual-eval-2-primp; name this event ‘dual-eval-2-primp-off’. Event: Enable dual-eval-0-primp; name this event ‘dual-eval-0-primp-off’. Event: Enable f-pullup-monotone; name this event ‘f-pullup-monotone-off’. Event: Enable ft-wire-monotone; name this event ‘ft-wire-monotone-off’. Event: Enable ft-buf-monotone; name this event ‘ft-buf-monotone-off’. Event: Enable f-if-monotone; name this event ‘f-if-monotone-off’. Event: Enable f-equv3-monotone; name this event ‘f-equv3-monotone-off’. Event: Enable f-xor3-monotone; name this event ‘f-xor3-monotone-off’. Event: Enable f-equv-monotone; name this event ‘f-equv-monotone-off’. Event: Enable f-xor-monotone; name this event ‘f-xor-monotone-off’. Event: Enable f-nor8-monotone; name this event ‘f-nor8-monotone-off’. Event: Enable f-nor6-monotone; name this event ‘f-nor6-monotone-off’. Event: Enable f-nor5-monotone; name this event ‘f-nor5-monotone-off’. Event: Enable f-nor4-monotone; name this event ‘f-nor4-monotone-off’. Event: Enable f-nor3-monotone; name this event ‘f-nor3-monotone-off’. Event: Enable f-nor-monotone; name this event ‘f-nor-monotone-off’. Event: Enable f-or4-monotone; name this event ‘f-or4-monotone-off’. Event: Enable f-or3-monotone; name this event ‘f-or3-monotone-off’.

Event: Enable f-or-monotone; name this event ‘f-or-monotone-off’. Event: Enable f-nand8-monotone; name this event ‘f-nand8-monotone-off’. Event: Enable f-nand6-monotone; name this event ‘f-nand6-monotone-off’. Event: Enable f-nand5-monotone; name this event ‘f-nand5-monotone-off’. Event: Enable f-nand4-monotone; name this event ‘f-nand4-monotone-off’. Event: Enable f-nand3-monotone; name this event ‘f-nand3-monotone-off’. Event: Enable f-nand-monotone; name this event ‘f-nand-monotone-off’. Event: Enable f-not-monotone; name this event ‘f-not-monotone-off’. Event: Enable f-and4-monotone; name this event ‘f-and4-monotone-off’. Event: Enable f-and3-monotone; name this event ‘f-and3-monotone-off’. Event: Enable f-and-monotone; name this event ‘f-and-monotone-off’. Event: Enable f-buf-monotone; name this event ‘f-buf-monotone-off’. Event: Enable monotonicity-property-consequence-3; name this event ‘monotonicityproperty-consequence-3-off’. Event: Enable monotonicity-property-consequence-2; name this event ‘monotonicityproperty-consequence-2-off’. Event: Enable monotonicity-property-consequence-1; name this event ‘monotonicityproperty-consequence-1-off’. Event: Enable monotonicity-property-consequence-0; name this event ‘monotonicityproperty-consequence-0-off’.

Event: Enable *1*monotonicity-property; name this event ‘g*1*monotonicityproperty-off’. Event: Enable s-approx-alist; name this event ‘s-approx-alist-off’. Event: Enable *1*s-approx-alist; name this event ‘g*1*s-approx-alist-off’. Event: Enable v-approx-alist; name this event ‘v-approx-alist-off’. Event: Enable *1*v-approx-alist; name this event ‘g*1*v-approx-alist-off’. Event: Enable s-knownp-implies-s-approx-is-equal; name this event ‘s-knownp-implies-s-approx-is-equal-off1’. Event: Enable s-knownp; name this event ‘s-knownp-off1’. Event: Enable *1*s-knownp; name this event ‘g*1*s-knownp-off’. Event: Enable good-s; name this event ‘good-s-off’. Event: Enable *1*good-s; name this event ‘g*1*good-s-off’. Event: Enable s-approx-x-x; name this event ‘s-approx-x-x-off’. Event: Enable s-approx; name this event ‘s-approx-off1’. Event: Enable *1*s-approx; name this event ‘g*1*s-approx-off’. Event: Enable mem-width; name this event ‘mem-width-off1’. Event: Enable *1*mem-width; name this event ‘g*1*mem-width-off1’. Event: Enable v-knownp-implies-v-approx-is-equal; name this event ‘v-knownp-implies-v-approx-is-equal-off’. Event: Enable v-knownp; name this event ‘v-knownp-off1’.

Event: Enable *1*v-knownp; name this event ‘g*1*v-knownp-off’. Event: Enable v-approx; name this event ‘v-approx-off1’. Event: Enable *1*v-approx; name this event ‘g*1*v-approx-off’. Event: Enable *1*b-approx; name this event ‘g*1*b-approx-off’. Event: Enable b-knownp-compound-recognizer; name this event ‘b-knownp-compound-recognizer-off’. Event: Disable monotonicity-property; name this event ‘monotonicity-property-on’. Event: Disable monotonicity-property-opener-0; name this event ‘monotonicityproperty-opener-0-on’. Event: Disable monotonicity-property-opener-1; name this event ‘monotonicityproperty-opener-1-on’. Event: Disable monotonicity-property-opener-2; name this event ‘monotonicityproperty-opener-2-on’. Event: Disable monotonicity-property-opener-3; name this event ‘monotonicityproperty-opener-3-on’. Event: Disable f-buf; name this event ‘f-buf-on’. Event: Disable f-and; name this event ‘f-and-on’. Event: Disable f-and3; name this event ‘f-and3-on’. Event: Disable f-and4; name this event ‘f-and4-on’. Event: Disable f-not; name this event ‘f-not-on’.

Event: Disable f-nand; name this event ‘f-nand-on’. Event: Disable f-nand3; name this event ‘f-nand3-on’. Event: Disable f-nand4; name this event ‘f-nand4-on’. Event: Disable f-nand5; name this event ‘f-nand5-on’. Event: Disable f-nand6; name this event ‘f-nand6-on’. Event: Disable f-nand8; name this event ‘f-nand8-on’. Event: Disable f-or; name this event ‘f-or-on’. Event: Disable f-or3; name this event ‘f-or3-on’. Event: Disable f-or4; name this event ‘f-or4-on’. Event: Disable f-nor; name this event ‘f-nor-on’. Event: Disable f-nor3; name this event ‘f-nor3-on’. Event: Disable f-nor4; name this event ‘f-nor4-on’. Event: Disable f-nor5; name this event ‘f-nor5-on’. Event: Disable f-nor6; name this event ‘f-nor6-on’. Event: Disable f-nor8; name this event ‘f-nor8-on’. Event: Disable f-xor; name this event ‘f-xor-on’. Event: Disable f-xor3; name this event ‘f-xor3-on’. Event: Disable f-equv; name this event ‘f-equv-on’.

Event: Disable f-equv3; name this event ‘f-equv3-on’. Event: Disable f-if; name this event ‘f-if-on’. Event: Disable ft-buf; name this event ‘ft-buf-on’. Event: Disable ft-wire; name this event ‘ft-wire-on’. Event: Disable f-pullup; name this event ‘f-pullup-on’. Event: Disable bvp-reverse; name this event ‘bvp-reverse-on’. Event: Disable v-approx-bvp; name this event ‘v-approx-bvp-on’. Event: Disable read-mem1-monotone; name this event ‘read-mem1-monotone-on’. Event: Disable bvp-implies-v-knownp; name this event ‘bvp-implies-v-knownp-on’. Event: Disable v-approx-implies-b-approx-nth; name this event ‘v-approx-implies-b-approx-nth-on’. Event: Disable *1*b-knownp; name this event ‘g*1*b-knownp-on1’. Event: Disable v-approx-implies-subranges-equal; name this event ‘v-approx-implies-subranges-equal-on’. Event: Disable v-approx-bvp-subrange; name this event ‘v-approx-bvp-subrange-on’. Event: Disable v-approx-make-list-x; name this event ‘v-approx-make-list-x-on’. Event: Disable read-mem-monotone; name this event ‘read-mem-monotone-on’.

Event: Disable equal-length-read-mem1; name this event ‘equal-length-read-mem1-on’. Event: Disable equal-length-read-mem; name this event ‘equal-length-read-mem-on’. Event: Disable s-approx-implies-properp-read-mem1; name this event ‘s-approx-implies-properp-read-mem1-on’. Event: Disable s-approx-implies-properp-read-mem; name this event ‘s-approx-implies-properp-read-mem-on’. Event: Disable dual-port-ram-value-monotone; name this event ‘dual-port-ram-value-monotone-on’. Event: Disable eval$-append; name this event ‘eval$-append-on’. Event: Disable eval$-pairlist-cons; name this event ‘eval$-pairlist-cons-on’. Event: Disable eval$-append-2; name this event ‘eval$-append-2-on’. Event: Disable dual-apply-value-dp-ram-16x32-lemma-1; name this event ‘dualapply-value-dp-ram-16x32-lemma-1-on’. Event: Disable dual-apply-value-dp-ram-16x32-lemma-2; name this event ‘dualapply-value-dp-ram-16x32-lemma-2-on’. Event: Disable dual-apply-value-dp-ram-16x32-lemma-3; name this event ‘dualapply-value-dp-ram-16x32-lemma-3-on’. Event: Disable dual-port-ram-value-is-dual-port-ram-value-body; name this event ‘dual-port-ram-value-is-dual-port-ram-value-body-on’. Event: Disable dual-apply-value-dp-ram-16x32; name this event ‘dual-apply-value-dp-ram-16x32-on’. Event: Disable dp-ram-16x32-monotone-value; name this event ‘dp-ram-16x32-monotone-value-on’. Event: Enable bvp; name this event ‘bvp-off2’. Event: Disable s-approx-opener; name this event ‘s-approx-opener-on’. Event: Disable v-approx-implies-nth-does-not-go-from-f-to-t; name this event ‘v-approx-implies-nth-does-not-go-from-f-to-t-on’. Event: Disable write-mem1-opener; name this event ‘write-mem1-opener-on’. Event: Disable write-mem1-monotone; name this event ‘write-mem1-monotone-on’. Event: Disable write-mem-monotone; name this event ‘write-mem-monotone-on’. Event: Disable v-approx-length; name this event ‘v-approx-length-on’. Event: Disable s-approx-write-mem1-id; name this event ‘s-approx-write-mem1-id-on’. Event: Disable s-approx-write-mem-id; name this event ‘s-approx-write-mem-id-on’. Event: Disable s-approx-constant-ram-x-id; name this event ‘s-approx-constant-ram-x-id-on’. Event: Disable s-approx-constant-ram-x-constant-ram-x; name this event ‘sapprox-constant-ram-x-constant-ram-x-on’. Event: Disable v-approx-preserves-length; name this event ‘v-approx-preserves-length-on’. Event: Disable v-approx-subrange; name this event ‘v-approx-subrange-on’. Event: Disable mem-width-non-zero; name this event ‘mem-width-non-zero-on’. Event: Disable s-approx-constant-ram-x-write-mem1-case-3; name this event ‘s-approx-constant-ram-x-write-mem1-case-3-on’. Event: Disable s-approx-constant-ram-x-write-mem1; name this event ‘s-approx-constant-ram-x-write-mem1-on’. Event: Disable s-approx-constant-ram-x-write-mem; name this event ‘s-approx-constant-ram-x-write-mem-on’. Event: Disable v-approx-preserves-properp; name this event ‘v-approx-preserves-properp-on’. Event: Disable mem-width-linear-facts; name this event ‘mem-width-linear-facts-on’. Event: Disable dual-port-ram-state-monotone-rewrite; name this event ‘dualport-ram-state-monotone-rewrite-on’. Event: Disable dual-apply-state-dp-ram-16x32-lemma-1; name this event ‘dualapply-state-dp-ram-16x32-lemma-1-on’. Event: Disable dual-apply-state-dp-ram-16x32-lemma-2; name this event ‘dualapply-state-dp-ram-16x32-lemma-2-on’. Event: Disable dual-apply-state-dp-ram-16x32-lemma-3; name this event ‘dualapply-state-dp-ram-16x32-lemma-3-on’. Event: Disable dual-port-ram-state-is-dual-port-ram-state-body; name this event ‘dual-port-ram-state-is-dual-port-ram-state-body-on’. Event: Disable dual-apply-state-dp-ram-16x32; name this event ‘dual-apply-state-dp-ram-16x32-on’. Event: Disable dp-ram-16x32-monotone-state; name this event ‘dp-ram-16x32-monotone-state-on’.

Event: Disable dp-ram-16x32-monotone; name this event ‘dp-ram-16x32-monotone-on’. Event: Enable open-nth; name this event ‘open-nth-off1’. Event: Disable doublet-p; name this event ‘doublet-p-on’. Event: Disable for-final-1-of-reset-sequence-chip; name this event ‘for-final-1-of-reset-sequence-chip-on’. Event: Disable map-down-inverts-map-up; name this event ‘map-down-inverts-map-up-on’. Event: Disable b-knownp; name this event ‘b-knownp-on1’. Event: Disable b-approx; name this event ‘b-approx-on1’. Event: Disable cancel-constants-ilessp; name this event ‘cancel-constants-ilessp-on’. Event: Disable cancel-constants-ilessp-lemma-2; name this event ‘cancel-constants-ilessp-lemma-2-on’. Event: Disable cancel-constants-ilessp-lemma-1; name this event ‘cancel-constants-ilessp-lemma-1-on’. Event: Disable ilessp-add1-iplus; name this event ‘ilessp-add1-iplus-on’. Event: Disable ilessp-add1; name this event ‘ilessp-add1-on’. Event: Disable cancel-constants-equal; name this event ‘cancel-constants-equal-on’. Event: Disable cancel-constants-equal-lemma; name this event ‘cancel-constants-equal-lemma-on’. Event: Disable iplus-constants; name this event ‘iplus-constants-on’.

Event: Disable correctness-of-cancel-ineg-terms-from-inequality; name this event ‘correctness-of-cancel-ineg-terms-from-inequality-on’.

Event: Disable cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded; name this event ‘cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded-on’.

Event: Disable *1*cancel-ineg-terms-from-inequality-expanded; name this event ‘g*1*cancel-ineg-terms-from-inequality-expanded-on’.

Event: Disable cancel-ineg-terms-from-inequality; name this event ‘cancelineg-terms-from-inequality-on’.

Event: Disable *1*cancel-ineg-terms-from-inequality; name this event ‘g*1*cancelineg-terms-from-inequality-on’.

Event: Disable make-cancel-ineg-terms-inequality; name this event ‘makecancel-ineg-terms-inequality-on’.

Event: Disable *1*make-cancel-ineg-terms-inequality; name this event ‘g*1*makecancel-ineg-terms-inequality-on’.

Event: Disable correctness-of-cancel-ineg-terms-from-equality; name this event ‘correctness-of-cancel-ineg-terms-from-equality-on’.

Event: Disable iplus-list-eval$-car-split-out-ineg-terms; name this event ‘ipluslist-eval$-car-split-out-ineg-terms-on’.

Event: Disable eval$-iplus-list-cdr-remove-inegs; name this event ‘eval$-iplus-list-cdr-remove-inegs-on’.

Event: Disable eval$-iplus-list-car-remove-inegs; name this event ‘eval$-iplus-list-car-remove-inegs-on’.

Event: Disable cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded; name this event ‘cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded-on’.

Event: Disable *1*cancel-ineg-terms-from-equality-expanded; name this event ‘g*1*cancel-ineg-terms-from-equality-expanded-on’. Event: Disable cancel-ineg-terms-from-equality; name this event ‘cancel-ineg-terms-from-equality-on’. Event: Disable *1*cancel-ineg-terms-from-equality; name this event ‘g*1*cancelineg-terms-from-equality-on’. Event: Disable make-cancel-ineg-terms-equality; name this event ‘make-cancel-ineg-terms-equality-on’. Event: Disable *1*make-cancel-ineg-terms-equality; name this event ‘g*1*makecancel-ineg-terms-equality-on’. Event: Disable *1*iplus-or-ineg-term; name this event ‘g*1*iplus-or-ineg-term-on’. Event: Disable *1*remove-inegs; name this event ‘g*1*remove-inegs-on’. Event: Disable split-out-ineg-terms; name this event ‘split-out-ineg-terms-on’. Event: Disable *1*split-out-ineg-terms; name this event ‘g*1*split-out-ineg-terms-on’. Event: Disable correctness-of-cancel-factors-ilessp-0; name this event ‘correctnessof-cancel-factors-ilessp-0-on’. Event: Disable conjoin-inequalities-with-0-eliminator; name this event ‘conjoininequalities-with-0-eliminator-on’. Event: Disable cancel-factors-ilessp-0; name this event ‘cancel-factors-ilessp-0-on’. Event: Disable *1*cancel-factors-ilessp-0; name this event ‘g*1*cancel-factors-ilessp-0-on’.

Event: Disable conjoin-inequalities-with-0; name this event ‘conjoin-inequalities-with-0-on’. Event: Disable *1*conjoin-inequalities-with-0; name this event ‘g*1*conjoininequalities-with-0-on’. Event: Disable correctness-of-cancel-factors-0; name this event ‘correctness-of-cancel-factors-0-on’. Event: Disable some-eval$s-to-0-eliminator; name this event ‘some-eval$s-to-0-eliminator-on’. Event: Disable some-eval$s-to-0-append; name this event ‘some-eval$s-to-0-append-on’. Event: Disable eval$-disjoin-equalities-with-0; name this event ‘eval$-disjoin-equalities-with-0-on’. Event: Disable some-eval$s-to-0; name this event ‘some-eval$s-to-0-on’. Event: Disable *1*some-eval$s-to-0; name this event ‘g*1*some-eval$s-to-0-on’. Event: Disable cancel-factors-0; name this event ‘cancel-factors-0-on’. Event: Disable *1*cancel-factors-0; name this event ‘g*1*cancel-factors-0-on’. Event: Disable disjoin-equalities-with-0; name this event ‘disjoin-equalities-with-0-on’. Event: Disable *1*disjoin-equalities-with-0; name this event ‘g*1*disjoin-equalities-with-0-on’. Event: Disable correctness-of-cancel-itimes-ilessp-factors; name this event ‘correctnessof-cancel-itimes-ilessp-factors-on’. Event: Disable equal-fix-int-to-ilessp; name this event ‘equal-fix-int-to-ilessp-on’. Event: Disable eval$-list-bagint-0-implies-equal-for-ilessp-lemma; name this event ‘eval$-list-bagint-0-implies-equal-for-ilessp-lemma-on’. Event: Disable eval$-list-bagint-0-for-ilessp; name this event ‘eval$-list-bagint-0-for-ilessp-on’. Event: Disable member-0-itimes-factors-yields-0-ilessp-consequence-2; name this event ‘member-0-itimes-factors-yields-0-ilessp-consequence-2-on’. Event: Disable member-0-itimes-factors-yields-0-ilessp-consequence-1; name this event ‘member-0-itimes-factors-yields-0-ilessp-consequence-1-on’. Event: Disable member-0-itimes-factors-yields-0; name this event ‘member-0-itimes-factors-yields-0-on’. Event: Disable ilessp-itimes-list-eval$-list-bagdiff-corollary-2; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-corollary-2-on’. Event: Disable ilessp-zero-implies-not-equal; name this event ‘ilessp-zero-implies-not-equal-on’. Event: Disable ilessp-itimes-list-eval$-list-bagdiff-corollary-1; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-corollary-1-on’. Event: Disable zero-ilessp-implies-not-equal; name this event ‘zero-ilessp-implies-not-equal-on’. Event: Disable ilessp-itimes-list-eval$-list-bagdiff; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-on’. Event: Disable bagint-singleton; name this event ‘bagint-singleton-on’. Event: Disable cancel-itimes-ilessp-factors; name this event ‘cancel-itimes-ilessp-factors-on’.

Event: Disable *1*cancel-itimes-ilessp-factors; name this event ‘g*1*cancelitimes-ilessp-factors-on’.

Event: Disable correctness-of-cancel-itimes-factors; name this event ‘correctnessof-cancel-itimes-factors-on’.

Event: Disable member-0-eval$-list; name this event ‘member-0-eval$-list-on’.

Event: Disable membership-of-0-implies-itimes-list-is-0; name this event ‘membershipof-0-implies-itimes-list-is-0-on’.

Event: Disable cancel-itimes-factors-expanded-cancel-itimes-factors; name this event ‘cancel-itimes-factors-expanded-cancel-itimes-factors-on’.

Event: Disable *1*cancel-itimes-factors-expanded; name this event ‘g*1*cancelitimes-factors-expanded-on’.

Event: Disable cancel-itimes-factors; name this event ‘cancel-itimes-factors-on’.

Event: Disable *1*cancel-itimes-factors; name this event ‘g*1*cancel-itimes-factors-on’.

Event: Disable *1*iplus-or-itimes-term; name this event ‘g*1*iplus-or-itimes-term-on’.

Event: Disable itimes-eval$-itimes-tree-ineg; name this event ‘itimes-eval$- itimes-tree-ineg-on’.

Event: Disable iplus-eval$-itimes-tree-ineg; name this event ‘iplus-eval$-itimes-tree-ineg-on’.

Event: Disable ineg-eval$-itimes-tree-ineg; name this event ‘ineg-eval$-itimes-tree-ineg-on’.

Event: Disable eval$-itimes-tree-ineg; name this event ‘eval$-itimes-tree-ineg-on’.

Event: Disable fix-int-eval$-itimes-tree-rec; name this event ‘fix-int-eval$-itimes-tree-rec-on’. Event: Disable ilessp-ineg-ineg; name this event ‘ilessp-ineg-ineg-on’. Event: Disable equal-ineg-ineg; name this event ‘equal-ineg-ineg-on’. Event: Disable itimes–1; name this event ‘itimes–1-on’. Event: Disable itimes-factors; name this event ‘itimes-factors-on’. Event: Disable *1*itimes-factors; name this event ‘g*1*itimes-factors-on’. Event: Disable *1*itimes-tree-ineg; name this event ‘g*1*itimes-tree-ineg-on’. Event: Disable ilessp-strict; name this event ‘ilessp-strict-on’. Event: Disable ilessp-itimes-right-negative; name this event ‘ilessp-itimes-right-negative-on’. Event: Disable ilessp-itimes-right-positive; name this event ‘ilessp-itimes-right-positive-on’. Event: Disable cancel-itimes-ilessp; name this event ‘cancel-itimes-ilessp-on’. Event: Disable *1*cancel-itimes-ilessp; name this event ‘g*1*cancel-itimes-ilessp-on’. Event: Disable *1*make-cancel-itimes-inequality; name this event ‘g*1*makecancel-itimes-inequality-on’. Event: Disable *1*itimes-tree-no-fix-int; name this event ‘g*1*itimes-tree-no-fix-int-on’. Event: Disable subsetp; name this event ‘subsetp-on’.

Event: Disable *1*subsetp; name this event ‘g*1*subsetp-on’. Event: Disable equal-fix-int; name this event ‘equal-fix-int-on’. Event: Disable member-append; name this event ‘member-append-on’. Event: Disable itimes-list-append; name this event ‘itimes-list-append-on’. Event: Disable cancel-itimes; name this event ‘cancel-itimes-on’. Event: Disable *1*cancel-itimes; name this event ‘g*1*cancel-itimes-on’. Event: Disable *1*make-cancel-itimes-equality; name this event ‘g*1*makecancel-itimes-equality-on’. Event: Disable integerp-itimes-list; name this event ‘integerp-itimes-list-on’. Event: Disable itimes-list; name this event ‘itimes-list-on’. Event: Disable *1*itimes-list; name this event ‘g*1*itimes-list-on’. Event: Disable *1*itimes-tree; name this event ‘g*1*itimes-tree-on’. Event: Disable itimes-tree-rec; name this event ‘itimes-tree-rec-on’. Event: Disable *1*itimes-tree-rec; name this event ‘g*1*itimes-tree-rec-on’. Event: Disable itimes-fringe; name this event ‘itimes-fringe-on’. Event: Disable *1*itimes-fringe; name this event ‘g*1*itimes-fringe-on’. Event: Disable fix-int-irem; name this event ‘fix-int-irem-on’. Event: Disable fix-int-iquo; name this event ‘fix-int-iquo-on’.

Event: Disable fix-int-imod; name this event ‘fix-int-imod-on’. Event: Disable fix-int-idiv; name this event ‘fix-int-idiv-on’. Event: Disable fix-int-iremainder; name this event ‘fix-int-iremainder-on’. Event: Disable fix-int-iquotient; name this event ‘fix-int-iquotient-on’. Event: Disable irem-fix-int2; name this event ‘irem-fix-int2-on’. Event: Disable irem-fix-int1; name this event ‘irem-fix-int1-on’. Event: Disable iquo-fix-int2; name this event ‘iquo-fix-int2-on’. Event: Disable iquo-fix-int1; name this event ‘iquo-fix-int1-on’. Event: Disable imod-fix-int2; name this event ‘imod-fix-int2-on’. Event: Disable imod-fix-int1; name this event ‘imod-fix-int1-on’. Event: Disable idiv-fix-int2; name this event ‘idiv-fix-int2-on’. Event: Disable idiv-fix-int1; name this event ‘idiv-fix-int1-on’. Event: Disable iremainder-fix-int2; name this event ‘iremainder-fix-int2-on’. Event: Disable iremainder-fix-int1; name this event ‘iremainder-fix-int1-on’. Event: Disable iquotient-fix-int2; name this event ‘iquotient-fix-int2-on’. Event: Disable iquotient-fix-int1; name this event ‘iquotient-fix-int1-on’. Event: Disable integerp-irem; name this event ‘integerp-irem-on’. Event: Disable integerp-iquo; name this event ‘integerp-iquo-on’.

Event: Disable integerp-imod; name this event ‘integerp-imod-on’. Event: Disable integerp-idiv; name this event ‘integerp-idiv-on’. Event: Disable integerp-iremainder; name this event ‘integerp-iremainder-on’. Event: Disable integerp-iquotient; name this event ‘integerp-iquotient-on’. Event: Disable itimes-cancellation-3; name this event ‘itimes-cancellation-3-on’. Event: Disable itimes-cancellation-2; name this event ‘itimes-cancellation-2-on’. Event: Disable itimes-cancellation-1; name this event ‘itimes-cancellation-1-on’. Event: Disable itimes-ineg-2; name this event ‘itimes-ineg-2-on’. Event: Disable itimes-ineg-1; name this event ‘itimes-ineg-1-on’. Event: Disable iquo-irem-uniqueness; name this event ‘iquo-irem-uniqueness-on’. Event: Disable division-theorem-for-truncate-to-zero; name this event ‘divisiontheorem-for-truncate-to-zero-on’. Event: Disable division-theorem-for-truncate-to-zero-part3; name this event ‘division-theorem-for-truncate-to-zero-part3-on’. Event: Disable division-theorem-for-truncate-to-zero-part2; name this event ‘division-theorem-for-truncate-to-zero-part2-on’. Event: Disable division-theorem-for-truncate-to-zero-part1; name this event ‘division-theorem-for-truncate-to-zero-part1-on’. Event: Disable idiv-imod-uniqueness; name this event ‘idiv-imod-uniqueness-on’. Event: Disable division-theorem-for-truncate-to-neginf; name this event ‘divisiontheorem-for-truncate-to-neginf-on’. Event: Disable division-theorem-for-truncate-to-neginf-part3; name this event ‘division-theorem-for-truncate-to-neginf-part3-on’. Event: Disable division-theorem-for-truncate-to-neginf-part2; name this event ‘division-theorem-for-truncate-to-neginf-part2-on’. Event: Disable division-theorem-for-truncate-to-neginf-part1; name this event ‘division-theorem-for-truncate-to-neginf-part1-on’. Event: Disable iquotient-iremainder-uniqueness; name this event ‘iquotientiremainder-uniqueness-on’. Event: Disable division-theorem; name this event ‘division-theorem-on’. Event: Disable division-theorem-part3; name this event ‘division-theorem-part3-on’. Event: Disable division-theorem-part2; name this event ‘division-theorem-part2-on’. Event: Disable division-theorem-part1; name this event ‘division-theorem-part1-on’. Event: Disable quotient-remainder-uniqueness; name this event ‘quotient-remainder-uniqueness-on’. Event: Disable itimes-1-arg1; name this event ‘itimes-1-arg1-on’. Event: Disable equal-itimes-minus-1; name this event ‘equal-itimes-minus-1-on’. Event: Disable equal-itimes-1; name this event ‘equal-itimes-1-on’.

Event: Disable equal-itimes-0; name this event ‘equal-itimes-0-on’. Event: Disable associativity-of-itimes; name this event ‘associativity-of-itimes-on’. Event: Disable commutativity2-of-itimes; name this event ‘commutativity2of-itimes-on’. Event: Disable itimes-distributes-over-iplus; name this event ‘itimes-distributes-over-iplus-on’. Event: Disable itimes-distributes-over-iplus-proof; name this event ‘itimesdistributes-over-iplus-proof-on’. Event: Disable commutativity-of-itimes; name this event ‘commutativity-of-itimes-on’. Event: Disable itimes-fix-int2; name this event ‘itimes-fix-int2-on’. Event: Disable itimes-fix-int1; name this event ‘itimes-fix-int1-on’. Event: Disable itimes-0-right; name this event ‘itimes-0-right-on’. Event: Disable itimes-0-left; name this event ‘itimes-0-left-on’. Event: Disable correctness-of-cancel-iplus-ilessp; name this event ‘correctnessof-cancel-iplus-ilessp-on’. Event: Disable cancel-iplus-ilessp; name this event ‘cancel-iplus-ilessp-on’. Event: Disable *1*cancel-iplus-ilessp; name this event ‘g*1*cancel-iplus-ilessp-on’. Event: Disable *1*iplus-tree-no-fix-int; name this event ‘g*1*iplus-tree-no-fix-int-on’. Event: Disable iplus-cancellation-2-for-ilessp; name this event ‘iplus-cancellation-2-for-ilessp-on’. Event: Disable iplus-cancellation-1-for-ilessp; name this event ‘iplus-cancellation-1-for-ilessp-on’. Event: Disable cancel-iplus-ilessp-1; name this event ‘cancel-iplus-ilessp-1-on’. Event: Disable *1*cancel-iplus-ilessp-1; name this event ‘g*1*cancel-iplus-ilessp-1-on’. Event: Disable *1*make-cancel-iplus-inequality-1; name this event ‘g*1*makecancel-iplus-inequality-1-on’. Event: Disable ilessp-fix-int-2; name this event ‘ilessp-fix-int-2-on’. Event: Disable ilessp-fix-int-1; name this event ‘ilessp-fix-int-1-on’. Event: Disable correctness-of-cancel-iplus; name this event ‘correctness-of-cancel-iplus-on’. Event: Disable iplus-ineg7; name this event ‘iplus-ineg7-on’. Event: Disable iplus-list-append; name this event ‘iplus-list-append-on’. Event: Disable eval$-iplus-list-delete; name this event ‘eval$-iplus-list-delete-on’. Event: Disable *1*cancel-iplus; name this event ‘g*1*cancel-iplus-on’. Event: Disable eval$-list-append; name this event ‘eval$-list-append-on’. Event: Disable integerp-iplus-list; name this event ‘integerp-iplus-list-on’. Event: Disable iplus-list; name this event ‘iplus-list-on’. Event: Disable *1*iplus-list; name this event ‘g*1*iplus-list-on’.

Event: Disable *1*iplus-tree; name this event ‘g*1*iplus-tree-on’. Event: Disable iplus-tree-rec; name this event ‘iplus-tree-rec-on’. Event: Disable *1*iplus-tree-rec; name this event ‘g*1*iplus-tree-rec-on’. Event: Disable iplus-fringe; name this event ‘iplus-fringe-on’. Event: Disable *1*iplus-fringe; name this event ‘g*1*iplus-fringe-on’. Event: Disable correctness-of-cancel-ineg; name this event ‘correctness-of-cancel-ineg-on’. Event: Disable iplus-x-y-ineg-x; name this event ‘iplus-x-y-ineg-x-on’. Event: Disable iplus-ineg4; name this event ‘iplus-ineg4-on’. Event: Disable iplus-ineg3; name this event ‘iplus-ineg3-on’. Event: Disable eval$-cancel-ineg-aux-is-its-fn; name this event ‘eval$-cancel-ineg-aux-is-its-fn-on’. Event: Disable eval$-cancel-ineg-aux-fn; name this event ‘eval$-cancel-ineg-aux-fn-on’. Event: Disable *1*eval$-cancel-ineg-aux-fn; name this event ‘g*1*eval$-cancel-ineg-aux-fn-on’. Event: Disable eval$-other; name this event ‘eval$-other-on’. Event: Disable eval$-litatom; name this event ‘eval$-litatom-on’. Event: Disable eval$-list-nlistp; name this event ‘eval$-list-nlistp-on’. Event: Disable eval$-list-cons; name this event ‘eval$-list-cons-on’.

Event: Disable cancel-ineg; name this event ‘cancel-ineg-on’. Event: Disable *1*cancel-ineg; name this event ‘g*1*cancel-ineg-on’. Event: Disable cancel-ineg-aux; name this event ‘cancel-ineg-aux-on’. Event: Disable *1*cancel-ineg-aux; name this event ‘g*1*cancel-ineg-aux-on’. Event: Disable idifference-fix-int2; name this event ‘idifference-fix-int2-on’. Event: Disable idifference-fix-int1; name this event ‘idifference-fix-int1-on’. Event: Disable iplus-fix-int2; name this event ‘iplus-fix-int2-on’. Event: Disable iplus-fix-int1; name this event ‘iplus-fix-int1-on’. Event: Disable iplus-ineg2; name this event ‘iplus-ineg2-on’. Event: Disable iplus-ineg1; name this event ‘iplus-ineg1-on’. Event: Disable iplus-cancellation-2; name this event ‘iplus-cancellation-2-on’. Event: Disable iplus-cancellation-1; name this event ‘iplus-cancellation-1-on’. Event: Disable associativity-of-iplus; name this event ‘associativity-of-iplus-on’. Event: Disable commutativity-of-iplus; name this event ‘commutativity-of-iplus-on’. Event: Disable commutativity2-of-iplus; name this event ‘commutativity2-of-iplus-on’. Event: Disable iplus-0-right; name this event ‘iplus-0-right-on’. Event: Disable iplus-0-left; name this event ‘iplus-0-left-on’.

Event: Disable ineg-0; name this event ‘ineg-0-on’. Event: Disable ineg-fix-int; name this event ‘ineg-fix-int-on’. Event: Disable ineg-ineg; name this event ‘ineg-ineg-on’. Event: Disable ineg-iplus; name this event ‘ineg-iplus-on’. Event: Disable fix-int-itimes; name this event ‘fix-int-itimes-on’. Event: Disable fix-int-iabs; name this event ‘fix-int-iabs-on’. Event: Disable fix-int-ineg; name this event ‘fix-int-ineg-on’. Event: Disable fix-int-idifference; name this event ‘fix-int-idifference-on’. Event: Disable fix-int-iplus; name this event ‘fix-int-iplus-on’. Event: Disable fix-int-fix-int; name this event ‘fix-int-fix-int-on’. Event: Disable fix-int-remover; name this event ‘fix-int-remover-on’. Event: Disable integerp-itimes; name this event ‘integerp-itimes-on’. Event: Disable integerp-iabs; name this event ‘integerp-iabs-on’. Event: Disable integerp-ineg; name this event ‘integerp-ineg-on’. Event: Disable integerp-idifference; name this event ‘integerp-idifference-on’. Event: Disable integerp-iplus; name this event ‘integerp-iplus-on’. Event: Disable integerp-fix-int; name this event ‘integerp-fix-int-on’. Event: Disable *1*irem; name this event ‘g*1*irem-on’.

Event: Disable *1*iquo; name this event ‘g*1*iquo-on’. Event: Disable *1*imod; name this event ‘g*1*imod-on’. Event: Disable *1*idiv; name this event ‘g*1*idiv-on’. Event: Disable *1*iremainder; name this event ‘g*1*iremainder-on’. Event: Disable *1*iquotient; name this event ‘g*1*iquotient-on’. Event: Disable *1*itimes; name this event ‘g*1*itimes-on’. Event: Disable *1*iabs; name this event ‘g*1*iabs-on’. Event: Disable idifference; name this event ‘idifference-on’. Event: Disable *1*idifference; name this event ‘g*1*idifference-on’. Event: Disable *1*ineg; name this event ‘g*1*ineg-on’. Event: Disable *1*iplus; name this event ‘g*1*iplus-on’. Event: Disable ileq; name this event ‘ileq-on’. Event: Disable *1*ileq; name this event ‘g*1*ileq-on’. Event: Disable *1*ilessp; name this event ‘g*1*ilessp-on’. Event: Disable izerop; name this event ‘izerop-on’. Event: Disable *1*izerop; name this event ‘g*1*izerop-on’. Event: Disable *1*fix-int; name this event ‘g*1*fix-int-on’. Event: Disable *1*integerp; name this event ‘g*1*integerp-on’.

Event: Disable gcd-idempotence; name this event ‘gcd-idempotence-on’. Event: Disable gcd-x-x; name this event ‘gcd-x-x-on’. Event: Disable commutativity2-of-gcd; name this event ‘commutativity2-of-gcd-on’. Event: Disable commutativity2-of-gcd-zero-case; name this event ‘commutativity2of-gcd-zero-case-on’. Event: Disable associativity-of-gcd; name this event ‘associativity-of-gcd-on’. Event: Disable associativity-of-gcd-zero-case; name this event ‘associativityof-gcd-zero-case-on’. Event: Disable common-divisor-divides-gcd; name this event ‘common-divisor-divides-gcd-on’. Event: Disable gcd-is-the-greatest; name this event ‘gcd-is-the-greatest-on’. Event: Disable distributivity-of-times-over-gcd; name this event ‘distributivityof-times-over-gcd-on’. Event: Disable distributivity-of-times-over-gcd-proof; name this event ‘distributivityof-times-over-gcd-proof-on’. Event: Disable remainder-gcd; name this event ‘remainder-gcd-on’. Event: Disable gcd-plus-instance; name this event ‘gcd-plus-instance-on’. Event: Disable gcd-plus; name this event ‘gcd-plus-on’. Event: Disable gcd-plus-proof; name this event ‘gcd-plus-proof-on’. Event: Disable gcd-plus-instance-temp; name this event ‘gcd-plus-instance-temp-on’.

Event: Disable gcd-plus-instance-temp-proof; name this event ‘gcd-plus-instance-temp-proof-on’. Event: Disable lessp-gcd; name this event ‘lessp-gcd-on’. Event: Disable equal-gcd-0; name this event ‘equal-gcd-0-on’. Event: Disable gcd-1; name this event ‘gcd-1-on’. Event: Disable gcd-0; name this event ‘gcd-0-on’. Event: Disable single-number-induction; name this event ‘single-number-induction-on’. Event: Disable *1*single-number-induction; name this event ‘g*1*single-number-induction-on’. Event: Disable commutativity-of-gcd; name this event ‘commutativity-of-gcd-on’. Event: Disable log-exp; name this event ‘log-exp-on’. Event: Disable log-times-exp; name this event ‘log-times-exp-on’. Event: Disable log-times-exp-proof; name this event ‘log-times-exp-proof-on’. Event: Disable log-times; name this event ‘log-times-on’. Event: Disable log-times-proof; name this event ‘log-times-proof-on’. Event: Disable log-quotient-exp; name this event ‘log-quotient-exp-on’. Event: Disable log-quotient-times; name this event ‘log-quotient-times-on’. Event: Disable log-quotient-times-proof; name this event ‘log-quotient-times-proof-on’.

Event: Disable log-quotient; name this event ‘log-quotient-on’. Event: Disable leq-log-log; name this event ‘leq-log-log-on’. Event: Disable double-log-induction; name this event ‘double-log-induction-on’. Event: Disable *1*double-log-induction; name this event ‘g*1*double-log-induction-on’. Event: Disable log-1; name this event ‘log-1-on’. Event: Disable log-0; name this event ‘log-0-on’. Event: Disable equal-log-0; name this event ‘equal-log-0-on’. Event: Disable exp-difference; name this event ‘exp-difference-on’. Event: Disable equal-exp-1; name this event ‘equal-exp-1-on’. Event: Disable equal-exp-0; name this event ‘equal-exp-0-on’. Event: Disable exp-exp; name this event ‘exp-exp-on’. Event: Disable exp-times; name this event ‘exp-times-on’. Event: Disable exp-0-arg2; name this event ‘exp-0-arg2-on’. Event: Disable exp-1-arg1; name this event ‘exp-1-arg1-on’. Event: Disable exp-0-arg1; name this event ‘exp-0-arg1-on’. Event: Disable exp-plus; name this event ‘exp-plus-on’. Event: Disable exp-add1; name this event ‘exp-add1-on’.

Event: Disable exp-zero; name this event ‘exp-zero-on’. Event: Disable quotient-exp; name this event ‘quotient-exp-on’. Event: Disable remainder-exp-exp; name this event ‘remainder-exp-exp-on’. Event: Disable double-number-induction; name this event ‘double-number-induction-on’. Event: Disable *1*double-number-induction; name this event ‘g*1*doublenumber-induction-on’. Event: Disable remainder-exp; name this event ‘remainder-exp-on’. Event: Disable gcd; name this event ‘gcd-on’. Event: Disable *1*gcd; name this event ‘g*1*gcd-on’. Event: Disable log; name this event ‘log-on’. Event: Disable *1*log; name this event ‘g*1*log-on’. Event: Disable exp; name this event ‘exp-on’. Event: Disable *1*exp; name this event ‘g*1*exp-on’. Event: Disable correctness-of-cancel-quotient-times; name this event ‘correctnessof-cancel-quotient-times-on’. Event: Disable cancel-quotient-times; name this event ‘cancel-quotient-times-on’. Event: Disable *1*cancel-quotient-times; name this event ‘g*1*cancel-quotient-times-on’. Event: Disable lessp-quotient; name this event ‘lessp-quotient-on’.

Event: Disable quotient-x-x; name this event ‘quotient-x-x-on’. Event: Disable quotient-1-arg1; name this event ‘quotient-1-arg1-on’. Event: Disable quotient-1-arg1-casesplit; name this event ‘quotient-1-arg1-casesplit-on’. Event: Disable quotient-1-arg2; name this event ‘quotient-1-arg2-on’. Event: Disable leq-quotient; name this event ‘leq-quotient-on’. Event: Disable quotient-quotient; name this event ‘quotient-quotient-on’. Event: Disable quotient-plus-times-times-instance; name this event ‘quotientplus-times-times-instance-on’. Event: Disable quotient-plus-times-times; name this event ‘quotient-plus-times-times-on’. Event: Disable quotient-plus-times-times-proof; name this event ‘quotientplus-times-times-proof-on’. Event: Disable quotient-plus-fact; name this event ‘quotient-plus-fact-on’. Event: Disable quotient-remainder-instance; name this event ‘quotient-remainder-instance-on’. Event: Disable quotient-remainder; name this event ‘quotient-remainder-on’. Event: Disable quotient-remainder-times; name this event ‘quotient-remainder-times-on’. Event: Disable quotient-difference3; name this event ‘quotient-difference3-on’. Event: Disable quotient-difference2; name this event ‘quotient-difference2-on’.

Event: Disable quotient-lessp-arg1; name this event ‘quotient-lessp-arg1-on’. Event: Disable quotient-difference1; name this event ‘quotient-difference1-on’. Event: Disable quotient-times-times-proof; name this event ‘quotient-times-times-proof-on’. Event: Disable quotient-times-instance; name this event ‘quotient-times-instance-on’. Event: Disable quotient-times; name this event ‘quotient-times-on’. Event: Disable quotient-times-proof; name this event ‘quotient-times-proof-on’. Event: Disable quotient-times-instance-temp-proof; name this event ‘quotienttimes-instance-temp-proof-on’. Event: Disable quotient-plus; name this event ‘quotient-plus-on’. Event: Disable quotient-plus-proof; name this event ‘quotient-plus-proof-on’. Event: Disable quotient-sub1; name this event ‘quotient-sub1-on’. Event: Disable equal-quotient-0; name this event ‘equal-quotient-0-on’. Event: Disable quotient-add1; name this event ‘quotient-add1-on’. Event: Disable quotient-zero; name this event ‘quotient-zero-on’. Event: Disable quotient-of-non-number; name this event ‘quotient-of-non-number-on’. Event: Disable quotient-noop; name this event ‘quotient-noop-on’. Event: Disable transitivity-of-divides; name this event ‘transitivity-of-divides-on’. Event: Disable remainder-x-x; name this event ‘remainder-x-x-on’. Event: Disable remainder-1-arg2; name this event ‘remainder-1-arg2-on’. Event: Disable remainder-1-arg1; name this event ‘remainder-1-arg1-on’. Event: Disable remainder-remainder; name this event ‘remainder-remainder-on’. Event: Disable remainder-plus-times-times-instance; name this event ‘remainderplus-times-times-instance-on’. Event: Disable remainder-plus-times-times; name this event ‘remainder-plus-times-times-on’. Event: Disable remainder-plus-times-times-proof; name this event ‘remainderplus-times-times-proof-on’. Event: Disable remainder-plus-fact; name this event ‘remainder-plus-fact-on’. Event: Disable remainder-difference2; name this event ‘remainder-difference2-on’. Event: Disable double-remainder-induction; name this event ‘double-remainder-induction-on’. Event: Disable *1*double-remainder-induction; name this event ‘g*1*doubleremainder-induction-on’. Event: Disable remainder-difference1; name this event ‘remainder-difference1-on’. Event: Disable remainder-times2-instance; name this event ‘remainder-times2-instance-on’.

Event: Disable remainder-times2; name this event ‘remainder-times2-on’. Event: Disable remainder-times2-proof; name this event ‘remainder-times2-proof-on’. Event: Disable remainder-times-times-proof; name this event ‘remainder-times-times-proof-on’. Event: Disable remainder-times1-instance; name this event ‘remainder-times1-instance-on’. Event: Disable remainder-times1-instance-proof; name this event ‘remaindertimes1-instance-proof-on’. Event: Disable remainder-times1; name this event ‘remainder-times1-on’. Event: Disable remainder-times1-proof; name this event ‘remainder-times1-proof-on’. Event: Disable equal-remainder-plus-remainder-proof; name this event ‘equalremainder-plus-remainder-proof-on’. Event: Disable equal-remainder-plus-0; name this event ‘equal-remainder-plus-0-on’. Event: Disable equal-remainder-plus-0-proof; name this event ‘equal-remainder-plus-0-proof-on’. Event: Disable remainder-plus; name this event ‘remainder-plus-on’. Event: Disable remainder-plus-proof; name this event ‘remainder-plus-proof-on’. Event: Disable remainder-add1; name this event ‘remainder-add1-on’. Event: Disable remainder-quotient-elim; name this event ‘remainder-quotient-elim-on’.

Event: Disable remainder-zero; name this event ‘remainder-zero-on’. Event: Disable remainder-of-non-number; name this event ‘remainder-of-non-number-on’. Event: Disable remainder-noop; name this event ‘remainder-noop-on’. Event: Disable lessp-remainder; name this event ‘lessp-remainder-on’. Event: Disable correctness-of-cancel-equal-times; name this event ‘correctnessof-cancel-equal-times-on’. Event: Disable cancel-equal-times; name this event ‘cancel-equal-times-on’. Event: Disable *1*cancel-equal-times; name this event ‘g*1*cancel-equal-times-on’. Event: Disable correctness-of-cancel-lessp-times; name this event ‘correctnessof-cancel-lessp-times-on’. Event: Disable cancel-lessp-times; name this event ‘cancel-lessp-times-on’. Event: Disable *1*cancel-lessp-times; name this event ‘g*1*cancel-lessp-times-on’. Event: Disable infer-equality-from-not-lessp; name this event ‘infer-equality-from-not-lessp-on’. Event: Disable lessp-times-arg1; name this event ‘lessp-times-arg1-on’. Event: Disable eval$-equal; name this event ‘eval$-equal-on1’. Event: Disable and-not-zerop-tree; name this event ‘and-not-zerop-tree-on’. Event: Disable *1*and-not-zerop-tree; name this event ‘g*1*and-not-zerop-tree-on’.

Event: Disable or-zerop-tree; name this event ‘or-zerop-tree-on’. Event: Disable *1*or-zerop-tree; name this event ‘g*1*or-zerop-tree-on’. Event: Disable times-fringe; name this event ‘times-fringe-on’. Event: Disable *1*times-fringe; name this event ‘g*1*times-fringe-on’. Event: Disable times-tree; name this event ‘times-tree-on’. Event: Disable *1*times-tree; name this event ‘g*1*times-tree-on’. Event: Disable lessp-1-times; name this event ‘lessp-1-times-on’. Event: Disable lessp-plus-times2; name this event ‘lessp-plus-times2-on’. Event: Disable lessp-plus-times1; name this event ‘lessp-plus-times1-on’. Event: Disable lessp-plus-times-proof; name this event ‘lessp-plus-times-proof-on’. Event: Disable lessp-times-cancellation-proof; name this event ‘lessp-times-cancellation-proof-on’. Event: Disable lessp-times3; name this event ‘lessp-times3-on’. Event: Disable lessp-times3-proof2; name this event ‘lessp-times3-proof2-on’. Event: Disable lessp-times3-proof1; name this event ‘lessp-times3-proof1-on’. Event: Disable lessp-times2; name this event ‘lessp-times2-on’. Event: Disable lessp-times2-proof; name this event ‘lessp-times2-proof-on’. Event: Disable lessp-times1; name this event ‘lessp-times1-on’.

Event: Disable lessp-times1-proof; name this event ‘lessp-times1-proof-on’. Event: Disable times-1-arg1; name this event ‘times-1-arg1-on’. Event: Disable times-quotient; name this event ‘times-quotient-on’. Event: Disable times-quotient-proof; name this event ‘times-quotient-proof-on’. Event: Disable times-distributes-over-difference; name this event ‘times-distributes-over-difference-on’. Event: Disable times-distributes-over-difference-proof; name this event ‘timesdistributes-over-difference-proof-on’. Event: Disable associativity-of-times; name this event ‘associativity-of-times-on’. Event: Disable commutativity2-of-times; name this event ‘commutativity2-of-times-on’. Event: Disable times-distributes-over-plus; name this event ‘times-distributes-over-plus-on’. Event: Disable times-distributes-over-plus-proof; name this event ‘times-distributes-over-plus-proof-on’. Event: Disable commutativity-of-times; name this event ‘commutativity-of-times-on’. Event: Disable times-add1; name this event ‘times-add1-on’. Event: Disable times-zero; name this event ‘times-zero-on’. Event: Disable equal-sub1-0; name this event ‘equal-sub1-0-on’. Event: Disable equal-times-1; name this event ‘equal-times-1-on’.

Event: Disable equal-times-0; name this event ‘equal-times-0-on’. Event: Disable correctness-of-cancel-lessp-plus; name this event ‘correctnessof-cancel-lessp-plus-on’. Event: Disable cancel-lessp-plus; name this event ‘cancel-lessp-plus-on’. Event: Disable *1*cancel-lessp-plus; name this event ‘g*1*cancel-lessp-plus-on’. Event: Disable difference-x-x; name this event ‘difference-x-x-on’. Event: Disable difference-difference-arg2; name this event ‘difference-difference-arg2-on’. Event: Disable difference-difference-arg1; name this event ‘difference-difference-arg1-on’. Event: Disable difference-sub1-arg2; name this event ‘difference-sub1-arg2-on’. Event: Disable difference-add1-arg2; name this event ‘difference-add1-arg2-on’. Event: Disable difference-leq-arg1; name this event ‘difference-leq-arg1-on’. Event: Disable difference-elim; name this event ‘difference-elim-on’. Event: Disable correctness-of-cancel-difference-plus; name this event ‘correctnessof-cancel-difference-plus-on’. Event: Disable cancel-difference-plus; name this event ‘cancel-difference-plus-on’. Event: Disable *1*cancel-difference-plus; name this event ‘g*1*cancel-difference-plus-on’. Event: Disable correctness-of-cancel-equal-plus; name this event ‘correctnessof-cancel-equal-plus-on’. Event: Disable cancel-equal-plus; name this event ‘cancel-equal-plus-on’. Event: Disable *1*cancel-equal-plus; name this event ‘g*1*cancel-equal-plus-on’. Event: Disable eval$-quote; name this event ‘eval$-quote-on1’. Event: Disable plus-tree; name this event ‘plus-tree-on’. Event: Disable *1*plus-tree; name this event ‘g*1*plus-tree-on’. Event: Disable plus-fringe; name this event ‘plus-fringe-on’. Event: Disable *1*plus-fringe; name this event ‘g*1*plus-fringe-on’. Event: Disable diff-diff-arg2; name this event ‘diff-diff-arg2-on’. Event: Disable diff-diff-arg1; name this event ‘diff-diff-arg1-on’. Event: Disable difference-plus-plus-cancellation-proof; name this event ‘differenceplus-plus-cancellation-proof-on’. Event: Disable difference-plus-cancellation-proof; name this event ‘differenceplus-cancellation-proof-on’. Event: Disable plus-difference-arg2; name this event ‘plus-difference-arg2-on’. Event: Disable plus-difference-arg1; name this event ‘plus-difference-arg1-on’. Event: Disable associativity-of-plus; name this event ‘associativity-of-plus-on’. Event: Disable plus-add1-arg2; name this event ‘plus-add1-arg2-on’. Event: Disable plus-add1-arg1; name this event ‘plus-add1-arg1-on’.

Event: Disable plus-zero-arg2; name this event ‘plus-zero-arg2-on’. Event: Disable commutativity2-of-plus; name this event ‘commutativity2-of-plus-on’. Event: Disable commutativity-of-plus; name this event ‘commutativity-of-plus-on’. Event: Disable equal-difference-0; name this event ‘equal-difference-0-on’. Event: Disable equal-plus-0; name this event ‘equal-plus-0-on’. Event: Disable member-bagint; name this event ‘member-bagint-on’. Event: Disable occurrences-bagdiff; name this event ‘occurrences-bagdiff-on’. Event: Disable occurrences-bagint; name this event ‘occurrences-bagint-on’. Event: Disable subbagp-bagint2; name this event ‘subbagp-bagint2-on’. Event: Disable subbagp-bagint1; name this event ‘subbagp-bagint1-on’. Event: Disable subbagp-cdr2; name this event ‘subbagp-cdr2-on’. Event: Disable subbagp-cdr1; name this event ‘subbagp-cdr1-on’. Event: Disable subbagp-delete; name this event ‘subbagp-delete-on’. Event: Disable bagdiff-delete; name this event ‘bagdiff-delete-on’. Event: Disable member-bagdiff; name this event ‘member-bagdiff-on’. Event: Disable occurrences-delete; name this event ‘occurrences-delete-on’. Event: Disable member-delete-implies-membership; name this event ‘memberdelete-implies-membership-on’.

Event: Disable member-delete; name this event ‘member-delete-on’. Event: Disable member-non-list; name this event ‘member-non-list-on’. Event: Disable equal-occurrences-zero; name this event ‘equal-occurrences-zero-on’. Event: Disable delete-delete; name this event ‘delete-delete-on’. Event: Disable delete-non-member; name this event ‘delete-non-member-on’. Event: Disable subbagp; name this event ‘subbagp-on’. Event: Disable *1*subbagp; name this event ‘g*1*subbagp-on’. Event: Disable occurrences; name this event ‘occurrences-on’. Event: Disable *1*occurrences; name this event ‘g*1*occurrences-on’. Event: Disable bagint; name this event ‘bagint-on’. Event: Disable *1*bagint; name this event ‘g*1*bagint-on’. Event: Disable bagdiff; name this event ‘bagdiff-on’. Event: Disable *1*bagdiff; name this event ‘g*1*bagdiff-on’. Event: Disable delete; name this event ‘delete-on’. Event: Disable *1*delete; name this event ‘g*1*delete-on’. Definition: b-to-nat (c) = if c then 1

else 0 endif Event: Enable v-adder-output=v-sum; name this event ‘v-adder-output=v-sum-off’.

Event: Enable v-adder-carry-out=v-carry; name this event ‘v-adder-carry-out=v-carry-off’.

Theorem: bvp-cdr (bvp (x) ∧ listp (x)) → bvp (cdr (x))

Event: Let us define the theory integer-metas to consist of the following events: correctness-of-cancel-ineg, correctness-of-cancel-iplus, correctness-of-cancel-iplus-ilessp, correctness-of-cancel-itimes, correctness-of-cancel-itimes-ilessp, correctnessof-cancel-itimes-factors, correctness-of-cancel-itimes-ilessp-factors, correctnessof-cancel-factors-0, correctness-of-cancel-factors-ilessp-0, correctness-of-cancel-ineg-terms-from-equality, correctness-of-cancel-ineg-terms-from-inequality.

Event: Enable correctness-of-cancel-ineg; name this event ‘correctness-of-cancel-ineg-off1’.

Event: Enable correctness-of-cancel-iplus; name this event ‘correctness-of-cancel-iplus-off1’.

Event: Enable correctness-of-cancel-iplus-ilessp; name this event ‘correctnessof-cancel-iplus-ilessp-off1’.

Event: Enable correctness-of-cancel-itimes; name this event ‘correctness-of-cancel-itimes-off1’.

Event: Enable correctness-of-cancel-itimes-ilessp; name this event ‘correctnessof-cancel-itimes-ilessp-off1’.

Event: Enable correctness-of-cancel-itimes-factors; name this event ‘correctnessof-cancel-itimes-factors-off1’.

Event: Enable correctness-of-cancel-itimes-ilessp-factors; name this event ‘correctnessof-cancel-itimes-ilessp-factors-off1’.

Event: Enable correctness-of-cancel-factors-0; name this event ‘correctness-of-cancel-factors-0-off1’.

Event: Enable correctness-of-cancel-factors-ilessp-0; name this event ‘correctnessof-cancel-factors-ilessp-0-off1’.

Event: Enable correctness-of-cancel-ineg-terms-from-equality; name this event ‘correctness-of-cancel-ineg-terms-from-equality-off1’.

Event: Enable correctness-of-cancel-ineg-terms-from-inequality; name this event ‘correctness-of-cancel-ineg-terms-from-inequality-off1’.

Event: Let us define the theory naturals-metas to consist of the following events: correctness-of-cancel-equal-plus, correctness-of-cancel-difference-plus, correctnessof-cancel-lessp-plus, correctness-of-cancel-lessp-times, correctness-of-cancel-equal-times, correctness-of-cancel-quotient-times.

Event: Enable correctness-of-cancel-equal-plus; name this event ‘correctnessof-cancel-equal-plus-off1’.

Event: Enable correctness-of-cancel-difference-plus; name this event ‘correctnessof-cancel-difference-plus-off1’.

Event: Enable correctness-of-cancel-lessp-plus; name this event ‘correctnessof-cancel-lessp-plus-off1’.

Event: Enable correctness-of-cancel-lessp-times; name this event ‘correctnessof-cancel-lessp-times-off1’.

Event: Enable correctness-of-cancel-equal-times; name this event ‘correctnessof-cancel-equal-times-off1’.

Event: Enable correctness-of-cancel-quotient-times; name this event ‘correctnessof-cancel-quotient-times-off1’.

Definition: v-alu-nat-int-buf (a) = cvzbv (f, f, a)

Theorem: v-alu-correct-nat-int-buf bvp (a) → (cvzbv (f, f, v-buf (a)) = v-alu-nat-int-buf (a))

Theorem: nth-length-v (bvp (bv) ∧ (length (bv) = (1 + n))) → (nth (n, bv) = (v-to-nat (bv) ≮ exp (2, n)))

Theorem: remainder-plus-multiple ((z1 < y1 ) ∧ ((a mod y1 ) = 0)) → (((z1 + a) mod y1 ) = fix (z1 ))

Theorem: divides-plus-plus ((x mod y) = 0) → (((x + x) mod (y + y)) = 0)

Theorem: v-to-nat-firstn-hack1 (z < y) → (((z + z + (w ∗ y) + (w ∗ y)) mod (y + y)) = (z + z))

Theorem: remainder-add1-plus-multiple (((1 + z1 ) < y1 ) ∧ ((a mod y1 ) = 0)) → (((1 + (z1 + a)) mod y1 ) = (1 + z1 ))

Theorem: v-to-nat-firstn-hack2 (z < y) → (((1 + (z + z + (d ∗ y) + (d ∗ y))) mod (y + y))

= (1 + (z + z)))

Theorem: v-to-nat-firstn v-to-nat (firstn (n, v)) = (v-to-nat (v) mod exp (2, n))

Event: Enable v-to-nat-firstn-hack1; name this event ‘v-to-nat-firstn-hack1-off’.

Event: Enable v-to-nat-firstn-hack2; name this event ‘v-to-nat-firstn-hack2-off’.

Theorem: v-to-nat-of-nat-to-v-hack (v < exp (2, x)) → (((1 + (v + v + (w ∗ exp (2, x)) + (w ∗ exp (2, x))))

mod (exp (2, x) + exp (2, x))) = (1 + (v + v)))

Theorem: v-to-nat-of-nat-to-v v-to-nat (nat-to-v (n, len)) = (n mod exp (2, len))

Theorem: remainder-plus-x-x-2 ((x + x) mod 2) = 0

Theorem: quotient-plus-x-x-2 ((x + x) ÷ 2) = fix (x)

Theorem: nat-to-v-plus-x-x nat-to-v (x + x, 1 + n) = cons (f, nat-to-v (x, n))

Theorem: firstn-add1-cons firstn (1 + n, cons (a, x)) = cons (a, firstn (n, x))

Theorem: firstn-zerop (n ≃ 0) → (firstn (n, x) = nil)

Theorem: firstn-nlistp (x ≃ nil) → (firstn (n, x) = nil)

Theorem: nat-to-v-of-v-to-nat-general (bvp (v) ∧ (length (v) ≮ n)) → (nat-to-v (v-to-nat (v), n) = firstn (n, v))

Theorem: firstn-length properp (x) → (firstn (length (x), x) = x)

Theorem: nat-to-v-of-v-to-nat bvp (v) → (nat-to-v (v-to-nat (v), length (v)) = v)

Theorem: nat-to-v-zerop (len ≃ 0) → (nat-to-v (n, len) = nil)

Theorem: equal-nat-to-v-inverter-hack1 ((len ∈ N) ∧ (v = nat-to-v (n, len))) → ((v-to-nat (v) = (n mod exp (2, len))) = t)

Theorem: equal-nat-to-v-inverter-hack2-lemma (bvp (v) ∧ (v-to-nat (v) = (n mod exp (2, len)))) → ((nat-to-v (v-to-nat (v), len) = nat-to-v (n mod exp (2, len), len))

= t)

Theorem: nat-to-v-remainder nat-to-v (n mod exp (2, len), len) = nat-to-v (n, len)

Theorem: equal-nat-to-v-inverter-hack2 (bvp (v) ∧ (v-to-nat (v) = (n mod exp (2, length (v))))) → ((v = nat-to-v (n, length (v))) = t)

Theorem: equal-nat-to-v-inverter (v = nat-to-v (n, len)) ↔ (bvp (v)

∧ (length (v) = fix (len))

∧ (v-to-nat (v) = (n mod exp (2, len))))

Event: Enable equal-nat-to-v-inverter-hack1; name this event ‘equal-nat-to-v-inverter-hack1-off’.

Event: Enable equal-nat-to-v-inverter-hack2; name this event ‘equal-nat-to-v-inverter-hack2-off’.

Theorem: v-to-nat-v-not-lemma bvp (a) → ((v-to-nat (a) + v-to-nat (v-not (a))) = (exp (2, length (a)) − 1))

Theorem: v-to-nat-v-not bvp (a) → (v-to-nat (v-not (a)) = ((exp (2, length (a)) − v-to-nat (a)) − 1))

Theorem: lessp-v-to-nat-exp bvp (a) → (v-to-nat (a) < exp (2, length (a)))

Theorem: equal-iff (boolp (x) ∧ boolp (y)) → ((x = y) = (x ↔ y))

Event: Enable equal-iff; name this event ‘equal-iff-off’.

Theorem: v-alu-correct-nat-subtracter-output-lemma ((a-nat < bound) ∧ (b-nat < bound)) → ((b-nat + ((bound − a-nat) − 1))

= (((b-nat + bound) − a-nat) − 1))

Theorem: lessp-v-to-nat-exp-rewrite (bvp (a) ∧ (length (a) = len)) → ((v-to-nat (a) < exp (2, len)) = t)

Theorem: not-lessp-quotient n ≮ (n ÷ k)

Theorem: v-to-nat-append (bvp (a) ∧ bvp (b)) → (v-to-nat (append (a, b))

= (v-to-nat (a) + (exp (2, length (a)) ∗ v-to-nat (b))))

Definition: v-alu-nat-adder-output (c, a, b) = nat-to-v ((b-to-nat (c) + v-to-nat (a) + v-to-nat (b))

mod exp (2, length (a)), length (a))

Definition: v-alu-nat-adder-carry-out (c, a, b) = ((b-to-nat (c) + v-to-nat (a) + v-to-nat (b)) ≮ exp (2, length (a)))

Definition: v-alu-nat-adder (c, a, b) = cvzbv (v-alu-nat-adder-carry-out (c, a, b),

v-adder-overflowp (c, a, b), v-alu-nat-adder-output (c, a, b))

Theorem: v-alu-correct-nat-adder-carry-out bv2p (a, b) → (v-adder-carry-out (c, a, b) = v-alu-nat-adder-carry-out (c, a, b))

Theorem: v-alu-correct-nat-adder-output bv2p (a, b) → (v-adder-output (c, a, b) = v-alu-nat-adder-output (c, a, b))

Theorem: v-alu-correct-nat-adder bv2p (a, b) → (cvzbv-v-adder (c, a, b) = v-alu-nat-adder (c, a, b))

Definition: v-alu-nat-inc (a) = v-alu-nat-adder (t, a, nat-to-v (0, length (a)))

Theorem: v-alu-correct-nat-inc bvp (a) → (cvzbv-inc (a) = v-alu-nat-inc (a))

Definition: v-alu-nat-subtracter-output (c, a, b) = nat-to-v (((v-to-nat (b) + exp (2, length (a)))

− (v-to-nat (a) + b-to-nat (c))) mod exp (2, length (a)), length (a))

Definition: v-alu-nat-subtracter-carry-out (c, a, b) = (v-to-nat (b) < (v-to-nat (a) + b-to-nat (c)))

Definition: v-alu-nat-subtracter (c, a, b) = cvzbv (v-alu-nat-subtracter-carry-out (c, a, b),

v-subtracter-overflowp (c, a, b), v-alu-nat-subtracter-output (c, a, b))

Theorem: v-alu-correct-nat-subtracter-carry-out bv2p (a, b) → (v-subtracter-carry-out (c, a, b)

= v-alu-nat-subtracter-carry-out (c, a, b))

Theorem: v-alu-correct-nat-subtracter-output bv2p (a, b) → (v-subtracter-output (c, a, b) = v-alu-nat-subtracter-output (c, a, b))

Theorem: v-alu-correct-nat-subtracter bv2p (a, b) → (cvzbv-v-subtracter (c, a, b) = v-alu-nat-subtracter (c, a, b))

Definition: v-alu-nat-dec (a) = v-alu-nat-subtracter (t, nat-to-v (0, length (a)), a)

Theorem: v-alu-correct-nat-dec bvp (a) → (cvzbv-dec (a) = v-alu-nat-dec (a))

Definition: v-alu-nat-lsr-output (a) = nat-to-v (v-to-nat (a) ÷ 2, length (a))

Definition: v-alu-nat-lsr-carry-out (a) = ((v-to-nat (a) mod 2) ≠ 0)

Definition: v-alu-nat-lsr (a) = cvzbv (v-alu-nat-lsr-carry-out (a), f, v-alu-nat-lsr-output (a))

Theorem: v-alu-correct-nat-lsr-carry-out (bvp (a) ∧ listp (a)) → (nth (0, a) = v-alu-nat-lsr-carry-out (a))

Theorem: v-alu-correct-nat-lsr-output bvp (a) → (v-lsr (a) = v-alu-nat-lsr-output (a))

Theorem: v-alu-correct-nat-lsr bvp (a) → (cvzbv-v-lsr (a) = v-alu-nat-lsr (a))

Definition: v-alu-nat-not-output (a) = nat-to-v ((exp (2, length (a)) − v-to-nat (a)) − 1, length (a))

Definition: v-alu-nat-not (a) = cvzbv (f, f, v-alu-nat-not-output (a))

Theorem: v-alu-correct-nat-not-output bvp (a) → (v-not (a) = v-alu-nat-not-output (a))

Theorem: v-alu-correct-nat-not bvp (a) → (cvzbv-v-not (a) = v-alu-nat-not (a))

Definition: v-alu-nat (c, a, b, op) = if op = list (f, f, f, f) then v-alu-nat-int-buf (a)

elseif op = list (t, f, f, f) then v-alu-nat-inc (a)

elseif op = list (f, t, f, f) then v-alu-nat-adder (c, a, b) elseif op = list (t, t, f, f) then v-alu-nat-adder (f, a, b) elseif op = list (t, f, t, f) then v-alu-nat-dec (a) elseif op = list (f, t, t, f) then v-alu-nat-subtracter (c, a, b) elseif op = list (t, t, t, f) then v-alu-nat-subtracter (f, a, b) elseif op = list (f, t, f, t) then v-alu-nat-lsr (a) elseif op = list (f, t, t, t) then v-alu-nat-not (a) else v-alu (c, a, b, op) endif Theorem: v-alu-correct-nat bv2p (a, b) → (v-alu (c, a, b, op) = v-alu-nat (c, a, b, op))

Definition: int-to-v (i, l) = if ilessp (i, 0) then nat-to-v (iplus (i, exp (2, l)), l)

else nat-to-v (i, l) endif

Definition: v-to-int (v) = if v-to-nat (v) < exp (2, length (v) − 1) then v-to-nat (v)

else idifference (v-to-nat (v), exp (2, length (v))) endif

Definition: integer-in-rangep (i, l) = (ileq (ineg (exp (2, l − 1)), i) ∧ ilessp (i, exp (2, l − 1)))

Theorem: iplus-plus ((x ∈ N) ∧ (y ∈ N)) → (iplus (x, y) = (x + y))

Theorem: ilessp-lessp ((x ∈ N) ∧ (y ∈ N)) → (ilessp (x, y) = (x < y))

Theorem: times-2 (2 ∗ x) = (x + x)

Theorem: b-to-nat-leq 1 ≮ b-to-nat (x)

Theorem: lessp-v-to-nat-exp-with-exp-opened (bvp (a) ∧ (length (a) = length (b)) ∧ (length (b) ≠ 0)) → (v-to-nat (a) < (exp (2, length (b) − 1) + exp (2, length (b) − 1)))

Theorem: fix-int-numberp (x ∈ N) → (fix-int (x) = x)

Theorem: iplus3-plus-difference ((c0 ∈ N) ∧ (a0 ∈ N) ∧ (b0 ∈ N) ∧ (d ∈ N) ∧ ((c0 + a0 + b0 ) ≮ d)) → (iplus (c0 , iplus (a0 , iplus (b0 , ineg (d)))) = ((c0 + a0 + b0 ) − d))

Theorem: v-to-int-v-not (bvp (a) ∧ (length (a) ≠ 0)) → (v-to-int (v-not (a)) = iplus (-1, ineg (v-to-int (a))))

Event: Enable v-alu-correct-nat-not-output; name this event ‘v-alu-correct-nat-not-output-off’.

Theorem: v-alu-correct-int-subtracter-overflowp-lemma (bv2p (a, b) ∧ (length (a) ≠ 0)) → (iplus (b-to-nat (b-not (c)), iplus (v-to-int (v-not (a)), v-to-int (b)))

= idifference (v-to-int (b), iplus (v-to-int (a), b-to-nat (c))))

Theorem: idifference-difference ((x ∈ N) ∧ (y ∈ N) ∧ (x ≮ y)) → ((iplus (x, ineg (y)) = (x − y))

∧ (iplus (ineg (y), x) = (x − y)))

Theorem: idiv-quotient ((x ∈ N) ∧ (y ∈ N)) → (idiv (x, y) = (x ÷ y))

Theorem: idiv-ilessp-0 ((y ∈ N) ∧ (y ≠ 0)) → (ilessp (idiv (x, y), 0) = ilessp (x, 0))

Theorem: quotient-plus-x-x-2-with-extra-arg ((x + x + y) ÷ 2) = (x + (y ÷ 2))

Theorem: plus-quotient-2-lemma ((v + (2 ∗ z)) ÷ 2) = (z + (v ÷ 2))

Theorem: plus-quotient-2 (a0 ≮ exp) → ((exp + ((a0 − exp) ÷ 2)) = ((a0 + exp) ÷ 2))

Theorem: iplus-div-hack1 ((a0 ∈ N) ∧ (exp ∈ N)) → (iplus (idiv (iplus (a0 , ineg (exp)), 2), exp) = ((a0 + exp) ÷ 2))

Event: Enable quotient-plus-x-x-2-with-extra-arg; name this event ‘quotientplus-x-x-2-with-extra-arg-off’.

Event: Enable plus-quotient-2-lemma; name this event ‘plus-quotient-2-lemma-off’.

Event: Enable plus-quotient-2; name this event ‘plus-quotient-2-off’.

Theorem: lessp-quotient-2 ((x ÷ 2) < y) ↔ (x < (y + y))

Definition: v-alu-int-adder-output (c, a, b) = int-to-v (iplus (b-to-nat (c), iplus (v-to-int (a), v-to-int (b))), length (a))

Definition: v-alu-int-adder-overflowp (c, a, b) = (¬ integer-in-rangep (iplus (b-to-nat (c),

iplus (v-to-int (a), v-to-int (b))), length (a)))

Definition: v-alu-int-adder (c, a, b) = cvzbv (v-adder-carry-out (c, a, b),

v-alu-int-adder-overflowp (c, a, b), v-alu-int-adder-output (c, a, b))

Theorem: v-alu-correct-int-adder-overflowp (bv2p (a, b) ∧ (length (a) ≠ 0)) → (v-adder-overflowp (c, a, b) = v-alu-int-adder-overflowp (c, a, b))

Theorem: v-alu-correct-int-adder-output (bv2p (a, b) ∧ (length (a) ≠ 0)) → (v-adder-output (c, a, b) = v-alu-int-adder-output (c, a, b))

Theorem: v-alu-correct-int-adder (bv2p (a, b) ∧ (length (a) ≠ 0)) → (cvzbv-v-adder (c, a, b) = v-alu-int-adder (c, a, b))

Definition: v-alu-int-inc (a) = v-alu-int-adder (t, a, int-to-v (0, length (a)))

Theorem: v-alu-correct-int-inc (bvp (a) ∧ (length (a) ≠ 0)) → (cvzbv-inc (a) = v-alu-int-inc (a))

Definition: v-alu-int-subtracter-output (c, a, b) = int-to-v (idifference (v-to-int (b), iplus (v-to-int (a), b-to-nat (c))),

length (a))

Definition: v-alu-int-subtracter-overflowp (c, a, b) = (¬ integer-in-rangep (idifference (v-to-int (b),

iplus (v-to-int (a), b-to-nat (c))),

length (a)))

Definition: v-alu-int-subtracter (c, a, b) = cvzbv (v-subtracter-carry-out (c, a, b),

v-alu-int-subtracter-overflowp (c, a, b), v-alu-int-subtracter-output (c, a, b))

Theorem: v-alu-correct-int-subtracter-overflowp (bv2p (a, b) ∧ (length (a) ≠ 0)) → (v-subtracter-overflowp (c, a, b)

= v-alu-int-subtracter-overflowp (c, a, b))

Theorem: v-alu-correct-int-subtracter-output (bv2p (a, b) ∧ (length (a) ≠ 0)) → (v-subtracter-output (c, a, b) = v-alu-int-subtracter-output (c, a, b))

Theorem: v-alu-correct-int-subtracter (bv2p (a, b) ∧ (length (a) ≠ 0)) → (cvzbv-v-subtracter (c, a, b) = v-alu-int-subtracter (c, a, b))

Definition: v-alu-int-dec (a) = v-alu-int-subtracter (t, int-to-v (0, length (a)), a)

Theorem: v-alu-correct-int-dec (bvp (a) ∧ (length (a) ≠ 0)) → (cvzbv-dec (a) = v-alu-int-dec (a))

Definition: v-alu-int-asr-output (a) = int-to-v (idiv (v-to-int (a), 2), length (a))

Definition: v-alu-int-asr (a) = cvzbv (v-alu-nat-lsr-carry-out (a), f, v-alu-int-asr-output (a))

Theorem: v-alu-correct-int-asr-output (bvp (a) ∧ (length (a) ≠ 0)) → (v-asr (a) = v-alu-int-asr-output (a))

Theorem: v-alu-correct-int-asr bvp (a) → (cvzbv-v-asr (a) = v-alu-int-asr (a))

Definition: v-alu-int-neg (a) = v-alu-int-subtracter (f, a, int-to-v (0, length (a)))

Theorem: v-alu-correct-int-neg (bvp (a) ∧ (length (a) ≠ 0)) → (cvzbv-neg (a) = v-alu-int-neg (a))

Definition: v-alu-int-not-output (a) = v-alu-int-subtracter-output (t, a, int-to-v (0, length (a)))

Definition: v-alu-int-not (a) = cvzbv (f, f, v-alu-int-not-output (a))

Theorem: v-alu-correct-int-not-output (bvp (a) ∧ (length (a) ≠ 0)) → (v-not (a) = v-alu-int-not-output (a))

Theorem: v-alu-correct-int-not (bvp (a) ∧ (length (a) ≠ 0)) → (cvzbv-v-not (a) = v-alu-int-not (a))

Definition: v-alu-int (c, a, b, op) = if op = list (f, f, f, f) then v-alu-nat-int-buf (a)

elseif op = list (t, f, f, f) then v-alu-int-inc (a)

elseif op = list (f, t, f, f) then v-alu-int-adder (c, a, b) elseif op = list (t, t, f, f) then v-alu-int-adder (f, a, b) elseif op = list (f, f, t, f) then v-alu-int-neg (a) elseif op = list (t, f, t, f) then v-alu-int-dec (a) elseif op = list (f, t, t, f) then v-alu-int-subtracter (c, a, b) elseif op = list (t, t, t, f) then v-alu-int-subtracter (f, a, b) elseif op = list (t, f, f, t) then v-alu-int-asr (a) elseif op = list (f, t, t, t) then v-alu-int-not (a) else v-alu (c, a, b, op) endif

Theorem: v-alu-correct-int (bv2p (a, b) ∧ (length (a) ≠ 0)) → (v-alu (c, a, b, op) = v-alu-int (c, a, b, op))

Event: Enable v-alu-correct-nat-int-buf; name this event ‘v-alu-correct-nat-int-buf-off’.

Event: Enable v-alu-correct-nat-adder-carry-out; name this event ‘v-alu-correct-nat-adder-carry-out-off’.

Event: Enable v-alu-correct-nat-adder-output; name this event ‘v-alu-correct-nat-adder-output-off’.

Event: Enable v-alu-correct-nat-adder; name this event ‘v-alu-correct-nat-adder-off’.

Event: Enable v-alu-correct-nat-inc; name this event ‘v-alu-correct-nat-inc-off’.

Event: Enable v-alu-correct-nat-subtracter-carry-out; name this event ‘v-alu-correct-nat-subtracter-carry-out-off’.

Event: Enable v-alu-correct-nat-subtracter-output; name this event ‘v-alu-correct-nat-subtracter-output-off’. Event: Enable v-alu-correct-nat-subtracter; name this event ‘v-alu-correct-nat-subtracter-off’. Event: Enable v-alu-correct-nat-dec; name this event ‘v-alu-correct-nat-dec-off’. Event: Enable v-alu-correct-nat-lsr-carry-out; name this event ‘v-alu-correct-nat-lsr-carry-out-off’. Event: Enable v-alu-correct-nat-lsr-output; name this event ‘v-alu-correct-nat-lsr-output-off’. Event: Enable v-alu-correct-nat-lsr; name this event ‘v-alu-correct-nat-lsr-off’. Event: Enable v-alu-correct-nat-not-output; name this event ‘v-alu-correct-nat-not-output-off1’. Event: Enable v-alu-correct-nat-not; name this event ‘v-alu-correct-nat-not-off’. Event: Enable v-alu-correct-int-adder-overflowp; name this event ‘v-alu-correct-int-adder-overflowp-off’. Event: Enable v-alu-correct-int-adder-output; name this event ‘v-alu-correct-int-adder-output-off’. Event: Enable v-alu-correct-int-adder; name this event ‘v-alu-correct-int-adder-off’. Event: Enable v-alu-correct-int-inc; name this event ‘v-alu-correct-int-inc-off’. Event: Enable v-alu-correct-int-subtracter-overflowp; name this event ‘v-alu-correct-int-subtracter-overflowp-off’.

Event: Enable v-alu-correct-int-subtracter-output; name this event ‘v-alu-correct-int-subtracter-output-off’. Event: Enable v-alu-correct-int-subtracter; name this event ‘v-alu-correct-int-subtracter-off’. Event: Enable v-alu-correct-int-dec; name this event ‘v-alu-correct-int-dec-off’. Event: Enable v-alu-correct-int-asr-output; name this event ‘v-alu-correct-int-asr-output-off’. Event: Enable v-alu-correct-int-asr; name this event ‘v-alu-correct-int-asr-off’. Event: Enable v-alu-correct-int-neg; name this event ‘v-alu-correct-int-neg-off’. Event: Enable v-alu-correct-int-not; name this event ‘v-alu-correct-int-not-off’. Event: Enable v-alu-correct-int; name this event ‘v-alu-correct-int-off’. Event: Enable v-alu-int; name this event ‘v-alu-int-off’. Event: Enable *1*v-alu-int; name this event ‘g*1*v-alu-int-off’. Event: Enable v-alu-correct-int-not-output; name this event ‘v-alu-correct-int-not-output-off’. Event: Enable v-alu-int-not; name this event ‘v-alu-int-not-off’. Event: Enable *1*v-alu-int-not; name this event ‘g*1*v-alu-int-not-off’. Event: Enable v-alu-int-not-output; name this event ‘v-alu-int-not-output-off’. Event: Enable *1*v-alu-int-not-output; name this event ‘g*1*v-alu-int-not-output-off’.

Event: Enable v-alu-int-neg; name this event ‘v-alu-int-neg-off’. Event: Enable *1*v-alu-int-neg; name this event ‘g*1*v-alu-int-neg-off’. Event: Enable v-alu-int-asr; name this event ‘v-alu-int-asr-off’. Event: Enable *1*v-alu-int-asr; name this event ‘g*1*v-alu-int-asr-off’. Event: Enable v-alu-int-asr-output; name this event ‘v-alu-int-asr-output-off’. Event: Enable *1*v-alu-int-asr-output; name this event ‘g*1*v-alu-int-asr-output-off’. Event: Enable v-alu-int-dec; name this event ‘v-alu-int-dec-off’. Event: Enable *1*v-alu-int-dec; name this event ‘g*1*v-alu-int-dec-off’. Event: Enable v-alu-int-subtracter; name this event ‘v-alu-int-subtracter-off’. Event: Enable *1*v-alu-int-subtracter; name this event ‘g*1*v-alu-int-subtracter-off’. Event: Enable v-alu-int-subtracter-overflowp; name this event ‘v-alu-int-subtracter-overflowp-off’. Event: Enable *1*v-alu-int-subtracter-overflowp; name this event ‘g*1*v-alu-int-subtracter-overflowp-off’. Event: Enable v-alu-int-subtracter-output; name this event ‘v-alu-int-subtracter-output-off’. Event: Enable *1*v-alu-int-subtracter-output; name this event ‘g*1*v-alu-int-subtracter-output-off’. Event: Enable v-alu-int-inc; name this event ‘v-alu-int-inc-off’.

Event: Enable *1*v-alu-int-inc; name this event ‘g*1*v-alu-int-inc-off’. Event: Enable v-alu-int-adder; name this event ‘v-alu-int-adder-off’. Event: Enable *1*v-alu-int-adder; name this event ‘g*1*v-alu-int-adder-off’. Event: Enable v-alu-int-adder-overflowp; name this event ‘v-alu-int-adder-overflowp-off’. Event: Enable *1*v-alu-int-adder-overflowp; name this event ‘g*1*v-alu-int-adder-overflowp-off’. Event: Enable v-alu-int-adder-output; name this event ‘v-alu-int-adder-output-off’. Event: Enable *1*v-alu-int-adder-output; name this event ‘g*1*v-alu-int-adder-output-off’. Event: Enable lessp-quotient-2; name this event ‘lessp-quotient-2-off’. Event: Enable iplus-div-hack1; name this event ‘iplus-div-hack1-off’. Event: Enable idiv-ilessp-0; name this event ‘idiv-ilessp-0-off’. Event: Enable idiv-quotient; name this event ‘idiv-quotient-off’. Event: Enable idifference-difference; name this event ‘idifference-difference-off’. Event: Enable v-alu-correct-int-subtracter-overflowp-lemma; name this event ‘v-alu-correct-int-subtracter-overflowp-lemma-off’. Event: Enable v-to-int-v-not; name this event ‘v-to-int-v-not-off’. Event: Enable iplus3-plus-difference; name this event ‘iplus3-plus-difference-off’.

Event: Enable fix-int-numberp; name this event ‘fix-int-numberp-off’. Event: Enable lessp-v-to-nat-exp-with-exp-opened; name this event ‘lessp-v-to-nat-exp-with-exp-opened-off’. Event: Enable b-to-nat-leq; name this event ‘b-to-nat-leq-off’. Event: Enable times-2; name this event ‘times-2-off’. Event: Enable ilessp-lessp; name this event ‘ilessp-lessp-off’. Event: Enable iplus-plus; name this event ‘iplus-plus-off’. Event: Enable integer-in-rangep; name this event ‘integer-in-rangep-off’. Event: Enable *1*integer-in-rangep; name this event ‘g*1*integer-in-rangep-off’. Event: Enable v-to-int; name this event ‘v-to-int-off’. Event: Enable *1*v-to-int; name this event ‘g*1*v-to-int-off’. Event: Enable int-to-v; name this event ‘int-to-v-off’. Event: Enable *1*int-to-v; name this event ‘g*1*int-to-v-off’. Event: Enable v-alu-correct-nat; name this event ‘v-alu-correct-nat-off’. Event: Enable v-alu-nat; name this event ‘v-alu-nat-off’. Event: Enable *1*v-alu-nat; name this event ‘g*1*v-alu-nat-off’. Event: Enable v-alu-nat-not; name this event ‘v-alu-nat-not-off’. Event: Enable *1*v-alu-nat-not; name this event ‘g*1*v-alu-nat-not-off’.

Event: Enable v-alu-nat-not-output; name this event ‘v-alu-nat-not-output-off’. Event: Enable *1*v-alu-nat-not-output; name this event ‘g*1*v-alu-nat-not-output-off’. Event: Enable v-alu-nat-lsr; name this event ‘v-alu-nat-lsr-off’. Event: Enable *1*v-alu-nat-lsr; name this event ‘g*1*v-alu-nat-lsr-off’. Event: Enable v-alu-nat-lsr-carry-out; name this event ‘v-alu-nat-lsr-carry-out-off’. Event: Enable *1*v-alu-nat-lsr-carry-out; name this event ‘g*1*v-alu-nat-lsr-carry-out-off’. Event: Enable v-alu-nat-lsr-output; name this event ‘v-alu-nat-lsr-output-off’. Event: Enable *1*v-alu-nat-lsr-output; name this event ‘g*1*v-alu-nat-lsr-output-off’. Event: Enable v-alu-nat-dec; name this event ‘v-alu-nat-dec-off’. Event: Enable *1*v-alu-nat-dec; name this event ‘g*1*v-alu-nat-dec-off’. Event: Enable v-alu-nat-subtracter; name this event ‘v-alu-nat-subtracter-off’. Event: Enable *1*v-alu-nat-subtracter; name this event ‘g*1*v-alu-nat-subtracter-off’. Event: Enable v-alu-nat-subtracter-carry-out; name this event ‘v-alu-nat-subtracter-carry-out-off’. Event: Enable *1*v-alu-nat-subtracter-carry-out; name this event ‘g*1*v-alu-nat-subtracter-carry-out-off’. Event: Enable v-alu-nat-subtracter-output; name this event ‘v-alu-nat-subtracter-output-off’. Event: Enable *1*v-alu-nat-subtracter-output; name this event ‘g*1*v-alu-nat-subtracter-output-off’. Event: Enable v-alu-nat-inc; name this event ‘v-alu-nat-inc-off’. Event: Enable *1*v-alu-nat-inc; name this event ‘g*1*v-alu-nat-inc-off’. Event: Enable v-alu-nat-adder; name this event ‘v-alu-nat-adder-off’. Event: Enable *1*v-alu-nat-adder; name this event ‘g*1*v-alu-nat-adder-off’. Event: Enable v-alu-nat-adder-carry-out; name this event ‘v-alu-nat-adder-carry-out-off’. Event: Enable *1*v-alu-nat-adder-carry-out; name this event ‘g*1*v-alu-nat-adder-carry-out-off’. Event: Enable v-alu-nat-adder-output; name this event ‘v-alu-nat-adder-output-off’. Event: Enable *1*v-alu-nat-adder-output; name this event ‘g*1*v-alu-nat-adder-output-off’. Event: Enable v-to-nat-append; name this event ‘v-to-nat-append-off’. Event: Enable not-lessp-quotient; name this event ‘not-lessp-quotient-off’. Event: Enable lessp-v-to-nat-exp-rewrite; name this event ‘lessp-v-to-nat-exp-rewrite-off’. Event: Enable v-alu-correct-nat-subtracter-output-lemma; name this event ‘valu-correct-nat-subtracter-output-lemma-off’. Event: Enable lessp-v-to-nat-exp; name this event ‘lessp-v-to-nat-exp-off’.

Event: Enable v-to-nat-v-not; name this event ‘v-to-nat-v-not-off’. Event: Enable v-to-nat-v-not-lemma; name this event ‘v-to-nat-v-not-lemma-off’. Event: Enable equal-nat-to-v-inverter; name this event ‘equal-nat-to-v-inverter-off’. Event: Enable nat-to-v-remainder; name this event ‘nat-to-v-remainder-off’. Event: Enable equal-nat-to-v-inverter-hack2-lemma; name this event ‘equalnat-to-v-inverter-hack2-lemma-off’. Event: Enable nat-to-v-zerop; name this event ‘nat-to-v-zerop-off’. Event: Enable nat-to-v-of-v-to-nat; name this event ‘nat-to-v-of-v-to-nat-off’. Event: Enable firstn-length; name this event ‘firstn-length-off’. Event: Enable nat-to-v-of-v-to-nat-general; name this event ‘nat-to-v-of-v-to-nat-general-off’. Event: Enable firstn-nlistp; name this event ‘firstn-nlistp-off’. Event: Enable firstn-zerop; name this event ‘firstn-zerop-off’. Event: Enable firstn-add1-cons; name this event ‘firstn-add1-cons-off’. Event: Enable nat-to-v-plus-x-x; name this event ‘nat-to-v-plus-x-x-off’. Event: Enable quotient-plus-x-x-2; name this event ‘quotient-plus-x-x-2-off’. Event: Enable remainder-plus-x-x-2; name this event ‘remainder-plus-x-x-2-off’. Event: Enable v-to-nat-of-nat-to-v; name this event ‘v-to-nat-of-nat-to-v-off’.

Event: Enable v-to-nat-of-nat-to-v-hack; name this event ‘v-to-nat-of-nat-to-v-hack-off’. Event: Enable v-to-nat-firstn; name this event ‘v-to-nat-firstn-off’. Event: Enable remainder-add1-plus-multiple; name this event ‘remainderadd1-plus-multiple-off’. Event: Enable divides-plus-plus; name this event ‘divides-plus-plus-off’. Event: Enable remainder-plus-multiple; name this event ‘remainder-plus-multiple-off’. Event: Enable nth-length-v; name this event ‘nth-length-v-off’. Event: Enable v-alu-nat-int-buf; name this event ‘v-alu-nat-int-buf-off’. Event: Enable *1*v-alu-nat-int-buf; name this event ‘g*1*v-alu-nat-int-buf-off’. Event: Enable bvp-cdr; name this event ‘bvp-cdr-off’. Event: Enable b-to-nat; name this event ‘b-to-nat-off’. Event: Enable *1*b-to-nat; name this event ‘g*1*b-to-nat-off’. Event: Enable map-down-inverts-map-up; name this event ‘map-down-inverts-map-up-off1’. Event: Enable for-final-1-of-reset-sequence-chip; name this event ‘for-final-1-of-reset-sequence-chip-off1’. Event: Disable chip-well-formed-simple; name this event ‘chip-well-formed-simple-on’. Event: Disable chip-well-formed-after-indexed-names-removed; name this event ‘chip-well-formed-after-indexed-names-removed-on’.

Event: Disable chip-well-formed; name this event ‘chip-well-formed-on’. Event: Disable chip-system=fm9001-interpreter$after-reset; name this event ‘chip-system=fm9001-interpreter$after-reset-on’. Event: Disable reset-chip-from-any-state; name this event ‘reset-chip-from-any-state-on’. Event: Disable reset-chip; name this event ‘reset-chip-on’. Event: Disable length-reset-sequence-chip-1; name this event ‘length-reset-sequence-chip-1-on’. Event: Disable simulate-contains-simulate-dual-eval-2; name this event ‘simulatecontains-simulate-dual-eval-2-on’. Event: Disable fm9001=chip-system-true-after-reset; name this event ‘fm9001=chipsystem-true-after-reset-on’. Event: Disable cadr-map-up; name this event ‘cadr-map-up-on’. Event: Disable fm9001=chip-system-true-after-reset-lemma; name this event ‘fm9001=chip-system-true-after-reset-lemma-on’. Event: Disable fm9001-statep-implies-memory-ok-p-instance; name this event ‘fm9001-statep-implies-memory-ok-p-instance-on’. Event: Disable new-machine-state-invariant-implies-machine-state-invariant; name this event ‘new-machine-state-invariant-implies-machine-state-invariant-on’. Event: Disable memory-v-fourp-implies-memory-properp; name this event ‘memoryv-fourp-implies-memory-properp-on’. Event: Disable new-machine-state-invariant-is-non-trivial; name this event ‘newmachine-state-invariant-is-non-trivial-on’.

Event: Disable xs-suffice-for-reset-chip-final-state-for-any-unknown-state-better; name this event ‘xs-suffice-for-reset-chip-final-state-for-any-unknown-state-better-on’. Event: Disable xs-suffice-for-reset-chip-final-state-for-any-unknown-state; name this event ‘xs-suffice-for-reset-chip-final-state-for-any-unknown-state-on’. Event: Disable new-machine-state-invariant-implies-good-s; name this event ‘new-machine-state-invariant-implies-good-s-on’. Event: Disable v-fourp-is-good-s; name this event ‘v-fourp-is-good-s-on’. Event: Disable memory-v-fourp-implies-good-s; name this event ‘memory-v-fourp-implies-good-s-on’. Event: Disable good-s-opener; name this event ‘good-s-opener-on’. Event: Disable machine-state-invariant-implies-s-approx; name this event ‘machinestate-invariant-implies-s-approx-on’. Event: Disable machine-state-invariant-implies-s-approx-lemma-3; name this event ‘machine-state-invariant-implies-s-approx-lemma-3-on’. Event: Disable machine-state-invariant-implies-s-approx-lemma-2; name this event ‘machine-state-invariant-implies-s-approx-lemma-2-on’. Event: Disable machine-state-invariant-implies-s-approx-lemma; name this event ‘machine-state-invariant-implies-s-approx-lemma-on’. Event: Disable b-approx-x; name this event ‘b-approx-x-on’. Event: Disable stubp-implies-not-fourp; name this event ‘stubp-implies-not-fourp-on’. Event: Disable romp-implies-not-fourp; name this event ‘romp-implies-not-fourp-on’.

Event: Disable ramp-implies-not-fourp; name this event ‘ramp-implies-not-fourp-on’. Event: Disable listp-implies-not-fourp; name this event ‘listp-implies-not-fourp-on’. Event: Disable v-fourp-implies-properp; name this event ‘v-fourp-implies-properp-on’. Event: Disable s-approx-make-list; name this event ‘s-approx-make-list-on’. Event: Disable new-machine-state-invariant; name this event ‘new-machine-state-invariant-on’. Event: Disable *1*new-machine-state-invariant; name this event ‘g*1*newmachine-state-invariant-on’. Event: Disable memory-v-fourp; name this event ‘memory-v-fourp-on’. Event: Disable *1*memory-v-fourp; name this event ‘g*1*memory-v-fourp-on’. Event: Disable all-xs-make-list; name this event ‘all-xs-make-list-on’. Event: Disable all-xs-approximates; name this event ‘all-xs-approximates-on’. Event: Disable all-xs; name this event ‘all-xs-on’. Event: Disable *1*all-xs; name this event ‘g*1*all-xs-on’. Event: Disable v-fourp; name this event ‘v-fourp-on’. Event: Disable *1*v-fourp; name this event ‘g*1*v-fourp-on’. Event: Disable fm9001-machine-statep-p-map-up-initialized-machine-state; name this event ‘fm9001-machine-statep-p-map-up-initialized-machine-state-on’.

Event: Disable xs-suffice-for-reset-chip-lemma-instance; name this event ‘xssuffice-for-reset-chip-lemma-instance-on’. Event: Disable simulate-reset-chip-final-state; name this event ‘simulate-reset-chip-final-state-on’. Event: Disable reset-sequence-chip-1-vs-2; name this event ‘reset-sequence-chip-1-vs-2-on’. Event: Disable reset-sequence-chip-2; name this event ‘reset-sequence-chip-2-on’. Event: Disable *1*reset-sequence-chip-2; name this event ‘g*1*reset-sequence-chip-2-on’. Event: Disable reset-sequence-chip-1; name this event ‘reset-sequence-chip-1-on’. Event: Disable *1*reset-sequence-chip-1; name this event ‘g*1*reset-sequence-chip-1-on’. Event: Disable run-vector-chip-2; name this event ‘run-vector-chip-2-on’. Event: Disable *1*run-vector-chip-2; name this event ‘g*1*run-vector-chip-2-on’. Event: Disable run-vector-chip-1; name this event ‘run-vector-chip-1-on’. Event: Disable *1*run-vector-chip-1; name this event ‘g*1*run-vector-chip-1-on’. Event: Disable reset-vector-chip; name this event ‘reset-vector-chip-on’. Event: Disable *1*reset-vector-chip; name this event ‘g*1*reset-vector-chip-on’. Event: Disable fm9001-statep-map-up-final-state; name this event ‘fm9001statep-map-up-final-state-on’. Event: Disable instance-theorem; name this event ‘instance-theorem-on’. Event: Disable final-state-okp; name this event ‘final-state-okp-on’. Event: Disable unknown-state-okp; name this event ‘unknown-state-okp-on’. Event: Disable reset-works; name this event ‘reset-works-on’. Event: Disable final-state; name this event ‘final-state-on’. Event: Disable *1*final-state; name this event ‘g*1*final-state-on’. Event: Disable initialized-memory-state; name this event ‘initialized-memory-state-on’. Event: Disable *1*initialized-memory-state; name this event ‘g*1*initializedmemory-state-on’. Event: Disable initialized-machine-state; name this event ‘initialized-machine-state-on’. Event: Disable *1*initialized-machine-state; name this event ‘g*1*initializedmachine-state-on’. Event: Disable initialized-regfile; name this event ‘initialized-regfile-on’. Event: Disable *1*initialized-regfile; name this event ‘g*1*initialized-regfile-on’. Event: Disable chip-system-operating-inputs-p-reset-sequence; name this event ‘chip-system-operating-inputs-p-reset-sequence-on’. Event: Disable reset-sequence; name this event ‘reset-sequence-on’.

Event: Disable *1*reset-sequence; name this event ‘g*1*reset-sequence-on’. Event: Disable run-vector; name this event ‘run-vector-on’. Event: Disable *1*run-vector; name this event ‘g*1*run-vector-on’. Event: Disable reset-vector; name this event ‘reset-vector-on’. Event: Disable *1*reset-vector; name this event ‘g*1*reset-vector-on’. Event: Disable fm9001-state-structure-unknown-state; name this event ‘fm9001state-structure-unknown-state-on’. Event: Disable chip-system-invariant-unknown-state; name this event ‘chipsystem-invariant-unknown-state-on’. Event: Disable unknown-state; name this event ‘unknown-state-on’. Event: Disable *1*unknown-state; name this event ‘g*1*unknown-state-on’. Event: Disable unknown-memory-state; name this event ‘unknown-memory-state-on’. Event: Disable *1*unknown-memory-state; name this event ‘g*1*unknownmemory-state-on’. Event: Disable unknown-machine-state; name this event ‘unknown-machine-state-on’. Event: Disable *1*unknown-machine-state; name this event ‘g*1*unknownmachine-state-on’. Event: Disable unknown-regfile; name this event ‘unknown-regfile-on’. Event: Disable *1*unknown-regfile; name this event ‘g*1*unknown-regfile-on’.

Event: Disable compile-uncompiled-defns; name this event ‘compile-uncompiled-defns-on2’. Event: For efficiency, compile those definitions not yet compiled. Event: Disable *1*compile-uncompiled-defns; name this event ‘g*1*compileuncompiled-defns-on’. Event: Disable xs-suffice-for-reset-lemma; name this event ‘xs-suffice-for-reset-lemma-on’. Event: Disable xs-suffice-for-reset-lemma-verbose; name this event ‘xs-suffice-for-reset-lemma-verbose-on’. Event: Disable length-simulate; name this event ‘length-simulate-on’. Event: Disable doublet-p-equal-approx; name this event ‘doublet-p-equal-approx-on’. Event: Disable doublet-n-simulate; name this event ‘doublet-n-simulate-on’. Event: Disable doublet-n-simulate-induction; name this event ‘doublet-n-simulate-induction-on’. Event: Disable *1*doublet-n-simulate-induction; name this event ‘g*1*doubletn-simulate-induction-on’. Event: Disable *1*doublet-p; name this event ‘g*1*doublet-p-on’. Event: Disable v-approx-list-x-x; name this event ‘v-approx-list-x-x-on’. Event: Disable simulate-monotone; name this event ‘simulate-monotone-on’. Event: Disable simulate-monotone-induction; name this event ‘simulate-monotone-induction-on’. Event: Disable *1*simulate-monotone-induction; name this event ‘g*1*simulatemonotone-induction-on’. Event: Disable s-approx-cadr-nth; name this event ‘s-approx-cadr-nth-on’. Event: Disable v-approx-car-nth; name this event ‘v-approx-car-nth-on’. Event: Disable nat-lst-lst-induction; name this event ‘nat-lst-lst-induction-on’. Event: Disable *1*nat-lst-lst-induction; name this event ‘g*1*nat-lst-lst-induction-on’. Event: Disable v-s-approx-list; name this event ‘v-s-approx-list-on’. Event: Disable *1*v-s-approx-list; name this event ‘g*1*v-s-approx-list-on’. Event: Disable v-approx-list; name this event ‘v-approx-list-on’. Event: Disable *1*v-approx-list; name this event ‘g*1*v-approx-list-on’. Event: Disable good-s-preserved; name this event ‘good-s-preserved-on’. Event: Disable primp-preserves-good-s; name this event ‘primp-preserves-good-s-on’. Event: Disable dp-ram-16x32-preserves-good-s; name this event ‘dp-ram-16x32-preserves-good-s-on’. Event: Disable good-s-write-mem; name this event ‘good-s-write-mem-on’. Event: Disable good-s-write-mem-1; name this event ‘good-s-write-mem-1-on’. Event: Disable good-s-constant-ram; name this event ‘good-s-constant-ram-on’. Event: Disable vss-preserves-good-s; name this event ‘vss-preserves-good-s-on’.

Event: Disable vdd-parametric-preserves-good-s; name this event ‘vdd-parametric-preserves-good-s-on’.

Event: Disable vdd-preserves-good-s; name this event ‘vdd-preserves-good-s-on’.

Event: Disable ttl-tri-output-fast-preserves-good-s; name this event ‘ttl-tri-output-fast-preserves-good-s-on’.

Event: Disable ttl-tri-output-preserves-good-s; name this event ‘ttl-tri-output-preserves-good-s-on’.

Event: Disable ttl-output-fast-preserves-good-s; name this event ‘ttl-output-fast-preserves-good-s-on’.

Event: Disable ttl-output-parametric-preserves-good-s; name this event ‘ttloutput-parametric-preserves-good-s-on’.

Event: Disable ttl-output-preserves-good-s; name this event ‘ttl-output-preserves-good-s-on’.

Event: Disable ttl-input-preserves-good-s; name this event ‘ttl-input-preserves-good-s-on’.

Event: Disable ttl-clk-input-preserves-good-s; name this event ‘ttl-clk-input-preserves-good-s-on’.

Event: Disable ttl-bidirect-preserves-good-s; name this event ‘ttl-bidirect-preserves-good-s-on’.

Event: Disable pullup-preserves-good-s; name this event ‘pullup-preserves-good-s-on’.

Event: Disable t-wire-preserves-good-s; name this event ‘t-wire-preserves-good-s-on’.

Event: Disable t-buf-preserves-good-s; name this event ‘t-buf-preserves-good-s-on’.

Event: Disable ram-enable-circuit-preserves-good-s; name this event ‘ramenable-circuit-preserves-good-s-on’.

Event: Disable id-preserves-good-s; name this event ‘id-preserves-good-s-on’.

Event: Disable fd1slp-preserves-good-s; name this event ‘fd1slp-preserves-good-s-on’.

Event: Disable fd1sp-preserves-good-s; name this event ‘fd1sp-preserves-good-s-on’.

Event: Disable fd1s-preserves-good-s; name this event ‘fd1s-preserves-good-s-on’.

Event: Disable fd1-preserves-good-s; name this event ‘fd1-preserves-good-s-on’.

Event: Disable procmon-preserves-good-s; name this event ‘procmon-preserves-good-s-on’.

Event: Disable del10-preserves-good-s; name this event ‘del10-preserves-good-s-on’.

Event: Disable del4-preserves-good-s; name this event ‘del4-preserves-good-s-on’.

Event: Disable del2-preserves-good-s; name this event ‘del2-preserves-good-s-on’.

Event: Disable b-xor3-preserves-good-s; name this event ‘b-xor3-preserves-good-s-on’.

Event: Disable b-xor-preserves-good-s; name this event ‘b-xor-preserves-good-s-on’.

Event: Disable b-or4-preserves-good-s; name this event ‘b-or4-preserves-good-s-on’.

Event: Disable b-or3-preserves-good-s; name this event ‘b-or3-preserves-good-s-on’.

Event: Disable b-or-preserves-good-s; name this event ‘b-or-preserves-good-s-on’.

Event: Disable b-not-ivap-preserves-good-s; name this event ‘b-not-ivap-preserves-good-s-on’.

Event: Disable b-not-b4ip-preserves-good-s; name this event ‘b-not-b4ip-preserves-good-s-on’.

Event: Disable b-not-preserves-good-s; name this event ‘b-not-preserves-good-s-on’.

Event: Disable b-nor8-preserves-good-s; name this event ‘b-nor8-preserves-good-s-on’.

Event: Disable b-nor6-preserves-good-s; name this event ‘b-nor6-preserves-good-s-on’.

Event: Disable b-nor5-preserves-good-s; name this event ‘b-nor5-preserves-good-s-on’.

Event: Disable b-nor4-preserves-good-s; name this event ‘b-nor4-preserves-good-s-on’.

Event: Disable b-nor3-preserves-good-s; name this event ‘b-nor3-preserves-good-s-on’.

Event: Disable b-nor-preserves-good-s; name this event ‘b-nor-preserves-good-s-on’.

Event: Disable b-nbuf-preserves-good-s; name this event ‘b-nbuf-preserves-good-s-on’.

Event: Disable b-nand8-preserves-good-s; name this event ‘b-nand8-preserves-good-s-on’.

Event: Disable b-nand6-preserves-good-s; name this event ‘b-nand6-preserves-good-s-on’.

Event: Disable b-nand5-preserves-good-s; name this event ‘b-nand5-preserves-good-s-on’.

Event: Disable b-nand4-preserves-good-s; name this event ‘b-nand4-preserves-good-s-on’.

Event: Disable b-nand3-preserves-good-s; name this event ‘b-nand3-preserves-good-s-on’.

Event: Disable b-nand-preserves-good-s; name this event ‘b-nand-preserves-good-s-on’.

Event: Disable b-if-preserves-good-s; name this event ‘b-if-preserves-good-s-on’.

Event: Disable b-equv3-preserves-good-s; name this event ‘b-equv3-preserves-good-s-on’.

Event: Disable b-equv-preserves-good-s; name this event ‘b-equv-preserves-good-s-on’.

Event: Disable b-and4-preserves-good-s; name this event ‘b-and4-preserves-good-s-on’.

Event: Disable b-and3-preserves-good-s; name this event ‘b-and3-preserves-good-s-on’.

Event: Disable b-and-preserves-good-s; name this event ‘b-and-preserves-good-s-on’.

Event: Disable ao7-preserves-good-s; name this event ‘ao7-preserves-good-s-on’.

Event: Disable ao6-preserves-good-s; name this event ‘ao6-preserves-good-s-on’.

Event: Disable ao4-preserves-good-s; name this event ‘ao4-preserves-good-s-on’. Event: Disable ao2-preserves-good-s; name this event ‘ao2-preserves-good-s-on’. Event: Disable good-s-0; name this event ‘good-s-0-on’. Event: Disable f-if-preserves-good-s; name this event ‘f-if-preserves-good-s-on’. Event: Disable f-buf-preserves-good-s; name this event ‘f-buf-preserves-good-s-on’. Event: Disable good-s-collect-value; name this event ‘good-s-collect-value-on’. Event: Disable dual-eval-monotone; name this event ‘dual-eval-monotone-on’. Event: Disable good-s-value; name this event ‘good-s-value-on’. Event: Disable good-s-alist-pairlist; name this event ‘good-s-alist-pairlist-on’. Event: Disable good-s-alist; name this event ‘good-s-alist-on’. Event: Disable *1*good-s-alist; name this event ‘g*1*good-s-alist-on’. Event: Disable dual-eval-monotone-no-ram; name this event ‘dual-eval-monotone-no-ram-on’. Event: Disable ok-netlistp-reduction-rewrite; name this event ‘ok-netlistp-reduction-rewrite-on’. Event: Disable ok-netlistp-reduction; name this event ‘ok-netlistp-reduction-on’. Event: Disable s-approx-alist-implies-s-approx-collect-value; name this event ‘s-approx-alist-implies-s-approx-collect-value-on’.

Event: Disable s-approx-implies-s-approx-alist; name this event ‘s-approx-implies-s-approx-alist-on’. Event: Disable alistp-dual-eval-3; name this event ‘alistp-dual-eval-3-on’. Event: Disable s-approx-alist-implies-s-approx-list-collect-value; name this event ‘s-approx-alist-implies-s-approx-list-collect-value-on’. Event: Disable double-cdr-induction; name this event ‘double-cdr-induction-on’. Event: Disable *1*double-cdr-induction; name this event ‘g*1*double-cdr-induction-on’. Event: Disable v-approx-alist-append; name this event ‘v-approx-alist-append-on’. Event: Disable s-approx-alist-implies-s-approx-value; name this event ‘s-approx-alist-implies-s-approx-value-on’. Event: Disable alistp-opener; name this event ‘alistp-opener-on’. Event: Disable v-approx-implies-v-approx-alist; name this event ‘v-approx-implies-v-approx-alist-on’. Event: Disable s-approx-list-implies-s-approx-alist; name this event ‘s-approx-list-implies-s-approx-alist-on’. Event: Disable s-approx-list; name this event ‘s-approx-list-on’. Event: Disable *1*s-approx-list; name this event ‘g*1*s-approx-list-on’. Event: Disable v-approx-alist-implies-v-approx-collect-value; name this event ‘v-approx-alist-implies-v-approx-collect-value-on’. Event: Disable alistp-dual-eval-1; name this event ‘alistp-dual-eval-1-on’.

Event: Disable alistp-append; name this event ‘alistp-append-on’. Event: Disable alistp-pairlist; name this event ‘alistp-pairlist-on’. Event: Disable v-approx-alist-implies-b-approx-value; name this event ‘v-approx-alist-implies-b-approx-value-on’. Event: Disable dual-eval-monotone-induction; name this event ‘dual-eval-monotone-induction-on’. Event: Disable *1*dual-eval-monotone-induction; name this event ‘g*1*dualeval-monotone-induction-on’. Event: Disable primp-monotone; name this event ‘primp-monotone-on’. Event: Disable ok-netlistp; name this event ‘ok-netlistp-on’. Event: Disable *1*ok-netlistp; name this event ‘g*1*ok-netlistp-on’. Event: Disable dual-port-ram-state-body; name this event ‘dual-port-ram-state-body-on’. Event: Disable *1*dual-port-ram-state-body; name this event ‘g*1*dual-port-ram-state-body-on’. Event: Disable dual-port-ram-state-monotone; name this event ‘dual-port-ram-state-monotone-on’. Event: Disable write-mem1-double-induction; name this event ‘write-mem1-double-induction-on’. Event: Disable *1*write-mem1-double-induction; name this event ‘g*1*writemem1-double-induction-on’. Event: Disable write-mem1-monotone-induction; name this event ‘write-mem1-monotone-induction-on’.

Event: Disable *1*write-mem1-monotone-induction; name this event ‘g*1*writemem1-monotone-induction-on’. Event: Disable dual-port-ram-value-body; name this event ‘dual-port-ram-value-body-on’. Event: Disable *1*dual-port-ram-value-body; name this event ‘g*1*dual-port-ram-value-body-on’. Event: Disable v-approx-x-x; name this event ‘v-approx-x-x-on1’. Event: Disable read-mem1-monotone-induction; name this event ‘read-mem1-monotone-induction-on’. Event: Disable *1*read-mem1-monotone-induction; name this event ‘g*1*readmem1-monotone-induction-on’. Event: Disable bvp-rev1; name this event ‘bvp-rev1-on’. Event: Disable vss-monotone; name this event ‘vss-monotone-on’. Event: Disable dual-eval-vss-state; name this event ‘dual-eval-vss-state-on’. Event: Disable dual-eval-vss-value; name this event ‘dual-eval-vss-value-on’. Event: Disable vdd-parametric-monotone; name this event ‘vdd-parametric-monotone-on’. Event: Disable dual-eval-vdd-parametric-state; name this event ‘dual-eval-vdd-parametric-state-on’. Event: Disable dual-eval-vdd-parametric-value; name this event ‘dual-eval-vdd-parametric-value-on’. Event: Disable vdd-monotone; name this event ‘vdd-monotone-on’. Event: Disable dual-eval-vdd-state; name this event ‘dual-eval-vdd-state-on’.

Event: Disable dual-eval-vdd-value; name this event ‘dual-eval-vdd-value-on’. Event: Disable ttl-tri-output-fast-monotone; name this event ‘ttl-tri-output-fast-monotone-on’. Event: Disable dual-eval-ttl-tri-output-fast-state; name this event ‘dual-eval-ttl-tri-output-fast-state-on’. Event: Disable dual-eval-ttl-tri-output-fast-value; name this event ‘dual-eval-ttl-tri-output-fast-value-on’. Event: Disable ttl-tri-output-monotone; name this event ‘ttl-tri-output-monotone-on’. Event: Disable dual-eval-ttl-tri-output-state; name this event ‘dual-eval-ttl-tri-output-state-on’. Event: Disable dual-eval-ttl-tri-output-value; name this event ‘dual-eval-ttl-tri-output-value-on’. Event: Disable ttl-output-fast-monotone; name this event ‘ttl-output-fast-monotone-on’. Event: Disable dual-eval-ttl-output-fast-state; name this event ‘dual-eval-ttl-output-fast-state-on’. Event: Disable dual-eval-ttl-output-fast-value; name this event ‘dual-eval-ttl-output-fast-value-on’. Event: Disable ttl-output-parametric-monotone; name this event ‘ttl-output-parametric-monotone-on’. Event: Disable dual-eval-ttl-output-parametric-state; name this event ‘dualeval-ttl-output-parametric-state-on’. Event: Disable dual-eval-ttl-output-parametric-value; name this event ‘dualeval-ttl-output-parametric-value-on’.

Event: Disable ttl-output-monotone; name this event ‘ttl-output-monotone-on’. Event: Disable dual-eval-ttl-output-state; name this event ‘dual-eval-ttl-output-state-on’. Event: Disable dual-eval-ttl-output-value; name this event ‘dual-eval-ttl-output-value-on’. Event: Disable ttl-input-monotone; name this event ‘ttl-input-monotone-on’. Event: Disable dual-eval-ttl-input-state; name this event ‘dual-eval-ttl-input-state-on’. Event: Disable dual-eval-ttl-input-value; name this event ‘dual-eval-ttl-input-value-on’. Event: Disable ttl-clk-input-monotone; name this event ‘ttl-clk-input-monotone-on’. Event: Disable dual-eval-ttl-clk-input-state; name this event ‘dual-eval-ttl-clk-input-state-on’. Event: Disable dual-eval-ttl-clk-input-value; name this event ‘dual-eval-ttl-clk-input-value-on’. Event: Disable ttl-bidirect-monotone; name this event ‘ttl-bidirect-monotone-on’. Event: Disable dual-eval-ttl-bidirect-state; name this event ‘dual-eval-ttl-bidirect-state-on’. Event: Disable dual-eval-ttl-bidirect-value; name this event ‘dual-eval-ttl-bidirect-value-on’. Event: Disable pullup-monotone; name this event ‘pullup-monotone-on’.

Event: Disable dual-eval-pullup-state; name this event ‘dual-eval-pullup-state-on’. Event: Disable dual-eval-pullup-value; name this event ‘dual-eval-pullup-value-on’. Event: Disable t-wire-monotone; name this event ‘t-wire-monotone-on’. Event: Disable dual-eval-t-wire-state; name this event ‘dual-eval-t-wire-state-on’. Event: Disable dual-eval-t-wire-value; name this event ‘dual-eval-t-wire-value-on’. Event: Disable t-buf-monotone; name this event ‘t-buf-monotone-on’. Event: Disable dual-eval-t-buf-state; name this event ‘dual-eval-t-buf-state-on’. Event: Disable dual-eval-t-buf-value; name this event ‘dual-eval-t-buf-value-on’. Event: Disable ram-enable-circuit-monotone; name this event ‘ram-enable-circuit-monotone-on’. Event: Disable dual-eval-ram-enable-circuit-state; name this event ‘dual-eval-ram-enable-circuit-state-on’. Event: Disable dual-eval-ram-enable-circuit-value; name this event ‘dual-eval-ram-enable-circuit-value-on’. Event: Disable id-monotone; name this event ‘id-monotone-on’. Event: Disable dual-eval-id-state; name this event ‘dual-eval-id-state-on’. Event: Disable dual-eval-id-value; name this event ‘dual-eval-id-value-on’.

Event: Disable fd1slp-monotone; name this event ‘fd1slp-monotone-on’. Event: Disable dual-eval-fd1slp-state; name this event ‘dual-eval-fd1slp-state-on’. Event: Disable dual-eval-fd1slp-value; name this event ‘dual-eval-fd1slp-value-on’. Event: Disable fd1sp-monotone; name this event ‘fd1sp-monotone-on’. Event: Disable dual-eval-fd1sp-state; name this event ‘dual-eval-fd1sp-state-on’. Event: Disable dual-eval-fd1sp-value; name this event ‘dual-eval-fd1sp-value-on’. Event: Disable fd1s-monotone; name this event ‘fd1s-monotone-on’. Event: Disable dual-eval-fd1s-state; name this event ‘dual-eval-fd1s-state-on’. Event: Disable dual-eval-fd1s-value; name this event ‘dual-eval-fd1s-value-on’. Event: Disable fd1-monotone; name this event ‘fd1-monotone-on’. Event: Disable dual-eval-fd1-state; name this event ‘dual-eval-fd1-state-on’. Event: Disable dual-eval-fd1-value; name this event ‘dual-eval-fd1-value-on’. Event: Disable procmon-monotone; name this event ‘procmon-monotone-on’. Event: Disable dual-eval-procmon-state; name this event ‘dual-eval-procmon-state-on’. Event: Disable dual-eval-procmon-value; name this event ‘dual-eval-procmon-value-on’.

Event: Disable del10-monotone; name this event ‘del10-monotone-on’. Event: Disable dual-eval-del10-state; name this event ‘dual-eval-del10-state-on’. Event: Disable dual-eval-del10-value; name this event ‘dual-eval-del10-value-on’. Event: Disable del4-monotone; name this event ‘del4-monotone-on’. Event: Disable dual-eval-del4-state; name this event ‘dual-eval-del4-state-on’. Event: Disable dual-eval-del4-value; name this event ‘dual-eval-del4-value-on’. Event: Disable del2-monotone; name this event ‘del2-monotone-on’. Event: Disable dual-eval-del2-state; name this event ‘dual-eval-del2-state-on’. Event: Disable dual-eval-del2-value; name this event ‘dual-eval-del2-value-on’. Event: Disable b-xor3-monotone; name this event ‘b-xor3-monotone-on’. Event: Disable dual-eval-b-xor3-state; name this event ‘dual-eval-b-xor3-state-on’. Event: Disable dual-eval-b-xor3-value; name this event ‘dual-eval-b-xor3-value-on’. Event: Disable b-xor-monotone; name this event ‘b-xor-monotone-on’. Event: Disable dual-eval-b-xor-state; name this event ‘dual-eval-b-xor-state-on’. Event: Disable dual-eval-b-xor-value; name this event ‘dual-eval-b-xor-value-on’.

Event: Disable b-or4-monotone; name this event ‘b-or4-monotone-on’. Event: Disable dual-eval-b-or4-state; name this event ‘dual-eval-b-or4-state-on’. Event: Disable dual-eval-b-or4-value; name this event ‘dual-eval-b-or4-value-on’. Event: Disable b-or3-monotone; name this event ‘b-or3-monotone-on’. Event: Disable dual-eval-b-or3-state; name this event ‘dual-eval-b-or3-state-on’. Event: Disable dual-eval-b-or3-value; name this event ‘dual-eval-b-or3-value-on’. Event: Disable b-or-monotone; name this event ‘b-or-monotone-on’. Event: Disable dual-eval-b-or-state; name this event ‘dual-eval-b-or-state-on’. Event: Disable dual-eval-b-or-value; name this event ‘dual-eval-b-or-value-on’. Event: Disable b-not-ivap-monotone; name this event ‘b-not-ivap-monotone-on’. Event: Disable dual-eval-b-not-ivap-state; name this event ‘dual-eval-b-not-ivap-state-on’. Event: Disable dual-eval-b-not-ivap-value; name this event ‘dual-eval-b-not-ivap-value-on’. Event: Disable b-not-b4ip-monotone; name this event ‘b-not-b4ip-monotone-on’. Event: Disable dual-eval-b-not-b4ip-state; name this event ‘dual-eval-b-not-b4ip-state-on’.

Event: Disable dual-eval-b-not-b4ip-value; name this event ‘dual-eval-b-not-b4ip-value-on’. Event: Disable b-not-monotone; name this event ‘b-not-monotone-on’. Event: Disable dual-eval-b-not-state; name this event ‘dual-eval-b-not-state-on’. Event: Disable dual-eval-b-not-value; name this event ‘dual-eval-b-not-value-on’. Event: Disable b-nor8-monotone; name this event ‘b-nor8-monotone-on’. Event: Disable dual-eval-b-nor8-state; name this event ‘dual-eval-b-nor8-state-on’. Event: Disable dual-eval-b-nor8-value; name this event ‘dual-eval-b-nor8-value-on’. Event: Disable b-nor6-monotone; name this event ‘b-nor6-monotone-on’. Event: Disable dual-eval-b-nor6-state; name this event ‘dual-eval-b-nor6-state-on’. Event: Disable dual-eval-b-nor6-value; name this event ‘dual-eval-b-nor6-value-on’. Event: Disable b-nor5-monotone; name this event ‘b-nor5-monotone-on’. Event: Disable dual-eval-b-nor5-state; name this event ‘dual-eval-b-nor5-state-on’. Event: Disable dual-eval-b-nor5-value; name this event ‘dual-eval-b-nor5-value-on’. Event: Disable b-nor4-monotone; name this event ‘b-nor4-monotone-on’.

Event: Disable dual-eval-b-nor4-state; name this event ‘dual-eval-b-nor4-state-on’. Event: Disable dual-eval-b-nor4-value; name this event ‘dual-eval-b-nor4-value-on’. Event: Disable b-nor3-monotone; name this event ‘b-nor3-monotone-on’. Event: Disable dual-eval-b-nor3-state; name this event ‘dual-eval-b-nor3-state-on’. Event: Disable dual-eval-b-nor3-value; name this event ‘dual-eval-b-nor3-value-on’. Event: Disable b-nor-monotone; name this event ‘b-nor-monotone-on’. Event: Disable dual-eval-b-nor-state; name this event ‘dual-eval-b-nor-state-on’. Event: Disable dual-eval-b-nor-value; name this event ‘dual-eval-b-nor-value-on’. Event: Disable b-nbuf-monotone; name this event ‘b-nbuf-monotone-on’. Event: Disable dual-eval-b-nbuf-state; name this event ‘dual-eval-b-nbuf-state-on’. Event: Disable dual-eval-b-nbuf-value; name this event ‘dual-eval-b-nbuf-value-on’. Event: Disable b-nand8-monotone; name this event ‘b-nand8-monotone-on’. Event: Disable dual-eval-b-nand8-state; name this event ‘dual-eval-b-nand8-state-on’. Event: Disable dual-eval-b-nand8-value; name this event ‘dual-eval-b-nand8-value-on’.

Event: Disable b-nand6-monotone; name this event ‘b-nand6-monotone-on’. Event: Disable dual-eval-b-nand6-state; name this event ‘dual-eval-b-nand6-state-on’. Event: Disable dual-eval-b-nand6-value; name this event ‘dual-eval-b-nand6-value-on’. Event: Disable b-nand5-monotone; name this event ‘b-nand5-monotone-on’. Event: Disable dual-eval-b-nand5-state; name this event ‘dual-eval-b-nand5-state-on’. Event: Disable dual-eval-b-nand5-value; name this event ‘dual-eval-b-nand5-value-on’. Event: Disable b-nand4-monotone; name this event ‘b-nand4-monotone-on’. Event: Disable dual-eval-b-nand4-state; name this event ‘dual-eval-b-nand4-state-on’. Event: Disable dual-eval-b-nand4-value; name this event ‘dual-eval-b-nand4-value-on’. Event: Disable b-nand3-monotone; name this event ‘b-nand3-monotone-on’. Event: Disable dual-eval-b-nand3-state; name this event ‘dual-eval-b-nand3-state-on’. Event: Disable dual-eval-b-nand3-value; name this event ‘dual-eval-b-nand3-value-on’. Event: Disable b-nand-monotone; name this event ‘b-nand-monotone-on’. Event: Disable dual-eval-b-nand-state; name this event ‘dual-eval-b-nand-state-on’.

Event: Disable dual-eval-b-nand-value; name this event ‘dual-eval-b-nand-value-on’. Event: Disable b-if-monotone; name this event ‘b-if-monotone-on’. Event: Disable dual-eval-b-if-state; name this event ‘dual-eval-b-if-state-on’. Event: Disable dual-eval-b-if-value; name this event ‘dual-eval-b-if-value-on’. Event: Disable b-equv3-monotone; name this event ‘b-equv3-monotone-on’. Event: Disable dual-eval-b-equv3-state; name this event ‘dual-eval-b-equv3-state-on’. Event: Disable dual-eval-b-equv3-value; name this event ‘dual-eval-b-equv3-value-on’. Event: Disable b-equv-monotone; name this event ‘b-equv-monotone-on’. Event: Disable dual-eval-b-equv-state; name this event ‘dual-eval-b-equv-state-on’. Event: Disable dual-eval-b-equv-value; name this event ‘dual-eval-b-equv-value-on’. Event: Disable b-and4-monotone; name this event ‘b-and4-monotone-on’. Event: Disable dual-eval-b-and4-state; name this event ‘dual-eval-b-and4-state-on’. Event: Disable dual-eval-b-and4-value; name this event ‘dual-eval-b-and4-value-on’. Event: Disable b-and3-monotone; name this event ‘b-and3-monotone-on’. Event: Disable dual-eval-b-and3-state; name this event ‘dual-eval-b-and3-state-on’.

Event: Disable dual-eval-b-and3-value; name this event ‘dual-eval-b-and3-value-on’. Event: Disable b-and-monotone; name this event ‘b-and-monotone-on’. Event: Disable dual-eval-b-and-state; name this event ‘dual-eval-b-and-state-on’. Event: Disable dual-eval-b-and-value; name this event ‘dual-eval-b-and-value-on’. Event: Disable ao7-monotone; name this event ‘ao7-monotone-on’. Event: Disable dual-eval-ao7-state; name this event ‘dual-eval-ao7-state-on’. Event: Disable dual-eval-ao7-value; name this event ‘dual-eval-ao7-value-on’. Event: Disable ao6-monotone; name this event ‘ao6-monotone-on’. Event: Disable dual-eval-ao6-state; name this event ‘dual-eval-ao6-state-on’. Event: Disable dual-eval-ao6-value; name this event ‘dual-eval-ao6-value-on’. Event: Disable ao4-monotone; name this event ‘ao4-monotone-on’. Event: Disable dual-eval-ao4-state; name this event ‘dual-eval-ao4-state-on’. Event: Disable dual-eval-ao4-value; name this event ‘dual-eval-ao4-value-on’. Event: Disable ao2-monotone; name this event ‘ao2-monotone-on’. Event: Disable dual-eval-ao2-state; name this event ‘dual-eval-ao2-state-on’. Event: Disable dual-eval-ao2-value; name this event ‘dual-eval-ao2-value-on’. Event: Disable fourp-implies-s-approx-is-b-approx; name this event ‘fourpimplies-s-approx-is-b-approx-on1’. Event: Disable fourp-f-if; name this event ‘fourp-f-if-on’. Event: Disable fourp-f-buf; name this event ‘fourp-f-buf-on’. Event: Disable f-buf-type-set; name this event ‘f-buf-type-set-on’. Event: Disable s-approx-implies-b-approx; name this event ‘s-approx-implies-b-approx-on’. Event: Disable dual-eval-2-primp; name this event ‘dual-eval-2-primp-on’. Event: Disable dual-eval-0-primp; name this event ‘dual-eval-0-primp-on’. Event: Disable f-pullup-monotone; name this event ‘f-pullup-monotone-on’. Event: Disable ft-wire-monotone; name this event ‘ft-wire-monotone-on’. Event: Disable ft-buf-monotone; name this event ‘ft-buf-monotone-on’. Event: Disable f-if-monotone; name this event ‘f-if-monotone-on’. Event: Disable f-equv3-monotone; name this event ‘f-equv3-monotone-on’. Event: Disable f-xor3-monotone; name this event ‘f-xor3-monotone-on’. Event: Disable f-equv-monotone; name this event ‘f-equv-monotone-on’. Event: Disable f-xor-monotone; name this event ‘f-xor-monotone-on’. Event: Disable f-nor8-monotone; name this event ‘f-nor8-monotone-on’. Event: Disable f-nor6-monotone; name this event ‘f-nor6-monotone-on’.

Event: Disable f-nor5-monotone; name this event ‘f-nor5-monotone-on’. Event: Disable f-nor4-monotone; name this event ‘f-nor4-monotone-on’. Event: Disable f-nor3-monotone; name this event ‘f-nor3-monotone-on’. Event: Disable f-nor-monotone; name this event ‘f-nor-monotone-on’. Event: Disable f-or4-monotone; name this event ‘f-or4-monotone-on’. Event: Disable f-or3-monotone; name this event ‘f-or3-monotone-on’. Event: Disable f-or-monotone; name this event ‘f-or-monotone-on’. Event: Disable f-nand8-monotone; name this event ‘f-nand8-monotone-on’. Event: Disable f-nand6-monotone; name this event ‘f-nand6-monotone-on’. Event: Disable f-nand5-monotone; name this event ‘f-nand5-monotone-on’. Event: Disable f-nand4-monotone; name this event ‘f-nand4-monotone-on’. Event: Disable f-nand3-monotone; name this event ‘f-nand3-monotone-on’. Event: Disable f-nand-monotone; name this event ‘f-nand-monotone-on’. Event: Disable f-not-monotone; name this event ‘f-not-monotone-on’. Event: Disable f-and4-monotone; name this event ‘f-and4-monotone-on’. Event: Disable f-and3-monotone; name this event ‘f-and3-monotone-on’. Event: Disable f-and-monotone; name this event ‘f-and-monotone-on’. Event: Disable f-buf-monotone; name this event ‘f-buf-monotone-on’.

Event: Disable monotonicity-property-consequence-3; name this event ‘monotonicityproperty-consequence-3-on’. Event: Disable monotonicity-property-consequence-2; name this event ‘monotonicityproperty-consequence-2-on’. Event: Disable monotonicity-property-consequence-1; name this event ‘monotonicityproperty-consequence-1-on’. Event: Disable monotonicity-property-consequence-0; name this event ‘monotonicityproperty-consequence-0-on’. Event: Disable *1*monotonicity-property; name this event ‘g*1*monotonicityproperty-on’. Event: Disable s-approx-alist; name this event ‘s-approx-alist-on’. Event: Disable *1*s-approx-alist; name this event ‘g*1*s-approx-alist-on’. Event: Disable v-approx-alist; name this event ‘v-approx-alist-on’. Event: Disable *1*v-approx-alist; name this event ‘g*1*v-approx-alist-on’. Event: Disable s-knownp-implies-s-approx-is-equal; name this event ‘s-knownp-implies-s-approx-is-equal-on1’. Event: Disable s-knownp; name this event ‘s-knownp-on1’. Event: Disable *1*s-knownp; name this event ‘g*1*s-knownp-on’. Event: Disable good-s; name this event ‘good-s-on’. Event: Disable *1*good-s; name this event ‘g*1*good-s-on’. Event: Disable s-approx-x-x; name this event ‘s-approx-x-x-on’.

Event: Disable s-approx; name this event ‘s-approx-on1’. Event: Disable *1*s-approx; name this event ‘g*1*s-approx-on’. Event: Disable mem-width; name this event ‘mem-width-on1’. Event: Disable *1*mem-width; name this event ‘g*1*mem-width-on1’. Event: Disable v-knownp-implies-v-approx-is-equal; name this event ‘v-knownp-implies-v-approx-is-equal-on’. Event: Disable v-knownp; name this event ‘v-knownp-on1’. Event: Disable *1*v-knownp; name this event ‘g*1*v-knownp-on’. Event: Disable v-approx; name this event ‘v-approx-on1’. Event: Disable *1*v-approx; name this event ‘g*1*v-approx-on’. Event: Disable *1*b-approx; name this event ‘g*1*b-approx-on’. Event: Disable b-knownp-compound-recognizer; name this event ‘b-knownp-compound-recognizer-on’. Event: Enable monotonicity-property; name this event ‘monotonicity-property-off1’. Event: Enable monotonicity-property-opener-0; name this event ‘monotonicityproperty-opener-0-off1’. Event: Enable monotonicity-property-opener-1; name this event ‘monotonicityproperty-opener-1-off1’. Event: Enable monotonicity-property-opener-2; name this event ‘monotonicityproperty-opener-2-off1’.

Event: Enable monotonicity-property-opener-3; name this event ‘monotonicityproperty-opener-3-off1’. Event: Enable f-buf; name this event ‘f-buf-off1’. Event: Enable f-and; name this event ‘f-and-off1’. Event: Enable f-and3; name this event ‘f-and3-off1’. Event: Enable f-and4; name this event ‘f-and4-off1’. Event: Enable f-not; name this event ‘f-not-off1’. Event: Enable f-nand; name this event ‘f-nand-off1’. Event: Enable f-nand3; name this event ‘f-nand3-off1’. Event: Enable f-nand4; name this event ‘f-nand4-off1’. Event: Enable f-nand5; name this event ‘f-nand5-off1’. Event: Enable f-nand6; name this event ‘f-nand6-off1’. Event: Enable f-nand8; name this event ‘f-nand8-off1’. Event: Enable f-or; name this event ‘f-or-off1’. Event: Enable f-or3; name this event ‘f-or3-off1’. Event: Enable f-or4; name this event ‘f-or4-off1’. Event: Enable f-nor; name this event ‘f-nor-off1’. Event: Enable f-nor3; name this event ‘f-nor3-off1’.

Event: Enable f-nor4; name this event ‘f-nor4-off1’. Event: Enable f-nor5; name this event ‘f-nor5-off1’. Event: Enable f-nor6; name this event ‘f-nor6-off1’. Event: Enable f-nor8; name this event ‘f-nor8-off1’. Event: Enable f-xor; name this event ‘f-xor-off1’. Event: Enable f-xor3; name this event ‘f-xor3-off1’. Event: Enable f-equv; name this event ‘f-equv-off1’. Event: Enable f-equv3; name this event ‘f-equv3-off1’. Event: Enable f-if; name this event ‘f-if-off1’. Event: Enable ft-buf; name this event ‘ft-buf-off1’. Event: Enable ft-wire; name this event ‘ft-wire-off1’. Event: Enable f-pullup; name this event ‘f-pullup-off1’. Event: Enable bvp-reverse; name this event ‘bvp-reverse-off1’. Event: Enable v-approx-bvp; name this event ‘v-approx-bvp-off1’. Event: Enable read-mem1-monotone; name this event ‘read-mem1-monotone-off1’. Event: Enable bvp-implies-v-knownp; name this event ‘bvp-implies-v-knownp-off1’. Event: Enable v-approx-implies-b-approx-nth; name this event ‘v-approx-implies-b-approx-nth-off1’.

Event: Enable *1*b-knownp; name this event ‘g*1*b-knownp-off2’. Event: Enable v-approx-implies-subranges-equal; name this event ‘v-approx-implies-subranges-equal-off1’. Event: Enable v-approx-bvp-subrange; name this event ‘v-approx-bvp-subrange-off1’. Event: Enable v-approx-make-list-x; name this event ‘v-approx-make-list-x-off1’. Event: Enable read-mem-monotone; name this event ‘read-mem-monotone-off1’. Event: Enable equal-length-read-mem1; name this event ‘equal-length-read-mem1-off1’. Event: Enable equal-length-read-mem; name this event ‘equal-length-read-mem-off1’. Event: Enable s-approx-implies-properp-read-mem1; name this event ‘s-approx-implies-properp-read-mem1-off1’. Event: Enable s-approx-implies-properp-read-mem; name this event ‘s-approx-implies-properp-read-mem-off1’. Event: Enable dual-port-ram-value-monotone; name this event ‘dual-port-ram-value-monotone-off1’. Event: Enable eval$-append; name this event ‘eval$-append-off1’. Event: Enable eval$-pairlist-cons; name this event ‘eval$-pairlist-cons-off1’. Event: Enable eval$-append-2; name this event ‘eval$-append-2-off1’. Event: Enable dual-apply-value-dp-ram-16x32-lemma-1; name this event ‘dualapply-value-dp-ram-16x32-lemma-1-off1’.

Event: Enable dual-apply-value-dp-ram-16x32-lemma-2; name this event ‘dualapply-value-dp-ram-16x32-lemma-2-off1’. Event: Enable dual-apply-value-dp-ram-16x32-lemma-3; name this event ‘dualapply-value-dp-ram-16x32-lemma-3-off1’. Event: Enable dual-port-ram-value-is-dual-port-ram-value-body; name this event ‘dual-port-ram-value-is-dual-port-ram-value-body-off1’. Event: Enable dual-apply-value-dp-ram-16x32; name this event ‘dual-apply-value-dp-ram-16x32-off1’. Event: Enable dp-ram-16x32-monotone-value; name this event ‘dp-ram-16x32-monotone-value-off1’. Event: Disable bvp; name this event ‘bvp-on1’. Event: Enable s-approx-opener; name this event ‘s-approx-opener-off1’. Event: Enable v-approx-implies-nth-does-not-go-from-f-to-t; name this event ‘v-approx-implies-nth-does-not-go-from-f-to-t-off1’. Event: Enable write-mem1-opener; name this event ‘write-mem1-opener-off1’. Event: Enable write-mem1-monotone; name this event ‘write-mem1-monotone-off1’. Event: Enable write-mem-monotone; name this event ‘write-mem-monotone-off1’. Event: Enable v-approx-length; name this event ‘v-approx-length-off1’. Event: Enable s-approx-write-mem1-id; name this event ‘s-approx-write-mem1-id-off1’. Event: Enable s-approx-write-mem-id; name this event ‘s-approx-write-mem-id-off1’.

Event: Enable s-approx-constant-ram-x-id; name this event ‘s-approx-constant-ram-x-id-off1’.

Event: Enable s-approx-constant-ram-x-constant-ram-x; name this event ‘sapprox-constant-ram-x-constant-ram-x-off1’.

Event: Enable v-approx-preserves-length; name this event ‘v-approx-preserves-length-off1’.

Event: Enable v-approx-subrange; name this event ‘v-approx-subrange-off1’.

Event: Enable mem-width-non-zero; name this event ‘mem-width-non-zero-off1’.

Event: Enable s-approx-constant-ram-x-write-mem1-case-3; name this event ‘s-approx-constant-ram-x-write-mem1-case-3-off1’.

Event: Enable s-approx-constant-ram-x-write-mem1; name this event ‘s-approx-constant-ram-x-write-mem1-off1’.

Event: Enable s-approx-constant-ram-x-write-mem; name this event ‘s-approx-constant-ram-x-write-mem-off1’.

Event: Enable v-approx-preserves-properp; name this event ‘v-approx-preserves-properp-off1’.

Event: Enable mem-width-linear-facts; name this event ‘mem-width-linear-facts-off1’.

Event: Enable dual-port-ram-state-monotone-rewrite; name this event ‘dualport-ram-state-monotone-rewrite-off1’.

Event: Enable dual-apply-state-dp-ram-16x32-lemma-1; name this event ‘dualapply-state-dp-ram-16x32-lemma-1-off1’.

Event: Enable dual-apply-state-dp-ram-16x32-lemma-2; name this event ‘dualapply-state-dp-ram-16x32-lemma-2-off1’.

Event: Enable dual-apply-state-dp-ram-16x32-lemma-3; name this event ‘dualapply-state-dp-ram-16x32-lemma-3-off1’. Event: Enable dual-port-ram-state-is-dual-port-ram-state-body; name this event ‘dual-port-ram-state-is-dual-port-ram-state-body-off1’. Event: Enable dual-apply-state-dp-ram-16x32; name this event ‘dual-apply-state-dp-ram-16x32-off1’. Event: Enable dp-ram-16x32-monotone-state; name this event ‘dp-ram-16x32-monotone-state-off1’. Event: Enable dp-ram-16x32-monotone; name this event ‘dp-ram-16x32-monotone-off1’. Event: Disable open-nth; name this event ‘open-nth-on1’. Event: Enable doublet-p; name this event ‘doublet-p-off1’. Event: Enable b-knownp; name this event ‘b-knownp-off2’. Event: Enable b-approx; name this event ‘b-approx-off2’. Event: Enable cancel-constants-ilessp; name this event ‘cancel-constants-ilessp-off1’. Event: Enable cancel-constants-ilessp-lemma-2; name this event ‘cancel-constants-ilessp-lemma-2-off1’. Event: Enable cancel-constants-ilessp-lemma-1; name this event ‘cancel-constants-ilessp-lemma-1-off1’. Event: Enable ilessp-add1-iplus; name this event ‘ilessp-add1-iplus-off1’. Event: Enable ilessp-add1; name this event ‘ilessp-add1-off1’. Event: Enable cancel-constants-equal; name this event ‘cancel-constants-equal-off1’. Event: Enable cancel-constants-equal-lemma; name this event ‘cancel-constants-equal-lemma-off1’. Event: Enable iplus-constants; name this event ‘iplus-constants-off1’. Event: Enable cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded; name this event ‘cancel-ineg-terms-from-inequality-cancel-ineg-terms-from-inequality-expanded-off1’. Event: Enable *1*cancel-ineg-terms-from-inequality-expanded; name this event ‘g*1*cancel-ineg-terms-from-inequality-expanded-off1’. Event: Enable cancel-ineg-terms-from-inequality; name this event ‘cancel-ineg-terms-from-inequality-off1’. Event: Enable *1*cancel-ineg-terms-from-inequality; name this event ‘g*1*cancelineg-terms-from-inequality-off1’. Event: Enable make-cancel-ineg-terms-inequality; name this event ‘make-cancel-ineg-terms-inequality-off1’. Event: Enable *1*make-cancel-ineg-terms-inequality; name this event ‘g*1*makecancel-ineg-terms-inequality-off1’. Event: Enable iplus-list-eval$-car-split-out-ineg-terms; name this event ‘ipluslist-eval$-car-split-out-ineg-terms-off1’. Event: Enable eval$-iplus-list-cdr-remove-inegs; name this event ‘eval$-iplus-list-cdr-remove-inegs-off1’. Event: Enable eval$-iplus-list-car-remove-inegs; name this event ‘eval$-iplus-list-car-remove-inegs-off1’. Event: Enable cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded; name this event ‘cancel-ineg-terms-from-equality-cancel-ineg-terms-from-equality-expanded-off1’.

Event: Enable *1*cancel-ineg-terms-from-equality-expanded; name this event ‘g*1*cancel-ineg-terms-from-equality-expanded-off1’. Event: Enable cancel-ineg-terms-from-equality; name this event ‘cancel-ineg-terms-from-equality-off1’. Event: Enable *1*cancel-ineg-terms-from-equality; name this event ‘g*1*cancelineg-terms-from-equality-off1’. Event: Enable make-cancel-ineg-terms-equality; name this event ‘make-cancel-ineg-terms-equality-off1’. Event: Enable *1*make-cancel-ineg-terms-equality; name this event ‘g*1*makecancel-ineg-terms-equality-off1’. Event: Enable *1*iplus-or-ineg-term; name this event ‘g*1*iplus-or-ineg-term-off1’. Event: Enable *1*remove-inegs; name this event ‘g*1*remove-inegs-off1’. Event: Enable split-out-ineg-terms; name this event ‘split-out-ineg-terms-off1’. Event: Enable *1*split-out-ineg-terms; name this event ‘g*1*split-out-ineg-terms-off1’. Event: Enable conjoin-inequalities-with-0-eliminator; name this event ‘conjoininequalities-with-0-eliminator-off1’. Event: Enable cancel-factors-ilessp-0; name this event ‘cancel-factors-ilessp-0-off1’. Event: Enable *1*cancel-factors-ilessp-0; name this event ‘g*1*cancel-factors-ilessp-0-off1’. Event: Enable conjoin-inequalities-with-0; name this event ‘conjoin-inequalities-with-0-off1’.

Event: Enable *1*conjoin-inequalities-with-0; name this event ‘g*1*conjoininequalities-with-0-off1’. Event: Enable some-eval$s-to-0-eliminator; name this event ‘some-eval$s-to-0-eliminator-off1’. Event: Enable some-eval$s-to-0-append; name this event ‘some-eval$s-to-0-append-off1’. Event: Enable eval$-disjoin-equalities-with-0; name this event ‘eval$-disjoin-equalities-with-0-off1’. Event: Enable some-eval$s-to-0; name this event ‘some-eval$s-to-0-off1’. Event: Enable *1*some-eval$s-to-0; name this event ‘g*1*some-eval$s-to-0-off1’. Event: Enable cancel-factors-0; name this event ‘cancel-factors-0-off1’. Event: Enable *1*cancel-factors-0; name this event ‘g*1*cancel-factors-0-off1’. Event: Enable disjoin-equalities-with-0; name this event ‘disjoin-equalities-with-0-off1’. Event: Enable *1*disjoin-equalities-with-0; name this event ‘g*1*disjoin-equalities-with-0-off1’. Event: Enable equal-fix-int-to-ilessp; name this event ‘equal-fix-int-to-ilessp-off1’. Event: Enable eval$-list-bagint-0-implies-equal-for-ilessp-lemma; name this event ‘eval$-list-bagint-0-implies-equal-for-ilessp-lemma-off1’. Event: Enable eval$-list-bagint-0-for-ilessp; name this event ‘eval$-list-bagint-0-for-ilessp-off1’. Event: Enable member-0-itimes-factors-yields-0-ilessp-consequence-2; name this event ‘member-0-itimes-factors-yields-0-ilessp-consequence-2-off1’. Event: Enable member-0-itimes-factors-yields-0-ilessp-consequence-1; name this event ‘member-0-itimes-factors-yields-0-ilessp-consequence-1-off1’. Event: Enable member-0-itimes-factors-yields-0; name this event ‘member-0-itimes-factors-yields-0-off1’. Event: Enable ilessp-itimes-list-eval$-list-bagdiff-corollary-2; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-corollary-2-off1’. Event: Enable ilessp-zero-implies-not-equal; name this event ‘ilessp-zero-implies-not-equal-off1’. Event: Enable ilessp-itimes-list-eval$-list-bagdiff-corollary-1; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-corollary-1-off1’. Event: Enable zero-ilessp-implies-not-equal; name this event ‘zero-ilessp-implies-not-equal-off1’. Event: Enable ilessp-itimes-list-eval$-list-bagdiff; name this event ‘ilessp-itimes-list-eval$-list-bagdiff-off1’. Event: Enable bagint-singleton; name this event ‘bagint-singleton-off1’. Event: Enable cancel-itimes-ilessp-factors; name this event ‘cancel-itimes-ilessp-factors-off1’. Event: Enable *1*cancel-itimes-ilessp-factors; name this event ‘g*1*cancelitimes-ilessp-factors-off1’. Event: Enable member-0-eval$-list; name this event ‘member-0-eval$-list-off1’. Event: Enable membership-of-0-implies-itimes-list-is-0; name this event ‘membershipof-0-implies-itimes-list-is-0-off1’. Event: Enable cancel-itimes-factors-expanded-cancel-itimes-factors; name this event ‘cancel-itimes-factors-expanded-cancel-itimes-factors-off1’. Event: Enable *1*cancel-itimes-factors-expanded; name this event ‘g*1*cancelitimes-factors-expanded-off1’. Event: Enable cancel-itimes-factors; name this event ‘cancel-itimes-factors-off1’. Event: Enable *1*cancel-itimes-factors; name this event ‘g*1*cancel-itimes-factors-off1’. Event: Enable *1*iplus-or-itimes-term; name this event ‘g*1*iplus-or-itimes-term-off1’. Event: Enable itimes-eval$-itimes-tree-ineg; name this event ‘itimes-eval$- itimes-tree-ineg-off1’. Event: Enable iplus-eval$-itimes-tree-ineg; name this event ‘iplus-eval$-itimes-tree-ineg-off1’. Event: Enable ineg-eval$-itimes-tree-ineg; name this event ‘ineg-eval$-itimes-tree-ineg-off1’. Event: Enable eval$-itimes-tree-ineg; name this event ‘eval$-itimes-tree-ineg-off1’. Event: Enable fix-int-eval$-itimes-tree-rec; name this event ‘fix-int-eval$-itimes-tree-rec-off1’. Event: Enable ilessp-ineg-ineg; name this event ‘ilessp-ineg-ineg-off1’. Event: Enable equal-ineg-ineg; name this event ‘equal-ineg-ineg-off1’. Event: Enable itimes–1; name this event ‘itimes–1-off1’. Event: Enable itimes-factors; name this event ‘itimes-factors-off1’.

Event: Enable *1*itimes-factors; name this event ‘g*1*itimes-factors-off1’. Event: Enable *1*itimes-tree-ineg; name this event ‘g*1*itimes-tree-ineg-off1’. Event: Enable ilessp-strict; name this event ‘ilessp-strict-off1’. Event: Enable ilessp-itimes-right-negative; name this event ‘ilessp-itimes-right-negative-off1’. Event: Enable ilessp-itimes-right-positive; name this event ‘ilessp-itimes-right-positive-off1’. Event: Enable cancel-itimes-ilessp; name this event ‘cancel-itimes-ilessp-off1’. Event: Enable *1*cancel-itimes-ilessp; name this event ‘g*1*cancel-itimes-ilessp-off1’. Event: Enable *1*make-cancel-itimes-inequality; name this event ‘g*1*makecancel-itimes-inequality-off1’. Event: Enable *1*itimes-tree-no-fix-int; name this event ‘g*1*itimes-tree-no-fix-int-off1’. Event: Enable subsetp; name this event ‘subsetp-off1’. Event: Enable *1*subsetp; name this event ‘g*1*subsetp-off1’. Event: Enable equal-fix-int; name this event ‘equal-fix-int-off1’. Event: Enable member-append; name this event ‘member-append-off1’. Event: Enable itimes-list-append; name this event ‘itimes-list-append-off1’. Event: Enable cancel-itimes; name this event ‘cancel-itimes-off1’. Event: Enable *1*cancel-itimes; name this event ‘g*1*cancel-itimes-off1’.

Event: Enable *1*make-cancel-itimes-equality; name this event ‘g*1*makecancel-itimes-equality-off1’. Event: Enable integerp-itimes-list; name this event ‘integerp-itimes-list-off1’. Event: Enable itimes-list; name this event ‘itimes-list-off1’. Event: Enable *1*itimes-list; name this event ‘g*1*itimes-list-off1’. Event: Enable *1*itimes-tree; name this event ‘g*1*itimes-tree-off1’. Event: Enable itimes-tree-rec; name this event ‘itimes-tree-rec-off1’. Event: Enable *1*itimes-tree-rec; name this event ‘g*1*itimes-tree-rec-off1’. Event: Enable itimes-fringe; name this event ‘itimes-fringe-off1’. Event: Enable *1*itimes-fringe; name this event ‘g*1*itimes-fringe-off1’. Event: Enable fix-int-irem; name this event ‘fix-int-irem-off1’. Event: Enable fix-int-iquo; name this event ‘fix-int-iquo-off1’. Event: Enable fix-int-imod; name this event ‘fix-int-imod-off1’. Event: Enable fix-int-idiv; name this event ‘fix-int-idiv-off1’. Event: Enable fix-int-iremainder; name this event ‘fix-int-iremainder-off1’. Event: Enable fix-int-iquotient; name this event ‘fix-int-iquotient-off1’. Event: Enable irem-fix-int2; name this event ‘irem-fix-int2-off1’. Event: Enable irem-fix-int1; name this event ‘irem-fix-int1-off1’.

Event: Enable iquo-fix-int2; name this event ‘iquo-fix-int2-off1’. Event: Enable iquo-fix-int1; name this event ‘iquo-fix-int1-off1’. Event: Enable imod-fix-int2; name this event ‘imod-fix-int2-off1’. Event: Enable imod-fix-int1; name this event ‘imod-fix-int1-off1’. Event: Enable idiv-fix-int2; name this event ‘idiv-fix-int2-off1’. Event: Enable idiv-fix-int1; name this event ‘idiv-fix-int1-off1’. Event: Enable iremainder-fix-int2; name this event ‘iremainder-fix-int2-off1’. Event: Enable iremainder-fix-int1; name this event ‘iremainder-fix-int1-off1’. Event: Enable iquotient-fix-int2; name this event ‘iquotient-fix-int2-off1’. Event: Enable iquotient-fix-int1; name this event ‘iquotient-fix-int1-off1’. Event: Enable integerp-irem; name this event ‘integerp-irem-off1’. Event: Enable integerp-iquo; name this event ‘integerp-iquo-off1’. Event: Enable integerp-imod; name this event ‘integerp-imod-off1’. Event: Enable integerp-idiv; name this event ‘integerp-idiv-off1’. Event: Enable integerp-iremainder; name this event ‘integerp-iremainder-off1’. Event: Enable integerp-iquotient; name this event ‘integerp-iquotient-off1’. Event: Enable itimes-cancellation-3; name this event ‘itimes-cancellation-3-off1’.

Event: Enable itimes-cancellation-2; name this event ‘itimes-cancellation-2-off1’. Event: Enable itimes-cancellation-1; name this event ‘itimes-cancellation-1-off1’. Event: Enable itimes-ineg-2; name this event ‘itimes-ineg-2-off1’. Event: Enable itimes-ineg-1; name this event ‘itimes-ineg-1-off1’. Event: Enable iquo-irem-uniqueness; name this event ‘iquo-irem-uniqueness-off1’. Event: Enable division-theorem-for-truncate-to-zero; name this event ‘divisiontheorem-for-truncate-to-zero-off1’. Event: Enable division-theorem-for-truncate-to-zero-part3; name this event ‘division-theorem-for-truncate-to-zero-part3-off1’. Event: Enable division-theorem-for-truncate-to-zero-part2; name this event ‘division-theorem-for-truncate-to-zero-part2-off1’. Event: Enable division-theorem-for-truncate-to-zero-part1; name this event ‘division-theorem-for-truncate-to-zero-part1-off1’. Event: Enable idiv-imod-uniqueness; name this event ‘idiv-imod-uniqueness-off1’. Event: Enable division-theorem-for-truncate-to-neginf; name this event ‘divisiontheorem-for-truncate-to-neginf-off1’. Event: Enable division-theorem-for-truncate-to-neginf-part3; name this event ‘division-theorem-for-truncate-to-neginf-part3-off1’. Event: Enable division-theorem-for-truncate-to-neginf-part2; name this event ‘division-theorem-for-truncate-to-neginf-part2-off1’.

Event: Enable division-theorem-for-truncate-to-neginf-part1; name this event ‘division-theorem-for-truncate-to-neginf-part1-off1’. Event: Enable iquotient-iremainder-uniqueness; name this event ‘iquotientiremainder-uniqueness-off1’. Event: Enable division-theorem; name this event ‘division-theorem-off1’. Event: Enable division-theorem-part3; name this event ‘division-theorem-part3-off1’. Event: Enable division-theorem-part2; name this event ‘division-theorem-part2-off1’. Event: Enable division-theorem-part1; name this event ‘division-theorem-part1-off1’. Event: Enable quotient-remainder-uniqueness; name this event ‘quotient-remainder-uniqueness-off1’. Event: Enable itimes-1-arg1; name this event ‘itimes-1-arg1-off1’. Event: Enable equal-itimes-minus-1; name this event ‘equal-itimes-minus-1-off1’. Event: Enable equal-itimes-1; name this event ‘equal-itimes-1-off1’. Event: Enable equal-itimes-0; name this event ‘equal-itimes-0-off1’. Event: Enable associativity-of-itimes; name this event ‘associativity-of-itimes-off1’. Event: Enable commutativity2-of-itimes; name this event ‘commutativity2-of-itimes-off1’. Event: Enable itimes-distributes-over-iplus; name this event ‘itimes-distributes-over-iplus-off1’.

Event: Enable itimes-distributes-over-iplus-proof; name this event ‘itimesdistributes-over-iplus-proof-off1’. Event: Enable commutativity-of-itimes; name this event ‘commutativity-of-itimes-off1’. Event: Enable itimes-fix-int2; name this event ‘itimes-fix-int2-off1’. Event: Enable itimes-fix-int1; name this event ‘itimes-fix-int1-off1’. Event: Enable itimes-0-right; name this event ‘itimes-0-right-off1’. Event: Enable itimes-0-left; name this event ‘itimes-0-left-off1’. Event: Enable cancel-iplus-ilessp; name this event ‘cancel-iplus-ilessp-off1’. Event: Enable *1*cancel-iplus-ilessp; name this event ‘g*1*cancel-iplus-ilessp-off1’. Event: Enable *1*iplus-tree-no-fix-int; name this event ‘g*1*iplus-tree-no-fix-int-off1’. Event: Enable iplus-cancellation-2-for-ilessp; name this event ‘iplus-cancellation-2-for-ilessp-off1’. Event: Enable iplus-cancellation-1-for-ilessp; name this event ‘iplus-cancellation-1-for-ilessp-off1’. Event: Enable cancel-iplus-ilessp-1; name this event ‘cancel-iplus-ilessp-1-off1’. Event: Enable *1*cancel-iplus-ilessp-1; name this event ‘g*1*cancel-iplus-ilessp-1-off1’. Event: Enable *1*make-cancel-iplus-inequality-1; name this event ‘g*1*makecancel-iplus-inequality-1-off1’. Event: Enable ilessp-fix-int-2; name this event ‘ilessp-fix-int-2-off1’.

Event: Enable ilessp-fix-int-1; name this event ‘ilessp-fix-int-1-off1’. Event: Enable iplus-ineg7; name this event ‘iplus-ineg7-off1’. Event: Enable iplus-list-append; name this event ‘iplus-list-append-off1’. Event: Enable eval$-iplus-list-delete; name this event ‘eval$-iplus-list-delete-off1’. Event: Enable *1*cancel-iplus; name this event ‘g*1*cancel-iplus-off1’. Event: Enable eval$-list-append; name this event ‘eval$-list-append-off1’. Event: Enable integerp-iplus-list; name this event ‘integerp-iplus-list-off1’. Event: Enable iplus-list; name this event ‘iplus-list-off1’. Event: Enable *1*iplus-list; name this event ‘g*1*iplus-list-off1’. Event: Enable *1*iplus-tree; name this event ‘g*1*iplus-tree-off1’. Event: Enable iplus-tree-rec; name this event ‘iplus-tree-rec-off1’. Event: Enable *1*iplus-tree-rec; name this event ‘g*1*iplus-tree-rec-off1’. Event: Enable iplus-fringe; name this event ‘iplus-fringe-off1’. Event: Enable *1*iplus-fringe; name this event ‘g*1*iplus-fringe-off1’. Event: Enable iplus-x-y-ineg-x; name this event ‘iplus-x-y-ineg-x-off1’. Event: Enable iplus-ineg4; name this event ‘iplus-ineg4-off1’. Event: Enable iplus-ineg3; name this event ‘iplus-ineg3-off1’.

Event: Enable eval$-cancel-ineg-aux-is-its-fn; name this event ‘eval$-cancel-ineg-aux-is-its-fn-off1’. Event: Enable eval$-cancel-ineg-aux-fn; name this event ‘eval$-cancel-ineg-aux-fn-off1’. Event: Enable *1*eval$-cancel-ineg-aux-fn; name this event ‘g*1*eval$-cancel-ineg-aux-fn-off1’. Event: Enable eval$-other; name this event ‘eval$-other-off1’. Event: Enable eval$-litatom; name this event ‘eval$-litatom-off1’. Event: Enable eval$-list-nlistp; name this event ‘eval$-list-nlistp-off1’. Event: Enable eval$-list-cons; name this event ‘eval$-list-cons-off1’. Event: Enable cancel-ineg; name this event ‘cancel-ineg-off1’. Event: Enable *1*cancel-ineg; name this event ‘g*1*cancel-ineg-off1’. Event: Enable cancel-ineg-aux; name this event ‘cancel-ineg-aux-off1’. Event: Enable *1*cancel-ineg-aux; name this event ‘g*1*cancel-ineg-aux-off1’. Event: Enable idifference-fix-int2; name this event ‘idifference-fix-int2-off1’. Event: Enable idifference-fix-int1; name this event ‘idifference-fix-int1-off1’. Event: Enable iplus-fix-int2; name this event ‘iplus-fix-int2-off1’. Event: Enable iplus-fix-int1; name this event ‘iplus-fix-int1-off1’. Event: Enable iplus-ineg2; name this event ‘iplus-ineg2-off1’. Event: Enable iplus-ineg1; name this event ‘iplus-ineg1-off1’.

Event: Enable iplus-cancellation-2; name this event ‘iplus-cancellation-2-off1’. Event: Enable iplus-cancellation-1; name this event ‘iplus-cancellation-1-off1’. Event: Enable associativity-of-iplus; name this event ‘associativity-of-iplus-off1’. Event: Enable commutativity-of-iplus; name this event ‘commutativity-of-iplus-off1’. Event: Enable commutativity2-of-iplus; name this event ‘commutativity2-of-iplus-off1’. Event: Enable iplus-0-right; name this event ‘iplus-0-right-off1’. Event: Enable iplus-0-left; name this event ‘iplus-0-left-off1’. Event: Enable ineg-0; name this event ‘ineg-0-off1’. Event: Enable ineg-fix-int; name this event ‘ineg-fix-int-off1’. Event: Enable ineg-ineg; name this event ‘ineg-ineg-off1’. Event: Enable ineg-iplus; name this event ‘ineg-iplus-off1’. Event: Enable fix-int-itimes; name this event ‘fix-int-itimes-off1’. Event: Enable fix-int-iabs; name this event ‘fix-int-iabs-off1’. Event: Enable fix-int-ineg; name this event ‘fix-int-ineg-off1’. Event: Enable fix-int-idifference; name this event ‘fix-int-idifference-off1’. Event: Enable fix-int-iplus; name this event ‘fix-int-iplus-off1’. Event: Enable fix-int-fix-int; name this event ‘fix-int-fix-int-off1’.

Event: Enable fix-int-remover; name this event ‘fix-int-remover-off1’. Event: Enable integerp-itimes; name this event ‘integerp-itimes-off1’. Event: Enable integerp-iabs; name this event ‘integerp-iabs-off1’. Event: Enable integerp-ineg; name this event ‘integerp-ineg-off1’. Event: Enable integerp-idifference; name this event ‘integerp-idifference-off1’. Event: Enable integerp-iplus; name this event ‘integerp-iplus-off1’. Event: Enable integerp-fix-int; name this event ‘integerp-fix-int-off1’. Event: Enable *1*irem; name this event ‘g*1*irem-off1’. Event: Enable *1*iquo; name this event ‘g*1*iquo-off1’. Event: Enable *1*imod; name this event ‘g*1*imod-off1’. Event: Enable *1*idiv; name this event ‘g*1*idiv-off1’. Event: Enable *1*iremainder; name this event ‘g*1*iremainder-off1’. Event: Enable *1*iquotient; name this event ‘g*1*iquotient-off1’. Event: Enable *1*itimes; name this event ‘g*1*itimes-off1’. Event: Enable *1*iabs; name this event ‘g*1*iabs-off1’. Event: Enable idifference; name this event ‘idifference-off1’. Event: Enable *1*idifference; name this event ‘g*1*idifference-off1’. Event: Enable *1*ineg; name this event ‘g*1*ineg-off1’.

Event: Enable *1*iplus; name this event ‘g*1*iplus-off1’. Event: Enable ileq; name this event ‘ileq-off1’. Event: Enable *1*ileq; name this event ‘g*1*ileq-off1’. Event: Enable *1*ilessp; name this event ‘g*1*ilessp-off1’. Event: Enable izerop; name this event ‘izerop-off1’. Event: Enable *1*izerop; name this event ‘g*1*izerop-off1’. Event: Enable *1*fix-int; name this event ‘g*1*fix-int-off1’. Event: Enable *1*integerp; name this event ‘g*1*integerp-off1’. Event: Enable gcd-idempotence; name this event ‘gcd-idempotence-off1’. Event: Enable gcd-x-x; name this event ‘gcd-x-x-off1’. Event: Enable commutativity2-of-gcd; name this event ‘commutativity2-of-gcd-off1’. Event: Enable commutativity2-of-gcd-zero-case; name this event ‘commutativity2of-gcd-zero-case-off1’. Event: Enable associativity-of-gcd; name this event ‘associativity-of-gcd-off1’. Event: Enable associativity-of-gcd-zero-case; name this event ‘associativity-of-gcd-zero-case-off1’. Event: Enable common-divisor-divides-gcd; name this event ‘common-divisor-divides-gcd-off1’. Event: Enable gcd-is-the-greatest; name this event ‘gcd-is-the-greatest-off1’.

Event: Enable distributivity-of-times-over-gcd; name this event ‘distributivityof-times-over-gcd-off1’. Event: Enable distributivity-of-times-over-gcd-proof; name this event ‘distributivityof-times-over-gcd-proof-off1’. Event: Enable remainder-gcd; name this event ‘remainder-gcd-off1’. Event: Enable gcd-plus-instance; name this event ‘gcd-plus-instance-off1’. Event: Enable gcd-plus; name this event ‘gcd-plus-off1’. Event: Enable gcd-plus-proof; name this event ‘gcd-plus-proof-off1’. Event: Enable gcd-plus-instance-temp; name this event ‘gcd-plus-instance-temp-off1’. Event: Enable gcd-plus-instance-temp-proof; name this event ‘gcd-plus-instance-temp-proof-off1’. Event: Enable lessp-gcd; name this event ‘lessp-gcd-off1’. Event: Enable equal-gcd-0; name this event ‘equal-gcd-0-off1’. Event: Enable gcd-1; name this event ‘gcd-1-off1’. Event: Enable gcd-0; name this event ‘gcd-0-off1’. Event: Enable single-number-induction; name this event ‘single-number-induction-off1’. Event: Enable *1*single-number-induction; name this event ‘g*1*single-number-induction-off1’. Event: Enable commutativity-of-gcd; name this event ‘commutativity-of-gcd-off1’.

Event: Enable log-exp; name this event ‘log-exp-off1’. Event: Enable log-times-exp; name this event ‘log-times-exp-off1’. Event: Enable log-times-exp-proof; name this event ‘log-times-exp-proof-off1’. Event: Enable log-times; name this event ‘log-times-off1’. Event: Enable log-times-proof; name this event ‘log-times-proof-off1’. Event: Enable log-quotient-exp; name this event ‘log-quotient-exp-off1’. Event: Enable log-quotient-times; name this event ‘log-quotient-times-off1’. Event: Enable log-quotient-times-proof; name this event ‘log-quotient-times-proof-off1’. Event: Enable log-quotient; name this event ‘log-quotient-off1’. Event: Enable leq-log-log; name this event ‘leq-log-log-off1’. Event: Enable double-log-induction; name this event ‘double-log-induction-off1’. Event: Enable *1*double-log-induction; name this event ‘g*1*double-log-induction-off1’. Event: Enable log-1; name this event ‘log-1-off1’. Event: Enable log-0; name this event ‘log-0-off1’. Event: Enable equal-log-0; name this event ‘equal-log-0-off1’. Event: Enable exp-difference; name this event ‘exp-difference-off1’. Event: Enable equal-exp-1; name this event ‘equal-exp-1-off1’.

Event: Enable equal-exp-0; name this event ‘equal-exp-0-off1’. Event: Enable exp-exp; name this event ‘exp-exp-off1’. Event: Enable exp-times; name this event ‘exp-times-off1’. Event: Enable exp-0-arg2; name this event ‘exp-0-arg2-off1’. Event: Enable exp-1-arg1; name this event ‘exp-1-arg1-off1’. Event: Enable exp-0-arg1; name this event ‘exp-0-arg1-off1’. Event: Enable exp-plus; name this event ‘exp-plus-off1’. Event: Enable exp-add1; name this event ‘exp-add1-off1’. Event: Enable exp-zero; name this event ‘exp-zero-off1’. Event: Enable quotient-exp; name this event ‘quotient-exp-off1’. Event: Enable remainder-exp-exp; name this event ‘remainder-exp-exp-off1’. Event: Enable double-number-induction; name this event ‘double-number-induction-off1’. Event: Enable *1*double-number-induction; name this event ‘g*1*doublenumber-induction-off1’. Event: Enable remainder-exp; name this event ‘remainder-exp-off1’. Event: Enable gcd; name this event ‘gcd-off1’. Event: Enable *1*gcd; name this event ‘g*1*gcd-off1’. Event: Enable log; name this event ‘log-off1’.

Event: Enable *1*log; name this event ‘g*1*log-off1’. Event: Enable exp; name this event ‘exp-off1’. Event: Enable *1*exp; name this event ‘g*1*exp-off1’. Event: Enable cancel-quotient-times; name this event ‘cancel-quotient-times-off1’. Event: Enable *1*cancel-quotient-times; name this event ‘g*1*cancel-quotient-times-off1’. Event: Enable lessp-quotient; name this event ‘lessp-quotient-off1’. Event: Enable quotient-x-x; name this event ‘quotient-x-x-off1’. Event: Enable quotient-1-arg1; name this event ‘quotient-1-arg1-off1’. Event: Enable quotient-1-arg1-casesplit; name this event ‘quotient-1-arg1-casesplit-off1’. Event: Enable quotient-1-arg2; name this event ‘quotient-1-arg2-off1’. Event: Enable leq-quotient; name this event ‘leq-quotient-off1’. Event: Enable quotient-quotient; name this event ‘quotient-quotient-off1’. Event: Enable quotient-plus-times-times-instance; name this event ‘quotientplus-times-times-instance-off1’. Event: Enable quotient-plus-times-times; name this event ‘quotient-plus-times-times-off1’. Event: Enable quotient-plus-times-times-proof; name this event ‘quotientplus-times-times-proof-off1’.

Event: Enable quotient-plus-fact; name this event ‘quotient-plus-fact-off1’. Event: Enable quotient-remainder-instance; name this event ‘quotient-remainder-instance-off1’. Event: Enable quotient-remainder; name this event ‘quotient-remainder-off1’. Event: Enable quotient-remainder-times; name this event ‘quotient-remainder-times-off1’. Event: Enable quotient-difference3; name this event ‘quotient-difference3-off1’. Event: Enable quotient-difference2; name this event ‘quotient-difference2-off1’. Event: Enable quotient-lessp-arg1; name this event ‘quotient-lessp-arg1-off1’. Event: Enable quotient-difference1; name this event ‘quotient-difference1-off1’. Event: Enable quotient-times-times-proof; name this event ‘quotient-times-times-proof-off1’. Event: Enable quotient-times-instance; name this event ‘quotient-times-instance-off1’. Event: Enable quotient-times; name this event ‘quotient-times-off1’. Event: Enable quotient-times-proof; name this event ‘quotient-times-proof-off1’. Event: Enable quotient-times-instance-temp-proof; name this event ‘quotienttimes-instance-temp-proof-off1’. Event: Enable quotient-plus; name this event ‘quotient-plus-off1’. Event: Enable quotient-plus-proof; name this event ‘quotient-plus-proof-off1’.

Event: Enable quotient-sub1; name this event ‘quotient-sub1-off1’. Event: Enable equal-quotient-0; name this event ‘equal-quotient-0-off1’. Event: Enable quotient-add1; name this event ‘quotient-add1-off1’. Event: Enable quotient-zero; name this event ‘quotient-zero-off1’. Event: Enable quotient-of-non-number; name this event ‘quotient-of-non-number-off1’. Event: Enable quotient-noop; name this event ‘quotient-noop-off1’. Event: Enable transitivity-of-divides; name this event ‘transitivity-of-divides-off1’. Event: Enable remainder-x-x; name this event ‘remainder-x-x-off1’. Event: Enable remainder-1-arg2; name this event ‘remainder-1-arg2-off1’. Event: Enable remainder-1-arg1; name this event ‘remainder-1-arg1-off1’. Event: Enable remainder-remainder; name this event ‘remainder-remainder-off1’. Event: Enable remainder-plus-times-times-instance; name this event ‘remainderplus-times-times-instance-off1’. Event: Enable remainder-plus-times-times; name this event ‘remainder-plus-times-times-off1’. Event: Enable remainder-plus-times-times-proof; name this event ‘remainderplus-times-times-proof-off1’. Event: Enable remainder-plus-fact; name this event ‘remainder-plus-fact-off1’.

Event: Enable remainder-difference2; name this event ‘remainder-difference2-off1’. Event: Enable double-remainder-induction; name this event ‘double-remainder-induction-off1’. Event: Enable *1*double-remainder-induction; name this event ‘g*1*doubleremainder-induction-off1’. Event: Enable remainder-difference1; name this event ‘remainder-difference1-off1’. Event: Enable remainder-times2-instance; name this event ‘remainder-times2-instance-off1’. Event: Enable remainder-times2; name this event ‘remainder-times2-off1’. Event: Enable remainder-times2-proof; name this event ‘remainder-times2-proof-off1’. Event: Enable remainder-times-times-proof; name this event ‘remainder-times-times-proof-off1’. Event: Enable remainder-times1-instance; name this event ‘remainder-times1-instance-off1’. Event: Enable remainder-times1-instance-proof; name this event ‘remaindertimes1-instance-proof-off1’. Event: Enable remainder-times1; name this event ‘remainder-times1-off1’. Event: Enable remainder-times1-proof; name this event ‘remainder-times1-proof-off1’. Event: Enable equal-remainder-plus-remainder-proof; name this event ‘equalremainder-plus-remainder-proof-off1’.

Event: Enable equal-remainder-plus-0; name this event ‘equal-remainder-plus-0-off1’. Event: Enable equal-remainder-plus-0-proof; name this event ‘equal-remainder-plus-0-proof-off1’. Event: Enable remainder-plus; name this event ‘remainder-plus-off1’. Event: Enable remainder-plus-proof; name this event ‘remainder-plus-proof-off1’. Event: Enable remainder-add1; name this event ‘remainder-add1-off1’. Event: Enable remainder-quotient-elim; name this event ‘remainder-quotient-elim-off1’. Event: Enable remainder-zero; name this event ‘remainder-zero-off1’. Event: Enable remainder-of-non-number; name this event ‘remainder-of-non-number-off1’. Event: Enable remainder-noop; name this event ‘remainder-noop-off1’. Event: Enable lessp-remainder; name this event ‘lessp-remainder-off1’. Event: Enable cancel-equal-times; name this event ‘cancel-equal-times-off1’. Event: Enable *1*cancel-equal-times; name this event ‘g*1*cancel-equal-times-off1’. Event: Enable cancel-lessp-times; name this event ‘cancel-lessp-times-off1’. Event: Enable *1*cancel-lessp-times; name this event ‘g*1*cancel-lessp-times-off1’. Event: Enable infer-equality-from-not-lessp; name this event ‘infer-equality-from-not-lessp-off1’.

Event: Enable lessp-times-arg1; name this event ‘lessp-times-arg1-off1’. Event: Enable eval$-equal; name this event ‘eval$-equal-off2’. Event: Enable and-not-zerop-tree; name this event ‘and-not-zerop-tree-off1’. Event: Enable *1*and-not-zerop-tree; name this event ‘g*1*and-not-zerop-tree-off1’. Event: Enable or-zerop-tree; name this event ‘or-zerop-tree-off1’. Event: Enable *1*or-zerop-tree; name this event ‘g*1*or-zerop-tree-off1’. Event: Enable times-fringe; name this event ‘times-fringe-off1’. Event: Enable *1*times-fringe; name this event ‘g*1*times-fringe-off1’. Event: Enable times-tree; name this event ‘times-tree-off1’. Event: Enable *1*times-tree; name this event ‘g*1*times-tree-off1’. Event: Enable lessp-1-times; name this event ‘lessp-1-times-off1’. Event: Enable lessp-plus-times2; name this event ‘lessp-plus-times2-off1’. Event: Enable lessp-plus-times1; name this event ‘lessp-plus-times1-off1’. Event: Enable lessp-plus-times-proof; name this event ‘lessp-plus-times-proof-off1’. Event: Enable lessp-times-cancellation-proof; name this event ‘lessp-times-cancellation-proof-off1’. Event: Enable lessp-times3; name this event ‘lessp-times3-off1’. Event: Enable lessp-times3-proof2; name this event ‘lessp-times3-proof2-off1’.

Event: Enable lessp-times3-proof1; name this event ‘lessp-times3-proof1-off1’. Event: Enable lessp-times2; name this event ‘lessp-times2-off1’. Event: Enable lessp-times2-proof; name this event ‘lessp-times2-proof-off1’. Event: Enable lessp-times1; name this event ‘lessp-times1-off1’. Event: Enable lessp-times1-proof; name this event ‘lessp-times1-proof-off1’. Event: Enable times-1-arg1; name this event ‘times-1-arg1-off1’. Event: Enable times-quotient; name this event ‘times-quotient-off1’. Event: Enable times-quotient-proof; name this event ‘times-quotient-proof-off1’. Event: Enable times-distributes-over-difference; name this event ‘times-distributes-over-difference-off1’. Event: Enable times-distributes-over-difference-proof; name this event ‘timesdistributes-over-difference-proof-off1’. Event: Enable associativity-of-times; name this event ‘associativity-of-times-off1’. Event: Enable commutativity2-of-times; name this event ‘commutativity2-of-times-off1’. Event: Enable times-distributes-over-plus; name this event ‘times-distributes-over-plus-off1’. Event: Enable times-distributes-over-plus-proof; name this event ‘times-distributes-over-plus-proof-off1’. Event: Enable commutativity-of-times; name this event ‘commutativity-of-times-off1’.

Event: Enable times-add1; name this event ‘times-add1-off1’. Event: Enable times-zero; name this event ‘times-zero-off1’. Event: Enable equal-sub1-0; name this event ‘equal-sub1-0-off1’. Event: Enable equal-times-1; name this event ‘equal-times-1-off1’. Event: Enable equal-times-0; name this event ‘equal-times-0-off1’. Event: Enable cancel-lessp-plus; name this event ‘cancel-lessp-plus-off1’. Event: Enable *1*cancel-lessp-plus; name this event ‘g*1*cancel-lessp-plus-off1’. Event: Enable difference-x-x; name this event ‘difference-x-x-off1’. Event: Enable difference-difference-arg2; name this event ‘difference-difference-arg2-off1’. Event: Enable difference-difference-arg1; name this event ‘difference-difference-arg1-off1’. Event: Enable difference-sub1-arg2; name this event ‘difference-sub1-arg2-off1’. Event: Enable difference-add1-arg2; name this event ‘difference-add1-arg2-off1’. Event: Enable difference-leq-arg1; name this event ‘difference-leq-arg1-off1’. Event: Enable difference-elim; name this event ‘difference-elim-off1’. Event: Enable cancel-difference-plus; name this event ‘cancel-difference-plus-off1’.

Event: Enable *1*cancel-difference-plus; name this event ‘g*1*cancel-difference-plus-off1’. Event: Enable cancel-equal-plus; name this event ‘cancel-equal-plus-off1’. Event: Enable *1*cancel-equal-plus; name this event ‘g*1*cancel-equal-plus-off1’. Event: Enable eval$-quote; name this event ‘eval$-quote-off2’. Event: Enable plus-tree; name this event ‘plus-tree-off1’. Event: Enable *1*plus-tree; name this event ‘g*1*plus-tree-off1’. Event: Enable plus-fringe; name this event ‘plus-fringe-off1’. Event: Enable *1*plus-fringe; name this event ‘g*1*plus-fringe-off1’. Event: Enable diff-diff-arg2; name this event ‘diff-diff-arg2-off1’. Event: Enable diff-diff-arg1; name this event ‘diff-diff-arg1-off1’. Event: Enable difference-plus-plus-cancellation-proof; name this event ‘differenceplus-plus-cancellation-proof-off1’. Event: Enable difference-plus-cancellation-proof; name this event ‘differenceplus-cancellation-proof-off1’. Event: Enable plus-difference-arg2; name this event ‘plus-difference-arg2-off1’. Event: Enable plus-difference-arg1; name this event ‘plus-difference-arg1-off1’. Event: Enable associativity-of-plus; name this event ‘associativity-of-plus-off1’. Event: Enable plus-add1-arg2; name this event ‘plus-add1-arg2-off1’.

Event: Enable plus-add1-arg1; name this event ‘plus-add1-arg1-off1’. Event: Enable plus-zero-arg2; name this event ‘plus-zero-arg2-off1’. Event: Enable commutativity2-of-plus; name this event ‘commutativity2-of-plus-off1’. Event: Enable commutativity-of-plus; name this event ‘commutativity-of-plus-off1’. Event: Enable equal-difference-0; name this event ‘equal-difference-0-off1’. Event: Enable equal-plus-0; name this event ‘equal-plus-0-off1’. Event: Enable member-bagint; name this event ‘member-bagint-off1’. Event: Enable occurrences-bagdiff; name this event ‘occurrences-bagdiff-off1’. Event: Enable occurrences-bagint; name this event ‘occurrences-bagint-off1’. Event: Enable subbagp-bagint2; name this event ‘subbagp-bagint2-off1’. Event: Enable subbagp-bagint1; name this event ‘subbagp-bagint1-off1’. Event: Enable subbagp-cdr2; name this event ‘subbagp-cdr2-off1’. Event: Enable subbagp-cdr1; name this event ‘subbagp-cdr1-off1’. Event: Enable subbagp-delete; name this event ‘subbagp-delete-off1’. Event: Enable bagdiff-delete; name this event ‘bagdiff-delete-off1’. Event: Enable member-bagdiff; name this event ‘member-bagdiff-off1’. Event: Enable occurrences-delete; name this event ‘occurrences-delete-off1’.

Event: Enable member-delete-implies-membership; name this event ‘memberdelete-implies-membership-off1’. Event: Enable member-delete; name this event ‘member-delete-off1’. Event: Enable member-non-list; name this event ‘member-non-list-off1’. Event: Enable equal-occurrences-zero; name this event ‘equal-occurrences-zero-off1’. Event: Enable delete-delete; name this event ‘delete-delete-off1’. Event: Enable delete-non-member; name this event ‘delete-non-member-off1’. Event: Enable subbagp; name this event ‘subbagp-off1’. Event: Enable *1*subbagp; name this event ‘g*1*subbagp-off1’. Event: Enable occurrences; name this event ‘occurrences-off1’. Event: Enable *1*occurrences; name this event ‘g*1*occurrences-off1’. Event: Enable bagint; name this event ‘bagint-off1’. Event: Enable *1*bagint; name this event ‘g*1*bagint-off1’. Event: Enable bagdiff; name this event ‘bagdiff-off1’. Event: Enable *1*bagdiff; name this event ‘g*1*bagdiff-off1’. Event: Enable delete; name this event ‘delete-off1’. Event: Enable *1*delete; name this event ‘g*1*delete-off1’. Event: Disable v-adder-output=v-sum; name this event ‘v-adder-output=v-sum-on’.

Event: Disable v-adder-carry-out=v-carry; name this event ‘v-adder-carry-out=v-carry-on’. Event: Disable v-to-nat-firstn-hack1; name this event ‘v-to-nat-firstn-hack1-on’. Event: Disable v-to-nat-firstn-hack2; name this event ‘v-to-nat-firstn-hack2-on’. Event: Disable equal-nat-to-v-inverter-hack1; name this event ‘equal-nat-to-v-inverter-hack1-on’. Event: Disable equal-nat-to-v-inverter-hack2; name this event ‘equal-nat-to-v-inverter-hack2-on’. Event: Disable equal-iff; name this event ‘equal-iff-on’. Event: Disable quotient-plus-x-x-2-with-extra-arg; name this event ‘quotientplus-x-x-2-with-extra-arg-on’. Event: Disable plus-quotient-2-lemma; name this event ‘plus-quotient-2-lemma-on’. Event: Disable plus-quotient-2; name this event ‘plus-quotient-2-on’. Event: Disable v-alu-correct-nat-int-buf; name this event ‘v-alu-correct-nat-int-buf-on’. Event: Disable v-alu-correct-nat-adder-carry-out; name this event ‘v-alu-correct-nat-adder-carry-out-on’. Event: Disable v-alu-correct-nat-adder-output; name this event ‘v-alu-correct-nat-adder-output-on’. Event: Disable v-alu-correct-nat-adder; name this event ‘v-alu-correct-nat-adder-on’.

Event: Disable v-alu-correct-nat-inc; name this event ‘v-alu-correct-nat-inc-on’.

Event: Disable v-alu-correct-nat-subtracter-carry-out; name this event ‘v-alu-correct-nat-subtracter-carry-out-on’.

Event: Disable v-alu-correct-nat-subtracter-output; name this event ‘v-alu-correct-nat-subtracter-output-on’.

Event: Disable v-alu-correct-nat-subtracter; name this event ‘v-alu-correct-nat-subtracter-on’.

Event: Disable v-alu-correct-nat-dec; name this event ‘v-alu-correct-nat-dec-on’.

Event: Disable v-alu-correct-nat-lsr-carry-out; name this event ‘v-alu-correct-nat-lsr-carry-out-on’.

Event: Disable v-alu-correct-nat-lsr-output; name this event ‘v-alu-correct-nat-lsr-output-on’.

Event: Disable v-alu-correct-nat-lsr; name this event ‘v-alu-correct-nat-lsr-on’.

Event: Disable v-alu-correct-nat-not-output; name this event ‘v-alu-correct-nat-not-output-on’.

Event: Disable v-alu-correct-nat-not; name this event ‘v-alu-correct-nat-not-on’.

Event: Disable v-alu-correct-int-adder-overflowp; name this event ‘v-alu-correct-int-adder-overflowp-on’.

Event: Disable v-alu-correct-int-adder-output; name this event ‘v-alu-correct-int-adder-output-on’.

Event: Disable v-alu-correct-int-adder; name this event ‘v-alu-correct-int-adder-on’.

Event: Disable v-alu-correct-int-inc; name this event ‘v-alu-correct-int-inc-on’. Event: Disable v-alu-correct-int-subtracter-overflowp; name this event ‘v-alu-correct-int-subtracter-overflowp-on’. Event: Disable v-alu-correct-int-subtracter-output; name this event ‘v-alu-correct-int-subtracter-output-on’. Event: Disable v-alu-correct-int-subtracter; name this event ‘v-alu-correct-int-subtracter-on’. Event: Disable v-alu-correct-int-dec; name this event ‘v-alu-correct-int-dec-on’. Event: Disable v-alu-correct-int-asr-output; name this event ‘v-alu-correct-int-asr-output-on’. Event: Disable v-alu-correct-int-asr; name this event ‘v-alu-correct-int-asr-on’. Event: Disable v-alu-correct-int-neg; name this event ‘v-alu-correct-int-neg-on’. Event: Disable v-alu-correct-int-not; name this event ‘v-alu-correct-int-not-on’. Event: Enable v-alu-correct-int-not-output; name this event ‘v-alu-correct-int-not-output-off1’. Event: Enable v-alu-correct-nat-not-output; name this event ‘v-alu-correct-nat-not-output-off2’. Event: Enable v-alu-correct-nat-lsr-carry-out; name this event ‘v-alu-correct-nat-lsr-carry-out-off1’. Event: Enable v-adder-output=v-sum; name this event ‘v-adder-output=v-sum-off1’.

Event: Enable v-alu-correct-nat-inc; name this event ‘v-alu-correct-nat-inc-off1’.

Event: Enable v-alu-correct-nat-adder; name this event ‘v-alu-correct-nat-adder-off1’.

Event: Enable v-alu-correct-int-asr; name this event ‘v-alu-correct-int-asr-off1’.

Event: Enable v-alu-correct-nat-lsr; name this event ‘v-alu-correct-nat-lsr-off1’.

Event: Disable v-to-nat-of-nat-to-v; name this event ‘v-to-nat-of-nat-to-v-on’.

Event: Disable iplus-0-left; name this event ‘iplus-0-left-on1’.

Event: Disable iplus-0-right; name this event ‘iplus-0-right-on1’.

Event: Disable commutativity-of-iplus; name this event ‘commutativity-of-iplus-on1’.

Theorem: v-negp->v-nzerop v-negp (v) → v-nzerop (v)

Theorem: v-zerop-implies-v-to-nat-0 v-zerop (a) → (v-to-nat (a) = 0)

Theorem: boolp-flag-extracters boolp (c-flag (update-flags (flags, set-flags, cvzbv))) ∧ boolp (v-flag (update-flags (flags, set-flags, cvzbv))) ∧ boolp (n-flag (update-flags (flags, set-flags, cvzbv))) ∧ boolp (z-flag (update-flags (flags, set-flags, cvzbv)))

Theorem: v-to-nat-equal bv2p (a, b) → ((v-to-nat (a) = v-to-nat (b)) = (a = b))

Theorem: v-nzerop-nat-to-v-zero (z ≃ 0) → (¬ v-nzerop (nat-to-v (z, l)))

Theorem: v-not-v-not bvp (a) → (v-not (v-not (a)) = a)

Theorem: rewrite-equal-v-to-nat-0 (v-to-nat (a) = 0) = v-zerop (a) Event: Enable rewrite-equal-v-to-nat-0; name this event ‘rewrite-equal-v-to-nat-0-off’.

Definition: cc-cc = list (f, f, f, f) Definition: cc-cs = list (t, f, f, f) Definition: cc-vc = list (f, t, f, f) Definition: cc-vs = list (t, t, f, f) Definition: cc-pl = list (f, f, t, f) Definition: cc-mi = list (t, f, t, f) Definition: cc-ne = list (f, t, t, f) Definition: cc-eq = list (t, t, t, f) Definition: cc-hi = list (f, f, f, t) Definition: cc-ls = list (t, f, f, t) Definition: cc-ge = list (f, t, f, t) Definition: cc-lt = list (t, t, f, t) Definition: cc-gt = list (f, f, t, t) Definition: cc-le = list (t, f, t, t) Definition: cc-t = list (f, t, t, t) Definition: cc-f = list (t, t, t, t) Event: Let us define the theory condition-code-theory to consist of the following events: cc-cc, cc-cs, cc-vc, cc-vs, cc-pl, cc-mi, cc-ne, cc-eq, cc-hi, cc-ls, cc-ge, cclt, cc-gt, cc-le, cc-t, cc-f.

Definition: op-move = list (f, f, f, f) Definition: op-inc = list (t, f, f, f) Definition: op-addc = list (f, t, f, f)

Definition: op-add = list (t, t, f, f) Definition: op-neg = list (f, f, t, f) Definition: op-dec = list (t, f, t, f) Definition: op-subb = list (f, t, t, f) Definition: op-sub = list (t, t, t, f) Definition: op-ror = list (f, f, f, t) Definition: op-asr = list (t, f, f, t) Definition: op-lsr = list (f, t, f, t) Definition: op-xor = list (t, t, f, t) Definition: op-or = list (f, f, t, t) Definition: op-and = list (t, f, t, t) Definition: op-not = list (f, t, t, t) Definition: op-m15 = list (t, t, t, t) Event: Let us define the theory opcode-theory to consist of the following events: op-move, op-inc, op-addc, op-add, op-neg, op-dec, op-subb, op-sub, op-ror, opasr, op-lsr, op-xor, op-or, op-and, op-not, op-m15.

Theorem: zb-v-alu zb (v-alu (c, a, b, op-code)) = v-zerop (bv (v-alu (c, a, b, op-code))) Theorem: n-v-alu n (v-alu (c, a, b, op-code)) = v-negp (bv (v-alu (c, a, b, op-code))) Theorem: universal-flags-interpretations (bvp (a) ∧ boolp (c) ∧ (length (a) ≄ 0)) → ((z-set (set-flags)

→ ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c, a, b, op-code)))

= v-nzerop (bv (v-alu (c, a, b, op-code)))) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags,

v-alu (c, a, b, op-code)))

= (¬ v-nzerop (bv (v-alu (c, a, b, op-code)))))))

∧ (n-set (set-flags)

→ ((store-resultp (cc-pl,

update-flags (flags, set-flags, v-alu (c, a, b, op-code)))

= (¬ v-negp (bv (v-alu (c, a, b, op-code))))) ∧ (store-resultp (cc-mi,

update-flags (flags, set-flags, v-alu (c,

a, b, op-code)))

= v-negp (bv (v-alu (c, a, b, op-code))))))

∧ (store-resultp (cc-t,

update-flags (flags, set-flags, v-alu (c, a, b, op-code)))

= t) ∧ (store-resultp (cc-f,

update-flags (flags, set-flags, v-alu (c, a, b, op-code)))

= f))

Theorem: v-sum-on-not-a-a bv2p (a, b) → (v-nzerop (v-sum (t, a, b)) = (v-not (a) ≠ b))

Theorem: if-v-subtracter-output=0-then-a=b bv2p (a, b) → (v-nzerop (v-subtracter-output (f, a, b)) = (a ≠ b))

Theorem: zero-flag-interpretation-for-sub (bv2p (a, b) ∧ z-set (set-flags)) → (z-flag (update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (a = b))

Theorem: flags-interpretation-sub (bv2p (a, b) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (a ≠ b))

∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (a = b)))

Theorem: v-negp-v-shift-right ((length (a) ≠ 0) ∧ boolp (c)) → (v-negp (v-shift-right (a, c)) = c)

Theorem: flags-interpretation-ror (bvp (a) ∧ boolp (c-flag (flags)) ∧ (length (a) ≄ 0)) → ((c-set (set-flags)

→ ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-ror)))

= (¬ nth (0, a))) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-ror)))

= nth (0, a))))

∧ (n-set (set-flags)

→ ((store-resultp (cc-pl,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-ror)))

= (¬ c-flag (flags))) ∧ (store-resultp (cc-mi,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-ror)))

= c-flag (flags)))))

Theorem: flags-interpretation-lsr (bvp (a) ∧ (length (a) ≄ 0) ∧ c-set (set-flags))

→ ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-lsr)))

= (¬ nth (0, a))) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-lsr)))

= nth (0, a)))

Theorem: flags-interpretation-xor (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-xor)))

= (a ≠ b)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-xor)))

= (a = b)))

Theorem: flags-interpretation-nat-move (bv2p (a, b) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-move)))

= (v-to-nat (a) ≠ 0)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-move)))

= (v-to-nat (a) = 0)) ∧ (store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-m15)))

= (v-to-nat (a) ≠ 0)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags,

v-alu (c-flag (flags), a, b, op-m15)))

= (v-to-nat (a) = 0)))

Theorem: flags-interpretation-nat-inc (bv2p (a, b) ∧ c-set (set-flags)) → ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= ((1 + v-to-nat (a)) < exp (2, length (a)))) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= ((1 + v-to-nat (a)) ≮ exp (2, length (a)))))

Theorem: flags-interpretation-nat-addc (bv2p (a, b) ∧ c-set (set-flags)) → ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= ((b-to-nat (c-flag (flags)) + v-to-nat (a) + v-to-nat (b))

< exp (2, length (a)))) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= ((b-to-nat (c-flag (flags))

+ v-to-nat (a) + v-to-nat (b)) ≮ exp (2, length (a)))))

Theorem: flags-interpretation-nat-add (bv2p (a, b) ∧ c-set (set-flags)) → ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= ((v-to-nat (a) + v-to-nat (b)) < exp (2, length (a)))) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= ((v-to-nat (a) + v-to-nat (b)) ≮ exp (2, length (a)))))

Theorem: when-the-mantissa-isnt-0-then-neither-is-the-exponential (mantissa ≄ 0) → (exp (mantissa, exponent) ≠ 0)

Definition: double-difference-induction (n, m, l) = if n ≃ 0 then t

elseif m ≃ 0 then t elseif l ≃ 0 then t else double-difference-induction (n − l, m − l, l) endif

Theorem: quotient-lessp-double-remainder$help ((n < m) ∧ (n ≄ 0) ∧ (m ≄ 0) ∧ (l ≄ 0) ∧ ((n mod l) = 0) ∧ ((m mod l) = 0)) → ((n ÷ l) < (m ÷ l))

Theorem: v-nzerop-nat-to-v$help ((l ≄ 0) ∧ (n ≄ 0) ∧ ((n mod 2) = 0) ∧ (n < exp (2, l))) → ((n ÷ 2) < exp (2, l − 1))

Event: Enable v-nzerop-nat-to-v$help; name this event ‘v-nzerop-nat-to-v$help-off’.

Theorem: v-nzerop-nat-to-v (n < exp (2, l)) → (v-nzerop (nat-to-v (n, l)) = (n ≄ 0))

Theorem: lessp-sub1-plus-a-b-b (((a + b) − 1) < b) = ((a ≃ 0) ∧ (b ≄ 0))

Theorem: lessp-v-to-nat-exp-2-length-a (l = length (a)) → ((v-to-nat (a) < exp (2, l)) = t)

Theorem: lessp-v-to-nat-exp-2-length-a$linear v-to-nat (a) < exp (2, length (a))

Theorem: flags-interpretation-nat-dec bv2p (a, b) → ((c-set (set-flags)

→ ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= (v-to-nat (a) ≠ 0)) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-dec)))

= (v-to-nat (a) = 0))))

∧ ((z-set (set-flags) ∧ (length (a) ≠ 0))

→ ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-dec)))

= (v-to-nat (a) ≠ 1)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-dec)))

= (v-to-nat (a) = 1)))))

Theorem: remainder-theorem-for-subb ((a < b) ∧ (b < c)) → ((((b + c) − a) mod c) = (b − a))

Theorem: difference-linear (a < b) → (((a − c) < b) = t)

Theorem: flags-interpretation-nat-subb-carry (bv2p (a, b) ∧ c-set (set-flags)) → ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= (v-to-nat (b) ≮ (v-to-nat (a) + b-to-nat (c-flag (flags))))) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= (v-to-nat (b)

< (v-to-nat (a) + b-to-nat (c-flag (flags))))))

Theorem: flags-interpretation-nat-subb-higher (bv2p (a, b) ∧ c-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-hi,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= ((v-to-nat (a) + b-to-nat (c-flag (flags))) < v-to-nat (b))) ∧ (store-resultp (cc-ls,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= ((v-to-nat (a) + b-to-nat (c-flag (flags))) ≮ v-to-nat (b))))

Theorem: carry-flag-nat-interpretation-for-sub (bv2p (a, b) ∧ c-set (set-flags)) → (c-flag (update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (v-to-nat (b) < v-to-nat (a)))

Theorem: flags-interpretation-nat-sub bv2p (a, b) → ((c-set (set-flags)

→ ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (v-to-nat (b) ≮ v-to-nat (a)))

∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (v-to-nat (b) < v-to-nat (a)))))

∧ ((c-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-hi,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (v-to-nat (a) < v-to-nat (b)))

∧ (store-resultp (cc-ls,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (v-to-nat (a) ≮ v-to-nat (b))))))

Theorem: flags-interpretation-nat-lsr-carry (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ c-set (set-flags)) → ((store-resultp (cc-cc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-lsr)))

= ((v-to-nat (a) mod 2) = 0))

∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-lsr)))

= ((v-to-nat (a) mod 2) ≠ 0)))

Theorem: flags-interpretation-nat-lsr-zero (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-lsr)))

= ((v-to-nat (a) ÷ 2) ≠ 0)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-lsr)))

= ((v-to-nat (a) ÷ 2) = 0)))

Theorem: idifference-0 (integerp (a) ∧ integerp (b)) → ((idifference (a, b) = 0) = (a = b))

Theorem: v-to-nat-lessp-exp-2-length v-to-nat (a) < exp (2, length (a))

Theorem: integerp-v-to-int integerp (v-to-int (a))

Theorem: v-negp-as-bounds bvp (x) → (v-negp (x) = (v-to-nat (x) ≮ exp (2, length (x) − 1)))

Event: Enable v-negp-as-bounds; name this event ‘v-negp-as-bounds-off’.

Theorem: negativep-idifference-on-numberps ((a ∈ N) ∧ (b ∈ N)) → (negativep (idifference (a, b)) = (a < b))

Theorem: v-negp->negativep-v-to-int bvp (a) → (v-negp (a) = negativep (v-to-int (a)))

Event: Enable v-negp->negativep-v-to-int; name this event ‘v-negp->negativep-v-to-int-off’.

Theorem: rewrite-equal-v-to-int-0 (v-to-int (a) = 0) = v-zerop (a)

Event: Enable rewrite-equal-v-to-int-0; name this event ‘rewrite-equal-v-to-int-0-off’.

Theorem: int-to-v-v-to-int-0 v-to-int (int-to-v (0, l)) = 0

Theorem: bvp-int-to-v bvp (int-to-v (i, l))

Theorem: v-to-int-nat-to-v-0 v-to-int (nat-to-v (0, l)) = 0

Theorem: integer-in-rangep-minus-0 integer-in-rangep (− 0, l)

Theorem: not-equal-iplus-minus-0 iplus (a, b) ≠ (− 0)

Theorem: lessp-1-plus-x-x (1 < (x + x)) = (x ≄ 0)

Theorem: integer-in-rangep-1 ((l ≄ 0) ∧ (l ≠ 1)) → integer-in-rangep (1, l)

Theorem: lessp-a-plus-a-a (a < (a + a)) = (a ≄ 0)

Theorem: exp-linear-bounds (if v < exp (2, n − 1) then f else t endif ∧ (v < exp (2, n))) → (exp (2, n − 1) ≮ (exp (2, n) − v))

Theorem: integer-in-rangep-v-to-int (l = length (a)) → integer-in-rangep (v-to-int (a), l)

Theorem: addition-cases-for-integer-in-rangep-lemmas (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (iplus (a, b) < exp (2, l))

Theorem: subtraction-cases-for-integer-in-rangep-lemmas (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (iplus (b, ineg (a)) < exp (2, l))

Theorem: exp-2-l-1<=exp-2-l (l ≄ 0) → (exp (2, l − 1) < exp (2, l))

Theorem: lessp-remainder-theorem (n < m) → ((n mod r) < m)

Theorem: integer-in-rangep-the-obvious-way ((l ≄ 0) ∧ integerp (i) ∧ integer-in-rangep (i, l)) → (v-negp (int-to-v (i, l)) = negativep (i))

Event: Enable integer-in-rangep-the-obvious-way; name this event ‘integer-in-rangep-the-obvious-way-off’.

Theorem: integer-in-rangep-iplus (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (integer-in-rangep (iplus (a, b), l)

= (v-negp (int-to-v (iplus (a, b), l)) = negativep (iplus (a, b))))

Event: Enable integer-in-rangep-iplus; name this event ‘integer-in-rangep-iplus-off’.

Theorem: integer-in-rangep-iplus$commuted (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (negativep (iplus (a, b))

= (integer-in-rangep (iplus (a, b), l)

↔ v-negp (int-to-v (iplus (a, b), l))))

Theorem: integer-in-rangep-iplus-carry (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (integer-in-rangep (iplus (1, iplus (a, b)), l)

= (v-negp (int-to-v (iplus (1, iplus (a, b)), l)) = negativep (iplus (1, iplus (a, b)))))

Event: Enable integer-in-rangep-iplus-carry; name this event ‘integer-in-rangep-iplus-carry-off’.

Theorem: integer-in-rangep-iplus-carry$commuted (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (negativep (iplus (1, iplus (a, b)))

= (integer-in-rangep (iplus (1, iplus (a, b)), l) ↔ v-negp (int-to-v (iplus (1, iplus (a, b)), l))))

Theorem: not-integerp-minus-zero integerp (− x) = (x ≄ 0)

Theorem: integer-in-rangep-iplus-ineg (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (integer-in-rangep (iplus (b, ineg (a)), l)

= (v-negp (int-to-v (iplus (b, ineg (a)), l)) = negativep (iplus (b, ineg (a)))))

Event: Enable integer-in-rangep-iplus-ineg; name this event ‘integer-in-rangep-iplus-ineg-off’.

Theorem: integer-in-rangep-iplus-ineg$commuted (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0)) → (negativep (iplus (b, ineg (a)))

= (integer-in-rangep (iplus (b, ineg (a)), l)

↔ v-negp (int-to-v (iplus (b, ineg (a)), l))))

Theorem: integer-in-rangep-iplus-ineg-carry (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0) ∧ (l ≠ 1)) → (integer-in-rangep (iplus (b, ineg (iplus (1, a))), l)

= (v-negp (int-to-v (iplus (b, ineg (iplus (1, a))), l)) = negativep (iplus (b, ineg (iplus (1, a))))))

Event: Enable integer-in-rangep-iplus-ineg-carry; name this event ‘integer-in-rangep-iplus-ineg-carry-off’.

Theorem: integer-in-rangep-iplus-ineg-carry$commuted (integer-in-rangep (a, l) ∧ integer-in-rangep (b, l) ∧ (l ≄ 0) ∧ (l ≠ 1)) → (negativep (iplus (b, ineg (iplus (1, a))))

= (v-negp (int-to-v (iplus (b, ineg (iplus (1, a))), l)) ↔ integer-in-rangep (iplus (b, ineg (iplus (1, a))), l)))

Theorem: lessp-1-exp-2 (l ≄ 0) → (1 < exp (2, l))

Theorem: v-nzerop-int-to-v (integer-in-rangep (n, l) ∧ (l ≄ 0)) → (v-nzerop (int-to-v (n, l)) = (¬ izerop (n)))

Theorem: izerop-inc-v-nzerop (integer-in-rangep (a, l) ∧ (l ≄ 0)) → (v-nzerop (int-to-v (iplus (1, a), l)) = (¬ izerop (iplus (1, a))))

Theorem: v-nzerop-int-to-v-0 izerop (z) → (¬ v-nzerop (int-to-v (z, l)))

Theorem: integer-in-rangep-0 izerop (a) → integer-in-rangep (a, l)

Theorem: not-v-negp-nat-to-v-0 (a ≃ 0) → (¬ v-negp (nat-to-v (a, l)))

Theorem: length-int-to-v length (int-to-v (i, l)) = fix (l)

Theorem: integer-in-rangep–1 (l ≄ 0) → integer-in-rangep (-1, l)

Theorem: flags-interpretation-int-move bvp (a) → ((v-set (set-flags)

→ ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-move)))

= integer-in-rangep (v-to-int (a), length (a)))

∧ (store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= integer-in-rangep (v-to-int (a), length (a))) ∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= (¬ integer-in-rangep (v-to-int (a), length (a)))) ∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= (¬ integer-in-rangep (v-to-int (a), length (a))))))

∧ (z-set (set-flags)

→ ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= (v-to-int (a) ≠ 0)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= (v-to-int (a) = 0)) ∧ (store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b,

op-m15)))

= (v-to-int (a) ≠ 0)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= izerop (v-to-int (a)))))

∧ (n-set (set-flags)

→ ((store-resultp (cc-pl,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= (¬ negativep (v-to-int (a)))) ∧ (store-resultp (cc-mi,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= negativep (v-to-int (a))) ∧ (store-resultp (cc-pl,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= (¬ negativep (v-to-int (a)))) ∧ (store-resultp (cc-mi,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= negativep (v-to-int (a)))))

∧ ((v-set (set-flags) ∧ n-set (set-flags))

→ ((store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= (¬ negativep (v-to-int (a)))) ∧ (store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= negativep (v-to-int (a))) ∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= (¬ negativep (v-to-int (a)))) ∧ (store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= negativep (v-to-int (a)))))

∧ ((v-set (set-flags) ∧ n-set (set-flags) ∧ z-set (set-flags))

→ ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= ilessp (0, v-to-int (a))) ∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-move)))

= ileq (v-to-int (a), 0)) ∧ (store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= ilessp (0, v-to-int (a))) ∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-m15)))

= ileq (v-to-int (a), 0)))))

Theorem: flags-interpretation-int-inc-overflow (bvp (a) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= integer-in-rangep (iplus (v-to-int (a), 1), length (a))) ∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= (¬ integer-in-rangep (iplus (v-to-int (a), 1), length (a)))))

Theorem: flags-interpretation-int-inc-zero (bvp (a) ∧ (length (a) ≠ 0) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= (iplus (v-to-int (a), 1) ≠ 0)) ∧ (store-resultp (cc-eq, update-flags (flags,

set-flags,

v-alu (c-flag (flags), a, b, op-inc)))

= (iplus (v-to-int (a), 1) = 0)))

Theorem: flags-interpretation-int-inc-negative (bvp (a) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ v-set (set-flags) ∧ n-set (set-flags)) → ((store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= (¬ negativep (iplus (v-to-int (a), 1)))) ∧ (store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= negativep (iplus (v-to-int (a), 1))))

Theorem: flags-interpretation-int-inc-gt-0 (bvp (a) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= ilessp (0, iplus (1, v-to-int (a))))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-inc)))

= ileq (iplus (1, v-to-int (a)), 0)))

Theorem: flags-interpretation-int-addc-overflow (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags,

v-alu (c-flag (flags), a, b, op-addc)))

= integer-in-rangep (iplus (b-to-nat (c-flag (flags)),

iplus (v-to-int (a), v-to-int (b))), length (a)))

∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= (¬ integer-in-rangep (iplus (b-to-nat (c-flag (flags)),

iplus (v-to-int (a),

v-to-int (b))),

length (a)))))

Theorem: flags-interpretation-int-addc-negative (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ v-set (set-flags) ∧ n-set (set-flags)) → ((store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= negativep (iplus (b-to-nat (c-flag (flags)),

iplus (v-to-int (a), v-to-int (b)))))

∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= (¬ negativep (iplus (b-to-nat (c-flag (flags)), iplus (v-to-int (a), v-to-int (b)))))))

Theorem: flags-interpretation-int-addc-gt-0 (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= ilessp (0, iplus (b-to-nat (c-flag (flags)),

iplus (v-to-int (a), v-to-int (b)))))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-addc)))

= ileq (iplus (b-to-nat (c-flag (flags)),

iplus (v-to-int (a), v-to-int (b))), 0)))

Theorem: flags-interpretation-int-add-overflow (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= integer-in-rangep (iplus (v-to-int (a), v-to-int (b)), length (a))) ∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= (¬ integer-in-rangep (iplus (v-to-int (a), v-to-int (b)), length (a)))))

Theorem: flags-interpretation-int-add-negative (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ v-set (set-flags) ∧ n-set (set-flags)) → ((store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= negativep (iplus (v-to-int (a), v-to-int (b)))) ∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= (¬ negativep (iplus (v-to-int (a), v-to-int (b))))))

Theorem: flags-interpretation-int-add-gt-0 (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt, update-flags (flags,

set-flags,

v-alu (c-flag (flags), a, b, op-add)))

= ilessp (0, iplus (v-to-int (a), v-to-int (b))))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-add)))

= ileq (iplus (v-to-int (a), v-to-int (b)), 0)))

Theorem: int-neg-range-implications ((negativep (v-to-int (a)) ∧ (¬ integer-in-rangep (negative-guts (v-to-int (a)), length (a)))) → v-negp (int-to-v (negative-guts (v-to-int (a)), length (a)))) ∧ (((¬ negativep (v-to-int (a)))

∧ (¬ integer-in-rangep (− v-to-int (a), length (a)))) → (¬ v-negp (int-to-v (− v-to-int (a), length (a)))))

∧ (((¬ negativep (v-to-int (a)))

∧ (¬ integer-in-rangep (− v-to-int (a), length (a)))) → v-nzerop (int-to-v (− v-to-int (a), length (a))))

Theorem: flags-interpretation-int-neg-overflow (bvp (a) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= integer-in-rangep (ineg (v-to-int (a)), length (a)))

∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= (¬ integer-in-rangep (ineg (v-to-int (a)), length (a)))))

Theorem: flags-interpretation-int-neg-negative (bvp (a) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ v-set (set-flags) ∧ n-set (set-flags)) → ((store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= negativep (ineg (v-to-int (a))))

∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= (¬ negativep (ineg (v-to-int (a))))))

Theorem: flags-interpretation-int-neg-zero (bvp (a) ∧ (length (a) ≠ 0) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= (ineg (v-to-int (a)) ≠ 0)) ∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= (ineg (v-to-int (a)) = 0)))

Theorem: flags-interpretation-int-neg-gt-0 (bvp (a) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= ilessp (0, ineg (v-to-int (a)))) ∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-neg)))

= ileq (ineg (v-to-int (a)), 0)))

Theorem: int-dec-rangep-lemmas ((¬ integer-in-rangep (v-to-int (a) − 1, length (a))) → v-nzerop (int-to-v (v-to-int (a) − 1, length (a)))) ∧ (((length (a) ≠ 1)

∧ (¬ integer-in-rangep (− (1 + negative-guts (v-to-int (a))),

length (a))))

→ v-nzerop (int-to-v (− (1 + negative-guts (v-to-int (a))), length (a))))

∧ (((¬ negativep (iplus (-1, v-to-int (a))))

∧ v-nzerop (int-to-v (iplus (-1, v-to-int (a)), length (a)))) → (iplus (-1, v-to-int (a)) ≠ 0))

∧ (((length (a) ≄ 0)

∧ (¬ negativep (iplus (-1, v-to-int (a))))

∧ (¬ v-nzerop (int-to-v (iplus (-1, v-to-int (a)), length (a))))) → (iplus (-1, v-to-int (a)) = 0))

Theorem: flags-interpretation-int-dec-overflow (bvp (a) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= integer-in-rangep (idifference (v-to-int (a), 1), length (a))) ∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= (¬ integer-in-rangep (idifference (v-to-int (a), 1), length (a)))))

Theorem: flags-interpretation-int-dec-negative (bvp (a) ∧ (length (a) ≠ 0) ∧ v-set (set-flags) ∧ n-set (set-flags)) → ((store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= negativep (idifference (v-to-int (a), 1)))

∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= (¬ negativep (idifference (v-to-int (a), 1)))))

Theorem: flags-interpretation-int-dec-zero (bvp (a) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= (idifference (v-to-int (a), 1) ≠ 0))

∧ (store-resultp (cc-eq,

update-flags (flags, set-flags,

v-alu (c-flag (flags), a, b, op-dec)))

= (idifference (v-to-int (a), 1) = 0)))

Theorem: flags-interpretation-int-dec-gt-0 (bvp (a) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= ilessp (0, idifference (v-to-int (a), 1)))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-dec)))

= ileq (idifference (v-to-int (a), 1), 0)))

Theorem: flags-interpretation-int-subb-overflow (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= integer-in-rangep (idifference (v-to-int (b),

iplus (v-to-int (a),

b-to-nat (c-flag (flags)))),

length (a)))

∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= (¬ integer-in-rangep (idifference (v-to-int (b),

iplus (v-to-int (a),

b-to-nat (c-flag (flags)))),

length (a)))))

Theorem: flags-interpretation-int-subb-negative (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ v-set (set-flags)

∧ n-set (set-flags)) → ((store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= negativep (idifference (v-to-int (b),

iplus (v-to-int (a),

b-to-nat (c-flag (flags))))))

∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= (¬ negativep (idifference (v-to-int (b),

iplus (v-to-int (a), b-to-nat (c-flag (flags))))))))

Theorem: flags-interpretation-int-subb-gt-0 (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= ilessp (0,

idifference (v-to-int (b),

iplus (v-to-int (a), b-to-nat (c-flag (flags))))))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-subb)))

= ileq (idifference (v-to-int (b),

iplus (v-to-int (a),

b-to-nat (c-flag (flags)))),

0)))

Theorem: flags-interpretation-int-sub-overflow (bv2p (a, b) ∧ (length (a) ≄ 0) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags,

v-alu (c-flag (flags), a, b, op-sub)))

= integer-in-rangep (idifference (v-to-int (b), v-to-int (a)), length (a)))

∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (¬ integer-in-rangep (idifference (v-to-int (b),

v-to-int (a)),

length (a)))))

Theorem: flags-interpretation-int-sub-negative (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ v-set (set-flags) ∧ n-set (set-flags)) → ((store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= negativep (idifference (v-to-int (b), v-to-int (a))))

∧ (store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= (¬ negativep (idifference (v-to-int (b), v-to-int (a))))))

Theorem: flags-interpretation-int-sub-gt-0 (bv2p (a, b) ∧ (length (a) ≠ 0) ∧ (length (a) ≠ 1) ∧ n-set (set-flags) ∧ v-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= ilessp (0, idifference (v-to-int (b), v-to-int (a))))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-sub)))

= ileq (idifference (v-to-int (b), v-to-int (a)), 0)))

Theorem: equal-idiv-2-0 (idiv (i, 2) = 0) = (izerop (i) ∨ (i = 1))

Theorem: integer-in-rangep-idiv integer-in-rangep (i, l) → integer-in-rangep (idiv (i, 2), l)

Theorem: flags-interpretation-int-asr-zero (bvp (a) ∧ (length (a) ≄ 0) ∧ z-set (set-flags)) → ((store-resultp (cc-ne,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= (idiv (v-to-int (a), 2) ≠ 0))

∧ (store-resultp (cc-eq,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= (idiv (v-to-int (a), 2) = 0)))

Theorem: equal-sub1-plus-x-x (((x + x) − 1) = 0) = (x ≃ 0)

Theorem: remainder-difference-plus-x-x-plus-y-y (((x + x) − (y + y)) mod 2) = 0

Theorem: remainder-difference-plus-x-x-add1-plus-y-y ((1 + (y + y)) < (x + x)) → ((((x + x) − (1 + (y + y))) mod 2) = 1)

Theorem: quotient-difference-plus-x-x-plus-y-y-2 (((x + x) − (y + y)) ÷ 2) = (x − y)

Theorem: quotient-difference-plus-x-x-add1-plus-y-y-2 (((x + x) − (1 + (y + y))) ÷ 2) = ((x − y) − 1)

Theorem: quotient-add1-plus-x-x-2 ((1 + (x + x)) ÷ 2) = fix (x)

Theorem: imod-v-to-int-2 listp (a) → (imod (v-to-int (a), 2) = b-to-nat (car (a)))

Theorem: flags-interpretation-int-asr-carry (bvp (a) ∧ (length (a) ≄ 0) ∧ c-set (set-flags)) → ((store-resultp (cc-cc,

update-flags (flags, set-flags,

v-alu (c-flag (flags), a, b, op-asr)))

= (imod (v-to-int (a), 2) = 0)) ∧ (store-resultp (cc-cs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= (imod (v-to-int (a), 2) ≠ 0)))

Theorem: flags-interpretation-int-asr-negative (bvp (a) ∧ (length (a) ≄ 0)) → ((n-set (set-flags)

→ ((store-resultp (cc-pl,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= (¬ negativep (idiv (v-to-int (a), 2)))) ∧ (store-resultp (cc-mi,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-asr)))

= negativep (idiv (v-to-int (a), 2)))))

∧ ((n-set (set-flags) ∧ v-set (set-flags))

→ ((store-resultp (cc-ge,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-asr)))

= (¬ negativep (idiv (v-to-int (a), 2)))) ∧ (store-resultp (cc-lt,

update-flags (flags, set-flags, v-alu (c-flag (flags),

a, b, op-asr)))

= negativep (idiv (v-to-int (a), 2))))))

Theorem: flags-interpretation-int-asr-gt-0 (bvp (a)

∧ (length (a) ≄ 0) ∧ v-set (set-flags) ∧ n-set (set-flags) ∧ z-set (set-flags)) → ((store-resultp (cc-gt,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= ilessp (0, idiv (v-to-int (a), 2)))

∧ (store-resultp (cc-le,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= ileq (idiv (v-to-int (a), 2), 0)))

Theorem: flags-interpretation-int-asr-overflow (bvp (a) ∧ v-set (set-flags)) → ((store-resultp (cc-vc,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= integer-in-rangep (idiv (v-to-int (a), 2), length (a)))

∧ (store-resultp (cc-vs,

update-flags (flags, set-flags, v-alu (c-flag (flags), a, b, op-asr)))

= (¬ integer-in-rangep (idiv (v-to-int (a), 2), length (a)))))

Definition: v-neg (a) = v-subtracter-output (f, a, nat-to-v (0, length (a)))

Theorem: bv-cvzbv bv (cvzbv (c, v, bv)) = bv

Theorem: c-cvzbv c (cvzbv (c, v, bv)) = c

Theorem: v-cvzbv v (cvzbv (c, v, bv)) = v

Theorem: zb-cvzbv zb (cvzbv (c, v, bv)) = v-zerop (bv)

Theorem: bv-v-alu bv (v-alu (c, a, b, op))

= if op = list (f, f, f, f) then v-buf (a)

elseif op = list (t, f, f, f) then v-inc (a) elseif op = list (f, t, f, f) then v-adder-output (c, a, b) elseif op = list (t, t, f, f) then v-adder-output (f, a, b) elseif op = list (f, f, t, f) then v-neg (a) elseif op = list (t, f, t, f) then v-dec (a) elseif op = list (f, t, t, f) then v-subtracter-output (c, a, b) elseif op = list (t, t, t, f) then v-subtracter-output (f, a, b) elseif op = list (f, f, f, t) then v-ror (a, c) elseif op = list (t, f, f, t) then v-asr (a) elseif op = list (f, t, f, t) then v-lsr (a) elseif op = list (t, t, f, t) then v-xor (a, b) elseif op = list (f, f, t, t) then v-or (a, b) elseif op = list (t, f, t, t) then v-and (a, b) elseif op = list (f, t, t, t) then v-not (a) else v-buf (a) endif

Theorem: c-v-alu (((op = op-move) ∨ (op = op-xor) ∨ (op = op-or) ∨ (op = op-and) ∨ (op = op-not) ∨ (op = op-m15)) → (c (v-alu (c, a, b, op)) = f)) ∧ ((listp (a)

∧ ((op = op-ror) ∨ (op = op-asr) ∨ (op = op-lsr))) → (c (v-alu (c, a, b, op)) = nth (0, a)))

Theorem: v-v-alu ((op = op-move) ∨ (op = op-ror) ∨ (op = op-asr) ∨ (op = op-asr) ∨ (op = op-lsr) ∨ (op = op-xor) ∨ (op = op-or) ∨ (op = op-and) ∨ (op = op-not) ∨ (op = op-m15)) → (v (v-alu (c, a, b, op)) = f)

Theorem: v-alu-correct-nat-rewrite bv2p (a, b) → (v-alu (c, a, b, op) = v-alu-nat (c, a, b, op))

Event: Enable v-alu-correct-nat-rewrite; name this event ‘v-alu-correct-nat-rewrite-off’.

Theorem: v-alu-correct-int-rewrite (bv2p (a, b) ∧ (length (a) ≠ 0)) → (v-alu (c, a, b, op) = v-alu-int (c, a, b, op))

Event: Enable v-alu-correct-int-rewrite; name this event ‘v-alu-correct-int-rewrite-off’.

Theorem: lessp-quotient-test (n < m) → (((n ÷ k) < m) = t)

Event: Enable lessp-quotient-test; name this event ‘lessp-quotient-test-off’.

Theorem: nat-to-v-as-remainder nat-to-v (n mod exp (2, l), l) = nat-to-v (n, l)

Theorem: nat-to-v-of-v-to-nat* (bvp (v) ∧ (l = length (v))) → (nat-to-v (v-to-nat (v), l) = v)

Event: Enable nat-to-v-of-v-to-nat*; name this event ‘nat-to-v-of-v-to-nat*- off’.

Theorem: bv-v-alu-as-natural (bv2p (a, b) ∧ (length (a) = 32)) → (bv (v-alu (c, a, b, op))

= if op = op-inc then nat-to-v (1 + v-to-nat (a), 32) elseif op = op-addc then nat-to-v (b-to-nat (c) + v-to-nat (a) + v-to-nat (b), 32) elseif op = op-add then nat-to-v (v-to-nat (a) + v-to-nat (b), 32) elseif op = op-dec then nat-to-v ((v-to-nat (a) + exp (2, 32)) − 1, 32) elseif op = op-subb then nat-to-v ((v-to-nat (b) + exp (2, 32))

− (v-to-nat (a) + b-to-nat (c)),

                      32)

elseif op = op-sub

then nat-to-v ((v-to-nat (b) + exp (2, 32)) − v-to-nat (a),

                      32)

elseif op = op-lsr then nat-to-v (v-to-nat (a) ÷ 2, 32) else bv (v-alu (c, a, b, op)) endif)

Theorem: fix-int-int-to-v fix-int (v-to-int (v)) = v-to-int (v)

Theorem: int-to-v-of-v-to-int ((l = length (v)) ∧ bvp (v)) → (int-to-v (v-to-int (v), l) = v)

Theorem: ineg-as-idifference idifference (0, i) = ineg (i)

Theorem: bv-v-alu-as-integer (bv2p (a, b) ∧ (length (a) = 32)) → (bv (v-alu (c, a, b, op))

= if op = op-inc then int-to-v (iplus (1, v-to-int (a)), 32) elseif op = op-addc then int-to-v (iplus (b-to-nat (c),

iplus (v-to-int (a), v-to-int (b))),

            32)

elseif op = op-add then int-to-v (iplus (v-to-int (a), v-to-int (b)), 32) elseif op = op-neg then int-to-v (ineg (v-to-int (a)), 32) elseif op = op-dec then int-to-v (idifference (v-to-int (a), 1), 32) elseif op = op-subb then int-to-v (idifference (v-to-int (b),

iplus (v-to-int (a), b-to-nat (c))),

            32)

elseif op = op-sub then int-to-v (idifference (v-to-int (b), v-to-int (a)), 32) elseif op = op-asr then int-to-v (idiv (v-to-int (a), 2), 32) else bv (v-alu (c, a, b, op)) endif)

Event: Make the library "fm9001-replay" and compile it.

Index

a-1+1=a, 444 a-helpful-lemma-for-tree-inducti

ons, 146 a-immediate, 541, 546–548, 761–763,

781, 782, 793, 794, 802–804, 811–813, 830, 848, 895, 904

a-immediate-off, 542 a-immediate-p, 541, 546, 548, 617,

624, 632, 633, 670, 673, 716, 724, 828, 830, 838, 848, 893, 895, 900, 901, 904, 915

a-immediate-p-off, 542 a-reg, 759, 761–763 a-reg-off, 760 add, 549 add-composed-data, 345 add-composed-data-off, 345 add-delays, 322, 323 add-delays-off, 323 add-drives, 308, 309 add-drives-off, 309 add-in-type, 300, 303 add-in-type-off, 300 add-in-types, 300, 301 add-in-types-off, 301 add-load-delay, 323, 324 add-load-delay-off, 323 add-loading, 307–309 add-loading-off, 308 add-loading-simple, 269, 270 add-loading-simple-off, 269 add-loading-simples, 269, 275 add-loading-simples-off, 269 add-loadings, 308 add-loadings-off, 308 add-net-drive, 312 add-net-drive-off, 312 add-net-min-drive, 311, 312 add-net-min-drive-off, 312 add-new-type, 258, 259 add-new-type-off, 259 add-out-depends, 334, 335 add-out-depends-off, 335 add-out-type, 301 add-out-type-off, 301 add-out-types, 301 add-out-types-off, 301 add-ram-marker, 558 add-synonyms, 337, 338 add-synonyms-off, 337 addable-input-delay, 326, 328, 331 addable-input-delay-off, 327 addition, 13 addition-cases-for-integer-in-r

angep-lemmas, 1198 addr-out, 759, 762–764 addr-out-off, 760 addressed-state, 367 addressed-state-off, 367 alist-entry, 247, 291, 345–347, 383,

384 alist-entry-off, 247 alistp, 246, 253, 254, 279, 283, 931–

933, 1002, 1003 alistp-append, 1002 alistp-append-off, 1040 alistp-append-on, 1130 alistp-dual-eval-1, 1002 alistp-dual-eval-1-off, 1040 alistp-dual-eval-1-on, 1129 alistp-dual-eval-3, 1003 alistp-dual-eval-3-off, 1039 alistp-dual-eval-3-on, 1129 alistp-off, 247 alistp-opener, 1002 alistp-opener-off, 1040 alistp-opener-on, 1129 alistp-pairlist, 1002 alistp-pairlist-off, 1040 alistp-pairlist-on, 1130 all-bound-or-err, 252, 335 all-bound-or-err-off, 252 all-input-types, 356, 357, 376 all-input-types-off, 357 all-integer-defns, 37 all-module-props, 295, 352, 353 all-module-props-off, 295 all-output-types, 357, 358, 376 all-output-types-off, 357 all-ramp-mem, 171, 174, 734, 779,

807, 810, 917, 926, 1018 all-ramp-mem->ramp-mem, 174 all-ramp-mem->ramp-mem1, 174 all-ramp-mem-after-write-mem, 174 all-ramp-mem-after-write-mem1, 174 all-ramp-mem-after-write-regs, 734 all-ramp-mem-constant-ram, 174 all-ramp-mem-dual-port-ram-state

-crock, 807 all-ramp-mem-off, 171 all-unbound-in-body, 427, 477, 480 all-unbound-in-body-append, 427 all-unbound-in-body-cons, 427 all-unbound-in-body-dual-eval-1, 427 all-unbound-in-body-listp, 427 all-unbound-in-body-nlistp, 427 all-unbound-in-body-nlistp-name

s, 427 all-unbound-in-body-off, 427 all-xs, 1017, 1018 all-xs-approximates, 1017 all-xs-approximates-off, 1029 all-xs-approximates-on, 1118 all-xs-make-list, 1017 all-xs-make-list-off, 1029 all-xs-make-list-on, 1118 all-xs-off, 1029 all-xs-on, 1118 alu-c, 606, 608, 610, 612, 614, 615,

617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 664, 666, 668, 761, 763, 781, 782, 784, 792–794, 796, 801– 803, 811, 813 alu-c-off, 606 alu-cell, 501, 503 alu-cell*, 501, 502 alu-cell$netlist, 502, 514 alu-cell$value, 502 alu-cell$value-off, 502 alu-cell$value-zero, 502 alu-cell$value-zero-off, 502 alu-cell&, 502, 514 alu-cell&-off, 502 alu-dec-op, 486, 536, 566, 625, 635,

641, 642, 649, 653, 838, 850, 851, 859, 868, 869, 872, 901, 902, 904, 906, 907, 909, 911, 913 alu-dec-op-off, 486 alu-inc-op, 486, 487, 490, 493, 495,

496, 498, 536, 566, 608, 612, 625, 635, 641, 642, 649, 653, 654, 663–667, 838, 850, 851, 859, 868, 869, 872, 901, 902, 904, 906, 907, 909, 911, 913

alu-inc-op-off, 486

alu-mpg, 606, 608, 610, 612, 614, 616, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 761, 763, 781, 782, 784, 792–794, 796, 801–803, 811, 813

alu-mpg-off, 606

alu-op, 606, 608, 610, 612, 614, 616, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 668, 761, 763, 781, 782, 784, 792–794, 796, 801– 803, 811, 813

alu-op-off, 606

alu-zero, 606, 608, 610, 612, 614, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 664, 666, 668, 761, 763, 781, 782, 784, 792–794, 796, 801–803, 811, 813

alu-zero-off, 606 and*, 132, 182, 624, 634, 673, 716,

724, 725, 829, 835, 838, 850, 851, 894, 898–901, 904, 915

and*-off, 132 and-not-zerop-tree, 16–19, 28, 29 and-not-zerop-tree-off, 125 and-not-zerop-tree-off1, 1177 and-not-zerop-tree-on, 1088 another-way-to-look-at-boolp-nt

h, 152 any-of-nat-to-v-0-is-f, 160 ao2, 155, 559 ao2-monotone, 939 ao2-monotone-off, 1053 ao2-monotone-on, 1142 ao2-preserves-good-s, 1004 ao2-preserves-good-s-off, 1038 ao2-preserves-good-s-on, 1128 ao2$netlist, 391, 560 ao2$value, 391 ao2$value-off, 391 ao2&, 390, 391, 560 ao2&-off, 390 ao4, 156 ao4-monotone, 939 ao4-monotone-off, 1053 ao4-monotone-on, 1142 ao4-preserves-good-s, 1004 ao4-preserves-good-s-off, 1038 ao4-preserves-good-s-on, 1128 ao4$netlist, 391 ao4$value, 391 ao4$value-off, 391 ao4&, 391 ao4&-off, 391 ao6, 156, 444 ao6-monotone, 939 ao6-monotone-off, 1053 ao6-monotone-on, 1142 ao6-preserves-good-s, 1004 ao6-preserves-good-s-off, 1038 ao6-preserves-good-s-on, 1127 ao6$netlist, 391, 445 ao6$value, 391 ao6$value-off, 391 ao6&, 391, 445 ao6&-off, 391 ao7, 156 ao7-monotone, 939 ao7-monotone-off, 1053 ao7-monotone-on, 1142 ao7-preserves-good-s, 1004 ao7-preserves-good-s-off, 1038 ao7-preserves-good-s-on, 1127 ao7$netlist, 391 ao7$value, 391 ao7$value-off, 392 ao7&, 391 ao7&-off, 391 append-cons, 135 append-firstn-restn, 141 append-list, 246 append-list-off, 246 append-nlistp, 135 append-off, 135 append-sum, 446 append-v-threefix, 164 append5, 135, 784, 796 append6, 135, 705, 720 append7, 135 append8, 135, 705, 721 apply-state-simple-okp, 268 apply-state-simple-okp-off, 268 arg-types-match-simplep, 264, 265 arg-types-match-simplep-off, 264 arg-types-matchp, 384, 385 arg-types-matchp-off, 384 arg-types-okp, 384 arg-types-okp-off, 385 arg-types-simple-okp, 264 arg-types-simple-okp-off, 265 asm, 556, 559 asm-and-fm9001, 559 asm-flags, 555, 556 asm-line, 556 asm-list, 556 asm-op-code, 553, 556 asm-register, 550, 553, 556 asm-register-a, 553, 556 asm-store-cc, 554, 556 asm-to-1-and-0, 556 associativity-of-append, 135 associativity-of-gcd, 34 associativity-of-gcd-off, 117 associativity-of-gcd-off1, 1168 associativity-of-gcd-on, 1080 associativity-of-gcd-zero-case, 34 associativity-of-gcd-zero-case-

off, 117 off1, 1168 on, 1080

associativity-of-iplus, 39 associativity-of-iplus-off, 114 associativity-of-iplus-off1, 1166 associativity-of-iplus-on, 1077 associativity-of-itimes, 50 associativity-of-itimes-off, 110 associativity-of-itimes-off1, 1162 associativity-of-itimes-on, 1074 associativity-of-plus, 6 associativity-of-plus-off, 129 associativity-of-plus-off1, 1180 associativity-of-plus-on, 1092 associativity-of-times, 13 associativity-of-times-off, 127 associativity-of-times-off1, 1178 associativity-of-times-on, 1090

b-and, 153, 155, 156, 162, 201, 438, 443, 445, 446, 488, 503, 517, 523, 674, 675, 914

b-and-monotone, 940 b-and-monotone-off, 1052 b-and-monotone-on, 1142 b-and-preserves-good-s, 1004 b-and-preserves-good-s-off, 1038 b-and-preserves-good-s-on, 1127 b-and-rewrite, 155 b-and3, 153, 155, 201, 499, 674, 675 b-and3-monotone, 940 b-and3-monotone-off, 1052 b-and3-monotone-on, 1141 b-and3-preserves-good-s, 1004 b-and3-preserves-good-s-off, 1038 b-and3-preserves-good-s-on, 1127 b-and3$netlist, 392, 500, 688, 739 b-and3$value, 392 b-and3$value-off, 392 b-and3&, 392, 500, 688, 738 b-and3&-off, 392 b-and4, 154, 155, 201, 674 b-and4-monotone, 940 b-and4-monotone-off, 1052 b-and4-monotone-on, 1141 b-and4-preserves-good-s, 1004 b-and4-preserves-good-s-off, 1038 b-and4-preserves-good-s-on, 1127 b-and4$netlist, 392, 672, 688 b-and4$value, 392 b-and4$value-as-f$all-t-regs-

address, 592 address-off, 592 b-and4$value-off, 392 b-and4&, 392, 592, 672, 688 b-and4&-off, 392 b-and$netlist, 392, 437, 489, 514,

518, 524, 566, 567, 672, 688, 714 b-and$value, 392 b-and$value-off, 392 b-and&, 392, 437, 489, 514, 518, 524, 566, 567, 672, 688, 714

b-and&-off, 392

b-approx, 928–930, 933–936, 938, 973,

1002, 1019 b-approx-off, 938 b-approx-off1, 1024 b-approx-off2, 1152 b-approx-on, 1017 b-approx-on1, 1063 b-approx-x, 1019 b-approx-x-off, 1028 b-approx-x-on, 1117 b-buf, 152, 155, 156, 200, 456, 464,

466 b-buf*, 418, 419 b-buf-pwr*, 419 b-buf-pwr$netlist, 419, 477, 480, 570,

748, 755, 758, 776 b-buf-pwr$value, 419 b-buf-pwr$value-off, 419 b-buf-pwr&, 419, 476, 480, 570, 748,

755, 758, 776 b-buf-pwr&-off, 419 b-buf-x=x, 155 b-buf$netlist, 419, 429, 451, 455, 477,

480, 568, 569, 750, 752, 755, 758, 776

b-buf$value, 419 b-buf$value-off, 419 b-buf&, 419, 429, 450, 454, 455, 476,

480, 568, 569, 750–753, 755, 758, 776

b-buf&-off, 419 b-equv, 153–155, 162, 201, 463, 464,

466, 487 b-equv-monotone, 940 b-equv-monotone-off, 1052 b-equv-monotone-on, 1141 b-equv-preserves-good-s, 1004 b-equv-preserves-good-s-off, 1038 b-equv-preserves-good-s-on, 1127 b-equv3, 153–155, 201, 501 b-equv3-monotone, 940 b-equv3-monotone-off, 1051 b-equv3-monotone-on, 1141 b-equv3-preserves-good-s, 1004 b-equv3-preserves-good-s-off, 1038 b-equv3-preserves-good-s-on, 1127 b-equv3$netlist, 393, 502 b-equv3$value, 393 b-equv3$value-off, 393 b-equv3&, 393, 502 b-equv3&-off, 393 b-equv$netlist, 393, 464, 469, 489 b-equv$value, 393 b-equv$value-off, 393 b-equv&, 392, 393, 463, 469, 489 b-equv&-off, 392 b-gates, 155 b-if, 154, 155, 202, 520, 544 b-if-monotone, 941 b-if-monotone-off, 1051 b-if-monotone-on, 1141 b-if-preserves-good-s, 1004 b-if-preserves-good-s-off, 1038 b-if-preserves-good-s-on, 1127 b-if$netlist, 393, 438, 451, 522, 566 b-if$value, 393 b-if$value-off, 393 b-if&, 393, 439, 450, 522, 566 b-if&-off, 393 b-knownp, 928–930, 953 b-knownp-compound-recognizer, 928 b-knownp-compound-recognizer-of

f, 1057 b-knownp-compound-recognizer-on,

1146 b-knownp-off, 928 b-knownp-off1, 1024 b-knownp-off2, 1152 b-knownp-on, 1017 b-knownp-on1, 1063 b-nand, 153, 155, 156, 200, 457, 487,

490, 496, 498, 499, 501, 517, 520, 523, 559, 573–576, 674– 676

b-nand-monotone, 941 b-nand-monotone-off, 1051 b-nand-monotone-on, 1140 b-nand-preserves-good-s, 1004 b-nand-preserves-good-s-off, 1038 b-nand-preserves-good-s-on, 1127 b-nand3, 153, 155, 201, 487, 488,

490, 491, 496, 498, 517, 519, 520, 573–576, 674–676

b-nand3-monotone, 941 b-nand3-monotone-off, 1051 b-nand3-monotone-on, 1140 b-nand3-preserves-good-s, 1004 b-nand3-preserves-good-s-off, 1038 b-nand3-preserves-good-s-on, 1127 b-nand3$netlist, 394, 489, 492, 498,

499, 518, 522, 564, 578, 688, 714

b-nand3$value, 394 b-nand3$value-off, 394 b-nand3&, 394, 489, 492, 497, 499,

518, 522, 564, 578, 688, 713 b-nand3&-off, 394 b-nand4, 153, 155, 201, 487, 488,

490, 517, 579, 580, 674, 675 b-nand4-monotone, 941 b-nand4-monotone-off, 1051 b-nand4-monotone-on, 1140 b-nand4-preserves-good-s, 1005 b-nand4-preserves-good-s-off, 1037 b-nand4-preserves-good-s-on, 1127 b-nand4$netlist, 394, 489, 492, 518,

564, 582, 688 b-nand4$value, 394 b-nand4$value-off, 394 b-nand4&, 394, 489, 492, 518, 564,

582, 688 b-nand4&-off, 394 b-nand5, 153, 155, 201, 674, 675 b-nand5-monotone, 942 b-nand5-monotone-off, 1050 b-nand5-monotone-on, 1140 b-nand5-preserves-good-s, 1005 b-nand5-preserves-good-s-off, 1037 b-nand5-preserves-good-s-on, 1127 b-nand5$netlist, 394, 688, 714 b-nand5$value, 394 b-nand5$value-off, 394 b-nand5&, 394, 688, 713 b-nand5&-off, 394 b-nand6, 153, 155, 201, 674 b-nand6-monotone, 942 b-nand6-monotone-off, 1050 b-nand6-monotone-on, 1140 b-nand6-preserves-good-s, 1005 b-nand6-preserves-good-s-off, 1037 b-nand6-preserves-good-s-on, 1127 b-nand6$netlist, 395, 688 b-nand6$value, 395 b-nand6$value-off, 395 b-nand6&, 394, 395, 688 b-nand6&-off, 395 b-nand8, 153, 155, 201 b-nand8-monotone, 943 b-nand8-monotone-off, 1050 b-nand8-monotone-on, 1139 b-nand8-preserves-good-s, 1005 b-nand8-preserves-good-s-off, 1037 b-nand8-preserves-good-s-on, 1126 b-nand8$netlist, 395 b-nand8$value, 395 b-nand8$value-off, 395 b-nand8&, 395 b-nand8&-off, 395 b-nand$netlist, 393, 455, 489, 492,

498–500, 502, 518, 522, 524, 560, 564, 566, 578, 688, 714

b-nand$value, 393 b-nand$value-off, 394 b-nand&, 393, 454, 455, 489, 492,

497, 499, 500, 502, 518, 522, 524, 560, 564, 566, 578, 688, 713 b-nand&-off, 393 b-nbuf-monotone, 943 b-nbuf-monotone-off, 1050 b-nbuf-monotone-on, 1139 b-nbuf-preserves-good-s, 1005 b-nbuf-preserves-good-s-off, 1037 b-nbuf-preserves-good-s-on, 1126 b-nbuf$netlist, 395, 419, 498 b-nbuf$value, 395 b-nbuf$value-off, 395 b-nbuf&, 395, 419, 497 b-nbuf&-off, 395 b-nor, 154–156, 201, 457, 463, 486,

487, 490, 491, 520, 573–576, 579, 580

b-nor-monotone, 943 b-nor-monotone-off, 1050 b-nor-monotone-on, 1139 b-nor-preserves-good-s, 1005 b-nor-preserves-good-s-off, 1037 b-nor-preserves-good-s-on, 1126 b-nor3, 154, 155, 201, 463, 486, 579,

580 b-nor3-monotone, 943 b-nor3-monotone-off, 1049 b-nor3-monotone-on, 1139 b-nor3-preserves-good-s, 1005 b-nor3-preserves-good-s-off, 1037 b-nor3-preserves-good-s-on, 1126 b-nor3$netlist, 396, 461, 464, 487,

582, 714 b-nor3$value, 396 b-nor3$value-off, 396 b-nor3&, 396, 460, 463, 487, 582,

714 b-nor3&-off, 396 b-nor4, 154, 155, 201, 579, 580 b-nor4-monotone, 943 b-nor4-monotone-off, 1049 b-nor4-monotone-on, 1138 b-nor4-preserves-good-s, 1005 b-nor4-preserves-good-s-off, 1037 b-nor4-preserves-good-s-on, 1126 b-nor4$netlist, 396, 582, 714 b-nor4$value, 396 b-nor4$value-off, 396 b-nor4&, 396, 582, 714 b-nor4&-off, 396 b-nor5, 154, 155, 202 b-nor5-monotone, 944 b-nor5-monotone-off, 1049 b-nor5-monotone-on, 1138 b-nor5-preserves-good-s, 1005 b-nor5-preserves-good-s-off, 1037 b-nor5-preserves-good-s-on, 1126 b-nor5$netlist, 396, 714 b-nor5$value, 396 b-nor5$value-off, 397 b-nor5&, 396, 714 b-nor5&-off, 396 b-nor6, 154, 155, 202 b-nor6-monotone, 944 b-nor6-monotone-off, 1049 b-nor6-monotone-on, 1138 b-nor6-preserves-good-s, 1005 b-nor6-preserves-good-s-off, 1037 b-nor6-preserves-good-s-on, 1126 b-nor6$netlist, 397, 714 b-nor6$value, 397 b-nor6$value-off, 397 b-nor6&, 397, 714 b-nor6&-off, 397 b-nor8, 154, 155, 202 b-nor8-monotone, 945 b-nor8-monotone-off, 1049 b-nor8-monotone-on, 1138 b-nor8-preserves-good-s, 1005 b-nor8-preserves-good-s-off, 1037 b-nor8-preserves-good-s-on, 1126 b-nor8$netlist, 397, 714 b-nor8$value, 397 b-nor8$value-off, 397 b-nor8&, 397, 714 b-nor8&-off, 397 b-nor$netlist, 395, 455, 464, 487, 489,

492, 522, 565, 578, 582, 714 b-nor$value, 396 b-nor$value-off, 396 b-nor&, 395, 396, 454, 455, 463, 487,

489, 492, 522, 565, 578, 582, 713

b-nor&-off, 395

b-not, 153, 155, 156, 159, 162, 163, 200, 444, 456, 463, 487, 488, 490, 491, 496, 501, 517, 519, 520, 523, 559, 573–576, 579, 674–676, 1103

b-not-b4ip-monotone, 945 b-not-b4ip-monotone-off, 1048 b-not-b4ip-monotone-on, 1137 b-not-b4ip-preserves-good-s, 1005 b-not-b4ip-preserves-good-s-off, 1037 b-not-b4ip-preserves-good-s-on, 1126 b-not-b4ip$netlist, 398, 419 b-not-b4ip$value, 398 b-not-b4ip$value-off, 398 b-not-b4ip&, 397, 398, 419 b-not-b4ip&-off, 397 b-not-ivap-monotone, 945 b-not-ivap-monotone-off, 1048 b-not-ivap-monotone-on, 1137 b-not-ivap-preserves-good-s, 1005 b-not-ivap-preserves-good-s-off, 1036 b-not-ivap-preserves-good-s-on, 1126 b-not-ivap$netlist, 398 b-not-ivap$value, 398 b-not-ivap$value-off, 398 b-not-ivap&, 398 b-not-ivap&-off, 398 b-not-monotone, 945 b-not-monotone-off, 1048 b-not-monotone-on, 1138 b-not-preserves-good-s, 1005 b-not-preserves-good-s-off, 1037 b-not-preserves-good-s-on, 1126 b-not$netlist, 397, 419, 445, 455, 458,

464, 475, 489, 492, 502, 518, 522, 524, 560, 564–567, 578, 582, 672, 688, 714, 721, 776

b-not$value, 397 b-not$value-off, 397 b-not&, 397, 419, 445, 454, 458, 463,

474, 489, 492, 502, 518, 522, 524, 560, 564–567, 578, 582, 672, 688, 713, 721, 776

b-not&-off, 397 b-or, 153, 155, 156, 162, 201, 438,

446, 457, 465, 466, 496, 523, 561, 674, 675, 915

b-or-monotone, 945 b-or-monotone-off, 1048 b-or-monotone-on, 1137 b-or-preserves-good-s, 1005 b-or-preserves-good-s-off, 1036 b-or-preserves-good-s-on, 1126 b-or3, 153, 155, 201, 443, 519, 520,

523 b-or3-monotone, 946 b-or3-monotone-off, 1047 b-or3-monotone-on, 1137 b-or3-preserves-good-s, 1005 b-or3-preserves-good-s-off, 1036 b-or3-preserves-good-s-on, 1126 b-or3$netlist, 398, 522, 524, 714 b-or3$value, 398 b-or3$value-off, 399 b-or3&, 398, 522, 524, 713 b-or3&-off, 398 b-or4, 153, 155, 201 b-or4-monotone, 946 b-or4-monotone-off, 1047 b-or4-monotone-on, 1137 b-or4-preserves-good-s, 1006 b-or4-preserves-good-s-off, 1036 b-or4-preserves-good-s-on, 1125 b-or4$netlist, 399, 672, 714 b-or4$value, 399 b-or4$value-as-f$set-some-fla

gs, 592 gs-off, 592

b-or4$value-off, 399 b-or4&, 399, 592, 672, 713 b-or4&-off, 399 b-or$netlist, 398, 430, 438, 455, 498,

524, 563, 672, 688, 714 b-or$value, 398 b-or$value-off, 398 b-or&, 398, 430, 438, 454, 455, 471,

497, 524, 562, 672, 688, 713 b-or&-off, 398 b-reg, 759, 761–763 b-reg-off, 760 b-store-resultp, 561–563 b-store-resultp*, 562, 563 b-store-resultp-off, 561 b-store-resultp=store-resultp, 563 b-store-resultp=store-resultp$

help, 563 b-store-resultp$netlist, 563, 672 b-store-resultp$value, 563 b-store-resultp&, 562, 563, 672 b-store-resultp&-off, 562 b-to-nat, 1094, 1099, 1100, 1102–

1104, 1192, 1194, 1195, 1206, 1207, 1211, 1212, 1214, 1218, 1219

b-to-nat-leq, 1102 b-to-nat-leq-off, 1111 b-to-nat-off, 1115 b-xor, 153–156, 162, 201, 443, 446,

463, 490, 491, 519, 520, 561 b-xor-monotone, 946 b-xor-monotone-off, 1047 b-xor-monotone-on, 1136 b-xor-preserves-good-s, 1006 b-xor-preserves-good-s-off, 1036 b-xor-preserves-good-s-on, 1125 b-xor3, 153–155, 162, 201, 438 b-xor3-monotone, 946 b-xor3-monotone-off, 1047 b-xor3-monotone-on, 1136 b-xor3-preserves-good-s, 1006 b-xor3-preserves-good-s-off, 1036 b-xor3-preserves-good-s-on, 1125 b-xor3$netlist, 399 b-xor3$value, 399 b-xor3$value-off, 399 b-xor3&, 399 b-xor3&-off, 399 b-xor$netlist, 399, 431, 437, 464, 492,

522, 563 b-xor$value, 399 b-xor$value-off, 399 b-xor&, 399, 431, 432, 437, 463, 492,

522, 562 b-xor&-off, 399 bad-lsi-name-chars, 285, 286 bad-lsi-name-chars-off, 285 bad-names, 276, 277 bad-names-off, 277 bagdiff, 2–4, 8, 10–12, 18–20, 29,

44–49, 55, 57–63, 67, 78, 79, 81

bagdiff-delete, 4 bagdiff-delete-off, 130 bagdiff-delete-off1, 1181 bagdiff-delete-on, 1093 bagdiff-off, 131 bagdiff-off1, 1182 bagdiff-on, 1094 bagint, 3–5, 10–12, 18–20, 28, 29,

44, 45, 47–49, 55, 56, 59– 62, 67–69, 79, 80, 82

bagint-off, 131 bagint-off1, 1182 bagint-on, 1094 bagint-singleton, 80 bagint-singleton-off, 104 bagint-singleton-off1, 1156 bagint-singleton-on, 1067 bags, 5 boolfix, 150, 152, 157, 161, 162, 444 boolfix-car-x=x, 152 boolp, 149–152, 155, 161, 165, 175–

182, 184–192, 194, 196, 200– 204, 267, 386, 438, 442–444, 464, 467, 469, 473–475, 483– 485, 487, 490, 493, 499–501, 510, 511, 519, 522, 523, 525, 526, 531–536, 548, 561, 563, 566, 568, 584, 591, 592, 678, 701, 702, 719, 734, 739, 741, 748, 810, 814, 816, 818, 819, 821, 823, 825, 827, 830, 832, 833, 835, 837, 839, 842, 843, 846, 847, 849, 852, 854, 856, 858, 860, 862, 864, 866, 867, 870, 871, 875, 876, 878, 880, 882, 883, 885, 886, 888–890, 892, 894, 896, 898, 900, 903, 905, 908, 910, 912, 917, 918, 1099, 1186, 1188, 1190

boolp-a-immediate-p, 548

boolp-b-gates, 155 boolp-b-gates-off, 155 boolp-bvp-core-alu, 532 boolp-bvp-cvzbv, 483 boolp-c-flag, 591 boolp-c-flag-update-flags, 548 boolp-c-v-alu, 484 boolp-car-f$tv-alu-help, 510 boolp-car-tv-dec-pass-ng, 467 boolp-car-x, 152 boolp-flag-extracters, 1186 boolp-if*, 165 boolp-implies-not-equal-z, 150 boolp-implies-not-equal-z-off, 150 boolp-lemmas, 150 boolp-list-ok, 367–369 boolp-list-ok-off, 367 boolp-n, 483 boolp-nth, 152 boolp-off, 149 boolp-store-result-p, 548 boolp-v-negp, 161 boolp-v-v-alu, 484 boolp-zb-v-alu, 484 boundp, 247, 248, 295, 297, 299, 300,

307, 313, 327, 332, 336, 337, 345, 375, 384, 385

boundp-off, 248 boundp-off1, 378 boundp-on, 378 breadth-tree, 191, 192 bridge-to-subbagp-implies-plus-t

ree-greatereqp, 8 ree-greatereqp-off, 8

btr-or-is-v-nzerop, 457 btr-or-nor, 456, 457 btr-or-nor-off, 457 bv, 482, 483, 485, 486, 532, 536, 545,

733, 761, 763, 779, 781, 782, 792, 794, 801, 804, 811, 813, 834, 838, 850, 851, 857, 859, 869, 873, 897, 899, 901, 902, 904, 907–909, 911, 913, 1188, 1189, 1216, 1218, 1219

bv-adder, 440, 442, 443 bv-adder*, 440, 441 bv-adder*-off, 441 bv-adder*$destructure, 441 bv-adder*$destructure-off, 441 bv-adder-body, 440–443 bv-adder-body-off, 440 bv-adder-body-special-case$val

ue, 442 ue-off, 443

bv-adder-body$induction, 441, 442 bv-adder-body$value, 442 bv-adder-body$value-off, 443 bv-adder$netlist, 441 bv-adder$netlist-off, 441 bv-adder$unbound-in-body-carry, 442

-off, 442 bv-adder$unbound-in-body-sum, 442 bv-adder$unbound-in-body-sum-o

ff, 442 bv-adder$value, 443 bv-adder$value-off, 443 bv-adder&, 441, 443 bv-adder&-off, 441 bv-as-subrange, 779 bv-as-subrange-off, 779 bv-cvzbv, 1216 bv-off, 482 bv-to-int, 549 bv-v-alu, 1216 bv-v-alu-alu-inc-alu-dec, 486 bv-v-alu-as-integer, 1219 bv-v-alu-as-natural, 1218 bv2p, 151, 161, 163–165, 505, 506,

532–536, 1100, 1102–1106, 1186, 1189, 1191–1196, 1205– 1207, 1211–1213, 1217–1219

bvp, 150–152, 157–165, 169, 170, 172– 176, 178–180, 182, 184, 185, 187–189, 202–204, 442–444, 457, 459, 462, 464, 465, 467, 469, 475, 483–486, 494, 497, 501, 505–508, 511, 526, 527, 529, 531, 532, 535, 536, 548, 562–566, 576, 578, 587, 591, 592, 603, 604, 669, 670, 673, 678, 689, 701–703, 717–719, 734, 735, 739, 741, 745, 746, 748, 810, 814, 816–819, 821, 823, 825, 827, 829, 831–833, 835, 837, 839, 841, 843, 845, 847, 849, 852, 854, 856, 858, 860, 862–867, 869–871, 874– 876, 878, 880–883, 885–887, 889–892, 894, 896, 898, 900, 903, 905, 908, 910, 912, 915– 918, 926, 953, 954, 971, 993, 1095, 1096, 1098–1102, 1104– 1106, 1186, 1188, 1190, 1197, 1200, 1204, 1205, 1208–1211, 1214–1216, 1218, 1219

bvp-a-immediate, 548 bvp-append, 151 bvp-bv-v-alu, 485 bvp-cddr-f$tv-alu-help, 511 bvp-cddr-tv-alu-help, 505 bvp-cdr, 1095 bvp-cdr-off, 1115 bvp-cdr-tv-dec-pass, 465 bvp-cdr-tv-dec-pass-ng, 467 bvp-cons, 151 bvp-cv-vectors, 669 bvp-cv-vectors-off, 670 bvp-cvzbv, 483 bvp-f$tv-alu-help, 511 bvp-firstn, 151 bvp-if, 151 bvp-if*, 151 bvp-implies-v-knownp, 953 bvp-implies-v-knownp-off, 994 bvp-implies-v-knownp-off1, 1148 bvp-implies-v-knownp-on, 1059 bvp-int-to-v, 1197 bvp-ir-accessors, 548 bvp-is-properp, 151 bvp-length, 151, 152, 465, 467, 505 bvp-length-alu-dec-op, 486 bvp-length-alu-inc-op, 486 bvp-length-bv, 485 bvp-length-cdr, 152 bvp-length-cv, 703 bvp-length-decode-5, 576 bvp-length-encode-32, 586 bvp-length-next-cntl-state, 717 bvp-length-next-state, 688 bvp-length-off, 152 bvp-length-read-regs-32, 735 bvp-length-restn, 152 bvp-length-state-vectors, 603 bvp-length-state-vectors-off, 604 bvp-length-tv-alu-help, 505 bvp-length-tv-dec-pass, 465 bvp-length-tv-dec-pass-ng, 467 bvp-length-update-flags, 548 bvp-length-v-inc-v-dec, 163 bvp-make-list, 151 bvp-mpg, 494 bvp-nat-to-v, 160 bvp-nlistp, 151 bvp-nthcdr, 151 bvp-off, 151 bvp-off1, 972 bvp-off2, 1061 bvp-on, 995 bvp-on1, 1150 bvp-read-fn, 874 bvp-read-mem, 173 bvp-read-mem-32, 173 bvp-read-mem1, 173 bvp-restn, 151 bvp-rev1, 953 bvp-rev1-off, 1042 bvp-rev1-on, 1131 bvp-reverse, 953 bvp-reverse-off, 993 bvp-reverse-off1, 1148 bvp-reverse-on, 1059 bvp-shift-or-buf, 526 bvp-sign-extend, 162 bvp-subrange, 165 bvp-sum, 443 bvp-tv-alu-help, 505 bvp-tv-dec-pass, 465 bvp-tv-dec-pass-ng, 467 bvp-v-adder, 163 bvp-v-alu, 485 bvp-v-alu-1, 485 bvp-v-and, 157 bvp-v-asr, 157 bvp-v-buf, 157 bvp-v-fourfix, 165 bvp-v-if, 158 bvp-v-lsr, 157 bvp-v-not, 157 bvp-v-or, 157 bvp-v-ror, 158 bvp-v-shift-right, 157 bvp-v-threefix, 164 bvp-v-xor, 157

c, 482–484, 532, 544, 742–744, 1216,

1217 c-cvzbv, 1216 c-flag, 543–545, 548, 559, 591, 608,

610, 612, 614, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 664, 666, 668, 670, 673, 716, 744, 834, 838, 850, 851, 857, 859, 868, 872, 897, 899, 901, 904, 906– 909, 911, 913, 1186, 1189– 1196, 1200–1216

c-flag-off, 543 c-off, 482 c-set, 542, 544, 591, 743, 744, 1190,

1192–1196, 1214 c-set-off, 543 c-v-alu, 1217 c10-int, 549 c10-tf, 549 cadr-eval$-list, 9 cadr-eval$-list-off, 9 cadr-map-up, 1022 cadr-map-up-off, 1027 cadr-map-up-on, 1116 cadr-tv-adder-as-g, 448 cadr-tv-adder-as-g-off, 448 cancel-constants-equal, 95 cancel-constants-equal-lemma, 95 cancel-constants-equal-lemma-of

f, 100

f1, 1153 cancel-constants-equal-lemma-on, 1063 cancel-constants-equal-off, 100 cancel-constants-equal-off1, 1153 cancel-constants-equal-on, 1063 cancel-constants-ilessp, 96 cancel-constants-ilessp-lemma-1, 95

-off, 100 -off1, 1152 -on, 1063

cancel-constants-ilessp-lemma-2, 95 -off, 100 -off1, 1152 -on, 1063

cancel-constants-ilessp-off, 100 cancel-constants-ilessp-off1, 1152 cancel-constants-ilessp-on, 1063 cancel-difference-plus, 10, 11 cancel-difference-plus-off, 128 cancel-difference-plus-off1, 1179 cancel-difference-plus-on, 1091 cancel-equal-plus, 9, 10 cancel-equal-plus-off, 128 cancel-equal-plus-off1, 1180 cancel-equal-plus-on, 1092 cancel-equal-times, 19, 21 cancel-equal-times-off, 125 cancel-equal-times-off1, 1176 cancel-equal-times-on, 1088 cancel-equal-times-preserves-ineq

uality, 20

uality-bridge, 20 uality-bridge-off, 21 uality-off, 20

cancel-factors-0, 83, 84 cancel-factors-0-off, 103 cancel-factors-0-off1, 1155 cancel-factors-0-on, 1066 cancel-factors-ilessp-0, 84, 85 cancel-factors-ilessp-0-off, 102 cancel-factors-ilessp-0-off1, 1154 cancel-factors-ilessp-0-on, 1065 cancel-ineg, 41, 42 cancel-ineg-aux, 40–42 cancel-ineg-aux-off, 113 cancel-ineg-aux-off1, 1165 cancel-ineg-aux-on, 1077 cancel-ineg-off, 113 cancel-ineg-off1, 1165 cancel-ineg-on, 1077 cancel-ineg-terms-from-equality, 88,

91 -cancel-ineg-terms-from-equality-

expanded, 91 -cancel-ineg-terms-from-equality-

expanded-off, 101 -cancel-ineg-terms-from-equality-

expanded-off1, 1153 -cancel-ineg-terms-from-equality-

expanded-on, 1064 -expanded, 89, 91, 92 -expanded-off, 91 -off, 101 -off1, 1154 -on, 1065

cancel-ineg-terms-from-inequalit y, 92, 94 y-cancel-ineg-terms-from-inequality-

expanded, 94 y-cancel-ineg-terms-from-inequality-

expanded-off, 100 y-cancel-ineg-terms-from-inequality-

expanded-off1, 1153 y-cancel-ineg-terms-from-inequality-

expanded-on, 1064 y-expanded, 93, 94 y-expanded-off, 94 y-off, 101 y-off1, 1153 y-on, 1064

cancel-iplus, 43, 45, 47 cancel-iplus-ilessp, 48, 49 cancel-iplus-ilessp-1, 47, 48 cancel-iplus-ilessp-1-off, 111 cancel-iplus-ilessp-1-off1, 1163 cancel-iplus-ilessp-1-on, 1075 cancel-iplus-ilessp-off, 111 cancel-iplus-ilessp-off1, 1163 cancel-iplus-ilessp-on, 1074 cancel-iplus-off, 46 cancel-itimes, 55, 60 cancel-itimes-factors, 68, 78 cancel-itimes-factors-expanded, 78, 79 cancel-itimes-factors-expanded-

cancel-itimes-factors, 78 cancel-itimes-factors-off, 105 cancel-itimes-factors-off1, 1157 cancel-itimes-factors-on, 1068 off, 78

cancel-itimes-factors-off, 105 cancel-itimes-factors-off1, 1157 cancel-itimes-factors-on, 1068 cancel-itimes-ilessp, 61, 63 cancel-itimes-ilessp-factors, 79, 83 cancel-itimes-ilessp-factors-of

f, 104 f1, 1156

cancel-itimes-ilessp-factors-on, 1067 cancel-itimes-ilessp-off, 106 cancel-itimes-ilessp-off1, 1158 cancel-itimes-ilessp-on, 1069 cancel-itimes-off, 106 cancel-itimes-off1, 1158 cancel-itimes-on, 1070 cancel-lessp-plus, 12 cancel-lessp-plus-off, 128 cancel-lessp-plus-off1, 1179 cancel-lessp-plus-on, 1091 cancel-lessp-times, 18, 19 cancel-lessp-times-off, 125 cancel-lessp-times-off1, 1176 cancel-lessp-times-on, 1088 cancel-quotient-times, 28, 29 cancel-quotient-times-off, 120 cancel-quotient-times-off1, 1172 cancel-quotient-times-on, 1083 car-cdr-if-cons, 133 car-firstn, 140 car-nat-to-v-0-is-f, 160 car-tv-adder-as-p, 448 car-tv-adder-as-p-off, 448 carry-flag-nat-interpretation-f

or-sub, 1195 carry-in-help, 496–498, 532–536, 608,

610, 612, 614, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 664, 666, 668, 838, 850, 851, 859, 868, 872, 901, 904, 906, 909, 911, 913

carry-in-help*, 497, 498 carry-in-help-if-op-code, 498 carry-in-help-off, 496 carry-in-help-zero, 498 carry-in-help-zero-off, 498 carry-in-help$netlist, 498, 714 carry-in-help$value, 498 carry-in-help$value-off, 498 carry-in-help$value-zero, 498 carry-in-help$value-zero-off, 498 carry-in-help&, 497, 498, 714 carry-in-help&-off, 497 carry-out-help, 517, 519, 530 carry-out-help*, 517, 518 carry-out-help-congruence, 519 carry-out-help$netlist, 518, 540 carry-out-help$value, 518 carry-out-help$value-off, 519 carry-out-help$value-zero, 519 carry-out-help$value-zero-off, 519 carry-out-help&, 518, 519, 540 carry-out-help&-off, 518 cases-on-a-4-bit-bvp, 535 cc-cc, 1187, 1190–1196, 1214 cc-cs, 1187, 1190–1192, 1194–1196,

1215 cc-eq, 1187, 1188, 1190, 1191, 1194,

1196, 1201, 1202, 1204, 1209, 1210, 1214

cc-f, 1187, 1189 cc-ge, 1187, 1203, 1205–1207, 1209,

1210, 1212, 1213, 1215 cc-gt, 1187, 1203–1207, 1209, 1211–

1213, 1216 cc-hi, 1187, 1195 cc-le, 1187, 1203–1205, 1207–1209,

1211–1213, 1216 cc-ls, 1187, 1195, 1196 cc-lt, 1187, 1203, 1205–1208, 1210,

1212, 1213, 1215 cc-mi, 1187, 1189, 1190, 1202, 1215 cc-ne, 1187–1189, 1191, 1194, 1196,

1201, 1204, 1209, 1210, 1214 cc-pl, 1187, 1189, 1190, 1202, 1215 cc-t, 1187, 1189 cc-vc, 1187, 1200, 1204, 1205, 1207,

1208, 1210–1212, 1216 cc-vs, 1187, 1201, 1204, 1206–1208,

1210, 1211, 1213, 1216 cddr-f$tv-alu-help-length, 510 cddr-tv-adder-as-sum, 448 cddr-tv-adder-as-sum-off, 448 cddr-tv-alu-help-length, 505 cdr-cdr-sub1-sub1-induction, 168 cdr-nthcdr, 143 cdr-nthcdr-off, 143 cdr-restn, 141 cdr-restn-off, 141 cdr-tv-dec-pass-length, 465 check-cv$netlist, 714 check-dec-pass$netlist, 475 check-extend-immediate$netlist, 748 check-fast-zero$netlist, 461 check-flags$netlist, 744 check-next-cntl-state$netlist, 721 check-regfile$netlist, 739 check-tv-dec-pass-ng$netlist, 474 chip*, 790, 791 chip*-off, 790 chip*$destructure-off, 790 chip-module*, 775, 776 chip-module*-off, 775 chip-module*$destructure-off, 775 chip-module$netlist, 776, 791, 1026 chip-module$state, 780 chip-module$value, 783 chip-module&, 775, 780, 783, 791 chip-module&-off, 776 chip-system*, 799, 800 chip-system*-off, 799 chip-system*$destructure-off, 799 chip-system-input-invariant, 807–809 chip-system-invariant, 800, 801, 805,

807, 809, 919, 1012, 1014 chip-system-invariant-unknown-st

ate, 1012 ate-off, 1032 ate-on, 1121

chip-system-operating-inputs-p, 808, 809, 925, 927, 928, 1012, 1014, 1021, 1023, 1025

chip-system-operating-inputs-p-off, 808 reset-sequence, 1012 reset-sequence-off, 1031 reset-sequence-on, 1120

chip-system=fm9001-interpreter, 925 chip-system=fm9001-interpreter$

after-reset, 1024 after-reset-off, 1027 after-reset-on, 1116

chip-system=fm9001$step, 809 chip-system=fm9001$step-off, 809 chip-system=run-fm9001, 809 chip-system=run-fm9001$inducti

on, 809 chip-system$netlist, 800, 928, 1014 chip-system$state, 805 chip-system$state-help, 800 chip-system$state-help-off, 805 chip-system$state-off, 806 chip-system&, 799, 800, 805, 809,

925, 927, 1014, 1021, 1022, 1024

chip-system&-off, 800 chip-well-formed, 1026 chip-well-formed-after-indexed-

names-removed, 1026 names-removed-off, 1026 names-removed-on, 1115

chip-well-formed-off, 1026 chip-well-formed-on, 1116 chip-well-formed-simple, 1026 chip-well-formed-simple-off, 1026 chip-well-formed-simple-on, 1115 chip$netlist, 791, 800, 1016, 1020,

1021, 1024, 1026 chip$state, 791 chip$value, 794 chip&, 790, 791, 794, 799 chip&-off, 791 cntl-state, 760–764 cntl-state-off, 760 collect-breadth-tree, 192 collect-delays, 334, 346 collect-delays-0, 333, 334 collect-delays-0-off, 334 collect-delays-off, 334 collect-drives, 317, 346 collect-drives-0, 316, 317 collect-drives-0-off, 317 collect-drives-off, 317 collect-drives-simple, 272, 274 collect-drives-simple-off, 272 collect-in-types, 304, 350 collect-in-types-off, 304 collect-loadings, 313, 347 collect-loadings-off, 313 collect-loadings-simple, 271, 274 collect-loadings-simple-off, 272 collect-min-args, 313–316 collect-min-args-off, 314 collect-module-data, 349, 351 collect-module-data-off, 351 collect-module-errors, 349, 350 collect-module-errors-off, 349 collect-module-prop, 346, 348 collect-module-prop-off, 347 collect-module-props, 347, 348, 350 collect-module-props-off, 348 collect-net-errors, 251, 353 collect-net-errors-off, 251 collect-occurrence-data, 343, 344, 346 collect-occurrence-data-off, 344 collect-out-depends, 335, 347 collect-out-depends-errors, 335 collect-out-depends-errors-off, 335 collect-out-depends-off, 335 collect-out-type, 304, 305 collect-out-type-off, 305 collect-out-types, 305, 350 collect-out-types-off, 305 collect-primitives, 435, 436 collect-state-types, 336, 347 collect-state-types-off, 336 collect-states, 237, 238, 240, 241, 266 collect-synonyms, 339 collect-synonyms-off, 339 collect-tri-state-data, 339, 347 collect-tri-state-data-off, 339 collect-types, 258, 260–262 collect-types-off, 258 collect-value, 166–169, 238–243, 253,

256, 301, 334, 335, 427, 429, 430, 432, 433, 435, 442, 443, 451, 452, 473, 478, 481, 516, 523, 751, 753, 755, 758, 759, 800, 999–1004

collect-value-append, 167 collect-value-append-pairlist-w

hen-disjoint, 167 hen-subset, 167

collect-value-args-pairlist-arg

s, 168 collect-value-cons, 168 collect-value-disjoint-pairlist, 167 collect-value-firstn, 167 collect-value-litatom-indices-spee

dup, 167 collect-value-make-list, 168 collect-value-nlistp, 167 collect-value-off, 166 collect-value-or-unknown, 295, 336 collect-value-or-unknown-off, 295 collect-value-restn, 168 collect-value-splitting-crock, 168 collect-value-splitting-crock-he

lper, 168 collect-value-subrange-args-pai

rlist-args, 169 collect-value-v-shift-right, 523 collect-value2, 297, 337 collect-value2-off, 297 common-divisor-divides-gcd, 34 common-divisor-divides-gcd-off, 117 common-divisor-divides-gcd-off1, 1168 common-divisor-divides-gcd-on, 1080 commutativity-of-gcd, 33 commutativity-of-gcd-off, 118 commutativity-of-gcd-off1, 1169 commutativity-of-gcd-on, 1081 commutativity-of-iplus, 39 commutativity-of-iplus-off, 114 commutativity-of-iplus-off1, 1166 commutativity-of-iplus-on, 1077 commutativity-of-iplus-on1, 1186 commutativity-of-itimes, 49 commutativity-of-itimes-off, 111 commutativity-of-itimes-off1, 1163 commutativity-of-itimes-on, 1074 commutativity-of-plus, 5 commutativity-of-plus-off, 130 commutativity-of-plus-off1, 1181 commutativity-of-plus-on, 1093 commutativity-of-times, 13 commutativity-of-times-off, 127 commutativity-of-times-off1, 1178 commutativity-of-times-on, 1090 commutativity2-of-gcd, 34 commutativity2-of-gcd-off, 116 commutativity2-of-gcd-off1, 1168 commutativity2-of-gcd-on, 1080 commutativity2-of-gcd-zero-case, 34

-off, 116 -off1, 1168 -on, 1080

commutativity2-of-iplus, 39 commutativity2-of-iplus-off, 114 commutativity2-of-iplus-off1, 1166 commutativity2-of-iplus-on, 1077 commutativity2-of-itimes, 50 commutativity2-of-itimes-off, 110 commutativity2-of-itimes-off1, 1162 commutativity2-of-itimes-on, 1074 commutativity2-of-plus, 5 commutativity2-of-plus-off, 129 commutativity2-of-plus-off1, 1181 commutativity2-of-plus-on, 1093 commutativity2-of-times, 13 commutativity2-of-times-off, 127 commutativity2-of-times-off1, 1178 commutativity2-of-times-on, 1090 compile-uncompiled-defns, 1011 compile-uncompiled-defns-off, 1032 compile-uncompiled-defns-on, 1011 compile-uncompiled-defns-on1, 1026 compile-uncompiled-defns-on2, 1122 compose-io-types, 304, 344 compose-io-types-off, 304 compose-occurrence-data, 346 compose-occurrence-data-off, 346 compose-tri-state-data, 339, 344 compose-tri-state-data-off, 339 compose-type, 303, 304 compose-type-off, 304 composed-io-types, 344, 345 composed-io-types-off, 344 composed-loadings-drives-delays, 344,

345 -off, 345

composed-occurrence-data, 345, 346 composed-occurrence-data-off, 345 composed-type-maps, 304 composed-type-maps-off, 304 composite-occ-body-syntax-error

s, 280, 281, 291

s-off, 281 condition-code-theory, 1187 conjoin-inequalities-with-0, 84, 85 conjoin-inequalities-with-0-eli

minator, 85 minator-off, 102 minator-off1, 1154 minator-on, 1065

conjoin-inequalities-with-0-off, 102

1, 1154 conjoin-inequalities-with-0-on, 1066 constant-ram, 171, 172, 174, 176–

182, 185–191, 975, 993, 1007 constant-ram-off, 171 control-let*, 672 control-let$netlist, 672, 721 control-let$value, 673 control-let$value-off, 673 control-let&, 672, 673, 721 control-let&-off, 672 control-state-accessor-theory, 606 core-alu, 530–536, 838, 850, 851, 859,

869, 873, 901, 902, 904, 907, 909, 911, 913

core-alu*, 537–540 core-alu*-off, 540 core-alu*$destructure, 538 core-alu*$destructure-off, 540 core-alu-is-v-alu, 536 core-alu-off, 531 core-alu-works-as-dec-b, 536 core-alu-works-as-inc-b, 536 core-alu-works-for-all-normal-c

ases, 532 ases-off, 535 ases$crock, 532 ases$crock-off, 532 core-alu-works-for-zero-case, 536 core-alu$netlist, 540, 776 core-alu$value, 541 core-alu$value-off, 541 core-alu&, 540, 541, 776 core-alu&-off, 540 correctness-of-cancel-difference

-plus, 11 -plus-off, 128 -plus-off1, 1096 -plus-on, 1091

correctness-of-cancel-equal-plu s, 10 s-off, 128 s-off1, 1096 s-on, 1092

correctness-of-cancel-equal-time s, 21 s-off, 125 s-off1, 1096 s-on, 1088

correctness-of-cancel-factors-0, 84 -off, 102 -off1, 1095 -on, 1066

correctness-of-cancel-factors-i lessp-0, 85 lessp-0-off, 102 lessp-0-off1, 1096 lessp-0-on, 1065

correctness-of-cancel-ineg, 42 correctness-of-cancel-ineg-aux, 42 correctness-of-cancel-ineg-aux-

off, 42 correctness-of-cancel-ineg-off, 113 correctness-of-cancel-ineg-off1, 1095 correctness-of-cancel-ineg-on, 1076 correctness-of-cancel-ineg-term

s-from-equality, 92 s-from-equality-off, 101 s-from-equality-off1, 1096 s-from-equality-on, 1064 s-from-inequality, 94 s-from-inequality-off, 100 s-from-inequality-off1, 1096 s-from-inequality-on, 1064

correctness-of-cancel-iplus, 47 correctness-of-cancel-iplus-ile

ssp, 49 ssp-lemma, 48 ssp-lemma-off, 64 ssp-off, 111 ssp-off1, 1095 ssp-on, 1074

correctness-of-cancel-iplus-off, 112

1, 1095 correctness-of-cancel-iplus-on, 1075 correctness-of-cancel-itimes, 60 correctness-of-cancel-itimes-fa

ctors, 79 ctors-off, 104 ctors-off1, 1095

ctors-on, 1068 correctness-of-cancel-itimes-ha

ck-1, 58 ck-1-off, 64 ck-2, 59 ck-2-off, 65 ck-3, 59 ck-3-lemma, 59 ck-3-lemma-off, 60 ck-3-lemma-off1, 65 ck-3-off, 65

correctness-of-cancel-itimes-ile ssp, 63 ssp-factors, 83 ssp-factors-off, 103 ssp-factors-off1, 1095 ssp-factors-on, 1066 ssp-hack-1, 61 ssp-hack-1-off, 66 ssp-hack-2, 62 ssp-hack-2-lemma, 62 ssp-hack-2-lemma-off, 62 ssp-hack-2-off, 66 ssp-hack-3, 62 ssp-hack-3-lemma-1, 62 ssp-hack-3-lemma-1-off, 66 ssp-hack-3-lemma-2, 62 ssp-hack-3-lemma-2-off, 66 ssp-hack-3-off, 66 ssp-hack-4, 62 ssp-hack-4-off, 66 ssp-off, 87 ssp-off1, 1095

correctness-of-cancel-itimes-of f, 87 f1, 1095

correctness-of-cancel-lessp-plu s, 12 s-off, 127 s-off1, 1096 s-on, 1091

correctness-of-cancel-lessp-time s, 19 s-off, 125 s-off1, 1096 s-on, 1088

correctness-of-cancel-quotient-ti mes, 29 mes-off, 120 mes-off1, 1096 mes-on, 1083

count-primitives, 436, 437 count-primitives-off, 437 cv, 703, 716 cv*, 704, 713, 714 cv-destructure-theory, 669 cv-hyps, 592, 607, 609, 611, 613, 615,

617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 666, 668–670, 722–732, 814, 816, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 852, 854, 856, 858, 860, 862, 863, 865, 867, 869, 871, 875, 876, 878, 879, 881, 883, 885–887, 889–891, 894, 896, 898, 899, 902, 903, 905, 908, 910, 912

cv-off, 696 cv-theory, 669 cv$netlist, 714, 721 cv$value, 714 cv$value-off, 716 cv&, 713, 714, 721 cv&-off, 714 cv decode, 615, 616, 669, 724, 824,

827 cv decode-off, 615 cv decode$destructure, 615 cv decode$destructure-off, 616 cv fetch0, 607, 608, 669, 724, 725,

729–732, 815, 816, 818, 829, 835, 863, 869, 873, 888, 889, 891, 894, 898, 899, 907, 910, 912, 913

cv fetch0-off, 607 cv fetch0$destructure, 607 cv fetch0$destructure-off, 608 cv fetch1, 609, 610, 669, 670, 723,

815, 817, 819, 820, 888, 890– 892, 917, 927, 1013

cv fetch1-off, 609 cv fetch1$destructure, 609 cv fetch1$destructure-off, 610 cv fetch1$rw-doan-matta, 670 cv fetch2, 611, 612, 669, 723, 820,

822 cv fetch2-off, 611 cv fetch2$destructure, 611 cv fetch2$destructure-off, 612 cv fetch3, 613, 614, 669, 723, 724,

822–826, 875–877 cv fetch3-off, 613 cv fetch3$destructure, 613 cv fetch3$destructure-off, 614 cv hold0, 654, 655, 670, 723, 731,

820 cv hold0-off, 654 cv hold0$destructure, 654 cv hold0$destructure-off, 655 cv hold1, 656, 657, 670, 731 cv hold1-off, 656 cv hold1$destructure, 656 cv hold1$destructure-off, 657 cv reada0, 622, 623, 669, 724, 828,

836, 893, 900 cv reada0-off, 622 cv reada0$destructure, 622 cv reada0$destructure-off, 623 cv reada1, 624, 625, 669, 726, 836,

837 cv reada1-off, 624 cv reada1$destructure, 624 cv reada1$destructure-off, 625 cv reada2, 626, 627, 669, 726, 839,

840 cv reada2-off, 626 cv reada2$destructure, 626 cv reada2$destructure-off, 627 cv reada3, 628, 629, 669, 726, 840–

842, 844, 845, 879, 880 cv reada3-off, 628 cv reada3$destructure, 628 cv reada3$destructure-off, 629 cv readb0, 630, 631, 669, 724, 727,

828, 843, 846, 893, 902, 903 cv readb0-off, 630 cv readb0$destructure, 630 cv readb0$destructure-off, 631 cv readb1, 632, 633, 669, 727, 847,

848 cv readb1-off, 632 cv readb1$destructure, 632 cv readb1$destructure-off, 633 cv readb2, 634, 635, 669, 727, 848,

849 cv readb2-off, 634 cv readb2$destructure, 634 cv readb2$destructure-off, 635 cv readb3, 636, 637, 669, 728, 851–

856, 882–884 cv readb3-off, 636 cv readb3$destructure, 636 cv readb3$destructure-off, 637 cv rega, 617, 669, 724, 828, 830, 893,

895 cv rega-off, 617 cv rega$destructure, 617 cv rega$destructure-off, 617 cv regb, 618, 619, 669, 725, 831, 832,

896, 897 cv regb-off, 618 cv regb$destructure, 618 cv regb$destructure-off, 619 cv reset0, 662, 663, 670, 731, 733 cv reset0-off, 662 cv reset0$destructure, 662 cv reset0$destructure-off, 663 cv reset1, 664, 665, 670, 732 cv reset1-off, 664 cv reset1$destructure, 664 cv reset1$destructure-off, 665 cv reset2, 666, 667, 670, 732 cv reset2-off, 666 cv reset2$destructure, 666 cv reset2$destructure-off, 667 cv sefa0, 646, 647, 670, 724, 829, 866, 894, 909

cv sefa0-off, 646

cv sefa0$destructure, 646 cv sefa0$destructure-off, 647 cv sefa1, 648, 649, 670, 729, 867,

868 cv sefa1-off, 648 cv sefa1$destructure, 648 cv sefa1$destructure-off, 650 cv sefb0, 650, 651, 670, 724, 730,

829, 869, 870, 894, 910 cv sefb0-off, 650 cv sefb0$destructure, 650 cv sefb0$destructure-off, 651 cv sefb1, 652, 653, 670, 725, 730,

835, 871, 872, 898, 899, 912 cv sefb1-off, 652 cv sefb1$destructure, 652 cv sefb1$destructure-off, 654 cv update, 620, 621, 669, 725, 727,

728, 831, 833, 834, 842, 843, 853, 896, 898, 902, 905

cv update-off, 620

cv update$destructure, 620 cv update$destructure-off, 621 cv v11010, 658, 659, 670 cv v11010-off, 658 cv v11010$destructure, 658 cv v11010$destructure-off, 659 cv v11011, 660, 661, 670 cv v11011-off, 660 cv v11011$destructure, 660 cv v11011$destructure-off, 661 cv v11111, 668–670 cv v11111-off, 667 cv v11111$destructure, 668 cv v11111$destructure-off, 669 cv write0, 638, 639, 669, 725, 727,

728, 831, 843, 853, 857, 896, 902, 905, 906 cv write0-off, 638 cv write0$destructure, 638 cv write0$destructure-off, 639 cv write1, 640, 641, 670, 728, 857,

858 cv write1-off, 640 cv write1$destructure, 640 cv write1$destructure-off, 642 cv write2, 642, 643, 670, 728, 860 cv write2-off, 642 cv write2$destructure, 642 cv write2$destructure-off, 644 cv write3, 644, 645, 670, 729, 861–

865, 885–887 cv write3-off, 644 cv write3$destructure, 644 cv write3$destructure-off, 645 cvzbv, 482–484, 536, 1096, 1099–1101,

1104–1106, 1216 cvzbv-dec, 483, 484, 1101, 1105 cvzbv-inc, 483, 484, 1100, 1104 cvzbv-neg, 483, 484, 1105 cvzbv-v-adder, 483–485, 1100, 1104 cvzbv-v-asr, 484, 1105 cvzbv-v-lsl, 483 cvzbv-v-lsr, 484, 1101 cvzbv-v-not, 483, 484, 1101, 1106 cvzbv-v-ror, 483, 484 cvzbv-v-subtracter, 483–485, 1100,

1105

data-in-select, 605, 608, 609, 611, 613, 615, 617, 619, 620, 622, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 662, 664, 666, 668, 761, 762, 781, 782, 793, 802, 803, 811, 812

data-in-select-off, 605 data-out, 759, 761–764 data-out-off, 760 dec-addr-out, 605, 608, 610, 611, 613,

615, 617, 619, 621, 622, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 662, 664, 666, 668, 763, 782, 794, 804, 813

dec-addr-out-off, 605 dec-pass*, 474, 475 dec-pass*-off, 474 dec-pass*$destructure, 474 dec-pass*$destructure-off, 474 dec-pass-cell*, 469, 473 dec-pass-cell$netlist, 469 dec-pass-cell$value, 469 dec-pass-cell&, 469, 471 dec-pass-cell&-off, 469 dec-pass$netlist, 475, 776 dec-pass$value, 475 dec-pass$value-off, 475 dec-pass&, 474, 475, 776 dec-pass&-off, 475 decode-5, 573, 576, 578, 716 decode-5*, 576, 578 decode-5-off, 576 decode-5$netlist, 578, 721 decode-5$value, 578 decode-5$value-off, 578 decode-5&, 578, 721 decode-5&-off, 578 decode-gen, 490, 493, 494 decode-gen*, 491, 492 decode-gen$netlist, 492, 495 decode-gen$value, 493 decode-gen$value-off, 493 decode-gen$value-zero, 493 decode-gen$value-zero-off, 493 decode-gen&, 492, 493, 495 decode-gen&-off, 492 decode-mode, 486, 487, 494 decode-mode*, 486, 487 decode-mode$netlist, 487, 495 decode-mode$value, 487 decode-mode$value-off, 487 decode-mode$value-zero, 487 decode-mode$value-zero-off, 487 decode-mode&, 487, 495 decode-mode&-off, 487 decode-prop, 487, 490, 494 decode-prop*, 488, 489 decode-prop$netlist, 489, 495 decode-prop$value, 489 decode-prop$value-off, 490 decode-prop$value-zero, 490 decode-prop$value-zero-off, 490 decode-prop&, 489, 490, 495 decode-prop&-off, 489 decode-reg-mode*, 565 decode-reg-mode$netlist, 565, 672 decode-reg-mode$value, 565 decode-reg-mode$value-off, 565 decode-reg-mode&, 565, 672 decode-reg-mode&-off, 565 decode$step, 827 del10-monotone, 947 del10-monotone-off, 1046 del10-monotone-on, 1136 del10-preserves-good-s, 1006 del10-preserves-good-s-off, 1036 del10-preserves-good-s-on, 1125 del10$netlist, 400 del10$value, 400 del10$value-off, 400 del10&, 400 del10&-off, 400 del2-monotone, 947 del2-monotone-off, 1047 del2-monotone-on, 1136 del2-preserves-good-s, 1006 del2-preserves-good-s-off, 1036 del2-preserves-good-s-on, 1125 del2$netlist, 400 del2$value, 400 del2$value-off, 400 del2&, 399, 400 del2&-off, 399 del4-monotone, 947 del4-monotone-off, 1046 del4-monotone-on, 1136 del4-preserves-good-s, 1006 del4-preserves-good-s-off, 1036 del4-preserves-good-s-on, 1125 del4$netlist, 400, 477, 480 del4$value, 400 del4$value-off, 400 del4&, 400, 476, 480 del4&-off, 400 delay-dependencies, 318, 319, 322, 323, 325, 332, 333

delay-dependencies-off, 318 delay-dependencies-off1, 322 delay-dependencies-on, 321 delay-hl, 317, 322 delay-hl-off, 317 delay-intercept-hl, 318, 323, 325, 331 delay-intercept-hl-off, 318 delay-intercept-lh, 318, 323, 325, 331 delay-intercept-lh-off, 318 delay-lh, 317, 322 delay-lh-off, 317 delay-slope-hl, 318, 323, 331 delay-slope-hl-off, 318 delay-slope-lh, 318, 323, 331 delay-slope-lh-off, 318 delay-to-range, 326, 327 delay-to-range-off, 326 delays-error, 334, 349 delays-error-off, 334 delete, 2–4, 8, 10–12, 17, 44–46, 57,

58, 78, 80 delete*, 138, 250, 357, 367, 375 delete*-count, 250 delete*-lemma, 250 delete*-off, 138 delete-delete, 3 delete-delete-off, 131 delete-delete-off1, 1182 delete-delete-on, 1094 delete-module, 237, 239–241, 247, 248,

256, 258–260, 263, 265, 266, 268–270, 272–274, 419, 429– 431, 433, 434, 436–439, 441, 445, 450, 451, 454–456, 458, 460, 462, 463, 469, 471–476, 480, 487, 489, 492, 495, 497, 499, 500, 502, 514–516, 518, 522, 524, 528, 540, 560, 562, 564–570, 578, 582, 672, 688, 713, 714, 721, 738, 744, 748, 750, 752, 755, 757, 758, 775, 776, 790, 791, 799, 800, 998– 1001

delete-module-lookup-module-cou

nt, 237 delete-module-off, 237 delete-non-member, 3 delete-non-member-off, 131 delete-non-member-off1, 1182 delete-non-member-on, 1094 delete-null-entries, 378, 379, 386 delete-null-entries-off, 379 delete-off, 131 delete-off1, 1182 delete-on, 1094 dependency-table, 381 dependency-table-off, 381 determined-delayp, 319 determined-delayp-off, 319 determined-rangep, 320, 325, 327 determined-rangep-off, 320 diff-diff-arg1, 7 diff-diff-arg1-off, 129 diff-diff-arg1-off1, 1180 diff-diff-arg1-on, 1092 diff-diff-arg2, 7 diff-diff-arg2-off, 129 diff-diff-arg2-off1, 1180 diff-diff-arg2-on, 1092 diff-diff-diff, 7 diff-diff-diff-off, 7 diff-sub1-arg2, 6 diff-sub1-arg2-off, 7 difference-0, 134 difference-add1-add1, 134 difference-add1-arg2, 11 difference-add1-arg2-off, 128 difference-add1-arg2-off1, 1179 difference-add1-arg2-on, 1091 difference-cancellation, 5 difference-cancellation-off, 5 difference-difference-arg1, 11 difference-difference-arg1-off, 128 difference-difference-arg1-off1, 1179 difference-difference-arg1-on, 1091 difference-difference-arg2, 11 difference-difference-arg2-off, 128 difference-difference-arg2-off1, 1179 difference-difference-arg2-on, 1091 difference-elim, 11 difference-elim-off, 128 difference-elim-off1, 1179 difference-elim-on, 1091 difference-idifference, 95 difference-idifference-off, 96 difference-leq-arg1, 11 difference-leq-arg1-off, 128 difference-leq-arg1-off1, 1179 difference-leq-arg1-on, 1091 difference-lessp-arg1, 7 difference-lessp-arg1-off, 7 difference-linear, 1194 difference-off, 133 difference-plus-cancellation, 6 difference-plus-cancellation-of

f, 6 difference-plus-cancellation-pr

oof, 6

oof-off, 129 oof-off1, 1180 oof-on, 1092

difference-plus-plus-cancellati on, 6 on-hack, 6 on-hack-off, 6 on-off, 6 on-proof, 6 on-proof-off, 129 on-proof-off1, 1180 on-proof-on, 1092 difference-sub1-arg2, 11 difference-sub1-arg2-off, 128 difference-sub1-arg2-off1, 1179 difference-sub1-arg2-on, 1091 difference-x-1, 133 difference-x-x, 11 difference-x-x-off, 128 difference-x-x-off1, 1179 difference-x-x-on, 1091 digitp, 284, 285 digitp-off, 284 disjoin-equalities-with-0, 83, 84 disjoin-equalities-with-0-off, 103 disjoin-equalities-with-0-off1, 1155 disjoin-equalities-with-0-on, 1066 disjoint, 138–141, 144, 149, 167, 255,

296, 427 disjoint-append, 139 disjoint-cons, 139 disjoint-firstn, 140 disjoint-firstn-restn-lemmas, 141 disjoint-firstn1, 140 disjoint-indices-different-name

s, 149 disjoint-nlistp, 139 disjoint-off, 139 disjoint-or-err, 252, 289, 291, 338 disjoint-or-err-off, 252 disjoint-restn, 141 disjoint-restn1, 141 disjoint-subrange, 144 distributivity-of-times-over-gc

d, 34 d-off, 117 d-off1, 1169 d-on, 1080 d-proof, 34 d-proof-off, 117 d-proof-off1, 1169 d-proof-on, 1080

divides-plus-plus, 1097 divides-plus-plus-off, 1115 division-theorem, 50 division-theorem-for-truncate-t

o-neginf, 51 o-neginf-off, 109 o-neginf-off1, 1161 o-neginf-on, 1073 o-neginf-part1, 51 o-neginf-part1-off, 110 o-neginf-part1-off1, 1162 o-neginf-part1-on, 1073 o-neginf-part2, 51 o-neginf-part2-off, 109 o-neginf-part2-off1, 1161 o-neginf-part2-on, 1073 o-neginf-part3, 51 o-neginf-part3-off, 109 o-neginf-part3-off1, 1161 o-neginf-part3-on, 1073 o-zero, 52 o-zero-off, 109 o-zero-off1, 1161 o-zero-on, 1072 o-zero-part1, 51 o-zero-part1-off, 109 o-zero-part1-off1, 1161 o-zero-part1-on, 1072 o-zero-part2, 51 o-zero-part2-off, 109 o-zero-part2-off1, 1161 o-zero-part2-on, 1072 o-zero-part3, 52 o-zero-part3-off, 109 o-zero-part3-off1, 1161 o-zero-part3-on, 1072

division-theorem-off, 110 division-theorem-off1, 1162 division-theorem-on, 1073 division-theorem-part1, 50 division-theorem-part1-off, 110 division-theorem-part1-off1, 1162 division-theorem-part1-on, 1073 division-theorem-part2, 50 division-theorem-part2-off, 110 division-theorem-part2-off1, 1162 division-theorem-part2-on, 1073 division-theorem-part3, 50 division-theorem-part3-off, 110 division-theorem-part3-off1, 1162 division-theorem-part3-on, 1073 double-cdr-induction, 1002 double-cdr-induction-off, 1040 double-cdr-induction-on, 1129 double-difference-induction, 1193 double-log-induction, 32 double-log-induction-off, 118 double-log-induction-off1, 1170 double-log-induction-on, 1082 double-number-induction, 30 double-number-induction-off, 120 double-number-induction-off1, 1171 double-number-induction-on, 1083 double-remainder-induction, 23 double-remainder-induction-off, 123 double-remainder-induction-off1, 1175 double-remainder-induction-on, 1086 doublet-n-simulate, 1010 doublet-n-simulate-induction, 1010 doublet-n-simulate-induction-of

f, 1033 doublet-n-simulate-induction-on, 1122 doublet-n-simulate-off, 1033 doublet-n-simulate-on, 1122 doublet-p, 1010 doublet-p-equal-approx, 1010 doublet-p-equal-approx-off, 1033 doublet-p-equal-approx-on, 1122 doublet-p-off, 1010 doublet-p-off1, 1152 doublet-p-on, 1063 dp-ram-16x32-args-crock, 420 dp-ram-16x32-args-crock-off, 420 dp-ram-16x32-monotone, 993 dp-ram-16x32-monotone-off, 998 dp-ram-16x32-monotone-off1, 1152 dp-ram-16x32-monotone-on, 1063 dp-ram-16x32-monotone-state, 993 dp-ram-16x32-monotone-state-off, 997

1, 1152 dp-ram-16x32-monotone-state-on, 1062 dp-ram-16x32-monotone-value, 972 dp-ram-16x32-monotone-value-off, 995

1, 1150 dp-ram-16x32-monotone-value-on, 1061 dp-ram-16x32-preserves-good-s, 1007 dp-ram-16x32-preserves-good-s-o

ff, 1034 n, 1123

dp-ram-16x32$netlist, 401, 739

dp-ram-16x32$state, 412 dp-ram-16x32$state-off, 414 dp-ram-16x32$structured-state, 420 dp-ram-16x32$structured-state-

off, 421 dp-ram-16x32$structured-value, 420 dp-ram-16x32$structured-value-

off, 420 dp-ram-16x32$value, 401 dp-ram-16x32$value-off, 403 dp-ram-16x32&, 401, 412, 420, 738 dp-ram-16x32&-off, 401 drive-lessp, 314, 315 drive-lessp-off, 314 drive-min, 315, 316 drive-min-off, 315 drives-error, 317, 349 drives-error-off, 317 dtack-, 760–763 dtack–off, 760 dual-apply-state, 239, 240, 938, 976, 991, 993, 1004–1008 dual-apply-state-dp-ram-16x32, 993 dual-apply-state-dp-ram-16x32-le

mma-1, 976 mma-1-off, 997 mma-1-off1, 1151 mma-1-on, 1062 mma-2, 976 mma-2-off, 997 mma-2-off1, 1151 mma-2-on, 1062 mma-3, 991 mma-3-off, 997 mma-3-off1, 1152 mma-3-on, 1062

dual-apply-state-dp-ram-16x32-o ff, 997 ff1, 1152

n, 1062 dual-apply-state-off, 239 dual-apply-value, 238, 239, 938, 954,

955, 970, 972 dual-apply-value-dp-ram-16x32, 972 dual-apply-value-dp-ram-16x32-le

mma-1, 954 mma-1-off, 995 mma-1-off1, 1149 mma-1-on, 1060 mma-2, 955 mma-2-off, 995 mma-2-off1, 1150 mma-2-on, 1060 mma-3, 970 mma-3-off, 995 mma-3-off1, 1150 mma-3-on, 1060

dual-apply-value-dp-ram-16x32-o ff, 995 ff1, 1150 n, 1060

dual-apply-value-off, 238 dual-eval, 239–244, 391–400, 402–

404, 406, 408–413, 415, 417, 419–422, 424, 426, 427, 429, 430, 432, 433, 435, 437–440, 442, 443, 445, 452, 456, 459, 461, 462, 464, 469, 473, 475, 478, 481, 482, 487, 490, 493, 495, 496, 498–502, 516–519, 522, 523, 525, 529, 541, 561, 563–565, 567–570, 578, 583, 589, 590, 592, 673, 690, 715, 722, 740, 741, 744–746, 749, 751, 753, 755, 756, 758, 759, 781, 784, 792, 795, 801, 806, 809, 931–933, 938–952, 999– 1003, 1008–1010

dual-eval-0-primp, 938 dual-eval-0-primp-off, 1054 dual-eval-0-primp-on, 1143 dual-eval-2-primp, 938 dual-eval-2-primp-off, 1054 dual-eval-2-primp-on, 1143 dual-eval-ao2-state, 939 dual-eval-ao2-state-off, 1053 dual-eval-ao2-state-on, 1142 dual-eval-ao2-value, 938 dual-eval-ao2-value-off, 1053 dual-eval-ao2-value-on, 1142 dual-eval-ao4-state, 939 dual-eval-ao4-state-off, 1053 dual-eval-ao4-state-on, 1142 dual-eval-ao4-value, 939 dual-eval-ao4-value-off, 1053 dual-eval-ao4-value-on, 1142 dual-eval-ao6-state, 939 dual-eval-ao6-state-off, 1053 dual-eval-ao6-state-on, 1142 dual-eval-ao6-value, 939 dual-eval-ao6-value-off, 1053 dual-eval-ao6-value-on, 1142 dual-eval-ao7-state, 939 dual-eval-ao7-state-off, 1053 dual-eval-ao7-state-on, 1142 dual-eval-ao7-value, 939 dual-eval-ao7-value-off, 1053 dual-eval-ao7-value-on, 1142 dual-eval-b-and-state, 939 dual-eval-b-and-state-off, 1052 dual-eval-b-and-state-on, 1142 dual-eval-b-and-value, 939 dual-eval-b-and-value-off, 1052 dual-eval-b-and-value-on, 1142 dual-eval-b-and3-state, 940 dual-eval-b-and3-state-off, 1052 dual-eval-b-and3-state-on, 1141 dual-eval-b-and3-value, 940 dual-eval-b-and3-value-off, 1052 dual-eval-b-and3-value-on, 1142 dual-eval-b-and4-state, 940 dual-eval-b-and4-state-off, 1052 dual-eval-b-and4-state-on, 1141 dual-eval-b-and4-value, 940 dual-eval-b-and4-value-off, 1052 dual-eval-b-and4-value-on, 1141 dual-eval-b-equv-state, 940 dual-eval-b-equv-state-off, 1052 dual-eval-b-equv-state-on, 1141 dual-eval-b-equv-value, 940 dual-eval-b-equv-value-off, 1052 dual-eval-b-equv-value-on, 1141 dual-eval-b-equv3-state, 940 dual-eval-b-equv3-state-off, 1052 dual-eval-b-equv3-state-on, 1141 dual-eval-b-equv3-value, 940 dual-eval-b-equv3-value-off, 1052 dual-eval-b-equv3-value-on, 1141 dual-eval-b-if-state, 941 dual-eval-b-if-state-off, 1051 dual-eval-b-if-state-on, 1141 dual-eval-b-if-value, 941 dual-eval-b-if-value-off, 1051 dual-eval-b-if-value-on, 1141 dual-eval-b-nand-state, 941 dual-eval-b-nand-state-off, 1051 dual-eval-b-nand-state-on, 1140 dual-eval-b-nand-value, 941 dual-eval-b-nand-value-off, 1051 dual-eval-b-nand-value-on, 1141 dual-eval-b-nand3-state, 941 dual-eval-b-nand3-state-off, 1051 dual-eval-b-nand3-state-on, 1140 dual-eval-b-nand3-value, 941 dual-eval-b-nand3-value-off, 1051 dual-eval-b-nand3-value-on, 1140 dual-eval-b-nand4-state, 941 dual-eval-b-nand4-state-off, 1051 dual-eval-b-nand4-state-on, 1140 dual-eval-b-nand4-value, 941 dual-eval-b-nand4-value-off, 1051 dual-eval-b-nand4-value-on, 1140 dual-eval-b-nand5-state, 942 dual-eval-b-nand5-state-off, 1051 dual-eval-b-nand5-state-on, 1140 dual-eval-b-nand5-value, 942 dual-eval-b-nand5-value-off, 1051 dual-eval-b-nand5-value-on, 1140 dual-eval-b-nand6-state, 942 dual-eval-b-nand6-state-off, 1050 dual-eval-b-nand6-state-on, 1140 dual-eval-b-nand6-value, 942 dual-eval-b-nand6-value-off, 1050 dual-eval-b-nand6-value-on, 1140 dual-eval-b-nand8-state, 942 dual-eval-b-nand8-state-off, 1050 dual-eval-b-nand8-state-on, 1139 dual-eval-b-nand8-value, 942 dual-eval-b-nand8-value-off, 1050 dual-eval-b-nand8-value-on, 1139 dual-eval-b-nbuf-state, 943 dual-eval-b-nbuf-state-off, 1050 dual-eval-b-nbuf-state-on, 1139 dual-eval-b-nbuf-value, 943 dual-eval-b-nbuf-value-off, 1050 dual-eval-b-nbuf-value-on, 1139 dual-eval-b-nor-state, 943 dual-eval-b-nor-state-off, 1050 dual-eval-b-nor-state-on, 1139 dual-eval-b-nor-value, 943 dual-eval-b-nor-value-off, 1050 dual-eval-b-nor-value-on, 1139 dual-eval-b-nor3-state, 943 dual-eval-b-nor3-state-off, 1049 dual-eval-b-nor3-state-on, 1139 dual-eval-b-nor3-value, 943 dual-eval-b-nor3-value-off, 1050 dual-eval-b-nor3-value-on, 1139 dual-eval-b-nor4-state, 943 dual-eval-b-nor4-state-off, 1049 dual-eval-b-nor4-state-on, 1139 dual-eval-b-nor4-value, 943 dual-eval-b-nor4-value-off, 1049 dual-eval-b-nor4-value-on, 1139 dual-eval-b-nor5-state, 944 dual-eval-b-nor5-state-off, 1049 dual-eval-b-nor5-state-on, 1138 dual-eval-b-nor5-value, 944 dual-eval-b-nor5-value-off, 1049 dual-eval-b-nor5-value-on, 1138 dual-eval-b-nor6-state, 944 dual-eval-b-nor6-state-off, 1049 dual-eval-b-nor6-state-on, 1138 dual-eval-b-nor6-value, 944 dual-eval-b-nor6-value-off, 1049 dual-eval-b-nor6-value-on, 1138 dual-eval-b-nor8-state, 944 dual-eval-b-nor8-state-off, 1049 dual-eval-b-nor8-state-on, 1138 dual-eval-b-nor8-value, 944 dual-eval-b-nor8-value-off, 1049 dual-eval-b-nor8-value-on, 1138 dual-eval-b-not-b4ip-state, 945 dual-eval-b-not-b4ip-state-off, 1048 dual-eval-b-not-b4ip-state-on, 1137 dual-eval-b-not-b4ip-value, 945 dual-eval-b-not-b4ip-value-off, 1048 dual-eval-b-not-b4ip-value-on, 1138 dual-eval-b-not-ivap-state, 945 dual-eval-b-not-ivap-state-off, 1048 dual-eval-b-not-ivap-state-on, 1137 dual-eval-b-not-ivap-value, 945 dual-eval-b-not-ivap-value-off, 1048 dual-eval-b-not-ivap-value-on, 1137 dual-eval-b-not-state, 945 dual-eval-b-not-state-off, 1048 dual-eval-b-not-state-on, 1138 dual-eval-b-not-value, 945 dual-eval-b-not-value-off, 1048 dual-eval-b-not-value-on, 1138 dual-eval-b-or-state, 945 dual-eval-b-or-state-off, 1048 dual-eval-b-or-state-on, 1137 dual-eval-b-or-value, 945 dual-eval-b-or-value-off, 1048 dual-eval-b-or-value-on, 1137 dual-eval-b-or3-state, 946 dual-eval-b-or3-state-off, 1048 dual-eval-b-or3-state-on, 1137 dual-eval-b-or3-value, 945 dual-eval-b-or3-value-off, 1048 dual-eval-b-or3-value-on, 1137 dual-eval-b-or4-state, 946 dual-eval-b-or4-state-off, 1047 dual-eval-b-or4-state-on, 1137 dual-eval-b-or4-value, 946 dual-eval-b-or4-value-off, 1047 dual-eval-b-or4-value-on, 1137 dual-eval-b-xor-state, 946 dual-eval-b-xor-state-off, 1047 dual-eval-b-xor-state-on, 1136 dual-eval-b-xor-value, 946 dual-eval-b-xor-value-off, 1047 dual-eval-b-xor-value-on, 1136 dual-eval-b-xor3-state, 946 dual-eval-b-xor3-state-off, 1047 dual-eval-b-xor3-state-on, 1136 dual-eval-b-xor3-value, 946 dual-eval-b-xor3-value-off, 1047 dual-eval-b-xor3-value-on, 1136 dual-eval-body-bindings, 242, 243, 428,

477, 481, 750, 752, 754, 756 dual-eval-body-bindings-off, 243 dual-eval-del10-state, 947 dual-eval-del10-state-off, 1046 dual-eval-del10-state-on, 1136 dual-eval-del10-value, 947 dual-eval-del10-value-off, 1046 dual-eval-del10-value-on, 1136 dual-eval-del2-state, 946 dual-eval-del2-state-off, 1047 dual-eval-del2-state-on, 1136 dual-eval-del2-value, 946 dual-eval-del2-value-off, 1047 dual-eval-del2-value-on, 1136 dual-eval-del4-state, 947 dual-eval-del4-state-off, 1047 dual-eval-del4-state-on, 1136 dual-eval-del4-value, 947 dual-eval-del4-value-off, 1047 dual-eval-del4-value-on, 1136 dual-eval-fd1-state, 947 dual-eval-fd1-state-off, 1046 dual-eval-fd1-state-on, 1135 dual-eval-fd1-value, 947 dual-eval-fd1-value-off, 1046 dual-eval-fd1-value-on, 1135 dual-eval-fd1s-state, 948 dual-eval-fd1s-state-off, 1046 dual-eval-fd1s-state-on, 1135 dual-eval-fd1s-value, 948 dual-eval-fd1s-value-off, 1046 dual-eval-fd1s-value-on, 1135 dual-eval-fd1slp-state, 948 dual-eval-fd1slp-state-off, 1045 dual-eval-fd1slp-state-on, 1135 dual-eval-fd1slp-value, 948 dual-eval-fd1slp-value-off, 1045 dual-eval-fd1slp-value-on, 1135 dual-eval-fd1sp-state, 948 dual-eval-fd1sp-state-off, 1046 dual-eval-fd1sp-state-on, 1135 dual-eval-fd1sp-value, 948 dual-eval-fd1sp-value-off, 1046 dual-eval-fd1sp-value-on, 1135 dual-eval-id-state, 948 dual-eval-id-state-off, 1045 dual-eval-id-state-on, 1134 dual-eval-id-value, 948 dual-eval-id-value-off, 1045 dual-eval-id-value-on, 1134 dual-eval-monotone, 1003 dual-eval-monotone-induction, 998–

1001 dual-eval-monotone-induction-of

f, 1041 dual-eval-monotone-induction-on, 1130 dual-eval-monotone-no-ram, 1003 dual-eval-monotone-no-ram-off, 1039 dual-eval-monotone-no-ram-on, 1128 dual-eval-monotone-off, 1039 dual-eval-monotone-on, 1128 dual-eval-off, 240 dual-eval-on-collected-nth-32, 589 dual-eval-procmon-state, 947 dual-eval-procmon-state-off, 1046 dual-eval-procmon-state-on, 1135 dual-eval-procmon-value, 947 dual-eval-procmon-value-off, 1046 dual-eval-procmon-value-on, 1135 dual-eval-pullup-state, 949 dual-eval-pullup-state-off, 1044 dual-eval-pullup-state-on, 1134 dual-eval-pullup-value, 949 dual-eval-pullup-value-off, 1044 dual-eval-pullup-value-on, 1134 dual-eval-ram-enable-circuit-st ate, 949 ate-off, 1045 ate-on, 1134

dual-eval-ram-enable-circuit-va lue, 948 lue-off, 1045 lue-on, 1134 dual-eval-t-buf-state, 949 dual-eval-t-buf-state-off, 1045 dual-eval-t-buf-state-on, 1134 dual-eval-t-buf-value, 949 dual-eval-t-buf-value-off, 1045 dual-eval-t-buf-value-on, 1134 dual-eval-t-wire-state, 949 dual-eval-t-wire-state-off, 1045 dual-eval-t-wire-state-on, 1134 dual-eval-t-wire-value, 949 dual-eval-t-wire-value-off, 1045 dual-eval-t-wire-value-on, 1134 dual-eval-ttl-bidirect-state, 950 dual-eval-ttl-bidirect-state-of

f, 1044 dual-eval-ttl-bidirect-state-on, 1133 dual-eval-ttl-bidirect-value, 949 dual-eval-ttl-bidirect-value-of

f, 1044 dual-eval-ttl-bidirect-value-on, 1133 dual-eval-ttl-clk-input-state, 950 dual-eval-ttl-clk-input-state-o

ff, 1044 n, 1133

dual-eval-ttl-clk-input-value, 950 dual-eval-ttl-clk-input-value-o

ff, 1044 n, 1133

dual-eval-ttl-input-state, 950 dual-eval-ttl-input-state-off, 1044 dual-eval-ttl-input-state-on, 1133 dual-eval-ttl-input-value, 950 dual-eval-ttl-input-value-off, 1044 dual-eval-ttl-input-value-on, 1133 dual-eval-ttl-output-fast-state, 951

-off, 1043 -on, 1132 dual-eval-ttl-output-fast-value, 951

-off, 1043 -on, 1132

dual-eval-ttl-output-parametric -state, 950 -state-off, 1043 -state-on, 1132 -value, 950 -value-off, 1043 -value-on, 1132

dual-eval-ttl-output-state, 950 dual-eval-ttl-output-state-off, 1043 dual-eval-ttl-output-state-on, 1133 dual-eval-ttl-output-value, 950 dual-eval-ttl-output-value-off, 1043 dual-eval-ttl-output-value-on, 1133 dual-eval-ttl-tri-output-fast-st

ate, 951 ate-off, 1042 ate-on, 1132

dual-eval-ttl-tri-output-fast-v alue, 951 alue-off, 1043 alue-on, 1132

dual-eval-ttl-tri-output-state, 951 dual-eval-ttl-tri-output-state-

off, 1043 on, 1132

dual-eval-ttl-tri-output-value, 951 dual-eval-ttl-tri-output-value-

off, 1043 on, 1132

dual-eval-vdd-parametric-state, 952 dual-eval-vdd-parametric-state-

off, 1042 on, 1131

dual-eval-vdd-parametric-value, 952 dual-eval-vdd-parametric-value-

off, 1042 on, 1131

dual-eval-vdd-state, 952 dual-eval-vdd-state-off, 1042 dual-eval-vdd-state-on, 1131 dual-eval-vdd-value, 952 dual-eval-vdd-value-off, 1042 dual-eval-vdd-value-on, 1132 dual-eval-vss-state, 952 dual-eval-vss-state-off, 1042 dual-eval-vss-state-on, 1131 dual-eval-vss-value, 952 dual-eval-vss-value-off, 1042 dual-eval-vss-value-on, 1131 dual-port-ram-state, 174, 414, 421,

740, 807, 976, 991–993 dual-port-ram-state-body, 993 dual-port-ram-state-body-off, 1041 dual-port-ram-state-body-on, 1130 dual-port-ram-state-is-dual-port

-ram-state-body, 993 -ram-state-body-off, 997 -ram-state-body-off1, 1152 -ram-state-body-on, 1062

dual-port-ram-state-monotone, 976 dual-port-ram-state-monotone-of

f, 1041 dual-port-ram-state-monotone-on, 1130 dual-port-ram-state-monotone-re

write, 976 write-off, 997 write-off1, 1151 write-on, 1062

dual-port-ram-value, 174, 175, 403,

420, 739, 954, 970–972 dual-port-ram-value-body, 971 dual-port-ram-value-body-off, 1041 dual-port-ram-value-body-on, 1131 dual-port-ram-value-is-dual-port

-ram-value-body, 971 -ram-value-body-off, 995 -ram-value-body-off1, 1150 -ram-value-body-on, 1060

dual-port-ram-value-monotone, 954 dual-port-ram-value-monotone-of

f, 994 f1, 1149

dual-port-ram-value-monotone-on, 1060 duplicates-append, 139 duplicates?, 139–141, 149, 167–169,

254 duplicates?-cons, 139 duplicates?-off, 139

encode-32, 578, 579, 586, 587 encode-32*, 581, 582 encode-32-off, 580 encode-32$netlist, 582, 714 encode-32$value, 582 encode-32$value-off, 584 encode-32$value-on-a-vector, 590 encode-32$value-on-a-vector-of

f, 591 encode-32&, 582, 590, 714 encode-32&-off, 582 equal-0-itimes-list-eval$-bagi

nt-1, 59 nt-1-off, 65 nt-2, 59 nt-2-off, 65

equal-append-x-x, 135 equal-collect-value-promote-ali

sts, 167 equal-difference-0, 5 equal-difference-0-off, 130 equal-difference-0-off1, 1181 equal-difference-0-on, 1093 equal-exp-0, 31 equal-exp-0-off, 119 equal-exp-0-off1, 1171 equal-exp-0-on, 1082 equal-exp-1, 31 equal-exp-1-off, 119 equal-exp-1-off1, 1170 equal-exp-1-on, 1082 equal-fix-int, 58 equal-fix-int-off, 106 equal-fix-int-off1, 1158 equal-fix-int-on, 1070 equal-fix-int-to-ilessp, 82 equal-fix-int-to-ilessp-off, 103 equal-fix-int-to-ilessp-off1, 1155 equal-fix-int-to-ilessp-on, 1067 equal-gcd-0, 33 equal-gcd-0-off, 117 equal-gcd-0-off1, 1169 equal-gcd-0-on, 1081 equal-idiv-2-0, 1214 equal-iff, 1099 equal-iff-off, 1099 equal-iff-on, 1183 equal-ineg-ineg, 67 equal-ineg-ineg-off, 105 equal-ineg-ineg-off1, 1157 equal-ineg-ineg-on, 1069 equal-itimes-0, 50 equal-itimes-0-off, 110 equal-itimes-0-off1, 1162 equal-itimes-0-on, 1074 equal-itimes-1, 50 equal-itimes-1-off, 110 equal-itimes-1-off1, 1162 equal-itimes-1-on, 1073 equal-itimes-list-eval$-list-b

agdiff, 78 agdiff-off, 85

equal-itimes-list-eval$-list-de lete, 57 lete-new-1, 78 lete-new-1-off, 85 lete-new-2, 78 lete-new-2-off, 85 lete-off, 64 equal-itimes-minus-1, 50 equal-itimes-minus-1-off, 110 equal-itimes-minus-1-off1, 1162 equal-itimes-minus-1-on, 1073 equal-length-32-as-collected-nt

h, 148 equal-length-4-as-collected-nth, 148 equal-length-40-as-collected-nt h+subrange, 776 equal-length-add1, 137 equal-length-add1-off, 137 equal-length-cdr, 137 equal-length-read-mem, 954 equal-length-read-mem-off, 994 equal-length-read-mem-off1, 1149 equal-length-read-mem-on, 1060 equal-length-read-mem1, 954 equal-length-read-mem1-off, 994 equal-length-read-mem1-off1, 1149 equal-length-read-mem1-on, 1060 equal-log-0, 31 equal-log-0-off, 119 equal-log-0-off1, 1170 equal-log-0-on, 1082 equal-memory-value, 184 equal-memory-value-for-chip-syste

m$state, 800 equal-nat-to-v-inverter, 1098 equal-nat-to-v-inverter-hack1, 1098 equal-nat-to-v-inverter-hack1-o

ff, 1098 n, 1183

equal-nat-to-v-inverter-hack2, 1098 equal-nat-to-v-inverter-hack2-le

mma, 1098 mma-off, 1114

equal-nat-to-v-inverter-hack2-o ff, 1098 n, 1183

equal-nat-to-v-inverter-off, 1114 equal-occurrences-zero, 3 equal-occurrences-zero-off, 131 equal-occurrences-zero-off1, 1182 equal-occurrences-zero-on, 1094 equal-plus-0, 5 equal-plus-0-off, 130 equal-plus-0-off1, 1181 equal-plus-0-on, 1093 equal-quotient-0, 25 equal-quotient-0-off, 122 equal-quotient-0-off1, 1174 equal-quotient-0-on, 1085 equal-remainder-difference-0, 23 equal-remainder-difference-0-of

f, 23 equal-remainder-plus-0, 22 equal-remainder-plus-0-off, 124 equal-remainder-plus-0-off1, 1176 equal-remainder-plus-0-on, 1087 equal-remainder-plus-0-proof, 22 equal-remainder-plus-0-proof-of

f, 124 f1, 1176

equal-remainder-plus-0-proof-on, 1087 equal-remainder-plus-remainder, 22 equal-remainder-plus-remainder-

off, 22 equal-remainder-plus-remainder-p

roof, 22 roof-off, 124 roof-off1, 1175 roof-on, 1087

equal-sub1-0, 13 equal-sub1-0-off, 127 equal-sub1-0-off1, 1179 equal-sub1-0-on, 1090 equal-sub1-plus-x-x, 1214 equal-times-0, 13 equal-times-0-off, 127 equal-times-0-off1, 1179 equal-times-0-on, 1091 equal-times-1, 13 equal-times-1-off, 127 equal-times-1-off1, 1179 equal-times-1-on, 1090 equal-times-arg1, 17 equal-times-arg1-off, 17 equal-times-bridge, 17 equal-times-bridge-off, 17 equality-of-three-element-lists, 448 err-and, 251, 277–284, 286, 289, 290,

292, 294, 305, 311–313, 317, 334, 338, 358, 360–362, 364– 371, 373, 377

err-and-off, 251 error-entry, 250, 340 error-entry-off, 251 error-label, 250, 335 eval$-append, 954 eval$-append-2, 954 eval$-append-2-off, 995 eval$-append-2-off1, 1149 eval$-append-2-on, 1060 eval$-append-off, 995 eval$-append-off1, 1149 eval$-append-on, 1060 eval$-cancel-ineg-aux-fn, 41, 42 eval$-cancel-ineg-aux-fn-off, 113 eval$-cancel-ineg-aux-fn-off1, 1165 eval$-cancel-ineg-aux-fn-on, 1076 eval$-cancel-ineg-aux-is-its-f

n, 42 n-off, 113 n-off1, 1165 n-on, 1076

eval$-cancel-iplus, 45 eval$-cancel-iplus-off, 63 eval$-disjoin-equalities-with-

0-off, 103 0-off1, 1155 0-on, 1066 0, 83

eval$-equal, 16 eval$-equal-itimes-tree-itimes

-fringe-0, 58 -fringe-0-off, 65

eval$-equal-off, 16 eval$-equal-off1, 125 eval$-equal-off2, 1177 eval$-equal-on, 58 eval$-equal-on1, 1088 eval$-equal-times-tree-bagdiff, 20

-off, 20 eval$-if, 17 eval$-if-off, 17 eval$-ilessp-iplus-tree-no-fix

-int, 48 -int-off, 64

eval$-iplus, 47 eval$-iplus-list-bagdiff, 46 eval$-iplus-list-bagdiff-off, 63 eval$-iplus-list-car-remove-ine

gs, 92 gs-off, 101 gs-off1, 1153 gs-on, 1064 eval$-iplus-list-cdr-remove-ine

gs, 92 gs-off, 101 gs-off1, 1153 gs-on, 1064

eval$-iplus-list-delete, 46 eval$-iplus-list-delete-off, 112 eval$-iplus-list-delete-off1, 1164 eval$-iplus-list-delete-on, 1075 eval$-iplus-off, 63 eval$-iplus-tree, 43 eval$-iplus-tree-off, 63 eval$-iplus-tree-rec, 43 eval$-iplus-tree-rec-off, 63 eval$-itimes-tree, 55 eval$-itimes-tree-ineg, 67 eval$-itimes-tree-ineg-off, 105 eval$-itimes-tree-ineg-off1, 1157 eval$-itimes-tree-ineg-on, 1068 eval$-itimes-tree-no-fix-int-1, 60

-off, 65 eval$-itimes-tree-no-fix-int-2, 60

-off, 65 eval$-itimes-tree-off, 64 eval$-itimes-tree-rec, 55 eval$-itimes-tree-rec-off, 64 eval$-lessp, 16 eval$-lessp-off, 16 eval$-lessp-times-tree-bagdiff, 19

-off, 19 eval$-list-append, 43 eval$-list-append-off, 112 eval$-list-append-off1, 1164 eval$-list-append-on, 1075 eval$-list-bagint-0, 79 eval$-list-bagint-0-for-ilessp, 82

-off, 103 -off1, 1155 -on, 1067

eval$-list-bagint-0-implies-eq ual, 79 ual-for-ilessp, 82 ual-for-ilessp-lemma, 82 ual-for-ilessp-lemma-off, 103 ual-for-ilessp-lemma-off1, 1155 ual-for-ilessp-lemma-on, 1067 ual-for-ilessp-off, 87 ual-off, 86

eval$-list-bagint-0-off, 86 eval$-list-cons, 41 eval$-list-cons-off, 113 eval$-list-cons-off1, 1165 eval$-list-cons-on, 1076 eval$-list-nlistp, 41 eval$-list-nlistp-off, 113 eval$-list-nlistp-off1, 1165 eval$-list-nlistp-on, 1076 eval$-litatom, 41 eval$-litatom-off, 113 eval$-litatom-off1, 1165 eval$-litatom-on, 1076 eval$-make-cancel-itimes-equalit

y, 58 y-1, 58 y-1-off, 65 y-2, 58 y-2-off, 65 y-off, 64

eval$-make-cancel-itimes-inequ ality, 61 ality-off, 65

eval$-off, 41 eval$-on, 97 eval$-or, 16 eval$-or-off, 16 eval$-other, 41 eval$-other-off, 113 eval$-other-off1, 1165 eval$-other-on, 1076 eval$-pairlist-cons, 954 eval$-pairlist-cons-off, 995 eval$-pairlist-cons-off1, 1149 eval$-pairlist-cons-on, 1060 eval$-plus-tree-append, 9 eval$-plus-tree-append-off, 9 eval$-quote, 9 eval$-quote-off, 9 eval$-quote-off1, 129 eval$-quote-off2, 1180 eval$-quote-on, 41 eval$-quote-on1, 1092 eval$-quotient, 16 eval$-quotient-off, 16 eval$-quotient-times-tree-bagdi

ff, 29 ff-off, 29

eval$-times, 16 eval$-times-member, 17 eval$-times-member-off, 17 eval$-times-off, 16 execute-fm9001, 559 exp, 29–32, 1096–1102, 1192, 1193,

1196–1198, 1200, 1218 exp-0-arg1, 31 exp-0-arg1-off, 119 exp-0-arg1-off1, 1171 exp-0-arg1-on, 1082 exp-0-arg2, 31 exp-0-arg2-off, 119 exp-0-arg2-off1, 1171 exp-0-arg2-on, 1082 exp-1-arg1, 31 exp-1-arg1-off, 119 exp-1-arg1-off1, 1171 exp-1-arg1-on, 1082 exp-2-l-1<=exp-2-l, 1198 exp-add1, 30 exp-add1-off, 119 exp-add1-off1, 1171 exp-add1-on, 1082 exp-difference, 31 exp-difference-off, 119 exp-difference-off1, 1170 exp-difference-on, 1082 exp-exp, 31 exp-exp-off, 119 exp-exp-off1, 1171 exp-exp-on, 1082 exp-linear-bounds, 1198 exp-off, 120 exp-off1, 1172 exp-on, 1083 exp-plus, 30 exp-plus-off, 119 exp-plus-off1, 1171 exp-plus-on, 1082 exp-times, 31 exp-times-off, 119 exp-times-off1, 1171 exp-times-on, 1082 exp-zero, 30 exp-zero-off, 119 exp-zero-off1, 1171 exp-zero-on, 1083 exp2, 550, 558 expand-*-connectives, 132 expand-*-connectives-off, 133 expand-f-functions, 194 expand-f-functions-off, 196 expand-top-level-dual-eval-0-ca

lls, 240 expand-top-level-dual-eval-2-ca

lls, 241 exponentiation, 31 extend-immediate*, 746–748 extend-immediate*-off, 747 extend-immediate*$destructure, 747 extend-immediate*$destructure-

off, 747 extend-immediate$netlist, 748, 776 extend-immediate$value, 749 extend-immediate$value-off, 749 extend-immediate&, 748, 749, 776 extend-immediate&-off, 748 external-loading, 271 external-loading-off, 271 externalize-parents, 298, 317, 334,

339 externalize-parents-off, 298 extract-names, 298, 311, 315, 316 extract-names-off, 298 extract-names-simple, 269, 270 extract-names-simple-off, 270

f-and, 192–199, 201, 391, 392, 437, 438, 444, 488, 509, 517, 523, 566, 567, 670, 676, 678, 933, 938, 939

f-and-monotone, 933 f-and-monotone-off, 1055 f-and-monotone-on, 1144 f-and-off, 936 f-and-off1, 1147 f-and-on, 1057 f-and-rewrite, 196 f-and3, 192, 194, 197, 199, 201, 392,

500, 676–678, 739, 933, 940 f-and3-monotone, 933 f-and3-monotone-off, 1055 f-and3-monotone-on, 1144 f-and3-off, 936 f-and3-off1, 1147 f-and3-on, 1057 f-and4, 192, 194, 197, 199, 201, 392, 592, 676, 933, 940

f-and4-monotone, 933 f-and4-monotone-off, 1055 f-and4-monotone-on, 1144 f-and4-off, 936 f-and4-off1, 1147 f-and4-on, 1057 f-buf, 192, 194, 196–198, 200, 395,

400, 403, 404, 409–411, 415, 419, 456, 739, 740, 761–764, 782, 784, 793, 794, 796, 802– 805, 811–815, 817, 819, 888, 890, 891, 933, 938, 943, 946– 951, 1004 f-buf-delete-lemmas, 197 f-buf-delete-lemmas-off, 198 f-buf-lemma, 196 f-buf-monotone, 933 f-buf-monotone-off, 1055 f-buf-monotone-on, 1144 f-buf-off, 936 f-buf-off1, 1147 f-buf-on, 1057 f-buf-preserves-good-s, 1004 f-buf-preserves-good-s-off, 1039 f-buf-preserves-good-s-on, 1128 f-buf-type-set, 938 f-buf-type-set-off, 1053 f-buf-type-set-on, 1143 f-equv, 194, 195, 197–199, 201, 393,

463, 464, 467, 469, 488, 936, 940

f-equv-monotone, 936 f-equv-monotone-off, 1054 f-equv-monotone-on, 1143 f-equv-off, 937 f-equv-off1, 1148 f-equv-on, 1058 f-equv3, 194, 195, 197, 199, 201, 393,

501, 936, 940 f-equv3-monotone, 936 f-equv3-monotone-off, 1054 f-equv3-monotone-on, 1143 f-equv3-off, 937 f-equv3-off1, 1148 f-equv3-on, 1059 f-gate-threefix-congruence-lemm

as, 198 as-off, 200 as$help, 198 as$help-off, 198

f-gates, 200 f-gates=b-gates, 200 f-if, 194–196, 198, 200, 202, 203, 393,

400, 415, 439, 440, 521, 566, 744, 763, 782, 794, 804, 813, 936, 938, 941, 947, 948, 1004

f-if-monotone, 936 f-if-monotone-off, 1054 f-if-monotone-on, 1143 f-if-off, 937 f-if-off1, 1148 f-if-on, 1059 f-if-preserves-good-s, 1004 f-if-preserves-good-s-off, 1039 f-if-preserves-good-s-on, 1128 f-if-rewrite, 196 f-nand, 192, 195, 197, 198, 200, 391,

393, 408–410, 456, 488, 491, 496, 498, 500, 501, 517, 520, 521, 523, 560, 563, 566, 571– 573, 676–678, 739, 740, 761, 762, 781, 782, 793, 802, 803, 811, 812, 933, 939, 941, 948– 950 f-nand-monotone, 933 f-nand-monotone-off, 1055 f-nand-monotone-on, 1144 f-nand-off, 936 f-nand-off1, 1147 f-nand-on, 1058 f-nand3, 192, 195, 197, 198, 201, 394,

488, 491, 496–498, 517, 520, 521, 563, 571–573, 677, 678, 934, 941 f-nand3-monotone, 934 f-nand3-monotone-off, 1055 f-nand3-monotone-on, 1144 f-nand3-off, 936 f-nand3-off1, 1147 f-nand3-on, 1058 f-nand4, 192, 195, 197, 198, 201, 394,

488, 491, 517, 563, 580, 581, 676–678, 934, 941

f-nand4-monotone, 934 f-nand4-monotone-off, 1055 f-nand4-monotone-on, 1144 f-nand4-off, 936 f-nand4-off1, 1147 f-nand4-on, 1058 f-nand5, 193, 195, 197–199, 201, 394, 677, 934, 942

f-nand5-monotone, 934 f-nand5-monotone-off, 1055 f-nand5-monotone-on, 1144 f-nand5-off, 937 f-nand5-off1, 1147 f-nand5-on, 1058 f-nand6, 193, 195, 197, 199, 201, 395, 677, 934, 942

f-nand6-monotone, 934 f-nand6-monotone-off, 1055 f-nand6-monotone-on, 1144 f-nand6-off, 937 f-nand6-off1, 1147 f-nand6-on, 1058 f-nand8, 193, 195, 197, 199, 201, 395,

934, 942 f-nand8-monotone, 934 f-nand8-monotone-off, 1055 f-nand8-monotone-on, 1144 f-nand8-off, 937 f-nand8-off1, 1147 f-nand8-on, 1058 f-nor, 193–195, 197, 199–201, 391,

396, 456, 463, 464, 486, 488, 491, 520, 521, 565, 571–573, 580, 581, 935, 938, 939, 943

f-nor-monotone, 935 f-nor-monotone-off, 1054 f-nor-monotone-on, 1144 f-nor-off, 937 f-nor-off1, 1147 f-nor-on, 1058 f-nor3, 193, 195, 198, 200, 201, 396,

459, 463, 464, 486, 581, 935, 943

f-nor3-monotone, 935 f-nor3-monotone-off, 1054 f-nor3-monotone-on, 1144 f-nor3-off, 937 f-nor3-off1, 1147 f-nor3-on, 1058 f-nor4, 193, 195, 198, 200, 201, 396,

580, 581, 935, 943 f-nor4-monotone, 935 f-nor4-monotone-off, 1054 f-nor4-monotone-on, 1144 f-nor4-off, 937 f-nor4-off1, 1148 f-nor4-on, 1058 f-nor5, 193, 195, 198, 200, 202, 396,

935, 944 f-nor5-monotone, 935 f-nor5-monotone-off, 1054 f-nor5-monotone-on, 1144 f-nor5-off, 937 f-nor5-off1, 1148 f-nor5-on, 1058 f-nor6, 193, 195, 198, 200, 202, 397,

935, 944 f-nor6-monotone, 935 f-nor6-monotone-off, 1054 f-nor6-monotone-on, 1143 f-nor6-off, 937 f-nor6-off1, 1148 f-nor6-on, 1058 f-nor8, 193, 195, 198, 200, 202, 397,

935, 944 f-nor8-monotone, 935 f-nor8-monotone-off, 1054 f-nor8-monotone-on, 1143 f-nor8-off, 937 f-nor8-off1, 1148 f-nor8-on, 1058 f-not, 192–198, 200, 395, 397, 398,

403, 404, 409, 411, 456, 458, 463, 464, 475, 488, 491, 496, 497, 501, 517, 520, 521, 523, 559, 560, 563, 565–567, 571– 573, 581, 670, 676–678, 717, 755, 756, 759, 761–764, 781, 782, 784, 793, 794, 796, 802, 803, 805, 811–814, 933, 943, 945, 947–949, 951

f-not-f-not=f-buf, 197 f-not-f-not=f-buf-off, 197 f-not-monotone, 933 f-not-monotone-off, 1055 f-not-monotone-on, 1144 f-not-off, 936 f-not-off1, 1147 f-not-on, 1057 f-not-rewrite, 196 f-or, 193, 195–199, 201, 202, 391,

398, 438, 444, 456, 468, 472, 497, 523, 562, 670, 676–678, 763, 782, 794, 804, 813, 934, 939, 945

f-or-monotone, 934 f-or-monotone-off, 1055 f-or-monotone-on, 1144 f-or-off, 937 f-or-off1, 1147 f-or-on, 1058 f-or-rewrite, 196 f-or3, 193, 195, 197, 199, 201, 398,

520, 521, 523, 934, 945 f-or3-monotone, 934 f-or3-monotone-off, 1054 f-or3-monotone-on, 1144 f-or3-off, 937 f-or3-off1, 1147 f-or3-on, 1058 f-or4, 193, 195, 197, 199, 201, 399,

591, 934, 946 f-or4-monotone, 934 f-or4-monotone-off, 1054 f-or4-monotone-on, 1144 f-or4-off, 937 f-or4-off1, 1147 f-or4-on, 1058 f-pullup, 194, 196, 197, 204, 409,

761–764, 802–805, 812–814, 936, 949

f-pullup-monotone, 936 f-pullup-monotone-off, 1054 f-pullup-monotone-on, 1143 f-pullup-off, 938 f-pullup-off1, 1148 f-pullup-on, 1059 f-pullup-rewrite, 197 f-xor, 193–195, 197–199, 201, 202,

399, 437, 438, 463, 464, 491, 520, 521, 562, 935, 946

f-xor-monotone, 935 f-xor-monotone-off, 1054 f-xor-monotone-on, 1143 f-xor-off, 937 f-xor-off1, 1148 f-xor-on, 1058 f-xor3, 193, 195, 197, 199, 201, 399,

936, 946 f-xor3-monotone, 936 f-xor3-monotone-off, 1054 f-xor3-monotone-on, 1143 f-xor3-off, 937 f-xor3-off1, 1148 f-xor3-on, 1058 f$all-t-regs-address, 592, 670 f$all-t-regs-address-off, 592 f$all-t-regs-address=set-some=

flags, 592 f$alu-cell, 501–503, 508 f$alu-cell-off, 501 f$alu-cell-v-threefix-mpg, 503 f$alu-cell=alu-cell, 501 f$ao2, 194, 559, 560 f$b-store-resultp, 561–563, 670 f$b-store-resultp-off, 562 f$b-store-resultp=b-store-resu

ltp, 562 f$carry-in-help, 496–498 f$carry-in-help-off, 497 f$carry-in-help=carry-in-help, 497 f$carry-out-help, 517–519, 529 f$carry-out-help-off, 517 f$carry-out-help=carry-out-help, 519 f$control-let, 670, 673, 717, 718 f$control-let-off, 670 f$control-let=control-let, 673 f$core-alu, 529, 531, 541, 761, 763,

781, 782, 784, 792–794, 796, 801, 802, 804, 811, 813

f$core-alu-off, 530 f$core-alu=core-alu, 531 f$cv, 702, 704, 715, 718 f$cv-off, 701 f$cv=cv, 701 f$dec-pass, 475, 763, 782, 794, 804,

813 f$dec-pass-off, 475 f$dec-pass=dec-or-pass, 475 f$decode-5, 571, 578, 717 f$decode-5-off, 573 f$decode-5=decode-5, 578 f$decode-gen, 491, 493 f$decode-gen-off, 491 f$decode-gen=decode-gen, 493 f$decode-mode, 486, 487, 494 f$decode-mode-off, 486 f$decode-mode=decode-mode, 487 f$decode-prop, 488, 490, 493 f$decode-prop-off, 488 f$decode-prop=decode-prop, 490 f$decode-reg-mode, 565, 670 f$decode-reg-mode-as-reg-mode, 565 f$decode-reg-mode-off, 565 f$encode-32, 580, 584, 585, 588, 589,

591 f$encode-32-off, 581 f$encode-32=encode-32, 584 f$extend-immediate, 748, 749, 761–

763, 781, 782, 793, 794, 802– 804, 811–813

f$extend-immediate-off, 748 f$extend-immediate=extend-imme

diate, 748 f$fast-zero, 459, 461, 530 f$fast-zero-off, 459 f$fast-zero=tr-or-nor, 459 f$fast-zero=v-zerop, 459 f$full-adder, 438 f$full-adder=full-adder, 438 f$g-cell, 500, 501 f$g-cell-off, 500 f$g-cell=g-cell, 500 f$mpg, 493–495 f$mpg-off, 494 f$mpg=mpg, 494 f$next-cntl-state, 717–719, 722, 764,

783, 794, 804, 814 f$next-cntl-state-off, 718 f$next-cntl-state=next-cntl-st

ate, 719 f$next-state, 676, 679, 689, 690, 718 f$next-state-off, 678 f$next-state=next-state, 678 f$overflow-help, 520, 522, 523, 530 f$overflow-help-off, 521 f$overflow-help=overflow-help, 522 f$p-cell, 498, 499, 501 f$p-cell-off, 498 f$p-cell=p-cell, 499 f$read-regs, 739, 740, 761–763, 781,

782, 793, 794, 802–804, 811– 813 f$read-regs-off, 739 f$read-regs=read-regs, 739 f$select-op-code, 566, 567 f$select-op-code-off, 566 f$select-op-code-selects, 566 f$set-some-flags, 591, 592, 670 f$set-some-flags-off, 591 f$set-some-flags=set-some=flag

s, 591 f$shift-or-buf, 525, 526, 529, 530 f$shift-or-buf-cntl, 523, 525 f$shift-or-buf-cntl-off, 524 f$shift-or-buf-cntl=shift-or-b

uf-cntl, 525 f$shift-or-buf-off, 525 f$shift-or-buf=shift-or-buf, 526 f$store-resultp-mux, 559, 561, 562 f$store-resultp-mux-off, 560 f$store-resultp-mux=store-resu

ltp-mux, 561 f$t-carry, 444, 445, 508–510, 515, 529 f$t-carry-off, 444 f$t-carry=t-carry, 444 f$tv-alu-help, 508–511, 515–517, 529,

530 f$tv-alu-help-length, 510 f$tv-alu-help-off, 510 f$tv-alu-help-v-threefix-mpg, 516 f$tv-alu-help=tv-alu-help, 511 f$tv-dec-pass-ng, 467–469, 472, 473,

475 f$tv-dec-pass-ng-length, 468 f$tv-dec-pass-ng-length-1, 468 f$tv-dec-pass-ng-off, 468 f$tv-dec-pass-ng=tv-dec-pass-n

g, 469

g$super-crock, 469 g$super-crock-off, 469

f$tv-zerop, 458, 459, 462

f$tv-zerop-off, 458

f$tv-zerop=v-zerop, 459 f$unary-op-code-p, 563, 564, 670 f$unary-op-code-p-off, 563 f$unary-op-code-p=unary-op-code

-p, 564 f$update-flags, 744, 745, 761, 781,

793, 802, 811 f$update-flags-off, 744 f$update-flags=update-flags, 745 f$v-equal, 462, 739 f$v-equal-off, 462 f$v-equal=equal*, 462 f$v-if-f-4, 567, 568 f$v-if-f-4-off, 567 f$v-if-f-4=fv-if, 568 f$v-inc4, 463, 464 f$v-inc4-off, 463 f$v-inc4=v-inc4, 464 f$v-inc4$v, 464 f$v-inc4$v-off, 464 f$v-inc4$v=v-inc, 464 f$write-regs, 740, 741, 761, 781, 792,

801, 811 f$write-regs-off, 740 f$write-regs=write-regs, 741 fanout-32*, 569, 570 fanout-32$netlist, 570 fanout-32$value, 570 fanout-32$value-off, 571 fanout-32&, 570 fanout-32&-off, 570 fanout-4*, 568 fanout-4$netlist, 568, 714 fanout-4$value, 568 fanout-4$value-off, 568 fanout-4&, 568, 714 fanout-4&-off, 568 fanout-5*, 569 fanout-5$netlist, 569, 721 fanout-5$value, 569 fanout-5$value-off, 569 fanout-5&, 569, 721 fanout-5&-off, 569 fast-zero*, 459–461 fast-zero*-off, 460 fast-zero*$destructure, 460 fast-zero*$destructure-off, 460 fast-zero$netlist, 460, 461, 541 fast-zero$value, 461 fast-zero&, 460, 461, 540 fast-zero&-off, 460 fd1-monotone, 947 fd1-monotone-off, 1046 fd1-monotone-on, 1135 fd1-preserves-good-s, 1006 fd1-preserves-good-s-off, 1036 fd1-preserves-good-s-on, 1125 fd1$netlist, 403, 438 fd1$state, 414 fd1$state-off, 415 fd1$value, 403 fd1$value-off, 403 fd1&, 403, 414, 439 fd1&-off, 403 fd1s-monotone, 948 fd1s-monotone-off, 1046 fd1s-monotone-on, 1135 fd1s-preserves-good-s, 1006 fd1s-preserves-good-s-off, 1036 fd1s-preserves-good-s-on, 1125 fd1s$netlist, 403, 477, 739, 776 fd1s$state, 415 fd1s$state-off, 415 fd1s$value, 403 fd1s$value-off, 403 fd1s&, 403, 415, 476–478, 738, 775 fd1s&-off, 403 fd1slp-monotone, 948 fd1slp-monotone-off, 1045 fd1slp-monotone-on, 1135 fd1slp-preserves-good-s, 1006 fd1slp-preserves-good-s-off, 1035 fd1slp-preserves-good-s-on, 1125 fd1slp$netlist, 404, 480, 744, 776 fd1slp$state, 415 fd1slp$state-off, 415 fd1slp$value, 404 fd1slp$value-off, 404 fd1slp&, 404, 415, 480, 481, 744,

775 fd1slp&-off, 404 fd1sp-monotone, 948 fd1sp-monotone-off, 1045 fd1sp-monotone-on, 1135 fd1sp-preserves-good-s, 1006 fd1sp-preserves-good-s-off, 1036 fd1sp-preserves-good-s-on, 1125 fd1sp$netlist, 404 fd1sp$state, 415 fd1sp$state-off, 415 fd1sp$value, 404 fd1sp$value-off, 404 fd1sp&, 403, 404, 415 fd1sp&-off, 404 fetch0->fetch0$sim0, 887 fetch0->fetch0$sim1, 889 fetch0->fetch0$sim2, 890 fetch0$step0, 814 fetch0$step1, 816 fetch0$step2, 817 fetch1->decode$sim, 891 fetch1$step, 819 fetch2$step, 821 fetch3$induction, 874, 875 fetch3$progress, 876 fetch3$progress-help, 875 fetch3$step0, 823 fetch3$step1, 825 final-state, 1013, 1014, 1016 final-state-off, 1031 final-state-okp, 1014 final-state-okp-off, 1031 final-state-okp-on, 1120 final-state-on, 1120 firstn, 139–141, 145, 146, 151, 159–

162, 167, 168, 452, 459, 460, 473, 516, 557, 1097, 1098

firstn-add1-cons, 1098 firstn-add1-cons-off, 1114 firstn-append, 140 firstn-bottom, 140 firstn-length, 1098 firstn-length-off, 1114 firstn-make-list, 145 firstn-nat-to-v, 160 firstn-nlistp, 1098 firstn-nlistp-off, 1114 firstn-off, 139 firstn-v-not, 159 firstn-v-not-off, 159 firstn-zerop, 1098 firstn-zerop-off, 1114 fix-breadth-tree-stack, 191 fix-dependent-drs, 388 fix-dependent-drs-off, 388 fix-dependent-lds, 268, 273, 274 fix-dependent-lds-off, 268 fix-dependent-types, 259–261, 263 fix-dependent-types-off, 259 fix-drives, 270, 274 fix-drives-off, 270 fix-int, 35–39, 41, 42, 46, 47, 49, 50,

52–54, 57–59, 62, 67, 78– 80, 82, 83, 95, 1102, 1219

fix-int-eval$-itimes-tree-rec, 67 fix-int-eval$-itimes-tree-rec-

off, 105 off1, 1157 on, 1069 fix-int-fix-int, 38 fix-int-fix-int-off, 115 fix-int-fix-int-off1, 1166 fix-int-fix-int-on, 1078 fix-int-iabs, 38 fix-int-iabs-off, 115 fix-int-iabs-off1, 1166 fix-int-iabs-on, 1078 fix-int-idifference, 38 fix-int-idifference-off, 115 fix-int-idifference-off1, 1166 fix-int-idifference-on, 1078 fix-int-idiv, 54 fix-int-idiv-off, 107 fix-int-idiv-off1, 1159 fix-int-idiv-on, 1071 fix-int-imod, 54 fix-int-imod-off, 107 fix-int-imod-off1, 1159 fix-int-imod-on, 1071 fix-int-ineg, 38 fix-int-ineg-off, 115 fix-int-ineg-off1, 1166 fix-int-ineg-on, 1078 fix-int-int-to-v, 1219 fix-int-iplus, 38 fix-int-iplus-off, 115 fix-int-iplus-off1, 1166 fix-int-iplus-on, 1078 fix-int-iquo, 54 fix-int-iquo-off, 107 fix-int-iquo-off1, 1159 fix-int-iquo-on, 1070 fix-int-iquotient, 54 fix-int-iquotient-off, 107 fix-int-iquotient-off1, 1159 fix-int-iquotient-on, 1071 fix-int-irem, 54 fix-int-irem-off, 107 fix-int-irem-off1, 1159 fix-int-irem-on, 1070 fix-int-iremainder, 54 fix-int-iremainder-off, 107 fix-int-iremainder-off1, 1159 fix-int-iremainder-on, 1071 fix-int-itimes, 38 fix-int-itimes-off, 114 fix-int-itimes-off1, 1166 fix-int-itimes-on, 1078 fix-int-numberp, 1102 fix-int-numberp-off, 1111 fix-int-off, 37 fix-int-remover, 38 fix-int-remover-off, 115 fix-int-remover-off1, 1167 fix-int-remover-on, 1078 fix-loadings, 270, 274 fix-loadings-off, 270 flags, 545, 547, 559, 761, 764, 921,

922, 925 flags*, 742–744 flags*-off, 744 flags*$destructure, 743 flags*$destructure-off, 744 flags-hyps, 591, 592 flags-interpretation-int-add-gt

-0, 1207 flags-interpretation-int-add-ne

gative, 1207 flags-interpretation-int-add-ove

rflow, 1207 flags-interpretation-int-addc-gt

-0, 1206 flags-interpretation-int-addc-ne

gative, 1206 flags-interpretation-int-addc-ove

rflow, 1205 flags-interpretation-int-asr-ca

rry, 1214 flags-interpretation-int-asr-gt

-0, 1215 flags-interpretation-int-asr-ne

gative, 1215 flags-interpretation-int-asr-ove

rflow, 1216 flags-interpretation-int-asr-ze

ro, 1214 flags-interpretation-int-dec-gt

-0, 1211 flags-interpretation-int-dec-ne

gative, 1210 flags-interpretation-int-dec-ove

rflow, 1210 flags-interpretation-int-dec-ze

ro, 1210 flags-interpretation-int-inc-gt

-0, 1205 flags-interpretation-int-inc-ne

gative, 1205 flags-interpretation-int-inc-ove

rflow, 1204 flags-interpretation-int-inc-ze

ro, 1204 flags-interpretation-int-move, 1200 flags-interpretation-int-neg-gt

-0, 1209 flags-interpretation-int-neg-ne

gative, 1208 flags-interpretation-int-neg-ove

rflow, 1208 flags-interpretation-int-neg-ze

ro, 1209 flags-interpretation-int-sub-gt

-0, 1213 flags-interpretation-int-sub-ne

gative, 1213 flags-interpretation-int-sub-ove

rflow, 1212 flags-interpretation-int-subb-gt

-0, 1212 flags-interpretation-int-subb-ne

gative, 1211 flags-interpretation-int-subb-ove

rflow, 1211 flags-interpretation-lsr, 1190 flags-interpretation-nat-add, 1192 flags-interpretation-nat-addc, 1192 flags-interpretation-nat-dec, 1193 flags-interpretation-nat-inc, 1192 flags-interpretation-nat-lsr-ca

rry, 1196 flags-interpretation-nat-lsr-ze

ro, 1196 flags-interpretation-nat-move, 1191 flags-interpretation-nat-sub, 1195 flags-interpretation-nat-subb-c

arry, 1194 flags-interpretation-nat-subb-hi

gher, 1195 flags-interpretation-ror, 1190 flags-interpretation-sub, 1189 flags-interpretation-xor, 1191 flags-off, 545 flags-theory, 543 flags$netlist, 744, 776 flags$partial-state, 746 flags$partial-state-help, 746 flags$partial-state-help-off, 746 flags$partial-state-off, 746 flags$state, 745 flags$state-help, 745 flags$state-help-off, 745 flags$state-off, 745 flags$value, 744 flags$value-off, 744 flags&, 744–746, 775 flags&-off, 744 flatten-list, 246, 253, 256, 436 flatten-list-off, 246 fm9001, 547, 559, 925, 927, 928, 1021,

1023 fm9001-alu-operation, 545, 546 fm9001-external-input-accessors, 761 fm9001-fetch, 546, 547 fm9001-hardware-state-accessors, 760 fm9001-interpreter, 547, 924–926, 1014,

1026 fm9001-interpreter-correct, 924 fm9001-interpreter-correct$map

-down, 926 fm9001-interpreter-off, 547 fm9001-intr, 547 fm9001-intr-off, 547 fm9001-machine-statep, 926, 1017 fm9001-machine-statep-p-map-up-i

nitialized-machine-state, 1017 nitialized-machine-state-off, 1029 nitialized-machine-state-on, 1118

fm9001-next-state, 761, 764, 765, 806,

807, 809, 811 fm9001-next-state-off, 764 fm9001-off, 547 fm9001-operand-a, 546, 547 fm9001-operand-b, 545, 546 fm9001-preserves-chip-system-inv

ariant, 807 fm9001-state-as-a-list, 765 fm9001-state-structure, 765, 809, 919,

921, 924–927, 1012, 1014 fm9001-state-structure-unknown-

state, 1012 state-off, 1032 state-on, 1121 fm9001-state-structure$inducti

on, 765 fm9001-state-structure$step, 765 fm9001-statep, 926–928, 1014, 1021 fm9001-statep-implies-fm9001-st

ate-structure, 927 fm9001-statep-implies-macrocycle

-invariant, 927 -invariant-lemma1, 927

fm9001-statep-implies-memory-ok -p-instance, 1021 -p-instance-off, 1027 -p-instance-on, 1116

fm9001-statep-map-up-final-state, 1014 -off, 1030 -on, 1120

fm9001-step, 547, 922, 924 fm9001-step*, 922, 924 fm9001-step*-lemma, 922 fm9001-step*-off, 922 fm9001-step-off, 547 fm9001-step-theory, 873 fm9001=chip-system, 927 fm9001=chip-system-lemma1, 927 fm9001=chip-system-summary, 928 fm9001=chip-system-true-after-re

set, 1022 set-lemma, 1021 set-lemma-off, 1027 set-lemma-on, 1116 set-off, 1027 set-on, 1116

fm9001=fm9001-interpreter, 925 for-final-1-of-reset-sequence-c

hip, 1016 hip-off, 1016 hip-off1, 1115 hip-on, 1063

fourfix, 150, 165, 194, 196 fourp, 150, 938, 1017–1020 fourp-f-buf, 938 fourp-f-buf-off, 1053 fourp-f-buf-on, 1143 fourp-f-if, 938 fourp-f-if-off, 1053 fourp-f-if-on, 1143 fourp-implies-s-approx-is-b-app

rox, 938 rox-off, 972 rox-off1, 1053 rox-on, 995 rox-on1, 1143

ft-buf, 194–196, 205, 408, 409, 411, 439, 440, 761–764, 796, 802– 805, 812–814, 936, 949, 951

ft-buf-monotone, 936 ft-buf-monotone-off, 1054 ft-buf-monotone-on, 1143 ft-buf-off, 937 ft-buf-off1, 1148 ft-buf-on, 1059 ft-buf-rewrite, 196 ft-wire, 194, 196, 203, 409, 439, 440,

936, 949 ft-wire-monotone, 936 ft-wire-monotone-off, 1054 ft-wire-monotone-on, 1143 ft-wire-off, 938 ft-wire-off1, 1148 ft-wire-on, 1059 ft-wire-rewrite, 196 full-adder, 438 full-adder*, 437, 438 full-adder$netlist, 438, 441 full-adder$value, 438 full-adder&, 438, 441, 442 full-adder&-off, 438 function-call-ok, 355, 368, 371, 372 function-call-ok-off, 355 function-properties, 343, 344 function-properties-off, 343 function-synonyms, 337, 338 function-synonyms-off, 337 function-t-wire-ins, 336, 337 function-t-wire-ins-off, 337 fv-if, 203, 452, 481, 482, 525, 568,

739, 740, 748, 762, 763, 781, 782, 793, 794, 802–804, 812, 813

fv-if-off, 203 fv-if-rewrite, 203 fv-if-rewrite-off, 203 fv-if-v-threefix, 203 fv-if-when-boolp-c, 203 fv-if-when-bvp, 203 fv-or, 202, 430, 717 fv-or-off, 202 fv-or=v-or, 202 fv-shift-right, 204, 205, 523, 525 fv-shift-right-off, 204 fv-shift-right=v-shift-right, 204 fv-xor, 202, 203, 432, 462 fv-xor-off, 202 fv-xor=v-xor, 203

g*1*all-input-types-off, 357 g*1*all-module-props-off, 295 g*1*all-xs-off, 1029 g*1*all-xs-on, 1118 g*1*alu-dec-op-off, 486 g*1*alu-inc-op-off, 486 g*1*and-not-zerop-tree-off, 125 g*1*and-not-zerop-tree-off1, 1177 g*1*and-not-zerop-tree-on, 1088 g*1*b-approx-off, 1057 g*1*b-approx-on, 1146 g*1*b-knownp-off, 928 g*1*b-knownp-off1, 994 g*1*b-knownp-off2, 1149 g*1*b-knownp-on, 953 g*1*b-knownp-on1, 1059 g*1*b-to-nat-off, 1115 g*1*bagdiff-off, 131 g*1*bagdiff-off1, 1182 g*1*bagdiff-on, 1094 g*1*bagint-off, 131 g*1*bagint-off1, 1182 g*1*bagint-on, 1094 g*1*cancel-difference-plus-off, 128 g*1*cancel-difference-plus-off1, 1180 g*1*cancel-difference-plus-on, 1091 g*1*cancel-equal-plus-off, 128 g*1*cancel-equal-plus-off1, 1180 g*1*cancel-equal-plus-on, 1092 g*1*cancel-equal-times-off, 125 g*1*cancel-equal-times-off1, 1176 g*1*cancel-equal-times-on, 1088 g*1*cancel-factors-0-off, 103 g*1*cancel-factors-0-off1, 1155 g*1*cancel-factors-0-on, 1066 g*1*cancel-factors-ilessp-0-off, 102

1, 1154 g*1*cancel-factors-ilessp-0-on, 1065 g*1*cancel-ineg-aux-off, 113 g*1*cancel-ineg-aux-off1, 1165 g*1*cancel-ineg-aux-on, 1077 g*1*cancel-ineg-off, 113 g*1*cancel-ineg-off1, 1165 g*1*cancel-ineg-on, 1077 g*1*cancel-ineg-terms-from-equa lity-expanded-off, 101 lity-expanded-off1, 1154 lity-expanded-on, 1065 lity-off, 101 lity-off1, 1154 lity-on, 1065

g*1*cancel-ineg-terms-from-ineq uality-expanded-off, 100 uality-expanded-off1, 1153 uality-expanded-on, 1064 uality-off, 101 uality-off1, 1153 uality-on, 1064

g*1*cancel-iplus-ilessp-1-off, 111 g*1*cancel-iplus-ilessp-1-off1, 1163 g*1*cancel-iplus-ilessp-1-on, 1075 g*1*cancel-iplus-ilessp-off, 111 g*1*cancel-iplus-ilessp-off1, 1163 g*1*cancel-iplus-ilessp-on, 1074 g*1*cancel-iplus-off, 112 g*1*cancel-iplus-off1, 1164 g*1*cancel-iplus-on, 1075 g*1*cancel-itimes-factors-expan

ded-off, 105 ded-off1, 1157

ded-on, 1068 g*1*cancel-itimes-factors-off, 105 g*1*cancel-itimes-factors-off1, 1157 g*1*cancel-itimes-factors-on, 1068 g*1*cancel-itimes-ilessp-factor

s-off, 104 s-off1, 1156 s-on, 1068

g*1*cancel-itimes-ilessp-off, 106 g*1*cancel-itimes-ilessp-off1, 1158 g*1*cancel-itimes-ilessp-on, 1069 g*1*cancel-itimes-off, 106 g*1*cancel-itimes-off1, 1158 g*1*cancel-itimes-on, 1070 g*1*cancel-lessp-plus-off, 128 g*1*cancel-lessp-plus-off1, 1179 g*1*cancel-lessp-plus-on, 1091 g*1*cancel-lessp-times-off, 125 g*1*cancel-lessp-times-off1, 1176 g*1*cancel-lessp-times-on, 1088 g*1*cancel-quotient-times-off, 120 g*1*cancel-quotient-times-off1, 1172 g*1*cancel-quotient-times-on, 1083 g*1*chip*-off, 790 g*1*chip-module*-off, 775 g*1*chip-system*-off, 799 g*1*compile-uncompiled-defns-of

f, 1032 g*1*compile-uncompiled-defns-on, 1122 g*1*conjoin-inequalities-with-0

-off, 102 -off1, 1155 -on, 1066

g*1*delete-off, 131 g*1*delete-off1, 1182 g*1*delete-on, 1094 g*1*disjoin-equalities-with-0-o

ff, 103 ff1, 1155 n, 1066

g*1*double-cdr-induction-off, 1040 g*1*double-cdr-induction-on, 1129 g*1*double-log-induction-off, 119 g*1*double-log-induction-off1, 1170 g*1*double-log-induction-on, 1082 g*1*double-number-induction-off, 120

1, 1171 g*1*double-number-induction-on, 1083 g*1*double-remainder-induction-

off, 123 off1, 1175 on, 1086

g*1*doublet-n-simulate-inductio n-off, 1033 n-on, 1122 g*1*doublet-p-off, 1033 g*1*doublet-p-on, 1122 g*1*dual-eval-monotone-inductio

n-off, 1041 n-on, 1130

g*1*dual-port-ram-state-body-of

f, 1041 g*1*dual-port-ram-state-body-on, 1130 g*1*dual-port-ram-value-body-of

f, 1041 g*1*dual-port-ram-value-body-on, 1131 g*1*eval$-cancel-ineg-aux-fn-o

ff, 113 ff1, 1165 n, 1076 g*1*exp-off, 120 g*1*exp-off1, 1172 g*1*exp-on, 1083 g*1*extend-immediate*-off, 748 g*1*final-state-off, 1031 g*1*final-state-on, 1120 g*1*fix-int-off, 116 g*1*fix-int-off1, 1168 g*1*fix-int-on, 1079 g*1*flags*-off, 744 g*1*gcd-off, 120 g*1*gcd-off1, 1171 g*1*gcd-on, 1083 g*1*good-s-alist-off, 1039 g*1*good-s-alist-on, 1128 g*1*good-s-off, 1056 g*1*good-s-on, 1145 g*1*iabs-off, 116 g*1*iabs-off1, 1167 g*1*iabs-on, 1079 g*1*idifference-off, 116 g*1*idifference-off1, 1167 g*1*idifference-on, 1079 g*1*idiv-off, 115 g*1*idiv-off1, 1167 g*1*idiv-on, 1079 g*1*ileq-off, 116 g*1*ileq-off1, 1168 g*1*ileq-on, 1079 g*1*ilessp-off, 116 g*1*ilessp-off1, 1168 g*1*ilessp-on, 1079 g*1*imod-off, 115 g*1*imod-off1, 1167 g*1*imod-on, 1079 g*1*ineg-off, 116 g*1*ineg-off1, 1167 g*1*ineg-on, 1079 g*1*initialized-machine-state-o

ff, 1031 n, 1120

g*1*initialized-memory-state-of

f, 1031 g*1*initialized-memory-state-on, 1120 g*1*initialized-regfile-off, 1031 g*1*initialized-regfile-on, 1120 g*1*int-to-v-off, 1111 g*1*integer-in-rangep-off, 1111 g*1*integerp-off, 116 g*1*integerp-off1, 1168 g*1*integerp-on, 1079 g*1*iplus-fringe-off, 112 g*1*iplus-fringe-off1, 1164 g*1*iplus-fringe-on, 1076 g*1*iplus-list-off, 112 g*1*iplus-list-off1, 1164 g*1*iplus-list-on, 1075 g*1*iplus-off, 116 g*1*iplus-off1, 1168 g*1*iplus-on, 1079 g*1*iplus-or-ineg-term-off, 102 g*1*iplus-or-ineg-term-off1, 1154 g*1*iplus-or-ineg-term-on, 1065 g*1*iplus-or-itimes-term-off, 105 g*1*iplus-or-itimes-term-off1, 1157 g*1*iplus-or-itimes-term-on, 1068 g*1*iplus-tree-no-fix-int-off, 111 g*1*iplus-tree-no-fix-int-off1, 1163 g*1*iplus-tree-no-fix-int-on, 1074 g*1*iplus-tree-off, 112 g*1*iplus-tree-off1, 1164 g*1*iplus-tree-on, 1076 g*1*iplus-tree-rec-off, 112 g*1*iplus-tree-rec-off1, 1164 g*1*iplus-tree-rec-on, 1076 g*1*iquo-off, 115 g*1*iquo-off1, 1167 g*1*iquo-on, 1079 g*1*iquotient-off, 115 g*1*iquotient-off1, 1167 g*1*iquotient-on, 1079 g*1*irem-off, 115 g*1*irem-off1, 1167 g*1*irem-on, 1078 g*1*iremainder-off, 115 g*1*iremainder-off1, 1167 g*1*iremainder-on, 1079 g*1*itimes-factors-off, 106 g*1*itimes-factors-off1, 1158 g*1*itimes-factors-on, 1069 g*1*itimes-fringe-off, 107 g*1*itimes-fringe-off1, 1159 g*1*itimes-fringe-on, 1070 g*1*itimes-list-off, 107 g*1*itimes-list-off1, 1159 g*1*itimes-list-on, 1070 g*1*itimes-off, 116 g*1*itimes-off1, 1167 g*1*itimes-on, 1079 g*1*itimes-tree-ineg-off, 106 g*1*itimes-tree-ineg-off1, 1158 g*1*itimes-tree-ineg-on, 1069 g*1*itimes-tree-no-fix-int-off, 106 g*1*itimes-tree-no-fix-int-off1, 1158 g*1*itimes-tree-no-fix-int-on, 1069 g*1*itimes-tree-off, 107 g*1*itimes-tree-off1, 1159 g*1*itimes-tree-on, 1070 g*1*itimes-tree-rec-off, 107 g*1*itimes-tree-rec-off1, 1159 g*1*itimes-tree-rec-on, 1070 g*1*izerop-off, 116 g*1*izerop-off1, 1168 g*1*izerop-on, 1079 g*1*log-off, 120 g*1*log-off1, 1172 g*1*log-on, 1083 g*1*lsi-keywords-off, 285 g*1*make-cancel-ineg-terms-equa

lity-off, 102 lity-off1, 1154 lity-on, 1065

g*1*make-cancel-ineg-terms-ineq uality-off, 101 uality-off1, 1153 uality-on, 1064

g*1*make-cancel-iplus-inequalit y-1-off, 112 y-1-off1, 1163 y-1-on, 1075

g*1*make-cancel-itimes-equality -off, 107 -off1, 1159 -on, 1070

g*1*make-cancel-itimes-inequalit y-off, 106 y-off1, 1158 y-on, 1069

g*1*mem-width-off, 973 g*1*mem-width-off1, 1056 g*1*mem-width-on, 996 g*1*mem-width-on1, 1146 g*1*memory-v-fourp-off, 1029 g*1*memory-v-fourp-on, 1118 g*1*monotonicity-property-off, 1056 g*1*monotonicity-property-on, 1145 g*1*n decode-off, 594 g*1*n fetch0-off, 593 g*1*n fetch1-off, 593 g*1*n fetch2-off, 593 g*1*n fetch3-off, 594 g*1*n hold0-off, 600 g*1*n hold1-off, 600 g*1*n reada0-off, 595 g*1*n reada1-off, 595 g*1*n reada2-off, 596 g*1*n reada3-off, 596 g*1*n readb0-off, 596 g*1*n readb1-off, 597 g*1*n readb2-off, 597 g*1*n readb3-off, 597 g*1*n rega-off, 594 g*1*n regb-off, 595 g*1*n reset0-off, 601 g*1*n reset1-off, 602 g*1*n reset2-off, 602 g*1*n sefa0-off, 599 g*1*n sefa1-off, 599 g*1*n sefb0-off, 599 g*1*n sefb1-off, 600 g*1*n update-off, 595 g*1*n v11010-off, 601 g*1*n v11011-off, 601 g*1*n v11111-off, 602 g*1*n write0-off, 598 g*1*n write1-off, 598 g*1*n write2-off, 598 g*1*n write3-off, 599 g*1*nat-lst-lst-induction-off, 1034 g*1*nat-lst-lst-induction-on, 1123 g*1*new-machine-state-invariant

-off, 1029 -on, 1118

g*1*occurrences-off, 131 g*1*occurrences-off1, 1182 g*1*occurrences-on, 1094 g*1*ok-netlistp-off, 1041 g*1*ok-netlistp-on, 1130 g*1*or-zerop-tree-off, 125 g*1*or-zerop-tree-off1, 1177 g*1*or-zerop-tree-on, 1089 g*1*plus-fringe-off, 129 g*1*plus-fringe-off1, 1180 g*1*plus-fringe-on, 1092 g*1*plus-tree-off, 129 g*1*plus-tree-off1, 1180 g*1*plus-tree-on, 1092 g*1*predicate-properties-off, 354 g*1*primitive-properties-off, 295 g*1*read-mem1-monotone-inductio

n-off, 1042 n-on, 1131

g*1*regfile*-off, 738 g*1*remove-inegs-off, 102 g*1*remove-inegs-off1, 1154 g*1*remove-inegs-on, 1065 g*1*reset-sequence-chip-1-off, 1030 g*1*reset-sequence-chip-1-on, 1119 g*1*reset-sequence-chip-2-off, 1030 g*1*reset-sequence-chip-2-on, 1119 g*1*reset-sequence-off, 1031 g*1*reset-sequence-on, 1121 g*1*reset-vector-chip-off, 1030 g*1*reset-vector-chip-on, 1119 g*1*reset-vector-off, 1032 g*1*reset-vector-on, 1121 g*1*run-vector-chip-1-off, 1030 g*1*run-vector-chip-1-on, 1119 g*1*run-vector-chip-2-off, 1030 g*1*run-vector-chip-2-on, 1119 g*1*run-vector-off, 1032 g*1*run-vector-on, 1121 g*1*s-approx-alist-off, 1056 g*1*s-approx-alist-on, 1145 g*1*s-approx-list-off, 1040 g*1*s-approx-list-on, 1129 g*1*s-approx-off, 1056 g*1*s-approx-on, 1146 g*1*s-knownp-off, 1056 g*1*s-knownp-on, 1145 g*1*simulate-monotone-induction

-off, 1033 -on, 1123

g*1*single-number-induction-off, 118

1, 1169 g*1*single-number-induction-on, 1081 g*1*some-eval$s-to-0-off, 103 g*1*some-eval$s-to-0-off1, 1155 g*1*some-eval$s-to-0-on, 1066 g*1*split-out-ineg-terms-off, 102 g*1*split-out-ineg-terms-off1, 1154 g*1*split-out-ineg-terms-on, 1065 g*1*subbagp-off, 131 g*1*subbagp-off1, 1182 g*1*subbagp-on, 1094 g*1*subsetp-off, 106 g*1*subsetp-off1, 1158 g*1*subsetp-on, 1070 g*1*times-fringe-off, 126 g*1*times-fringe-off1, 1177 g*1*times-fringe-on, 1089 g*1*times-tree-off, 126 g*1*times-tree-off1, 1177 g*1*times-tree-on, 1089 g*1*unknown-machine-state-off, 1032 g*1*unknown-machine-state-on, 1121 g*1*unknown-memory-state-off, 1032 g*1*unknown-memory-state-on, 1121 g*1*unknown-regfile-off, 1032 g*1*unknown-regfile-on, 1121 g*1*unknown-state-off, 1032 g*1*unknown-state-on, 1121 g*1*v-alu-int-adder-off, 1110 g*1*v-alu-int-adder-output-off, 1110 g*1*v-alu-int-adder-overflowp-o

ff, 1110 g*1*v-alu-int-asr-off, 1109 g*1*v-alu-int-asr-output-off, 1109 g*1*v-alu-int-dec-off, 1109 g*1*v-alu-int-inc-off, 1110 g*1*v-alu-int-neg-off, 1109 g*1*v-alu-int-not-off, 1108 g*1*v-alu-int-not-output-off, 1108 g*1*v-alu-int-off, 1108 g*1*v-alu-int-subtracter-off, 1109 g*1*v-alu-int-subtracter-output

-off, 1109 g*1*v-alu-int-subtracter-overfl

owp-off, 1109 g*1*v-alu-nat-adder-carry-out-o

ff, 1113 g*1*v-alu-nat-adder-off, 1113 g*1*v-alu-nat-adder-output-off, 1113 g*1*v-alu-nat-dec-off, 1112 g*1*v-alu-nat-inc-off, 1113 g*1*v-alu-nat-int-buf-off, 1115 g*1*v-alu-nat-lsr-carry-out-off, 1112 g*1*v-alu-nat-lsr-off, 1112 g*1*v-alu-nat-lsr-output-off, 1112 g*1*v-alu-nat-not-off, 1111 g*1*v-alu-nat-not-output-off, 1112 g*1*v-alu-nat-off, 1111 g*1*v-alu-nat-subtracter-carry-

out-off, 1112 g*1*v-alu-nat-subtracter-off, 1112 g*1*v-alu-nat-subtracter-output

-off, 1113 g*1*v-approx-alist-off, 1056 g*1*v-approx-alist-on, 1145 g*1*v-approx-list-off, 1034 g*1*v-approx-list-on, 1123 g*1*v-approx-off, 1057 g*1*v-approx-on, 1146 g*1*v-fourp-off, 1029 g*1*v-fourp-on, 1118 g*1*v-knownp-off, 1057 g*1*v-knownp-on, 1146 g*1*v-s-approx-list-off, 1034 g*1*v-s-approx-list-on, 1123 g*1*v-to-int-off, 1111 g*1*v decode-off, 594 g*1*v fetch0-off, 593 g*1*v fetch1-off, 593 g*1*v fetch2-off, 593 g*1*v fetch3-off, 593 g*1*v hold0-off, 600 g*1*v hold1-off, 600 g*1*v reada0-off, 595 g*1*v reada1-off, 595 g*1*v reada2-off, 596 g*1*v reada3-off, 596 g*1*v readb0-off, 596 g*1*v readb1-off, 597 g*1*v readb2-off, 597 g*1*v readb3-off, 597 g*1*v rega-off, 594 g*1*v regb-off, 594 g*1*v reset0-off, 601 g*1*v reset1-off, 601 g*1*v reset2-off, 602 g*1*v sefa0-off, 599 g*1*v sefa1-off, 599 g*1*v sefb0-off, 599 g*1*v sefb1-off, 600 g*1*v update-off, 595 g*1*v v11010-off, 601 g*1*v v11011-off, 601 g*1*v v11111-off, 602 g*1*v write0-off, 597 g*1*v write1-off, 598 g*1*v write2-off, 598 g*1*v write3-off, 598 g*1*write-mem1-double-induction

-off, 1041 -on, 1130

g*1*write-mem1-monotone-inducti on-off, 1041 on-on, 1131

g-cell, 499–501 g-cell*, 500 g-cell$netlist, 500, 502 g-cell$value, 500 g-cell$value-off, 500 g-cell$value-zero, 501 g-cell&, 500–502 g-cell&-off, 500 gcd, 30, 33, 34 gcd-0, 33 gcd-0-off, 118 gcd-0-off1, 1169 gcd-0-on, 1081 gcd-1, 33 gcd-1-off, 117 gcd-1-off1, 1169 gcd-1-on, 1081 gcd-idempotence, 34 gcd-idempotence-off, 116 gcd-idempotence-off1, 1168 gcd-idempotence-on, 1080 gcd-is-the-greatest, 34 gcd-is-the-greatest-off, 117 gcd-is-the-greatest-off1, 1168 gcd-is-the-greatest-on, 1080 gcd-off, 120 gcd-off1, 1171 gcd-on, 1083 gcd-plus, 33 gcd-plus-instance, 33 gcd-plus-instance-off, 117 gcd-plus-instance-off1, 1169 gcd-plus-instance-on, 1080 gcd-plus-instance-temp, 33 gcd-plus-instance-temp-off, 117 gcd-plus-instance-temp-off1, 1169 gcd-plus-instance-temp-on, 1080 gcd-plus-instance-temp-proof, 33 gcd-plus-instance-temp-proof-of

f, 117 f1, 1169

gcd-plus-instance-temp-proof-on, 1081 gcd-plus-off, 117 gcd-plus-off1, 1169 gcd-plus-on, 1080 gcd-plus-proof, 33 gcd-plus-proof-off, 117 gcd-plus-proof-off1, 1169 gcd-plus-proof-on, 1080 gcd-x-x, 34 gcd-x-x-off, 116 gcd-x-x-off1, 1168 gcd-x-x-on, 1080 gcds, 34 generate-append, 445 get-required-props, 352 get-required-props-off, 352 good-s, 930, 975, 976, 993, 998, 1003–

1009, 1011, 1016, 1020, 1024 good-s-0, 1004 good-s-0-off, 1038 good-s-0-on, 1128 good-s-alist, 1003, 1004, 1008 good-s-alist-off, 1039 good-s-alist-on, 1128 good-s-alist-pairlist, 1003 good-s-alist-pairlist-off, 1039 good-s-alist-pairlist-on, 1128 good-s-collect-value, 1004 good-s-collect-value-off, 1039 good-s-collect-value-on, 1128 good-s-constant-ram, 1007 good-s-constant-ram-off, 1034 good-s-constant-ram-on, 1123 good-s-off, 1056 good-s-on, 1145 good-s-opener, 1020 good-s-opener-off, 1028 good-s-opener-on, 1117 good-s-preserved, 1008 good-s-preserved-off, 1034 good-s-preserved-on, 1123 good-s-primitives-theory, 1008 good-s-value, 1003 good-s-value-off, 1039 good-s-value-on, 1128 good-s-write-mem, 1007 good-s-write-mem-1, 1007 good-s-write-mem-1-off, 1034 good-s-write-mem-1-on, 1123 good-s-write-mem-off, 1034 good-s-write-mem-on, 1123

half-adder*, 437

half-adder$netlist, 437, 438

half-adder$value, 437 half-adder$value-off, 437 half-adder&, 437, 438 half-adder&-off, 437 hdack-, 604, 607, 609, 611, 613, 615,

617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 643, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 761–764, 784, 796, 802–805, 811–814

hdack–off, 604

hierarchical-name-max, 287, 290 hierarchical-name-max-off, 287 high-level-state-structure, 925, 926 high-level-state-structure-off, 925 hold-, 760, 763 hold–input, 760, 763, 813, 815, 817,

819, 888, 890, 891, 915, 916 hold–input-off, 761 hold–off, 760

i-name, 149, 249, 253, 276, 435 i-num, 149, 167, 249, 435 i-reg, 759, 761–764 i-reg-off, 760 iabs, 35, 38, 50–52 iabs-off, 37 id, 155, 565, 670 id-monotone, 948 id-monotone-off, 1045 id-monotone-on, 1134 id-out-prop-signals, 356, 360 id-out-prop-signals-off, 356 id-preserves-good-s, 1006 id-preserves-good-s-off, 1035 id-preserves-good-s-on, 1125 id$netlist, 404, 469, 565, 568–570,

672, 688, 714, 739, 776 id$value, 404 id$value-off, 404 id&, 404, 469, 565, 568–570, 672,

688, 713, 738, 776 id&-off, 404 idifference, 35–39, 46, 95, 1102–1104,

1196, 1197, 1210–1213, 1219 idifference-0, 1196 idifference-difference, 1103 idifference-difference-off, 1110 idifference-fix-int1, 39 idifference-fix-int1-off, 114 idifference-fix-int1-off1, 1165 idifference-fix-int1-on, 1077 idifference-fix-int2, 39 idifference-fix-int2-off, 113 idifference-fix-int2-off1, 1165 idifference-fix-int2-on, 1077 idifference-off, 116 idifference-off1, 1167 idifference-on, 1079 idiv, 36, 51, 53, 54, 1103, 1105, 1214–

1216, 1219 idiv-fix-int1, 53 idiv-fix-int1-off, 108 idiv-fix-int1-off1, 1160 idiv-fix-int1-on, 1071 idiv-fix-int2, 53 idiv-fix-int2-off, 108 idiv-fix-int2-off1, 1160 idiv-fix-int2-on, 1071 idiv-ilessp-0, 1103 idiv-ilessp-0-off, 1110 idiv-imod-uniqueness, 51 idiv-imod-uniqueness-off, 109 idiv-imod-uniqueness-off1, 1161 idiv-imod-uniqueness-on, 1073 idiv-off, 54 idiv-quotient, 1103 idiv-quotient-off, 1110 if*, 131, 132, 136, 137, 151, 165,

182, 183, 203, 475, 625, 635, 641, 642, 649, 653, 654, 723– 725, 727–732, 748, 820, 828– 831, 835, 836, 838, 843, 846, 848, 850, 851, 853, 857, 859, 868, 869, 872, 893–896, 898, 899, 901, 902, 904–911, 913

if*-c-x-x, 132 if*-cons, 132 if*-off, 131 if-v-subtracter-output=0-then-a

=b, 1189 ileq, 35, 1102, 1204, 1205, 1207–1209, 1211–1213, 1216

ileq-off, 116 ileq-off1, 1168 ileq-on, 1079 ilessp, 35, 47, 48, 50–52, 60–63, 67,

80–82, 85, 95, 96, 1102, 1103, 1203–1205, 1207–1209, 1211– 1213, 1216

ilessp-0-itimes, 81 ilessp-0-itimes-off, 86 ilessp-add1, 95 ilessp-add1-iplus, 95 ilessp-add1-iplus-off, 100 ilessp-add1-iplus-off1, 1152 ilessp-add1-iplus-on, 1063 ilessp-add1-off, 100 ilessp-add1-off1, 1152 ilessp-add1-on, 1063 ilessp-fix-int-1, 47 ilessp-fix-int-1-off, 112 ilessp-fix-int-1-off1, 1164 ilessp-fix-int-1-on, 1075 ilessp-fix-int-2, 47 ilessp-fix-int-2-off, 112 ilessp-fix-int-2-off1, 1163 ilessp-fix-int-2-on, 1075 ilessp-ineg-ineg, 67 ilessp-ineg-ineg-off, 105 ilessp-ineg-ineg-off1, 1157 ilessp-ineg-ineg-on, 1069 ilessp-itimes-0, 81 ilessp-itimes-0-off, 86 ilessp-itimes-list-eval$-list-

bagdiff, 81 bagdiff-corollary-1, 81 bagdiff-corollary-1-off, 104 bagdiff-corollary-1-off1, 1156 bagdiff-corollary-1-on, 1067 bagdiff-corollary-2, 81 bagdiff-corollary-2-off, 104 bagdiff-corollary-2-off1, 1156 bagdiff-corollary-2-on, 1067 bagdiff-off, 104 bagdiff-off1, 1156 bagdiff-on, 1067 delete, 80 delete-helper-1, 80 delete-helper-1-off, 86 delete-helper-2, 80 delete-helper-2-off, 86 delete-off, 86 delete-prime, 80 delete-prime-helper-1, 80 delete-prime-helper-1-off, 86 delete-prime-helper-2, 80 delete-prime-helper-2-off, 86 delete-prime-off, 86

ilessp-itimes-right-negative, 62 ilessp-itimes-right-negative-of

f, 106 f1, 1158

ilessp-itimes-right-negative-on, 1069 ilessp-itimes-right-positive, 61 ilessp-itimes-right-positive-of

f, 106 f1, 1158

ilessp-itimes-right-positive-on, 1069 ilessp-lessp, 1102 ilessp-lessp-off, 1111 ilessp-off, 37 ilessp-strict, 63 ilessp-strict-off, 106 ilessp-strict-off1, 1158 ilessp-strict-on, 1069 ilessp-trichotomy, 62 ilessp-trichotomy-off, 63 ilessp-trichotomy-off1, 83 ilessp-trichotomy-on, 82 ilessp-zero-implies-not-equal, 81 ilessp-zero-implies-not-equal-o

ff, 104 ff1, 1156 n, 1067

imod, 36, 51, 53, 54, 1214, 1215 imod-fix-int1, 53 imod-fix-int1-off, 108 imod-fix-int1-off1, 1160 imod-fix-int1-on, 1071 imod-fix-int2, 53 imod-fix-int2-off, 108 imod-fix-int2-off1, 1160 imod-fix-int2-on, 1071 imod-off, 54 imod-v-to-int-2, 1214 in-types-error, 305, 349 in-types-error-off, 305 index, 148, 149, 428–435, 440–443,

449–462, 469, 470, 472–482, 513–517, 527–529, 537–541, 679–682, 705–708, 712, 713, 720, 735–738, 742, 743, 747, 749–759

indexp, 149, 249, 253, 268–272, 276,

297, 361, 362, 373, 435 indices, 148, 149, 166, 167, 428–435,

440–443, 449–453, 457–462, 470, 471, 473, 474, 476–481, 513, 516, 527, 528, 537–540, 679, 704, 705, 708, 709, 711– 713, 719–721, 735–738, 742, 743, 746, 747, 750–755, 757– 759

indices-as-append, 148 indices-as-append-off, 148 indices-off, 148 indices-zerop, 148 ineg, 35, 37–39, 42, 46, 47, 52, 67,

92, 1102, 1103, 1198–1200, 1208, 1209, 1219

ineg-0, 38 ineg-0-off, 114 ineg-0-off1, 1166 ineg-0-on, 1078 ineg-as-idifference, 1219 ineg-eval$-itimes-tree-ineg, 67 ineg-eval$-itimes-tree-ineg-of

f, 105 f1, 1157

ineg-eval$-itimes-tree-ineg-on, 1068 ineg-fix-int, 38 ineg-fix-int-off, 114 ineg-fix-int-off1, 1166 ineg-fix-int-on, 1078 ineg-ineg, 38 ineg-ineg-off, 114 ineg-ineg-off1, 1166 ineg-ineg-on, 1078 ineg-iplus, 38 ineg-iplus-off, 114 ineg-iplus-off1, 1166 ineg-iplus-on, 1078 ineg-of-non-integerp, 38 ineg-of-non-integerp-off, 38 ineg-off, 37 infer-equality-from-not-lessp, 17 infer-equality-from-not-lessp-o

ff, 125 ff1, 1176 n, 1088

initial-lsi-occ-syntax-data, 290, 293 initial-lsi-occ-syntax-data-off, 290 initial-occ-data, 340, 341, 346 initial-occ-data-off, 341 initial-occ-delays, 321, 340 initial-occ-drives, 307, 340, 341 initial-occ-in-types, 300, 340, 341 initial-occ-loadings, 307, 340, 341 initial-occ-out-depends, 334, 340, 341 initial-occ-out-depends-off, 334 initial-occ-out-types, 300, 340, 341 initial-occ-state-types, 336, 340, 341 initial-occ-syntax-data, 280, 282, 290 initial-occ-syntax-data-off, 280 initial-occ-tri-state-data, 336, 340, 341 initial-occ-tri-state-data-off, 336 initialized-machine-state, 1013, 1014,

1017, 1021–1026 initialized-machine-state-off, 1031 initialized-machine-state-on, 1120 initialized-memory-state, 1013, 1014 initialized-memory-state-off, 1031 initialized-memory-state-on, 1120 initialized-regfile, 1013 initialized-regfile-off, 1031 initialized-regfile-on, 1120 input-delay, 329, 332, 333 input-delay-off, 330 input-delay0, 327–330 input-delay0-off, 329 input-label, 355, 357, 364 input-label-off, 355 input-type, 299, 303 input-type-off, 300 insert, 245, 247, 276, 285, 298, 324,

325, 369 insert-input-delay, 325–327 insert-input-delay-off, 325 insert-off, 245 instance-theorem, 1014 instance-theorem-off, 1030 instance-theorem-on, 1120 int-dec-rangep-lemmas, 1209 int-neg-range-implications, 1208 int-to-bv, 549, 553, 556 int-to-v, 1102, 1104, 1105, 1197–1200,

1208–1210, 1219 int-to-v-of-v-to-int, 1219 int-to-v-off, 1111 int-to-v-v-to-int-0, 1197 integer-defns, 37 integer-in-rangep, 1102, 1104, 1197–

1201, 1204, 1206–1211, 1213, 1214, 1216

integer-in-rangep–1, 1200 integer-in-rangep-0, 1200 integer-in-rangep-1, 1197 integer-in-rangep-idiv, 1214 integer-in-rangep-iplus, 1198 integer-in-rangep-iplus-carry, 1199 integer-in-rangep-iplus-carry-o

ff, 1199 integer-in-rangep-iplus-carry$

commuted, 1199 integer-in-rangep-iplus-ineg, 1199 integer-in-rangep-iplus-ineg-ca

rry, 1199 rry-off, 1199 rry$commuted, 1200

integer-in-rangep-iplus-ineg-of

f, 1199 integer-in-rangep-iplus-ineg$c

ommuted, 1199 integer-in-rangep-iplus-off, 1198 integer-in-rangep-iplus$commute

d, 1198 integer-in-rangep-minus-0, 1197 integer-in-rangep-off, 1111 integer-in-rangep-the-obvious-w

ay, 1198 ay-off, 1198 integer-in-rangep-v-to-int, 1198 integer-metas, 1095 integer-minus, 549 integerp, 34, 35, 37–39, 43, 45–47,

50–53, 55, 57, 58, 78, 79, 84, 92, 95, 1196, 1198, 1199

integerp-eval$-iplus-or-ineg-te rm, 92 rm-off, 95

integerp-eval$-itimes, 57 integerp-eval$-itimes-off, 64 integerp-fix-int, 37 integerp-fix-int-off, 115 integerp-fix-int-off1, 1167 integerp-fix-int-on, 1078 integerp-iabs, 38 integerp-iabs-off, 115 integerp-iabs-off1, 1167 integerp-iabs-on, 1078 integerp-idifference, 37 integerp-idifference-off, 115 integerp-idifference-off1, 1167 integerp-idifference-on, 1078 integerp-idiv, 53 integerp-idiv-off, 108 integerp-idiv-off1, 1160 integerp-idiv-on, 1072 integerp-imod, 53 integerp-imod-off, 108 integerp-imod-off1, 1160 integerp-imod-on, 1072 integerp-ineg, 37 integerp-ineg-off, 115 integerp-ineg-off1, 1167 integerp-ineg-on, 1078 integerp-iplus, 37 integerp-iplus-list, 43 integerp-iplus-list-off, 112 integerp-iplus-list-off1, 1164 integerp-iplus-list-on, 1075 integerp-iplus-off, 115 integerp-iplus-off1, 1167 integerp-iplus-on, 1078 integerp-iquo, 53 integerp-iquo-off, 108 integerp-iquo-off1, 1160 integerp-iquo-on, 1071 integerp-iquotient, 52 integerp-iquotient-off, 108 integerp-iquotient-off1, 1160 integerp-iquotient-on, 1072 integerp-irem, 53 integerp-irem-off, 108 integerp-irem-off1, 1160 integerp-irem-on, 1071 integerp-iremainder, 52 integerp-iremainder-off, 108 integerp-iremainder-off1, 1160 integerp-iremainder-on, 1072 integerp-itimes, 38 integerp-itimes-list, 55 integerp-itimes-list-off, 107 integerp-itimes-list-off1, 1159 integerp-itimes-list-on, 1070 integerp-itimes-off, 115 integerp-itimes-off1, 1167 integerp-itimes-on, 1078 integerp-off, 37 integerp-v-to-int, 1196 integers, 97 intersection, 245, 252, 280, 339, 344,

351, 358, 359, 365, 366, 380, 383, 384

intersection-off, 245 intp, 549, 553, 556 io-car, 356, 357, 359, 362–364, 366,

369, 372 io-car-off, 356 io-cdr, 356, 357, 359, 362–364, 366,

369, 372 io-cdr-off, 356 io-label, 355, 372 io-label-off, 355 io-out, 296 io-out-signal, 296 io-outp, 296, 297, 302, 338 io-rename-error, 338, 339 io-rename-error-off, 338 io-signal-renames, 338 io-signal-renames-off, 338 io-type-error, 301, 302 io-type-error-off, 302 io-types, 382, 384, 385 io-types-collector, 382, 383 io-types-collector-off, 382 io-types-compatible, 302, 303 io-types-compatible-off, 302 io-types-off, 384 io-types-simple, 259–262, 264, 265 io-types-simple-off, 262 iplus, 35, 37–39, 42, 43, 46–52, 67,

92, 95, 96, 1102–1104, 1197– 1200, 1204–1208, 1210–1212, 1219

iplus-0-left, 39 iplus-0-left-off, 114 iplus-0-left-off1, 1166 iplus-0-left-on, 1077 iplus-0-left-on1, 1186 iplus-0-right, 39 iplus-0-right-off, 114 iplus-0-right-off1, 1166 iplus-0-right-on, 1077 iplus-0-right-on1, 1186 iplus-cancellation-1, 39 iplus-cancellation-1-for-ilessp, 48

-off, 111 -off1, 1163 -on, 1075

iplus-cancellation-1-off, 114 iplus-cancellation-1-off1, 1166 iplus-cancellation-1-on, 1077 iplus-cancellation-2, 39 iplus-cancellation-2-for-ilessp, 48

-off, 111 -off1, 1163 -on, 1075

iplus-cancellation-2-off, 114 iplus-cancellation-2-off1, 1166 iplus-cancellation-2-on, 1077 iplus-constants, 95 iplus-constants-off, 100 iplus-constants-off1, 1153 iplus-constants-on, 1063 iplus-div-hack1, 1103 iplus-div-hack1-off, 1110 iplus-eval$-itimes-tree-ineg, 67 iplus-eval$-itimes-tree-ineg-o

ff, 105 ff1, 1157 n, 1068

iplus-fix-int1, 39 iplus-fix-int1-off, 114 iplus-fix-int1-off1, 1165 iplus-fix-int1-on, 1077 iplus-fix-int2, 39 iplus-fix-int2-off, 114 iplus-fix-int2-off1, 1165 iplus-fix-int2-on, 1077 iplus-fringe, 42, 44–49, 88–94 iplus-fringe-off, 112 iplus-fringe-off1, 1164 iplus-fringe-on, 1076 iplus-ineg-promote, 42 iplus-ineg-promote-off, 42 iplus-ineg1, 39 iplus-ineg1-off, 114 iplus-ineg1-off1, 1165 iplus-ineg1-on, 1077 iplus-ineg2, 39 iplus-ineg2-off, 114 iplus-ineg2-off1, 1165 iplus-ineg2-on, 1077 iplus-ineg3, 42 iplus-ineg3-off, 113 iplus-ineg3-off1, 1164 iplus-ineg3-on, 1076 iplus-ineg4, 42 iplus-ineg4-off, 113 iplus-ineg4-off1, 1164 iplus-ineg4-on, 1076 iplus-ineg5, 46 iplus-ineg5-lemma-1, 46 iplus-ineg5-lemma-1-off, 47 iplus-ineg5-lemma-2, 46 iplus-ineg5-lemma-2-off, 47 iplus-ineg5-off, 47 iplus-ineg6, 47 iplus-ineg6-off, 47 iplus-ineg7, 47 iplus-ineg7-off, 112 iplus-ineg7-off1, 1164 iplus-ineg7-on, 1075 iplus-left-id, 38 iplus-left-id-off, 39 iplus-list, 43, 45, 46, 92 iplus-list-append, 46 iplus-list-append-off, 112 iplus-list-append-off1, 1164 iplus-list-append-on, 1075 iplus-list-eval$-car-split-out -ineg-terms, 92 -ineg-terms-off, 101 -ineg-terms-off1, 1153 -ineg-terms-on, 1064 iplus-list-eval$-fringe, 46 iplus-list-eval$-fringe-off, 63 iplus-list-off, 112 iplus-list-off1, 1164 iplus-list-on, 1075 iplus-off, 37 iplus-or-ineg-term, 88, 92, 93 iplus-or-ineg-term-off, 92 iplus-or-itimes-term, 68, 79 iplus-or-itimes-term-integerp-ev

al$, 79 al$-off, 86

iplus-or-itimes-term-off, 78

iplus-plus, 1102 iplus-plus-off, 1111 iplus-right-id, 39 iplus-right-id-off, 39 iplus-tree, 43–45, 47, 48, 88–94 iplus-tree-no-fix-int, 48, 49 iplus-tree-no-fix-int-off, 48 iplus-tree-off, 46 iplus-tree-rec, 43, 48 iplus-tree-rec-off, 112 iplus-tree-rec-off1, 1164 iplus-tree-rec-on, 1076 iplus-x-y-ineg-x, 42 iplus-x-y-ineg-x-off, 113 iplus-x-y-ineg-x-off1, 1164 iplus-x-y-ineg-x-on, 1076 iplus3-plus-difference, 1102 iplus3-plus-difference-off, 1110 iquo, 36, 37, 51–54 iquo-fix-int1, 53 iquo-fix-int1-off, 108 iquo-fix-int1-off1, 1160 iquo-fix-int1-on, 1071 iquo-fix-int2, 53 iquo-fix-int2-off, 108 iquo-fix-int2-off1, 1160 iquo-fix-int2-on, 1071 iquo-irem-uniqueness, 52 iquo-irem-uniqueness-off, 109 iquo-irem-uniqueness-off1, 1161 iquo-irem-uniqueness-on, 1072 iquo-off, 54 iquotient, 36, 50–54 iquotient-fix-int1, 53 iquotient-fix-int1-off, 108 iquotient-fix-int1-off1, 1160 iquotient-fix-int1-on, 1071 iquotient-fix-int2, 53 iquotient-fix-int2-off, 108 iquotient-fix-int2-off1, 1160 iquotient-fix-int2-on, 1071 iquotient-iremainder-uniqueness, 51

-off, 110 -off1, 1162 -on, 1073

iquotient-off, 54 ir-fields-theory, 542 irem, 37, 51–54 irem-fix-int1, 53 irem-fix-int1-off, 107 irem-fix-int1-off1, 1159 irem-fix-int1-on, 1071 irem-fix-int2, 53 irem-fix-int2-off, 107 irem-fix-int2-off1, 1159 irem-fix-int2-on, 1071 irem-off, 54 iremainder, 36, 50–54 iremainder-fix-int1, 53 iremainder-fix-int1-off, 108 iremainder-fix-int1-off1, 1160 iremainder-fix-int1-on, 1071 iremainder-fix-int2, 53 iremainder-fix-int2-off, 108 iremainder-fix-int2-off1, 1160 iremainder-fix-int2-on, 1071 iremainder-off, 54 is-head, 246, 365 is-head-off, 246 itimes, 35–38, 49–52, 55, 57, 59, 61,

62, 67, 68, 78–81 itimes–1, 67 itimes–1-off, 105 itimes–1-off1, 1157 itimes–1-on, 1069 itimes-0-left, 49 itimes-0-left-off, 111 itimes-0-left-off1, 1163 itimes-0-left-on, 1074 itimes-0-right, 49 itimes-0-right-off, 111 itimes-0-right-off1, 1163 itimes-0-right-on, 1074 itimes-1-arg1, 50 itimes-1-arg1-off, 110 itimes-1-arg1-off1, 1162 itimes-1-arg1-on, 1073 itimes-cancellation-1, 52 itimes-cancellation-1-off, 109 itimes-cancellation-1-off1, 1161 itimes-cancellation-1-on, 1072 itimes-cancellation-2, 52 itimes-cancellation-2-off, 109 itimes-cancellation-2-off1, 1161 itimes-cancellation-2-on, 1072 itimes-cancellation-3, 52 itimes-cancellation-3-off, 108 itimes-cancellation-3-off1, 1160 itimes-cancellation-3-on, 1072 itimes-distributes-over-iplus, 49 itimes-distributes-over-iplus-o

ff, 110 ff1, 1162 n, 1074

itimes-distributes-over-iplus-p roof, 49 roof-off, 111 roof-off1, 1163 roof-on, 1074

itimes-eval$-itimes-tree-ineg, 68 itimes-eval$-itimes-tree-ineg-

off, 105 off1, 1157 on, 1068

itimes-factors, 66–69, 79–85 itimes-factors-off, 105 itimes-factors-off1, 1157 itimes-factors-on, 1069 itimes-fix-int1, 49 itimes-fix-int1-off, 111 itimes-fix-int1-off1, 1163 itimes-fix-int1-on, 1074 itimes-fix-int2, 49 itimes-fix-int2-off, 111 itimes-fix-int2-off1, 1163 itimes-fix-int2-on, 1074 itimes-fringe, 54–62 itimes-fringe-off, 107 itimes-fringe-off1, 1159 itimes-fringe-on, 1070 itimes-ineg-1, 52 itimes-ineg-1-off, 109 itimes-ineg-1-off1, 1161 itimes-ineg-1-on, 1072 itimes-ineg-2, 52 itimes-ineg-2-off, 109 itimes-ineg-2-off1, 1161 itimes-ineg-2-on, 1072 itimes-itimes-list-eval$-list-

delete, 78 delete-off, 85

itimes-list, 55, 57–63, 67, 68, 78–82,

84, 85 itimes-list-append, 57 itimes-list-append-off, 106 itimes-list-append-off1, 1158 itimes-list-append-on, 1070 itimes-list-bagdiff, 57 itimes-list-bagdiff-off, 64 itimes-list-eval$-delete, 57 itimes-list-eval$-delete-off, 57 itimes-list-eval$-factors, 79 itimes-list-eval$-factors-lemm

a, 79 a-off, 85 a-prime, 79 a-prime-off, 85

itimes-list-eval$-factors-off, 86 itimes-list-eval$-fringe, 57 itimes-list-eval$-fringe-off, 64 itimes-list-eval$-list-0, 61 itimes-list-eval$-list-0-off, 66 itimes-list-off, 107 itimes-list-off1, 1159 itimes-list-on, 1070 itimes-off, 37 itimes-tree, 55, 58–60 itimes-tree-ineg, 66–68 itimes-tree-ineg-off, 68 itimes-tree-no-fix-int, 60, 61 itimes-tree-no-fix-int-off, 60 itimes-tree-off, 55 itimes-tree-rec, 54, 55, 60, 66, 67 itimes-tree-rec-off, 107 itimes-tree-rec-off1, 1159 itimes-tree-rec-on, 1070 itimes-zero1, 49 itimes-zero1-off, 49 itimes-zero2, 49 itimes-zero2-off, 49 izerop, 35, 1200, 1202, 1214 izerop-eval-of-member-implies-iti

mes-list-0, 58 mes-list-0-off, 65

izerop-ilessp-0-relationship, 80 izerop-ilessp-0-relationship-of

f, 82 f1, 86 izerop-inc-v-nzerop, 1200 izerop-off, 116 izerop-off1, 1168 izerop-on, 1079

label-error, 252, 278, 279, 283, 357,

358, 362–364, 368, 369 label-error-off, 252 last-cdr, 245, 277, 281, 286, 360, 361,

366, 367 last-cdr-off, 245 length, 136–149, 151, 152, 157–165,

167–170, 172–191, 202–205, 242, 253, 254, 257, 258, 277, 279, 283–285, 287, 289, 290, 293, 294, 305, 317, 355, 357– 364, 366, 369, 372, 376, 381, 382, 420–422, 424, 426, 429, 430, 432, 433, 435, 443–446, 448, 452, 456, 457, 459, 461, 462, 464–469, 473, 475, 478, 481–486, 494, 495, 497, 501, 503, 505–508, 510, 511, 516, 517, 523, 526, 528–536, 541, 547–549, 558, 562–567, 576, 578, 587, 589–592, 603, 604, 670, 673, 678, 689, 690, 701– 704, 714, 715, 717–719, 722, 733–735, 739–741, 744–746, 748, 749, 751, 753, 755, 759, 765, 776, 779, 780, 783, 792, 795, 800, 801, 805–810, 814, 816–819, 821, 823, 825, 827, 829, 831–833, 835, 837, 839, 841, 843, 845, 847, 849, 852, 854, 856, 858, 860, 862–864, 866, 867, 869–871, 874–876, 878, 880–883, 885–890, 892, 894, 896, 898, 900, 903, 905, 908, 910, 912, 915–918, 925, 926, 930, 954, 971, 974, 975, 1007, 1009–1011, 1014, 1016– 1021, 1024, 1096, 1098–1106, 1188, 1190–1194, 1196–1198, 1200, 1201, 1204–1216, 1218, 1219

length-1, 137 length-append, 137 length-bottom, 137 length-cdr, 137 length-cdr-lemmas, 137 length-collect-value, 167 length-cons, 137 length-core-alu, 531 length-cvzbv-adder, 485 length-cvzbv-subtracter, 485 length-dual-eval-0, 242 length-dual-eval-2, 242 length-firstn, 139 length-firstn1, 139 length-firstn2, 140 length-fv-if, 203 length-if, 137 length-if*, 137 length-indices, 149 length-int-to-v, 1200 length-make-list, 145 length-mpg, 494 length-nat-to-v, 160 length-nlistp, 137 length-of-v-adder, 163 length-of-v-adder-output, 163 length-of-v-subtracter-output, 163 length-off, 136 length-read-fn, 874 length-reset-sequence-chip-1, 1024 length-reset-sequence-chip-1-of

f, 1027 length-reset-sequence-chip-1-on, 1116 length-restn, 140 length-rev1, 138 length-reverse, 138 length-shift-or-buf, 526 length-sign-extend, 162 length-simulate, 1010 length-simulate-off, 1033 length-simulate-on, 1122 length-subrange, 144 length-sum, 444 length-v-alu, 485 length-v-alu-1, 485 length-v-and, 158 length-v-asr, 158 length-v-buf, 158 length-v-if, 158 length-v-lsr, 158 length-v-not, 158 length-v-or, 158 length-v-ror, 158 length-v-shift-right, 158 length-v-shift-right-names, 523 length-v-threefix, 164 length-v-xor, 158 leq-lessp-difference, 135 leq-log-log, 32 leq-log-log-off, 118 leq-log-log-off1, 1170 leq-log-log-on, 1082 leq-quotient, 28 leq-quotient-off, 121 leq-quotient-off1, 1172 leq-quotient-on, 1084 lessp-1-exp-2, 1200 lessp-1-plus-x-x, 1197 lessp-1-times, 15 lessp-1-times-off, 126 lessp-1-times-off1, 1177 lessp-1-times-on, 1089 lessp-a-plus-a-a, 1197 lessp-count-listp-cdr, 43 lessp-count-listp-cdr-off, 63 lessp-count-listp-cdr-off1, 83 lessp-count-listp-cdr-off2, 84 lessp-count-listp-cdr-on, 83 lessp-count-listp-cdr-on1, 84 lessp-difference-cancellation, 12 lessp-difference-cancellation-o

ff, 12 lessp-difference-plus-arg1, 48 lessp-difference-plus-arg1-comm

uted, 48 uted-off, 63 lessp-difference-plus-arg1-off, 63 lessp-difference=0, 134 lessp-gcd, 33 lessp-gcd-off, 117 lessp-gcd-off1, 1169 lessp-gcd-on, 1081 lessp-plus-fact, 24 lessp-plus-fact-off, 24 lessp-plus-times-proof, 15 lessp-plus-times-proof-off, 126 lessp-plus-times-proof-off1, 1177 lessp-plus-times-proof-on, 1089 lessp-plus-times1, 15 lessp-plus-times1-off, 126 lessp-plus-times1-off1, 1177 lessp-plus-times1-on, 1089 lessp-plus-times2, 15 lessp-plus-times2-off, 126 lessp-plus-times2-off1, 1177 lessp-plus-times2-on, 1089 lessp-quotient, 28 lessp-quotient-2, 1103 lessp-quotient-2-off, 1110 lessp-quotient-off, 120 lessp-quotient-off1, 1172 lessp-quotient-on, 1083 lessp-quotient-test, 1218 lessp-quotient-test-off, 1218 lessp-remainder, 21 lessp-remainder-off, 125 lessp-remainder-off1, 1176 lessp-remainder-on, 1088 lessp-remainder-theorem, 1198 lessp-sub1-plus-a-b-b, 1193 lessp-sub1-x-x, 135 lessp-sub1-x-y-crock, 134 lessp-times-arg1, 17 lessp-times-arg1-off, 125 lessp-times-arg1-off1, 1177 lessp-times-arg1-on, 1088 lessp-times-cancellation-proof, 14 lessp-times-cancellation-proof-

off, 126 off1, 1177

on, 1089 lessp-times-cancellation1, 14 lessp-times-cancellation1-off, 14 lessp-times1, 14 lessp-times1-off, 126 lessp-times1-off1, 1178 lessp-times1-on, 1089 lessp-times1-proof, 14 lessp-times1-proof-off, 126 lessp-times1-proof-off1, 1178 lessp-times1-proof-on, 1090 lessp-times2, 14 lessp-times2-off, 126 lessp-times2-off1, 1178 lessp-times2-on, 1089 lessp-times2-proof, 14 lessp-times2-proof-off, 126 lessp-times2-proof-off1, 1178 lessp-times2-proof-on, 1089 lessp-times3, 14 lessp-times3-off, 126 lessp-times3-off1, 1177 lessp-times3-on, 1089 lessp-times3-proof1, 14 lessp-times3-proof1-off, 126 lessp-times3-proof1-off1, 1178 lessp-times3-proof1-on, 1089 lessp-times3-proof2, 14 lessp-times3-proof2-off, 126 lessp-times3-proof2-off1, 1177 lessp-times3-proof2-on, 1089 lessp-unbind-list-count, 248 lessp-v-to-nat-exp, 1099 lessp-v-to-nat-exp-2-length-a, 1193 lessp-v-to-nat-exp-2-length-a$

linear, 1193 lessp-v-to-nat-exp-off, 1113 lessp-v-to-nat-exp-rewrite, 1099 lessp-v-to-nat-exp-rewrite-off, 1113 lessp-v-to-nat-exp-with-exp-ope

ned, 1102 ned-off, 1111

lessp-x-1, 135 lessp-x-x, 134 letterp, 284, 285 letterp-off, 284 lisp-netlist, 435, 1026 list-32-nth-collapse, 421 list-32-nth-collapse-off, 422 list-as-collected-nth, 147, 148, 420,

421, 776 list-as-collected-nth-off, 147 list-collect-value, 252, 253, 255, 257 list-collect-value-off, 253 list-duplicates, 245, 252 list-duplicates-off, 246 list-elim-4, 147 list-elim-4-off, 147 list-lessp, 248, 249 list-lessp-off, 249 list-list-sort, 250, 258, 381 list-list-sort-off, 250 list-rewrite-4, 147 list-rewrite-4-off, 147 list-sort, 250 list-sort-off, 250 list-to-mem, 558, 559 list-to-mem1, 558 list-to-mem2, 558 list-to-mem3, 558 list-to-tree-mem, 558 list-union-values, 247, 380 list-union-values-off, 247 listify, 246, 256, 257, 262, 334, 357 listify-off, 246 listp-bagint-with-singleton-imp

lies-member, 61 lies-member-off, 66 listp-bagint-with-singleton-mem

ber, 62 ber-off, 66

listp-cdr-factors-implies-intege rp, 84 rp-off, 87 listp-collect-value, 167 listp-delete, 3 listp-delete-off, 3 listp-eval$, 9 listp-eval$-off, 9 listp-implies-not-fourp, 1018 listp-implies-not-fourp-off, 1029 listp-implies-not-fourp-on, 1118 listp-indices, 149 listp-make-tree, 147 listp-nthcdr, 143 listp-subrange, 144 literal-delay-to-range, 325, 326 literal-delay-to-range-off, 325 literal-net-drive, 310–312 literal-net-drive-off, 311 literal-state-type-ok, 368, 369 literal-state-type-ok-off, 368 lnfix, 148, 149 lnk, 551 lnk+, 553 lnk-, 552 loaded-delay, 323, 324 loaded-delay-off, 324 loaded-delays, 324, 345 loaded-delays-off, 324 loading-plus, 307 loading-plus-off, 307 loadings-and-drives-off, 390 loadings-and-drives-simple, 272–276 loadings-and-drives-simple-off, 275 loadings-error, 313, 349 loadings-error-off, 313 local-delay, 321–323 local-delay-count-help, 321 local-delay-count-help-0, 321 local-delay-count-help-0-off, 321 local-delay-count-help-off, 322 local-delay-off, 322 local-drive, 308, 309 local-drive-off, 308 log, 30–32 log-0, 31 log-0-off, 119 log-0-off1, 1170 log-0-on, 1082 log-1, 31 log-1-off, 119 log-1-off1, 1170 log-1-on, 1082 log-exp, 32 log-exp-off, 118 log-exp-off1, 1170 log-exp-on, 1081 log-off, 120 log-off1, 1171 log-on, 1083 log-quotient, 32 log-quotient-exp, 32 log-quotient-exp-off, 118 log-quotient-exp-off1, 1170 log-quotient-exp-on, 1081 log-quotient-off, 118 log-quotient-off1, 1170 log-quotient-on, 1082 log-quotient-times, 32 log-quotient-times-off, 118 log-quotient-times-off1, 1170 log-quotient-times-on, 1081 log-quotient-times-proof, 32 log-quotient-times-proof-off, 118 log-quotient-times-proof-off1, 1170 log-quotient-times-proof-on, 1081 log-times, 32 log-times-exp, 32 log-times-exp-off, 118 log-times-exp-off1, 1170 log-times-exp-on, 1081 log-times-exp-proof, 32 log-times-exp-proof-off, 118 log-times-exp-proof-off1, 1170 log-times-exp-proof-on, 1081 log-times-off, 118 log-times-off1, 1170 log-times-on, 1081 log-times-proof, 32 log-times-proof-off, 118 log-times-proof-off1, 1170 log-times-proof-on, 1081 log2, 550, 558 logs, 33 lookup-module, 237–242, 247, 248,

253–261, 263, 265, 266, 268, 269, 271, 273, 274, 278, 279, 281, 291, 378–382, 385, 419, 429–431, 433, 434, 436–439, 441, 445, 450, 453, 454, 458, 460, 462, 463, 469, 471, 474, 476, 480, 487, 489, 492, 495, 497, 499, 500, 502, 513, 514, 518, 522, 524, 528, 540, 560, 562, 564–570, 578, 582, 672, 688, 713, 721, 738, 744, 748, 750, 752, 754, 757, 775, 790, 799, 954, 955, 976, 998–1001

lookup-module-in-delete-module, 248 lookup-module-in-delete-module-

off, 248 lookup-module-in-unbind-list, 248 lookup-module-in-unbind-list-of

f, 248 lookup-module-off, 237 lsi-bad-names, 286 lsi-bad-names-off, 286 lsi-function-name, 286, 290 lsi-function-name-off, 287 lsi-keywords, 285 lsi-keywords-off, 285 lsi-module-inputs-ok, 292, 293 lsi-module-inputs-ok-off, 292 lsi-module-name-ok, 291, 293 lsi-module-name-ok-off, 292 lsi-module-occurrences-check, 292–294 lsi-module-occurrences-check-of

f, 293 lsi-module-outputs-ok, 292, 293 lsi-module-outputs-ok-off, 292 lsi-module-syntax-check, 293, 294 lsi-module-syntax-check-off, 294 lsi-name-list-errors, 286 lsi-name-list-errors-off, 286 lsi-name-list-ok, 286, 289, 292 lsi-name-list-ok-off, 286 lsi-name-ok, 285, 286, 288, 291, 365 lsi-name-ok-off, 286 lsi-netlist-syntax-check, 294 lsi-netlist-syntax-check-off, 294 lsi-netlist-syntax-ok, 294, 354 lsi-netlist-syntax-ok-off, 294 lsi-occ-body-syntax-check, 290, 291,

293 lsi-occ-body-syntax-check-off, 291 lsi-occ-inputs-ok, 289, 290 lsi-occ-inputs-ok-off, 289 lsi-occ-name-ok, 288, 289 lsi-occ-name-ok-off, 289 lsi-occ-outputs-ok, 289, 290 lsi-occ-outputs-ok-off, 289 lsi-occ-syntax-ok, 289, 291 lsi-occ-syntax-ok-off, 290 lsi-top-level-predicate, 354 lsi-top-level-predicate-off, 354

m-states-list, 248, 255, 265, 282, 283,

336, 373 m-states-list-off, 248 m1*, 438 m1$netlist, 438, 439 m1$state, 439 m1$state-off, 439 m1$value, 439 m1$value-off, 439 m1&, 438, 439 m1&-off, 439 m2*, 439 m2$netlist, 439 m2$state, 440 m2$state-off, 440 m2$value, 439 m2$value-off, 440 m2&, 439, 440 m2&-off, 439 ma-lessp, 307, 314 ma-lessp-off, 307 ma-to-pf, 306, 310, 311 ma-to-pf-off, 306 ma-to-std-drive, 306, 314 ma-to-std-drive-off, 306 machine-state-invariant, 779, 780, 783,

791, 795, 800, 1021 machine-state-invariant-implies

-s-approx, 1020 -s-approx-lemma, 1019 -s-approx-lemma-2, 1019 -s-approx-lemma-2-off, 1028 -s-approx-lemma-2-on, 1117 -s-approx-lemma-3, 1019 -s-approx-lemma-3-off, 1028 -s-approx-lemma-3-on, 1117 -s-approx-lemma-off, 1028 -s-approx-lemma-on, 1117 -s-approx-off, 1028 -s-approx-on, 1117

macrocycle-invariant, 917–922, 924–

927, 1014 macrocycle-invariant*, 919, 921 macrocycle-invariant*-off, 919 macrocycle-invariant*=macrocycle

-invariant, 919 macrocycle-invariant-is-invaria

nt, 921 nt$help, 919

macrocycle-invariant==>chip-s ystem-invariant, 919 ystem-invariant$help, 918

macrocycle-invariant==>pc-reg, 924 make-cancel-ineg-terms-equality, 88,

89 -off, 102 -off1, 1154 -on, 1065

make-cancel-ineg-terms-inequalit y, 92, 93 y-off, 101 y-off1, 1153 y-on, 1064

make-cancel-iplus-inequality-1, 47, 48 make-cancel-iplus-inequality-1-

off, 49 make-cancel-iplus-inequality-si

mplifier, 48 mplifier-off, 64 make-cancel-itimes-equality, 55, 56,

58, 68, 69 make-cancel-itimes-equality-off, 58 make-cancel-itimes-inequality, 60, 61,

80 make-cancel-itimes-inequality-o

ff, 61 make-delay, 318, 323, 331 make-delay-0, 318, 322 make-delay-0-off, 318 make-delay-off, 319 make-delay-or, 326, 328, 333 make-delay-or-off, 326 make-drive-min, 315, 316 make-drive-min-off, 316 make-list, 145, 146, 151, 159, 161,

162, 164, 165, 168, 174–192, 203–205, 265, 505, 536, 558, 559, 568–570, 591, 592, 608, 610, 612, 614, 616, 617, 619, 623, 625, 627, 629, 631, 633, 635, 637, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 666, 668, 701, 717, 746–748, 758, 759, 762– 764, 800, 802–805, 812–814, 925–927, 954, 971, 975, 993, 1007, 1011–1015, 1017, 1022– 1026 make-list-append, 145 make-list-append-tree-crock, 146 make-list-append-tree-crock-off, 146 make-list-crock-for-f$cv=cv, 701 make-list-crock-for-f$cv=cv-of

f, 701 make-list-off, 145 make-output-delay, 331–333 make-output-delay-off, 331 make-pairs, 558 make-ram-state, 265 make-ram-state-off, 265 make-range, 319, 320, 322, 324, 325,

329 make-range-off, 319 make-tree, 147, 459–462, 474, 475,

712–714, 736, 738, 739, 747, 748, 761, 763, 776, 781, 782, 784, 792–794, 796, 801, 802, 804, 811, 813, 838, 850, 851, 859, 869, 873, 901, 902, 904, 907, 909, 911, 913

make-tree-off, 147 map, 305, 310–312, 314, 316, 363 map-down, 927, 928, 1021, 1022 map-down-inverts-map-up, 1022 map-down-inverts-map-up-off, 1024 map-down-inverts-map-up-off1, 1115 map-down-inverts-map-up-on, 1063 map-down-relation, 925, 926 map-down-relation-lemma, 925 map-down-relation-off, 925 map-off, 305 map-up, 921, 922, 924–928, 1014,

1021–1024, 1026 map-up-1-input, 808, 809 map-up-inputs, 808, 809, 925, 927,

928, 1014, 1021–1026 map-up-inputs-off, 808 map-up-inverts-map-down, 927 map-up-off, 922 mark-io-out, 296 mark-io-out-off, 296 mark-io-outs, 296, 343, 344, 351, 380,

383, 384 mark-io-outs-0, 296 mark-io-outs-0-off, 296 mark-io-outs-off, 296 math-theory, 100 max-hierarchical-length-and-name, 287,

288 -off, 287

max-occ-hierarchical-name, 287, 291 max-occ-hierarchical-name-off, 288 mem-32x32-args-crock, 421 mem-32x32-args-crock-off, 421 mem-32x32$netlist, 404, 800 mem-32x32$state, 415 mem-32x32$state-off, 418 mem-32x32$structured-state, 426 mem-32x32$structured-state-1, 424 mem-32x32$structured-state-1-o

ff, 426 mem-32x32$structured-state-off, 426 mem-32x32$structured-value, 424 mem-32x32$structured-value-1, 422 mem-32x32$structured-value-1-o

ff, 424 mem-32x32$structured-value-off, 424 mem-32x32$value, 405 mem-32x32$value-off, 408 mem-32x32&, 404, 405, 415, 422,

424, 426, 800 mem-32x32&-off, 404 mem-map-down, 927 mem-map-up, 921 mem-state, 183, 418 mem-state-off, 184 mem-to-list, 559 mem-value, 183, 408 mem-value-off, 183 mem-width, 929, 930, 974–976, 1020 mem-width-linear-facts, 976 mem-width-linear-facts-off, 997 mem-width-linear-facts-off1, 1151 mem-width-linear-facts-on, 1062 mem-width-non-zero, 975 mem-width-non-zero-off, 997 mem-width-non-zero-off1, 1151 mem-width-non-zero-on, 1062 mem-width-off, 973 mem-width-off1, 1056 mem-width-on, 996 mem-width-on1, 1146 member-0-eval$-list, 79 member-0-eval$-list-off, 104 member-0-eval$-list-off1, 1156 member-0-eval$-list-on, 1068 member-0-itimes-factors-yields-

0-ilessp-consequence-1, 82 0-ilessp-consequence-1-off, 104 0-ilessp-consequence-1-off1, 1156 0-ilessp-consequence-1-on, 1067 0-ilessp-consequence-2, 82 0-ilessp-consequence-2-off, 103 0-ilessp-consequence-2-off1, 1156 0-ilessp-consequence-2-on, 1067 0-off, 104 0-off1, 1156 0-on, 1067 0, 81

member-append, 57 member-append-off, 106 member-append-off1, 1158 member-append-on, 1070 member-bagdiff, 4 member-bagdiff-off, 130 member-bagdiff-off1, 1181 member-bagdiff-on, 1093 member-bagint, 5 member-bagint-off, 130 member-bagint-off1, 1181 member-bagint-on, 1093 member-delete, 4 member-delete-implies-membership,

4 -off, 130 -off1, 1182 -on, 1093

member-delete-off, 130 member-delete-off1, 1182 member-delete-on, 1094 member-implies-numberp, 9 member-implies-numberp-off, 9 member-implies-plus-tree-greate

reqp, 8 reqp-off, 8

member-indices, 149 member-izerop-itimes-fringe, 57 member-izerop-itimes-fringe-off, 64 member-non-list, 3 member-non-list-off, 130 member-non-list-off1, 1182 member-non-list-on, 1094 member==>position, 136 membership-of-0-implies-itimes-

list-is-0, 79 list-is-0-off, 104 list-is-0-off1, 1156 list-is-0-on, 1068

memory-okp, 169, 170, 172–174, 734, 735, 739, 810, 814, 816, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 852, 854, 856, 858, 860, 862, 863, 865, 867, 869, 871, 875, 876, 878, 879, 881, 883, 885–887, 889– 891, 894, 896, 898, 899, 903, 905, 908, 910, 912, 917, 926, 1021, 1022, 1024 memory-okp-after-write-mem, 172 memory-okp-after-write-mem1, 172 memory-okp-if, 172 memory-okp-off, 170 memory-okp==>memory-properp, 174 memory-properp, 169, 171–174, 184,

740, 779, 800, 807, 1021 memory-properp-after-write-mem, 172 memory-properp-after-write-mem1, 172 memory-properp-constant-ram, 172 memory-properp-dual-port-ram-st

ate-crock, 807 memory-properp-if, 171 memory-properp-off, 169 memory-state-invariant, 800, 806, 807 memory-v-fourp, 1017, 1018, 1020,

1021 memory-v-fourp-implies-good-s, 1020 memory-v-fourp-implies-good-s-o

ff, 1028 n, 1117

memory-v-fourp-implies-memory-p roperp, 1021 roperp-off, 1027 roperp-on, 1116 memory-v-fourp-off, 1029 memory-v-fourp-on, 1118 memory-value, 182–184, 424, 762–

764, 800, 802–805, 812–814 memory-value-off, 183 merge-input-delays, 324, 325 merge-input-delays-off, 324 mergeable-input-delay-p, 325 mergeable-input-delay-p-off, 325 microcycles, 916, 917, 920, 921, 923,

924 middle=high, 924 middle=high$help, 922 min, 244, 324, 325 min-off, 244 min-token, 249, 250 min-token-help, 249 min-token-help-lemma, 249 min-token-help-off, 249 min-token-lemma, 249 min-token-off, 249 minus-ineg, 92 minus-ineg-off, 94 mode-a, 541, 546, 548, 622, 624, 625,

632, 649, 670, 673, 716, 724, 828, 829, 836, 838, 848, 868, 893, 894, 900–902, 904, 909, 915

mode-a-off, 542 mode-b, 541, 545, 546, 548, 631, 634,

635, 639, 641, 653, 670, 673, 716, 724, 725, 727, 730, 828– 830, 834, 842, 846, 850, 851, 857, 859, 869, 872, 893–895, 898, 899, 902, 904–908, 910, 911, 913–915

mode-b-off, 542 module-annotation, 238, 254, 284,

294 module-annotation-ok, 283, 284, 294 module-annotation-ok-off, 283 module-data, 351 module-data-off, 351 module-database, 351, 353, 379, 380,

383–385 module-database-off, 351 module-form-ok, 281, 283, 293 module-form-ok-off, 281 module-inputs, 238–241, 253–258, 260– 262, 273–276, 279, 283, 293, 351, 381, 382, 999–1001

module-inputs-ok, 282, 283 module-inputs-ok-off, 282 module-name, 238, 254, 257, 262–

264, 267, 275, 276, 283, 284, 293, 294, 351 module-name-ok, 281, 283 module-name-ok-off, 282 module-occurrences, 238–241, 255,

256, 260, 263, 265, 266, 273, 274, 283, 293, 351, 378, 436, 998–1001 module-occurrences-ok, 282, 284 module-occurrences-ok-off, 283 module-outputs, 238–240, 242, 253,

255, 256, 260, 273–276, 279, 283, 284, 293, 294, 351

module-outputs-ok, 282, 283 module-outputs-ok-off, 282 module-prop-error, 348, 349 module-prop-error-off, 349 module-statenames, 238–242, 255, 265,

266, 284, 293, 294, 351, 999– 1001

module-statenames-ok, 283, 284, 294 module-statenames-ok-off, 283 module-syntax-errors, 283, 284 module-syntax-errors-off, 284 module-syntax-ok, 284 module-syntax-ok-off, 284 module-syntax-simple-okp, 254, 255 module-syntax-simple-okp-off, 255 monotonicity-lemmas, 938 monotonicity-property, 930–933, 939– 952, 972, 993, 998, 1003

monotonicity-property-consequen ce-0, 931 ce-0-off, 1055 ce-0-on, 1145 ce-1, 931 ce-1-off, 1055 ce-1-on, 1145 ce-2, 932 ce-2-off, 1055 ce-2-on, 1145 ce-3, 932 ce-3-off, 1055 ce-3-on, 1145

monotonicity-property-off, 931 monotonicity-property-off1, 1146 monotonicity-property-on, 1057 monotonicity-property-opener-0, 932 monotonicity-property-opener-0-

off, 933 off1, 1146 on, 1057

monotonicity-property-opener-1, 932 monotonicity-property-opener-1-

off, 933 off1, 1146 on, 1057

monotonicity-property-opener-2, 932 monotonicity-property-opener-2-

off, 933 off1, 1146 on, 1057

monotonicity-property-opener-3, 933 monotonicity-property-opener-3-

off, 933 off1, 1147 on, 1057

mpg, 494, 495, 532–536, 608, 610, 612, 614, 616, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 642, 643, 645, 647, 649, 651, 653–655, 657, 659, 661, 663, 665, 667, 669, 838, 850, 851, 859, 868, 872, 901, 902, 904, 907, 909, 911, 913

mpg*, 495 mpg-if-op-code, 494 mpg-off, 494 mpg-zero, 495 mpg-zero-off, 495 mpg$netlist, 495, 714 mpg$value, 495 mpg$value-off, 496 mpg$value-zero, 496 mpg$value-zero-off, 496 mpg&, 495, 496, 714 mpg&-off, 495 multiplication, 21

n, 482, 483, 544, 744, 1188 n-flag, 543, 544, 559, 744, 1186 n-flag-off, 543 n-off, 482 n-set, 542, 544, 591, 742–744, 1189,

1190, 1202, 1203, 1205–1213, 1215, 1216

n-set-off, 542 n-v-alu, 1188 n decode, 594 n decode-off, 594 n fetch0, 593 n fetch0-off, 593 n fetch1, 593 n fetch1-off, 593 n fetch2, 593 n fetch2-off, 593 n fetch3, 594 n fetch3-off, 594 n hold0, 600 n hold0-off, 600 n hold1, 600 n hold1-off, 600 n reada0, 595 n reada0-off, 595 n reada1, 595 n reada1-off, 595 n reada2, 596 n reada2-off, 596 n reada3, 596 n reada3-off, 596 n readb0, 596 n readb0-off, 596 n readb1, 597 n readb1-off, 597 n readb2, 597 n readb2-off, 597 n readb3, 597 n readb3-off, 597 n rega, 594 n rega-off, 594 n regb, 594 n regb-off, 595 n reset0, 601 n reset0-off, 601 n reset1, 602 n reset1-off, 602 n reset2, 602 n reset2-off, 602 n sefa0, 599 n sefa0-off, 599 n sefa1, 599 n sefa1-off, 599 n sefb0, 599 n sefb0-off, 599 n sefb1, 600 n sefb1-off, 600 n update, 595 n update-off, 595 n v11010, 601 n v11010-off, 601 n v11011, 601 n v11011-off, 601 n v11111, 602 n v11111-off, 602 n write0, 598 n write0-off, 598 n write1, 598 n write1-off, 598 n write2, 598 n write2-off, 598 n write3, 598 n write3-off, 599 name-length, 287, 288 name-length-off, 287 name-list-errors, 277, 283, 367 name-list-errors-off, 277 name-list-ok, 277, 278, 282, 360, 366,

374 name-list-ok-off, 277 name-list-simple-okp, 253–255 name-list-simple-okp-off, 253 name-okp, 276, 278, 281, 354, 358, 360, 367, 370, 375–377

name-okp-off, 276

name-simple-okp, 253, 254 name-simple-okp-off, 253 nat-lst-lst-induction, 1009 nat-lst-lst-induction-off, 1033 nat-lst-lst-induction-on, 1123 nat-to-v, 160, 163, 444, 465, 483,

507, 508, 547, 549, 559, 1097– 1102, 1186, 1193, 1197, 1200, 1216, 1218 nat-to-v-as-remainder, 1218 nat-to-v-of-v-to-nat, 1098 nat-to-v-of-v-to-nat*, 1218 nat-to-v-of-v-to-nat*-off, 1218 nat-to-v-of-v-to-nat-general, 1098 nat-to-v-of-v-to-nat-general-of

f, 1114 nat-to-v-of-v-to-nat-off, 1114 nat-to-v-off, 160 nat-to-v-plus-x-x, 1097 nat-to-v-plus-x-x-off, 1114 nat-to-v-remainder, 1098 nat-to-v-remainder-off, 1114 nat-to-v-zerop, 1098 nat-to-v-zerop-off, 1114 natural-state-theory, 603 naturals, 34 naturals-metas, 1096 negativep-idifference-on-numberp

s, 1197 net-drives, 271, 274 net-drives-off, 271 net-drives-simple, 312, 345 net-drives-simple-off, 312 net-error, 250 net-errorp, 250–252, 302, 311, 312,

335, 340, 349, 350, 352–354, 368, 370–372, 379–382, 385, 386

net-errors, 251 net-errors-off, 251 net-min-args, 311, 312 net-min-args-off, 311 netlist-database, 353 netlist-database-off, 353 netlist-loadings-and-drives, 390 netlist-loadings-and-drives-off, 390 netlist-loadings-and-drives-simp

le, 275, 276 le-off, 276

netlist-properties, 353, 354, 379–386,

390 netlist-properties-off, 353 netlist-state-types, 386 netlist-state-types-off, 386 netlist-state-types-simple, 267, 268,

276 netlist-state-types-simple-off, 267 netlist-syntax-errors, 284 netlist-syntax-errors-off, 284 netlist-syntax-ok, 284, 354 netlist-syntax-ok-off, 284 netlist-syntax-simple-okp, 255, 276 netlist-syntax-simple-okp-off, 255 netlist-type-check-simple-okp, 264, 276 netlist-type-check-simple-okp-o

ff, 264 netlist-type-table, 384 netlist-type-table-off, 384 netlist-type-table-simple, 262, 264,

265 netlist-type-table-simple-off, 262 netlist-types-acceptable-list, 263, 264 netlist-types-acceptable-list-o

ff, 264 new-machine-state-invariant, 1017, 1019–

1021 new-machine-state-invariant-imp

lies-good-s, 1020 lies-good-s-off, 1028 lies-good-s-on, 1117 lies-machine-state-invariant, 1021 lies-machine-state-invariant-off,

1027 lies-machine-state-invariant-on,

1116 new-machine-state-invariant-is-

non-trivial, 1021 non-trivial-off, 1027 non-trivial-on, 1116

new-machine-state-invariant-off, 1029 new-machine-state-invariant-on, 1118 next-cntl-state, 716, 717, 719, 723–

733 next-cntl-state*, 719, 721 next-cntl-state-off, 716 next-cntl-state$decode, 724 next-cntl-state$fetch0, 722 next-cntl-state$fetch1, 723 next-cntl-state$fetch2, 723 next-cntl-state$fetch3, 723 next-cntl-state$hold0, 730 next-cntl-state$hold1, 731 next-cntl-state$netlist, 721, 776 next-cntl-state$reada0, 725 next-cntl-state$reada1, 726 next-cntl-state$reada2, 726 next-cntl-state$reada3, 726 next-cntl-state$readb0, 727 next-cntl-state$readb1, 727 next-cntl-state$readb2, 727 next-cntl-state$readb3, 728 next-cntl-state$rega, 724 next-cntl-state$regb, 725 next-cntl-state$reset0, 732 next-cntl-state$reset1, 732 next-cntl-state$reset2, 732 next-cntl-state$sefa0, 729 next-cntl-state$sefa1, 729 next-cntl-state$sefb0, 730 next-cntl-state$sefb1, 730 next-cntl-state$update, 725 next-cntl-state$v11010, 731 next-cntl-state$v11011, 731 next-cntl-state$v11111, 732 next-cntl-state$value, 722 next-cntl-state$value-off, 722 next-cntl-state$write0, 728 next-cntl-state$write1, 728 next-cntl-state$write2, 729 next-cntl-state$write3, 729 next-cntl-state&, 721, 722, 776 next-cntl-state&-off, 721 next-memory-state, 175, 183, 191,

426, 764, 805, 807, 814 next-memory-state-off, 182 next-memory-state-preserves-mem

ory-invariant, 806 next-memory-state$induction, 184, 191 next-state, 673, 674, 679, 689, 716 next-state*, 679, 688 next-state$netlist, 688, 721 next-state$value, 690 next-state$value-off, 690 next-state&, 688, 690, 721 next-state&-off, 688 nil-or-err, 251, 277, 280, 281, 284,

286, 294, 357, 359–362, 364– 367, 369, 375

nil-or-err-off, 252 nlistp-or-err, 251, 277, 280, 286, 335,

338, 350, 357, 359, 361, 362, 364–367, 369, 371, 372, 375

nlistp-or-err-off, 251 no-duplicates-disjoint-firstn-re

stn, 141 no-duplicates-in-indices, 149 no-duplicates-or-err, 252, 277, 281,

286, 338, 360, 366 no-duplicates-or-err-off, 252 no-holds-reset-or-test, 928 not*, 132, 133, 624, 634, 673, 716,

724, 828, 838, 850, 851, 893, 900, 901, 904, 915

not*-off, 132 not-duplicates?-firstn, 140 not-duplicates?-restn, 141 not-equal-iplus-minus-0, 1197 not-equal-tree-size-tree-0, 146 not-integerp-implies-not-equal-ip

lus, 46 lus-off, 87 not-integerp-implies-not-equal-iti

mes, 57 mes-off, 87

not-integerp-minus-zero, 1199

not-lessp-difference, 134 not-lessp-quotient, 1099 not-lessp-quotient-off, 1113 not-litatom==>not-primp, 238 not-member-firstn, 140 not-member-restn, 141 not-member-subrange, 144 not-set-some-flags-make-list-4-

f, 591 not-set-some-flags-update-flags, 591 not-v-iff-v-addr1-v-addr2-read-mem1-write-mem1, 173 not-v-negp-nat-to-v-0, 1200 not-v-nzerop-all-f, 161 not-v-nzerop-as-and-crock, 161 not-v-nzerop-v-xor-x-x, 161 nth, 142, 143, 147–149, 152, 157,

159–162, 167, 174, 421–426, 435, 459, 483, 484, 526, 529– 532, 541–545, 549, 589–591, 604–606, 674–678, 748, 759, 760, 784, 796, 927, 953, 971, 973, 993, 1009–1011, 1016, 1020, 1021, 1024, 1096, 1101, 1190, 1191, 1217

nth-append, 143 nth-append-too, 143 nth-if, 142 nth-if-off, 142 nth-indices, 149 nth-indices-off, 149 nth-length-v, 1096 nth-length-v-off, 1115 nth-off, 142 nth-restn, 142 nth-restn-off, 142 nthcdr, 143, 151, 765, 810, 916, 917 nthcdr-off, 143 number-to-digit, 435 number-to-list, 435 number-to-list1, 435 numberp-eval$-bridge, 8 numberp-eval$-bridge-off, 8 numberp-eval$-plus, 7 numberp-eval$-plus-off, 7 numberp-eval$-plus-tree, 7 numberp-eval$-plus-tree-off, 8 numberp-eval$-times, 16 numberp-eval$-times-off, 16 numberp-eval$-times-tree, 17 numberp-eval$-times-tree-off, 17 numberp-is-integerp, 95 numberp-is-integerp-off, 96 numeric-drives, 314–316 numeric-drives-off, 314

occ-annotation, 238, 253, 279, 290 occ-annotation-ok, 279, 290 occ-annotation-ok-off, 279 occ-arg-length-error, 277–279 occ-arg-length-error-off, 277 occ-body-syntax-errors, 281, 283 occ-body-syntax-errors-off, 281 occ-body-syntax-simple-okp, 254, 255 occ-body-syntax-simple-okp-off, 254 occ-form-ok, 277, 279, 289 occ-form-ok-off, 277 occ-function, 238–243, 253, 256, 257,

261, 263, 266, 274, 275, 279, 287, 288, 290, 344, 378, 436, 998–1001

occ-function-ok, 278, 279, 290 occ-function-ok-off, 279 occ-inputs, 238–243, 253, 254, 256,

257, 261, 262, 275, 279, 280, 287, 288, 290, 343, 344, 999– 1001

occ-inputs-ok, 278, 279 occ-inputs-ok-off, 278 occ-name, 238–243, 253, 254, 266,

279, 280, 287–290, 343, 999– 1001

occ-name-ok, 277, 279 occ-name-ok-off, 278 occ-outputs, 238, 239, 241, 243, 253,

254, 257, 261, 275, 279, 280, 287–290, 343, 344, 426, 427, 999, 1000

occ-outputs-ok, 278, 279 occ-outputs-ok-off, 278 occ-syntax-errors, 279, 280 occ-syntax-errors-off, 279 occ-syntax-ok, 279, 281 occ-syntax-ok-off, 280 occ-syntax-simple-okp, 253, 254 occ-syntax-simple-okp-off, 254 occurrence-data, 346, 351, 379, 380,

383–385 occurrence-data-off, 346 occurrences, 3, 4 occurrences-bagdiff, 4 occurrences-bagdiff-off, 130 occurrences-bagdiff-off1, 1181 occurrences-bagdiff-on, 1093 occurrences-bagint, 4 occurrences-bagint-off, 130 occurrences-bagint-off1, 1181 occurrences-bagint-on, 1093 occurrences-delete, 4 occurrences-delete-off, 130 occurrences-delete-off1, 1181 occurrences-delete-on, 1093 occurrences-off, 131 occurrences-off1, 1182 occurrences-on, 1094 ok-in-type, 302, 303 ok-in-type-off, 302 ok-input-types, 376, 377 ok-input-types-off, 376 ok-name-list, 375–377 ok-name-list-off, 375 ok-netlistp, 998, 1003, 1008–1011,

1016 ok-netlistp-off, 1041 ok-netlistp-on, 1130 ok-netlistp-reduction, 1003 ok-netlistp-reduction-off, 1039 ok-netlistp-reduction-on, 1128 ok-netlistp-reduction-rewrite, 1003 ok-netlistp-reduction-rewrite-o

ff, 1039 n, 1128

ok-out-depends, 375–377 ok-out-depends-off, 376 ok-out-type, 302, 304 ok-out-type-off, 302 ok-output-types, 376, 377 ok-output-types-off, 376 ok-states, 375, 377 ok-states-off, 375 one-pstate-type-ok, 369 one-pstate-type-ok-off, 369 op-add, 1188, 1192, 1207, 1208, 1218,

1219 op-addc, 1187, 1192, 1206, 1207, 1218,

1219 op-and, 1188, 1217 op-asr, 1188, 1214–1217, 1219 op-code, 542, 545, 548, 549, 610,

614–617, 619, 621, 623, 627, 629, 631, 633, 637, 639, 643, 645, 647, 651, 655, 657, 659, 661, 668–670, 673, 716, 718, 721, 724, 725, 727, 828, 831, 834, 835, 842, 857, 893, 895, 897–899, 902, 907, 908, 914, 915

op-code-off, 542 op-dec, 1188, 1193, 1194, 1210, 1211,

1218, 1219 op-inc, 1187, 1192, 1204, 1205, 1218,

1219 op-lsr, 1188, 1191, 1196, 1217, 1218 op-m15, 1188, 1191, 1192, 1201–1204,

1217 op-move, 1187, 1191, 1200–1204, 1217 op-neg, 1188, 1208, 1209, 1219 op-not, 1188, 1217 op-or, 1188, 1217 op-ror, 1188, 1190, 1217 op-sub, 1188–1190, 1195, 1196, 1213,

1218, 1219 op-subb, 1188, 1194, 1195, 1211, 1212,

1218, 1219 op-xor, 1188, 1191, 1217 opcode-theory, 1188 open-b-equv, 154 open-b-equv3, 154 open-b-xor, 154 open-b-xor3, 154 open-chip-system-operating-input

s-p, 808 open-dual-eval-body-bindings, 243 open-dual-eval-with-flag-1, 241 open-dual-eval-with-flag-3, 242 open-fm9001-interpreter, 547 open-indices, 148 open-list-as-collected-nth, 147 open-make-list, 145 open-make-list-off, 145 open-map-up, 922 open-map-up-inputs, 809 open-nth, 142 open-nth-off, 142 open-nth-off1, 1063 open-nth-on, 1009 open-nth-on1, 1152 open-nthcdr, 143 open-operating-inputs-p, 915 open-read-fn, 873 open-run-inputs-p, 810 open-run-inputs-p-add1, 810 open-simulate-dual-eval-2, 244 open-subrange, 144 open-subrange-off, 145 open-total-microcycles, 916 open-v-threefix, 164 operating-inputs-p, 915, 916, 920, 921,

923–928, 1014, 1021, 1023, 1025

operating-inputs-p-1, 916 operating-inputs-p-implies-hold

–input, 916 operating-inputs-p-implies-run-i

nputs-p, 916 operating-inputs-p-off, 915 operating-inputs-p-plus, 916 or*, 131, 132, 624, 632, 634, 641,

673, 716, 724, 725, 730, 828, 829, 834, 838, 848, 850, 851, 859, 869, 893, 894, 898–901, 904, 906, 910, 914, 915

or*-off, 131 or-delay-args, 331–333 or-delay-args-off, 333 or-delay-args-to-ranges, 325, 326 or-delay-args-to-ranges-off, 326 or-zerop-tree, 15, 18–20 or-zerop-tree-is-not-zerop-tree, 18

-off, 18 or-zerop-tree-off, 125 or-zerop-tree-off1, 1177 or-zerop-tree-on, 1089 our-car-cdr-elim, 133 our-car-cdr-elim-off, 133 our-difference-x-x, 134 our-equal-difference-0, 134 our-member-append, 135 out-depends, 379–381 out-depends-error, 335, 349 out-depends-error-off, 336 out-depends-off, 381 out-depends-simple, 255–258 out-depends-simple-off, 257 out-prop-signals, 356, 358, 360, 372,

376 out-prop-signals-off, 356 out-types-error, 305, 349 out-types-error-off, 305 output-delay, 333 output-delay-off, 333 output-dependencies, 381 output-dependencies-off, 382 output-dependencies-simple, 257 output-dependencies-simple-off, 258 output-label, 355, 358, 362, 363, 366 output-label-off, 355 output-type, 300, 303, 304 output-type-off, 300 overflow-help, 519, 523, 530 overflow-help*, 521, 522 overflow-help$netlist, 522, 541 overflow-help$value, 522 overflow-help$value-off, 522 overflow-help$value-zero, 523 overflow-help$value-zero-off, 523 overflow-help&, 522, 523, 540 overflow-help&-off, 522

p-cell, 498, 499, 501 p-cell*, 499 p-cell$netlist, 499, 502 p-cell$value, 499 p-cell$value-off, 499 p-cell$value-zero, 499 p-cell&, 499, 502 p-cell&-off, 499 p-map-down, 926, 927 p-map-up, 921, 1017 p-name-prop-value-ok, 360, 361, 363 p-name-prop-value-ok-off, 360 p-t-wire-args-ok, 360, 361, 363 p-t-wire-args-ok-off, 360 paddressed-state-call-ok, 368, 369 paddressed-state-call-ok-off, 368 pairlist-append, 142 pairlist-cons, 142 pairlist-nlistp, 142 pairlist-off, 141 pairlists-are-equal-when-their-

2nd-lists-are-nlistp, 142 pairstates, 237–241, 955–970, 976–

991, 999–1001 parent-props-alist, 376, 377 parent-props-alist-off, 377 parent-synonym, 297, 298, 308, 316,

321, 327, 333, 338, 339 parent-synonym-off, 297 parent-synonym-simple, 268, 270, 272 parent-synonym-simple-off, 268 parent-synonym0, 297 parent-synonym0-off, 297 parent-synonyms-list, 297, 298, 339 parent-synonyms-list-off, 298 pc, 552 pc+, 553 pc-, 552 pc-reg, 760, 763, 764, 924 pc-reg-input, 760, 763, 807, 809, 810,

813, 915, 916 pc-reg-input-off, 761 pc-reg-off, 760 pdelay-ok, 361, 362 pdelay-ok-off, 362 pdelays-errors, 362 pdelays-errors-off, 362 pdelays-ok, 362, 374 pdelays-ok-off, 362 pdrive-ok, 362, 363 pdrive-ok-off, 363 pdrives-errors, 363, 364 pdrives-errors-off, 364 pdrives-ok, 364, 374 pdrives-ok-off, 364 per-pf-delay-slope, 320, 331 per-pf-delay-slope-off, 320 per-std-load-delay-slope, 320, 331 per-std-load-delay-slope-off, 320 pf-difference, 307, 311 pf-difference-off, 307 pf-lessp, 307, 310 pf-lessp-off, 307 pf-plus, 306, 307 pf-plus-off, 307 pf-to-ma, 306, 311 pf-to-ma-off, 306 pf-to-std-load, 306, 310, 313, 320 pf-to-std-load-off, 306 pfp, 305–307, 310, 311, 313, 320,

364 pfp-off, 306 phalf-delay-ok, 360, 361 phalf-delay-ok-off, 361 pin-type-errors, 357, 358 pin-type-errors-off, 357 pin-type-ok, 357 pin-type-ok-off, 357 pin-types-ok, 358, 374 pin-types-ok-off, 358 ploading-ok, 364 ploading-ok-off, 364 ploadings-errors, 364, 365 ploadings-errors-off, 365 ploadings-ok, 365, 374 ploadings-ok-off, 365 plsi-name-ok, 365, 374 plsi-name-ok-off, 366 plus-0, 133 plus-add1, 133 plus-add1-arg1, 5 plus-add1-arg1-off, 129 plus-add1-arg1-off1, 1181 plus-add1-arg1-on, 1092 plus-add1-arg2, 5 plus-add1-arg2-off, 129 plus-add1-arg2-off1, 1180 plus-add1-arg2-on, 1092 plus-add1-off, 929 plus-add1-on, 930 plus-add1-sub1, 133 plus-bottom, 133 plus-cancellation, 5 plus-cancellation-off, 5 plus-difference-arg1, 6 plus-difference-arg1-off, 129 plus-difference-arg1-off1, 1180 plus-difference-arg1-on, 1092 plus-difference-arg2, 6 plus-difference-arg2-off, 129 plus-difference-arg2-off1, 1180 plus-difference-arg2-on, 1092 plus-fringe, 7–12 plus-fringe-off, 129 plus-fringe-off1, 1180 plus-fringe-on, 1092 plus-iplus, 95 plus-iplus-off, 96 plus-off, 133 plus-quotient-2, 1103 plus-quotient-2-lemma, 1103 plus-quotient-2-lemma-off, 1103 plus-quotient-2-lemma-on, 1183 plus-quotient-2-off, 1103 plus-quotient-2-on, 1183 plus-remainder-times-quotient, 21 plus-remainder-times-quotient-o

ff, 21 plus-tree, 7–12 plus-tree-bagdiff, 8 plus-tree-bagdiff-off, 8 plus-tree-delete, 8 plus-tree-delete-off, 8 plus-tree-off, 129 plus-tree-off1, 1180 plus-tree-on, 1092 plus-tree-plus-fringe, 9 plus-tree-plus-fringe-off, 9 plus-zero-arg2, 5 plus-zero-arg2-off, 129 plus-zero-arg2-off1, 1181 plus-zero-arg2-on, 1093 pmemory-word-call-ok, 368, 369 pmemory-word-call-ok-off, 368 pname-listp, 354, 375 pname-listp-off, 354 pnew-states-ok, 373, 374 pnew-states-ok-off, 373 position, 136, 149, 166 position-name-indices, 149 position-off, 136 post-inc-p, 543, 545, 546, 548, 565,

624, 634, 641, 673, 716, 724, 725, 730, 829, 834, 838, 850, 851, 859, 869, 894, 898–901, 904, 906, 910, 914, 915

post-inc-p-off, 543 pout-depends-errors, 366, 367 pout-depends-errors-off, 366 pout-depends-ok, 367, 374 pout-depends-ok-off, 367 pout-depends-one-ok, 366 pout-depends-one-ok-off, 366 pout-type-errors, 359, 360 pout-type-errors-off, 359 pout-type-ok, 358, 359 pout-type-ok-off, 359 pout-types-ok, 359, 374 pout-types-ok-off, 360 pre-dec-p, 543, 545, 546, 548, 565,

622, 624, 625, 631, 634, 635, 639, 641, 649, 653, 673, 716, 724, 725, 730, 828, 829, 834, 836, 838, 846, 850, 851, 857, 859, 868, 869, 872, 893, 894, 898–902, 904–911, 913–915

pre-dec-p-off, 543

pred-error, 250–252, 279, 285, 286, 288, 300, 302, 310, 311, 353, 355, 358, 361–363, 368, 371, 372, 374, 377, 379–386

pred-error-off, 250

predicate-properties, 353, 354 predicate-properties-off, 354 presult-form-errors, 370, 371 presult-form-errors-off, 371 presult-ok, 371–373 presult-ok-off, 371 presults-errors, 371–373 presults-errors-off, 372 presults-ok, 372, 374 presults-ok-off, 373 primitive-count, 379 primitive-count-off, 379 primitive-ok, 377 primitive-ok-off, 377 primitive-prop-errors, 374, 377 primitive-prop-errors-off, 375 primitive-prop-ok, 373, 374 primitive-prop-ok-off, 374 primitive-properties, 294, 295, 375 primitive-properties-off, 295 primitives-monotone, 952 primp, 238–242, 253–255, 257, 260,

263, 265, 272, 278, 282, 286– 288, 292, 343, 379–382, 385, 436, 938, 954, 955, 976, 998– 1000, 1008 primp-database, 238, 377 primp-database-errors, 377 primp-database-errors-off, 377 primp-database-predicate, 377 primp-database-predicate-off, 378 primp-lookup, 238, 286, 382, 385,

436 primp-monotone, 998 primp-monotone-off, 1041 primp-monotone-on, 1130 primp-off, 238 primp-preserves-good-s, 1008 primp-preserves-good-s-off, 1034 primp-preserves-good-s-on, 1123 primp2, 238, 239, 253, 255, 257, 260,

263, 272, 273, 278, 286, 379– 382, 385, 436

procmon-monotone, 947 procmon-monotone-off, 1046 procmon-monotone-on, 1135 procmon-preserves-good-s, 1006 procmon-preserves-good-s-off, 1036 procmon-preserves-good-s-on, 1125 procmon$netlist, 400, 791 procmon$value, 400 procmon$value-off, 401 procmon&, 400, 791 procmon&-off, 400 prop*-theory, 132 properp, 136, 140–145, 147–149, 151,

164, 168, 169, 172–175, 184, 191, 202–205, 242, 253, 254, 317, 355, 358, 376, 420–422, 424, 426, 429, 430, 432, 433, 435, 452, 456, 459, 461, 462, 464, 468, 473, 475, 478, 481, 482, 494, 495, 510, 516, 517, 523, 526, 528, 531, 541, 547, 548, 563, 566, 567, 578, 588– 590, 592, 670, 673, 690, 704, 714, 715, 718, 722, 733, 739– 741, 744–746, 748, 749, 751, 753, 755, 759, 765, 776, 779, 780, 783, 792, 795, 800, 801, 805–810, 874, 918, 925, 926, 930, 954, 971, 974–976, 1007, 1017–1020, 1098 properp-append, 136 properp-append-nil, 136 properp-as-null-nthcdr, 143 properp-as-null-nthcdr-off, 143 properp-cddr-f$tv-alu-help, 510 properp-cdr-f$tv-dec-pass-ng, 468 properp-collect-value, 168 properp-cons, 136 properp-dual-eval-0, 242 properp-dual-eval-2, 242 properp-f$tv-alu-help, 510 properp-f$tv-dec-pass-ng, 468 properp-firstn, 140 properp-fv-if, 203 properp-if, 136 properp-if*, 136 properp-indices, 149 properp-length-cv fetch1, 670 properp-length-dual-port-ram-va

lue, 175 properp-length-f$core-alu, 531 properp-length-f$cv, 704 properp-length-f$dec-pass, 475 properp-length-f$decode-5, 578 properp-length-f$encode-32, 587 properp-length-f$extend-immedi

ate, 748 properp-length-f$mpg, 494 properp-length-f$next-cntl-state, 718 properp-length-f$next-state, 689 properp-length-f$read-regs, 739 properp-length-f$select-op-code, 566 properp-length-f$shift-or-buf, 526 properp-length-f$update-flags, 744 properp-length-f$v-if-f-4, 567 properp-length-f$v-inc4$v, 464 properp-length-f$write-regs, 741 properp-length-fv-or, 202 properp-length-fv-shift-right, 204 properp-length-fv-xor, 202 properp-length-ir-accessors, 547 properp-length-memory-value, 184 properp-length-next-memory-state, 191 properp-length-v-pullup, 204 properp-length-v-wire, 204 properp-length-vft-buf, 205 properp-length-write-regs, 733 properp-make-list, 145 properp-mpg, 494 properp-nlistp, 136 properp-off, 136 properp-pairlist, 142 properp-read-fn, 874 properp-read-mem, 173 properp-read-mem-32, 173 properp-read-mem1, 173 properp-restn, 141 properp-shift-right-names, 523 properp-subrange, 143 properp-v-threefix, 164 prove-boolp, 149 ps-pfp, 317, 320, 361 ps-pfp-off, 317 pstate-type-list-errors, 369 pstate-type-list-errors-off, 369 pstate-type-ok, 369, 370 pstate-type-ok-off, 369 pstate-types-errors, 369, 370 pstate-types-errors-off, 370 pstate-types-ok, 370, 374 pstate-types-ok-off, 370 pstates-ok, 367, 374 pstates-ok-off, 367 pullup-monotone, 949 pullup-monotone-off, 1044 pullup-monotone-on, 1133 pullup-preserves-good-s, 1006 pullup-preserves-good-s-off, 1035 pullup-preserves-good-s-on, 1124 pullup$netlist, 409, 433, 800 pullup$value, 409 pullup$value-off, 409 pullup&, 409, 433, 799 pullup&-off, 409

quotient-1-arg1, 28 quotient-1-arg1-casesplit, 28 quotient-1-arg1-casesplit-off, 120 quotient-1-arg1-casesplit-off1, 1172 quotient-1-arg1-casesplit-on, 1084 quotient-1-arg1-off, 120 quotient-1-arg1-off1, 1172 quotient-1-arg1-on, 1084 quotient-1-arg2, 28 quotient-1-arg2-off, 121 quotient-1-arg2-off1, 1172 quotient-1-arg2-on, 1084 quotient-add1, 25 quotient-add1-off, 122 quotient-add1-off1, 1174 quotient-add1-on, 1085 quotient-add1-plus-x-x-2, 1214 quotient-difference-lessp-arg2, 50 quotient-difference-lessp-arg2-

off, 64 quotient-difference-plus-x-x-ad d1-plus-y-y-2, 1214 quotient-difference-plus-x-x-pl

us-y-y-2, 1214 quotient-difference1, 26 quotient-difference1-off, 121 quotient-difference1-off1, 1173 quotient-difference1-on, 1085 quotient-difference2, 27 quotient-difference2-off, 121 quotient-difference2-off1, 1173 quotient-difference2-on, 1084 quotient-difference3, 27 quotient-difference3-off, 121 quotient-difference3-off1, 1173 quotient-difference3-on, 1084 quotient-exp, 30 quotient-exp-off, 119 quotient-exp-off1, 1171 quotient-exp-on, 1083 quotient-lessp, 134 quotient-lessp-arg1, 27 quotient-lessp-arg1-off, 121 quotient-lessp-arg1-off1, 1173 quotient-lessp-arg1-on, 1085 quotient-lessp-double-remainder

$help, 1193 quotient-noop, 25 quotient-noop-off, 122 quotient-noop-off1, 1174 quotient-noop-on, 1085 quotient-of-non-number, 25 quotient-of-non-number-off, 122 quotient-of-non-number-off1, 1174 quotient-of-non-number-on, 1085 quotient-plus, 25 quotient-plus-fact, 27 quotient-plus-fact-off, 121 quotient-plus-fact-off1, 1173 quotient-plus-fact-on, 1084 quotient-plus-off, 122 quotient-plus-off1, 1173 quotient-plus-on, 1085 quotient-plus-proof, 25 quotient-plus-proof-off, 122 quotient-plus-proof-off1, 1173 quotient-plus-proof-on, 1085 quotient-plus-times-times, 27 quotient-plus-times-times-insta

nce, 28 nce-off, 121 nce-off1, 1172 nce-on, 1084

quotient-plus-times-times-off, 121 quotient-plus-times-times-off1, 1172 quotient-plus-times-times-on, 1084 quotient-plus-times-times-proof, 27

-off, 121 -off1, 1172 -on, 1084

quotient-plus-x-x-2, 1097 quotient-plus-x-x-2-off, 1114 quotient-plus-x-x-2-with-extra-

arg, 1103 arg-off, 1103 arg-on, 1183

quotient-quotient, 28 quotient-quotient-off, 121 quotient-quotient-off1, 1172 quotient-quotient-on, 1084 quotient-remainder, 27 quotient-remainder-instance, 27 quotient-remainder-instance-off, 121

1, 1173 quotient-remainder-instance-on, 1084 quotient-remainder-off, 121 quotient-remainder-off1, 1173 quotient-remainder-on, 1084 quotient-remainder-times, 27 quotient-remainder-times-off, 121 quotient-remainder-times-off1, 1173 quotient-remainder-times-on, 1084 quotient-remainder-uniqueness, 50 quotient-remainder-uniqueness-o

ff, 110 ff1, 1162 n, 1073

quotient-stuff, 550 quotient-sub1, 25 quotient-sub1-off, 122 quotient-sub1-off1, 1174 quotient-sub1-on, 1085 quotient-times, 26 quotient-times-instance, 26 quotient-times-instance-off, 122 quotient-times-instance-off1, 1173 quotient-times-instance-on, 1085 quotient-times-instance-temp, 26 quotient-times-instance-temp-of

f, 26 quotient-times-instance-temp-pr

oof, 25 oof-off, 122 oof-off1, 1173 oof-on, 1085

quotient-times-off, 122 quotient-times-off1, 1173 quotient-times-on, 1085 quotient-times-proof, 26 quotient-times-proof-off, 122 quotient-times-proof-off1, 1173 quotient-times-proof-on, 1085 quotient-times-times, 26 quotient-times-times-off, 26 quotient-times-times-proof, 26 quotient-times-times-proof-off, 121 quotient-times-times-proof-off1, 1173 quotient-times-times-proof-on, 1085 quotient-x-x, 28 quotient-x-x-off, 120 quotient-x-x-off1, 1172 quotient-x-x-on, 1084 quotient-zero, 25 quotient-zero-off, 122 quotient-zero-off1, 1174 quotient-zero-on, 1085 quotients, 29

r0, 551 r0+, 552 r0-, 552 r1, 551 r1+, 552 r1-, 552 r10, 551 r10+, 553 r10-, 552 r11, 551 r11+, 553 r11-, 552 r12, 551 r12+, 553 r12-, 552 r13, 551 r13+, 553 r13-, 552 r14, 551 r14+, 553 r14-, 552 r15, 551 r15+, 553 r15-, 552 r2, 551 r2+, 553 r2-, 552 r3, 551 r3+, 553 r3-, 552 r4, 551 r4+, 553 r4-, 552 r5, 551 r5+, 553 r5-, 552 r6, 551 r6+, 553 r6-, 552 r7, 551 r7+, 553 r7-, 552 r8, 551 r8+, 553 r8-, 552 r9, 551 r9+, 553 r9-, 552 ram, 169–171, 265, 558, 973, 1011,

1013 ram-enable-circuit-monotone, 949 ram-enable-circuit-monotone-off, 1045 ram-enable-circuit-monotone-on, 1134 ram-enable-circuit-preserves-go

od-s, 1006 od-s-off, 1035 od-s-on, 1125

ram-enable-circuit$netlist, 408, 739 ram-enable-circuit$value, 408 ram-enable-circuit$value-off, 408 ram-enable-circuit&, 408, 738 ram-enable-circuit&-off, 408 ram-guts, 169, 170, 267, 368, 387,

388, 559, 929, 930, 972, 1017, 1020

ramp, 169–171, 267, 368, 387, 388, 559, 929, 930, 972, 973, 975, 1017, 1018, 1020

ramp-implies-not-fourp, 1018 ramp-implies-not-fourp-off, 1028 ramp-implies-not-fourp-on, 1118 ramp-mem, 171, 173, 174 ramp-mem-off, 171 ramp-mem1, 171–174 ramp-mem1-off, 171 range-dependencies, 319–322, 324, 328–

331 range-dependencies-off, 319 range-dependencies-off1, 322 range-dependencies-off2, 329 range-dependencies-on, 321 range-dependencies-on1, 326 range-max, 319, 320, 322, 324, 325,

329, 330 range-max-off, 319 range-min, 319–321, 324, 325, 328,

329 range-min-off, 319 range-plus, 320, 323, 328, 331 range-plus-off, 320 rangep, 319–321, 324, 325, 327–329 rangep-off, 319 read-fn, 873–877, 879, 880, 882, 884 read-fn-off, 873 read-mem, 170, 173, 174, 182, 545–

547, 733, 734, 824, 842, 853, 893, 894, 901, 905, 916, 926, 954, 971

read-mem-monotone, 954 read-mem-monotone-off, 994 read-mem-monotone-off1, 1149 read-mem-monotone-on, 1059 read-mem-off, 170 read-mem-write-mem, 173 read-mem1, 170, 172, 173, 953, 954 read-mem1-monotone, 953 read-mem1-monotone-induction, 953 read-mem1-monotone-induction-of

f, 1042 read-mem1-monotone-induction-on,

1131 read-mem1-monotone-off, 993 read-mem1-monotone-off1, 1148 read-mem1-monotone-on, 1059 read-mem1-off, 170 read-regs, 733–735, 739, 815, 817,

818, 826, 830, 832, 834, 836, 840, 841, 844–846, 848, 855, 857, 866, 870, 874–882, 884, 888, 890, 891, 895, 897, 899, 901, 902, 904–909, 911, 917

read-regs-off, 733 read-regs-write-regs-f, 734 read-regs=read-mem, 734 read-regs=read-mem-write-mem, 734 reada0->reada3$sim, 899 reada0$step, 835 reada1$step, 837 reada2$step, 839 reada3$induction, 877, 878 reada3$progress, 879 reada3$progress-help, 878 reada3$step0, 841 reada3$step1, 843 readb0->readb3$sim, 902 readb0$step, 845 readb1$step, 847 readb2$step, 849 readb3$induction, 881 readb3$progress, 883 readb3$progress-help, 881 readb3$step0, 852 readb3$step1, 854 reg*, 476, 477 reg*-off, 476 reg*$destructure, 476 reg*$destructure-off, 476 reg-40$value-as-cntl-state-off, 779 reg-body, 475–478 reg-body-induction, 477 reg-body-off, 475 reg-body$all-unbound-in-body, 477 reg-body$all-unbound-in-body-o

ff, 477 reg-body$state, 478 reg-body$unbound-in-body, 477 reg-body$unbound-in-body-off, 477 reg-body$value, 477 reg-direct->not-reg-indirect, 548 reg-direct-p, 543, 545, 546, 548, 565,

632, 673, 716, 724, 725, 727, 828, 830, 842, 848, 893, 895, 902, 904, 914, 915 reg-direct-p-off, 543 reg-indirect-p, 543, 548 reg-indirect-p-off, 543 reg-mode-theory, 543 reg-size, 541, 547 reg$netlist, 476, 477, 776 reg$state, 478 reg$state-off, 478 reg$value, 478 reg$value-off, 478 reg&, 476, 478, 775 reg&-off, 476 rega->rega$sim, 894 rega$step, 829 regb->update$sim, 896 regb$step, 831 regfile*, 735, 737–739 regfile*-off, 738 regfile*$destructure, 737 regfile*$destructure-off, 738 regfile-okp, 810, 814, 816, 817, 819,

821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 852, 854, 856, 858, 860, 862, 863, 865, 867, 869, 871, 875, 876, 878, 880, 881, 883, 885–887, 889–891, 894, 896, 898, 899, 903, 905, 908, 910, 912

regfile$netlist, 739, 776 regfile$state, 741 regfile$state-off, 742 regfile$value, 740 regfile$value-off, 740 regfile&, 738–741, 775 regfile&-off, 738 regs, 544, 547, 559, 761–763, 921,

922, 925 regs-address, 606, 608, 610, 612, 614,

616, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 666, 668, 761–764, 781–783, 792–794, 801–804, 811–814

regs-address-off, 606 regs-off, 545 remainder-1-arg1, 24 remainder-1-arg1-off, 122 remainder-1-arg1-off1, 1174 remainder-1-arg1-on, 1086 remainder-1-arg2, 24 remainder-1-arg2-off, 122 remainder-1-arg2-off1, 1174 remainder-1-arg2-on, 1086 remainder-add1, 21 remainder-add1-off, 124 remainder-add1-off1, 1176 remainder-add1-on, 1087 remainder-add1-plus-multiple, 1097 remainder-add1-plus-multiple-of

f, 1115 remainder-difference-plus-x-x-a

dd1-plus-y-y, 1214 remainder-difference-plus-x-x-p

lus-y-y, 1214 remainder-difference1, 23 remainder-difference1-off, 123 remainder-difference1-off1, 1175 remainder-difference1-on, 1086 remainder-difference2, 23 remainder-difference2-off, 123 remainder-difference2-off1, 1175 remainder-difference2-on, 1086 remainder-difference3, 23 remainder-difference3-off, 23 remainder-equals-its-first-argu

ment, 27 ment-off, 27

remainder-exp, 30 remainder-exp-exp, 30 remainder-exp-exp-off, 119 remainder-exp-exp-off1, 1171 remainder-exp-exp-on, 1083 remainder-exp-off, 120 remainder-exp-off1, 1171 remainder-exp-on, 1083 remainder-gcd, 33 remainder-gcd-off, 117 remainder-gcd-off1, 1169 remainder-gcd-on, 1080 remainder-noop, 21 remainder-noop-off, 124 remainder-noop-off1, 1176 remainder-noop-on, 1088 remainder-of-non-number, 21 remainder-of-non-number-off, 124 remainder-of-non-number-off1, 1176 remainder-of-non-number-on, 1088 remainder-plus, 21 remainder-plus-fact, 24 remainder-plus-fact-off, 123 remainder-plus-fact-off1, 1174 remainder-plus-fact-on, 1086 remainder-plus-multiple, 1097 remainder-plus-multiple-off, 1115 remainder-plus-off, 124 remainder-plus-off1, 1176 remainder-plus-on, 1087 remainder-plus-proof, 21 remainder-plus-proof-off, 124 remainder-plus-proof-off1, 1176 remainder-plus-proof-on, 1087 remainder-plus-times-times, 24 remainder-plus-times-times-inst

ance, 24 ance-off, 123 ance-off1, 1174 ance-on, 1086

remainder-plus-times-times-off, 123 remainder-plus-times-times-off1, 1174 remainder-plus-times-times-on, 1086 remainder-plus-times-times-proo

f, 24 f-off, 123 f-off1, 1174 f-on, 1086

remainder-plus-x-x-2, 1097 remainder-plus-x-x-2-off, 1114 remainder-quotient-elim, 21 remainder-quotient-elim-off, 124 remainder-quotient-elim-off1, 1176 remainder-quotient-elim-on, 1087 remainder-remainder, 24 remainder-remainder-off, 123 remainder-remainder-off1, 1174 remainder-remainder-on, 1086 remainder-theorem-for-subb, 1194 remainder-times-times, 22 remainder-times-times-off, 22 remainder-times-times-proof, 22 remainder-times-times-proof-off, 123

1, 1175 remainder-times-times-proof-on, 1087 remainder-times1, 22 remainder-times1-instance, 22 remainder-times1-instance-off, 124 remainder-times1-instance-off1, 1175 remainder-times1-instance-on, 1087 remainder-times1-instance-proof, 22

-off, 124 -off1, 1175 -on, 1087

remainder-times1-off, 124 remainder-times1-off1, 1175 remainder-times1-on, 1087 remainder-times1-proof, 22 remainder-times1-proof-off, 124 remainder-times1-proof-off1, 1175 remainder-times1-proof-on, 1087 remainder-times2, 23 remainder-times2-instance, 23 remainder-times2-instance-off, 123 remainder-times2-instance-off1, 1175 remainder-times2-instance-on, 1086 remainder-times2-off, 123 remainder-times2-off1, 1175 remainder-times2-on, 1087 remainder-times2-proof, 22 remainder-times2-proof-off, 123 remainder-times2-proof-off1, 1175 remainder-times2-proof-on, 1087 remainder-x-x, 24 remainder-x-x-off, 122 remainder-x-x-off1, 1174 remainder-x-x-on, 1086 remainder-zero, 21 remainder-zero-off, 124 remainder-zero-off1, 1176 remainder-zero-on, 1088 remainders, 25 remove-duplicates, 246, 338, 367 remove-duplicates-off, 246 remove-inegs, 87–94 remove-inegs-off, 92 report-error, 250 report-error-off, 250 required-for-prop, 351, 352 required-for-prop-off, 352 required-props, 352, 353, 379, 380,

383–385 required-props-off, 352 reset-, 760, 763 reset–input, 760, 763, 809, 810, 813,

915, 916 reset–input-off, 761 reset–off, 760 reset-chip, 1024 reset-chip-from-any-state, 1024 reset-chip-from-any-state-off, 1027 reset-chip-from-any-state-on, 1116 reset-chip-off, 1027 reset-chip-on, 1116 reset-sequence, 1012, 1014 reset-sequence-chip-1, 1015, 1016, 1020,

1021, 1024 reset-sequence-chip-1-off, 1030 reset-sequence-chip-1-on, 1119 reset-sequence-chip-1-vs-2, 1016 reset-sequence-chip-1-vs-2-off, 1030 reset-sequence-chip-1-vs-2-on, 1119 reset-sequence-chip-2, 1015, 1016 reset-sequence-chip-2-off, 1030 reset-sequence-chip-2-on, 1119 reset-sequence-off, 1031 reset-sequence-on, 1120 reset-vector, 1012 reset-vector-chip, 1014, 1015 reset-vector-chip-off, 1030 reset-vector-chip-on, 1119 reset-vector-off, 1032 reset-vector-on, 1121 reset-works, 1014 reset-works-off, 1031 reset-works-on, 1120 resolve-names, 555, 556 restn, 140–142, 146, 151, 152, 159–

161, 166, 168, 452, 473, 516 restn-append, 141 restn-nat-to-v-0-hack, 160 restn-off, 140 restn-v-not, 159 restn-v-not-off, 159 results-length, 371, 372 results-length-off, 371 rev-0, 435 rev1, 137, 138, 165, 435, 953 rev1-off, 137 reverse, 138, 165, 170, 171, 173, 353,

953 reverse-off, 138 rewrite-and*, 132 rewrite-chip-system-input-invari

ant, 808 rewrite-equal-v-to-int-0, 1197 rewrite-equal-v-to-int-0-off, 1197 rewrite-equal-v-to-nat-0, 1187 rewrite-equal-v-to-nat-0-off, 1187 rewrite-fm9001-next-state-for-step

-lemmas, 810 rewrite-not*, 132 rewrite-or*, 132 rewrite-value, 166 rewrite-value-4x, 166 rn-a, 541, 546–548, 617, 623, 625,

633, 647, 649, 716, 718, 721, 830, 831, 836, 838, 839, 848, 866–869, 895, 896, 901, 902, 904, 909, 910

rn-a-off, 542

rn-b, 541, 545, 546, 548, 619, 621, 627, 631, 635, 639, 641, 651, 653, 716, 718, 721, 832–835, 840, 841, 846, 847, 850–852, 857, 859, 860, 870–873, 897– 899, 901, 904–908, 911–913

rn-b-off, 542 rom, 169 rom-guts, 169, 170, 267, 368, 387,

388, 559, 929, 930, 973, 1017, 1020

romp, 169, 170, 267, 368, 387, 388, 559, 929, 930, 972, 973, 1017, 1018, 1020

romp-implies-not-fourp, 1018 romp-implies-not-fourp-off, 1028 romp-implies-not-fourp-on, 1117 run-fm9001, 764, 765, 809, 815–873,

875, 877, 879, 880, 882, 883, 885, 887, 888, 890–892, 895, 897, 899, 900, 903, 906, 909, 911, 913, 916, 917, 921, 924, 926, 1014

run-fm9001-base-case, 764 run-fm9001-off, 764 run-fm9001-plus, 765 run-fm9001-step-case, 764 run-fm9001-step-case-off, 765 run-inputs-p, 809, 810, 814, 816, 818,

819, 821, 823, 825, 827, 829, 832, 833, 835, 837, 839, 842, 843, 846, 847, 849, 852, 854, 856, 858, 860, 862, 864, 866, 867, 870, 871, 875, 876, 878, 880, 882, 883, 885, 886, 888– 890, 892, 895, 896, 898, 900, 903, 905, 908, 910, 912, 916

run-inputs-p-1, 810 run-inputs-p-off, 809 run-inputs-p-plus, 810 run-vector, 1012 run-vector-chip-1, 1015 run-vector-chip-1-off, 1030 run-vector-chip-1-on, 1119 run-vector-chip-2, 1015 run-vector-chip-2-off, 1030 run-vector-chip-2-on, 1119 run-vector-off, 1031 run-vector-on, 1121 rw-, 604, 607, 609, 611, 613, 615,

617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 761–764, 782, 784, 793, 794, 796, 802–805, 811–814

rw–off, 604

s-approx, 929–932, 938, 953, 954, 972–976, 1002, 1003, 1009– 1011, 1016, 1018–1020, 1024

s-approx-alist, 930–933, 1002, 1003 s-approx-alist-implies-s-approx -collect-value, 1003 -collect-value-off, 1039 -collect-value-on, 1128 -list-collect-value, 1003 -list-collect-value-off, 1039 -list-collect-value-on, 1129 -value, 1002 -value-off, 1040 -value-on, 1129 s-approx-alist-off, 1056 s-approx-alist-on, 1145 s-approx-cadr-nth, 1009 s-approx-cadr-nth-off, 1033 s-approx-cadr-nth-on, 1123 s-approx-constant-ram-x-constant

-ram-x, 975 -ram-x-off, 996 -ram-x-off1, 1151 -ram-x-on, 1061

s-approx-constant-ram-x-id, 975 s-approx-constant-ram-x-id-off, 996 s-approx-constant-ram-x-id-off1, 1151 s-approx-constant-ram-x-id-on, 1061 s-approx-constant-ram-x-write-me

m, 975 m-off, 997 m-off1, 1151 m-on, 1062 m1, 975 m1-case-3, 975 m1-case-3-off, 997 m1-case-3-off1, 1151 m1-case-3-on, 1062 m1-off, 997 m1-off1, 1151 m1-on, 1062

s-approx-implies-b-approx, 938 s-approx-implies-b-approx-off, 1053 s-approx-implies-b-approx-on, 1143 s-approx-implies-properp-read-me

m, 954 m-off, 994 m-off1, 1149 m-on, 1060 m1, 954 m1-off, 994 m1-off1, 1149 m1-on, 1060

s-approx-implies-s-approx-alist, 1003 -off, 1039 -on, 1129

s-approx-list, 1002, 1003 s-approx-list-implies-s-approx-

alist, 1002 alist-off, 1040 alist-on, 1129

s-approx-list-off, 1040 s-approx-list-on, 1129 s-approx-make-list, 1018 s-approx-make-list-off, 1029 s-approx-make-list-on, 1118 s-approx-off, 973 s-approx-off1, 1056 s-approx-on, 996 s-approx-on1, 1146 s-approx-opener, 972 s-approx-opener-off, 996 s-approx-opener-off1, 1150 s-approx-opener-on, 1061 s-approx-write-mem-id, 975 s-approx-write-mem-id-off, 996 s-approx-write-mem-id-off1, 1150 s-approx-write-mem-id-on, 1061 s-approx-write-mem1-id, 975 s-approx-write-mem1-id-off, 996 s-approx-write-mem1-id-off1, 1150 s-approx-write-mem1-id-on, 1061 s-approx-x-x, 929 s-approx-x-x-off, 1056 s-approx-x-x-on, 1145 s-knownp, 930, 1010, 1011, 1016 s-knownp-implies-s-approx-is-eq

ual, 930 ual-off, 972 ual-off1, 1056 ual-on, 995 ual-on1, 1145

s-knownp-off, 972 s-knownp-off1, 1056 s-knownp-on, 995 s-knownp-on1, 1145 same-fix-int-implies-not-ilessp, 62

-off, 63 sefa0->sefa1$sim, 908 sefa0$step, 865 sefa1$step, 867 sefb0->sefb1$sim, 910 sefb0$step, 869 sefb1->sefb1$sim, 912 sefb1$step, 871 select-immediate, 605, 608, 610, 612,

613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 664, 666, 668, 761– 763, 781, 782, 793, 794, 802– 804, 811–813

select-immediate-off, 605 select-op-code*, 566 select-op-code$netlist, 566, 714 select-op-code$value, 567 select-op-code$value-off, 567 select-op-code&, 566, 567, 714 select-op-code&-off, 566 set-diff, 245, 252, 254, 280, 337, 353,

375 set-diff-off, 245 set-equal, 245, 265, 336, 365 set-equal-off, 245 set-flags, 541, 545, 548, 621, 639,

670, 673, 716, 718, 721, 724, 828, 834, 857, 893, 897, 899, 907, 915

set-flags-off, 542 set-flags-theory, 543 set-some-flags, 591, 673, 716, 724,

828, 893, 915 set-some-flags-off, 591 set-value, 247, 302 set-value-off, 247 shift-or-buf, 525–527, 531 shift-or-buf-cntl, 523, 525, 526 shift-or-buf-cntl*, 524 shift-or-buf-cntl$netlist, 524, 528 shift-or-buf-cntl$value, 524 shift-or-buf-cntl$value-off, 525 shift-or-buf-cntl$value-zero, 525 shift-or-buf-cntl&, 524, 525, 528 shift-or-buf-cntl&-off, 524 shift-or-buf-is-asr, 526 shift-or-buf-is-buf, 526 shift-or-buf-is-lsr, 527 shift-or-buf-is-ror, 526 shift-or-buf-off, 526 show-that-nth=t, 152 show-that-nth=t-off, 152 sign-extend, 161, 162, 546, 748, 830,

848, 895, 904 sign-extend-as-append, 162 sign-extend-as-append-off, 162 sign-extend-off, 162 signal-namep, 297, 298, 308, 309,

313, 316, 321, 325, 326, 332, 333, 388

signal-namep-off, 297 simple-dependency-table, 257, 258,

276 simple-dependency-table-off, 257 simplify-if*, 132 simulate, 243, 244, 1010, 1011, 1016, 1020, 1021, 1024 simulate-contains-simulate-dual

-eval-2, 1024 -eval-2-off, 1027 -eval-2-on, 1116

simulate-dual-eval-2, 244, 809, 925,

928, 1014, 1022, 1024, 1026 simulate-dual-eval-2-off, 244 simulate-monotone, 1009 simulate-monotone-induction, 1009 simulate-monotone-induction-off, 1033 simulate-monotone-induction-on, 1122 simulate-monotone-off, 1033 simulate-monotone-on, 1122 simulate-reset-chip-final-state, 1016

-off, 1030 -on, 1119

single-number-induction, 33 single-number-induction-off, 118 single-number-induction-off1, 1169 single-number-induction-on, 1081 singleton-collect-value, 168 slope-times-load, 320, 323 slope-times-load-off, 321 some-eval$s-to-0, 83, 84 some-eval$s-to-0-append, 84 some-eval$s-to-0-append-off, 103 some-eval$s-to-0-append-off1, 1155 some-eval$s-to-0-append-on, 1066 some-eval$s-to-0-eliminator, 84 some-eval$s-to-0-eliminator-of

f, 103 f1, 1155

some-eval$s-to-0-eliminator-on, 1066 some-eval$s-to-0-off, 103 some-eval$s-to-0-off1, 1155 some-eval$s-to-0-on, 1066 split-out-ineg-terms, 87, 88, 92 split-out-ineg-terms-off, 102 split-out-ineg-terms-off1, 1154 split-out-ineg-terms-on, 1065 state, 606, 608, 610, 612, 614, 616,

617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 666, 668, 763, 783, 784, 794, 796, 804, 814

state-label, 355, 369, 373 state-label-off, 355 state-off, 606 state-okp, 388 state-okp-0, 386–388 state-okp-0-off, 388 state-okp-off, 388 state-simple-okp, 267, 268 state-simple-okp-off, 268 state-type-requirement, 385, 388 state-type-requirement-off, 386 state-type-requirement-simple, 265–

268 state-type-requirement-simple-o

ff, 266 state-types-error, 336, 349 state-types-error-off, 336 states-list-or-nil, 282, 283, 293 states-list-or-nil-off, 282 std-drive-to-ma, 306, 314 std-drive-to-ma-off, 306 std-load-to-pf, 306, 307, 310, 311,

313, 320 std-load-to-pf-off, 306 store-cc, 541, 545, 548, 620, 634, 670,

673, 716, 724, 725, 727, 728, 828, 831, 834, 842, 850, 851, 853, 893, 896, 897, 899, 902, 904, 905, 914, 915

store-cc-off, 542 store-resultp, 544, 545, 548, 563, 620,

634, 673, 716, 724, 725, 727, 728, 828, 831, 834, 842, 850, 851, 853, 893, 896, 897, 899, 902, 904, 905, 914, 915, 1188– 1196, 1200–1216

store-resultp-mux, 559, 561 store-resultp-mux*, 560 store-resultp-mux$netlist, 560, 563 store-resultp-mux$value, 560 store-resultp-mux$value-off, 561 store-resultp-mux&, 560, 562 store-resultp-mux&-off, 560 store-resultp-off, 544 strobe-, 604, 607, 609, 611, 613, 615,

617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 761–764, 782, 784, 794, 796, 802–805, 812– 814

strobe–off, 604 stub, 169, 558, 1012, 1013 stub-guts, 169, 170, 267, 368, 387,

388, 929, 930, 973, 1017, 1020

stub-right, 558 stubp, 169–171, 267, 368, 387, 388,

559, 929, 930, 953, 973–975, 1017, 1019, 1020

stubp-implies-not-fourp, 1019 stubp-implies-not-fourp-off, 1028 stubp-implies-not-fourp-on, 1117 sub, 549 subbagp, 3, 4, 8, 17–20, 29, 46, 57,

59, 61–63, 78, 81 subbagp-bagint1, 4 subbagp-bagint1-off, 130 subbagp-bagint1-off1, 1181 subbagp-bagint1-on, 1093 subbagp-bagint2, 4 subbagp-bagint2-off, 130 subbagp-bagint2-off1, 1181 subbagp-bagint2-on, 1093 subbagp-cdr1, 4 subbagp-cdr1-off, 130 subbagp-cdr1-off1, 1181 subbagp-cdr1-on, 1093 subbagp-cdr2, 4 subbagp-cdr2-off, 130 subbagp-cdr2-off1, 1181 subbagp-cdr2-on, 1093 subbagp-delete, 4 subbagp-delete-off, 130 subbagp-delete-off1, 1181 subbagp-delete-on, 1093 subbagp-implies-plus-tree-greate

reqp, 8 reqp-off, 8

subbagp-off, 131 subbagp-off1, 1182 subbagp-on, 1094 subbagp-subsetp, 59 subbagp-subsetp-off, 87 subnet, 378–380, 382–385 subnet-off, 378 subnet0, 378 subnet0-off, 378 subrange, 143–145, 165, 169, 174,

175, 183, 541, 542, 606, 760, 776, 779, 784, 796, 953, 971, 975, 993

subrange-0, 144 subrange-append-left, 144 subrange-append-right, 144 subrange-cons, 144 subrange-cons-off, 144 subrange-off, 143 subset, 138, 140, 141, 144, 167, 245,

254, 256, 263, 264, 375, 376 subset-append, 138 subset-cons, 138 subset-firstn, 140 subset-nlistp, 138 subset-off, 138 subset-or-err, 252, 280, 281, 353, 360,

366 subset-or-err-off, 252 subset-restn, 141 subset-subrange, 144 subset-x-cons-y-z, 138 subset-x-x, 138 subsetp, 58, 59, 62 subsetp-implies-itimes-list-eva l$-equals-0, 59 l$-equals-0-off, 65

subsetp-off, 106 subsetp-off1, 1158 subsetp-on, 1069 subtraction-cases-for-integer-i

n-rangep-lemmas, 1198 subtype, 298, 300, 302 subtype-off, 299 sum-loading, 270 sum-loading-off, 270 sum-loadings, 270 sum-loadings-off, 270 sum-numbers, 269–271 sum-numbers-off, 269

t-and-f-to-1-and-0, 556 t-buf-monotone, 949 t-buf-monotone-off, 1045 t-buf-monotone-on, 1134 t-buf-preserves-good-s, 1006 t-buf-preserves-good-s-off, 1035 t-buf-preserves-good-s-on, 1124 t-buf$netlist, 408, 438 t-buf$value, 408 t-buf$value-off, 408 t-buf&, 408, 439 t-buf&-off, 408 t-carry, 444–448, 503–505, 530 t-carry*, 445 t-carry-congruence, 445 t-carry-off, 444 t-carry-p-g-carry, 446 t-carry$netlist, 445, 514, 540 t-carry$value, 445 t-carry$value-off, 445 t-carry&, 445, 514, 540 t-carry&-off, 445 t-or-err, 251, 277–279, 281–283, 285,

286, 288, 289, 292, 336, 355, 357–369, 372, 374, 377

t-or-err-off, 251 t-or-nor*, 453–455 t-or-nor*-off, 453 t-or-nor*$destructure, 453 t-or-nor*$destructure-off, 453 t-or-nor-body, 452, 453 t-or-nor-induction, 455, 456 t-or-nor$netlist, 455, 458, 461 t-or-nor$value, 456 t-or-nor$value-off, 456 t-or-nor&, 453, 454, 456, 458, 460 t-or-nor&-off, 455 t-wire-error, 338, 339 t-wire-error-off, 338 t-wire-monotone, 949 t-wire-monotone-off, 1044 t-wire-monotone-on, 1134 t-wire-preserves-good-s, 1006 t-wire-preserves-good-s-off, 1035 t-wire-preserves-good-s-on, 1124 t-wire$netlist, 409, 434, 439 t-wire$value, 409 t-wire$value-off, 409 t-wire&, 408, 409, 434, 439 t-wire&-off, 408 t fetch0, 913–915 t fetch1, 915, 916 t reada0, 914, 915 t readb0, 914, 915 t rega, 915 t regb, 914, 915 t sefa0, 914, 915 t sefb0, 914, 915 t sefb1, 913, 914 t update, 914, 915 t write0, 914, 915 tfirstn, 146, 446–449, 451, 453, 455–

457, 464–468, 470, 472, 503– 505, 508–510, 514, 515

threefix, 150, 164, 175–182, 184–200,

204, 568–570, 740 threefix-help-lemma, 197 threefix-help-lemma-off, 197 threefix-idempotent, 150 threefix=x, 150 threefix=x-off, 150 threep, 150 times-1, 134 times-1-arg1, 14 times-1-arg1-off, 126 times-1-arg1-off1, 1178 times-1-arg1-on, 1090 times-2, 1102 times-2-off, 1111 times-add1, 13 times-add1-again, 134 times-add1-off, 127 times-add1-off1, 1179 times-add1-on, 1090 times-bottom, 134 times-commutes, 134 times-distributes-over-differen

ce, 13 ce-off, 127 ce-off1, 1178 ce-on, 1090 ce-proof, 13 ce-proof-off, 127 ce-proof-off1, 1178 ce-proof-on, 1090 times-distributes-over-plus, 13 times-distributes-over-plus-off, 127

1, 1178 times-distributes-over-plus-on, 1090 times-distributes-over-plus-pro

of, 13 of-off, 127 of-off1, 1178 of-on, 1090

times-fringe, 15, 18–20, 28, 29

times-fringe-off, 125 times-fringe-off1, 1177 times-fringe-on, 1089 times-quotient, 14 times-quotient-off, 126 times-quotient-off1, 1178 times-quotient-on, 1090 times-quotient-proof, 13 times-quotient-proof-off, 127 times-quotient-proof-off1, 1178 times-quotient-proof-on, 1090 times-tree, 15, 17–20, 29 times-tree-append, 18 times-tree-append-off, 18 times-tree-of-times-fringe, 18 times-tree-of-times-fringe-off, 18 times-tree-off, 126 times-tree-off1, 1177 times-tree-on, 1089 times-zero, 13 times-zero-off, 127 times-zero-off1, 1179 times-zero-on, 1090 token-lessp, 249 token-lessp-off, 249 too-many-restns, 141 top-level-predicate, 354, 1026 top-level-predicate-off, 354 top-level-predicate-simple, 276, 1026 tos, 551 tos+, 553 tos-, 552 total-microcycles, 916, 917, 924–928,

1014, 1021–1026 total-microcycles-off, 916 tr-or-nor, 456–459 tr-or-nor-off, 456 tr-or-nor=btr-or-nor, 457 transfer-in-type, 303, 304 transfer-in-type-off, 303 transfer-loading, 309 transfer-loading-off, 309 transfer-loadings, 309, 310, 345 transfer-loadings-off, 310 transitivity-of-divides, 24 transitivity-of-divides-off, 122 transitivity-of-divides-off1, 1174 transitivity-of-divides-on, 1086 tree-height, 146, 449, 457, 458, 515 tree-height-off, 147 tree-number, 192, 449–461, 469, 470,

472–474, 513–517, 527–529, 537–541, 712, 713, 736, 738, 747

tree-number-off, 192 tree-size, 146, 147, 448–450, 452, 453,

456–459, 465–471, 473, 505– 508, 510, 511, 513, 516, 527– 529, 531–541

tree-size-1-crock, 146 tree-size-lemmas, 146 tree-size-make-tree, 147 tree-size-nlistp, 146 tree-size-off, 146 trestn, 146, 446–449, 451, 453, 456,

457, 465, 466, 468, 470, 472, 503–505, 509, 510, 515

tri-state-errors, 340, 349 tri-state-errors-off, 340 tri-state-typep, 299, 302, 357, 358 tri-state-typep-off, 299 ttl-bidirect-monotone, 950 ttl-bidirect-monotone-off, 1044 ttl-bidirect-monotone-on, 1133 ttl-bidirect-pads*, 756–758 ttl-bidirect-pads*-off, 757 ttl-bidirect-pads*$destructure, 757

-off, 757 ttl-bidirect-pads-body, 756–758 ttl-bidirect-pads-body-off, 756 ttl-bidirect-pads-body$inducti

on, 756 ttl-bidirect-pads-body$unbound

-in-body, 758 -in-body-off, 758

ttl-bidirect-pads-body$value, 758 ttl-bidirect-pads-body$value-o

ff, 759 ttl-bidirect-pads$netlist, 758, 791 ttl-bidirect-pads$value, 759 ttl-bidirect-pads$value-off, 759 ttl-bidirect-pads&, 757, 759, 791 ttl-bidirect-pads&-off, 758 ttl-bidirect-preserves-good-s, 1007 ttl-bidirect-preserves-good-s-o

ff, 1035 n, 1124

ttl-bidirect$netlist, 409, 758

ttl-bidirect$value, 409 ttl-bidirect$value-off, 409 ttl-bidirect&, 409, 757, 758 ttl-bidirect&-off, 409 ttl-clk-input-monotone, 950 ttl-clk-input-monotone-off, 1044 ttl-clk-input-monotone-on, 1133 ttl-clk-input-preserves-good-s, 1007 ttl-clk-input-preserves-good-s-

off, 1035 on, 1124

ttl-clk-input$netlist, 409, 791 ttl-clk-input$value, 410 ttl-clk-input$value-off, 410 ttl-clk-input&, 409, 410, 790 ttl-clk-input&-off, 409 ttl-input-monotone, 950 ttl-input-monotone-off, 1044 ttl-input-monotone-on, 1133 ttl-input-pads*, 750 ttl-input-pads*-off, 750 ttl-input-pads*$destructure, 750 ttl-input-pads*$destructure-of

f, 750 ttl-input-pads-body, 749–751 ttl-input-pads-body-off, 749 ttl-input-pads-body$induction, 749,

750 ttl-input-pads-body$unbound-in

-body, 750 -body-off, 750

ttl-input-pads-body$value, 751 ttl-input-pads-body$value-off, 751 ttl-input-pads$netlist, 750, 791 ttl-input-pads$value, 751 ttl-input-pads$value-off, 751 ttl-input-pads&, 750, 751, 790 ttl-input-pads&-off, 750 ttl-input-preserves-good-s, 1007 ttl-input-preserves-good-s-off, 1035 ttl-input-preserves-good-s-on, 1124 ttl-input$netlist, 410, 750, 791 ttl-input$value, 410 ttl-input$value-off, 410 ttl-input&, 410, 750, 751, 790 ttl-input&-off, 410 ttl-output-fast-monotone, 951 ttl-output-fast-monotone-off, 1043 ttl-output-fast-monotone-on, 1132 ttl-output-fast-preserves-good-

s, 1007 s-off, 1035 s-on, 1124

ttl-output-fast$netlist, 411, 791

ttl-output-fast$value, 411 ttl-output-fast$value-off, 411 ttl-output-fast&, 411, 791 ttl-output-fast&-off, 411 ttl-output-monotone, 950 ttl-output-monotone-off, 1043 ttl-output-monotone-on, 1133 ttl-output-pads*, 752 ttl-output-pads*-off, 752 ttl-output-pads*$destructure, 752 ttl-output-pads*$destructure-o

ff, 752 ttl-output-pads-body, 751–753 ttl-output-pads-body-off, 751 ttl-output-pads-body$induction, 751,

752 ttl-output-pads-body$unbound-i

n-body, 753 n-body-off, 753

ttl-output-pads-body$value, 753 ttl-output-pads-body$value-off, 753 ttl-output-pads$netlist, 752, 791 ttl-output-pads$value, 753 ttl-output-pads&, 752, 753, 791 ttl-output-pads&-off, 752 ttl-output-parametric-monotone, 951 ttl-output-parametric-monotone-

off, 1043 on, 1132

ttl-output-parametric-preserves -good-s, 1007 -good-s-off, 1035 -good-s-on, 1124

ttl-output-parametric$netlist, 410, 791 ttl-output-parametric$value, 410 ttl-output-parametric$value-of

f, 411 ttl-output-parametric&, 410, 791 ttl-output-parametric&-off, 410 ttl-output-preserves-good-s, 1007 ttl-output-preserves-good-s-off, 1035 ttl-output-preserves-good-s-on, 1124 ttl-output$netlist, 410, 752, 791 ttl-output$value, 410 ttl-output$value-off, 410 ttl-output&, 410, 752, 753, 791 ttl-output&-off, 410 ttl-tri-output-fast-monotone, 951 ttl-tri-output-fast-monotone-of

f, 1042 ttl-tri-output-fast-monotone-on, 1132 ttl-tri-output-fast-preserves-g

ood-s, 1007 ood-s-off, 1034 ood-s-on, 1124

ttl-tri-output-fast$netlist, 411, 791 ttl-tri-output-fast$value, 411 ttl-tri-output-fast$value-off, 411 ttl-tri-output-fast&, 411, 791 ttl-tri-output-fast&-off, 411 ttl-tri-output-monotone, 951 ttl-tri-output-monotone-off, 1043 ttl-tri-output-monotone-on, 1132 ttl-tri-output-pads*, 754, 755 ttl-tri-output-pads*-off, 754 ttl-tri-output-pads*$destructu

re, 754 re-off, 754

ttl-tri-output-pads-body, 753–755 ttl-tri-output-pads-body-off, 753 ttl-tri-output-pads-body$inducti

on, 753, 754 ttl-tri-output-pads-body$unbou

nd-in-body, 755 nd-in-body-off, 755

ttl-tri-output-pads-body$value, 755

-off, 755 ttl-tri-output-pads$netlist, 755, 791 ttl-tri-output-pads$value, 755 ttl-tri-output-pads$value-off, 756 ttl-tri-output-pads&, 754, 755, 791 ttl-tri-output-pads&-off, 755 ttl-tri-output-preserves-good-s, 1007

-off, 1035 -on, 1124

ttl-tri-output$netlist, 411, 755 ttl-tri-output$value, 411 ttl-tri-output$value-off, 411 ttl-tri-output&, 411, 755 ttl-tri-output&-off, 411 tv-adder, 446–448, 465, 507, 508 tv-adder-as-p-g-sum, 448 tv-adder-as-p-g-sum-off, 448 tv-adder-off, 448 tv-alu-help, 503–508, 511, 530, 531 tv-alu-help*, 513, 514 tv-alu-help*-off, 513 tv-alu-help*$destructure, 513 tv-alu-help*$destructure-off, 513 tv-alu-help-body, 513 tv-alu-help-induction, 514, 515 tv-alu-help-lemma-crock, 516 tv-alu-help-lemma-crock-off, 516 tv-alu-help-length, 505 tv-alu-help-off, 505 tv-alu-help-tv-adder-works, 506 tv-alu-help-tv-adder-works-off, 507 tv-alu-help-tv-dec-a-works, 507 tv-alu-help-tv-dec-a-works-off, 507 tv-alu-help-tv-dec-b-works, 508 tv-alu-help-tv-dec-b-works-off, 508 tv-alu-help-tv-inc-a-works, 507 tv-alu-help-tv-inc-a-works-off, 507 tv-alu-help-tv-inc-b-works, 507 tv-alu-help-tv-inc-b-works-off, 507 tv-alu-help-tv-neg-works, 508 tv-alu-help-tv-neg-works-off, 508 tv-alu-help-tv-subtracter-works, 507

-off, 507 tv-alu-help-v-and-works, 505 tv-alu-help-v-and-works-off, 506 tv-alu-help-v-buf-works, 506 tv-alu-help-v-buf-works-off, 506 tv-alu-help-v-not-works, 506 tv-alu-help-v-not-works-off, 506 tv-alu-help-v-or-works, 506 tv-alu-help-v-or-works-off, 506 tv-alu-help-v-xor-works, 506 tv-alu-help-v-xor-works-off, 506 tv-alu-help-zero, 505 tv-alu-help-zero-off, 505 tv-alu-help$netlist, 514, 540 tv-alu-help$value, 516 tv-alu-help$value-base-case, 516 tv-alu-help$value-base-case-of

f, 516 tv-alu-help$value-off, 517 tv-alu-help&, 513, 514, 516, 540 tv-alu-help&-off, 514 tv-dec-pass, 464, 465, 467 tv-dec-pass-crock-1, 465 tv-dec-pass-crock-2, 465 tv-dec-pass-length, 465 tv-dec-pass-name, 469–473 tv-dec-pass-ng, 466, 467, 469 tv-dec-pass-ng*, 470, 471, 473 tv-dec-pass-ng*-off, 471 tv-dec-pass-ng*$destructure, 471 tv-dec-pass-ng*$destructure-of

f, 471 tv-dec-pass-ng-body, 469, 471 tv-dec-pass-ng-body-off, 470 tv-dec-pass-ng-induction, 471, 472 tv-dec-pass-ng-is-cdr-tv-dec-pa

ss, 467 tv-dec-pass-ng-lemma-crock, 473 tv-dec-pass-ng-lemma-crock-off, 473 tv-dec-pass-ng-length, 466 tv-dec-pass-ng-length-1, 467 tv-dec-pass-ng-off, 466 tv-dec-pass-ng-works-1, 467 tv-dec-pass-ng-works-2, 467 tv-dec-pass-ng$netlist, 473–475 tv-dec-pass-ng$value, 473 tv-dec-pass-ng$value-off, 473 tv-dec-pass-ng&, 471, 473–475 tv-dec-pass-ng&-off, 471 tv-dec-pass-off, 465 tv-dec-pass-works, 465 tv-if*, 449–451 tv-if*-off, 450 tv-if*$destructure, 450 tv-if*$destructure-off, 450 tv-if-body, 448, 450 tv-if-induction, 451 tv-if-lemma-crock, 451 tv-if-lemma-crock-off, 452 tv-if$netlist, 450, 451, 528, 714, 739,

748, 776 tv-if$value, 452 tv-if$value-off, 452 tv-if&, 450–452, 528, 714, 738, 748,

776 tv-if&-off, 450 tv-shift-or-buf*, 527, 528 tv-shift-or-buf*-off, 528 tv-shift-or-buf*$destructure, 527 tv-shift-or-buf*$destructure-o

ff, 528 tv-shift-or-buf$netlist, 528, 541 tv-shift-or-buf$value, 528 tv-shift-or-buf$value-off, 529 tv-shift-or-buf$value-zero, 529 tv-shift-or-buf$value-zero-off, 529 tv-shift-or-buf&, 528, 529, 540 tv-shift-or-buf&-off, 528 tv-zerop*, 457, 458 tv-zerop*-off, 458 tv-zerop*$destructure, 457 tv-zerop*$destructure-off, 458 tv-zerop$netlist, 458, 462 tv-zerop$value, 459 tv-zerop$value-off, 459 tv-zerop&, 458, 459, 462 tv-zerop&-off, 458 type-count, 386 type-count-lessp1, 386 type-count-lessp1-off, 388 type-count-lessp2, 386 type-count-lessp2-off, 388 type-count-lessp3, 386 type-count-lessp3-off, 388 type-count-off, 386 type-delay-slope, 330, 331 type-delay-slope-off, 331 type-drive, 314–316 type-drive-off, 314 type-loading, 313 type-loading-off, 313 type-value, 299, 300, 304 type-value-off, 299 type-value-simple, 258 type-value-simple-off, 258 type-value0, 299 type-value0-off, 299 types-acceptablep, 262–264 types-acceptablep-off, 263 types-compatiblep, 299, 302, 384 types-compatiblep-off, 299

ucar, 355, 359, 362–364, 372, 376 ucar-off, 355 ucdr, 356, 359, 362–364, 372, 376 ucdr-off, 356 un-fm9001, 559 unary-op-code-p, 485, 486, 549, 564,

673, 716, 724, 725, 727, 828, 831, 835, 842, 893, 895, 898, 899, 902, 914, 915

unary-op-code-p*, 564 unary-op-code-p->v-alu=v-alu-

1-off, 486 1, 486

unary-op-code-p-off, 485 unary-op-code-p-op-code->v-al

u=v-alu-1, 549 unary-op-code-p$netlist, 564, 672 unary-op-code-p$value, 564 unary-op-code-p$value-off, 564 unary-op-code-p&, 564, 672 unary-op-code-p&-off, 564 unbind, 247, 248, 298, 300, 308 unbind-list, 248, 352 unbind-list-off, 248 unbind-netlist-props, 353 unbind-netlist-props-0, 352, 353 unbind-netlist-props-0-off, 353 unbind-netlist-props-off, 353 unbind-off, 248 unbound-in-body, 426, 427, 429–431,

433, 434, 442, 477, 480, 750, 753, 755, 758 unbound-in-body-dual-eval-1, 427 unbound-in-body-listp, 427 unbound-in-body-nlistp, 427 unbound-in-body-off, 426 unbound-keys, 247, 252 unbound-keys-off, 247 union-values, 247, 334 union-values-off, 247 universal-flags-interpretations, 1188 unknown, 295, 300, 302, 304, 311,

314–316, 326–329, 332, 333, 355, 356, 371, 373, 375, 376

unknown-args, 370, 371 unknown-args-off, 370 unknown-machine-state, 1011, 1012, 1016, 1019–1021, 1024

unknown-machine-state-off, 1032 unknown-machine-state-on, 1121 unknown-memory-state, 1012 unknown-memory-state-off, 1032 unknown-memory-state-on, 1121 unknown-regfile, 1011 unknown-regfile-off, 1032 unknown-regfile-on, 1121 unknown-state, 1012, 1014 unknown-state-off, 1032 unknown-state-okp, 1014 unknown-state-okp-off, 1031 unknown-state-okp-on, 1120 unknown-state-on, 1121 unknownp, 300, 302, 325, 356, 358–

360, 362, 364–367, 370, 373, 376, 384

unmark-io-out, 296, 297, 299, 300,

302 unmark-io-out-off, 296 unmark-io-outs, 296, 347 unmark-io-outs-off, 296 update->update$sim, 898 update-delays, 323, 342 update-delays-off, 323 update-drives, 309, 342 update-drives-off, 309 update-flags, 544, 545, 548, 591, 745,

746, 834, 857, 897, 899, 907, 1186, 1188–1196, 1200–1216

update-flags-off, 544 update-in-types, 301, 342 update-in-types-off, 301 update-known-types, 259, 261, 262 update-known-types-off, 259 update-list, 556 update-loadings, 308, 342 update-loadings-off, 308 update-lsi-occ-syntax-data, 290, 291 update-lsi-occ-syntax-data-off, 290 update-nth, 145, 160 update-nth-off, 145 update-occ-bindings, 342–344 update-occ-bindings-off, 343 update-occ-syntax-data, 280, 281, 290 update-occ-syntax-data-off, 280 update-oprop-binding, 341, 343 update-oprop-binding-off, 342 update-out-depends, 335, 342 update-out-depends-off, 335 update-out-types, 301, 342 update-out-types-off, 301 update-state-types, 336, 342 update-state-types-off, 336 update-tri-state-data, 337, 342 update-tri-state-data-off, 338 update-v-nth, 160 update-v-nth-off, 160 update$step, 833

v, 482–484, 532, 544, 742–744, 1216,

1217 v-adder, 162–164 v-adder-carry-out, 162, 163, 446, 483,

1100, 1104 v-adder-carry-out=v-carry, 446 v-adder-carry-out=v-carry-off, 1095 v-adder-carry-out=v-carry-on, 1183 v-adder-off, 162 v-adder-output, 162, 163, 446, 483, 1100, 1104, 1217

v-adder-output=v-sum, 446 v-adder-output=v-sum-off, 1095 v-adder-output=v-sum-off1, 1185 v-adder-output=v-sum-on, 1182 v-adder-overflowp, 162, 163, 483, 1099,

1104 v-adder-works, 164 v-alu, 484–486, 532–536, 545, 549,

834, 857, 897, 899, 907, 908, 1101, 1102, 1106, 1188–1196, 1200–1219

v-alu-1, 485, 486, 549

v-alu-1-off, 485

v-alu-correct-int, 1106

v-alu-correct-int-adder, 1104 v-alu-correct-int-adder-off, 1107 v-alu-correct-int-adder-on, 1184 v-alu-correct-int-adder-output, 1104 v-alu-correct-int-adder-output-

off, 1107 on, 1184

v-alu-correct-int-adder-overflo wp, 1104 wp-off, 1107 wp-on, 1184 v-alu-correct-int-asr, 1105 v-alu-correct-int-asr-off, 1108 v-alu-correct-int-asr-off1, 1186 v-alu-correct-int-asr-on, 1185 v-alu-correct-int-asr-output, 1105 v-alu-correct-int-asr-output-of

f, 1108 v-alu-correct-int-asr-output-on, 1185 v-alu-correct-int-dec, 1105 v-alu-correct-int-dec-off, 1108 v-alu-correct-int-dec-on, 1185 v-alu-correct-int-inc, 1104 v-alu-correct-int-inc-off, 1107 v-alu-correct-int-inc-on, 1185 v-alu-correct-int-neg, 1105 v-alu-correct-int-neg-off, 1108 v-alu-correct-int-neg-on, 1185 v-alu-correct-int-not, 1106 v-alu-correct-int-not-off, 1108 v-alu-correct-int-not-on, 1185 v-alu-correct-int-not-output, 1106 v-alu-correct-int-not-output-of

f, 1108 f1, 1185

v-alu-correct-int-off, 1108 v-alu-correct-int-rewrite, 1218 v-alu-correct-int-rewrite-off, 1218 v-alu-correct-int-subtracter, 1105 v-alu-correct-int-subtracter-of

f, 1108 v-alu-correct-int-subtracter-on, 1185 v-alu-correct-int-subtracter-outp

ut, 1105 ut-off, 1108 ut-on, 1185

v-alu-correct-int-subtracter-ove rflowp, 1105 rflowp-lemma, 1103 rflowp-lemma-off, 1110 rflowp-off, 1107 rflowp-on, 1185

v-alu-correct-nat, 1102 v-alu-correct-nat-adder, 1100 v-alu-correct-nat-adder-carry-o

ut, 1100 ut-off, 1106 ut-on, 1183

v-alu-correct-nat-adder-off, 1106 v-alu-correct-nat-adder-off1, 1186 v-alu-correct-nat-adder-on, 1183 v-alu-correct-nat-adder-output, 1100 v-alu-correct-nat-adder-output-

off, 1106 on, 1183

v-alu-correct-nat-dec, 1101 v-alu-correct-nat-dec-off, 1107 v-alu-correct-nat-dec-on, 1184 v-alu-correct-nat-inc, 1100 v-alu-correct-nat-inc-off, 1106 v-alu-correct-nat-inc-off1, 1186 v-alu-correct-nat-inc-on, 1184 v-alu-correct-nat-int-buf, 1096 v-alu-correct-nat-int-buf-off, 1106 v-alu-correct-nat-int-buf-on, 1183 v-alu-correct-nat-lsr, 1101 v-alu-correct-nat-lsr-carry-out, 1101

-off, 1107 -off1, 1185 -on, 1184

v-alu-correct-nat-lsr-off, 1107 v-alu-correct-nat-lsr-off1, 1186 v-alu-correct-nat-lsr-on, 1184 v-alu-correct-nat-lsr-output, 1101 v-alu-correct-nat-lsr-output-of

f, 1107 v-alu-correct-nat-lsr-output-on, 1184 v-alu-correct-nat-not, 1101 v-alu-correct-nat-not-off, 1107 v-alu-correct-nat-not-on, 1184 v-alu-correct-nat-not-output, 1101 v-alu-correct-nat-not-output-of

f, 1103 f1, 1107 f2, 1185

v-alu-correct-nat-not-output-on, 1184 v-alu-correct-nat-off, 1111 v-alu-correct-nat-rewrite, 1217 v-alu-correct-nat-rewrite-off, 1218 v-alu-correct-nat-subtracter, 1100 v-alu-correct-nat-subtracter-ca

rry-out, 1100 rry-out-off, 1106 rry-out-on, 1184

v-alu-correct-nat-subtracter-of

f, 1107 v-alu-correct-nat-subtracter-on, 1184 v-alu-correct-nat-subtracter-outp

ut, 1100

ut-lemma, 1099 ut-lemma-off, 1113 ut-off, 1107

ut-on, 1184 v-alu-int, 1106, 1218 v-alu-int-adder, 1104, 1106 v-alu-int-adder-off, 1110 v-alu-int-adder-output, 1104 v-alu-int-adder-output-off, 1110 v-alu-int-adder-overflowp, 1104 v-alu-int-adder-overflowp-off, 1110 v-alu-int-asr, 1105, 1106 v-alu-int-asr-off, 1109 v-alu-int-asr-output, 1105 v-alu-int-asr-output-off, 1109 v-alu-int-dec, 1105, 1106 v-alu-int-dec-off, 1109 v-alu-int-inc, 1104, 1106 v-alu-int-inc-off, 1109 v-alu-int-neg, 1105, 1106 v-alu-int-neg-off, 1109 v-alu-int-not, 1106 v-alu-int-not-off, 1108 v-alu-int-not-output, 1105, 1106 v-alu-int-not-output-off, 1108 v-alu-int-off, 1108 v-alu-int-subtracter, 1105, 1106 v-alu-int-subtracter-off, 1109 v-alu-int-subtracter-output, 1104, 1105 v-alu-int-subtracter-output-off, 1109 v-alu-int-subtracter-overflowp, 1104,

1105 v-alu-int-subtracter-overflowp-

off, 1109 v-alu-nat, 1101, 1102, 1217 v-alu-nat-adder, 1099–1101 v-alu-nat-adder-carry-out, 1099, 1100 v-alu-nat-adder-carry-out-off, 1113 v-alu-nat-adder-off, 1113 v-alu-nat-adder-output, 1099, 1100 v-alu-nat-adder-output-off, 1113 v-alu-nat-dec, 1100, 1101 v-alu-nat-dec-off, 1112 v-alu-nat-inc, 1100, 1101 v-alu-nat-inc-off, 1113 v-alu-nat-int-buf, 1096, 1101, 1106 v-alu-nat-int-buf-off, 1115 v-alu-nat-lsr, 1101 v-alu-nat-lsr-carry-out, 1101, 1105 v-alu-nat-lsr-carry-out-off, 1112 v-alu-nat-lsr-off, 1112 v-alu-nat-lsr-output, 1101 v-alu-nat-lsr-output-off, 1112 v-alu-nat-not, 1101 v-alu-nat-not-off, 1111 v-alu-nat-not-output, 1101 v-alu-nat-not-output-off, 1112 v-alu-nat-off, 1111 v-alu-nat-subtracter, 1100, 1101 v-alu-nat-subtracter-carry-out, 1100 v-alu-nat-subtracter-carry-out-

off, 1112 v-alu-nat-subtracter-off, 1112 v-alu-nat-subtracter-output, 1100 v-alu-nat-subtracter-output-off, 1113 v-alu-off, 484 v-and, 156–158, 484, 505, 1217 v-and-append-help, 158 v-and-off, 156 v-append-propagate, 445 v-approx, 928, 929, 931, 932, 953,

954, 972–976, 1002, 1008– 1010, 1017 v-approx-alist, 930–933, 1002 v-approx-alist-append, 1002 v-approx-alist-append-off, 1040 v-approx-alist-append-on, 1129 v-approx-alist-implies-b-approx

-value, 1002 -value-off, 1040 -value-on, 1130

v-approx-alist-implies-v-approx -collect-value, 1002 -collect-value-off, 1040 -collect-value-on, 1129

v-approx-alist-off, 1056 v-approx-alist-on, 1145 v-approx-bvp, 953 v-approx-bvp-off, 993 v-approx-bvp-off1, 1148 v-approx-bvp-on, 1059 v-approx-bvp-subrange, 953 v-approx-bvp-subrange-off, 994 v-approx-bvp-subrange-off1, 1149 v-approx-bvp-subrange-on, 1059 v-approx-car-nth, 1009 v-approx-car-nth-off, 1033 v-approx-car-nth-on, 1123 v-approx-implies-b-approx-nth, 953 v-approx-implies-b-approx-nth-o

ff, 994 ff1, 1148 n, 1059

v-approx-implies-nth-does-not-g o-from-f-to-t, 973 o-from-f-to-t-off, 996 o-from-f-to-t-off1, 1150 o-from-f-to-t-on, 1061

v-approx-implies-subranges-equa l, 953 l-off, 994 l-off1, 1149 l-on, 1059

v-approx-implies-v-approx-alist, 1002 -off, 1040 -on, 1129

v-approx-length, 974 v-approx-length-off, 996 v-approx-length-off1, 1150 v-approx-length-on, 1061 v-approx-list, 1008–1010 v-approx-list-off, 1034 v-approx-list-on, 1123 v-approx-list-x-x, 1010 v-approx-list-x-x-off, 1033 v-approx-list-x-x-on, 1122 v-approx-make-list-x, 954 v-approx-make-list-x-off, 994 v-approx-make-list-x-off1, 1149 v-approx-make-list-x-on, 1059 v-approx-off, 972 v-approx-off1, 1057 v-approx-on, 995 v-approx-on1, 1146 v-approx-preserves-length, 975 v-approx-preserves-length-off, 996 v-approx-preserves-length-off1, 1151 v-approx-preserves-length-on, 1061 v-approx-preserves-properp, 976 v-approx-preserves-properp-off, 997 v-approx-preserves-properp-off1, 1151 v-approx-preserves-properp-on, 1062 v-approx-subrange, 975 v-approx-subrange-off, 996 v-approx-subrange-off1, 1151 v-approx-subrange-on, 1061 v-approx-x-x, 953 v-approx-x-x-off, 994 v-approx-x-x-off1, 1042 v-approx-x-x-on, 1001 v-approx-x-x-on1, 1131 v-asr, 157, 158, 484, 526, 1105, 1217 v-buf, 156–159, 163, 465, 467, 484,

506, 1096, 1217 v-buf*, 428, 429 v-buf*-off, 428 v-buf*$destructure, 428 v-buf*$destructure-off, 428 v-buf-append-help, 159 v-buf-off, 156 v-buf-works, 163 v-buf$body, 428, 429 v-buf$body-off, 428 v-buf$body-value, 429 v-buf$body-value-off, 429 v-buf$netlist, 429, 514 v-buf$unbound-in-body, 429 v-buf$unbound-in-body-off, 429 v-buf$value, 429 v-buf$value-off, 429 v-buf&, 428, 429, 514 v-buf&-off, 429 v-carry, 444, 446 v-carry-off, 444 v-cvzbv, 1216 v-dec, 163, 465, 467, 475, 486, 536,

545, 546, 836, 846, 857, 901, 902, 905, 907, 908, 1217

v-dec-off, 163 v-equal*, 461, 462 v-equal*-off, 462 v-equal*$destructure, 461 v-equal*$destructure-off, 462 v-equal$netlist, 462, 739 v-equal$value, 462 v-equal$value-off, 462 v-equal&, 462, 738 v-equal&-off, 462 v-flag, 543, 544, 559, 744, 1186 v-flag-off, 543 v-fourfix, 165, 204 v-fourfix-make-list, 165 v-fourfix-off, 165 v-fourp, 1017, 1018, 1020 v-fourp-implies-properp, 1018 v-fourp-implies-properp-off, 1029 v-fourp-implies-properp-on, 1118 v-fourp-is-good-s, 1020 v-fourp-is-good-s-off, 1028 v-fourp-is-good-s-on, 1117 v-fourp-off, 1029 v-fourp-on, 1118 v-generate, 444–446, 448 v-generate-off, 444 v-if, 157–159, 163, 526, 566, 716 v-if-append-help, 159 v-if-c-congruence, 159 v-if-f-4*, 567 v-if-f-4$netlist, 567, 714 v-if-f-4$reset-value, 568 v-if-f-4$reset-value-off, 568 v-if-f-4$value, 568 v-if-f-4&, 567, 568, 714 v-if-f-4&-off, 567 v-if-off, 157 v-if-works, 163 v-iff, 165, 172, 173, 733 v-iff-off, 165 v-iff-rev1, 165 v-iff-reverse, 165 v-iff-v-addr1-v-addr2-read-mem1

-write-mem1, 172

-write-mem1-not-ram, 173 v-iff-x-x, 165 v-iff=equal, 165 v-inc, 163, 464, 486, 536, 545, 546,

549, 667, 822, 823, 893, 1217 v-inc-off, 163 v-inc4, 463, 464 v-inc4*, 463, 464 v-inc4$netlist, 463, 464, 714 v-inc4$value, 464 v-inc4$value-as-v-inc, 464 v-inc4$value-off, 464 v-inc4&, 463, 464, 714 v-inc4&-off, 463 v-knownp, 929, 930, 953, 1010, 1011,

1016 v-knownp-implies-v-approx-is-eq

ual, 929 ual-off, 1056 ual-on, 1146 v-knownp-off, 972 v-knownp-off1, 1056 v-knownp-on, 995 v-knownp-on1, 1146 v-lsr, 157, 158, 484, 527, 1101, 1217 v-neg, 1216, 1217 v-negp, 161, 482, 1186, 1188–1190, 1197–1200, 1208 v-negp->negativep-v-to-int, 1197 v-negp->negativep-v-to-int-of

f, 1197 v-negp->v-nzerop, 1186 v-negp-as-bounds, 1197 v-negp-as-bounds-off, 1197 v-negp-as-nth, 161 v-negp-as-nth-off, 161 v-negp-off, 161 v-negp-v-shift-right, 1190 v-not, 156–159, 162, 163, 444, 465,

483, 506–508, 549, 1099, 1101– 1103, 1106, 1186, 1189, 1217

v-not-append-help, 159

v-not-firstn, 159 v-not-inverts-all, 159 v-not-off, 156 v-not-restn, 159 v-not-v-not, 1186 v-nth, 160 v-nth-off, 160 v-nzerop, 160, 161, 457, 1186, 1188,

1189, 1193, 1200, 1208–1210 v-nzerop-as-or-crock, 161 v-nzerop-int-to-v, 1200 v-nzerop-int-to-v-0, 1200 v-nzerop-nat-to-v, 1193 v-nzerop-nat-to-v-zero, 1186 v-nzerop-nat-to-v$help, 1193 v-nzerop-nat-to-v$help-off, 1193 v-nzerop-off, 160 v-off, 482 v-or, 156–159, 202, 484, 506, 718,

719, 1217 v-or*, 429, 430 v-or*-off, 430 v-or*$destructure, 430 v-or*$destructure-off, 430 v-or-append-help, 158 v-or-crock-for-f$next-cntl-state, 718

-off, 719 v-or-make-list-f, 159 v-or-off, 156 v-or$body, 429, 430 v-or$body-off, 429 v-or$body-value, 430 v-or$body-value-off, 430 v-or$netlist, 430, 721 v-or$unbound-in-body, 430 v-or$unbound-in-body-off, 430 v-or$value, 430 v-or$value-off, 431 v-or&, 430, 721 v-or&-off, 430 v-propagate, 444–446, 448 v-propagate-append, 445 v-propagate-append-off, 445 v-propagate-off, 444 v-pullup, 204, 433, 762–764, 802–

805, 812–814 v-pullup*, 432, 433 v-pullup*-off, 433 v-pullup*$destructure, 432 v-pullup*$destructure-off, 433 v-pullup-bvp, 204 v-pullup-make-list-z, 204 v-pullup-off, 204 v-pullup$body, 432, 433 v-pullup$body-off, 432 v-pullup$body-value, 433 v-pullup$body-value-off, 433 v-pullup$netlist, 433, 800 v-pullup$unbound-in-body, 433 v-pullup$unbound-in-body-off, 433 v-pullup$value, 433 v-pullup$value-off, 433 v-pullup&, 433, 799 v-pullup&-off, 433 v-ror, 157, 158, 483, 527, 1217 v-s-approx-list, 1008–1010 v-s-approx-list-off, 1034 v-s-approx-list-on, 1123 v-set, 542, 544, 591, 742–744, 1200, 1202–1213, 1215, 1216

v-set-off, 542

v-shift-right, 157, 158, 204, 526, 1190 v-shift-right-names, 523, 527, 528 v-shift-right-off, 157 v-subtracter-carry-out, 163, 483, 1100,

1105 v-subtracter-output, 162, 163, 483,

549, 1100, 1105, 1189, 1216, 1217

v-subtracter-overflowp, 163, 483, 1100,

1105 v-sum, 443, 444, 446, 448, 1189 v-sum-congruence, 444 v-sum-off, 443 v-sum-on-not-a-a, 1189 v-threefix, 164, 165, 175–182, 184–

191, 203–205, 429, 478, 481, 503, 515, 516, 523, 739, 740, 744, 751, 753, 758, 759, 761– 764, 781–784, 792–794, 796, 801–805, 812–814, 816, 817, 821–823, 825–827, 829, 831, 833, 835, 837, 839–841, 843, 845, 847, 849, 851, 852, 854– 856, 858, 867, 869, 871, 873, 875–881, 883–885, 889, 890, 894, 896, 898, 899, 902, 905, 910, 912, 913

v-threefix-append, 164 v-threefix-append-off, 164 v-threefix-bvp, 164 v-threefix-fv-if, 203 v-threefix-fv-shift-right, 205 v-threefix-idempotence, 164 v-threefix-make-list-x, 164 v-threefix-off, 164 v-threefix-v-fourfix, 165 v-to-0s-through-fs, 557 v-to-hex, 557, 558 v-to-hex-all, 558, 559 v-to-int, 1102–1105, 1196–1198, 1200–

1216, 1219 v-to-int-nat-to-v-0, 1197 v-to-int-off, 1111 v-to-int-v-not, 1102 v-to-int-v-not-off, 1110 v-to-nat, 159, 160, 164, 192, 549,

557, 593–602, 1096–1102, 1186, 1187, 1191–1197, 1218

v-to-nat-all, 557, 559 v-to-nat-append, 1099 v-to-nat-append-off, 1113 v-to-nat-equal, 1186 v-to-nat-firstn, 1097 v-to-nat-firstn-hack1, 1097 v-to-nat-firstn-hack1-off, 1097 v-to-nat-firstn-hack1-on, 1183 v-to-nat-firstn-hack2, 1097 v-to-nat-firstn-hack2-off, 1097 v-to-nat-firstn-hack2-on, 1183 v-to-nat-firstn-off, 1115 v-to-nat-lessp-exp-2-length, 1196 v-to-nat-of-nat-to-v, 1097 v-to-nat-of-nat-to-v-hack, 1097 v-to-nat-of-nat-to-v-hack-off, 1115 v-to-nat-of-nat-to-v-off, 1114 v-to-nat-of-nat-to-v-on, 1186 v-to-nat-off, 159 v-to-nat-v-not, 1099 v-to-nat-v-not-lemma, 1099 v-to-nat-v-not-lemma-off, 1114 v-to-nat-v-not-off, 1114 v-v-alu, 1217 v-wire, 203, 204, 435, 759, 762–764,

793, 794, 802, 803, 805, 812– 814

v-wire*, 434 v-wire*-off, 434 v-wire*$destructure, 434 v-wire*$destructure-off, 434 v-wire-make-list-x, 204 v-wire-make-list-z, 204 v-wire-off, 204 v-wire-x-x=x, 204 v-wire$body, 433, 434 v-wire$body-off, 434 v-wire$body-value, 434 v-wire$body-value-off, 435 v-wire$netlist, 434, 800 v-wire$unbound-in-body, 434 v-wire$unbound-in-body-off, 434 v-wire$value, 435 v-wire$value-off, 435 v-wire&, 434, 435, 800 v-wire&-off, 434 v-xor, 156–158, 161, 203, 484, 506,

1217 v-xor*, 431 v-xor*-off, 431 v-xor*$destructure, 431 v-xor*$destructure-off, 431 v-xor-append-help, 158 v-xor-nzerop=not-equal, 161 v-xor-off, 156 v-xor$body, 431, 432 v-xor$body-off, 431 v-xor$body-value, 432 v-xor$body-value-off, 432 v-xor$netlist, 431, 462 v-xor$unbound-in-body, 431 v-xor$unbound-in-body-off, 432 v-xor$value, 432 v-xor$value-off, 432 v-xor&, 431, 432, 462 v-xor&-off, 431 v-zerop, 161, 457, 459, 482, 531, 1186–

1188, 1197, 1216 v-zerop-implies-v-to-nat-0, 1186 v-zerop-make-list-f, 161 v decode, 594, 603, 616, 724 v decode-off, 594 v fetch0, 592, 603, 608, 723 v fetch0-off, 593 v fetch1, 593, 603, 610, 723 v fetch1-off, 593 v fetch2, 593, 603, 612, 723 v fetch2-off, 593 v fetch3, 593, 603, 614, 723 v fetch3-off, 593 v hold0, 600, 604, 655, 730 v hold0-off, 600 v hold1, 600, 604, 657, 731 v hold1-off, 600 v reada0, 595, 603, 623, 725 v reada0-off, 595 v reada1, 595, 603, 625, 726 v reada1-off, 595 v reada2, 596, 603, 627, 726 v reada2-off, 596 v reada3, 596, 603, 629, 726 v reada3-off, 596 v readb0, 596, 603, 631, 727 v readb0-off, 596 v readb1, 596, 603, 633, 727 v readb1-off, 597 v readb2, 597, 603, 635, 727 v readb2-off, 597 v readb3, 597, 603, 637, 728 v readb3-off, 597 v rega, 594, 603, 617, 724 v rega-off, 594 v regb, 594, 603, 619, 725 v regb-off, 594 v reset0, 601, 604, 663, 732 v reset0-off, 601 v reset1, 601, 604, 665, 732 v reset1-off, 601 v reset2, 602, 604, 666, 732 v reset2-off, 602 v sefa0, 599, 604, 647, 729 v sefa0-off, 599 v sefa1, 599, 604, 649, 730 v sefa1-off, 599 v sefb0, 599, 604, 651, 730 v sefb0-off, 599 v sefb1, 600, 604, 653, 730 v sefb1-off, 600 v update, 595, 603, 621, 725 v update-off, 595 v v11010, 600, 604, 659, 731 v v11010-off, 601 v v11011, 601, 604, 661, 731 v v11011-off, 601 v v11111, 602, 604, 668, 716, 733 v v11111-off, 602 v write0, 597, 603, 639, 728 v write0-off, 597 v write1, 598, 603, 641, 728 v write1-off, 598 v write2, 598, 603, 643, 729 v write2-off, 598 v write3, 598, 603, 604, 645, 729 v write3-off, 598 value, 166–168, 238–243, 247, 259,

268, 270–272, 280, 281, 287– 291, 293, 295, 297, 299–301, 307–309, 312, 313, 323, 324, 327, 332, 335–339, 342–345, 350, 358–360, 362, 364–367, 370, 373, 375, 377, 379, 380, 382, 383, 385, 388, 427, 442, 443, 478, 481, 523, 755, 758, 759, 999–1003

value-append-pairlist, 166 value-indices-hack, 166 value-off, 166 value-or-unknown, 295, 298, 316, 333,

336, 375 value-or-unknown-off, 295 value-pairlist, 166 value-pairlist-off, 166 value2, 297, 308, 321, 337 value2-off, 297 vdd, 156 vdd-monotone, 952 vdd-monotone-off, 1042 vdd-monotone-on, 1131 vdd-parametric-monotone, 952 vdd-parametric-monotone-off, 1042 vdd-parametric-monotone-on, 1131 vdd-parametric-preserves-good-s, 1007

-off, 1034 -on, 1124

vdd-parametric$netlist, 412, 791 vdd-parametric$value, 412 vdd-parametric$value-off, 412 vdd-parametric&, 412, 790 vdd-parametric&-off, 412 vdd-preserves-good-s, 1007 vdd-preserves-good-s-off, 1034 vdd-preserves-good-s-on, 1124 vdd$netlist, 412 vdd$value, 412 vdd$value-off, 412 vdd&, 412 vdd&-off, 412 vector-module-induction, 428 vector-state-theory, 602 vft-buf, 205, 755, 756, 759, 761–764,

793, 794, 796, 802–805, 811– 814

vft-buf-lemmas, 205 vft-buf-off, 205 vft-buf-rewrite, 205 vft-buf-rewrite-off, 205 vss, 156, 675, 676, 678 vss-monotone, 952 vss-monotone-off, 1042 vss-monotone-on, 1131 vss-preserves-good-s, 1007 vss-preserves-good-s-off, 1034 vss-preserves-good-s-on, 1123 vss$netlist, 412, 688 vss$value, 412 vss$value-off, 412 vss&, 412, 688 vss&-off, 412

we-a-reg, 605, 607, 609, 611, 613, 615, 617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 641, 643, 645, 646, 648, 650, 653, 655, 656, 658, 660, 662, 664, 666, 668, 761, 781, 793, 802, 811

we-a-reg-off, 605

we-addr-out, 605, 607, 609, 611, 613, 615, 617, 619, 620, 622, 624, 627, 628, 630, 632, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 658, 660, 662, 664, 666, 668, 763, 782, 794, 804, 813

we-addr-out-off, 605

we-b-reg, 605, 607, 609, 611, 613, 615, 617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 641, 643, 645, 646, 649, 651, 653, 655, 656, 658, 660, 662, 664, 666, 668, 762, 781, 793, 802, 812

we-b-reg-off, 605

we-data-out, 605, 607, 609, 611, 613, 615, 617, 618, 620, 622, 624, 626, 628, 630, 632, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 658, 660, 662, 664, 666, 668, 763, 782, 794, 803, 813

we-data-out-off, 605

we-flags, 606, 608, 610, 612, 614, 616, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 666, 668, 761, 781, 792, 802, 811

we-flags-off, 606 we-hold-, 605, 608, 609, 611, 613,

615, 617, 619, 620, 622, 625, 627, 628, 630, 632, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 660, 662, 664, 666, 668, 763, 782, 794, 804, 813

we-hold–off, 605 we-i-reg, 605, 607, 609, 611, 613,

615, 617, 618, 620, 622, 624, 626, 628, 630, 632, 635, 637, 638, 641, 643, 645, 647, 649, 651, 653, 655, 656, 658, 660, 662, 664, 666, 668, 762, 782, 793, 803, 812

we-i-reg-off, 605 we-pc-reg, 605, 608, 609, 611, 613,

615, 617, 619, 620, 622, 625, 627, 629, 630, 632, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 660, 662, 664, 666, 668, 763, 782, 794, 804, 813

we-pc-reg-off, 605 we-reg*, 479, 480 we-reg*-off, 479 we-reg*$destructure, 479 we-reg*$destructure-off, 480 we-reg-body, 478–481 we-reg-body-induction, 480, 481 we-reg-body-off, 479 we-reg-body$all-unbound-in-bod

y, 480 y-off, 480

we-reg-body$state, 481 we-reg-body$state-off, 482 we-reg-body$unbound-in-body, 480 we-reg-body$unbound-in-body-of

f, 480 we-reg-body$value, 481 we-reg-body$value-off, 481 we-reg$netlist, 480, 739, 776 we-reg$state, 482 we-reg$state-off, 482 we-reg$value, 481 we-reg$value-off, 481 we-reg&, 480–482, 738, 775 we-reg&-off, 480 we-regs, 604, 607, 609, 611, 613, 615,

617, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 643, 644, 646, 648, 650, 653, 655, 656, 658, 660, 662, 664, 666, 668, 761, 781, 792, 801, 811

we-regs-off, 605 when-the-mantissa-isnt-0-then-neit

her-is-the-exponential, 1193 write-mem, 170, 172–175, 179, 188,

545, 546, 733, 734, 819, 891, 974, 975, 993, 1007

write-mem-monotone, 974 write-mem-monotone-off, 996 write-mem-monotone-off1, 1150 write-mem-monotone-on, 1061 write-mem-off, 171 write-mem1, 170, 172–174, 973–975,

1007 write-mem1-double-induction, 974 write-mem1-double-induction-off, 1041 write-mem1-double-induction-on, 1130 write-mem1-monotone, 974 write-mem1-monotone-induction, 974 write-mem1-monotone-induction-o

ff, 1041 n, 1130

write-mem1-monotone-off, 996 write-mem1-monotone-off1, 1150 write-mem1-monotone-on, 1061 write-mem1-off, 170 write-mem1-opener, 973 write-mem1-opener-off, 996 write-mem1-opener-off1, 1150 write-mem1-opener-on, 1061 write-regs, 733, 734, 741, 815, 817,

818, 820, 822–826, 828, 830, 832, 834, 836, 838, 840–842, 844–846, 848, 850, 851, 853, 855, 857, 859, 861, 863–866, 869, 870, 873–875, 877–885, 887, 888, 890–893, 895, 897, 899, 901, 902, 904, 906, 907, 909, 911, 913

write-regs-f-bv-crock, 733 write-regs-f-write-regs-f, 733 write-regs-if, 733 write-regs-off, 733 write-regs-ok, 734 write0->write3$sim, 905 write0$step, 856 write1$step, 858 write2$step, 860 write3$induction, 884, 885 write3$progress, 886 write3$progress-help, 885 write3$step0, 862 write3$step1, 863

x, 149, 150, 164, 165, 174–197, 203– 205, 451, 748, 758, 759, 762– 764, 800, 802–805, 812–814, 927, 954, 971, 975, 993, 1007, 1011–1015, 1017, 1019, 1022– 1026

xor, 152, 440 xp, 938 xs-suffice-for-reset-chip-final

-state-for-any-unknown-state, 1020 -state-for-any-unknown-state-better,

1021 -state-for-any-unknown-state-better-

off, 1027 -state-for-any-unknown-state-better-

on, 1117 -state-for-any-unknown-state-off,

1028 -state-for-any-unknown-state-on,

1117 xs-suffice-for-reset-chip-lemma

-instance, 1016 -instance-off, 1029 -instance-on, 1119

xs-suffice-for-reset-lemma, 1011 xs-suffice-for-reset-lemma-off, 1033 xs-suffice-for-reset-lemma-on, 1122 xs-suffice-for-reset-lemma-verb

ose, 1010 ose-off, 1033 ose-on, 1122

z, 149, 150, 165, 182, 183, 194–197,

204, 205, 758, 928 z-flag, 543, 544, 559, 744, 1186, 1189 z-flag-off, 543 z-set, 542, 544, 591, 742–744, 1188,

1189, 1191, 1194–1196, 1201, 1203–1207, 1209–1214, 1216

z-set-off, 542 zb, 482–484, 532, 544, 742–744, 1188,

1216 zb-cvzbv, 1216 zb-off, 482 zb-v-alu, 1188 zero-flag-interpretation-for-su

b, 1189 zero-ilessp-implies-not-equal, 81 zero-ilessp-implies-not-equal-o

ff, 104 ff1, 1156 n, 1067

zero-loadingp, 306, 307, 323 zero-loadingp-off, 306 zerop-makes-equal-true-bridge, 20 zerop-makes-equal-true-bridge-o

ff, 20 zerop-makes-lessp-false-bridge, 19 zerop-makes-lessp-false-bridge-

off, 19 zerop-makes-quotient-zero-bridge, 29

-off, 29 zerop-makes-times-tree-zero, 17 zerop-makes-times-tree-zero-off, 17 zerop-makes-times-tree-zero2, 18 zerop-makes-times-tree-zero2-of

f, 18 zerop-not-zerop-cases, 887 zerop-quotient, 134 zp, 928