Article FUNCT_6, MML version 4.99.1005

:: FUNCT_6:th 1
theorem
for b1, b2 being set holds
   b1 in product <*b2*>
iff
   ex b3 being set st
      b3 in b2 & b1 = <*b3*>;

:: FUNCT_6:th 2
theorem
for b1, b2, b3 being set holds
   b1 in product <*b2,b3*>
iff
   ex b4, b5 being set st
      b4 in b2 & b5 in b3 & b1 = <*b4,b5*>;

:: FUNCT_6:th 3
theorem
for b1, b2, b3, b4 being set holds
   b1 in product <*b2,b3,b4*>
iff
   ex b5, b6, b7 being set st
      b5 in b2 & b6 in b3 & b7 in b4 & b1 = <*b5,b6,b7*>;

:: FUNCT_6:th 4
theorem
for b1 being non empty set holds
   product <*b1*> = 1 -tuples_on b1;

:: FUNCT_6:th 5
theorem
for b1, b2 being non empty set holds
product <*b1,b2*> = {<*b3,b4*> where b3 is Element of b1, b4 is Element of b2: TRUE};

:: FUNCT_6:th 6
theorem
for b1 being non empty set holds
   product <*b1,b1*> = 2 -tuples_on b1;

:: FUNCT_6:th 7
theorem
for b1, b2, b3 being non empty set holds
product <*b1,b2,b3*> = {<*b4,b5,b6*> where b4 is Element of b1, b5 is Element of b2, b6 is Element of b3: TRUE};

:: FUNCT_6:th 8
theorem
for b1 being non empty set holds
   product <*b1,b1,b1*> = 3 -tuples_on b1;

:: FUNCT_6:th 9
theorem
for b1 being Element of NAT
for b2 being non empty set holds
   product (b1 |-> b2) = b1 -tuples_on b2;

:: FUNCT_6:th 10
theorem
for b1 being Relation-like Function-like set holds
   product b1 c= Funcs(proj1 b1,Union b1);

:: FUNCT_6:th 11
theorem
for b1 being set
for b2 being Relation-like Function-like set
      st b1 in proj1 ~ b2
   holds ex b3, b4 being set st
      b1 = [b3,b4];

:: FUNCT_6:th 12
theorem
for b1, b2, b3 being set holds
~ ([:b1,b2:] --> b3) = [:b2,b1:] --> b3;

:: FUNCT_6:th 13
theorem
for b1 being Relation-like Function-like set holds
   curry b1 = curry' ~ b1 & uncurry b1 = ~ uncurry' b1;

:: FUNCT_6:th 14
theorem
for b1, b2, b3 being set
      st [:b1,b2:] <> {}
   holds curry ([:b1,b2:] --> b3) = b1 --> (b2 --> b3) &
    curry' ([:b1,b2:] --> b3) = b2 --> (b1 --> b3);

:: FUNCT_6:th 15
theorem
for b1, b2, b3 being set holds
uncurry (b1 --> (b2 --> b3)) = [:b1,b2:] --> b3 &
 uncurry' (b1 --> (b2 --> b3)) = [:b2,b1:] --> b3;

:: FUNCT_6:th 16
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
      st b1 in proj1 b2 & b3 = b2 . b1
   holds proj2 b3 c= proj2 uncurry b2 & proj2 b3 c= proj2 uncurry' b2;

:: FUNCT_6:th 17
theorem
for b1 being set
for b2 being Relation-like Function-like set holds
   proj1 uncurry (b1 --> b2) = [:b1,proj1 b2:] &
    proj2 uncurry (b1 --> b2) c= proj2 b2 &
    proj1 uncurry' (b1 --> b2) = [:proj1 b2,b1:] &
    proj2 uncurry' (b1 --> b2) c= proj2 b2;

:: FUNCT_6:th 18
theorem
for b1 being set
for b2 being Relation-like Function-like set
      st b1 <> {}
   holds proj2 uncurry (b1 --> b2) = proj2 b2 & proj2 uncurry' (b1 --> b2) = proj2 b2;

:: FUNCT_6:th 19
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st [:b1,b2:] <> {} & b4 in Funcs([:b1,b2:],b3)
   holds curry b4 in Funcs(b1,Funcs(b2,b3)) & curry' b4 in Funcs(b2,Funcs(b1,b3));

:: FUNCT_6:th 20
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st b4 in Funcs(b1,Funcs(b2,b3))
   holds uncurry b4 in Funcs([:b1,b2:],b3) & uncurry' b4 in Funcs([:b2,b1:],b3);

:: FUNCT_6:th 21
theorem
for b1, b2, b3, b4, b5 being set
for b6 being Relation-like Function-like set
      st (curry b6 in Funcs(b1,Funcs(b2,b3)) or curry' b6 in Funcs(b2,Funcs(b1,b3))) &
         proj1 b6 c= [:b4,b5:]
   holds b6 in Funcs([:b1,b2:],b3);

:: FUNCT_6:th 22
theorem
for b1, b2, b3, b4, b5 being set
for b6 being Relation-like Function-like set
      st (uncurry b6 in Funcs([:b1,b2:],b3) or uncurry' b6 in Funcs([:b2,b1:],b3)) &
         proj2 b6 c= PFuncs(b4,b5) &
         proj1 b6 = b1
   holds b6 in Funcs(b1,Funcs(b2,b3));

:: FUNCT_6:th 23
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st b4 in PFuncs([:b1,b2:],b3)
   holds curry b4 in PFuncs(b1,PFuncs(b2,b3)) & curry' b4 in PFuncs(b2,PFuncs(b1,b3));

:: FUNCT_6:th 24
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st b4 in PFuncs(b1,PFuncs(b2,b3))
   holds uncurry b4 in PFuncs([:b1,b2:],b3) & uncurry' b4 in PFuncs([:b2,b1:],b3);

:: FUNCT_6:th 25
theorem
for b1, b2, b3, b4, b5 being set
for b6 being Relation-like Function-like set
      st (curry b6 in PFuncs(b1,PFuncs(b2,b3)) or curry' b6 in PFuncs(b2,PFuncs(b1,b3))) &
         proj1 b6 c= [:b4,b5:]
   holds b6 in PFuncs([:b1,b2:],b3);

:: FUNCT_6:th 26
theorem
for b1, b2, b3, b4, b5 being set
for b6 being Relation-like Function-like set
      st (uncurry b6 in PFuncs([:b1,b2:],b3) or uncurry' b6 in PFuncs([:b2,b1:],b3)) &
         proj2 b6 c= PFuncs(b4,b5) &
         proj1 b6 c= b1
   holds b6 in PFuncs(b1,PFuncs(b2,b3));

:: FUNCT_6:funcnot 1 => FUNCT_6:func 1
definition
  let a1 be set;
  func SubFuncs A1 -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 in a1 & b1 is Relation-like Function-like set;
end;

:: FUNCT_6:def 1
theorem
for b1, b2 being set holds
   b2 = SubFuncs b1
iff
   for b3 being set holds
         b3 in b2
      iff
         b3 in b1 & b3 is Relation-like Function-like set;

:: FUNCT_6:th 27
theorem
for b1 being set holds
   SubFuncs b1 c= b1;

:: FUNCT_6:th 28
theorem
for b1 being set
for b2 being Relation-like Function-like set holds
      b1 in b2 " SubFuncs proj2 b2
   iff
      b1 in proj1 b2 & b2 . b1 is Relation-like Function-like set;

:: FUNCT_6:th 29
theorem
for b1, b2, b3 being Relation-like Function-like set holds
SubFuncs {} = {} &
 SubFuncs {b1} = {b1} &
 SubFuncs {b1,b2} = {b1,b2} &
 SubFuncs {b1,b2,b3} = {b1,b2,b3};

:: FUNCT_6:th 30
theorem
for b1, b2 being set
      st b1 c= SubFuncs b2
   holds SubFuncs b1 = b1;

:: FUNCT_6:funcnot 2 => FUNCT_6:func 2
definition
  let a1 be Relation-like Function-like set;
  func doms A1 -> Relation-like Function-like set means
    proj1 it = a1 " SubFuncs proj2 a1 &
     (for b1 being set
           st b1 in a1 " SubFuncs proj2 a1
        holds it . b1 = proj1 (a1 . b1));
end;

:: FUNCT_6:def 2
theorem
for b1, b2 being Relation-like Function-like set holds
   b2 = doms b1
iff
   proj1 b2 = b1 " SubFuncs proj2 b1 &
    (for b3 being set
          st b3 in b1 " SubFuncs proj2 b1
       holds b2 . b3 = proj1 (b1 . b3));

:: FUNCT_6:funcnot 3 => FUNCT_6:func 3
definition
  let a1 be Relation-like Function-like set;
  func rngs A1 -> Relation-like Function-like set means
    proj1 it = a1 " SubFuncs proj2 a1 &
     (for b1 being set
           st b1 in a1 " SubFuncs proj2 a1
        holds it . b1 = proj2 (a1 . b1));
end;

:: FUNCT_6:def 3
theorem
for b1, b2 being Relation-like Function-like set holds
   b2 = rngs b1
iff
   proj1 b2 = b1 " SubFuncs proj2 b1 &
    (for b3 being set
          st b3 in b1 " SubFuncs proj2 b1
       holds b2 . b3 = proj2 (b1 . b3));

:: FUNCT_6:funcnot 4 => FUNCT_6:func 4
definition
  let a1 be Relation-like Function-like set;
  func meet A1 -> set equals
    meet proj2 a1;
end;

:: FUNCT_6:def 4
theorem
for b1 being Relation-like Function-like set holds
   meet b1 = meet proj2 b1;

:: FUNCT_6:th 31
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
      st b1 in proj1 b2 & b3 = b2 . b1
   holds b1 in proj1 doms b2 & (doms b2) . b1 = proj1 b3 & b1 in proj1 rngs b2 & (rngs b2) . b1 = proj2 b3;

:: FUNCT_6:th 32
theorem
doms {} = {} & rngs {} = {};

:: FUNCT_6:th 33
theorem
for b1 being Relation-like Function-like set holds
   doms <*b1*> = <*proj1 b1*> &
    rngs <*b1*> = <*proj2 b1*>;

:: FUNCT_6:th 34
theorem
for b1, b2 being Relation-like Function-like set holds
doms <*b1,b2*> = <*proj1 b1,proj1 b2*> &
 rngs <*b1,b2*> = <*proj2 b1,proj2 b2*>;

:: FUNCT_6:th 35
theorem
for b1, b2, b3 being Relation-like Function-like set holds
doms <*b1,b2,b3*> = <*proj1 b1,proj1 b2,proj1 b3*> &
 rngs <*b1,b2,b3*> = <*proj2 b1,proj2 b2,proj2 b3*>;

:: FUNCT_6:th 36
theorem
for b1 being set
for b2 being Relation-like Function-like set holds
   doms (b1 --> b2) = b1 --> proj1 b2 & rngs (b1 --> b2) = b1 --> proj2 b2;

:: FUNCT_6:th 37
theorem
for b1 being set
for b2 being Relation-like Function-like set
      st b2 <> {}
   holds    b1 in meet b2
   iff
      for b3 being set
            st b3 in proj1 b2
         holds b1 in b2 . b3;

:: FUNCT_6:th 39
theorem
for b1 being set holds
   Union <*b1*> = b1 & meet <*b1*> = b1;

:: FUNCT_6:th 40
theorem
for b1, b2 being set holds
Union <*b1,b2*> = b1 \/ b2 & meet <*b1,b2*> = b1 /\ b2;

:: FUNCT_6:th 41
theorem
for b1, b2, b3 being set holds
Union <*b1,b2,b3*> = (b1 \/ b2) \/ b3 &
 meet <*b1,b2,b3*> = (b1 /\ b2) /\ b3;

:: FUNCT_6:th 42
theorem
for b1 being set holds
   Union ({} --> b1) = {} & meet ({} --> b1) = {};

:: FUNCT_6:th 43
theorem
for b1, b2 being set
      st b1 <> {}
   holds Union (b1 --> b2) = b2 & meet (b1 --> b2) = b2;

:: FUNCT_6:funcnot 5 => FUNCT_6:func 5
definition
  let a1 be Relation-like Function-like set;
  let a2, a3 be set;
  func A1 ..(A2,A3) -> set equals
    (uncurry a1) .(a2,a3);
end;

:: FUNCT_6:def 5
theorem
for b1 being Relation-like Function-like set
for b2, b3 being set holds
b1 ..(b2,b3) = (uncurry b1) .(b2,b3);

:: FUNCT_6:th 45
theorem
for b1 being set
for b2, b3, b4 being Relation-like Function-like set
      st b1 in proj1 b2
   holds <*b2*> ..(1,b1) = b2 . b1 &
    <*b2,b3*> ..(1,b1) = b2 . b1 &
    <*b2,b3,b4*> ..(1,b1) = b2 . b1;

:: FUNCT_6:th 46
theorem
for b1 being set
for b2, b3, b4 being Relation-like Function-like set
      st b1 in proj1 b2
   holds <*b3,b2*> ..(2,b1) = b2 . b1 &
    <*b3,b2,b4*> ..(2,b1) = b2 . b1;

:: FUNCT_6:th 47
theorem
for b1 being set
for b2, b3, b4 being Relation-like Function-like set
      st b1 in proj1 b2
   holds <*b3,b4,b2*> ..(3,b1) = b2 . b1;

:: FUNCT_6:th 48
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st b1 in b2 & b3 in proj1 b4
   holds (b2 --> b4) ..(b1,b3) = b4 . b3;

:: FUNCT_6:funcnot 6 => FUNCT_6:func 6
definition
  let a1 be Relation-like Function-like set;
  func <:A1:> -> Relation-like Function-like set equals
    curry ((uncurry' a1) | [:meet doms a1,proj1 a1:]);
end;

:: FUNCT_6:def 6
theorem
for b1 being Relation-like Function-like set holds
   <:b1:> = curry ((uncurry' b1) | [:meet doms b1,proj1 b1:]);

:: FUNCT_6:th 49
theorem
for b1 being Relation-like Function-like set holds
   proj1 <:b1:> = meet doms b1 &
    proj2 <:b1:> c= product rngs b1;

:: FUNCT_6:th 50
theorem
for b1 being set
for b2 being Relation-like Function-like set
      st b1 in proj1 <:b2:>
   holds <:b2:> . b1 is Relation-like Function-like set;

:: FUNCT_6:th 51
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
      st b1 in proj1 <:b2:> & b3 = <:b2:> . b1
   holds proj1 b3 = b2 " SubFuncs proj2 b2 &
    (for b4 being set
          st b4 in proj1 b3
       holds [b4,b1] in proj1 uncurry b2 & b3 . b4 = (uncurry b2) .(b4,b1));

:: FUNCT_6:th 52
theorem
for b1 being set
for b2 being Relation-like Function-like set
   st b1 in proj1 <:b2:>
for b3 being Relation-like Function-like set
      st b3 in proj2 b2
   holds b1 in proj1 b3;

:: FUNCT_6:th 53
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
      st b2 in proj2 b3 &
         (for b4 being Relation-like Function-like set
               st b4 in proj2 b3
            holds b1 in proj1 b4)
   holds b1 in proj1 <:b3:>;

:: FUNCT_6:th 54
theorem
for b1, b2 being set
for b3, b4, b5 being Relation-like Function-like set
      st b1 in proj1 b3 & b4 = b3 . b1 & b2 in proj1 <:b3:> & b5 = <:b3:> . b2
   holds b4 . b2 = b5 . b1;

:: FUNCT_6:th 55
theorem
for b1, b2 being set
for b3 being Relation-like Function-like set
      st b1 in proj1 b3 & b3 . b1 is Relation-like Function-like set & b2 in proj1 <:b3:>
   holds b3 ..(b1,b2) = <:b3:> ..(b2,b1);

:: FUNCT_6:funcnot 7 => FUNCT_6:func 7
definition
  let a1 be Relation-like Function-like set;
  func Frege A1 -> Relation-like Function-like set means
    proj1 it = product doms a1 &
     (for b1 being Relation-like Function-like set
           st b1 in product doms a1
        holds ex b2 being Relation-like Function-like set st
           it . b1 = b2 &
            proj1 b2 = a1 " SubFuncs proj2 a1 &
            (for b3 being set
                  st b3 in proj1 b2
               holds b2 . b3 = (uncurry a1) .(b3,b1 . b3)));
end;

:: FUNCT_6:def 7
theorem
for b1, b2 being Relation-like Function-like set holds
   b2 = Frege b1
iff
   proj1 b2 = product doms b1 &
    (for b3 being Relation-like Function-like set
          st b3 in product doms b1
       holds ex b4 being Relation-like Function-like set st
          b2 . b3 = b4 &
           proj1 b4 = b1 " SubFuncs proj2 b1 &
           (for b5 being set
                 st b5 in proj1 b4
              holds b4 . b5 = (uncurry b1) .(b5,b3 . b5)));

:: FUNCT_6:th 56
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
      st b2 in product doms b3 & b1 in proj1 b2
   holds (Frege b3) ..(b2,b1) = b3 ..(b1,b2 . b1);

:: FUNCT_6:th 57
theorem
for b1 being set
for b2, b3, b4, b5 being Relation-like Function-like set
      st b1 in proj1 b2 & b3 = b2 . b1 & b4 in product doms b2 & b5 = (Frege b2) . b4
   holds b4 . b1 in proj1 b3 & b5 . b1 = b3 . (b4 . b1) & b5 in product rngs b2;

:: FUNCT_6:th 58
theorem
for b1 being Relation-like Function-like set holds
   proj2 Frege b1 = product rngs b1;

:: FUNCT_6:th 59
theorem
for b1 being Relation-like Function-like set
      st not {} in proj2 b1
   holds    Frege b1 is one-to-one
   iff
      for b2 being Relation-like Function-like set
            st b2 in proj2 b1
         holds b2 is one-to-one;

:: FUNCT_6:th 60
theorem
<:{}:> = {} &
 Frege {} = {{}} --> {};

:: FUNCT_6:th 61
theorem
for b1 being Relation-like Function-like set holds
   proj1 <:<*b1*>:> = proj1 b1 &
    (for b2 being set
          st b2 in proj1 b1
       holds <:<*b1*>:> . b2 = <*b1 . b2*>);

:: FUNCT_6:th 62
theorem
for b1, b2 being Relation-like Function-like set holds
proj1 <:<*b1,b2*>:> = (proj1 b1) /\ proj1 b2 &
 (for b3 being set
       st b3 in (proj1 b1) /\ proj1 b2
    holds <:<*b1,b2*>:> . b3 = <*b1 . b3,b2 . b3*>);

:: FUNCT_6:th 63
theorem
for b1 being set
for b2 being Relation-like Function-like set
      st b1 <> {}
   holds proj1 <:b1 --> b2:> = proj1 b2 &
    (for b3 being set
          st b3 in proj1 b2
       holds <:b1 --> b2:> . b3 = b1 --> (b2 . b3));

:: FUNCT_6:th 64
theorem
for b1 being Relation-like Function-like set holds
   proj1 Frege <*b1*> = product <*proj1 b1*> &
    proj2 Frege <*b1*> = product <*proj2 b1*> &
    (for b2 being set
          st b2 in proj1 b1
       holds (Frege <*b1*>) . <*b2*> = <*b1 . b2*>);

:: FUNCT_6:th 65
theorem
for b1, b2 being Relation-like Function-like set holds
proj1 Frege <*b1,b2*> = product <*proj1 b1,proj1 b2*> &
 proj2 Frege <*b1,b2*> = product <*proj2 b1,proj2 b2*> &
 (for b3, b4 being set
       st b3 in proj1 b1 & b4 in proj1 b2
    holds (Frege <*b1,b2*>) . <*b3,b4*> = <*b1 . b3,b2 . b4*>);

:: FUNCT_6:th 66
theorem
for b1 being set
for b2 being Relation-like Function-like set holds
   proj1 Frege (b1 --> b2) = Funcs(b1,proj1 b2) &
    proj2 Frege (b1 --> b2) = Funcs(b1,proj2 b2) &
    (for b3 being Relation-like Function-like set
          st b3 in Funcs(b1,proj1 b2)
       holds (Frege (b1 --> b2)) . b3 = b3 * b2);

:: FUNCT_6:th 67
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
   st b1 in proj1 b2 & b1 in proj1 b3
for b4, b5 being set holds
   <:b2,b3:> . b1 = [b4,b5]
iff
   <:<*b2,b3*>:> . b1 = <*b4,b5*>;

:: FUNCT_6:th 68
theorem
for b1, b2 being set
for b3, b4 being Relation-like Function-like set
   st b1 in proj1 b3 & b2 in proj1 b4
for b5, b6 being set holds
   [:b3,b4:] .(b1,b2) = [b5,b6]
iff
   (Frege <*b3,b4*>) . <*b1,b2*> = <*b5,b6*>;

:: FUNCT_6:th 69
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set
      st proj1 b2 = b1 &
         proj1 b3 = b1 &
         (for b4 being set
               st b4 in b1
            holds b2 . b4,b3 . b4 are_equipotent)
   holds product b2,product b3 are_equipotent;

:: FUNCT_6:th 70
theorem
for b1, b2, b3 being Relation-like Function-like set
      st proj1 b1 = proj1 b2 &
         proj1 b3 = proj2 b2 &
         b2 is one-to-one &
         (for b4 being set
               st b4 in proj1 b2
            holds b1 . b4,b3 . (b2 . b4) are_equipotent)
   holds product b1,product b3 are_equipotent;

:: FUNCT_6:th 71
theorem
for b1 being set
for b2 being Relation-like Function-like set
for b3 being Function-like quasi_total bijective Relation of b1,b1
      st proj1 b2 = b1
   holds product b2,product (b3 * b2) are_equipotent;

:: FUNCT_6:funcnot 8 => FUNCT_6:func 8
definition
  let a1 be Relation-like Function-like set;
  let a2 be set;
  func Funcs(A1,A2) -> Relation-like Function-like set means
    proj1 it = proj1 a1 &
     (for b1 being set
           st b1 in proj1 a1
        holds it . b1 = Funcs(a1 . b1,a2));
end;

:: FUNCT_6:def 8
theorem
for b1 being Relation-like Function-like set
for b2 being set
for b3 being Relation-like Function-like set holds
      b3 = Funcs(b1,b2)
   iff
      proj1 b3 = proj1 b1 &
       (for b4 being set
             st b4 in proj1 b1
          holds b3 . b4 = Funcs(b1 . b4,b2));

:: FUNCT_6:th 72
theorem
for b1 being Relation-like Function-like set
      st not {} in proj2 b1
   holds Funcs(b1,{}) = (proj1 b1) --> {};

:: FUNCT_6:th 73
theorem
for b1 being set holds
   Funcs({},b1) = {};

:: FUNCT_6:th 74
theorem
for b1, b2 being set holds
Funcs(<*b1*>,b2) = <*Funcs(b1,b2)*>;

:: FUNCT_6:th 75
theorem
for b1, b2, b3 being set holds
Funcs(<*b1,b2*>,b3) = <*Funcs(b1,b3),Funcs(b2,b3)*>;

:: FUNCT_6:th 76
theorem
for b1, b2, b3 being set holds
Funcs(b1 --> b2,b3) = b1 --> Funcs(b2,b3);

:: FUNCT_6:th 77
theorem
for b1 being set
for b2 being Relation-like Function-like set holds
   Funcs(Union disjoin b2,b1),product Funcs(b2,b1) are_equipotent;

:: FUNCT_6:funcnot 9 => FUNCT_6:func 9
definition
  let a1 be set;
  let a2 be Relation-like Function-like set;
  func Funcs(A1,A2) -> Relation-like Function-like set means
    proj1 it = proj1 a2 &
     (for b1 being set
           st b1 in proj1 a2
        holds it . b1 = Funcs(a1,a2 . b1));
end;

:: FUNCT_6:def 9
theorem
for b1 being set
for b2, b3 being Relation-like Function-like set holds
   b3 = Funcs(b1,b2)
iff
   proj1 b3 = proj1 b2 &
    (for b4 being set
          st b4 in proj1 b2
       holds b3 . b4 = Funcs(b1,b2 . b4));

:: FUNCT_6:th 78
theorem
for b1 being Relation-like Function-like set holds
   Funcs({},b1) = (proj1 b1) --> {{}};

:: FUNCT_6:th 79
theorem
for b1 being set holds
   Funcs(b1,{}) = {};

:: FUNCT_6:th 80
theorem
for b1, b2 being set holds
Funcs(b1,<*b2*>) = <*Funcs(b1,b2)*>;

:: FUNCT_6:th 81
theorem
for b1, b2, b3 being set holds
Funcs(b1,<*b2,b3*>) = <*Funcs(b1,b2),Funcs(b1,b3)*>;

:: FUNCT_6:th 82
theorem
for b1, b2, b3 being set holds
Funcs(b1,b2 --> b3) = b2 --> Funcs(b1,b3);

:: FUNCT_6:th 83
theorem
for b1 being set
for b2 being Relation-like Function-like set holds
   product Funcs(b1,b2),Funcs(b1,product b2) are_equipotent;

:: FUNCT_6:funcnot 10 => FUNCT_6:func 10
definition
  let a1 be Relation-like Function-like set;
  func commute A1 -> Relation-like Function-like Function-yielding set equals
    curry' uncurry a1;
end;

:: FUNCT_6:def 12
theorem
for b1 being Relation-like Function-like set holds
   commute b1 = curry' uncurry b1;

:: FUNCT_6:th 84
theorem
for b1 being Relation-like Function-like set
for b2 being set
      st b2 in proj1 commute b1
   holds (commute b1) . b2 is Relation-like Function-like set;

:: FUNCT_6:th 85
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st b1 <> {} & b2 <> {} & b4 in Funcs(b1,Funcs(b2,b3))
   holds commute b4 in Funcs(b2,Funcs(b1,b3));

:: FUNCT_6:th 86
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
   st b1 <> {} & b2 <> {} & b4 in Funcs(b1,Funcs(b2,b3))
for b5, b6 being Relation-like Function-like set
for b7, b8 being set
      st b7 in b1 & b8 in b2 & b4 . b7 = b5 & (commute b4) . b8 = b6
   holds b6 . b7 = b5 . b8 & proj1 b6 = b1 & proj1 b5 = b2 & proj2 b6 c= b3 & proj2 b5 c= b3;

:: FUNCT_6:th 87
theorem
for b1, b2, b3 being set
for b4 being Relation-like Function-like set
      st b1 <> {} & b2 <> {} & b4 in Funcs(b1,Funcs(b2,b3))
   holds commute commute b4 = b4;

:: FUNCT_6:th 88
theorem
commute {} = {};

:: FUNCT_6:th 89
theorem
for b1 being Relation-like Function-like Function-yielding set holds
   proj1 doms b1 = proj1 b1;

:: FUNCT_6:th 90
theorem
for b1 being Relation-like Function-like Function-yielding set holds
   proj1 rngs b1 = proj1 b1;