{"id":19433904,"url":"https://github.com/tangruize/jupiter-experiments","last_synced_at":"2025-02-25T06:22:00.396Z","repository":{"id":112447194,"uuid":"168717572","full_name":"tangruize/jupiter-experiments","owner":"tangruize","description":null,"archived":false,"fork":false,"pushed_at":"2019-02-07T13:33:10.000Z","size":4435,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-07T20:42:06.778Z","etag":null,"topics":["jupiter","model-checking","python3","tlaplus","tlc2","tlc2-wrapper"],"latest_commit_sha":null,"homepage":null,"language":"TLA","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tangruize.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-01T15:25:42.000Z","updated_at":"2022-07-12T02:18:20.000Z","dependencies_parsed_at":"2023-05-15T01:00:29.297Z","dependency_job_id":null,"html_url":"https://github.com/tangruize/jupiter-experiments","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangruize%2Fjupiter-experiments","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangruize%2Fjupiter-experiments/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangruize%2Fjupiter-experiments/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangruize%2Fjupiter-experiments/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tangruize","download_url":"https://codeload.github.com/tangruize/jupiter-experiments/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240614069,"owners_count":19829273,"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":["jupiter","model-checking","python3","tlaplus","tlc2","tlc2-wrapper"],"created_at":"2024-11-10T14:41:37.408Z","updated_at":"2025-02-25T06:22:00.373Z","avatar_url":"https://github.com/tangruize.png","language":"TLA","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `jupiter-experiments`\n\n## Model Checking Experiments\nWe write a script to automatically conduct comprehensive model checking experiments\nwith the [`jupiter-refinement-project`](https://github.com/hengxin/jupiter-refinement-project).\n\n### Requirements\n- JRE 8 (*Not* tested on any lower or higher versions)\n\n### Experiments\nNow, the script checks two kinds of properties:\n1. the refinement relation among a family of Jupiter protocols.\nSpecifically, it checks that \n- `AJupiter` is a refinement of `XJupiter` (expressed in `AJupiterImplXJupiter`),\n- `XJupiter` is a refinement of `CJupiter` (expressed in `XJupierImplCJupiter`), and\n- `CJupiter` is a refinement of `AbsJupiter` (expressed in `CJupiterImplAbsJupiter`).\n2. the correctness of these Jupiter protocols with respect to the weak list specification (`WLSpec`).\nDue to the refinement relation above, it only needs to check that \n- `AbsJupiter` (more precisely, `AbsJupiterH`) satisfies `WLSpec`.\n\n### Parameters\nFor each of these four properties to check,\nwe vary the number of client replicas (#Clients) from 1 to 5\nand the number of chars (#Chars) allowed to insert from 1 to 5.\n\nFor the settings of (#Clients, #Chars) = (3, 3), (2, 4), and (2, 4),\nwe exit TLC when the number of distinct states TLC examines reaches a given threshold.\nFor `AbsJupiter`, the threshold is 100, 000, 000,\nwhile for the others, it is 80, 000, 000.\n\n## How to run?\n\nEach of the following command conducts the model checking experiments described above in batch,\nand it is allowed to set the number of worker threads.\n\n### Commands\n\n#### On Linux\n```bash\n# Usage Note: In the following three commands, \"make\" is identical to \"make run\".\nmake\t\t# using 10 workers by default (used in our setting)\nmake WORKERS=2  # using 2 workers\nmake WORKERS=   # setting the number of workers as that of physical cores in your machine\n```\n\n#### On Windows\n```\ncd protocols\npython ..\\jupiter-cav2019.py ..\\mc_result 10\n```\n\n### Output: \nThe model checking results are stored in a subdirectory (named with the timestamps it is generated)\nin the `mc_result` directory, consisting of \n\n- A markdown table containing all raw (statistic) data.\n- Four markdown tables, one for each property to check.\n- Four LaTeX tables which can be used in paper, one for each property to check.\n\nAn incomplete sample model checking result (only for (1,1) and (1,2)) is given in `20190207-162510-sample`.\n\nA complete sample model checking result (only the LaTeX tables) is given in `mc_result/cav2019`.\n\n### To stop:\n- `Ctrl + C`: Stop the individual experiment currently in running\n- `Ctrl + \\`: Stop the whole batch of experiments\n\n\u003e Warning: When it is interrupted by `Ctrl + C` or `Ctrl + \\`, \nsome tables may be incomplete or even be not generated.\n\n## How is this implemented?\n\n### `tlcwrapper.py`\nThe `tlcwrapper.py` script encapsulates the usage of TLC commands.\n\nIt accepts two parameters:\n- The configuration file. The rules are specified in `config.ini`.\n- The optional TLC log file (`MC_out.txt` by default).\n\n### `jupiter-cav2019.py`\nRun the experiments described above in batch.\n\nIt uses `tlcwrapper.py` to start TLC.\n\n### Temp files\nTLC generates a subdirectory in the `protocols` directory for each experiment,\nwhich is used to store the `tla` files and `cfg` files required for TLC.\n\nYou can use `make clean` to delete them.\n\nAny `MC` files may be helpful for you.\n\n| filename                     | description                                    |\n|------------------------------|------------------------------------------------|\n| MC.cfg/MC.tla                | Generated by `TLCWrapper.py`. Required by TLC. |\n| MC_out.txt                   | TLC log.                              \t        |\n| MC_user.txt                  | User output (using `Print` or `PrintT`).       |\n| MC_states.dump/MC_states.dot | All states dump (if enabled).                  |\n| MC_coverage.txt              | Coverage information (if enabled).             |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangruize%2Fjupiter-experiments","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftangruize%2Fjupiter-experiments","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangruize%2Fjupiter-experiments/lists"}