λT1,T2:Type.λp:ProdT T1 T2.match p with [ pair _ x ⇒ x ].
ndefinition eq_pair ≝
-λT1,T2:Type.λp1,p2:ProdT T1 T2.
+λT1,T2:Type.
λf1:T1 → T1 → bool.λf2:T2 → T2 → bool.
+λp1,p2:ProdT T1 T2.
(f1 (fst … p1) (fst … p2)) ⊗
(f2 (snd … p1) (snd … p2)).
λT1.λT2.λT3.λp:Prod3T T1 T2 T3.match p with [ triple _ _ x ⇒ x ].
ndefinition eq_triple ≝
-λT1,T2,T3:Type.λp1,p2:Prod3T T1 T2 T3.
+λT1,T2,T3:Type.
λf1:T1 → T1 → bool.λf2:T2 → T2 → bool.λf3:T3 → T3 → bool.
+λp1,p2:Prod3T T1 T2 T3.
(f1 (fst3T … p1) (fst3T … p2)) ⊗
(f2 (snd3T … p1) (snd3T … p2)) ⊗
(f3 (thd3T … p1) (thd3T … p2)).
λT1.λT2.λT3.λT4.λp:Prod4T T1 T2 T3 T4.match p with [ quadruple _ _ _ x ⇒ x ].
ndefinition eq_quadruple ≝
-λT1,T2,T3,T4:Type.λp1,p2:Prod4T T1 T2 T3 T4.
+λT1,T2,T3,T4:Type.
λf1:T1 → T1 → bool.λf2:T2 → T2 → bool.λf3:T3 → T3 → bool.λf4:T4 → T4 → bool.
+λp1,p2:Prod4T T1 T2 T3 T4.
(f1 (fst4T … p1) (fst4T … p2)) ⊗
(f2 (snd4T … p1) (snd4T … p2)) ⊗
(f3 (thd4T … p1) (thd4T … p2)) ⊗
λT1.λT2.λT3.λT4.λT5.λp:Prod5T T1 T2 T3 T4 T5.match p with [ quintuple _ _ _ _ x ⇒ x ].
ndefinition eq_quintuple ≝
-λT1,T2,T3,T4,T5:Type.λp1,p2:Prod5T T1 T2 T3 T4 T5.
+λT1,T2,T3,T4,T5:Type.
λf1:T1 → T1 → bool.λf2:T2 → T2 → bool.λf3:T3 → T3 → bool.λf4:T4 → T4 → bool.λf5:T5 → T5 → bool.
+λp1,p2:Prod5T T1 T2 T3 T4 T5.
(f1 (fst5T … p1) (fst5T … p2)) ⊗
(f2 (snd5T … p1) (snd5T … p2)) ⊗
(f3 (thd5T … p1) (thd5T … p2)) ⊗