2 research outputs found

    Formal Verification of Self-Assembling Systems

    Full text link
    This paper introduces the theory and practice of formal verification of self-assembling systems. We interpret a well-studied abstraction of nanomolecular self assembly, the Abstract Tile Assembly Model (aTAM), into Computation Tree Logic (CTL), a temporal logic often used in model checking. We then consider the class of "rectilinear" tile assembly systems. This class includes most aTAM systems studied in the theoretical literature, and all (algorithmic) DNA tile self-assembling systems that have been realized in laboratories to date. We present a polynomial-time algorithm that, given a tile assembly system T as input, either provides a counterexample to T's rectilinearity or verifies whether T has a unique terminal assembly. Using partial order reductions, the verification search space for this algorithm is reduced from exponential size to O(n^2), where n x n is the size of the assembly surface. That reduction is asymptotically the best possible. We report on experimental results obtained by translating tile assembly simulator files into a Petri net format manipulable by the SMART model checking engines devised by Ciardo et al. The model checker runs in O(|T| x n^4) time, where |T| is the number of tile types in tile assembly system T, and n x n is the surface size. Atypical for a model checking problem -- in which the practical limit usually is insufficient memory to store the state space -- the limit in this case was the amount of memory required to represent the rules of the model. (Storage of the state space and of the reachability graph were small by comparison.) We discuss how to overcome this obstacle by means of a front end tailored to the characteristics of self-assembly

    A domain specific language for programming in the tile assembly model

    No full text
    We introduce a domain-specific language (DSL) for creating sets of tile types for simulations of the abstract Tile Assembly Model. The language defines objects known as tile templates, which represent related groups of tiles, and a small number of basic operations on tile templates that help to eliminate the error-prone drudgery of enumerating such tile types manually or with low-level constructs of general-purpose programming languages. The language is implemented as a class library in Python (a so-called internal DSL), but is presented independently of Python or object-oriented programming, with emphasis on supporting the creation of visual editing tools for programmatically creating large sets of complex tile types without needing to write a program.
    corecore