Documentation

RegexCorrectness.NFA.Compile

theorem Regex.NFA.pushRegex_get_lt {nfa : NFA} {next : } {e : Data.Expr} {nfa' : NFA} (eq : nfa.pushRegex next e = nfa') (i : ) (h : i < nfa.nodes.size) :
nfa'[i] = nfa[i]
theorem Regex.NFA.Compile.ProofData.Group.get [Group] (i : ) (h : i < nfa'.nodes.size) :
if x : i < nfa.nodes.size then nfa'[i] = nfa[i] else if x : i = nfa.nodes.size then nfa'[i] = Node.save (2 * tag + 1) next else if x : i < nfaExpr.nodes.size then nfa'[i] = nfaExpr[i] else nfa'[i] = Node.save (2 * tag) nfaExpr.start
theorem Regex.NFA.Compile.ProofData.Concat.get [Concat] (i : ) (h : i < nfa'.nodes.size) :
if x : i < nfa.nodes.size then nfa'[i] = nfa[i] else if x : i < nfa₂.nodes.size then nfa'[i] = nfa₂[i] else True
theorem Regex.NFA.ge_pushRegex_start {nfa : NFA} {next : } {e : Data.Expr} {result : NFA} (eq : nfa.pushRegex next e = result) :
nfa.nodes.size result.start
theorem Regex.NFA.eq_or_ge_of_step_pushRegex {nfa : NFA} {next : } {e : Data.Expr} {result : NFA} {i j : } (eq : nfa.pushRegex next e = result) (h₁ : nfa.nodes.size i) (h₂ : i < result.nodes.size) (step : (∃ (c : Char), j result[i].charStep c) j result[i].εStep) :
j = next nfa.nodes.size j
theorem Regex.NFA.mem_save_of_mem_tags_pushRegex {nfa : NFA} {next : } {e : Data.Expr} {result : NFA} {tag : } (eq : nfa.pushRegex next e = result) (h : tag e.tags) :
∃ (i : Fin result.nodes.size) (j : Fin result.nodes.size) (offset : ) (offset' : ), result[i] = Node.save (2 * tag) offset result[j] = Node.save (2 * tag + 1) offset'
theorem Regex.NFA.mem_save_of_mem_tags_compile {e : Data.Expr} {nfa : NFA} {tag : } (eq : compile e = nfa) (h : tag e.tags) :
∃ (i : Fin nfa.nodes.size) (j : Fin nfa.nodes.size) (offset : ) (offset' : ), nfa[i] = Node.save (2 * tag) offset nfa[j] = Node.save (2 * tag + 1) offset'
theorem Regex.NFA.lt_of_mem_tags_compile {e : Data.Expr} {nfa : NFA} {tag : } (eq : compile e = nfa) (h : tag e.tags) :
2 * tag < nfa.maxTag
theorem Regex.NFA.done_iff_zero_pushRegex {nfa : NFA} {next : } {e : Data.Expr} {result : NFA} (eq : nfa.pushRegex next e = result) (h₁ : 0 < nfa.nodes.size) (h₂ : ∀ (i : ) (isLt : i < nfa.nodes.size), nfa[i] = Node.done i = 0) (i : ) (isLt : i < result.nodes.size) :
result[i] = Node.done i = 0
theorem Regex.NFA.done_iff_zero_compile {e : Data.Expr} {nfa : NFA} (eq : compile e = nfa) (i : Fin nfa.nodes.size) :
nfa[i] = Node.done i = 0
theorem Regex.NFA.lt_zero_size_compile {e : Data.Expr} {nfa : NFA} (eq : compile e = nfa) :
0 < nfa.nodes.size
theorem Regex.NFA.lt_zero_start_compile {e : Data.Expr} {nfa : NFA} (eq : compile e = nfa) :
0 < nfa.start