• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • Proof-checker-array
      • Soft
      • C
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Leftist-trees
      • Java
      • Riscv
      • Taspi
      • Bitcoin
      • Des
      • Ethereum
      • X86isa
      • Sha-2
      • Yul
      • Zcash
      • Proof-checker-itp13
      • Regex
      • ACL2-programming-language
      • Json
      • Jfkr
      • Equational
      • Cryptography
      • Poseidon
      • Where-do-i-place-my-book
      • Axe
      • Aleo
        • Aleobft
        • Aleovm
        • Leo
          • Grammar
          • Early-version
            • Json2ast
            • Testing
            • Definition
              • Flattening
              • Abstract-syntax
              • Dynamic-semantics
              • Compilation
              • Static-semantics
                • Type-checking
                • Static-environments
                • Curve-parameterization
                • Function-recursion
                • Struct-recursion
                  • Topdecl-list-struct-graph
                  • Structdecl-struct-graph
                  • File-struct-recursion-okp
                    • Compdecl-list-type-identifiers
                    • Topdecl-struct-graph
                    • Compdecl-type-identifiers
                  • 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
    • Struct-recursion

    File-struct-recursion-okp

    Check if a Leo file has no struct type recursion.

    Signature
    (file-struct-recursion-okp file) → yes/no
    Arguments
    file — Guard (filep file).
    Returns
    yes/no — Type (booleanp yes/no).

    We build the dependency graph of the struct types in the file, by going through the declarations that form the file. Then we attempt to topologically sort the graph. If that succeeds, the graph has no circularities and therefore there is no struct type recursion. If that fails, there is a circularity.

    Definitions and Theorems

    Function: file-struct-recursion-okp

    (defun file-struct-recursion-okp (file)
      (declare (xargs :guard (filep file)))
      (let ((__function__ 'file-struct-recursion-okp))
        (declare (ignorable __function__))
        (b* ((graph (topdecl-list-struct-graph
                         (programdecl->items (file->program file))))
             ((mv okp &) (depgraph::toposort graph)))
          okp)))

    Theorem: booleanp-of-file-struct-recursion-okp

    (defthm booleanp-of-file-struct-recursion-okp
      (b* ((yes/no (file-struct-recursion-okp file)))
        (booleanp yes/no))
      :rule-classes :rewrite)

    Theorem: file-struct-recursion-okp-of-file-fix-file

    (defthm file-struct-recursion-okp-of-file-fix-file
      (equal (file-struct-recursion-okp (file-fix file))
             (file-struct-recursion-okp file)))

    Theorem: file-struct-recursion-okp-file-equiv-congruence-on-file

    (defthm file-struct-recursion-okp-file-equiv-congruence-on-file
      (implies (file-equiv file file-equiv)
               (equal (file-struct-recursion-okp file)
                      (file-struct-recursion-okp file-equiv)))
      :rule-classes :congruence)