+(* the same as Ext for a basic pair *)
+definition minus_image: ∀U,V:REL. (U ⇒_\r1 V) ⇒_2 (Ω^V ⇒_2 Ω^U).
+ intros; constructor 1;
+ [ intro r; constructor 1;
+ [ apply (λS: Ω^V. {x | ∃y:V. x ♮r y ∧ y ∈ S }).
+ intros; simplify; split; intros; cases e1; cases x; exists; [1,3: apply w]
+ split; try assumption; [ apply (. (e^-1‡#)); | apply (. (e‡#));] assumption;
+ | intros; simplify; split; simplify; intros; cases e1; cases x;
+ exists [1,3: apply w] split; try assumption;
+ [ apply (. (#‡e^-1)); | apply (. (#‡e));] assumption]
+ | intros; intro; simplify; split; simplify; intros; cases e1; exists [1,3: apply w]
+ cases x; split; try assumption;
+ [ apply (. e^-1 a2 w); | apply (. e a2 w)] assumption;]
+qed.
+
+definition foo : ∀o1,o2:REL.carr1 (o1 ⇒_\r1 o2) → carr2 (setoid2_of_setoid1 (o1 ⇒_\r1 o2)) ≝ λo1,o2,x.x.
+
+interpretation "relation f⎻*" 'OR_f_minus_star r = (fun12 ?? (minus_star_image ? ?) (foo ?? r)).
+interpretation "relation f⎻" 'OR_f_minus r = (fun12 ?? (minus_image ? ?) (foo ?? r)).
+interpretation "relation f*" 'OR_f_star r = (fun12 ?? (star_image ? ?) (foo ?? r)).
+
+definition image_coercion: ∀U,V:REL. (U ⇒_\r1 V) → Ω^U ⇒_2 Ω^V.
+intros (U V r Us); apply (image U V r); qed.
+coercion image_coercion.
+