Skip to content

Commit 2fbfbc6

Browse files
hyperpolymathclaude
andcommitted
feat(provers): add provers.a2ml catalogue + gen-provers-a2ml.sh generator
Canonical enumeration of all 113 ProverKind variants for downstream matrix-CI consumers (currently vcl-ut's backend-matrix.yml). One [prover.<PascalName>] section per variant with snake_case wire slug matching serde's default rename_all. - Source-of-truth: src/rust/provers/mod.rs::ProverKind (enum variants) - Regenerator: scripts/gen-provers-a2ml.sh (re-run on enum change) - Consumer pattern: parse A2ML at CI runtime, emit ephemeral matrix JSON as a GHA output (per "no JSON emit" rule, no committed JSON) Completes Session C Package 4 matrix-CI prep (pair-commit with vcl-ut's backend-matrix.yml). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 1498ebb commit 2fbfbc6

2 files changed

Lines changed: 404 additions & 0 deletions

File tree

.machine_readable/provers.a2ml

Lines changed: 363 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,363 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
#
4+
# provers.a2ml — Authoritative enumeration of ECHIDNA prover backends.
5+
#
6+
# Generated from src/rust/provers/mod.rs::ProverKind. One section per
7+
# variant, keyed by the variant's PascalCase name for stability against
8+
# slug-format drift. `slug` is the snake_case identifier used on the
9+
# wire (matches serde's rename_all = "snake_case" default).
10+
#
11+
# Downstream consumers:
12+
# - .github/workflows/backend-matrix.yml (vcl-ut) reads this file to
13+
# build its matrix strategy, one job per prover.
14+
# - Future sync check fails CI if this file drifts from ProverKind::all().
15+
#
16+
# SYNC SOURCE-OF-TRUTH: `pub enum ProverKind` in src/rust/provers/mod.rs.
17+
# If that enum changes, regenerate with scripts/gen-provers-a2ml.sh.
18+
19+
[metadata]
20+
version = "1.0.0"
21+
source = "src/rust/provers/mod.rs::ProverKind"
22+
date = "2026-04-24"
23+
count = 113
24+
25+
[prover.ABC]
26+
slug = "abc"
27+
28+
[prover.Abella]
29+
slug = "abella"
30+
31+
[prover.ACL2]
32+
slug = "acl2"
33+
34+
[prover.ACL2s]
35+
slug = "acl2s"
36+
37+
[prover.AffineTypeChecker]
38+
slug = "affine_type_checker"
39+
40+
[prover.Agda]
41+
slug = "agda"
42+
43+
[prover.Alloy]
44+
slug = "alloy"
45+
46+
[prover.AltErgo]
47+
slug = "alt_ergo"
48+
49+
[prover.Arend]
50+
slug = "arend"
51+
52+
[prover.Athena]
53+
slug = "athena"
54+
55+
[prover.Boogie]
56+
slug = "boogie"
57+
58+
[prover.BunchedTypeChecker]
59+
slug = "bunched_type_checker"
60+
61+
[prover.CaDiCaL]
62+
slug = "ca_di_ca_l"
63+
64+
[prover.Cameleer]
65+
slug = "cameleer"
66+
67+
[prover.CapabilityTypeChecker]
68+
slug = "capability_type_checker"
69+
70+
[prover.CBMC]
71+
slug = "cbmc"
72+
73+
[prover.ChoreographicTypeChecker]
74+
slug = "choreographic_type_checker"
75+
76+
[prover.Chuffed]
77+
slug = "chuffed"
78+
79+
[prover.CoeffectTypeChecker]
80+
slug = "coeffect_type_checker"
81+
82+
[prover.Coq]
83+
slug = "coq"
84+
85+
[prover.CubicalAgda]
86+
slug = "cubical_agda"
87+
88+
[prover.CubicalTypeChecker]
89+
slug = "cubical_type_checker"
90+
91+
[prover.CVC5]
92+
slug = "cvc5"
93+
94+
[prover.Dafny]
95+
slug = "dafny"
96+
97+
[prover.Dedukti]
98+
slug = "dedukti"
99+
100+
[prover.DependentTypeChecker]
101+
slug = "dependent_type_checker"
102+
103+
[prover.DReal]
104+
slug = "d_real"
105+
106+
[prover.DyadicTypeChecker]
107+
slug = "dyadic_type_checker"
108+
109+
[prover.EchoTypeChecker]
110+
slug = "echo_type_checker"
111+
112+
[prover.EffectRowTypeChecker]
113+
slug = "effect_row_type_checker"
114+
115+
[prover.EpistemicTypeChecker]
116+
slug = "epistemic_type_checker"
117+
118+
[prover.EProver]
119+
slug = "e_prover"
120+
121+
[prover.ExistentialTypeChecker]
122+
slug = "existential_type_checker"
123+
124+
[prover.FramaC]
125+
slug = "frama_c"
126+
127+
[prover.FStar]
128+
slug = "f_star"
129+
130+
[prover.GLPK]
131+
slug = "glpk"
132+
133+
[prover.GradualTypeChecker]
134+
slug = "gradual_type_checker"
135+
136+
[prover.HigherKindedTypeChecker]
137+
slug = "higher_kinded_type_checker"
138+
139+
[prover.HoareTypeChecker]
140+
slug = "hoare_type_checker"
141+
142+
[prover.HOL4]
143+
slug = "hol4"
144+
145+
[prover.HOLLight]
146+
slug = "hol_light"
147+
148+
[prover.HomotopyTypeChecker]
149+
slug = "homotopy_type_checker"
150+
151+
[prover.Idris2]
152+
slug = "idris2"
153+
154+
[prover.Imandra]
155+
slug = "imandra"
156+
157+
[prover.ImmutableTypeChecker]
158+
slug = "immutable_type_checker"
159+
160+
[prover.ImpureTypeChecker]
161+
slug = "impure_type_checker"
162+
163+
[prover.IndexedTypeChecker]
164+
slug = "indexed_type_checker"
165+
166+
[prover.IntersectionTypeChecker]
167+
slug = "intersection_type_checker"
168+
169+
[prover.Isabelle]
170+
slug = "isabelle"
171+
172+
[prover.IsabelleZF]
173+
slug = "isabelle_zf"
174+
175+
[prover.KatagoriaVerifier]
176+
slug = "katagoria_verifier"
177+
178+
[prover.KeY]
179+
slug = "ke_y"
180+
181+
[prover.Kissat]
182+
slug = "kissat"
183+
184+
[prover.LambdaProlog]
185+
slug = "lambda_prolog"
186+
187+
[prover.Lean]
188+
slug = "lean"
189+
190+
[prover.Lean3]
191+
slug = "lean3"
192+
193+
[prover.LinearTypeChecker]
194+
slug = "linear_type_checker"
195+
196+
[prover.Matita]
197+
slug = "matita"
198+
199+
[prover.Mercury]
200+
slug = "mercury"
201+
202+
[prover.Metamath]
203+
slug = "metamath"
204+
205+
[prover.MiniSat]
206+
slug = "mini_sat"
207+
208+
[prover.MiniZinc]
209+
slug = "mini_zinc"
210+
211+
[prover.Minlog]
212+
slug = "minlog"
213+
214+
[prover.Mizar]
215+
slug = "mizar"
216+
217+
[prover.MizAR]
218+
slug = "miz_ar"
219+
220+
[prover.ModalTypeChecker]
221+
slug = "modal_type_checker"
222+
223+
[prover.Naproche]
224+
slug = "naproche"
225+
226+
[prover.Nitpick]
227+
slug = "nitpick"
228+
229+
[prover.NominalTypeChecker]
230+
slug = "nominal_type_checker"
231+
232+
[prover.Nunchaku]
233+
slug = "nunchaku"
234+
235+
[prover.Nuprl]
236+
slug = "nuprl"
237+
238+
[prover.NuSMV]
239+
slug = "nu_smv"
240+
241+
[prover.OpenSmt]
242+
slug = "open_smt"
243+
244+
[prover.OrderedTypeChecker]
245+
slug = "ordered_type_checker"
246+
247+
[prover.OrdinaryTypeChecker]
248+
slug = "ordinary_type_checker"
249+
250+
[prover.ORTools]
251+
slug = "or_tools"
252+
253+
[prover.PhantomTypeChecker]
254+
slug = "phantom_type_checker"
255+
256+
[prover.PolymorphicTypeChecker]
257+
slug = "polymorphic_type_checker"
258+
259+
[prover.Prism]
260+
slug = "prism"
261+
262+
[prover.ProbabilisticTypeChecker]
263+
slug = "probabilistic_type_checker"
264+
265+
[prover.ProvabilityTypeChecker]
266+
slug = "provability_type_checker"
267+
268+
[prover.Prover9]
269+
slug = "prover9"
270+
271+
[prover.ProVerif]
272+
slug = "pro_verif"
273+
274+
[prover.PVS]
275+
slug = "pvs"
276+
277+
[prover.QTTTypeChecker]
278+
slug = "qtt_type_checker"
279+
280+
[prover.RefinementTypeChecker]
281+
slug = "refinement_type_checker"
282+
283+
[prover.RelevantTypeChecker]
284+
slug = "relevant_type_checker"
285+
286+
[prover.Rocq]
287+
slug = "rocq"
288+
289+
[prover.RowTypeChecker]
290+
slug = "row_type_checker"
291+
292+
[prover.SCIP]
293+
slug = "scip"
294+
295+
[prover.SeaHorn]
296+
slug = "sea_horn"
297+
298+
[prover.SessionTypeChecker]
299+
slug = "session_type_checker"
300+
301+
[prover.SmtRat]
302+
slug = "smt_rat"
303+
304+
[prover.SPASS]
305+
slug = "spass"
306+
307+
[prover.SPIN]
308+
slug = "spin"
309+
310+
[prover.SubtypingTypeChecker]
311+
slug = "subtyping_type_checker"
312+
313+
[prover.Tamarin]
314+
slug = "tamarin"
315+
316+
[prover.TemporalTypeChecker]
317+
slug = "temporal_type_checker"
318+
319+
[prover.TLAPS]
320+
slug = "tlaps"
321+
322+
[prover.TLC]
323+
slug = "tlc"
324+
325+
[prover.TropicalTypeChecker]
326+
slug = "tropical_type_checker"
327+
328+
[prover.Twelf]
329+
slug = "twelf"
330+
331+
[prover.TypedWasm]
332+
slug = "typed_wasm"
333+
334+
[prover.TypeLL]
335+
slug = "type_ll"
336+
337+
[prover.UnionTypeChecker]
338+
slug = "union_type_checker"
339+
340+
[prover.UniquenessTypeChecker]
341+
slug = "uniqueness_type_checker"
342+
343+
[prover.UPPAAL]
344+
slug = "uppaal"
345+
346+
[prover.UppaalStratego]
347+
slug = "uppaal_stratego"
348+
349+
[prover.Vampire]
350+
slug = "vampire"
351+
352+
[prover.Viper]
353+
slug = "viper"
354+
355+
[prover.Why3]
356+
slug = "why3"
357+
358+
[prover.Z3]
359+
slug = "z3"
360+
361+
[prover.Zipperposition]
362+
slug = "zipperposition"
363+

0 commit comments

Comments
 (0)