{"id":13787731,"url":"https://github.com/wilbowma/cur","last_synced_at":"2026-01-28T16:03:21.334Z","repository":{"id":23767309,"uuid":"27142087","full_name":"wilbowma/cur","owner":"wilbowma","description":"A less devious proof assistant","archived":false,"fork":false,"pushed_at":"2023-01-23T17:58:59.000Z","size":6306,"stargazers_count":227,"open_issues_count":42,"forks_count":18,"subscribers_count":17,"default_branch":"main","last_synced_at":"2026-01-14T10:44:33.292Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Racket","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/wilbowma.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":"2014-11-25T19:23:32.000Z","updated_at":"2026-01-04T02:52:19.000Z","dependencies_parsed_at":"2023-02-13T01:46:19.920Z","dependency_job_id":null,"html_url":"https://github.com/wilbowma/cur","commit_stats":null,"previous_names":["bluephoenix47/cic-redex"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wilbowma/cur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilbowma%2Fcur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilbowma%2Fcur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilbowma%2Fcur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilbowma%2Fcur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wilbowma","download_url":"https://codeload.github.com/wilbowma/cur/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilbowma%2Fcur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28846765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"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-08-03T21:00:29.337Z","updated_at":"2026-01-28T16:03:21.301Z","avatar_url":"https://github.com/wilbowma.png","language":"Racket","funding_links":[],"categories":["Racket","Functional"],"sub_categories":[],"readme":"cur [![Build Status](https://travis-ci.org/stchang/cur.svg?branch=turnstile-core)](https://travis-ci.org/stchang/cur/)\n===\n\nA language with static dependent-types and dynamic types, type\nannotations and parentheses, theorem proving and meta-programming.\n\n```\nNoun\ncur (plural curs)\n\n1. (archaic) A mongrel.\n2. (archaic) A detestable person.\n```\n\nDisclaimer\n==========\nCur is currently under active hackery and is not fit for use for any\nparticular purpose. It is fraught with unreadable code, errors,\nperformance bugs, and hacks that should never have been written by a\nreasonable human being.\nThese may or may not be fixed shortly.\n\nVersioning\n=======\nCur is in alpha. Version numbers are 0.N, where N increases when an\nAPI changes, or a sub-package depends on a new feature (e.g. if\ncur-test depends on a feature that did not exist in a previous version).\n\nGetting started\n===============\n\n## Easy mode:\nYou'll need Racket at least v7.6\n\nThen, install cur via `raco pkg install cur`.\nCome ask questions in IRC, `#cur` on Freenode.\n\nSee the docs: `raco docs cur`. Unfortunately, they're very out of date and I'm\nworking on updating them.\n\n## Advanced mode:\nCur is distributed as several packages.\n`cur-lib` provides the implementation and all standard libraries.\n`cur-doc` provides the documentation.\n`cur-test` provides a test suite and examples.\n\nYou can install the individual packages from the Racket package server, or from\nlocal copies of the files:\n\n```sh\n\u003e git clone https://github.com/wilbowma/cur\n\u003e cd cur\n\u003e pushd cur-lib; raco pkg install; popd\n...\n\u003e pushd cur-doc; raco pkg install; popd\n...\n\u003e raco test cur-test\n...\n... tests passed\n```\n\n```sh\n\u003e raco test cur-test/cur/tests/stdlib/nat.rkt\n```\n\n## Example code\nTry it out: open up DrRacket and put the following in the definition area:\n\n\n```racket\n#lang cur\n(require\n cur/stdlib/sugar\n rackunit/turnstile+)\n\n;; Write typed code\n(define-datatype Nat : Type\n  (z : Nat)\n  (s : (forall (x : Nat) Nat)))\n\n(define/rec/match + : Nat (m : Nat) -\u003e Nat\n  [z =\u003e m]\n  [(s x) =\u003e (s (+ x m))])\n\n(+ (s z) z)\n\n;; Write dependently-typed code\n\n(define-datatype = [A : Type] [a : A] : (forall (b : A) Type)\n  (refl : (= A a a)))\n\n(refl Nat (s z))\n\n(check-type\n (refl Nat (s z))\n :\n (= Nat (+ z (s z)) (s z)))\n\n;; Write some macros and Racket meta-programs over dependently-typed code\n(begin-for-syntax\n  (define (nat-\u003eunary n)\n    (if (zero? n)\n        #`z\n        #`(s #,(nat-\u003eunary (sub1 n))))))\n\n(define-syntax (define-numbers syn)\n  (syntax-case syn ()\n    [(_)\n     #`(begin\n         #,@(for/list ([i (in-range 10)])\n              #`(define #,(format-id syn \"Nat-~a\" i) #,(nat-\u003eunary i))))]))\n\n(define-numbers)\n;; (define-numbers) generates the following definitions at macro-expansion time:\n#|\n |  (define Nat-0 z)\n |  (define Nat-1 (s z))\n |  (define Nat-2 (s (s z)))\n |  (define Nat-3 (s (s (s z))))\n |  (define Nat-4 (s (s (s (s z)))))\n |  (define Nat-5 (s (s (s (s (s z))))))\n |  (define Nat-6 (s (s (s (s (s (s z)))))))\n |  (define Nat-7 (s (s (s (s (s (s (s z))))))))\n |  (define Nat-8 (s (s (s (s (s (s (s (s z)))))))))\n |  (define Nat-9 (s (s (s (s (s (s (s (s (s z))))))))))\n |  (define Nat-10 (s (s (s (s (s (s (s (s (s (s z)))))))))))\n |#\n\nNat-0\nNat-5\n\n;; Of course, you could just define #%datum to do the right thing:\n(require (only-in cur [#%datum super.datum]))\n(define-syntax (#%datum syn)\n  (syntax-parse syn\n    [(_ . x:nat)\n     (nat-\u003eunary (syntax-\u003edatum #'x))]\n    [(_ . e)\n     #`(super.datum e)]))\n\n0\n5\n\n(refl Nat 1)\n\n(check-type\n (refl Nat 1)\n :\n (= Nat (+ 0 1) 1))\n```\n\nGoing further\n=============\n\nSee https://williamjbowman.com/papers#cur or\nhttps://williamjbowman.com/papers#depmacros for some papers on Cur's design and\ntechnologies.\n\nOpen up `cur-tests/cur/tests/ntac/software-fondations` to see example from the\nSoftware Foundations text book redone in Cur.\n\nOpen up anything in `cur-lib/cur/stdlib/` to see some standard dependent-type\nformalisms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilbowma%2Fcur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilbowma%2Fcur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilbowma%2Fcur/lists"}