Section relations_noetherian.
Variable U : Set.
Variable R : U -> U -> Prop.
(* Sets as characteristic predicates over universe U *)
Definition a_set := U -> Prop.
(* A is a subset of B *)
Definition sub (A B : a_set) := forall x : U, A x -> B x.
(* The full universe *)
Definition universal (A : a_set) := forall x : U, A x.
(* Adjoint map *)
Definition adjoint (A : a_set) : a_set := fun x : U => sub (R x) A.
Definition hereditary (A : a_set) := sub (adjoint A) A.
(*  i.e  (hereditary A) <-> (x:A)(sub (R x) A)->(A x) *)
Definition explicit_noetherian :=
forall A : a_set, hereditary A -> universal A.
End relations_noetherian.
Notation noetherian := (explicit_noetherian _) (only parsing).
(* <Warning> : Syntax is discontinued *)
(**********************)
(* quelques resultats *)
(* sur le Ex *)
Goal
forall (A : Set) (P Q : A -> Prop),
(exists u : A, P u /\ Q u) -> exists u : A, Q u /\ P u.
simple induction 1; intros u1 H1.
elim H1; intros H2 H3.
exists u1; split; assumption.
Save Ex_PQ.
Hint Resolve Ex_PQ.
(* sur les constructions de relations *)

Lemma star_trans :
forall (A : Set) (R : A -> A -> Prop) (x y z : A),
explicit_star _ R x y -> explicit_star _ R y z -> explicit_star _ R x z.