{"id":22069578,"url":"https://github.com/deducteam/nubo","last_synced_at":"2026-03-19T21:36:20.886Z","repository":{"id":38412505,"uuid":"342216996","full_name":"Deducteam/nubo","owner":"Deducteam","description":"Nubo is a repository of interoperable formal proofs written in Dedukti.","archived":false,"fork":false,"pushed_at":"2023-04-28T11:54:48.000Z","size":127,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-23T18:52:29.950Z","etag":null,"topics":["interoperability","lambda-calculus","proof"],"latest_commit_sha":null,"homepage":"","language":"Makefile","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/Deducteam.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":"2021-02-25T11:07:36.000Z","updated_at":"2025-03-12T00:41:14.000Z","dependencies_parsed_at":"2024-11-30T20:11:05.194Z","dependency_job_id":"7e98bf47-bc22-4c72-94bd-cd77ac3d3aaa","html_url":"https://github.com/Deducteam/nubo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Deducteam/nubo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deducteam%2Fnubo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deducteam%2Fnubo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deducteam%2Fnubo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deducteam%2Fnubo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Deducteam","download_url":"https://codeload.github.com/Deducteam/nubo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Deducteam%2Fnubo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28218585,"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","status":"online","status_checked_at":"2026-01-05T02:00:06.358Z","response_time":57,"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":["interoperability","lambda-calculus","proof"],"created_at":"2024-11-30T20:11:00.936Z","updated_at":"2026-01-05T21:04:19.158Z","avatar_url":"https://github.com/Deducteam.png","language":"Makefile","readme":"Nubo: a repository for Dedukti developments\n===========================================\n\nThis repository centralises metadata concerning Dedukti developments.\nThese metadata ought to be structured enough so that developments\nmay be processed by programs.\nWe call _expression_ any string understood by Dedukti:\nit can be the declaration of a type `Nat` in Dedukti,\na set of declarations and definitions, a collection of definitions,\ndeclarations and theorems.\nWe call _module_ a Dedukti file containing proofs. The file `nat.dk` containing\n```\nNat: Type.\nz: Nat\ns: Nat -\u003e Nat\n```\nis a module containing expressions.\nWe call _library_ a set of modules which are related by topic or dependency.\n\nBlueprint\n---------\n\nWe call *blueprint* a file that holds metadata about a library.\n\nA *blueprint* is a BSD flavoured [Makefile][2] defining the following variables:\n\n- `LIB_NAME`: name of the library. This is not the [library\n  name](#library-name)\n\n- `LIB_VERSION`: version of the library.\n\n- `LIB_FLAVOUR`: denotes some options used in the generation of the library.\n  This field is optional.\n\n- `LIB_DEPENDS`: a list of [library paths](#library-path) on\n  which the library depends.\n\n- `LIB_ORIGIN`: URL to the original files of the library, as distributed by the\n  authors.\n\n- `ENCODING`: a list of [library path](#library-path) that\n  specifies the encoding of the logic the library is expressed into. It must be\n  a (possibly empty) subset of `LIB_DEPENDS`. This field serves interoperability\n  purposes.\n\n- `SYNTAX`: concrete syntax the library is written in. See the [syntax\n  specification](#syntax-specifier).\n\n- `TOOLING`: a list of tools used to translate proofs. A tool is specified by\n  a string `\u003cname\u003e:\u003cversion\u003e` where `\u003cname\u003e` is the name of the tool, and\n  `\u003cversion\u003e` is its version used. The format of the version may depend on the\n  source of the tool. If the tool is stored on git, a commit hash, or tag, or\n  branch name may be provided. Tools are referenced in `TOOLS`.\n\n- `MAIN`: a list of modules standing for entry points to the library. The entry\n  points are explicitly checked whereas other modules are usually checked\n  as dependencies.\n\n- `FLAGS`: flags that may be passed to the checker.\n\n**Note:**\nThese variables not only serve informative purposes, they can be used to fulfill\nmiscellaneous tasks using targets defined in\n[`infrastructure/mk/nubo.library.mk`](./infrastructure/mk/nubo.library.mk).\nMore information on these targets are given in\n[How to use this repository](#how-to-use-this-repository).\n\nLibrary name\n------------\n\nEach library has a name which consists of 3 parts\n\n```\nstem-version[-flavour]\n```\n\nThe _stem_ part identifies the library and refers to the variable `LIB_NAME` of\nthe blueprint. It may contain dashes.\n\nThe _version_ part starts at the first digit that follows a `-` and goes up to\nthe following `-`. It refers to the variable `LIB_VERSION` of the blueprint.\n\nThe remaining _flavour_ part refers to the variable `LIB_FLAVOUR` of the\nblueprint. It is optional.\n\nThe _version_ part must start with a digit, whereas the _flavour_ must not\nstart with a digit.\n\nAll packages must have a version number. Normally, the version number directly\nmatches the original library version number, or release date. In case there are\nsubstantial changes in the translated library, a patch level marker should be\nappended (e.g. `p0`, `p1`, \u0026c.).\n\nVersion comparison is done using a lexicographic alphabetic order.\n\n_This section is based on the manual page packages-specs(7) of OpenBSD_\n\nLibrary path\n------------\n\nEach location in the library tree is uniquely identified by a *libpath*.\n\nEvery *libpath* conforms to the pattern `cat/stem/[flavour,]version`\nwhere `stem`, `version` and `flavour` are defined in the\n[name specification](#library-name). The `cat` (for\ncategory) part refers to the first directory at the root of the library tree.\nThe `flavour,` part is optional.\n\nSuch a *libpath* locates uniquely a library in the library tree.\n\nFor instance, `libraries/arith_fermat/sttfa,1.0` is the location of the library\n`arith_fermat` version `1.0` in its `sttfa` flavour, its blueprint is\n[`libraries/arith_fermat/sttfa,1.0/Makefile`](./libraries/arith_fermat/sttfa,1.0/Makefile).\n\nAs an example, the overall structure of the library tree may look like this,\n```\nnubo/\n+- encodings/\n|  +- libA/\n|  |  +- 1.0/\n|  |  |  +- Makefile\n|  |  +- flavA,1.0/\n|  |  |  +- Makefile\n|  |  +- flavA,1.1/\n|  |  |  +- Makefile\n|  |  +- flavB,1.0/\n|  |     +- Makefile\n|  +- libB/\n|     +- ...\n+- arithmetic/\n   +- ...\n```\n\n**Note:** in the previous example, each `Makefile` is a\n[*blueprint*](#blueprint).\n\nSyntax specifier\n----------------\n\nExpressions are written in a concrete syntax that can be\nidentified by a syntax specifier which conforms to the pattern\n```\nstem [options]\n```\n\nThe _stem_ part is a string without spaces that identifies a grammar.\n\nThe _options_ part is a (possibly empty) space-separated list of strings\npreceded by a `-` or a `+`. An option identifies one or more syntax\nextensions that are added to the grammar _stem_ if the option is preceded by `+`\nor removed from the grammar if the option is preceded by `-`.\n\nThe possible stems and options are referenced in the file `SYNTAXES`. The\n`SYNTAXES` file follows the [record jar][1] format where records contain the\nfollowing fields:\n- `type`: either `stem` or `option`,\n- `key`: the string that may be used in the syntax specifier,\n- `description`: a short description of the grammar or the syntax extension\n  introduced by the record.\n\nTooling\n-------\n\nThe file `TOOLS` gathers information on the tools that may be used to translate\nproofs or to operate on translated proofs. It follows the [record jar][1]\nformat.\n\nA record must at least contain the fields `name` and `homepage`. Any other field\nis optional.\n\n- `name`: a unique name that identifies the tool.\n- `homepage`: URL of the homepage of the tool from where it can be downloaded.\n\nPackaged libraries\n------------------\n\nLibraries are packaged into gzipped tarballs with the extension `.tgz` for\ndistribution.\nEach library identified by a\n[library name specification](#library-name): _libname_ is\npackaged as `libname.tgz`. Such an archive must contain\n\n- the modules that make up the library (`.dk` files),\n\n- a (POSIX) [Makefile][3] dependency list named `.depend` listing the dependencies\n  between the modules.\n\nModules are expected to be in the same directory as the dependency file.\n\nFor instance, the archive of `arith_fermat-1.0-sttfa` is available at\n`${PKG_PATH}/arith_fermat-1.0-sttfa.tgz` (see the documentation of\n[makefiles](mk/README.md) for a description of `${PKG_PATH}`).\n\nHow to use this repository\n--------------------------\n\nThe library tree can be used to install, check or package libraries using\n_make_.\n\n**Caution:** [*BSD* _make_](https://man.netbsd.org/make.1) must be used,\nLinux users must invoke `bmake` rather than `make`.\n\n**Caution:** the variable `NUBOROOT` must contain the path of the local clone\nof this repository for most of these commands to work.\n\nThe available targets are\n- *download*: download and extracts the source files of the library,\n- *check*: check the library. By defaults it uses Dedukti to check the library.\n  It can be invoked as `make check=CHECKER` where `CHECKER` is the name of a\n  known checker. Currently available are `dedukti` and `kontroli`.\n- *package*: create a library package from the downloaded files.\n- *lint*: performs sanity checks on a package.\n- *makesum*: computes the checksum of the library package and replace it in the\n  blueprint.\n- *list*: list available libraries.\n- *clean*: clean content. By default, clean the blueprint directory. It can be\n  invoked as `make clean='[work build]'`.\n  - _work_: clean the blueprint directory (remove archives and uncompressed\n    library).\n  - _build_: clean typechecked files.\n\nThese commands must be called in the same directory as the\n[blueprint](#blueprint). For example, to download\n`arith_fermat-1.0-sttfa`,\n\n``` sh\ncd libraries/arith_fermat/sttfa,1.0\nmake download\n```\n\nThe following parameters can be set to alter the user interface:\n- *ECHO_MSG*: handle progress messages with the command given as parameter.\n- *PROGRESS_METER*: set to `No` to disable the library download progress bar.\n\nTo check the same library without output (where `true` refers to the shell\nfunction that returns 0, and does not mean that messages are activated),\n```sh\ncd libraries/arith_fermat/sttfa,1.0\nmake ECHO_MSG=true PROGRESS_METER=No check\n```\n\nContributing to Nubo\n--------------------\n\nIf you have translated a library in Dedukti (and it typechecks), or you\ndesigned an encoding; you may submit it to Nubo.\n\n**Contribution checklist:**\n\n1. Fetch a copy of the Nubo proof tree. Let _root_ be the path to the proof tree.\n2. Pick a category for your ports. Either an already existing one at\n   _root_`/\u003ccat\u003e` or create a new one. Let _cat_ be the chosen category.\n3. Create the directory structure: let _name_ be the name of your library,\n   _ver_ its version. Create the directory tree\n   _root_`/`_cat_`/`_name_`/`_ver_`/`. If there are different version of the\n   same library, flavours may be specified. In that case, the directory tree is\n   _root_`/`_cat_`/`_name_`/`_ver_`,`_flavour_`/`.\n4. Copy the template blueprint from _root_`/infrastructure/templates/Makefile`\n   to the created directory, and fill all variables noted `# REQUIRED`.\n5. Copy your modules into a directory named _name_`-`_ver_ or\n   _name_`-`_ver_`-`_flav_ alongside the new blueprint. There must not be any\n   subdirectory in the directory containing the modules.\n6. In the former directory, create a `.depend` file such that for each module\n   _m_ that depends on modules _m1_, _m2_, ... there is a target _m_`.dko`\n   which depends on _m_`.dk` and _mi_`.dko`.\n7. Make the library package with `make package`.\n8. Add the checksum of the package with `make makesum`. The original blueprint\n   is saved as `Makefile.bak`.\n9. Run basic verifications with `make lint`.\n10. Assert it typechecks running `make check`.\n11. Incorporate your new library: email your blueprint to\n    \u003cdedukti-dev@inria.fr\u003e with its category and the package or an URL where it\n    can be retrieved.  If you cloned Nubo using git, add a one-line entry for\n    the new library in its parent directory's makefile, e.g. for\n    `libraries/arith_fermat/`, add it to `libraries/Makefile`, commit and email\n    a patch (see `git-format-patch(1)`) or create a pull request.\n\nSteps 2 to 4 can be automated using `make new` at _root_. Step 6 can be automated\nusing [`dkdep`](https://github.com/Deducteam/dedukti).\n\nNotes\n-----\n\nIt is the user's responsability to install softwares and\n[tools](#tooling) in their appropriate version.\n\nUpcoming\n--------\n\n- Add a maintainer for each library\n\n- Use another format than Makefile to have easily parsable meta data. Or\n  add target to generate json from makefile.\n\n[1]: https://tools.ietf.org/html/draft-phillips-record-jar-01\n[2]: https://man.openbsd.org/make.1\n[3]: https://pubs.opengroup.org/onlinepubs/009695299/utilities/make.html\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeducteam%2Fnubo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeducteam%2Fnubo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeducteam%2Fnubo/lists"}