• 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
            • Formalized-subset
            • Mapping-to-language-definition
            • Input-files
            • Compilation-database
            • Printer
            • Output-files
            • Abstract-syntax-operations
            • Implementation-environments
            • Abstract-syntax
            • Concrete-syntax
            • Disambiguation
              • Disambiguator
              • Unambiguity
                • Abstract-syntax-unambp
                • Abstract-syntax-unambp-additional-theorems
                • Type-spec-list-unambp-of-sublists
                • Expr-unambp-of-operation-on-expr-unambp
            • Validation
            • Gcc-builtins
            • Preprocessing
            • Parsing
          • Atc
          • 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
  • Disambiguation

Unambiguity

Unambiguity of the ASTs.

Our abstract syntax includes ambiguous constructs, i.e. constructs that capture syntactically ambiguous constructs; see the documentation of the abstract syntax for details. The disambiguator, if successful, removes those constructs, leaving only the unambiguous ones.

Here we define predicates over the abstract syntax that say whether the constructs are unambiguous, i.e. whether there are no ambiguous constructs.

For now we do not make any checks on GCC extensions, even though they may contain expressions. This mirrors the treatment in the disambiguator: the reason for this (temporary) limitation is explained there.

Subtopics

Abstract-syntax-unambp
Definition of the unambiguity predicates.
Abstract-syntax-unambp-additional-theorems
Additional theorems about the unambiguity predicates.
Type-spec-list-unambp-of-sublists
Theorems saying that the sublist of type specifiers extracted via some abstract syntax operations is unambiguous if the initial list is unambiguous.
Expr-unambp-of-operation-on-expr-unambp
Preservation of unambiguity by certain operations on expressions.