Check if a code ensemble is unambiguous.
(code-ensemble-unambp code) → yes/no
That is, check whether the translation unit ensemble is unambiguous. The implementation environment is ignored for this, but it is convenient to lift the unambiguity predicate from translation unit ensembles to code ensembles.
Function:
(defun code-ensemble-unambp (code) (declare (xargs :guard (code-ensemblep code))) (let ((__function__ 'code-ensemble-unambp)) (declare (ignorable __function__)) (transunit-ensemble-unambp (code-ensemble->transunits code))))
Theorem:
(defthm booleanp-of-code-ensemble-unambp (b* ((yes/no (code-ensemble-unambp code))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm code-ensemble-unambp-of-code-ensemble (equal (code-ensemble-unambp (code-ensemble tunits ienv)) (transunit-ensemble-unambp tunits)))
Theorem:
(defthm transunit-ensemble-unambp-of-code-ensemble->transunits (implies (code-ensemble-unambp code) (transunit-ensemble-unambp (code-ensemble->transunits code))))
Theorem:
(defthm code-ensemble-unambp-of-code-ensemble-fix-code (equal (code-ensemble-unambp (code-ensemble-fix code)) (code-ensemble-unambp code)))
Theorem:
(defthm code-ensemble-unambp-code-ensemble-equiv-congruence-on-code (implies (code-ensemble-equiv code code-equiv) (equal (code-ensemble-unambp code) (code-ensemble-unambp code-equiv))) :rule-classes :congruence)