Declarative definition of instruction decoding.
(decodei enc feat) → instr?
If there is some valid instruction whose encoding is
Since encode is injective, there is in fact at most one such instruction.
Function:
(defun decodei (enc feat) (declare (xargs :guard (and (ubyte32p enc) (featp feat)))) (let ((__function__ 'decodei)) (declare (ignorable __function__)) (if (encoding-validp enc feat) (encoding-valid-witness (ubyte32-fix enc) (feat-fix feat)) nil)))
Theorem:
(defthm instr-optionp-of-decodei (b* ((instr? (decodei enc feat))) (instr-optionp instr?)) :rule-classes :rewrite)
Theorem:
(defthm encode-of-decodei (implies (encoding-validp enc feat) (equal (encode (decodei enc feat) feat) (ubyte32-fix enc))))
Theorem:
(defthm decodei-of-ubyte32-fix-enc (equal (decodei (ubyte32-fix enc) feat) (decodei enc feat)))
Theorem:
(defthm decodei-ubyte32-equiv-congruence-on-enc (implies (acl2::ubyte32-equiv enc enc-equiv) (equal (decodei enc feat) (decodei enc-equiv feat))) :rule-classes :congruence)
Theorem:
(defthm decodei-of-feat-fix-feat (equal (decodei enc (feat-fix feat)) (decodei enc feat)))
Theorem:
(defthm decodei-feat-equiv-congruence-on-feat (implies (feat-equiv feat feat-equiv) (equal (decodei enc feat) (decodei enc feat-equiv))) :rule-classes :congruence)