• 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
                • Type-checking
                  • Typecheck-expressions
                  • Typecheck-statements
                  • Typecheck-expression
                  • Typecheck-statement
                  • Funparam-list-to-var/const-sinfo-list
                  • Typecheck-call
                  • Expr-type-list->sort-list
                  • Typecheck-binop
                  • Expr-type-list->type-list
                  • Types+senv
                  • Typecheck-literal
                  • Typecheck-print-args
                  • Expr-sort
                  • Typecheck-type
                  • Typecheck-fundecl
                  • Typecheck-unop
                  • Typecheck-constdecl
                  • Extend-senv-with-structdecl
                    • Typecheck-structdecl
                    • Expr-type
                    • Typecheck-vardecl
                    • Typecheck-statement-list
                    • Extend-senv-with-constdecl
                    • Typecheck-funparam-list
                    • Extend-senv-with-vardecl
                    • Extend-senv-with-fundecl
                    • Typecheck-compdecl-list
                    • Typecheck-funparam
                    • Identifier+exprtype
                    • Extend-senv-with-topdecl-list
                    • Typecheck-console
                    • Identifier-exprtype-map-constp
                    • Types+senv-result
                    • Typecheck-topdecl-list
                    • Typecheck-compdecl
                    • Identifier+exprtype-result
                    • Identifier-exprtype-map-result
                    • Funparam-to-var/const-sinfo
                    • Extend-senv-with-topdecl
                    • Identexprtype-map-to-identype-map
                    • Expr-type-result
                    • Expr-type-list-result
                    • Typecheck-topdecl
                    • Typecheck-file
                    • Typecheck-branch-list
                    • File-to-senv
                    • Identifier-exprtype-map
                    • Typecheck-struct-init
                    • Typecheck-branch
                    • Expr-type-list
                    • Expr-sort-list
                    • Typecheck-expression-list
                  • Static-environments
                  • Curve-parameterization
                  • Function-recursion
                  • Struct-recursion
                  • Input-checking
                  • Program-checking
                  • Type-maps-for-struct-components
                  • Program-and-input-checking
                  • Output-checking
                • Concrete-syntax
        • 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
    • Type-checking

    Extend-senv-with-structdecl

    Extend a static environment with a struct declaration.

    Signature
    (extend-senv-with-structdecl decl env) → new-env
    Arguments
    decl — Guard (structdeclp decl).
    env — Guard (senvp env).
    Returns
    new-env — Type (senv-resultp new-env).

    First we build a finite map from identifiers to types from the struct component declarations, which we use to build the information about the struct type. Then we add an entry to the static environment for the struct type, unless its name is already in use.

    Definitions and Theorems

    Function: extend-senv-with-structdecl

    (defun extend-senv-with-structdecl (decl env)
      (declare (xargs :guard (and (structdeclp decl) (senvp env))))
      (let ((__function__ 'extend-senv-with-structdecl))
        (declare (ignorable __function__))
        (b* (((structdecl decl) decl)
             ((okf comps)
              (extend-type-map-with-compdecl-list decl.components nil))
             (info (make-struct-sinfo :components comps))
             (new-env (add-struct-sinfo decl.name info env))
             ((unless new-env)
              (reserrf (list :cannot-add-struct
                             decl.name (senv-fix env)))))
          new-env)))

    Theorem: senv-resultp-of-extend-senv-with-structdecl

    (defthm senv-resultp-of-extend-senv-with-structdecl
      (b* ((new-env (extend-senv-with-structdecl decl env)))
        (senv-resultp new-env))
      :rule-classes :rewrite)

    Theorem: extend-senv-with-structdecl-of-structdecl-fix-decl

    (defthm extend-senv-with-structdecl-of-structdecl-fix-decl
      (equal (extend-senv-with-structdecl (structdecl-fix decl)
                                          env)
             (extend-senv-with-structdecl decl env)))

    Theorem: extend-senv-with-structdecl-structdecl-equiv-congruence-on-decl

    (defthm
        extend-senv-with-structdecl-structdecl-equiv-congruence-on-decl
      (implies (structdecl-equiv decl decl-equiv)
               (equal (extend-senv-with-structdecl decl env)
                      (extend-senv-with-structdecl decl-equiv env)))
      :rule-classes :congruence)

    Theorem: extend-senv-with-structdecl-of-senv-fix-env

    (defthm extend-senv-with-structdecl-of-senv-fix-env
      (equal (extend-senv-with-structdecl decl (senv-fix env))
             (extend-senv-with-structdecl decl env)))

    Theorem: extend-senv-with-structdecl-senv-equiv-congruence-on-env

    (defthm extend-senv-with-structdecl-senv-equiv-congruence-on-env
      (implies (senv-equiv env env-equiv)
               (equal (extend-senv-with-structdecl decl env)
                      (extend-senv-with-structdecl decl env-equiv)))
      :rule-classes :congruence)