Skip to main content
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║                                                                                            ║
║                     █████╗ ██╗  ██╗███████╗███████╗███╗   ██╗████████╗                     ║
║                    ██╔══██╗╚██╗██╔╝██╔════╝██╔════╝████╗  ██║╚══██╔══╝                     ║
║                    ███████║ ╚███╔╝ ███████╗█████╗  ██╔██╗ ██║   ██║                        ║
║                    ██╔══██║ ██╔██╗ ╚════██║██╔══╝  ██║╚██╗██║   ██║                        ║
║                    ██║  ██║██╔╝ ██╗███████║███████╗██║ ╚████║   ██║                        ║
║                    ╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚══════╝╚═╝  ╚═══╝   ╚═╝                        ║
║                                                                                            ║
║                               what a formal library assumes                                ║
║                                                                                            ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝

An accent is a dependence on something local that travels with whoever carries it. An inherited axiom is the same thing: a library speaks in the assumptions of wherever it came from, and most of what it carries it never chose.

Rocq, Agda and Isabelle each let a development assert something without proving it, and each records the dependency edges that carry the assertion outward. axsent reads those declarations and those edges from source text, with no proof assistant installed and nothing built.

pip install axsent
axsent rocq      path/to/stdlib/theories
axsent agda      path/to/agda-stdlib/src
axsent isabelle  path/to/afp/thys

Why counts should not be totalled

A library declares two kinds of assumption and both use the same keyword.

Mathematical — excluded middle, choice, functional extensionality, proof irrelevance. Claims about mathematics. A result depending on one is classical rather than constructive.

Interface — that native 63-bit arithmetic behaves as specified, that a mutable array returns what was written to it, that a foreign function returns what its type says. Claims about the machine and the runtime. A result depending on one is not thereby classical.

Rocq's Corelib declares five times as many axioms as the Rocq standard library and makes no mathematical assumption at all: all 73 specify primitive machine arithmetic, native arrays, floats and strings. Every one of the 16 postulating modules in the Agda standard library is a foreign-function or operating-system interface. A single figure hides which of the two you are looking at.

What it is not

It does not read Lean or Metamath. gonzalgo and mmforge do that. This is a separate instrument for separate systems, not an extension of either.

It measures at file or module granularity, not per theorem. A file requiring a module that declares an axiom inherits it whether or not any theorem in that file uses it, so every figure is an upper bound on inheritance, not a statement about use. Print Assumptions and #print axioms answer the per-theorem question and need a built library. This needs only the source, which is what makes a cross-system census tractable.

Reading the source correctly

Three exclusions do real work, and each was derived from a failure rather than anticipated.

Rocq Parameter and Hypothesis are not axioms inside a Module Type or Section — they are discharged. The Rocq standard library has 389 Parameter and 125 Hypothesis against 14 top-level Axiom; counting the former reports a library assuming five hundred things it does not.

Agda postulate must open a block. postulate[_|->_] is a legal function name, and a word-boundary match counts it as an assumption.

Isabelle comments nest. (* outer (* inner *) still outer *) is one comment; a non-greedy match closes it at the inner terminator and returns the rest as live code. On the Archive of Formal Proofs that single difference is 33 reported sorry occurrences against 3.

The check that makes it trustworthy

Agda's {-# OPTIONS --safe #-} is compiler-enforced and transitive: a safe module may not postulate and may not import a module that is not itself safe. The compiler has already computed the transitive answer, so axsent agda ends by checking itself against it. Any module reported as both --safe and reaching a postulate is a bug in this tool, not a finding about Agda.

Nothing in Rocq, Isabelle, Lean or Metamath offers a comparable ground truth. Run the Agda census first for that reason alone.

Citation

The method and the five-library census it produced:

Gonzalez, V. 2026. Interface Assumptions Are Not Mathematical Assumptions: An Axiom Census of Five Libraries Across Four Proof Systems. Zenodo. https://doi.org/10.5281/zenodo.22148932

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

axsent-0.1.0.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

axsent-0.1.0-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file axsent-0.1.0.tar.gz.

File metadata

  • Download URL: axsent-0.1.0.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for axsent-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9bb50e16a40713db722535b72f87d5eb482ebf6c6a389ae29b09efda6aa2404c
MD5 1831f50c5596cb4b5935f21feedaae23
BLAKE2b-256 f4e66f17175d77778e2762064e3372dcb35d7e758894586c1c68540e3254f078

See more details on using hashes here.

File details

Details for the file axsent-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: axsent-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for axsent-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9aa714c2f1a20bbb5b03885408003cd67ab4c55e51dedca7dc3461e126018c0a
MD5 39e08a7253d5856b32375a45db56c1a3
BLAKE2b-256 0da7749a163948d2db6f756a8fe681bb7ac3fbe8b79003c23b79192e7dd8db66

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

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