begin
scheme  
Separation{ 
F1() 
->    set , 
P1[   
set ] } :
 ex 
X being    
set  st 
 for 
x being    
set  holds 
 ( 
x in X iff ( 
x in F1() & 
P1[
x] ) )
 
 
 
definition
 
coherence 
 the   empty   set  is    set 
 ;
let X, 
Y be    
set ;
 
func X \/ Y ->    set  means :
Def3: 
 for 
x being    
set  holds 
 ( 
x in it iff ( 
x in X or 
x in Y ) );
 
existence 
 ex b1 being    set  st 
 for x being    set  holds 
 ( x in b1 iff ( x in X or x in Y ) )
 
uniqueness 
 for b1, b2 being    set   st (  for x being    set  holds 
 ( x in b1 iff ( x in X or x in Y ) ) ) & (  for x being    set  holds 
 ( x in b2 iff ( x in X or x in Y ) ) ) holds 
b1 = b2
 
commutativity 
 for b1, X, Y being    set   st (  for x being    set  holds 
 ( x in b1 iff ( x in X or x in Y ) ) ) holds 
 for x being    set  holds 
 ( x in b1 iff ( x in Y or x in X ) )
 ;
idempotence 
 for X, x being    set  holds 
 ( x in X iff ( x in X or x in X ) )
 ;
 
func X /\ Y ->    set  means :
Def4: 
 for 
x being    
set  holds 
 ( 
x in it iff ( 
x in X & 
x in Y ) );
 
existence 
 ex b1 being    set  st 
 for x being    set  holds 
 ( x in b1 iff ( x in X & x in Y ) )
 
uniqueness 
 for b1, b2 being    set   st (  for x being    set  holds 
 ( x in b1 iff ( x in X & x in Y ) ) ) & (  for x being    set  holds 
 ( x in b2 iff ( x in X & x in Y ) ) ) holds 
b1 = b2
 
commutativity 
 for b1, X, Y being    set   st (  for x being    set  holds 
 ( x in b1 iff ( x in X & x in Y ) ) ) holds 
 for x being    set  holds 
 ( x in b1 iff ( x in Y & x in X ) )
 ;
idempotence 
 for X, x being    set  holds 
 ( x in X iff ( x in X & x in X ) )
 ;
 
func X \ Y ->    set  means :
Def5: 
 for 
x being    
set  holds 
 ( 
x in it iff ( 
x in X &  not 
x in Y ) );
 
existence 
 ex b1 being    set  st 
 for x being    set  holds 
 ( x in b1 iff ( x in X &  not x in Y ) )
 
uniqueness 
 for b1, b2 being    set   st (  for x being    set  holds 
 ( x in b1 iff ( x in X &  not x in Y ) ) ) & (  for x being    set  holds 
 ( x in b2 iff ( x in X &  not x in Y ) ) ) holds 
b1 = b2
 
 
end;
 
:: 
deftheorem Def5   defines 
\ XBOOLE_0:def 5 : 
 for X, Y, b3 being    set  holds 
 ( b3 = X \ Y iff  for x being    set  holds 
 ( x in b3 iff ( x in X &  not x in Y ) ) );
theorem 
 for 
x, 
X, 
Y being    
set  holds 
 ( 
x in X \+\ Y iff ( ( 
x in X &  not 
x in Y ) or ( 
x in Y &  not 
x in X ) ) )
 
theorem 
 for 
X, 
Y, 
Z being    
set   st (  for 
x being    
set  holds 
 (  not 
x in X iff ( 
x in Y iff 
x in Z ) ) ) holds 
X = Y \+\ Z
 
Lm1: 
 for X being    set   st X is  empty  holds 
X =  {} 
 
theorem Th3: 
 for 
X, 
Y being    
set  holds 
 ( 
X meets Y iff  ex 
x being    
set  st 
( 
x in X & 
x in Y ) )
 
scheme  
Extensionality{ 
F1() 
->    set , 
F2() 
->    set , 
P1[   
set ] } :
provided
A1: 
 for 
x being    
set  holds 
 ( 
x in F1() iff 
P1[
x] )
 
and A2: 
 for 
x being    
set  holds 
 ( 
x in F2() iff 
P1[
x] )
 
 
 
scheme  
SetEq{ 
P1[   
set ] } :
 for 
X1, 
X2 being    
set   st (  for 
x being    
set  holds 
 ( 
x in X1 iff 
P1[
x] ) ) & (  for 
x being    
set  holds 
 ( 
x in X2 iff 
P1[
x] ) ) holds 
X1 = X2
  
 
begin
theorem 
 for 
X, 
Y being    
set   st 
X c< Y holds 
 ex 
x being    
set  st 
( 
x in Y &  not 
x in X )