{"id":19362699,"url":"https://github.com/imdea-software/popl-2016-artifact","last_synced_at":"2026-06-08T23:03:33.618Z","repository":{"id":79163373,"uuid":"43948189","full_name":"imdea-software/popl-2016-artifact","owner":"imdea-software","description":null,"archived":false,"fork":false,"pushed_at":"2015-10-09T13:11:07.000Z","size":21572,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-24T12:50:35.145Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","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":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-09T10:13:30.000Z","updated_at":"2024-01-13T23:54:24.000Z","dependencies_parsed_at":"2023-03-12T07:13:31.475Z","dependency_job_id":null,"html_url":"https://github.com/imdea-software/popl-2016-artifact","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/imdea-software/popl-2016-artifact","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fpopl-2016-artifact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fpopl-2016-artifact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fpopl-2016-artifact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fpopl-2016-artifact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imdea-software","download_url":"https://codeload.github.com/imdea-software/popl-2016-artifact/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fpopl-2016-artifact/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34083848,"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-06-08T02:00:07.615Z","response_time":111,"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":"2024-11-10T07:29:56.305Z","updated_at":"2026-06-08T23:03:33.602Z","avatar_url":"https://github.com/imdea-software.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# POPL 2016 Artifact\n\nThis is the artifact for the accepted POPL 2016 submission *Abstract Data Type\nInference*.\n\n## Instructions\n\nThe following steps ensure that the artifact can be run on any machine that\nsatisfy following simple requirements.\n\n### Step 0: Requirements\n\nTo ensure uniform results across platforms, this artifact is run through a\ncustom [VirtualBox] virtual machine configured through [Vagrant]. The following\nrequirements must be installed:\n\n* [VirtualBox], version 4.3.20 or greater\n* [Vagrant], version 1.7.2 or greater\n\n### Step 1: Clone this Git repository\n\nThis artifact is obtained simply by cloning this repository:\n\n    git clone https://github.com/imdea-software/popl-2016-artifact.git\n\nThis should create the artifact’s root directory `popl-2016-artifact` in your\ncurrent working directory.\n\n### Step 2: Fire up the virtual machine\n\nFirst, start [Vagrant] in this project’s root directory (containing\n`Vagrantfile`):\n\n    vagrant up\n\nThis can take a few minutes the first time around, since it includes the\ndownload of a virtual machine image. When this step finishes, our virtual\nmachine should be up and running — verify this with the `vagrant status`\ncommand. Open a shell to the running virtual machine via ssh:\n\n    vagrant ssh\n\nand follow the instructions below. When finished, simply close the SSH\nsession, and halt, suspend, or destroy the virtual machine:\n\n    vagrant destroy\n\n### Step 3: Run the artifact\n\nOnce inside the virtual machine run the command:\n\n    ./bin/pattern_reporter.rb\n\nThis invokes the algorithm developed in the submission to calculate the\nminimal negative history (patterns) for several ADT implementations. The\nconsole output first draws a dot `.` for each explored history, and a hash\nsymbol `#` for each history which corresponds to a new pattern. When the\nhistory-lenght bound is reached, the list of found patterns is printed\nto the console, followed by the list of first-order formulas corresponding\nto each pattern. For example, this is the output for the first implementation:\n\n````\nGenerating negative patterns for My Register\n.\nLength 1 histories:\n..#.\nLength 2 histories:\n.....#.#........\nLength 3 histories:\n..#...............................................................\nLength 4 histories:\n..............................................................................................................................................................................................................................................................................................\n[pattern-finder] found 4 patterns\n[1:X] read =\u003e 1 (RO)  #\n--\n[1:1] write(1)            #\n[2:2] read =\u003e empty (RO)    #\n--\n[1:2] read =\u003e 1 (RO)  #\n[2:2] write(1)          #\n--\n[1:1] write(1)        #\n[2:2] write(2)          #\n[3:1] read =\u003e 1 (RO)      #\n--\n(exists x1 ::\n  c(x1) \u0026\u0026 f(x1) == read \u0026\u0026 um(x1)\n)\n--\n(exists x1, x2 ::\n  c(x1) \u0026\u0026 f(x1) == write \u0026\u0026 !um(x1) \u0026\u0026 m(x1) == x1 \u0026\u0026 x1 \u003c x2 \u0026\u0026\n  c(x2) \u0026\u0026 f(x2) == read \u0026\u0026 !um(x2) \u0026\u0026 m(x2) == x2 \u0026\u0026\n  (forall x :: m(x) == x1 ==\u003e x == x1) \u0026\u0026\n  (forall x :: m(x) == x2 ==\u003e x == x2)\n)\n--\n(exists x1, x2 ::\n  c(x1) \u0026\u0026 f(x1) == read \u0026\u0026 !um(x1) \u0026\u0026 m(x1) == x2 \u0026\u0026 x1 \u003c x2 \u0026\u0026\n  c(x2) \u0026\u0026 f(x2) == write \u0026\u0026 !um(x2) \u0026\u0026 m(x2) == x2 \u0026\u0026\n  (forall x :: m(x) == x2 ==\u003e x == x1 || x == x2)\n)\n--\n(exists x1, x2, x3 ::\n  c(x1) \u0026\u0026 f(x1) == write \u0026\u0026 !um(x1) \u0026\u0026 m(x1) == x1 \u0026\u0026 x1 \u003c x2 \u0026\u0026\n  c(x2) \u0026\u0026 f(x2) == write \u0026\u0026 !um(x2) \u0026\u0026 m(x2) == x2 \u0026\u0026 x2 \u003c x3 \u0026\u0026\n  c(x3) \u0026\u0026 f(x3) == read \u0026\u0026 !um(x3) \u0026\u0026 m(x3) == x1 \u0026\u0026\n  (forall x :: m(x) == x1 ==\u003e x == x1 || x == x3) \u0026\u0026\n  (forall x :: m(x) == x2 ==\u003e x == x2)\n)\n````\n\n### Step 4: Evaluate the artifact\n\nThis artifact can be evaluated by examining the console output of the\n`./bin/pattern_reporter.rb` command. The patterns output on the console should\ncorrespond to those reported in Section 9 of the submission. This is simple to\nverify visually, since the the patterns reported in the submission were captured\ndirectly from this console output.\n\n## Contents\n\nFiles in this project are organized according to the following directory\nstructure.\n\n* `bin/` contains the `pattern_reporter.rb` script for generating the empirical\ndata used in our submission.\n\n* `lib/` contains the source code of our pattern-finding algorithm. All source\nis written in [Ruby], using a foreign-function interface for invoking [Scal]’s\nC++ data-structure implementations.\n\n* `popl-2016-submission.pdf` is the corresponding POPL 2016 submission.\n\n* `xxx/` contains prebuilt external shared-libraries.\n\n[Ruby]: https://www.ruby-lang.org\n[RubyInstaller]: http://rubyinstaller.org\n[Homebrew]: http://brew.sh\n[Cygwin]: https://www.cygwin.com\n[libffi]: https://sourceware.org/libffi\n[Z3]: http://z3.codeplex.com\n\n[Vagrant]: https://www.vagrantup.com\n[VirtualBox]: https://www.virtualbox.org\n\n[Scal]: http://scal.cs.uni-salzburg.at\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fpopl-2016-artifact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimdea-software%2Fpopl-2016-artifact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fpopl-2016-artifact/lists"}