{"id":21676976,"url":"https://github.com/uwplse/structtact","last_synced_at":"2025-04-12T04:55:27.828Z","repository":{"id":3747112,"uuid":"50766428","full_name":"uwplse/StructTact","owner":"uwplse","description":"Coq utility and tactic library.","archived":false,"fork":false,"pushed_at":"2023-12-09T16:22:26.000Z","size":282,"stargazers_count":23,"open_issues_count":10,"forks_count":8,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-12T04:55:20.683Z","etag":null,"topics":["coq","coq-library","tactics"],"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-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uwplse.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}},"created_at":"2016-01-31T09:08:03.000Z","updated_at":"2025-04-09T15:38:02.000Z","dependencies_parsed_at":"2023-01-13T12:44:02.795Z","dependency_job_id":"0d08368b-f37e-411f-8721-88dbb3e3bb42","html_url":"https://github.com/uwplse/StructTact","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2FStructTact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2FStructTact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2FStructTact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2FStructTact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uwplse","download_url":"https://codeload.github.com/uwplse/StructTact/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248519472,"owners_count":21117757,"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":["coq","coq-library","tactics"],"created_at":"2024-11-25T14:17:04.464Z","updated_at":"2025-04-12T04:55:27.805Z","avatar_url":"https://github.com/uwplse.png","language":"Coq","readme":"\u003c!---\nThis file was generated from `meta.yml`, please do not edit manually.\nFollow the instructions on https://github.com/coq-community/templates to regenerate.\n---\u003e\n# StructTact\n\n[![Docker CI][docker-action-shield]][docker-action-link]\n\n[docker-action-shield]: https://github.com/uwplse/StructTact/actions/workflows/docker-action.yml/badge.svg?branch=master\n[docker-action-link]: https://github.com/uwplse/StructTact/actions/workflows/docker-action.yml\n\n\n\n\nStructTact is a Coq library of structural tactics as well as lemmas about\nlists, finite types, and orders on strings that use the tactics.\nThe structural tactics enable a style of proof where hypothesis names\nare never mentioned. When automatically generated names change during\nproof development, structural tactics will still work.\n\n## Meta\n\n- Author(s):\n  - Ryan Doenges\n  - Karl Palmskog\n  - Keith Simmons (initial)\n  - James R. Wilcox (initial)\n  - Doug Woos (initial)\n- License: [BSD 2-Clause \"Simplified\" license](LICENSE)\n- Compatible Coq versions: 8.10 or later\n- Additional dependencies: none\n- Coq namespace: `StructTact`\n- Related publication(s):\n  - [Verdi: A Framework for Implementing and Verifying Distributed Systems](https://homes.cs.washington.edu/~mernst/pubs/verify-distsystem-pldi2015.pdf) doi:[10.1145/2737924.2737958](https://doi.org/10.1145/2737924.2737958)\n\n## Building and installation instructions\n\nThe easiest way to install StructTact is via\n[OPAM](https://opam.ocaml.org/doc/Install.html):\n```shell\nopam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev\nopam install coq-struct-tact\n```\n\nTo instead build and install manually, do:\n``` shell\ngit clone https://github.com/uwplse/StructTact.git\ncd StructTact\nmake   # or make -j \u003cnumber-of-cores-on-your-machine\u003e\nmake install\n```\n\n## Documentation\n\nStructTact consists mainly of files originally developed as part of\nthe [Verdi framework][verdi-link], which have here been adapted for easier\nreuse in other projects.\n\n### Structural tactics\n\nThe structural tactics are found in the file `StructTactics.v`,\nand are named by analogy to the structural properties of\nsimple type systems: weakening, exchange, and contraction.\nIn the context of proof assistants, these are analogous to the ability to add\nnew hypotheses in the context, reorder existing hypotheses, and delete\nunused hypotheses. Theoretically, Coq inherits these properties from the\nunderlying type system, but in practice, automatically generated hypothesis\nnames cause proof scripts to break when the context is adjusted in seemingly\nirrelevant ways.\n\nStructural tactics restore these properties at the level of Ltac by enabling a\nstyle of proof where hypothesis names are never mentioned. When automatically\ngenerated names change during proof development, structural tactics still work.\n\nFor tactic documentation, see the inline comments in `StructTactics.v`.\n\n### Utility definitions and lemmas\n\nThe file `Util.v` collects definitions, lemmas, and tactics about lists, booleans, propositions, and\nfunctions that were useful in other projects. Notably, the following files are exported:\n\n- `BoolUtil.v`: general boolean lemmas, tactics, and definitions\n- `PropUtil.v`: general lemmas about propositions and sum types\n- `Update.v`: function `update` that modifies a function to return a new value for a specific argument\n- `Update2.v`: function `update2` that modifies a function to return a new value for specific pair of arguments\n- `ListTactics.v`: tactics operating on contexts with `map`, `NoDup`, and `In`\n- `ListUtil.v`: general list lemmas, involving, e.g., `NoDup`, `map`, `filter`, and `firstn`\n- `Assoc.v`: association lists with get, set, and delete functions\n- `Before.v`: relation `before` capturing when an element appears before another in a list\n- `Dedup.v`: function `dedup` remove duplicates from a list using decidable equality\n- `FilterMap.v`: function `filterMap` that maps a partial function on a list and ignores failures\n- `Nth.v`: relation `Nth` capturing the element at some position in a list\n- `Prefix.v`: relation `Prefix` capturing when one list is a prefix of another\n- `RemoveAll.v`: function `remove_all` which removes all elements of one list from another; set subtraction\n- `Subseq.v`: relation `subseq` capturing when one list is a subsequence of another\n\n### Finite types\n\nThe file `Fin.v` contains definitions and lemmas related to `fin n`, a type with `n` elements,\nisomorphic to `Fin.t n` from the standard library, but with a slightly different\ndefinition that is more convenient to work with.\n\nThe following constructions are defined on `fin`:\n\n- `fin_eq_dec`: decidable equality\n- `all_fin n`: list of all elements of `fin n`\n- `fin_to_nat`: convert a `fin n` to a `nat`\n- `fin_lt`: an ordering on `fin n`, implemented using `fin_to_nat`\n- `fin_OT_compat`: legacy `OrderedType` module for `fin n` (for use with `FMap`)\n- `fin_OT`: modern `OrderedType` module for `fin n` (for use with `MSet`)\n- `fin_of_nat`: convert a `nat` to a `fin n`, when possible\n\n### String orders\n\nThe file `StringOrders.v` contains some order relations on strings, in particular a total lexicographic order.\n\nThe following modules are defined:\n\n- `string_lex_as_OT_compat`: legacy `OrderedType` module for `string` (for use with `FMap`)\n- `string_lex_as_OT`: modern `OrderedType` module for `string` (for use with `MSet`)\n\n[verdi-link]: https://github.com/uwplse/verdi\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuwplse%2Fstructtact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuwplse%2Fstructtact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuwplse%2Fstructtact/lists"}