900 research outputs found

    Interacting via the Heap in the Presence of Recursion

    Full text link
    Almost all modern imperative programming languages include operations for dynamically manipulating the heap, for example by allocating and deallocating objects, and by updating reference fields. In the presence of recursive procedures and local variables the interactions of a program with the heap can become rather complex, as an unbounded number of objects can be allocated either on the call stack using local variables, or, anonymously, on the heap using reference fields. As such a static analysis is, in general, undecidable. In this paper we study the verification of recursive programs with unbounded allocation of objects, in a simple imperative language for heap manipulation. We present an improved semantics for this language, using an abstraction that is precise. For any program with a bounded visible heap, meaning that the number of objects reachable from variables at any point of execution is bounded, this abstraction is a finitary representation of its behaviour, even though an unbounded number of objects can appear in the state. As a consequence, for such programs model checking is decidable. Finally we introduce a specification language for temporal properties of the heap, and discuss model checking these properties against heap-manipulating programs.Comment: In Proceedings ICE 2012, arXiv:1212.345

    Q-systems, Heaps, Paths and Cluster Positivity

    Full text link
    We consider the cluster algebra associated to the QQ-system for ArA_r as a tool for relating QQ-system solutions to all possible sets of initial data. We show that the conserved quantities of the QQ-system are partition functions for hard particles on particular target graphs with weights, which are determined by the choice of initial data. This allows us to interpret the simplest solutions of the Q-system as generating functions for Viennot's heaps on these target graphs, and equivalently as generating functions of weighted paths on suitable dual target graphs. The generating functions take the form of finite continued fractions. In this setting, the cluster mutations correspond to local rearrangements of the fractions which leave their final value unchanged. Finally, the general solutions of the QQ-system are interpreted as partition functions for strongly non-intersecting families of lattice paths on target lattices. This expresses all cluster variables as manifestly positive Laurent polynomials of any initial data, thus proving the cluster positivity conjecture for the ArA_r QQ-system. We also give an alternative formulation in terms of domino tilings of deformed Aztec diamonds with defects.Comment: 106 pages, 38 figure

    The Coulomb impurity problem in graphene

    Full text link
    We address the problem of an unscreened Coulomb charge in graphene, and calculate the local density of states and displaced charge as a function of energy and distance from the impurity. This is done non-perturbatively in two different ways: (1) solving the problem exactly by studying numerically the tight-binding model on the lattice; (2) using the continuum description in terms of the 2D Dirac equation. We show that the Dirac equation, when properly regularized, provides a qualitative and quantitative low energy description of the problem. The lattice solution shows extra features that cannot be described by the Dirac equation, namely bound state formation and strong renormalization of the van Hove singularities.Comment: 3 Figures; minor typo corrections and minor update in Fig. 3

    Session Types in Concurrent Calculi: Higher-Order Processes and Objects

    No full text
    This dissertation investigates different formalisms, in the form of programming language calculi, that are aimed at providing a theoretical foundation for structured concurrent programming based on session types. The structure of a session type is essentially a process-algebraic style description of the behaviour of a single program identifier serving as a communication medium (and usually referred to as a channel): the types incorporate typed inputs, outputs, and choices which can be composed to form larger protocol descriptions. The effectiveness of session typing can be attributed to the linear treatment of channels and session types, and to the use of tractable methods such as syntactic duality to decide if the types of two connected channels are compatible. Linearity is ensured when accumulating the uses of a channel into a composite type that describes also the order of those actions. Duality provides a tractable and intuitive method for deciding when two connected channels can interact and exchange values in a statically determined type-safe way. We present our contributions to the theory of sessions, distilled into two families of programming calculi, the first based on higher-order processes and the second based on objects. Our work unifies, improves and extends, in manifold ways, the session primitives and typing systems for the Lambda-calculus, the Pi-calculus, the Object-calculus, and their combinations in multi-paradigm languages. Of particular interest are: the treatment of infinite interactions expressed with recursive sessions; the capacity to encapsulate channels in higher-order structures which can be exchanged and kept suspended, i.e., the use of code as data; the integration of protocol structure directly into the description of objects, providing a powerful and uniformly extensible set of implementation abstractions; finally, the introduction of asynchronous subtyping, which enables controlled reordering of actions on either side of a session. Our work on higher-order processes and on object calculi for session-based concurrent programming provides a theoretical foundation for programming language design integrating functional, process, and object-oriented features

    Functional Closure of Schwinger-Dyson Equations in Quantum Electrodynamics, Part 1: Generation of Connected and One-Particle Irreducible Feynman Diagrams

    Full text link
    Using functional derivatives with respect to free propagators and interactions we derive a closed set of Schwinger-Dyson equations in quantum electrodynamics. Its conversion to graphical recursion relations allows us to systematically generate all connected and one-particle irreducible Feynman diagrams for the nn-point functions and the vacuum energy together with their correct weights.Comment: Author Information under http://www.physik.fu-berlin.de/~kleinert/institution.html Latest update of paper also at http://www.physik.fu-berlin.de/~kleinert/32

    Dynamics of One-dimensional Self-gravitating Systems Using Hermite-Legendre Polynomials

    Full text link
    The current paradigm for understanding galaxy formation in the universe depends on the existence of self-gravitating collisionless dark matter. Modeling such dark matter systems has been a major focus of astrophysicists, with much of that effort directed at computational techniques. Not surprisingly, a comprehensive understanding of the evolution of these self-gravitating systems still eludes us, since it involves the collective nonlinear dynamics of many-particle systems interacting via long-range forces described by the Vlasov equation. As a step towards developing a clearer picture of collisionless self-gravitating relaxation, we analyze the linearized dynamics of isolated one-dimensional systems near thermal equilibrium by expanding their phase space distribution functions f(x,v) in terms of Hermite functions in the velocity variable, and Legendre functions involving the position variable. This approach produces a picture of phase-space evolution in terms of expansion coefficients, rather than spatial and velocity variables. We obtain equations of motion for the expansion coefficients for both test-particle distributions and self-gravitating linear perturbations of thermal equilibrium. N-body simulations of perturbed equilibria are performed and found to be in excellent agreement with the expansion coefficient approach over a time duration that depends on the size of the expansion series used.Comment: 12 pages, accepted for publication in MNRA

    Programming Language Abstractions for Modularly Verified Distributed Systems

    Get PDF
    Distributed systems are rarely developed as monolithic programs. Instead, like any software, these systems may consist of multiple program components, which are then compiled separately and linked together. Modern systems also incorporate various services interacting with each other and with client applications. However, state-of-the-art verification tools focus predominantly on verifying standalone, closed-world protocols or systems, thus failing to account for the compositional nature of distributed systems. For example, standalone verification has the drawback that when protocols and their optimized implementations evolve, one must re-verify the entire system from scratch, instead of leveraging compositionality to contain the reverification effort. In this paper, we focus on the challenge of modular verification of distributed systems with respect to high-level protocol invariants as well as for low-level implementation safety properties. We argue that the missing link between the two is a programming paradigm that would allow one to reason about both high-level distributed protocols and low-level implementation primitives in a single verification-friendly framework. Such a link would make it possible to reap the benefits from both the vast body of research in distributed computing, focused on modular protocol decomposition and consistency properties, as well as from the recent advances in program verification, enabling construction of provably correct systems implementations. To showcase the modular verification challenges, we present some typical scenarios of decomposition between a distributed protocol and its implementations. We then describe our ongoing research agenda, in which we are attempting to address the outlined problems by providing a typing discipline and a set of domain-specific primitives for specifying, implementing and verifying distributed systems. Our approach, mechanized within a proof assistant, provides the means of decomposition necessary for modular proofs about distributed protocols and systems

    Program verification with interacting analysis plugins

    Get PDF
    In this paper we propose and argue for a modular framework for interprocedural program analysis, where multiple program analysis tools are combined in order to exploit the particular advantages of each. This allows for “plugging together” such tools as required by each verification task and makes it easy to integrate new analyses. Our framework automates the sharing of information between plugins using a first order logic with transitive closure, in a way inspired by the open product of Cortesi et al.. We describe a prototype implementation of our framework, which performs static assertion checking on a simple language for heap-manipulating programs. This implementation includes plugins for three existing approaches — predicate abstraction, 3-valued shape analysis and a decidable pointer analysis — and for a simple type system. We demonstrate through a detailed example the increase in precision that our approach can provide. Finally we discuss the design decisions we have taken, in particular the tradeoffs involved in the choice of language by which the plugins communicate, and identify some future directions for our work
    corecore