Giter Site home page Giter Site logo

dafny-fatnode's Introduction

Challenges of verifying persistent data structures

This is the repository for my semester project at EPFL Spring 2023. The project proposal, the final report, and the presentation slides can all be found at the top level. The file FatNode.dfy contains the verified (but partial) implementation of the fat node method for binary search trees in Dafny. Specifically, only a single if-else branch of Insert is verified, and we have not got to implement and verify Remove in Dafny by the end of this project.

Before reading the report or the slides, it is strongly encouraged to first play with the visualization of the fat node method. The source code contains a complete implementation of the fat node method for partially binary search trees in TypeScript.

The fat node method is introduced by Driscoll et al. in this paper. A better approach, named node copying, is illustrated in the same paper and achieves constant amortized time and space complexity. Previously, I have written a seminar report that applies the same techniques on AVL trees. Another approach to make data structures partially persistent, called path copying, has been implemented and verified as a course project for AVL trees.

After reading the report, you may be intrigued to inspect all the interesting snapshots we have collected. An easier way to navigate through these examples is to read this blog post, but you can also directly check out different branches and search for COMMENT in the code to inspect the relevant part. Commits in the main branch are also interesting snapshots, although they are less representative and harder to understand.

Comments and suggestions are welcomed.

NOTE: We refactored our code in the middle of the project from Dafny 3.13.1 to 4.0.0. Since the syntax of these two versions are not compatible, hopefully it would be easy to figure out which version to use when navigating through the snapshots.

dafny-fatnode's People

Contributors

kumom avatar

Stargazers

 avatar

Watchers

 avatar Clément Pit-Claudel avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.