• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • C
          • Syntax-for-tools
          • Atc
            • Atc-implementation
              • Atc-abstract-syntax
              • Atc-pretty-printer
              • Atc-event-and-code-generation
                • Atc-symbolic-computation-states
                • Atc-symbolic-execution-rules
                • Atc-gen-ext-declon-lists
                • Atc-function-and-loop-generation
                • Atc-statement-generation
                • Atc-gen-fileset
                • Atc-gen-everything
                • Atc-gen-obj-declon
                • Atc-gen-fileset-event
                • Atc-tag-tables
                • Atc-expression-generation
                  • Atc-gen-expr-struct-read-array
                  • Atc-gen-expr-pure/bool
                  • Atc-gen-expr-integer-read
                  • Atc-gen-expr-cond
                  • Atc-gen-expr-binary
                  • Atc-gen-expr-or
                  • Atc-gen-expr-array-read
                  • Expr-gin
                  • Exprs-gin
                  • Atc-gen-expr-and
                  • Atc-gen-expr-struct-read-scalar
                  • Exprs-gout
                  • Atc-gen-expr-unary
                  • Atc-gen-expr-conv
                  • Expr-gout
                  • Atc-gen-expr-bool-from-type
                  • Atc-gen-expr-sint-from-bool
                  • Atc-gen-expr-const
                    • Atc-gen-expr-var
                    • Atc-gen-expr-pure-list
                    • Irr-exprs-gout
                    • Irr-expr-gout
                  • Atc-generation-contexts
                  • Atc-gen-wf-thm
                  • Term-checkers-atc
                  • Atc-variable-tables
                  • Term-checkers-common
                  • Atc-gen-init-fun-env-thm
                  • Atc-gen-appconds
                  • Read-write-variables
                  • Atc-gen-thm-assert-events
                  • Test*
                  • Atc-gen-prog-const
                  • Atc-gen-expr-bool
                  • Atc-theorem-generation
                  • Atc-tag-generation
                  • Atc-gen-expr-pure
                  • Atc-function-tables
                  • Atc-object-tables
                • Fty-pseudo-term-utilities
                • Atc-term-recognizers
                • Atc-input-processing
                • Atc-shallow-embedding
                • Atc-process-inputs-and-gen-everything
                • Atc-table
                • Atc-fn
                • Atc-pretty-printing-options
                • Atc-types
                • Atc-macro-definition
              • Atc-tutorial
              • Pure-expression-execution
            • Transformation-tools
            • Language
            • Representation
            • Insertion-sort
            • Pack
          • Soft
          • Bv
          • Imp-language
          • Ethereum
          • Event-macros
          • Java
          • Riscv
          • Bitcoin
          • Zcash
          • Yul
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Atc-expression-generation

    Atc-gen-expr-const

    Generate a C expression and theorem from an ACL2 term that represents an integer constant expression.

    Signature
    (atc-gen-expr-const term const type type-base-const gin state) 
      → 
    gout
    Arguments
    term — Guard (pseudo-termp term).
    const — Guard (iconstp const).
    type — Guard (typep type).
    type-base-const — Guard (symbolp type-base-const).
    gin — Guard (expr-ginp gin).
    Returns
    gout — Type (expr-goutp gout).

    The C integer constant is actually calculated by the caller, and passed as input here.

    The hints cover all possible integer constants, but we could make them more nuanced to the specifics of the constant.

    Definitions and Theorems

    Function: atc-gen-expr-const

    (defun atc-gen-expr-const
           (term const type type-base-const gin state)
     (declare (xargs :stobjs (state)))
     (declare (xargs :guard (and (pseudo-termp term)
                                 (iconstp const)
                                 (typep type)
                                 (symbolp type-base-const)
                                 (expr-ginp gin))))
     (declare (xargs :guard (type-nonchar-integerp type)))
     (let ((__function__ 'atc-gen-expr-const))
      (declare (ignorable __function__))
      (b*
       (((expr-gin gin) gin)
        (expr (expr-const (const-int const)))
        ((when (not gin.proofs))
         (make-expr-gout :expr expr
                         :type type
                         :term term
                         :events nil
                         :thm-name nil
                         :thm-index gin.thm-index
                         :names-to-avoid gin.names-to-avoid))
        (hints
         (b* ((fixtype (integer-type-to-fixtype type))
              (exec-const-to-fixtype (pack 'exec-const-to- fixtype))
              (fixtype-integerp (pack fixtype '-integerp))
              (recognizer (atc-type-to-recognizer type gin.prec-tags))
              (valuep-when-recognizer (pack 'valuep-when- recognizer))
              (recognizer-of-fixtype-from-integer
                   (pack recognizer '-of-
                         fixtype '-from-integer)))
          (cons
           (cons
            '"Goal"
            (cons
             ':in-theory
             (cons
              (cons
               'quote
               (cons
                (cons
                 'exec-expr-pure-when-const
                 (cons
                  '(:e expr-kind)
                  (cons
                   '(:e expr-const->get)
                   (cons
                    exec-const-to-fixtype
                    (cons
                     '(:e const-kind)
                     (cons
                      '(:e const-int->get)
                      (cons
                       '(:e iconst->unsignedp)
                       (cons
                        '(:e iconst->length)
                        (cons
                         '(:e iconst->value)
                         (cons
                          '(:e iconst->base)
                          (cons
                           '(:e iconst-length-kind)
                           (cons
                            '(:e iconst-base-kind)
                            (cons
                             (cons ':e (cons fixtype-integerp 'nil))
                             (cons
                              type-base-const
                              (cons
                               recognizer-of-fixtype-from-integer
                               (cons
                                'expr-valuep-of-expr-value
                                (cons
                                     'expr-value->value-of-expr-value
                                     (cons 'value-fix-when-valuep
                                           (cons valuep-when-recognizer
                                                 'nil)))))))))))))))))))
                'nil))
              'nil)))
           'nil)))
        ((mv thm-event
             thm-name thm-index names-to-avoid)
         (atc-gen-expr-pure-correct-thm
              gin.fn
              gin.fn-guard gin.context expr type
              term term acl2::*nil* gin.compst-var
              hints nil gin.prec-tags gin.thm-index
              gin.names-to-avoid state)))
       (make-expr-gout :expr expr
                       :type type
                       :term term
                       :events (list thm-event)
                       :thm-name thm-name
                       :thm-index thm-index
                       :names-to-avoid names-to-avoid))))

    Theorem: expr-goutp-of-atc-gen-expr-const

    (defthm expr-goutp-of-atc-gen-expr-const
     (b*
      ((gout (atc-gen-expr-const term
                                 const type type-base-const gin state)))
      (expr-goutp gout))
     :rule-classes :rewrite)