Set Implicit Arguments.
Global Set Asymmetric Patterns.
Require Export Basics.
Arguments eq {A}.
Arguments fst {A B}.
Hint Unfold compose.
Definition proj1_conj (A B: Prop) (c: A /\ B): A :=
match c with conj x _ => x end.
Definition proj2_conj (A B: Prop) (c: A /\ B): B :=
match c with conj _ x => x end.
Definition map_snd (A B: Set) (f: A -> B) (C: Set) (p: C * A): C * B := (fst p, f (snd p)).

Lemma fst_map_snd (A B: Set) (f: A -> B) (C: Set) (p: C * A): fst (map_snd f p) = fst p.