Section Subsets.
Variable a : A0.
(* We define the type of elements of A0 smaller than a w.r.t embedding. The Record is in Type, but it is possible to avoid such structure. *)
Record sub : Type :=  {witness : A0; emb_wit : emb witness a}.
(* F is its image through i0 *)
Definition F : A0 := i0 sub (Rof _ _ emb witness).
exists sub (Rof _ _ emb witness) A0 emb witness a; trivial.
exact WF_emb.
red; trivial.
exact emb_wit.
Defined.
End Subsets.
Definition fsub (a b : A0) (H : emb a b) (x : sub a) :
sub b := Build_sub _ (witness _ x) (emb_trans _ _ _ (emb_wit _ x) H).
red; intros.
exists
(sub x)
(Rof _ _ emb (witness x))
(sub y)
(Rof _ _ emb (witness y))
(fsub x y H)
(Build_sub _ x H); trivial.
apply WF_inverse_image.
exact WF_emb.
unfold morphism, Rof, fsub; simpl; intros.
trivial.
unfold Rof, fsub; simpl; intros.
apply emb_wit.
Defined.

(* Omega is embedded in itself: - F is a morphism - Omega is an upper bound of the image of F *)
Lemma Omega_refl : emb Omega Omega.