(* This program is free software; you can redistribute it and/or      *)
(* modify it under the terms of the GNU Lesser General Public License *)
(* as published by the Free Software Foundation; either version 2.1   *)
(* of the License, or (at your option) any later version.             *)
(*                                                                    *)
(* This program is distributed in the hope that it will be useful,    *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of     *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *)
(* GNU General Public License for more details.                       *)
(*                                                                    *)
(* You should have received a copy of the GNU Lesser General Public   *)
(* License along with this program; if not, write to the Free         *)
(* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *)
(* 02110-1301 USA                                                     *)
(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
Require Export Plump.
simple induction E1; intros A1 f1 HR1; simple induction E2; intros A2 f2 HR2.
simple induction 1; intros e1 e2.
apply INC_EQ; unfold INC in |- *.
change
(forall E : Ens,
IN E (Union (sup A1 (fun a1 : A1 => Power (Vee (f1 a1))))) ->
IN E (Union (sup A2 (fun a2 : A2 => Power (Vee (f2 a2))))))
in |- *.
intros E i.
apply
IN_sound_right with (Union (sup A1 (fun a1 : A1 => Power (Vee (f1 a1)))));
try trivial with zfc.
apply Union_sound.
split.
intros a1; elim (e1 a1).
intros a2 h.
exists a2.
apply Power_sound.
apply HR1.
assumption.
intros a2; elim (e2 a2); intros a1 h; exists a1; apply Power_sound;
auto with zfc.
change
(forall E : Ens,
IN E (Union (sup A2 (fun a2 : A2 => Power (Vee (f2 a2))))) ->
IN E (Union (sup A1 (fun a1 : A1 => Power (Vee (f1 a1))))))
in |- *.
intros E i.
apply
IN_sound_right with (Union (sup A2 (fun a2 : A2 => Power (Vee (f2 a2))))).
apply Union_sound.
split.
intros a2; elim (e2 a2); intros a1 h; exists a1.
apply Power_sound; auto with zfc.
intros a1; elim (e1 a1); intros a2 h; exists a2.
apply Power_sound; auto with zfc.
assumption.
Qed.
simple induction V; intros A f HR.
intros W i E inc.
change (IN E (Union (sup A (fun a : A => Power (Vee (f a)))))) in |- *.
apply IN_Union with (Power (Vee W)).
elim i; intros a h.
exists a.
apply Power_sound; apply Vee_sound; auto with zfc.
auto with zfc.
apply INC_IN_Power.
assumption.
Qed.

Lemma INC_IN_Vee_Succ :
forall E L : Ens, Ord L -> INC E (Vee L) -> IN E (Vee (Succ L)).