• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
      • Ipasir
      • Aignet
      • Aig
      • Satlink
      • Truth
        • Index-permute-shrink
        • Permute-stretch
        • Env-mismatch-aux
        • Permute-shrink
        • Permute-polarity
        • Env-permute-polarity
        • Env-permute-shrink
        • Permute-var-down
        • Swap-vars-aux
        • Env-permute-stretch
        • Swap-vars
        • Permute-var-up
        • Negative-cofactor
        • Truth-perm-rev
        • Index-permute-stretch
        • Env-mismatch
        • Truth-perm
        • Swap-polarity
        • Positive-cofactor
        • Index-perm-rev
        • Env-perm-rev
        • Nth-set-bit-pos
        • Index-swap
        • Env-move-var-down
          • Is-xor-with-var
          • Index-perm
          • Env-swap-vars
          • Var
          • Truth-eval
          • Index-move-down
          • Env-update
          • Env-perm
          • Depends-on-witness
          • Env-swap-polarity
          • Var-repetitions
          • Env-move-var-up
          • Index-move-up
          • Depends-on
          • 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
      • Testing-utilities
      • Math
    • Truth

    Env-move-var-down

    Signature
    (env-move-var-down m n env) → perm-env
    Arguments
    m — Guard (natp m).
    n — Guard (natp n).
    env — Guard (natp env).
    Returns
    perm-env — Type (natp perm-env).

    Definitions and Theorems

    Function: env-move-var-down

    (defun env-move-var-down (m n env)
           (declare (xargs :guard (and (natp m) (natp n) (natp env))))
           (declare (xargs :guard (<= m n)))
           (let ((__function__ 'env-move-var-down))
                (declare (ignorable __function__))
                (b* (((when (mbe :logic (zp (- (nfix n) (nfix m)))
                                 :exec (eql n m)))
                      (lnfix env))
                     (next (1+ (lnfix m)))
                     (env (env-move-var-down next n env)))
                    (env-update next (env-lookup m env)
                                (env-update m (env-lookup next env)
                                            env)))))

    Theorem: natp-of-env-move-var-down

    (defthm natp-of-env-move-var-down
            (b* ((perm-env (env-move-var-down m n env)))
                (natp perm-env))
            :rule-classes :type-prescription)

    Theorem: lookup-in-env-move-var-down

    (defthm lookup-in-env-move-var-down
            (b* ((?perm-env (env-move-var-down m n env)))
                (equal (env-lookup k perm-env)
                       (env-lookup (index-move-up m n k)
                                   env))))

    Theorem: env-move-var-down-of-env-move-var-up

    (defthm
       env-move-var-down-of-env-move-var-up
       (implies (<= (nfix m) (nfix n))
                (equal (env-move-var-down m n (env-move-var-up m n env))
                       (nfix env))))

    Theorem: env-move-var-up-of-env-move-var-down

    (defthm
       env-move-var-up-of-env-move-var-down
       (implies (<= (nfix m) (nfix n))
                (equal (env-move-var-up m n (env-move-var-down m n env))
                       (nfix env))))

    Theorem: env-move-var-down-of-nfix-m

    (defthm env-move-var-down-of-nfix-m
            (equal (env-move-var-down (nfix m) n env)
                   (env-move-var-down m n env)))

    Theorem: env-move-var-down-nat-equiv-congruence-on-m

    (defthm env-move-var-down-nat-equiv-congruence-on-m
            (implies (nat-equiv m m-equiv)
                     (equal (env-move-var-down m n env)
                            (env-move-var-down m-equiv n env)))
            :rule-classes :congruence)

    Theorem: env-move-var-down-of-nfix-n

    (defthm env-move-var-down-of-nfix-n
            (equal (env-move-var-down m (nfix n) env)
                   (env-move-var-down m n env)))

    Theorem: env-move-var-down-nat-equiv-congruence-on-n

    (defthm env-move-var-down-nat-equiv-congruence-on-n
            (implies (nat-equiv n n-equiv)
                     (equal (env-move-var-down m n env)
                            (env-move-var-down m n-equiv env)))
            :rule-classes :congruence)

    Theorem: env-move-var-down-of-nfix-env

    (defthm env-move-var-down-of-nfix-env
            (equal (env-move-var-down m n (nfix env))
                   (env-move-var-down m n env)))

    Theorem: env-move-var-down-nat-equiv-congruence-on-env

    (defthm env-move-var-down-nat-equiv-congruence-on-env
            (implies (nat-equiv env env-equiv)
                     (equal (env-move-var-down m n env)
                            (env-move-var-down m n env-equiv)))
            :rule-classes :congruence)