fact: Definition op_from_to {T} (op : T -> T -> T) (id : T) (lower upper : Z) (f : Z -> T) : T := if (lower <=? upper)%Z then List.fold_right op id (List.map (fun x:nat => f (lower + x)%Z) (seq 0 (1 + Z.to_nat (upper - lower)))) else id.
imports: Coq.Strings.String Coq.Structures.Orders Coq.micromega.Lia Coq.Bool.Bool Coq.Sorting.Mergesort Coq.QArith.QArith Coq.QArith.Qround Coq.QArith.Qabs Coq.QArith.Qminmax Coq.NArith.NArith Coq.ZArith.ZArith Coq.Arith.Arith Coq.Lists.List PerformanceExperiments.LetIn