Section H10C_SAT_to_SysF_INH.
Variable h10cs : list h10c. (* instance of the Diophantine constraint problem *)
Fixpoint variable_bound (h10cs : list h10c) : nat :=
match h10cs with
| [] => 0
| (h10c_one x) :: h10cs => 1 + x + variable_bound h10cs
| (h10c_plus x y z) :: h10cs => 1 + x + y + z + variable_bound h10cs
| (h10c_mult x y z) :: h10cs => 1 + x + y + z + variable_bound h10cs
end.
Definition δ := variable_bound h10cs. (* fresh variable offset *)

(* δ is an upper bound on Diophantine variables *)
Lemma δP :
Forall (fun c =>
match c with
| (h10c_one x) => x < δ
| (h10c_plus x y z) => x < δ /\ y < δ /\ z < δ
| (h10c_mult x y z) => x < δ /\ y < δ /\ z < δ
end) h10cs.