Set Implicit Arguments.
Definition ijs (n: nat): list (nat * nat) :=
concat (map (fun j => map (fun i => (i, j)) (nats 0 j)) (nats 0 n)).
Proof with auto with arith.
unfold ijs.
intros.
apply In_concat with (map (fun x: nat => (x, j)) (nats 0 j)).
apply (in_map (fun i: nat => (i, j))).
apply In_nats...
apply (in_map (fun j0: nat => map (fun i0: nat => (i0, j0)) (nats 0 j0))).
apply In_nats...
Qed.

Lemma In_ijs_inv n i j: List.In (i, j) (ijs n) -> (i < j < n)%nat.