• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
      • Ipasir
      • Aignet
      • Aig
      • Satlink
      • Truth
      • Ubdds
      • Bdd
      • Faig
      • Bed
      • 4v
        • 4v-sexprs
        • 4v-monotonicity
        • 4v-operations
          • 4v-ite
          • 4v-res
          • 4v-not-list
          • 4v-unfloat
          • 4v-wand
          • 4v-wor
          • 4v-zif
          • 4v-tristate
            • 4v-xdet
            • 4v-xor
            • 4v-iff
            • 4v-and
            • 4v-or
            • 4v-not
            • 4v-pullup
            • 4v-and-list
            • 4v-ite*
          • Why-4v-logic
          • 4v-<=
          • 4vp
          • 4vcases
          • 4v-fix
          • 4v-lookup
      • Debugging
      • Projects
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Testing-utilities
      • Math
    • 4v-operations

    4v-tristate

    Four-valued semantics for tri-state buffers.

    This is our model of a simple tri-state buffer:

            A
            |
         ___|___
         \     /
    C ----\   /
           \ /
            V
            |
           Out

    (4v-tristate c a) returns:

    • A when its inputs are Boolean and C is T, or
    • Z when C is known to be false, or
    • X otherwise.

    This exactly matches the Verilog semantics for:

    wire c = sel ? a : 1'bz;

    Such buffers are typically used to model muxes with multiple selectors. See also 4v-res.

    Definitions and Theorems

    Function: 4v-tristate

    (defun 4v-tristate (c a)
           (declare (xargs :guard t))
           (mbe :logic (4vcases c (t (4v-unfloat a))
                                (f (4vz))
                                (& (4vx)))
                :exec (cond ((eq c (4vf)) (4vz))
                            ((and (eq c (4vt))
                                  (or (eq a (4vt)) (eq a (4vf))))
                             a)
                            (t (4vx)))))

    Theorem: 4v-equiv-implies-equal-4v-tristate-2

    (defthm 4v-equiv-implies-equal-4v-tristate-2
            (implies (4v-equiv a a-equiv)
                     (equal (4v-tristate c a)
                            (4v-tristate c a-equiv)))
            :rule-classes (:congruence))

    Theorem: 4v-equiv-implies-equal-4v-tristate-1

    (defthm 4v-equiv-implies-equal-4v-tristate-1
            (implies (4v-equiv c c-equiv)
                     (equal (4v-tristate c a)
                            (4v-tristate c-equiv a)))
            :rule-classes (:congruence))