Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
b8e06df
vocab: add _verification_systems dictionary and expand MSC2020
hyperpolymath Oct 22, 2026
8265b05
vocab: wire crossquery consumer, Julia preload, verify MSC rows, expa…
hyperpolymath Oct 22, 2026
d33fccb
corpus: add Ada/SPARK, Rust/Creusot and the estate profile adapters
hyperpolymath Oct 22, 2026
8b42389
creusot-core: adapter_of_layer only names layers that have an adapter
hyperpolymath Oct 22, 2026
e29d860
ci: temporary diagnostic workflow (posts compiler output as a PR comm…
hyperpolymath Oct 22, 2026
b23b24b
ci: trigger the diagnostic workflow on push to this branch
hyperpolymath Oct 22, 2026
369697b
ci: probe minimal workflow
hyperpolymath Oct 22, 2026
4db5142
ci: bisect the diagnostic workflow
hyperpolymath Oct 22, 2026
07aebc7
ci: bisect actions
hyperpolymath Oct 22, 2026
66f36f3
ci: diagnostic workflow that avoids action refs
hyperpolymath Oct 22, 2026
c99472a
ci: publish diagnostics to a paste and record the comment status
hyperpolymath Oct 22, 2026
c51fa6c
ci: publish the diagnostics in chunks over a pollable topic
hyperpolymath Oct 22, 2026
37529c2
ci: capture a rustfmt patch and the test results; fix the SPARK_Mode …
hyperpolymath Oct 22, 2026
311b40b
ci: report the rustfmt patch and targeted test runs through a PR comment
hyperpolymath Oct 22, 2026
7a56cc4
test: make the profile and creusot adapter tests independent of the c…
hyperpolymath Oct 22, 2026
6873646
Update src/rust/corpus/creusot.rs
hyperpolymath Oct 22, 2026
a3f6b06
Update src/rust/corpus/spark_ada.rs
hyperpolymath Oct 22, 2026
c97aeca
Update tests/corpus_estate_adapters.rs
hyperpolymath Oct 22, 2026
339290a
Update tests/corpus_fixtures/spark_ada/smoke.ads
hyperpolymath Oct 22, 2026
4c448ec
ci: temporary workflow that commits cargo fmt output onto this branch
hyperpolymath Oct 22, 2026
e2074b3
style: cargo fmt
fmt-bot Oct 22, 2026
d9b0a83
docs(corpus): Clarify ingestion, synonym loading, and training loader…
coderabbitai[bot] Oct 22, 2026
e0c29ec
ci: drop the temporary diagnostics workflows
hyperpolymath Oct 22, 2026
3f965dd
corpus: structural cross-prover identity keys and a 256-dim structura…
hyperpolymath Oct 22, 2026
32dcdb7
style: cargo fmt (bot)
Oct 22, 2026
c6a239b
ci: run the gates on the formatted tree
hyperpolymath Oct 22, 2026
dc8b433
ci: drop the temporary formatting workflow
hyperpolymath Oct 22, 2026
f598079
ci: publish cargo check output for the merged tree (temporary)
hyperpolymath Oct 22, 2026
f766b47
ci: record cargo output in .diag instead of a topic (temporary)
hyperpolymath Oct 22, 2026
74641a6
fix(corpus): resolve SCHEME through crate:: in the octad test
hyperpolymath Oct 22, 2026
d4bdf66
merge: main into the identity branch (reconcile #449's squash)
hyperpolymath Oct 22, 2026
d492e8e
fix(corpus): clear the seven clippy errors that keep rust-ci red
hyperpolymath Oct 22, 2026
f230ad4
docs(cli): stop the crossquery doc comment from starting a list item
hyperpolymath Oct 22, 2026
44de577
fix(corpus): stop the canonical parser collapsing a bracketed group t…
hyperpolymath Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 0 additions & 67 deletions .github/workflows/zz-diag.yml

This file was deleted.

46 changes: 0 additions & 46 deletions .github/workflows/zz-fmt.yml

This file was deleted.

25 changes: 16 additions & 9 deletions src/rust/corpus/canonical.rs
Original file line number Diff line number Diff line change
Expand Up @@ -882,11 +882,23 @@ impl Parser {

/// Application, including prefix operator use: `(+ x y)`.
fn app(&mut self) -> Node {
// A bracketed group is already complete: `(eq a b)` must not be
// re-read as the prefix form `eq a b`, or the group's own arguments
// are swallowed by the enclosing application and the term collapses
// to a bare operator name.
let from_group = matches!(self.peek(), Some(Tk::Open(_)));
let head = match self.atom() {
Some(h) => h,
None => return Node::Hole,
};
if let Node::Op(op, _) = head.clone() {
if let Node::Op(op, args) = head.clone() {
if from_group {
return if args.is_empty() {
Node::Name(op.to_string())
} else {
head
};
}
let mut args: Vec<Node> = Vec::new();
loop {
let stop = match self.peek() {
Expand Down Expand Up @@ -940,14 +952,9 @@ impl Parser {

fn expr(&mut self, min_prec: u8) -> Node {
let mut left = self.app();
loop {
let op = match self.op_at() {
Some(op) => op,
None => break,
};
let prec = match precedence(op) {
Some(p) => p,
None => break,
while let Some(op) = self.op_at() {
let Some(prec) = precedence(op) else {
break;
};
if prec < min_prec {
break;
Expand Down
21 changes: 11 additions & 10 deletions src/rust/corpus/creusot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -478,22 +478,23 @@ pub(crate) fn parse_rust_file(src: &str) -> ParsedFile {
let clean = clean_source(src);
let toks = tokenise(&clean);
let attrs = collect_attrs(src, &toks);
let mut parsed = ParsedFile::default();

parsed.imports = collect_uses(src, &toks);
let mut parsed = ParsedFile {
imports: collect_uses(src, &toks),
..Default::default()
};

let mut k = 0;
while k < toks.len() {
let t = &toks[k];
let next_is_fn = k + 1 < toks.len() && is_kw(&toks[k + 1], "fn");
let is_const_item = is_kw(t, "const") && !next_is_fn;
let (kind, name_idx) = if is_kw(t, "fn") {
(DeclKind::Function, k + 1)
} else if is_kw(t, "struct") || is_kw(t, "enum") || is_kw(t, "union") {
(DeclKind::Data, k + 1)
} else if is_kw(t, "trait") {
(DeclKind::Record, k + 1)
} else if is_kw(t, "type") || is_kw(t, "static") {
(DeclKind::Data, k + 1)
} else if is_kw(t, "const") && !(k + 1 < toks.len() && is_kw(&toks[k + 1], "fn")) {
} else if is_kw(t, "type") || is_kw(t, "static") || is_const_item {
(DeclKind::Data, k + 1)
} else {
k += 1;
Expand Down Expand Up @@ -565,10 +566,10 @@ pub(crate) fn parse_rust_file(src: &str) -> ParsedFile {
axiom_usage,
});

if has_attr(&leading, "cfg(creusot)") {
if !parsed.options.iter().any(|o| o == "creusot-gated") {
parsed.options.push("creusot-gated".to_string());
}
if has_attr(&leading, "cfg(creusot)")
&& !parsed.options.iter().any(|o| o == "creusot-gated")
{
parsed.options.push("creusot-gated".to_string());
}

k = advance.max(k + 1);
Expand Down
2 changes: 1 addition & 1 deletion src/rust/corpus/octad.rs
Original file line number Diff line number Diff line change
Expand Up @@ -755,7 +755,7 @@ mod tests {
coq.graph.cross_prover_identity_key,
smtlib.graph.cross_prover_identity_key
);
assert_eq!(coq.graph.identity_scheme, super::canonical::SCHEME);
assert_eq!(coq.graph.identity_scheme, crate::corpus::canonical::SCHEME);
assert_eq!(
coq.graph.canonical_type,
"(PI [NAT NAT] (EQ (ADD v0 v1) (ADD v1 v0)))"
Expand Down
14 changes: 6 additions & 8 deletions src/rust/corpus/spark_ada.rs
Original file line number Diff line number Diff line change
Expand Up @@ -725,10 +725,7 @@ fn collect_imports(toks: &[Tok]) -> Vec<String> {
let mut names: Vec<String> = Vec::new();
let mut j = i + 1;
let mut terminated = false;
loop {
let Some((name, next)) = dotted_name(&toks, j) else {
break;
};
while let Some((name, next)) = dotted_name(toks, j) {
names.push(name);
if next < toks.len() && is_punct(&toks[next], ",") {
j = next + 1;
Expand Down Expand Up @@ -804,10 +801,11 @@ fn body_end_idx(toks: &[Tok], from: usize, name: &str) -> Option<usize> {
fn find_end_name(toks: &[Tok], from: usize, name: &str) -> Option<usize> {
let mut j = from;
while j + 1 < toks.len() {
if is_kw(&toks[j], "end") && toks[j + 1].kind == TokKind::Ident {
if toks[j + 1].text.eq_ignore_ascii_case(name) {
return Some(j);
}
if is_kw(&toks[j], "end")
&& toks[j + 1].kind == TokKind::Ident
&& toks[j + 1].text.eq_ignore_ascii_case(name)
{
return Some(j);
}
j += 1;
}
Expand Down
7 changes: 3 additions & 4 deletions src/rust/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,10 +279,9 @@ enum CorpusOp {
},

/// Look up entries across every synonym table by `semantic_class`.
/// Demonstrates cross-prover semantic equivalence — e.g.
/// `corpus crossquery well-foundedness` reports `WellFounded` in Agda
/// + `well_founded` in Coq + `WellFounded` in Lean + `WellFounded` in
/// Idris 2.
/// Demonstrates cross-prover semantic equivalence: `corpus crossquery
/// well-foundedness` reports `WellFounded` in Agda, `well_founded` in
/// Coq, and `WellFounded` in Lean and Idris 2.
///
/// The cross-prover dictionaries are searched too, so classes that
/// only exist there (`wrapping-arithmetic`, `frame-rule`,
Expand Down
Loading