fact: Record Parser {Char} (G : grammar Char) {HSLM : StringLikeMin Char} (HSL : StringLike Char) := { has_parse : @String Char HSLM -> bool; has_parse_sound : forall str, has_parse str = true -> parse_of_item G str (NonTerminal (Start_symbol G)); has_parse_complete : forall str, parse_of_item G str (NonTerminal (Start_symbol G)) -> has_parse str = true; parse : @String Char HSLM -> option (@simple_parse_of_item Char); parse_correct : forall str, has_parse str = if parse str then true else false; parse_sound : forall str t, parse str = Some t -> simple_parse_of_item_correct G str (NonTerminal (Start_symbol G)) t }.
imports: Fiat.Parsers.ContextFreeGrammar.Core Fiat.Parsers.ContextFreeGrammar.SimpleCorrectness Fiat.Parsers.ContextFreeGrammar.PreNotations Fiat.Parsers.ContextFreeGrammar.Carriers