proposition: Lemma parse_nonterminal_reified_opt_interp_polynormalize_precorrect : rinterp_parse str (polypnormalize (parse_nonterminal_reified G nt) _) = BooleanRecognizer.parse_nonterminal (data := optdata) str nt.
proof: Proof. cbv [rinterp_parse]. rewrite <- opt.polypnormalize_correct by apply parse_nonterminal_reified_unfold_extensional. etransitivity; [ etransitivity; [ | apply parse_nonterminal_reified_opt_interp_precorrect ] | let p := match goal with |- context[proj1_sig ?p] => p end in apply (proj2_sig p) ]. cbv [rinterp_parse]. reflexivity. Unshelve. assumption. Qed.
imports: Fiat.Parsers.ContextFreeGrammar.PreNotations Fiat.Parsers.ContextFreeGrammar.ValidReflective Fiat.Parsers.BaseTypes Fiat.Parsers.BooleanRecognizerOptimizedReflective Fiat.Parsers.Reflective.Syntax Fiat.Parsers.Reflective.SyntaxEquivalence Fiat.Parsers.Reflective.ParserSoundnessOptimized Fiat.Parsers.Reflective.ParserPartialUnfold Fiat.Parsers.Splitters.RDPList Fiat.Parsers.StringLike.Core