You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Extracts a precise informal specification for TreeNodeFilter.MatchFilterPattern, the core Boolean evaluator of the tree-node filter subsystem in Microsoft.Testing.Platform.
This advances Target 7 (TreeNodeFilter.MatchFilterPattern) from phase 1 (identified) to phase 2 (informal spec extracted).
FilterExpression taxonomy: Maps the C# hierarchy (ValueExpression, NopExpression, OperatorExpression, ValueAndPropertyExpression, PropertyExpression) to an ADT with clear semantics.
Recursive evaluation semantics: Precise denotational definition of evalFilter and evalProps.
Boolean algebra invariants (12 properties):
Nop is always-true identity (B1)
Double negation: ¬¬e ≡ e (B2)
De Morgan for Or and And (B3, B4)
Commutativity of And/Or (B5, B6)
Singleton And/Or reduction (B7, B8)
Nop is And-identity and Or-absorber (B9, B10)
Vacuous And = true, Or = false (B11, B12)
Regex semantics: How *, **, \c, and literal chars map to regex patterns; anchored + case-insensitive matching.
6 open questions for maintainer review, including NopExpression reachability and empty list semantics.
formal-verification/TARGETS.md
Updates Target 7 phase from 1 → 2.
Context
This is part of the ongoing Lean Squad formal verification effort. The next step for this target (Task 3) is writing a Lean 4 formal spec, which is blocked pending Lean toolchain availability in the CI runner.
The Boolean algebra properties (De Morgan, double negation, commutativity) are well-suited to Lean 4 proofs using simp, omega, and structural induction — they should be provable once the toolchain is available.
🔬 Lean Squad — this PR was created by an automated FV agent (run #25007678153). All .lean files are subject to review for mathematical correctness. Informal specs are intended as input to human and automated review.
This was originally intended as a pull request, but GitHub Actions is not permitted to create or approve pull requests in this repository.
The changes have been pushed to branch lean-squad/task2-treenodefilter-2026-04-27-937a4dc0191e83e2.
To fix the permissions issue, go to Settings → Actions → General and enable Allow GitHub Actions to create and approve pull requests. See also: gh-aw FAQ
Summary
Extracts a precise informal specification for
TreeNodeFilter.MatchFilterPattern, the core Boolean evaluator of the tree-node filter subsystem in Microsoft.Testing.Platform.This advances Target 7 (
TreeNodeFilter.MatchFilterPattern) from phase 1 (identified) to phase 2 (informal spec extracted).What's in this PR
formal-verification/specs/treenodefilter_matchfilterpattern_informal.mdA comprehensive informal spec covering:
ValueExpression,NopExpression,OperatorExpression,ValueAndPropertyExpression,PropertyExpression) to an ADT with clear semantics.evalFilterandevalProps.¬¬e ≡ e(B2)*,**,\c, and literal chars map to regex patterns; anchored + case-insensitive matching.MatchesFilterpublic entry point postcondition.formal-verification/TARGETS.mdUpdates Target 7 phase from 1 → 2.
Context
This is part of the ongoing Lean Squad formal verification effort. The next step for this target (Task 3) is writing a Lean 4 formal spec, which is blocked pending Lean toolchain availability in the CI runner.
The Boolean algebra properties (De Morgan, double negation, commutativity) are well-suited to Lean 4 proofs using
simp,omega, and structural induction — they should be provable once the toolchain is available.Note
This was originally intended as a pull request, but GitHub Actions is not permitted to create or approve pull requests in this repository.
The changes have been pushed to branch
lean-squad/task2-treenodefilter-2026-04-27-937a4dc0191e83e2.Click here to create the pull request
To fix the permissions issue, go to Settings → Actions → General and enable Allow GitHub Actions to create and approve pull requests. See also: gh-aw FAQ
Show patch preview (253 of 253 lines)