This is the smallest example that causes the problem. It should decrease, but I don't know how to reassure Coq that it will. I'm going to have to compare lots of lists of pairs for what I'm doing so this is going to come up again and again.
The error: "Cannot guess decreasing argument of fix."
Require Import Coq.Lists.List.
Import ListNotations.
Inductive type_t : Type :=
| Tuple (elements: list type_t)
| Nil.
Fixpoint equal (x: type_t) (y: type_t) : bool :=
match x, y with
| Tuple xs, Tuple ys => equal_pairs xs ys
| Nil, Nil => true
| _, _ => false
end
with equal_pairs (xs: list type_t) (ys: list type_t) : bool :=
match xs, ys with
| x :: xs', y :: ys' => if equal x y then equal_pairs xs' ys' else false
| [], [] => true
| _, _ => false
end.
```