• Top
    • Documentation
    • Books
    • Boolean-reasoning
      • Ipasir
        • Ipasir$a
        • Building-an-ipasir-solver-library
        • Ipasir-formula
          • Ipasir-set-mux
            • Ipasir-cancel-new-clause
            • Ipasir-cancel-assumption
            • Ipasir-set-xor
            • Ipasir-set-and
            • Ipasir-set-iff
            • Ipasir-add-binary
            • Ipasir-add-4ary
            • Ipasir-set-or
            • Ipasir-add-ternary
            • Ipasir-set-buf
            • Ipasir-add-unary
            • Ipasir-add-clauses
            • Ipasir-add-list
            • Ipasir-add-clauses-ordered
            • Ipasir-add-list-ordered
            • Ipasir-add-empty
          • Ipasir-bump-activity-vars$a
          • Ipasir-set$a
          • Ipasir-bump-activity-vars$c
          • Ipasir-get$a
          • Ipasir-set-limit$c
          • Ipasir-failed$c
          • Ipasir-assume$c
          • Ipasir-add-lit$c
          • Ipasir-val$c
          • Ipasir-set$c
          • With-local-ipasir
          • Ipasir-solve$c
          • Ipasir-init$c
          • Ipasir-finalize-clause$c
          • Ipasir-some-history$c
          • Ipasir-solved-assumption$c
          • Ipasir-release$c
          • Ipasir-reinit$c
          • Ipasir-input$c
          • Ipasir-get$c
          • Ipasir-get-status$c
          • Ipasir-get-curr-stats$c
          • Ipasir-get-assumption$c
          • Ipasir-empty-new-clause$c
          • Ipasir-callback-count$c
          • Ipasir-val
          • Ipasir-solve
          • Ipasir-set-limit
          • Ipasir-reinit
          • Ipasir-failed
          • Ipasir-callback-count
          • Ipasir-release
          • Ipasir-input
          • Ipasir-init
          • Ipasir-finalize-clause
          • Ipasir-assume
          • Ipasir-add-lit
        • Aignet
        • Aig
        • Satlink
        • Truth
        • Ubdds
        • Bdd
        • Faig
        • Bed
        • 4v
      • Projects
      • Debugging
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Ipasir-formula

    Ipasir-set-mux

    Add clauses restricting out to be (if test then else).

    Signature
    (ipasir-set-mux ipasir out test then else) → new-ipasir
    Arguments
    out — Guard (litp out).
    test — Guard (litp test).
    then — Guard (litp then).
    else — Guard (litp else).

    Definitions and Theorems

    Function: ipasir-set-mux

    (defun ipasir-set-mux (ipasir out test then else)
     (declare (xargs :stobjs (ipasir)))
     (declare (xargs :guard (and (litp out)
                                 (litp test)
                                 (litp then)
                                 (litp else))))
     (declare
         (xargs :guard (and (not (eq (ipasir-get-status ipasir) :undef))
                            (ipasir-empty-new-clause ipasir))))
     (let ((__function__ 'ipasir-set-mux))
       (declare (ignorable __function__))
       (b* ((ipasir (ipasir-add-ternary ipasir out (l- test)
                                        (l- then)))
            (ipasir (ipasir-add-ternary ipasir (l- out)
                                        (l- test)
                                        then))
            (ipasir (ipasir-add-ternary ipasir out test (l- else)))
            (ipasir (ipasir-add-ternary ipasir (l- out)
                                        test else))
            (ipasir (ipasir-add-ternary ipasir out (l- then)
                                        (l- else)))
            (ipasir (ipasir-add-ternary ipasir (l- out)
                                        then else)))
         ipasir)))

    Theorem: ipasir-set-mux-status

    (defthm ipasir-set-mux-status
      (b* ((?new-ipasir (ipasir-set-mux ipasir out test then else)))
        (equal (ipasir$a->status new-ipasir)
               :input)))

    Theorem: ipasir-set-mux-formula

    (defthm ipasir-set-mux-formula
     (b* ((?new-ipasir (ipasir-set-mux ipasir out test then else)))
      (implies
       (syntaxp (not (equal ipasir ''nil)))
       (equal
        (ipasir$a->formula new-ipasir)
        (append
             (ipasir$a->formula (ipasir-set-mux nil out test then else))
             (ipasir$a->formula ipasir))))))

    Theorem: ipasir-set-mux-eval-formula

    (defthm ipasir-set-mux-eval-formula
      (b* ((?new-ipasir (ipasir-set-mux ipasir out test then else)))
        (equal (eval-formula (ipasir$a->formula new-ipasir)
                             env)
               (b-and (b-eqv (eval-lit out env)
                             (b-ite (eval-lit test env)
                                    (eval-lit then env)
                                    (eval-lit else env)))
                      (eval-formula (ipasir$a->formula ipasir)
                                    env)))))

    Theorem: ipasir-set-mux-new-clause

    (defthm ipasir-set-mux-new-clause
      (b* ((?new-ipasir (ipasir-set-mux ipasir out test then else)))
        (not (ipasir$a->new-clause new-ipasir))))

    Theorem: ipasir-set-mux-assumption

    (defthm ipasir-set-mux-assumption
      (b* ((?new-ipasir (ipasir-set-mux ipasir out test then else)))
        (equal (ipasir$a->assumption new-ipasir)
               (ipasir$a->assumption ipasir))))