Notation value := (Syntax.value constructor).Notation term := (Syntax.term variable function constructor).Notation pattern := (Syntax.pattern variable constructor).Notation rule := (Syntax.rule variable function constructor).Notation term_beq := (term_beq variable_eq_dec function_eq_dec constructor_eq_dec).Definition cache : Type := list (term * value).Notation assoc_cache := (assoc term_beq).Definition cache_beq (C C' : cache) : bool :=
  list_beq _ (prod_beq _ _ term_beq (value_beq constructor_eq_dec)) C C'.

Lemma function_beq_refl (f : function) : forall p, function_beq p f f = true.