Inductive Ex (T: Type) (P: T -> Type): Type :=
| witness: forall (t: T), P t -> Ex T P .
Definition iso: forall (T: Type) (P: T -> Type) (S: Type),
(Ex T P -> S)
->
(forall (t: T), P t -> S) :=
fun (T: Type) (P: T -> Type) (S: Type)
(h: Ex T P -> S) (t: T) (h2: P t) =>
h (witness T P t h2) .
Definition osi: forall (T: Type) (P: T -> Type) (S: Type),
(forall (t: T), P t -> S)
->
(Ex T P -> S) :=
fun (T: Type) (P: T -> Type) (S: Type)
(h: forall (t: T), P t -> S)
(h2: Ex T P) =>
match h2 with
witness x h3 => h x h3
end
.