{"id":22202899,"url":"https://github.com/logsem/iris-tini","last_synced_at":"2025-07-31T14:39:12.973Z","repository":{"id":74946051,"uuid":"279854614","full_name":"logsem/iris-tini","owner":"logsem","description":"Logical relations for termination-insensitive noninterference in Iris","archived":false,"fork":false,"pushed_at":"2021-05-04T14:03:50.000Z","size":536,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-25T01:47:31.433Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Coq","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logsem.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-15T11:50:51.000Z","updated_at":"2022-06-26T02:56:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"2de41fe7-0b39-47f2-8596-7ff13d7732b7","html_url":"https://github.com/logsem/iris-tini","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/logsem/iris-tini","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Firis-tini","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Firis-tini/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Firis-tini/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Firis-tini/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logsem","download_url":"https://codeload.github.com/logsem/iris-tini/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Firis-tini/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265133988,"owners_count":23716471,"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":[],"created_at":"2024-12-02T16:38:49.056Z","updated_at":"2025-07-13T11:37:00.921Z","avatar_url":"https://github.com/logsem.png","language":"Coq","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Logical Relations for Termination-Insensitive Noninterference\n![CI](https://github.com/logsem/iris-tini/workflows/CI/badge.svg)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4068072.svg)](https://doi.org/10.5281/zenodo.4068072)\n\nA mechanized logical relations model for an expressive information-flow control\ntype system with recursive types, existential types, label polymorphism, and\nimpredicative type polymorphism for a higher-order programming language with\nhigher-order state. The semantic model of the type system can be used to show\nthat well-typed programs satisfy termination-insensitive noninterference but\nalso to show that composing syntactically well-typed and syntactically\nill-typed---but semantically sound---components is secure.\n\nThe model is defined using the [Iris](https://iris-project.org) program logic\nframework. To capture termination-insensitivity, we make us of our [theory of\nModal Weakest Precondition](https://github.com/logsem/modal-weakestpre/). We\nformalize all of our theory and examples on top of the Iris program logic\nframework in the Coq proof assistant.\n\nThis development accompanies the paper [Mechanized Logical Relations for\nTermination-Insensitive\nNoninterference](https://cs.au.dk/~gregersen/papers/2021-tiniris.pdf) published\nat POPL 2021.\n\n## Building the theory\n\nThe project can be built locally or by using the provided\n[Dockerfile](Dockerfile), see the [Using Docker](/#using-docker)\nsection for details on the latter. The development uses\n[modal-weakestpre](https://github.com/logsem/modal-weakestpre/) as a git\nsubmodule; remember to run\n\n    git submodule update --init --recursive\n    \nafter cloning the repository to initialize it. Alternatively, you can clone the\nrepository using the `--recurse-submodules` flag.\n\n### Prerequisites \n\nThe project is known to compile with:\n\n- Coq 8.13.0\n- [Iris](https://gitlab.mpi-sws.org/iris/iris/) 3.4.0\n- [std++](https://gitlab.mpi-sws.org/iris/stdpp) 1.5.0\n- [Autosubst 1](https://github.com/uds-psl/autosubst)\n\nThe dependencies can be obtained using opam\n\n1. Install [opam](https://opam.ocaml.org/doc/Install.html) \n2. To obtain the dependencies, you have to add the following repositories to the\n   registry by invoking\n\n        opam repo add coq-released https://coq.inria.fr/opam/released\n        opam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git\n        opam update\n\n3. Run `make build-dep` to install the right versions of the dependencies.\n\n### Building\n\nRun `make -jN` to build the full development, where `N` is the number of CPU\ncores on your machine.\n\n### Using Docker\n\nThe development can be built using Docker.\n\n1. Install [Docker](https://docs.docker.com/get-docker/)\n2. Run `make docker-build` to build the Docker image [Dockerfile](Dockerfile) that\n   compiles the development.\n3. Optionally, you can execute `docker run -i -t iris-tini` to get an\n   interactive shell. \n\n## Documentation\n\nDocumentation can be generated using\n[coqdoc](https://coq.inria.fr/refman/using/tools/coqdoc.html) by running `make\nhtml`. [doc.html](doc.html) provides an entry and overview of the generated\ndocumentation.\n\n## Source organization\n\n### Language and semantic model\n\n- [theories/lambda_sec/lattice.v](theories/lambda_sec/lattice.v): theory of join\n  semilattices, including the induced lattice ordering\n- [theories/lambda_sec/lang.v](theories/lambda_sec/lang.v): the language and\n  operational semantics\n- [theories/lambda_sec/types.v](theories/lambda_sec/types.v): syntactic types,\n  substitution principles, and syntactic flows-to relation\n- [theories/lambda_sec/notation.v](theories/lambda_sec/notation.v): notation for\n  writing programs and types\n- [theories/lambda_sec/typing.v](theories/lambda_sec/typing.v): subtyping and\n  typing relation\n- [theories/lambda_sec/rules_unary.v](theories/lambda_sec/rules_unary.v): unary\n  language lemmas\n- [theories/lambda_sec/logrel_unary.v](theories/lambda_sec/logrel_unary.v):\n  unary logical relation\n- [theories/lambda_sec/fundamental_unary.v](theories/lambda_sec/logrel_unary.v):\n  unary fundamental theorem of logical relations\n- [theories/lambda_sec/rules_binary.v](theories/lambda_sec/rules_binary.v):\n  binary language lemmas\n- [theories/lambda_sec/logrel_binary.v](theories/lambda_sec/logrel_binary.v):\n  binary logical relation\n- [theories/lambda_sec/fundamental_binary.v](theories/lambda_sec/logrel_binary.v):\n  binary fundamental theorem of logical relations\n- [theories/lambda_sec/noninterference.v](theories/lambda_sec/noninterference.v):\n  noninterference statement and proof, both for a generic lattice and a\n  two-point lattice\n  \n### Modal Weakest Precondition Theory\n\nBelow we highlight the parts of the modal weakest precondition theory that is\nrelevant for this development.\n\n- [modal-weakestpre/theories/mwp.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp.v):\n  definition of the generic modal weakest precondition\n- [modal-weakestpre/theories/mwp_adequacy.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_adequacy.v):\n  adequacy theorem of the generic modal weakest precondition\n- [modal-weakestpre/theories/mwp_triple.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_triple.v):\n  a Hoare-triple definition for modal weakest precondition\n- [modal-weakestpre/theories/mwp_modalities/mwp_step_fupd.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_modalities/mwp_step_fupd.v):\n  step-taking update modality MWP instance used for the unary relation\n- [modal-weakestpre/theories/mwp_modalities/mwp_fupd.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_modalities/mwp_fupd.v):\n  update modality MWP instance\n- [modal-weakestpre/theories/mwp_modalities/ni_logrel/mwp_right.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_modalities/ni_logrel/mwp_right.v):\n  inner MWP instance for the binary relation\n- [modal-weakestpre/theories/mwp_modalities/ni_logrel/mwp_left.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_modalities/ni_logrel/mwp_left.v):\n  binary MWP instance for the binary relation\n- [modal-weakestpre/theories/mwp_modalities/ni_logrel/ni_logrel_lemmas.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_modalities/ni_logrel/ni_logrel_lemmas.v):\n  lemmas for the interaction between the step-taking update modality instance\n  (unary) and the binary MWP instance\n- [modal-weakestpre/theories/mwp_modalities/ni_logrel/mwp_logrel_fupd.v](https://github.com/logsem/modal-weakestpre/tree/main/theories/mwp_modalities/ni_logrel/mwp_logrel_fupd.v):\n  binary MWP instance used for the\n  [theories/examples/refs.v](theories/examples/refs.v) and\n  [theories/examples/refs_implicit.v](theories/examples/refs_implicit.v) example\n  that allows invariants to be kept open for the full execution\n  \n### Examples \nThe [theories/examples](theories/examples) folder includes multiple case\nstudies, among others, about [value\ndependency](theories/examples/value_dependent.v), [the awkward\nexample](theories/examples/awkward.v), and\n[parametricity](theories/examples/parametricity.v).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogsem%2Firis-tini","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogsem%2Firis-tini","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogsem%2Firis-tini/lists"}