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

Metadata

Release files for axsent 0.1.0

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

Source distribution (sdist)

Source distribution for axsent 0.1.0
File Size Uploaded
axsent-0.1.0.tar.gz 15.0 kB Details

Built distribution (wheel)

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

Total release size: 29.6 kB

Release files / axsent-0.1.0.tar.gz

Download URL axsent-0.1.0.tar.gz
Size 15.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9bb50e16a40713db722535b72f87d5eb482ebf6c6a389ae29b09efda6aa2404c
BLAKE2b-256 checksum
How to use checksums
f4e66f17175d77778e2762064e3372dcb35d7e758894586c1c68540e3254f078
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / axsent-0.1.0-py3-none-any.whl

Download URL axsent-0.1.0-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9aa714c2f1a20bbb5b03885408003cd67ab4c55e51dedca7dc3461e126018c0a
BLAKE2b-256 checksum
How to use checksums
0da7749a163948d2db6f756a8fe681bb7ac3fbe8b79003c23b79192e7dd8db66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release 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