• Top
    • Documentation
    • Books
    • Boolean-reasoning
      • Ipasir
      • Aignet
      • Aig
      • Satlink
      • Truth
        • Index-permute-shrink
        • Permute-stretch
        • Permute-shrink
        • Env-mismatch-aux
        • Env-permute-shrink
        • Permute-polarity
        • Env-permute-polarity
          • Permute-var-down
          • Env-permute-stretch
          • Swap-vars-aux
          • Swap-vars
          • Permute-var-up
          • Truth-perm-rev
          • Negative-cofactor
          • Index-permute-stretch
          • Env-mismatch
          • Swap-polarity
          • Positive-cofactor
          • Truth-perm
          • Index-perm-rev
          • Nth-set-bit-pos
          • Env-perm-rev
          • Is-xor-with-var
          • Index-swap
          • Index-perm
          • Env-move-var-down
          • Truth-eval
          • Env-swap-vars
          • Env-perm
          • Depends-on-witness
          • Var
          • Index-move-down
          • Env-update
          • Env-swap-polarity
          • Var-repetitions
          • Env-move-var-up
          • Depends-on
          • Index-move-up
          • Truth-norm
          • Index-listp
          • Env-diff-index
          • Env-lookup
          • True
          • False
        • Ubdds
        • Bdd
        • Faig
        • Bed
        • 4v
      • Projects
      • Debugging
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Truth

    Env-permute-polarity

    Signature
    (env-permute-polarity n mask env numvars) → new-env
    Arguments
    n — Guard (natp n).
    mask — Guard (integerp mask).
    env — Guard (natp env).
    numvars — Guard (natp numvars).
    Returns
    new-env — Type (natp new-env).

    Definitions and Theorems

    Function: env-permute-polarity

    (defun env-permute-polarity (n mask env numvars)
      (declare (xargs :guard (and (natp n)
                                  (integerp mask)
                                  (natp env)
                                  (natp numvars))))
      (declare (xargs :guard (<= n numvars)))
      (let ((__function__ 'env-permute-polarity))
        (declare (ignorable __function__))
        (b* (((when (mbe :logic (zp (- (nfix numvars) (nfix n)))
                         :exec (eql n numvars)))
              (lnfix env))
             (env (if (logbitp n mask)
                      (env-swap-polarity n env)
                    env)))
          (env-permute-polarity (1+ (lnfix n))
                                mask env numvars))))

    Theorem: natp-of-env-permute-polarity

    (defthm natp-of-env-permute-polarity
      (b* ((new-env (env-permute-polarity n mask env numvars)))
        (natp new-env))
      :rule-classes :type-prescription)

    Theorem: lookup-in-env-permute-polarity-split

    (defthm lookup-in-env-permute-polarity-split
      (b* ((?new-env (env-permute-polarity n mask env numvars)))
        (equal (env-lookup m new-env)
               (if (and (<= (nfix n) (nfix m))
                        (< (nfix m) (nfix numvars)))
                   (xor (env-lookup m env)
                        (logbitp m mask))
                 (env-lookup m env)))))

    Theorem: lookup-in-env-permute-polarity-set

    (defthm lookup-in-env-permute-polarity-set
     (b* nil
      (implies
           (and (logbitp m mask)
                (< (nfix m) (nfix numvars)))
           (equal (env-lookup m
                              (env-permute-polarity 0 mask env numvars))
                  (not (env-lookup m env))))))

    Theorem: lookup-in-env-permute-polarity-unset

    (defthm lookup-in-env-permute-polarity-unset
     (b* nil
      (implies
           (and (not (logbitp m mask))
                (< (nfix m) (nfix numvars)))
           (equal (env-lookup m
                              (env-permute-polarity n mask env numvars))
                  (env-lookup m env)))))

    Theorem: env-permute-polarity-of-swap-polarity

    (defthm env-permute-polarity-of-swap-polarity
     (b* nil
      (equal
        (env-permute-polarity n mask (env-swap-polarity m env)
                              numvars)
        (env-swap-polarity m
                           (env-permute-polarity n mask env numvars)))))

    Theorem: env-permute-polarity-reverse

    (defthm env-permute-polarity-reverse
      (b* ((?new-env (env-permute-polarity n mask env numvars)))
        (equal (env-permute-polarity n mask new-env numvars)
               (nfix env))))

    Theorem: env-permute-polarity-of-nfix-n

    (defthm env-permute-polarity-of-nfix-n
      (equal (env-permute-polarity (nfix n)
                                   mask env numvars)
             (env-permute-polarity n mask env numvars)))

    Theorem: env-permute-polarity-nat-equiv-congruence-on-n

    (defthm env-permute-polarity-nat-equiv-congruence-on-n
      (implies (nat-equiv n n-equiv)
               (equal (env-permute-polarity n mask env numvars)
                      (env-permute-polarity n-equiv mask env numvars)))
      :rule-classes :congruence)

    Theorem: env-permute-polarity-of-ifix-mask

    (defthm env-permute-polarity-of-ifix-mask
      (equal (env-permute-polarity n (ifix mask)
                                   env numvars)
             (env-permute-polarity n mask env numvars)))

    Theorem: env-permute-polarity-int-equiv-congruence-on-mask

    (defthm env-permute-polarity-int-equiv-congruence-on-mask
      (implies (int-equiv mask mask-equiv)
               (equal (env-permute-polarity n mask env numvars)
                      (env-permute-polarity n mask-equiv env numvars)))
      :rule-classes :congruence)

    Theorem: env-permute-polarity-of-nfix-env

    (defthm env-permute-polarity-of-nfix-env
      (equal (env-permute-polarity n mask (nfix env)
                                   numvars)
             (env-permute-polarity n mask env numvars)))

    Theorem: env-permute-polarity-nat-equiv-congruence-on-env

    (defthm env-permute-polarity-nat-equiv-congruence-on-env
      (implies (nat-equiv env env-equiv)
               (equal (env-permute-polarity n mask env numvars)
                      (env-permute-polarity n mask env-equiv numvars)))
      :rule-classes :congruence)

    Theorem: env-permute-polarity-of-nfix-numvars

    (defthm env-permute-polarity-of-nfix-numvars
      (equal (env-permute-polarity n mask env (nfix numvars))
             (env-permute-polarity n mask env numvars)))

    Theorem: env-permute-polarity-nat-equiv-congruence-on-numvars

    (defthm env-permute-polarity-nat-equiv-congruence-on-numvars
      (implies (nat-equiv numvars numvars-equiv)
               (equal (env-permute-polarity n mask env numvars)
                      (env-permute-polarity n mask env numvars-equiv)))
      :rule-classes :congruence)