module TotalParserCombinators.BreadthFirst where
open import TotalParserCombinators.Parser
open import TotalParserCombinators.Congruence as C
open import TotalParserCombinators.Congruence.Sound as CS
open import TotalParserCombinators.BreadthFirst.Derivative public
using (D; D-bag; parse)
open import TotalParserCombinators.BreadthFirst.SoundComplete public
using (sound; complete; D-sound; D-complete)
open import TotalParserCombinators.BreadthFirst.LeftInverse public
using (complete∘sound)
open import TotalParserCombinators.BreadthFirst.RightInverse public
using (sound∘complete)
open import TotalParserCombinators.BreadthFirst.Lemmas public
D-congP : ∀ {k Tok R xs₁ xs₂}
{p₁ : Parser Tok R xs₁} {p₂ : Parser Tok R xs₂} →
p₁ ≈[ k ]P p₂ → ∀ {t} → D t p₁ ≈[ k ]P D t p₂
D-congP p₁≈p₂ = C.complete (D-cong (CS.sound p₁≈p₂))