Documentation

Regex.Compiler.Lemmas.Compile

Lemmas #

Proof that Compiler.Code.compile gives an array with the Compiler.NextOfLt and Capture.Valid property and has no exceptions

theorem Compiler.Lemmas.c_bounded.fold.patch_spec (compiled : ThompsonRef) (prev_end empty : NFA.Unchecked.StateID) (greedy possessive : Bool) (states : Array NFA.Unchecked.State) :
fun (s : Array NFA.Unchecked.State) => s = states tRefLt compiled states prev_end < states.size empty < states.size NextOfLt states patchAssignable states prev_end patchAssignable states compiled.end Code.c_bounded.fold.patch compiled prev_end empty greedy possessive (fun (r : NFA.Unchecked.StateID) (s : Array NFA.Unchecked.State) => stateIdNextOfLt states r s assignableIf states s patchAssignable s r, fun (x : String) => False, PUnit.unit)
theorem Compiler.Lemmas.c_bounded.fold.patch_lift_spec (compiled : ThompsonRef) (prev_end empty : NFA.Unchecked.StateID) (greedy possessive : Bool) (states : Array NFA.Unchecked.State) (captures : Array NFA.Capture) :
fun (s : Array NFA.Unchecked.State × Array NFA.Capture × Array Nat) => (s.fst = states tRefLt compiled states prev_end < states.size empty < states.size NextOfLt states patchAssignable states prev_end patchAssignable states compiled.end) s.snd.fst = captures cValid captures liftM (Code.c_bounded.fold.patch compiled prev_end empty greedy possessive) (fun (r : NFA.Unchecked.StateID) (s : Array NFA.Unchecked.State × Array NFA.Capture × Array Nat) => (stateIdNextOfLt states r s.fst assignableIf states s.fst patchAssignable s.fst r) s.snd.fst = captures cMemAndValid captures s.snd.fst, fun (x : String) => False, PUnit.unit)
@[simp]
theorem Compiler.Lemmas.cMemAndValid_iff (prev caps : Array NFA.Capture) :
cMemAndValid prev caps (∀ (a : NFA.Capture), a preva caps) NFA.Capture.Valid caps
@[irreducible]
@[irreducible]
theorem Compiler.Lemmas.c_bounded_spec (hir : Syntax.Hir) (min max : Nat) (greedy possessive : Bool) (states : Array NFA.Unchecked.State) (captures : Array NFA.Capture) :
@[irreducible]
@[irreducible]
theorem Compiler.Lemmas.c_bounded_fold_spec (hir : Syntax.Hir) (n : Nat) («prefix» : ThompsonRef) (empty : NFA.Unchecked.StateID) (greedy possessive : Bool) (states : Array NFA.Unchecked.State) (captures : Array NFA.Capture) :
fun (s : Array NFA.Unchecked.State × Array NFA.Capture × Array Nat) => s.fst = states tRefLt «prefix» states empty < states.size NextOfLt states patchAssignable states «prefix».end s.snd.fst = captures cValid captures Code.c_bounded.fold hir n «prefix» empty greedy possessive (fun (r : NFA.Unchecked.StateID) (s : Array NFA.Unchecked.State × Array NFA.Capture × Array Nat) => stateIdNextOfLeLt states r s.fst assignableIf states s.fst patchAssignable s.fst r cMemAndValid captures s.snd.fst, fun (x : String) => False, PUnit.unit)
theorem Compiler.Lemmas.compile_nextOf_lt {states : Array NFA.Unchecked.State} {captures : Array NFA.Capture} {groups : Array Nat} {anchored : Bool} {expr : Syntax.Hir} (h : Code.compile anchored expr (#[], #[], #[]) = EStateM.Result.ok () (states, captures, groups)) :
NextOfLt states
theorem Compiler.Lemmas.compile_captures_valid {states : Array NFA.Unchecked.State} {captures : Array NFA.Capture} {groups : Array Nat} {anchored : Bool} {expr : Syntax.Hir} (h : Code.compile anchored expr (#[], #[], #[]) = EStateM.Result.ok () (states, captures, groups)) :