Skip to content

Commit 273cdf9

Browse files
Add README describing the Lean 4 proof structure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0d43c70 commit 273cdf9

1 file changed

Lines changed: 34 additions & 1 deletion

File tree

README.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,34 @@
1-
# bolt_lean
1+
# BoltLean
2+
3+
Lean 4 mechanized proofs for the paper "Bolt: LTLf and LTL Learning Meet Boolean Set Cover".
4+
5+
The development is self-contained and does not depend on Mathlib or any external library beyond the Lean 4 core.
6+
It is built with Lean 4 version `v4.29.1` (see `lean-toolchain`).
7+
8+
## Structure
9+
10+
The repository is organized into two modules corresponding to the two main theoretical parts of the paper.
11+
12+
### `BoltLean/Ltl/`
13+
14+
**`Basic.lean`**
15+
Defines `LTLf` formulas in negation normal form (`Formula`) and their semantics (`Formula.accepts`) on finite traces (`Trace`).
16+
Negations are pushed to variables; the operators are `True`, `False`, `Var`, `Next`, `WeakNext`, `Globally`, `Finally`, `Or`, `And`, and `Until`.
17+
18+
**`UpperBound.lean`**
19+
Proves the separability upper bound: for any non-empty finite trace `t`, the function `Trace.exact t` constructs an `LTLf` formula accepted by `t` and only by `t`.
20+
Taking the disjunction over all positive traces then yields a separating formula for any consistent set of examples.
21+
22+
### `BoltLean/Boolean/`
23+
24+
**`Basic.lean`**
25+
Defines Boolean formulas in negation normal form (`BoolFormula`) over a set of atomic sets indexed by `Fin n_sets`.
26+
A `Valuation` records membership of an element in each atomic set.
27+
Also defines the domination preorder: `f1.dominates f2` holds when `f1` has no greater weight than `f2` and correctly classifies a superset of the elements that `f2` classifies correctly.
28+
29+
**`Domination.lean`**
30+
Proves the key substitution lemma `domin_replace`: if `f1` dominates `f2`, then replacing any occurrence of `f2` by `f1` in a Boolean formula yields a formula that dominates the original.
31+
This is the formal justification for pruning the candidate family to an antichain during the Boolean Set Cover search.
32+
33+
**`UpperBound.lean`**
34+
Proves the Boolean Set Cover upper bound: `Valuation.exact v` constructs a Boolean formula accepted by exactly the valuation `v`, establishing that a separating formula always exists when the instance is feasible.

0 commit comments

Comments
 (0)