Files
yvgude--lean-ctx/lean/LeanCtxProofs/Compression/TerseEngine.lean
T
wehub-resource-sync 26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:30 +08:00

189 lines
7.6 KiB
Lean4
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/-
LeanCTX Formal Verification — Terse Compression Engine Invariants
Proves correctness properties of the 4-layer terse compression engine:
- Passthrough guarantee for Off level
- Structural marker protection
- Filler/decoration removal rules
- Max-to-Standard fallback correctness
- Threshold ordering across levels
Mirrors: rust/src/core/terse/engine.rs, rust/src/core/terse/pipeline.rs
Enterprise guarantee: these proofs ensure the compression engine
never silently destroys information.
Scientific basis:
- Surprisal-based information density (Shannon 1948)
- Structural marker preservation (analogous to Named Entity Recognition)
-/
import LeanCtxProofs.Basic
namespace LeanCtxProofs.Compression.TerseEngine
-- ============================================================================
-- Core Types (mirror rust/src/core/config.rs + engine.rs)
-- ============================================================================
/-- Compression levels, ordered by aggressiveness.
Mirrors `CompressionLevel` in config.rs. -/
inductive CompressionLevel where
| off
| lite
| standard
| max
deriving DecidableEq, Repr
/-- A scored text line with information density metadata. -/
structure ScoredLine where
content : String
score : Nat
hasStructuralMarker : Bool
isEmpty : Bool
isPureDecoration : Bool
isFiller : Bool
deriving DecidableEq, Repr
/-- Whether a compression level is active (not Off). -/
def CompressionLevel.isActive : CompressionLevel Bool
| .off => false
| _ => true
/-- Score threshold for each level (scaled ×10 for Nat precision).
Mirrors constants in engine.rs: 2.5→25, 3.0→30, 3.5→35. -/
def scoreThreshold : CompressionLevel Nat
| .off => 0
| .lite => 25
| .standard => 30
| .max => 35
-- ============================================================================
-- Line Filtering (mirrors engine.rs filter logic)
-- ============================================================================
/-- A line should be removed if: empty, pure decoration, unprotected filler,
or below score threshold without structural markers. -/
def shouldRemove (level : CompressionLevel) (line : ScoredLine) : Bool :=
line.isEmpty ||
line.isPureDecoration ||
(line.isFiller && !line.hasStructuralMarker) ||
(line.score < scoreThreshold level && !line.hasStructuralMarker)
/-- The core filter: keep lines that should NOT be removed. -/
def filterLines (level : CompressionLevel) (lines : List ScoredLine) : List ScoredLine :=
lines.filter (! shouldRemove level ·)
/-- Max-level with fallback to Standard on quality failure. -/
def compressWithFallback (lines : List ScoredLine)
(maxQualityPassed : Bool) : List ScoredLine :=
if maxQualityPassed then filterLines .max lines
else filterLines .standard lines
-- ============================================================================
-- Engine Correctness Theorems
-- ============================================================================
/-- **Theorem 1 (Off Never Removes): Off level marks non-filler content for keeping.
(Off threshold is 0, so only empty/decoration/unprotected-filler lines are removed.) -/
theorem off_never_removes (line : ScoredLine)
(h_ne : line.isEmpty = false)
(h_nd : line.isPureDecoration = false)
(h_nf : line.isFiller = false) :
shouldRemove .off line = false := by
simp [shouldRemove, scoreThreshold, h_ne, h_nd, h_nf]
/-- **Theorem 2 (Structural Marker Safety): Lines with structural markers
are NEVER removed, regardless of compression level.** -/
theorem structural_markers_preserved (level : CompressionLevel) (line : ScoredLine)
(h_marker : line.hasStructuralMarker = true)
(h_not_empty : line.isEmpty = false)
(h_not_deco : line.isPureDecoration = false) :
shouldRemove level line = false := by
simp [shouldRemove, h_not_empty, h_not_deco, h_marker]
/-- **Theorem 3 (Empty Lines Always Removed): Empty lines are removed
at any compression level.** -/
theorem empty_lines_always_removed (level : CompressionLevel) (line : ScoredLine)
(h_empty : line.isEmpty = true) :
shouldRemove level line = true := by
simp [shouldRemove, h_empty]
/-- **Theorem 4 (Decoration Always Removed): Pure decoration lines are
removed at any compression level.** -/
theorem decoration_always_removed (level : CompressionLevel) (line : ScoredLine)
(h_deco : line.isPureDecoration = true) :
shouldRemove level line = true := by
simp [shouldRemove, h_deco]
/-- **Theorem 5 (Filler With Markers Kept): Filler lines that have structural
markers are NOT removed — the marker protects them.** -/
theorem filler_with_marker_kept (level : CompressionLevel) (line : ScoredLine)
(h_filler : line.isFiller = true)
(h_marker : line.hasStructuralMarker = true)
(h_not_empty : line.isEmpty = false)
(h_not_deco : line.isPureDecoration = false) :
shouldRemove level line = false := by
simp [shouldRemove, h_not_empty, h_not_deco, h_filler, h_marker]
/-- **Theorem 6 (Filter is Subset): Filtered output is always a subset of input.** -/
theorem filter_subset (level : CompressionLevel) (lines : List ScoredLine) :
l filterLines level lines, l lines := by
intro l hl
simp [filterLines, List.mem_filter] at hl
exact hl.1
/-- **Theorem 7 (Threshold Monotonicity): Lite ≤ Standard threshold.** -/
theorem lite_le_standard : scoreThreshold .lite scoreThreshold .standard := by
native_decide
/-- **Theorem 8 (Threshold Monotonicity): Standard ≤ Max threshold.** -/
theorem standard_le_max : scoreThreshold .standard scoreThreshold .max := by
native_decide
/-- **Theorem 9 (Threshold Monotonicity): Lite ≤ Max threshold.** -/
theorem lite_le_max : scoreThreshold .lite scoreThreshold .max := by
native_decide
/-- **Theorem 10 (Fallback Returns Standard): When Max quality fails,
fallback returns Standard compression.** -/
theorem fallback_on_failure (lines : List ScoredLine) :
compressWithFallback lines false = filterLines .standard lines := by
simp [compressWithFallback]
/-- **Theorem 11 (Fallback Uses Max): When Max quality passes,
fallback returns Max compression.** -/
theorem fallback_on_success (lines : List ScoredLine) :
compressWithFallback lines true = filterLines .max lines := by
simp [compressWithFallback]
/-- **Theorem 12 (Off Not Active): Off level is never active.** -/
theorem off_not_active : CompressionLevel.isActive .off = false := by rfl
/-- **Theorem 13 (Lite Active): Lite level is active.** -/
theorem lite_is_active : CompressionLevel.isActive .lite = true := by rfl
/-- **Theorem 14 (Standard Active): Standard level is active.** -/
theorem standard_is_active : CompressionLevel.isActive .standard = true := by rfl
/-- **Theorem 15 (Max Active): Max level is active.** -/
theorem max_is_active : CompressionLevel.isActive .max = true := by rfl
/-- **Theorem 16 (Filter Empty): Filtering an empty list produces an empty list.** -/
theorem filter_empty (level : CompressionLevel) :
filterLines level [] = [] := by rfl
/-- **Theorem 17 (High Score Protected): A non-empty, non-decoration line with
score above Max threshold is never removed at any level.** -/
theorem high_score_kept (level : CompressionLevel) (line : ScoredLine)
(h_score : scoreThreshold .max line.score)
(h_not_empty : line.isEmpty = false)
(h_not_deco : line.isPureDecoration = false)
(h_not_filler : line.isFiller = false) :
shouldRemove level line = false := by
simp [shouldRemove, h_not_empty, h_not_deco, h_not_filler]
intro h_lt
have h_le : scoreThreshold level scoreThreshold .max := by
cases level <;> simp [scoreThreshold] <;> omega
omega
end LeanCtxProofs.Compression.TerseEngine