Defining recursive function over product type
问题 I'm trying to formalize each integer as an equivalence class of pairs of natural numbers, where the first component is the positive part, and the second component is the negative part. Definition integer : Type := prod nat nat. I want to define a normalization function where positives and negatives cancel as much as possible. Fixpoint normalize (i : integer) : integer := let (a, b) := i in match a with | 0 => (0, b) | S a' => match b with | 0 => (S a', 0) | S b' => normalize (a', b') end end.