{"id":16312500,"url":"https://github.com/kiranandcode/ceramist-artefact","last_synced_at":"2026-01-23T18:31:39.108Z","repository":{"id":112325675,"uuid":"254650902","full_name":"kiranandcode/ceramist-artefact","owner":"kiranandcode","description":"Artefact accompanying Ceramist paper.","archived":false,"fork":false,"pushed_at":"2020-04-11T12:53:31.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-22T12:18:45.591Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","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/kiranandcode.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":"2020-04-10T14:11:25.000Z","updated_at":"2020-04-11T12:53:34.000Z","dependencies_parsed_at":"2023-06-26T02:03:16.536Z","dependency_job_id":null,"html_url":"https://github.com/kiranandcode/ceramist-artefact","commit_stats":null,"previous_names":["kiranandcode/ceramist-artefact"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kiranandcode/ceramist-artefact","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Fceramist-artefact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Fceramist-artefact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Fceramist-artefact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Fceramist-artefact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiranandcode","download_url":"https://codeload.github.com/kiranandcode/ceramist-artefact/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Fceramist-artefact/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28697428,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-10-10T21:48:15.739Z","updated_at":"2026-01-23T18:31:39.078Z","avatar_url":"https://github.com/kiranandcode.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ceramist Artefact\n\nThis is the artefact accompanying the CAV 2020 paper entitled\n\"Ceramist: Certifying Certainty and Uncertainty in Approximate Membership Query Structures\".\n\nThe artefact contains a scripts that will download and compile the\nCeramist proof scripts in a docker container.\n\n## Prerequisites\n\nIn order to build the image, you must have the\n[Docker](https://www.docker.com/) platform (\u003e= Docker version 19.03.7)\ninstalled and the docker daemon running.\n\nNote: If running on Windows or Mac OS ensure that you have at least 8GB\nof RAM allocated to the docker process (see\n[here](https://docs.docker.com/docker-for-mac/#advanced) for Mac OS and\n[here](https://docs.docker.com/docker-for-windows/#advanced) for Windows).\n\nThe source of this artefact script can be obtained from GitHub:\n```\ngit clone https://github.com/Gopiandcode/ceramist-artefact.git\n```\n\n## Building the artefact\nNote: The artefact is expected to take around 1 hour to compile from\nsources.\n\nOnce you have the Docker daemon running, navigate to the root of this repository and run:\n```\ndocker build --memory=8g -t ceramist:1.0.1 .\n```\n\nNote: If the build fails with a `killed` message, this means that your\ndocker process ran out of memory - please ensure that you have allowed\nit at least 8GB of ram (see [here](https://docs.docker.com/docker-for-mac/#advanced) for\nMac OS and [here](https://docs.docker.com/docker-for-windows/#advanced) for\nWindows).\n\n\nThis will download all the project's dependencies and will compile the\nproof scripts - this will take a while (around 1 hour).\n\nWhen the build completes, you should see the following output:\n```\nCOQC Structures/CountingBloomFilter/CountingBloomFilter_Probability.v\nCOQC Structures/QuotientFilter/QuotientFilter_Definitions.v\nCOQC Structures/QuotientFilter/QuotientFilter_Probability.v\nCOQC Structures/BlockedAMQ/BlockedAMQ.v\nmake[1]: Leaving directory '/ceramist'\n```\n\nAt this point all the proofs in the artefact have been compiled and the docker image is ready.\n\nTo browse the files within the image, first start a docker container from the image:\n```\ndocker run --name ceramist --rm -it ceramist:1.01\n```\nYou should now be dropped into a shell with the working directory set to a folder containing the ceramist source code.\nFrom here you can explore the source code/build the coqdoc documentation (using `eval $(opam env) \u0026\u0026 make doc`, and the output will be placed into a html folder at the ceramist root).\n\nIf you wish to browse the files on your local machine, start up the\ndocker container, using the command above, and *while it is still\nrunning (i.e don't close it)*, in a separate shell, execute:\n\n```\ndocker cp  ceramist:/ceramist ./ceramist\n```\n\nThis will copy the compiled ceramist source code (and html\ndocumentation, if you have made it, to your local machine).\n\n## Project Structure\nThe structure of the overall development is as follows:\n```\n.\n├── Computation\n│   ├── Comp.v\n│   └── Notationv1.v\n├── Structures\n│   ├── BlockedAMQ\n│   │   └── BlockedAMQ.v\n│   ├── BloomFilter\n│   │   ├── BloomFilter_Definitions.v\n│   │   └── BloomFilter_Probability.v\n│   ├── Core\n│   │   ├── AMQHash.v\n│   │   ├── AMQReduction.v\n│   │   ├── AMQ.v\n│   │   ├── FixedList.v\n│   │   ├── FixedMap.v\n│   │   ├── Hash.v\n│   │   └── HashVec.v\n│   ├── CountingBloomFilter\n│   │   ├── CountingBloomFilter_Definitions.v\n│   │   └── CountingBloomFilter_Probability.v\n│   └── QuotientFilter\n│       ├── QuotientFilter_Definitions.v\n│       └── QuotientFilter_Probability.v\n└── Utils\n    ├── InvMisc.v\n    ├── rsum_ext.v\n    ├── seq_ext.v\n    ├── seq_subset.v\n    ├── stirling.v\n    └── tactics.v\n\n8 directories, 22 files\n```\n\nThe library is split into separate logical components by directory:\n- *Computation* - defines a probability monad and associated notation for it on top of the 'coq-infotheo' probability library.\n- *Utils* - collection of utility lemmas and tactics used throughout the development\n- *Structures/Core* - contains definitions and properties about the core probabilistic primitives exported by the library, and defines the abstract AMQ interface satisfied by all instantiations.\n- *Structures/BloomFilter* - example use of the exported library to prove various probabilistic properties on bloom filters.\n- *Structures/CountingBloomFilter* - another exemplar use of the library to prove probabilistic properties on counting bloom filters. \n- *Structures/QuotientBloomFilter* - exemplar use of library to prove probabilistic properties of quotient filters\n- *Structures/BlockedAMQ* - exemplar use of library to prove probabilistic properties of a higher order AMQ - the blockedAMQ \n\nCheck out `Structures/Demo.v` for an example instantiation of the BlockedAMQ to derive Blocked Bloom filters, Counting Blocked bloom filters and Blocked Quotient filters.\n\n## Theorems and Lemmas\nThe following table maps the statements from the paper to statements\nin the source code:\n\n- *Theorem 3 (No False Negatives)* \n  - file: Structures/BloomFilter/BloomFilter_Probability.v\n  - line: 1166\n  - name: AMQ_no_false_negatives\n- *Lemma 2 (Probability of Flipping a Single Bit)*\n  - file: Structures/BloomFilter/BloomFilter_Probability.v:\n  - line: 588\n  - name: bloomfilter_addn_insert_multiple\n- *Theorem 4 (Probability of a False Positive)*\n  - file: Structures/BloomFilter/BloomFilter_Probability.v:\n  - line: 1187\n  - name: AMQ_false_positives_rate\n- *Theorem 5 (Uniform Hash Output)*\n  - file: Structures/Core/HashVec.v\n  - line: 296\n  - name: hash_vecP\n- *Theorem 6 (Hash Consistency)*\n  - file: Structures/Core/HashVec.v\n  - line: 517\n  - name: hash_vec_find_simpl\n- *AMQHash Interface - Property 1,2*\n  - file: Structures/Core/AMQHash.v\n  - line: 39\n  - name: AMQHASH\n  - note: instantiated for single hash functions at line 156\n    (BasicHash), and for hash vectors at line 354 (BasicHashVec) of\n    same file.\n- *AMQ Interface - Property 3,4*\n  - file: Structures/Core/AMQ.v\n  - line: 46\n  - name: AMQ\n- *Theorem 7 (Generalized No False Negatives)*\n  - file: Structures/Core/AMQ.v\n  - line: 281\n  - name: AMQ_no_false_negatives\n- *AMQMap Interface - Property 5,6*\n  - file: Structures/Core/AMQReduction.v\n  - line: 42\n  - name: AMQMAP\n  - note: instantiated for Counting Bloom filters in\n    Structures/CountingBloomFilter/CountingBloomFilterDefinitions.v at\n    line 832 (BloomFilterReduction).\n- *Theorem 8 (AMQ False Positive Reduction)*\n  - file: Structures/Core/AMQReduction.v\n  - line: 205\n  - name: AMQ_false_positives_rate\n- *Pattern 1 (Bind normalization)*\n  - file: Utils/tactics.v\n  - line: 53\n  - name: comp_normalize\n- *Pattern 2 (Probability of a Sequential Composition)*\n  - file: Utils/tactics.v\n  - line: 171\n  - name: comp_simplify\n- *Lemma 3 (Plausible Sequencing)*\n  - file: Utils/rsum_ext.v\n  - line: 732\n  - name: eq_rsum_ne0\n- *Pattern 3 (Plausible Outcome Decomposition)*\n  - file: Utils/tactics.v\n  - line: 197,258\n  - name: comp_possible_decompose, comp_possible_exists\n  - note: first version for when plausiblility is an assumption, and\n    the second version is for when the plausiblility is a goal\n- *Theorem 9 (Quotient filter False Positive Rate)**\n  - file: Structures/QuotientFilter/QuotientFilter_Probability.v\n  - line:  527\n  - name: AMQ_false_positives_rate\n- *Theorem 10 (Blocked AMQ False Positive Rate)*\n  - file: Structures/BlockedAMQ/BlockedAMQ.v\n  - line: 738\n  - name: AMQ_false_positives_rate\n  - note: see Structures/Demo.v for an instantiation of the Blocked AMQ on each of the prior AMQs\n- *Theorem 11 (Counting Bloom filter removal)*\n  - file: Structures/CountingBloomFilter/CountingBloomFilter_Probability.v\n  - line: 178\n  - name: countingbloomfilter_removal_preserve\n- *Theorem 12 (Certainty of Counter Increments)*\n  - file: Structures/CountingBloomFilter/CountingBloomFilter_Probability.v\n  - line: 104\n  - name: countingbloomfilter_counter_prob\n\n\n## Building Locally\nIf you wish to step through the proof interactively, we recommend you\nbuild the artefact locally.\n\nTo do this, ensure that you have the latest version of\n[opam](https://opam.ocaml.org/) installed, and that it has been\ncorrectly initialised (running `opam init` and `eval $(opam env)`).\n\n1. Add the coq-released repository.\n```\nopam repo add coq-released https://coq.inria.fr/opam/released\nopam update\n```\n\n2. Install the dependencies for ceramist (you may also be prompted to use `--unlock-base`):\n```\nopam install -y --deps-only coq-ceramist.1.0.1\n```\n\n3. Clone the ceramist project:\n```\ngit clone https://github.com/certichain/ceramist\ncd ./ceramist\n```\n\n4. Build ceramist:\n```\nmake\n```\n\n5. (Optional) Build ocamldoc - the documentation will be placed into a  folder named `html` at the project root:\n```\nmake doc\n```\n\n6. Open the coq source files (`.v` extension) in either coq-ide or\n   proof general.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiranandcode%2Fceramist-artefact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiranandcode%2Fceramist-artefact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiranandcode%2Fceramist-artefact/lists"}