๐Ÿง€ Formaggo is a simple model checker inspired by TLA+, The checker and the models are written in Go

๐Ÿง€ Formaggo. A cheesy exhaustive state checker in Go.

Formaggo is a simple model checker inspired by TLA+. The checker and the models are written in Go, compiled and run as a single binary.

A model is specified as a set of Transitions. A transition is a function that takes a State on input and that returns possible states on output. The checker then builds a graph of all the possible states and reports violations of Invariants and Properties.

The State is an arbitrary primitive or structure (an interface{}).

Hashing the state

The checker works based on hash, therefore the State must be hashable. Important! Private fields (the ones starting with the lower case) are IGNORED when calculating hash.

State hash is calculated using mitchellh/hashstructure. Tags from there apply, in particular:

* "set" - The field will be treated as a set, where ordering doesn't
          affect the hash code. This only works for slices.

E.g.:

struct {
    values []string `hash:"set"`
}

FAQ

Q: RATS! What's that?

It is a bug. The code should never reach RATS path.

Similar Resources

An easy-to-use Map Reduce Go parallel-computing framework inspired by 2021 6.824 lab1. It supports multiple workers on a single machine right now.

MapReduce This is an easy-to-use Map Reduce Go framework inspired by 2021 6.824 lab1. Feature Multiple workers on single machine right now. Easy to pa

Dec 5, 2022

Directed Acyclic Graph (DAG) inspired tasks queuing API.

flow Directed Acyclic Graph (DAG) inspired tasks queuing API. The examples directory contains samples. Status This project's API will not have any met

Jul 29, 2022

A Go library inspired by chalk.js

colors A Go library inspired by chalk.js Print in these pretty colors Black DarkRed DarkGreen DarkYellow DarkBlue DarkMagenta DarkCyan LightGray DarkG

Jan 28, 2022

DuckChat - Stallman Inspired

DuckChat - Stallman Inspired

DuckChat - Stallman Inspired Demo of current release. This application runs comp

Feb 13, 2022

Simple and expressive toolbox written in Go

ugo Simple and expressive toolbox written with love and care in Go. Deeply inspired by underscore.js and has the same syntax and behaviour Fully cover

Sep 27, 2022

Simple 'UserKit' for Malware written in Go. Startup, Hidden Files, Critical Process and Registry Watcher

GoUserKit Simple UserKit for Malware written in Go Features Makes Process Critical (NtSetInformationProcess) Hides Files Simple Add to Startup (HKCU R

Jan 3, 2023

A simple and sussy project is an implementation of SOMMIP Lab 1 written in Golang

A simple and sussy project is an implementation of SOMMIP Lab 1 written in Golang

SOMMIP Lab 1 Isac Arthur Table of Contents About The Project Getting Started Prerequisites Installation Supported commands About The Project This very

Nov 10, 2021

A simple typewriter written in go for KOBO e-readers

A simple typewriter written in go for KOBO e-readers

Kobowriter This small project aims to let you use your old KOBO e-reader (mine is a GLO HD) as a simple, distraction free typewriter. For years I thou

Dec 25, 2022

Person is a simple CRUD application written in go which exposes API endpoint to create the person.

Person Person is a simple CRUD application written in go which exposes API endpoint to create the person. Installation Install docker in your local sy

Oct 18, 2021
Modeling-epidemics - Models the spread of epidemics using SEIR

Modeling Epidemics Using The SEIR Model PROBELM AND MOTIVATION Epidemics are tri

Dec 31, 2021
Example of using advanced gRPC error model

grpcerrors Example of using advanced gRPC error model

Nov 19, 2021
Model Generator for Firestore

volcago Automatically generate code used by Cloud Firestore. ๆ—ฅๆœฌ่ชžใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ Installation Recommend that you drop the binary from the release and use it. Al

Dec 6, 2022
C8y-swmigration - Project to migrate c8y sw repository packages to the model introduced with c8y v10.7
C8y-swmigration - Project to migrate c8y sw repository packages to the model introduced with c8y v10.7

About Tool to migrate the software repository entries prior to Cumulocity v10.7 to the new Software Repository package model including Software Versio

Apr 21, 2022
Rfpm - Random Fair Preemption Model For Golang

rfpm RFPM (Random Fair Preemption Model) is absolutely fair to all clients who r

Jan 7, 2022
A Simple HTTP health checker for golang

patsch Permanently Assert Target Succeeds Check Health use cases used by kubernetes cluster admins to quickly identify faulty ingresses used by kubern

Feb 22, 2022
Vocabular checker JetBrains Academy home work Read file with bad words

Vocabulary Checker JetBrains Academy home work Read file with bad words and replace them on * in the next entered text until exitVocabulary Checker JetBrains Academy home work Read file with bad words and replace them on * in the next entered text until exit

Jan 14, 2022
An online Zig compiler inspired by Go and Rust

Zig Playground This is a rudimentary online compiler for the Zig programming language. It is inspired by the Go playground. Setup The main server is a

Jan 3, 2023
A stack oriented esoteric programming language inspired by poetry and forth

paperStack A stack oriented esoteric programming language inspired by poetry and forth What is paperStack A stack oriented language An esoteric progra

Nov 14, 2021
README snippets for Visual Code inspired by readme.so

vscode-readme This was inspired by @katherinepeterson who made the wonderful readme.so! Huge thanks. Configuration Make sure you have quickSuggestions

Feb 7, 2022