Article FRAENKEL, MML version 4.99.1005

:: FRAENKEL:sch 1
scheme FRAENKEL:sch 1
{F1 -> non empty set,
  F2 -> set}:
{F2(b1) where b1 is Element of F1(): P1[b1]} c= {F2(b1) where b1 is Element of F1(): P2[b1]}
provided
   for b1 being Element of F1()
         st P1[b1]
      holds P2[b1];


:: FRAENKEL:sch 2
scheme FRAENKEL:sch 2
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2]} c= {F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P2[b1, b2]}
provided
   for b1 being Element of F1()
   for b2 being Element of F2()
         st P1[b1, b2]
      holds P2[b1, b2];


:: FRAENKEL:sch 3
scheme FRAENKEL:sch 3
{F1 -> non empty set,
  F2 -> set}:
{F2(b1) where b1 is Element of F1(): P1[b1]} = {F2(b1) where b1 is Element of F1(): P2[b1]}
provided
   for b1 being Element of F1() holds
         P1[b1]
      iff
         P2[b1];


:: FRAENKEL:sch 4
scheme FRAENKEL:sch 4
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2]} = {F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P2[b1, b2]}
provided
   for b1 being Element of F1()
   for b2 being Element of F2() holds
         P1[b1, b2]
      iff
         P2[b1, b2];


:: FRAENKEL:sch 5
scheme FRAENKEL:sch 5
{F1 -> non empty set,
  F2 -> set,
  F3 -> set}:
{F2(b1) where b1 is Element of F1(): P1[b1]} = {F3(b1) where b1 is Element of F1(): P1[b1]}
provided
   for b1 being Element of F1() holds
      F2(b1) = F3(b1);


:: FRAENKEL:sch 6
scheme FRAENKEL:sch 6
{F1 -> non empty set,
  F2 -> set,
  F3 -> set}:
{F2(b1) where b1 is Element of F1(): P1[b1]} = {F3(b1) where b1 is Element of F1(): P1[b1]}
provided
   for b1 being Element of F1()
         st P1[b1]
      holds F2(b1) = F3(b1);


:: FRAENKEL:sch 7
scheme FRAENKEL:sch 7
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set,
  F4 -> set}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2]} = {F4(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2]}
provided
   for b1 being Element of F1()
   for b2 being Element of F2() holds
      F3(b1, b2) = F4(b1, b2);


:: FRAENKEL:sch 8
scheme FRAENKEL:sch 8
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2]} = {F3(b2, b1) where b1 is Element of F1(), b2 is Element of F2(): P2[b1, b2]}
provided
   for b1 being Element of F1()
   for b2 being Element of F2() holds
         P1[b1, b2]
      iff
         P2[b1, b2]
and
   for b1 being Element of F1()
   for b2 being Element of F2() holds
      F3(b1, b2) = F3(b2, b1);


:: FRAENKEL:th 3
theorem
for b1, b2 being non empty set
for b3, b4 being Function-like quasi_total Relation of b1,b2
for b5 being set
   st b3 | b5 = b4 | b5
for b6 being Element of b1
      st b6 in b5
   holds b3 . b6 = b4 . b6;

:: FRAENKEL:th 5
theorem
for b1, b2 being set holds
Funcs(b1,b2) c= bool [:b1,b2:];

:: FRAENKEL:th 6
theorem
for b1 being non empty set
for b2, b3, b4 being set
   st Funcs(b3,b4) <> {} & b3 c= b2 & b4 c= b1
for b5 being Element of Funcs(b3,b4) holds
   b5 is Function-like Relation of b2,b1;

:: FRAENKEL:sch 9
scheme FRAENKEL:sch 9
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set,
  F4 -> Function-like quasi_total Relation of F1(),F2(),
  F5 -> Function-like quasi_total Relation of F1(),F2()}:
{F4() . b1 where b1 is Element of F1(): P1[b1] & b1 in F3()} = {F5() . b1 where b1 is Element of F1(): P2[b1] & b1 in F3()}
provided
   F4() | F3() = F5() | F3()
and
   for b1 being Element of F1()
         st b1 in F3()
      holds    P1[b1]
      iff
         P2[b1];


:: FRAENKEL:sch 10
scheme FRAENKEL:sch 10
{F1 -> non empty set}:
{b1 where b1 is Element of F1(): P1[b1]} c= F1()


:: FRAENKEL:sch 11
scheme FRAENKEL:sch 11
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
for b1 being Element of F1()
for b2 being Element of F2()
      st P1[b1, b2]
   holds P2[F3(b1, b2)]
provided
   for b1 being set
         st b1 in {F3(b2, b3) where b2 is Element of F1(), b3 is Element of F2(): P1[b2, b3]}
      holds P2[b1];


:: FRAENKEL:sch 12
scheme FRAENKEL:sch 12
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
for b1 being set
      st b1 in {F3(b2, b3) where b2 is Element of F1(), b3 is Element of F2(): P1[b2, b3]}
   holds P2[b1]
provided
   for b1 being Element of F1()
   for b2 being Element of F2()
         st P1[b1, b2]
      holds P2[F3(b1, b2)];


:: FRAENKEL:sch 13
scheme FRAENKEL:sch 13
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> non empty set,
  F4 -> Element of F3()}:
{b1 where b1 is Element of F3(): b1 in {F4(b2, b3) where b2 is Element of F1(), b3 is Element of F2(): P1[b2, b3]} & P2[b1]} = {F4(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2] & P2[F4(b1, b2)]}


:: FRAENKEL:sch 14
scheme FRAENKEL:sch 14
{F1 -> non empty set,
  F2 -> set}:
{F2(b1) where b1 is Element of F1(): b1 in {b2 where b2 is Element of F1(): P2[b2]} & P1[b1]} = {F2(b1) where b1 is Element of F1(): P2[b1] & P1[b1]}


:: FRAENKEL:sch 15
scheme FRAENKEL:sch 15
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): b1 in {b3 where b3 is Element of F1(): P2[b3]} & P1[b1, b2]} = {F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P2[b1] & P1[b1, b2]}


:: FRAENKEL:sch 16
scheme FRAENKEL:sch 16
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P1[b1, b2]} c= {F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P2[b1, b2]}
provided
   for b1 being Element of F1()
   for b2 being Element of F2()
         st P1[b1, b2]
      holds ex b3 being Element of F1() st
         P2[b3, b2] & F3(b1, b2) = F3(b3, b2);


:: FRAENKEL:sch 17
scheme FRAENKEL:sch 17
{F1 -> non empty set,
  F2 -> set,
  F3 -> set}:
{F3(b1) where b1 is Element of F1(): F3(b1) in F2() & P1[b1]} c= F2()


:: FRAENKEL:sch 18
scheme FRAENKEL:sch 18
{F1 -> non empty set,
  F2 -> set,
  F3 -> set}:
{F3(b1) where b1 is Element of F1(): P1[b1] & not F3(b1) in F2()} misses F2()


:: FRAENKEL:sch 19
scheme FRAENKEL:sch 19
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set,
  F4 -> Element of F2()}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): P2[b1, b2]} = {F3(b1, F4()) where b1 is Element of F1(): P1[b1, F4()]}
provided
   for b1 being Element of F1()
   for b2 being Element of F2() holds
         P2[b1, b2]
      iff
         b2 = F4() & P1[b1, b2];


:: FRAENKEL:sch 20
scheme FRAENKEL:sch 20
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set,
  F4 -> Element of F2()}:
{F3(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): b2 = F4() & P1[b1, b2]} = {F3(b1, F4()) where b1 is Element of F1(): P1[b1, F4()]}


:: FRAENKEL:attrnot 1 => FRAENKEL:attr 1
definition
  let a1 be set;
  attr a1 is functional means
    for b1 being set
          st b1 in a1
       holds b1 is Relation-like Function-like set;
end;

:: FRAENKEL:dfs 1
definiens
  let a1 be set;
To prove
     a1 is functional
it is sufficient to prove
  thus for b1 being set
          st b1 in a1
       holds b1 is Relation-like Function-like set;

:: FRAENKEL:def 1
theorem
for b1 being set holds
      b1 is functional
   iff
      for b2 being set
            st b2 in b1
         holds b2 is Relation-like Function-like set;

:: FRAENKEL:exreg 1
registration
  cluster non empty functional set;
end;

:: FRAENKEL:condreg 1
registration
  let a1 be functional set;
  cluster -> Relation-like Function-like (Element of a1);
end;

:: FRAENKEL:th 8
theorem
for b1 being Relation-like Function-like set holds
   {b1} is functional;

:: FRAENKEL:funcreg 1
registration
  let a1, a2 be set;
  cluster Funcs(a1,a2) -> functional;
end;

:: FRAENKEL:modenot 1 => FRAENKEL:mode 1
definition
  let a1, a2 be set;
  mode FUNCTION_DOMAIN of A1,A2 -> non empty functional set means
    for b1 being Element of it holds
       b1 is Function-like quasi_total Relation of a1,a2;
end;

:: FRAENKEL:dfs 2
definiens
  let a1, a2 be set;
  let a3 be non empty functional set;
To prove
     a3 is FUNCTION_DOMAIN of a1,a2
it is sufficient to prove
  thus for b1 being Element of a3 holds
       b1 is Function-like quasi_total Relation of a1,a2;

:: FRAENKEL:def 2
theorem
for b1, b2 being set
for b3 being non empty functional set holds
      b3 is FUNCTION_DOMAIN of b1,b2
   iff
      for b4 being Element of b3 holds
         b4 is Function-like quasi_total Relation of b1,b2;

:: FRAENKEL:th 10
theorem
for b1, b2 being set
for b3 being Function-like quasi_total Relation of b1,b2 holds
   {b3} is FUNCTION_DOMAIN of b1,b2;

:: FRAENKEL:th 11
theorem
for b1 being non empty set
for b2 being set holds
   Funcs(b2,b1) is FUNCTION_DOMAIN of b2,b1;

:: FRAENKEL:funcnot 1 => FRAENKEL:func 1
definition
  let a1 be set;
  let a2 be non empty set;
  redefine func Funcs(a1,a2) -> FUNCTION_DOMAIN of a1,a2;
end;

:: FRAENKEL:modenot 2 => FRAENKEL:mode 2
definition
  let a1 be set;
  let a2 be non empty set;
  let a3 be FUNCTION_DOMAIN of a1,a2;
  redefine mode Element of a3 -> Function-like quasi_total Relation of a1,a2;
end;

:: FRAENKEL:th 14
theorem
for b1 being non empty set
for b2, b3, b4 being set
   st Funcs(b3,b4) <> {} & b3 c= b2 & b4 c= b1
for b5 being Element of Funcs(b3,b4) holds
   ex b6 being Element of Funcs(b2,b1) st
      b6 | b3 = b5;

:: FRAENKEL:th 15
theorem
for b1 being non empty set
for b2, b3 being set
for b4 being Element of Funcs(b2,b1) holds
   b4 | b3 = b4 | (b2 /\ b3);

:: FRAENKEL:sch 21
scheme FRAENKEL:sch 21
{F1 -> non empty set,
  F2 -> set,
  F3 -> set}:
{F3(b1) where b1 is Element of F1(): b1 in F2()} is finite
provided
   F2() is finite;


:: FRAENKEL:sch 22
scheme FRAENKEL:sch 22
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set,
  F4 -> set,
  F5 -> set}:
{F5(b1, b2) where b1 is Element of F1(), b2 is Element of F2(): b1 in F3() & b2 in F4()} is finite
provided
   F3() is finite
and
   F4() is finite;


:: FRAENKEL:sch 23
scheme FRAENKEL:sch 23
{F1 -> non empty set,
  F2 -> Element of Fin F1()}:
for b1 being Element of F1()
      st b1 in F2()
   holds ex b2 being Element of F1() st
      b2 in F2() &
       P1[b2, b1] &
       (for b3 being Element of F1()
             st b3 in F2() & P1[b3, b2]
          holds P1[b2, b3])
provided
   for b1 being Element of F1() holds
      P1[b1, b1]
and
   for b1, b2, b3 being Element of F1()
         st P1[b1, b2] & P1[b2, b3]
      holds P1[b1, b3];


:: FRAENKEL:sch 24
scheme FRAENKEL:sch 24
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> Element of Fin F2(),
  F4 -> Element of F1()}:
ex b1 being Element of Fin F1() st
   for b2 being Element of F1() holds
         b2 in b1
      iff
         ex b3 being Element of F2() st
            b3 in F3() & b2 = F4(b3) & P1[b2, b3]


:: FRAENKEL:th 16
theorem
for b1, b2 being set
      st b1 is finite & b2 is finite
   holds Funcs(b1,b2) is finite;

:: FRAENKEL:funcreg 2
registration
  let a1, a2 be finite set;
  cluster Funcs(a1,a2) -> finite;
end;

:: FRAENKEL:sch 25
scheme FRAENKEL:sch 25
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set,
  F4 -> set,
  F5 -> set}:
{F5(b1) where b1 is Element of Funcs(F1(),F2()): b1 .: F3() c= F4()} is finite
provided
   F3() is finite
and
   F4() is finite
and
   for b1, b2 being Element of Funcs(F1(),F2())
         st b1 | F3() = b2 | F3()
      holds F5(b1) = F5(b2);


:: FRAENKEL:sch 26
scheme FRAENKEL:sch 26
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> Element of Fin F1()}:
ex b1 being Function-like quasi_total Relation of F1(),F2() st
   for b2 being Element of F1()
         st b2 in F3()
      holds P1[b2, b1 . b2]
provided
   for b1 being Element of F1()
         st b1 in F3()
      holds ex b2 being Element of F2() st
         P1[b1, b2];


:: FRAENKEL:sch 27
scheme FRAENKEL:sch 27
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> Element of Fin F1()}:
ex b1 being Element of Funcs(F1(),F2()) st
   for b2 being Element of F1()
         st b2 in F3()
      holds P1[b2, b1 . b2]
provided
   for b1 being Element of F1()
         st b1 in F3()
      holds ex b2 being Element of F2() st
         P1[b1, b2];


:: FRAENKEL:th 17
theorem
for b1 being functional set
for b2 being set
      st b2 c= b1
   holds b2 is functional;

:: FRAENKEL:funcreg 3
registration
  let a1, a2 be set;
  cluster PFuncs(a1,a2) -> functional;
end;

:: FRAENKEL:sch 28
scheme FRAENKEL:sch 28
{F1 -> non empty set,
  F2 -> non empty set,
  F3 -> set}:
{b1 where b1 is Element of F2(): ex b2 being Element of F1() st
   P1[b2, b1] & b2 in F3()} is finite
provided
   F3() is finite
and
   for b1 being Element of F1()
   for b2, b3 being Element of F2()
         st P1[b1, b2] & P1[b1, b3]
      holds b2 = b3;