Skip to main content

skijack

A surface language over the $SKI$ combinator calculus that compiles to closed {S,K,I} terms, with the interpreter of the companion paper as its conformance target.

The claim this package exists to support: the abstraction is free, and term equality proves it. The self-interpreter of Davis (2027)---618 atoms of pure {S,K,I}, built by hand---compiles from three lines of surface source to the same term, atom for atom. So do five more: the observability pair at 768 and 771, the blocking interpreters at 950 and 1,066, and structural equality on encoded terms at 240.

Everything is compile-time. Quotation happens in the compiler and nowhere else, because no closed term quotes every live term; the language's job is to make that line visible rather than to pretend it isn't there.

  • N E Davis (2027, in review) A Self-Interpreter for $SKI$: Authoring Semantics for New Symbols. Journal of Functional Programming. doi:10.5281/zenodo.22867957
  • N E Davis (2027a, in review) SKIjack: A Low-Level Native Language for the $SKI$ Calculus. The Art, Science, and Engineering of Programming.

Install

pip install skijack

Requires Python 3.10+ and aviary-kernel, which supplies bracket abstraction, the term representation and the reducer. This package reimplements none of them.

Avon, a C runtime, can run the reductions instead: SKIJACK_REDUCER=avon with AVON naming its binary, or SKIJACK_REDUCER=check to run both and compare (skijack/avon.py). Avon's copy mode gives aviary's statuses, counts and terms.

Use

skijack FILE                     # a summary
skijack FILE --check             # Stage A, then B; exits 1 and lists every problem
skijack FILE --expand            # every compiled term, with atom counts
skijack FILE --dictionary        # the Tier 1 table: name, atoms, hash
skijack FILE --lift NAME         # NAME, with what the table knows named
skijack FILE --render unicode    # the same program in the other lexicon
skijack FILE --run NAME [--fuel N]   # run a level-1 declaration and decode it

The lexicon is taken from the filename (*.unicode.ski) unless --lexicon says otherwise. The twenty-two programs of the conformance corpus ship with the package; eighteen compile, and Stage A refuses the other four for stated reasons:

>>> import skijack
>>> from skijack import corpus
>>> skijack.compile(corpus.read("interp-whnff")).sizes["whnfF"]
618

From Python:

import skijack
exp   = skijack.compile(open("prog.ski").read())   # parse, check, generate, expand
d     = skijack.from_expansion(exp)                # the Tier 1 table
named = skijack.lift(exp.term("whnfF"), d)         # back to named source
out   = skijack.run_level1(exp.level1["answer"], 1_000_000)

Everything this package raises for a bad program derives from skijack.SkijackError, including a refusal by aviary, the host that abstracts and expands, which reaches the caller as an ExpandError.

Definitions

An author writes an equation f x y = body. The closed Y-tied term to which it compiles is the supercombinator, the unit of naming, sharing, jetting and lifting. The group an equation is declared in is a core. Names resolve in a compile-time table and are gone before anything runs; there is no environment at run time.

Tests

pip install skijack[test]
python3 -m pytest -q

Roughly a third of the suite compares compiled terms against the hand-built artifact of the companion paper. Point SKIJACK_ARTIFACT_DIR at a checkout of it, or set SKIJACK_ALLOW_SKIP=1 to run the reduced suite knowingly --- the suite refuses to run silently without its oracle, because what remains would check the compiler only against itself.

More

The language is specified in SPEC.md at the repository root; NOTES.md beside this file is the decision log it was derived from.

NOTES.md records what the suite proves, every open question the specification left and how it was answered, and any discrepancies found in the original specification itself.

Metadata

Release files for skijack 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skijack 0.2.1
File Size Uploaded Provenance Actions
skijack-0.2.1.tar.gz 259.1 kB Without provenance Details for skijack-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for skijack 0.2.1
File Interpreter ABI Platform Actions
skijack-0.2.1-py3-none-any.whl Python 3 none any Details for skijack-0.2.1-py3-none-any.whl

Total release size: 454.8 kB

Release files / skijack-0.2.1.tar.gz

Download URL skijack-0.2.1.tar.gz
Size 259.1 kB
Tags Source
SHA-256 checksum
How to use checksums
bf9b5c411223055b46328744567f1cbeba5c514ba867fc9adf072a53ee732734
BLAKE2b-256 checksum
How to use checksums
8cdca9f4f20b0091b1d22fe481fe16114654609cbf81172223969a451b9229ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / skijack-0.2.1-py3-none-any.whl

Download URL skijack-0.2.1-py3-none-any.whl
Size 195.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f2de4a04118f1fbf269a2d59b04ad0d9278009385e7b6540b5dfe622ece4682a
BLAKE2b-256 checksum
How to use checksums
26ba5c891415af40e32cd595b484d29dda35313e1c9f23e6a02ba595cf602573
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Security for skijack 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page