fact: Record CFGV := { Terminal : Type; VarSym : Type; TNonTerminal : Type; PNonTerminal : Type; PatProd : Type; EmbedProd : Type; TermProd : Type; varSem : VarSym -> VarType; vSubstType : VarSym -> TNonTerminal; tSemType : Terminal -> Type; ppLhsRhs: PatProd -> (PNonTerminal * list (PNonTerminal + (Terminal + VarSym))); epLhsRhs : EmbedProd -> (PNonTerminal * TNonTerminal); tpLhsRhs: TermProd -> (TNonTerminal * list ((PNonTerminal + VarSym) +(Terminal+TNonTerminal))); bindingInfo : TermProd -> list (nat * nat); bindingInfoCorrect: forall (p: TermProd), ValidIndices (bindingInfo p) (snd (tpLhsRhs p)); DeqVarSym : Deq VarSym; deqT : Deq Terminal; deqNT : Deq TNonTerminal; deqPT : Deq PNonTerminal; deqPr : Deq TermProd; deqEm : Deq EmbedProd; deqPPr : Deq PatProd; deqTSem : forall (t: Terminal), Deq (tSemType t) }.
imports: GVariables