Skip to content

p-org/P

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

* Adding the coyote version 1.1.5 as an internal package in P.

* Updated the unit tests and P compiler to .Net6

* Update macosci.yml

* Update release.yml (#514)

* Update release.yml

* Update ubuntuci.yml

* Update windowsci.yml

* Fixed the unit test runner

* Cleaned up the code and removed stack trace from the error trace reported

* Moving to a stage where we need to add a new commandline interface

* Intermediate commit whem migrating to the big change

* Updated the PJavaRuntime

* Revert "Updated the PJavaRuntime"

This reverts commit 6a8a23e.

* Fixed, now the regressions should pass.

* Fixed a missing reference issue

* Moved things around to remove unwanted files.

* Updated the compiler commandline options

* Updated the compiler commandline to work with the new interface.

* Major clean up the options of the P Checker

* Some code cleanup

* Much improved commandline

* Fixed some of the namespace issues and also made the test cases pass.

* Fixed bugs in the commandline parsing

* [CLI] Update commandline interface (#556)

* [CLI] Update commandline interface

Updates the new commandline interface to enable: a) overiding pproj file config when parser args are used alongside config file, b) graceful exit for help info, c) output all generated files in output directory (default is current directory)

Cleanup unnecessary files in Tutorial

* [PCompiler] Update generated file paths through file writer

* [CLI] Minor update: skip pproj option once already loaded

* [CLI] Updates commandline options (#559)

* [CLI] Remove --target/--generate and add --projname/--mode

Updates CLI options to remove --target and --generate options. Instead, --target is renamed to --projname and --mode is used to configure the compiler backend (default: bugfinding)

Adds support for searching for *.dll in current directory with p check command when path is not given

Adds fallback support for searching for adding local P files in the current directory with p compile command when no P file is given through *.pproj and --pfiles options.

* [CLI] Update error messages

* Fixed the hard coded path

* [2.0] Merge with master (#561)

* Adding the coyote version 1.1.5 as an internal package in P.

* Updated the unit tests and P compiler to .Net6

* Update macosci.yml

* Update release.yml (#514)

* Update release.yml

* Update ubuntuci.yml

* Update windowsci.yml

* Fixed the unit test runner

* Cleaned up the code and removed stack trace from the error trace reported

* Moving to a stage where we need to add a new commandline interface

* Intermediate commit whem migrating to the big change

* Updated the PJavaRuntime

* Revert "Updated the PJavaRuntime"

This reverts commit 6a8a23e.

* Fixed, now the regressions should pass.

* Fixed a missing reference issue

* Moved things around to remove unwanted files.

* Updated the compiler commandline options

* Updated the compiler commandline to work with the new interface.

* Major clean up the options of the P Checker

* Some code cleanup

* Much improved commandline

* Fixed some of the namespace issues and also made the test cases pass.

* Fixed bugs in the commandline parsing

* [CLI] Update commandline interface (#556)

* [CLI] Update commandline interface

Updates the new commandline interface to enable: a) overiding pproj file config when parser args are used alongside config file, b) graceful exit for help info, c) output all generated files in output directory (default is current directory)

Cleanup unnecessary files in Tutorial

* [PCompiler] Update generated file paths through file writer

* [CLI] Minor update: skip pproj option once already loaded

* [CLI] Updates commandline options (#559)

* [CLI] Remove --target/--generate and add --projname/--mode

Updates CLI options to remove --target and --generate options. Instead, --target is renamed to --projname and --mode is used to configure the compiler backend (default: bugfinding)

Adds support for searching for *.dll in current directory with p check command when path is not given

Adds fallback support for searching for adding local P files in the current directory with p compile command when no P file is given through *.pproj and --pfiles options.

* [CLI] Update error messages

* Fixed the hard coded path

* [Docs] Update P GitHub pages to the new version (#560)

* [CLI] Correct positional argument parsing

Corrects positional arguments parsing, now that positional arguments can be optional.

* [Docs] Update P installation page

* Undo hard-coded path added by mistake

* [Docs] Update using P page to 2.0

* [PCompiler] Corrects replaying traces

Adds minor corrections to enable correct replay of buggy traces generated by check command

* [Docs] Update getstarted docs

* [Docs] Remove Target field in .pproj

* [Docs] Update client server tutorial

* [PCompiler] Update how foreign files are imported

Track for foreign files in P project folders only and import them in compiler backend

* [Docs] Updates tutorial for 2PC

Also adds minor rewriting to client server doc and P logging

* [Docs] Update espresso example doc

Also corrects a typo in espresso example P model

* [Docs] Completes updating tutorial

* [Docs] Hide outdated PSym docs

* [Docs] Update tutorial for foreign functions/types

* [Docs] Minor update

---------

Co-authored-by: Ankush Desai <[email protected]>
Co-authored-by: Ankush Desai <[email protected]>

* [CI] Update PSym GitHub action to P 2.0

* [PSym] Minor update to PSym integration testing

* [PSym] Minor change

* Update state caching in the presence of dynamic machine creation

Adds tracking of set of current machines corresponding to current schedule for state caching (with and without stateful backtracking)

* [PSym] Correct static errors detection in integration tests

* [PCompiler] Resolve unused variable warning

* [PSym] Update CLI

Update PSym CLI by renaming options, adding additional options, etc.

* [PSym] Minor update to CLI

* [PSym] Minor correction to integration tests

* [PSym] Correct CLI args parser

* [PSym] Update PSym logger and defaults to better relate with P checker

* [PChecker] Adds first version of integrating PSym in P 2.0 CLI

* Minor update

* [PCompiler] Minor change to PSym IR test driver

* [PChecker] Updates mode names, output directory, and installation instructions

* [PSym] Bump version

---------

Co-authored-by: Ankush Desai <[email protected]>
Co-authored-by: Ankush Desai <[email protected]>
f4a9f86

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Bld
 
 
 
 
Ext
 
 
 
 
Src
 
 
Tst
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Formal Modeling and Analysis of Distributed (Event-Driven) Systems

NuGet GitHub license GitHub Action (CI on Windows) GitHub Action (CI on Ubuntu) GitHub Action (CI on MacOS)

Challenge: Distributed systems are notoriously hard to get right. Programming these systems is challenging because of the need to reason about correctness in the presence of myriad possible interleaving of messages and failures. Unsurprisingly, it is common for service teams to uncover correctness bugs after deployment. Formal methods can play an important role in addressing this challenge!

P Overview: P is a state machine based programming language for formally modeling and specifying complex distributed systems. P allows programmers to model their system design as a collection of communicating state machines. P supports several backend analysis engines (based on automated reasoning techniques like model checking and symbolic execution) to check that the distributed system modeled in P satisfy the desired correctness specifications.

The following talk provides an overview of P, its impact in Academia and Industry, and answers the main question that gets asked most of the times by service teams and developers: "why do formal modeling?": (P @ StrangeLoop) Formal Modeling and Analysis of Distributed Systems (Finding Critical Bugs Early!!)

Impact: P is currently being used extensively inside Amazon (AWS) for analysis of complex distributed systems. For example, Amazon S3 used P to formally reason about the core distributed protocols involved in its strong consistency launch. Teams across AWS are now using P for thinking and reasoning about their systems formally. P is also being used for programming safe robotics systems in Academia. P was first used to implement and validate the USB device driver stack that ships with Microsoft Windows 8 and Windows Phone.

Experience and lessons learned: In our experience of using P inside AWS, Academia, and Microsoft. We have observed that P has helped developers in three critical ways: (1) P as a thinking tool: Writing formal specifications in P forces developers to think about their system design rigorously, and in turn helped in bridging gaps in their understanding of the system. A large fraction of the bugs can be eliminated in the process of writing specifications itself! (2) P as a bug finder: Model checking helped find corner case bugs in system design that were missed by stress and integration testing. (3) P helped boost developer velocity: After the initial overhead of creating the formal models, future updates and feature additions could be rolled out faster as these non-trivial changes are rigorously validated before implementation.

Programming concurrent, distributed systems is fun but challenging, however, a pinch of programming language design with a dash of automated reasoning can go a long way in addressing the challenge and amplify the fun!.

Let the fun begin!

You can find most of the information about the P framework on: http://p-org.github.io/P/.

What is P?, Getting Started, Tutorials, Case Studies and related Research Publications. If you have any further questions, please feel free to create an issue, ask on discussions, or email us

P has always been a collaborative project between industry and academia (since 2013) 🥁. The P team welcomes contributions and suggestions from all of you!! 👊. See CONTRIBUTING for more information.