(* assignment of a value*)
Fixpoint value_assignment (qic:assignment_constructor) (v:value) {struct v}:=
   match v with
  | c_capply c lv => qic c (map (value_assignment qic) lv)
   end.

(* Specifications: *)
Lemma value_size_le_QI qic cs: additive qic cs -> constructor_non_zero cs -> forall v:value, value_size v <= value_assignment qic v.
Lemma QI_le_value_size qic cs: additive qic cs -> mcs_is_max_constructor_size cs -> forall v:value, value_assignment qic v <= mcs*(value_size v).