structure myprod (A B : Type) := (fst : A) (snd : B) variable p : myprod nat nat variable f : nat → nat check p↣fst check p↣1 check p↣2 check p↣snd check p~>fst check p~>1 check p~>2 check p~>snd check f p↣1 check p↣1 + p↣2 example (A B : Type) : A × B → B × A := λ h, ⟨h↣2, h↣1⟩ example (A B : Type) : A × B → B × A := λ h, ⟨h↣snd, h↣fst⟩ structure position (A B : Type) := (x : A) (y : B) structure car := (pos : position nat nat) (cheap : bool) check λ c : car, c↣pos↣x check λ c : car, c↣fst check λ c : car, c↣0 check λ c : car, c↣3 check λ n : nat, n↣1 check p.1 check p.2 check λ c : car, c.1.2