{"id":17923750,"url":"https://github.com/deryeger/minicheck","last_synced_at":"2025-04-03T09:21:45.660Z","repository":{"id":217960960,"uuid":"636249172","full_name":"DerYeger/MiniCheck","owner":"DerYeger","description":"MiniCheck is a CLI for CTL and bounded LTL model checking on transition systems.","archived":false,"fork":false,"pushed_at":"2023-06-26T08:26:35.000Z","size":544,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-08T22:44:42.914Z","etag":null,"topics":["cli","ctl-formulas","haskell","haskell-application","ltl-formulas","model-checking","transition-systems","tu-wien"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DerYeger.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-05-04T12:35:12.000Z","updated_at":"2024-01-18T21:07:39.000Z","dependencies_parsed_at":"2024-01-18T23:45:40.543Z","dependency_job_id":null,"html_url":"https://github.com/DerYeger/MiniCheck","commit_stats":null,"previous_names":["deryeger/minicheck"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DerYeger%2FMiniCheck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DerYeger%2FMiniCheck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DerYeger%2FMiniCheck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DerYeger%2FMiniCheck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DerYeger","download_url":"https://codeload.github.com/DerYeger/MiniCheck/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246970329,"owners_count":20862535,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","ctl-formulas","haskell","haskell-application","ltl-formulas","model-checking","transition-systems","tu-wien"],"created_at":"2024-10-28T20:45:21.976Z","updated_at":"2025-04-03T09:21:45.633Z","avatar_url":"https://github.com/DerYeger.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MiniCheck\n\nMiniCheck is a CLI for CTL and bounded LTL model checking on transition systems.\n\n## Syntax\n\n\u003e All labels, i.e., atomic propositions, as well as state names can only consist of letters without numbers and whitespace.\n\u003e This does not limit they're expressiveness, as a simple transformation of label names does not affect their boolean values.\n\u003e E.g., `nsoda === 0` is equivalent to `numberOfSodaIsZero`, as both propositions only represent a boolean value.\n\n\u003e All formulas require brackets as described in the sections below.\n\u003e This approach was chosen to avoid ambiguity regarding operator precedence.\n\n### Transition Systems\n\nThe syntax of transition systems is displayed in the example file [examples/vending-machine.txt](./examples/vending-machine.txt).\n\nThe arrow indicates initial states, while dashes indicate regular states.\nEach state is automatically labelled by itself, i.e., its name.\nFurther labels, i.e., atomic propositions, can be specified by appending them to the state name, separated by a colon (see [examples/labels.txt](./examples/labels.txt)).\n\n#### Validations\n\nA transition system must have at least one initial state.\nThe transitions may only specify defined states.\nAll states must have an outgoing transition.\n\n### CTL Formulas\n\nState formulas:\n\n- `true` == `true`\n- `a` == `a`\n- `¬Φ` == `!(Φ)`\n- `Φ_1 ∧ Φ_2` == `(Φ_1 \u0026\u0026 Φ_2)`\n- `Φ_1 ∨ Φ_2` == `(Φ_1 || Φ_2)`\n- `Φ_1 → Φ_2` == `(Φ_1 -\u003e Φ_2)`\n- `Φ_1 ↔ Φ_2` == `(Φ_1 \u003c-\u003e Φ_2)`\n- `Φ_1 ⊕ Φ_2` == `(Φ_1 xor Φ_2)`\n- `∃φ` == `E φ`\n- `∀φ` == `A φ`\n\nPath formulas:\n\n- `Φ_1 Until Φ_2` == `(Φ_1 U Φ_2)`\n- `Next Φ` == `(X Φ)`\n- `Eventually Φ` == `(F Φ)`\n- `Always Φ` == `(G Φ)`\n\n#### Validations\n\nAll atomic propositions used in a formula must be defined in the transition system.\n\n### LTL Formulas\n\n- `true` == `true`\n- `a` == `a`\n- `¬Φ` == `!(Φ)`\n- `Φ_1 ∧ Φ_2` == `(Φ_1 \u0026\u0026 Φ_2)`\n- `Φ_1 ∨ Φ_2` == `(Φ_1 || Φ_2)`\n- `Φ_1 → Φ_2` == `(Φ_1 -\u003e Φ_2)`\n- `Φ_1 ↔ Φ_2` == `(Φ_1 \u003c-\u003e Φ_2)`\n- `Φ_1 ⊕ Φ_2` == `(Φ_1 xor Φ_2)`\n- `Φ_1 Until Φ_2` == `(Φ_1 U Φ_2)`\n- `Next Φ` == `(X Φ)`\n- `Eventually Φ` == `(F Φ)`\n- `Always Φ` == `(G Φ)`\n\n#### Validations\n\nAll atomic propositions used in a formula must be defined in the transition system.\n\n## Development\n\nRun `cabal update` to install dependencies and `cabal run MiniCheck --` to start the application.\n\nReference the usage section on CLI arguments.\nNote that they must follow the `--` separator.\n\n### Requirements\n\nThe following tools must be installed and activated, preferably via GHCup (v0.1.19.2).\n\n- cabal v3.10.1.0\n- GHC v9.2.5\n- HLS 1.9.1.0\n\n### Structure\n\nThe project is dvided into the following directories:\n\n- `app`: The CLI application.\n- `lib`: The business logic for parsing, validating, and evaluating CTL/LTL formulas and transition systems.\n- `test`: Unit tests for the business logic.\n\n### Tests\n\nThe test suite can be run using `cabal test` or `cabal test --enable-coverage`.\nIt covers the parser and semantics for CTL and LTL formulas as well as transition systems.\n\n## Installation\n\nThe same requirements as those described in the development section apply.\n\nRun `cabal install --overwrite-policy=always` to install the CLI application.\n\nThe [run-examples.sh](./run-examples.sh) script will install the CLI locally and run a few test commands to verify the installation.\n\n## Usage\n\nThe CLI application can be invoked with the `MiniCheck` command.\nPass `--help` for help text.\n\nThree modes are available:\n\n- `minicheck validate TS_FILE`: Parse and validate the transition system found at `TS_FILE`.\n- `minicheck ctl TS_FILE CTL_FORMULA`: Evaluate the CTL formula in the transition system found at `TS_FILE`.\n- `minicheck ltl TS_FILE LTL_FORMULA BOUND`: Evaluate the LTL formula in the transition system found at `TS_FILE` with `BOUND` as the maximum path length.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyeger%2Fminicheck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderyeger%2Fminicheck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyeger%2Fminicheck/lists"}