• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • 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
        • Soft
        • C
        • Bv
        • Imp-language
        • Event-macros
        • Java
        • Bitcoin
        • Ethereum
        • Yul
        • Zcash
        • ACL2-programming-language
        • Prime-fields
        • Json
        • Syntheto
          • Process-syntheto-toplevel-fn
          • Translation
          • Language
            • Static-semantics
            • Abstract-syntax
              • Expression
              • Expression-sum-field-list
              • Type
              • Binary-op
              • Expression-product-field-list
              • Abstract-syntax-operations
                • Subst-expression-fns
                • Field-list-to-typed-variable-list
                • Negate-expression
                • Get-function-definition-in-function-definitions
                • Get-function-definition
                  • Get-type-definition-in-type-definitions
                  • Get-type-definition
                  • Get-function-specification
                  • Get-type-subset
                  • Get-alternative-product
                  • Direct-supertype
                  • Get-function-header-in-list
                  • Equate-expression-lists
                  • Get-field-type
                  • Get-theorem
                  • Get-defined-type-names-in-type-definitions
                  • Disjoin-expressions
                  • Conjoin-expressions
                  • Get-type-product
                  • Binary-op-nonstrictp
                  • Get-type-sum
                  • Get-defined-type-names
                  • Equate-expressions
                  • Field-to-typed-variable
                  • Subst-expression
                  • Binary-op-strictp
                  • Initializer-list-from-flds-vals
                  • Typed-variable-list->-expression-variable-list
                  • Typed-variable-list->-expression
                  • Variable-substitution
                  • Local-variables
                  • Identifier-list-names
                  • Functions-called
                  • Subst-expression-list
                  • Subst-branch-list
                  • Subst-branch
                • Function-definition-list->header-list
                • Type-definition-list->name-list
                • Initializer-list->value-list
                • Function-header-list->name-list
                • Typed-variable-list->type-list
                • Typed-variable-list->name-list
                • Branch-list->condition-list
                • Alternative-list->name-list
                • Function-specifier
                • Expression-variable-list
                • Type-subset
                • Field-list->type-list
                • Field-list->name-list
                • Function-specification
                • Identifier
                • Toplevel
                • Function-definer
                • Function-header
                • Type-definer
                • Literal
                • Type-product
                • Function-definition
                • Type-sum
                • Maybe-expression
                • Transform-argument-value
                • Transform
                • Theorem
                • Quantifier
                • Maybe-function-specification
                • Maybe-typed-variable
                • Maybe-type-definition
                • Maybe-function-header
                • Maybe-function-definition
                • Maybe-type-sum
                • Maybe-type-subset
                • Maybe-type-product
                • Maybe-type-definer
                • Maybe-theorem
                • Maybe-type
                • Initializer
                • Type-definition
                • Alternative
                • Unary-op
                • Typed-variable
                • Branch
                • Field
                • Transform-argument
                • Type-recursion
                • Program
                • Function-recursion
                • Typed-variable-list
                • Toplevel-name
                • Toplevel-list
                • Initializer-list
                • Expression-fixtypes
                • Toplevel-fn-names
                • Lookup-transform-argument
                • Function-definition-names
                • Type-definition-list
                • Transform-argument-list
                • Function-header-list
                • Function-definition-list
                • Alternative-list
                • Type-list
                • Identifier-set
                • Identifier-list
                • Field-list
                • Expression-list
                • Branch-list
                • Extract-default-param-alist
                • Create-arg-defaults-table
              • Outcome
              • Abstract-syntax-operations
                • Subst-expression-fns
                • Field-list-to-typed-variable-list
                • Negate-expression
                • Get-function-definition-in-function-definitions
                • Get-function-definition
                  • Get-type-definition-in-type-definitions
                  • Get-type-definition
                  • Get-function-specification
                  • Get-type-subset
                  • Get-alternative-product
                  • Direct-supertype
                  • Get-function-header-in-list
                  • Equate-expression-lists
                  • Get-field-type
                  • Get-theorem
                  • Get-defined-type-names-in-type-definitions
                  • Disjoin-expressions
                  • Conjoin-expressions
                  • Get-type-product
                  • Binary-op-nonstrictp
                  • Get-type-sum
                  • Get-defined-type-names
                  • Equate-expressions
                  • Field-to-typed-variable
                  • Subst-expression
                  • Binary-op-strictp
                  • Initializer-list-from-flds-vals
                  • Typed-variable-list->-expression-variable-list
                  • Typed-variable-list->-expression
                  • Variable-substitution
                  • Local-variables
                  • Identifier-list-names
                  • Functions-called
                  • Subst-expression-list
                  • Subst-branch-list
                  • Subst-branch
                • Outcome-list
                • Outcomes
              • Process-syntheto-toplevel
              • Shallow-embedding
            • File-io-light
            • Cryptography
            • Number-theory
            • Lists-light
            • Axe
            • Builtins
            • Solidity
            • Helpers
            • Htclient
            • Typed-lists-light
            • Arithmetic-light
          • X86isa
          • Axe
          • Execloader
        • Math
        • Testing-utilities
      • Abstract-syntax-operations

      Get-function-definition

      Find the definition of a function with a given name in a list of top-level constructs.

      Signature
      (get-function-definition name tops) → fundef?
      Arguments
      name — Guard (identifierp name).
      tops — Guard (toplevel-listp tops).
      Returns
      fundef? — Type (maybe-function-definitionp fundef?).

      We look both at the function definitions at the top level and at the function definitions inside the function recursions.

      We return nil if the function definition is not found.

      We look up the top-level constructs in order. In well-formed lists of top-level constructs, the defined function names are unique, so any order would yield the same result.

      Definitions and Theorems

      Function: get-function-definition

      (defun get-function-definition (name tops)
       (declare (xargs :guard (and (identifierp name)
                                   (toplevel-listp tops))))
       (let ((__function__ 'get-function-definition))
        (declare (ignorable __function__))
        (b* (((when (endp tops)) nil)
             (top (car tops)))
         (toplevel-case
          top :type
          (get-function-definition name (cdr tops))
          :types
          (get-function-definition name (cdr tops))
          :function
          (if
           (identifier-equiv
            name
            (function-header->name (function-definition->header top.get)))
           top.get
           (get-function-definition name (cdr tops)))
          :functions
          (b* ((fundef? (get-function-definition-in-function-definitions
                             name
                             (function-recursion->definitions top.get))))
            (or fundef?
                (get-function-definition name (cdr tops))))
          :specification (get-function-definition name (cdr tops))
          :theorem (get-function-definition name (cdr tops))
          :transform (get-function-definition name (cdr tops))))))

      Theorem: maybe-function-definitionp-of-get-function-definition

      (defthm maybe-function-definitionp-of-get-function-definition
        (b* ((fundef? (get-function-definition name tops)))
          (maybe-function-definitionp fundef?))
        :rule-classes :rewrite)

      Theorem: get-function-definition-of-identifier-fix-name

      (defthm get-function-definition-of-identifier-fix-name
        (equal (get-function-definition (identifier-fix name)
                                        tops)
               (get-function-definition name tops)))

      Theorem: get-function-definition-identifier-equiv-congruence-on-name

      (defthm get-function-definition-identifier-equiv-congruence-on-name
        (implies (identifier-equiv name name-equiv)
                 (equal (get-function-definition name tops)
                        (get-function-definition name-equiv tops)))
        :rule-classes :congruence)

      Theorem: get-function-definition-of-toplevel-list-fix-tops

      (defthm get-function-definition-of-toplevel-list-fix-tops
        (equal (get-function-definition name (toplevel-list-fix tops))
               (get-function-definition name tops)))

      Theorem: get-function-definition-toplevel-list-equiv-congruence-on-tops

      (defthm
           get-function-definition-toplevel-list-equiv-congruence-on-tops
        (implies (toplevel-list-equiv tops tops-equiv)
                 (equal (get-function-definition name tops)
                        (get-function-definition name tops-equiv)))
        :rule-classes :congruence)