• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • C
      • Proof-checker-array
      • Soft
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Ethereum
      • Leftist-trees
      • Java
      • Riscv
      • Taspi
      • Bitcoin
      • Zcash
      • Des
      • X86isa
      • Sha-2
      • Yul
      • Proof-checker-itp13
      • Regex
      • ACL2-programming-language
      • Json
      • Jfkr
      • Equational
      • Cryptography
      • Axe
      • Poseidon
      • Where-do-i-place-my-book
      • Aleo
        • Aleobft
        • Aleovm
        • Leo
          • Grammar
          • Early-version
            • Json2ast
            • Testing
            • Definition
              • Flattening
              • Abstract-syntax
              • Dynamic-semantics
              • Compilation
              • Static-semantics
              • Concrete-syntax
                • Pretty-printer
                  • Pprint-expression-algorithm
                  • Expr-grade
                  • Pprint-expression
                  • Expr-grade-<=
                    • Binop-expected-grades
                    • Expr->grade
                    • Pprint-char
                    • Pprint-console
                    • Pprint-var/const-sort
                    • Pprint-indent
                    • Pprint-constdecl
                    • Pprint-vardecl
                    • Pprint-statement
                    • Pprint-type
                    • *binops-opcall-print-names*
                    • Pprint-programdecl
                    • Pprint-line
                    • Pprint-group-literal
                    • Pprint-funparam-list
                    • *unops-opcall-print-names*
                    • Pprint-literal
                    • Pprint-coordinate
                    • Pprint-char-list
                    • Pprint-bitsize-to-utype
                    • Pprint-bitsize-to-itype
                    • Expr-grade-index
                    • Pprint-unop
                    • Pprint-programid
                    • Pprint-importdecl
                    • Pprint-identifier
                    • Pprint-funparam
                    • Pprint-compdecl
                    • Pprint-binop
                    • Pprint-locator
                    • Pprint-compdecl-list
                    • Pprint-address
                    • Pprint-structdecl
                    • Pprint-natural
                    • Pprint-mappingdecl
                    • Pprint-integer
                    • Pprint-fundecl
                    • Pprint-comma-separated
                    • Pprint-boolean
                    • Pprint-annotation-list
                    • Pprint-topdecl-list
                    • Pprint-importdecl-list
                    • Pprint-topdecl
                    • Pprint-annotation
                    • Pprint-file
                    • Pprint-line-blank
                  • Grammar
                  • Lexing-and-parsing
                  • Input-pretty-printer
                  • Output-pretty-printer
                  • Unicode-characters
                  • Concrete-syntax-trees
                  • Symbols
                  • Keywords
        • Bigmems
        • Builtins
        • Execloader
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Community
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Pretty-printer

    Expr-grade-<=

    Total order over expression grades.

    Signature
    (expr-grade-<= grade1 grade2) → yes/no
    Arguments
    grade1 — Guard (expr-gradep grade1).
    grade2 — Guard (expr-gradep grade2).
    Returns
    yes/no — Type (booleanp yes/no).

    See pprint-expression-algorithm for background.

    We assign a numeric index to every grade and then we compare the indices. The indices indicate precedence: the smaller the index, the higher the precedence.

    Definitions and Theorems

    Function: expr-grade-index

    (defun expr-grade-index (grade)
      (declare (xargs :guard (expr-gradep grade)))
      (let ((__function__ 'expr-grade-index))
        (declare (ignorable __function__))
        (expr-grade-case grade
                         :top 14
                         :conditional 14
                         :disjunctive 13
                         :conjunctive 12
                         :equality 11
                         :ordering 10
                         :bitwise-xor 9
                         :bitwise-ior 8
                         :bitwise-and 7
                         :shift 6
                         :additive 5
                         :multiplicative 4
                         :exponential 3
                         :unary 2
                         :postfix 1
                         :primary 0)))

    Theorem: natp-of-expr-grade-index

    (defthm natp-of-expr-grade-index
      (b* ((index (expr-grade-index grade)))
        (natp index))
      :rule-classes :rewrite)

    Theorem: expr-grade-index-of-expr-grade-fix-grade

    (defthm expr-grade-index-of-expr-grade-fix-grade
      (equal (expr-grade-index (expr-grade-fix grade))
             (expr-grade-index grade)))

    Theorem: expr-grade-index-expr-grade-equiv-congruence-on-grade

    (defthm expr-grade-index-expr-grade-equiv-congruence-on-grade
      (implies (expr-grade-equiv grade grade-equiv)
               (equal (expr-grade-index grade)
                      (expr-grade-index grade-equiv)))
      :rule-classes :congruence)

    Function: expr-grade-<=

    (defun expr-grade-<= (grade1 grade2)
      (declare (xargs :guard (and (expr-gradep grade1)
                                  (expr-gradep grade2))))
      (let ((__function__ 'expr-grade-<=))
        (declare (ignorable __function__))
        (<= (expr-grade-index grade1)
            (expr-grade-index grade2))))

    Theorem: booleanp-of-expr-grade-<=

    (defthm booleanp-of-expr-grade-<=
      (b* ((yes/no (expr-grade-<= grade1 grade2)))
        (booleanp yes/no))
      :rule-classes :rewrite)

    Theorem: expr-grade-<=-of-expr-grade-fix-grade1

    (defthm expr-grade-<=-of-expr-grade-fix-grade1
      (equal (expr-grade-<= (expr-grade-fix grade1)
                            grade2)
             (expr-grade-<= grade1 grade2)))

    Theorem: expr-grade-<=-expr-grade-equiv-congruence-on-grade1

    (defthm expr-grade-<=-expr-grade-equiv-congruence-on-grade1
      (implies (expr-grade-equiv grade1 grade1-equiv)
               (equal (expr-grade-<= grade1 grade2)
                      (expr-grade-<= grade1-equiv grade2)))
      :rule-classes :congruence)

    Theorem: expr-grade-<=-of-expr-grade-fix-grade2

    (defthm expr-grade-<=-of-expr-grade-fix-grade2
      (equal (expr-grade-<= grade1 (expr-grade-fix grade2))
             (expr-grade-<= grade1 grade2)))

    Theorem: expr-grade-<=-expr-grade-equiv-congruence-on-grade2

    (defthm expr-grade-<=-expr-grade-equiv-congruence-on-grade2
      (implies (expr-grade-equiv grade2 grade2-equiv)
               (equal (expr-grade-<= grade1 grade2)
                      (expr-grade-<= grade1 grade2-equiv)))
      :rule-classes :congruence)