A tool for proving that DAGs / terms are equivalent.
The equivalence claim to be proved is universally quantified over all values of the variables in the two terms/DAGs.
If the call to
Usually, the two items (DAGs or terms) have the same set of free variables.
See also
(prove-equal-with-axe dag-or-term1 dag-or-term2 &key :assumptions ; default nil :types ; default nil :interpreted-function-alist ; default nil :test-types ; default nil :tests ; default 50 :tactic ; default :rewrite-and-sweep :print ; default :brief :debug-nodes ; default nil :extra-rules ; default nil :remove-rules ; default nil :initial-rule-sets ; default :auto :monitor ; default nil :use-context-when-miteringp ; default nil :random-seed ; default nil :max-conflicts ; default :auto :normalize-xors ; default t :prove-constants ; default t :proof-name ; default :auto :keep-temp-dir ; default :auto :check-vars ; default t :prove-theorem ; default nil :local ; default t )
The first DAG or term to compare
The second DAG or term to compare
Assumptions to use when proving equivalence, a list of terms (not necessarily translated). The proof is done assuming all of the :assumptions are non-nil.
A var-type-alist (alist mapping variables to their axe-types), or one of the special values :bits or :bytes. The proof is done assuming the variables have their associated types. Entries in this alist can be overridden for testing purposes by the :test-types option.
Provides definitions for non-built-in functions. An alist mapping function symbols to their bodies.
Overrides of the :types for use in the testing that identifies probable facts for sweeping-and-merging (example, to restrict the length of arrays).
How many tests to use to find internal equivalences (a natp)
Proof tactic to use for the proof (either :rewrite or :rewrite-and-sweep)
Print verbosity (allows nil, :brief, t, and :verbose)
Nodenums whose values should be printed for each test-case, and whose subdags should be printing when attempting a merge. These nodenums refer to the DAG used for sweeping-and-merging (after pre-simplification, etc, if any), specifically the DAG for the first sweep.
A symbol list containing the names of extra rules to use when simplifying
A symbol list containing the names of rules to be removed from the set of rules used when simplifying
Sequence of rule-sets to apply initially to simplify the miter (:auto means used phased-bv-axe-rule-sets)
Rule names (symbols) to monitor when rewriting
Whether to use over-arching context when rewriting nodes (causes memoization to be turned off)
Seed for the random number generator used to make test cases, or nil meaning use the default.
Initial value of STP max-conflicts (number of conflicts), or :auto (meaning use the default of 60000), or nil (meaning no maximum).
Whether to normalize XOR nests when simplifying
Whether, when sweeping, to try to prove nodes are constants (and replace them with those constants if the proof succeeds).
A name to assign to the proof, if desired. A symbol, or :auto to let Axe choose a name.
Whether to keep the directory with temp files in place, for debugging. If :auto, the temp-dir is kept whenever there is an error.
Whether to check that the two DAGs/terms have exactly the same vars. Can be t (throw an error if the var lists differ), nil (do not check the var lists), or :warn (print a warning if the var lists differ but then continue).
Whether to produce an ACL2 theorem stating the equivalence (using skip-proofs, currently)
whether to make the generated events local