59 research outputs found

    Crowfoot: a verifier for higher-order store programs

    Get PDF
    We present Crowfoot, an automatic verification tool for imperative programs that manipulate procedures dynamically at runtime; these programs use a heap that can store not only data but also code (commands or procedures). Such heaps are often called higher-order store, and allow for instance the creation of new recursions on the fly. One can use higher-order store to model phenomena such as runtime loading and unloading of code, runtime update of code and runtime code generation. Crowfoot's assertion language, based on separation logic, features nested Hoare triples which describe the behaviour of procedures stored on the heap. The tool addresses complex issues like deep frame rules and recursion through the store, and is the first verification tool based on recent developments in the mathematical foundations of Hoare logics with nested triples

    Phenyl-triazine oligomers for light-driven hydrogen evolution

    Get PDF
    The design of stable, yet highly tunable organic photocatalysts which orchestrate multi-step electron transfer reactions is at the heart of the newly emerging field of polymer photocatalysis. Covalent triazine frameworks such as the archetypal CTF-1 have been theorized to constitute a new class of photocatalytically active polymers for light-driven water splitting. Here, we revisit the ionothermal synthesis of CTF-1 by trimerization of 1,4-dicyanobenzene catalyzed by the Lewis acid zinc chloride and demonstrate that the microporous black polymer CTF-1 is essentially inactive for hydrogen evolution. Instead, highly photoactive phenyl-triazine oligomers (PTOs) with higher crystallinity as compared to CTF-1 are obtained by lowering the reaction temperature to 300 °C and prolonging the reaction time to >150 hours. The low reaction temperature of the PTOs largely prevents incipient carbonization and thus results in a carbon-to-nitrogen weight ratio close to the theoretical value of 3.43. The oligomers were characterized by MALDI-TOF and quantitative solid-state NMR spectroscopy, revealing variations in size, connectivity and thus nitrile-to-triazine ratios depending on the initial precursor dilution. The most active PTO samples efficiently and stably reduce water to hydrogen with an average rate of 1076 (±278) μmol h−1 g−1 under simulated sunlight illumination, which is competitive with the best carbon nitride-based and purely organic photocatalysts. The photocatalytic activity of the PTOs is found to sensitively depend on the polymerization degree, thus suggesting a prominent role of the unreacted nitrile moieties in the photocatalytic process. Notably, PTOs even show moderate hydrogen production without the addition of any co-catalyst

    Verifying object-oriented programs with higher-order separation logic in Coq

    Get PDF
    We present a shallow Coq embedding of a higher-order separation logic with nested triples for an object-oriented programming language. Moreover, we develop novel specification and proof patterns for reasoning in higher-order separation logic with nested triples about programs that use interfaces and interface inheritance. In particular, we show how to use the higher-order features of the Coq formalisation to specify and reason modularly about programs that (1) depend on some unknown code satisfying a specification or that (2) return objects conforming to a certain specification. All of our results have been formally verified in the interactive theorem prover Coq

    Nested Hoare Triples and Frame Rule for Higher−order Store

    No full text
    Separation logic is a Hoare-style logic for reasoning about programs with heap-allocated mutable data structures. As a step toward extending separation logic to high-level languages with ML-style general (higher-order) storage, we investigate the compatibility of nested Hoare triples with several variations of higher-order frame rules. The interaction of nested triples and frame rules can be subtle, and the inclusion of certain frame rules is in fact unsound. A particular combination of rules can be shown consistent by means of a Kripke model where worlds live in a recursively defined ultrametric space. The resulting logic allows us to elegantly prove programs involving stored code. In particular, using recursively defined assertions, it leads to natural specifications and proofs of invariants required for dealing with recursion through the store.</p

    Pharmaceutical Care Education in Kuwait: Pharmacy Students Perspectives

    No full text
    Background: Pharmaceutical care is defined as the responsible provision of medication therapy to achieve definite outcomes that improve patients’ quality of life. Pharmacy education should equip students with the knowledge, skills, and attitudes they need to practise pharmaceutical care competently.Objective: To investigate pharmacy students’ attitudes towards pharmaceutical care, perceptions of their preparedness to perform pharmaceutical care competencies, opinions about the importance of the various pharmaceutical care activities, and the barriers to its implementation in Kuwait.Methods: A descriptive, cross-sectional survey of pharmacy students (n=126) was conducted at Faculty of Pharmacy, Kuwait University. Data were collected via a pre-tested self-administered questionnaire. Descriptive statistics including percentages, medians and means Likert scale rating (SD) were calculated and compared using SPSS, version 19. Statistical significance was accepted at a p value of 0.05 or lower.Results: The response rate was 99.2%. Pharmacy students expressed overall positive attitudes towards pharmaceutical care. They felt prepared to implement the various aspects of pharmaceutical care, with the least preparedness in the administrative/management aspects. Perceived pharmaceutical care competencies grew as students progressed through the curriculum. The students also appreciated the importance of the various pharmaceutical care competencies. They agreed/strongly agreed that the major barriers to the integration of pharmaceutical care into practice were lack of private counseling areas or inappropriate pharmacy layout (95.2%), lack of pharmacist time (83.3%), organizational obstacles (82.6%), and pharmacists’ physical separation from patient care areas (82.6%).Conclusion: Pharmacy students’ attitudes and perceived preparedness can serve as needs assessment tools to guide curricular change and improvement. Student pharmacists at Kuwait University understand and advocate implementation of pharmaceutical care while also recognizing the barriers to its widespread adoption. The education and training provided at Kuwait University Faculty of Pharmacy is designed to develop students to be the change agents who can advance pharmacist-provided direct patient care

    Verification of Unloadable Modules

    No full text
    load and unload modules. For example, some operating system kernels support dynamic loading and unloading of device drivers. This causes specific difficulties in the verification of such programs and modules; in particular, it must be verified that no functions or global variables from the module are used after the module is unloaded. We present the approach we used to add support for loading and unloading modules to our separation-logic-based program verifier VeriFast. Our approach to the specification and verification of function pointer calls, based on parameterizing function types by predicates, is sound in the presence of unloading, but at the same time does not complicate the verification of programs that perform no unloading, and does not require callers to distinguish between function pointers that point into unloadable modules and ones that do not. We offer a machine-checked formalization and soundness proof and we report on verifying a small kernel-like program using VeriFast. To the best of our knowledge, ours is the first approach for sound modular verification of C programs that load and unload modules.

    Verifying Generics and Delegates

    No full text
    Abstract. Recently, object-oriented languages, such as C ♯ , have been extended with language features prevalent in most functional languages: parametric polymorphism and higher-order functions. In the OO world these are called generics and delegates, respectively. These features allow for greater code reuse and reduce the possibilities for runtime errors. However, the combination of these features pushes the language beyond current object-oriented verification techniques. In this paper, we address this by extending a higher-order separation logic with new assertions for reasoning about delegates and variables. We faithfully capture the semantics of C ♯ delegates including their capture of the l-value of a variable, and that “stack ” variables can live beyond their “scope”. We demonstrate that our logic is sound and illustrate its use by specifying and verifying a series of interesting and challenging examples.
    corecore