{"id":28346716,"url":"https://github.com/imdea-software/syntheos","last_synced_at":"2026-07-19T02:33:16.499Z","repository":{"id":288300552,"uuid":"950024300","full_name":"imdea-software/syntheos","owner":"imdea-software","description":"Syntheos is a tool for checking the realizability of LTL specifications with theories that supports referencing previous variable values.","archived":false,"fork":false,"pushed_at":"2025-09-24T22:44:49.000Z","size":107,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-10-22T07:59:01.239Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/imdea-software.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-17T14:09:45.000Z","updated_at":"2025-10-08T15:09:52.000Z","dependencies_parsed_at":"2025-04-17T01:16:30.972Z","dependency_job_id":"a1d962f9-78c3-4efe-852f-9871390cce35","html_url":"https://github.com/imdea-software/syntheos","commit_stats":null,"previous_names":["imdea-software/syntheos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/imdea-software/syntheos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fsyntheos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fsyntheos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fsyntheos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fsyntheos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imdea-software","download_url":"https://codeload.github.com/imdea-software/syntheos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fsyntheos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35638916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-19T02:00:06.923Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-05-27T14:10:44.342Z","updated_at":"2026-07-19T02:33:16.482Z","avatar_url":"https://github.com/imdea-software.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Syntheos\n\nSyntheos is a tool for checking the realizability of specifications expressed in Linear Temporal Logic with theories (LTLt). The atomic propositions in the specification are Z3 predicates, which can refer to the previous value of a quantitative variable `x` with `y(x)`.\n\n## Installation\n\nTo install Syntheos, clone this repository and install the required dependencies:\n\n```sh\n git clone https://github.com/imdea-software/syntheos.git\n cd syntheos\n python3 -m venv .venv\n source .venv/bin/activate\n python3 -m pip install -r requirements.txt\n```\n\nAdditionally, ensure that the [Strix](https://strix.model.in.tum.de/) tool is in the same folder as Syntheos, as it is required for execution.\n\n## Usage\n\nTo check the realizability of an LTL specification, activate the virtual environment, run the following command:\n\n```sh\npython3 syntheos.py --yaml \u003cyaml_file\u003e\n```\n\nRemember to activate the virtual environment with:\n\n```sh\n source .venv/bin/activate\n```\n\nwhen you start a new session.\n\n### YAML File Format\nThe YAML file should contain:\n- `property`: The LTLt specification, where the z3 expressions are enclosed in square brackets.\n- `variables`: A list of variables, each specifying its `name`, `type`, and `owner` (either `system` or `environment`).\n\n#### Example YAML File\n```yaml\nproperty: \"XXG([x\u003ey(y(x))])\"\nvariables:\n  - name: \"x\"\n    type: \"Int\"\n    owner: \"system\"\n```\n\n### Example Command\nGiven a YAML file `spec.yaml`:\n\n```sh\npython syntheos.py --yaml spec.yaml\n```\n\nWill check the realizability of the specificaiton in `spec.yaml`.\nIf the `--yaml` flag is not provided, the specification will be read from standard input in YAML format.\n\nYou can provide a filename to save the mealy machine in case the specification is realizable with the flag `--save-mealy` and a filename. The output file will also be a YAML.\n\n```sh\npython syntheos.py --save-mealy controller.yaml --yaml spec.yaml\n```\n\n## Dependencies\n- Python 3.13\n- Strix (must be placed in the same folder as Syntheos)\n\n# Running with Docker (using Podman)\nYou can build and run a Docker image of Syntheos using Podman:\n\n## Build the image\nBuild the image with tag `syntheos` using:\n```bash\npodman build --platform linux/amd64 -t syntheos .\n```\n\n## Run with input from stdin\nYou can run the image and provide the content of a YAML specification file via standard input:\n```bash\npodman run --platform linux/amd64 -i syntheos \u003c spec.yaml\n```\n\n# Running a shield from the controller\nYou can execute a controller that interprets the mealy machine that has been saved with `--save-mealy controller.yaml` with the program `shield.py` in this repository.\n\n```sh\npython shield.py --mealy controller.yaml\n```\nThis controller will read lines from stdin, where each line is a list of two elements.\n\nThe first element is a dictionary that maps each input variable to a concrete value. This represents the values provided by the environment at a specific time step.\n\nThe second element is a dictionary that maps output variables to proposed values determined by the system. This entry can contain only a subset of the system variables, indicating that the rest can be any value that the controller finds suitable.\n\nIf the proposed output values do not constitute a valid system response, the shield will provide a safe move to play instead.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fsyntheos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimdea-software%2Fsyntheos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fsyntheos/lists"}