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_from_value := (Syntax.term_from_value variable function (constructor:=constructor)).Notation term_from_pattern := (Syntax.term_from_pattern (variable:=variable) function (constructor:=constructor)).Notation cache := (CBV_cache.cache variable function constructor).Notation cache_path := (CBV_cache.cache_path variable_eq_dec function_eq_dec constructor_eq_dec).Notation cache_path_transitivity := 
           (@CBV_cache.cache_path_transitivity _ _ _ variable_eq_dec function_eq_dec constructor_eq_dec).Notation cache_path_transitivity_left :=
           (@CBV_cache.cache_path_transitivity_left _ _ _ variable_eq_dec function_eq_dec constructor_eq_dec).Notation cbv := (CBV_cache.cbv variable function constructor).Notation wf := (CBV_cache.wf variable_eq_dec  function_eq_dec constructor_eq_dec rule_default
                prog max_arity).(*Definition 11*)
Definition assignment_constructor := constructor -> list nat -> nat.Definition assignment_function := function -> list nat -> nat.Definition constructor_non_zero cs :=
   forall c:constructor, cs  c > 0.Definition additive (qic:assignment_constructor) cs :=
   forall c:constructor, forall l, qic c l=(suml l)+(cs c).Definition mcs_is_max_constructor_size cs :=
    forall c:constructor, cs c <= mcs.

(* Specifications: *)
Lemma monotonicity_qic qic cs: additive qic cs -> forall c:constructor, forall lx ly, Forall2 le lx ly -> qic c lx <= qic c ly.