reserve i, k, m, n for Nat,
  r, s for Real,
  rn for Real,
  x, y , z, X for set,
  T, T1, T2 for non empty TopSpace,
  p, q for Point of T,
  A, B, C for Subset of T,
  A9 for non empty Subset of T,
  pq for Element of [:the carrier of T,the carrier of T:],
  pq9 for Point of [:T,T:],
  pmet,pmet1 for Function of [:the carrier of T,the carrier of T:],REAL,
  pmet9,pmet19 for RealMap of [:T,T:] ,
  f,f1 for RealMap of T,
  FS2 for Functional_Sequence of [:the carrier of T,the carrier of T:],REAL,
  seq for Real_Sequence;

theorem Th2:
  PairFunc is bijective
proof
  now
    let nm1,nm2 be object;
    assume that
A1: nm1 in [:NAT,NAT:] and
A2: nm2 in [:NAT,NAT:] and
A3: PairFunc.nm1=PairFunc.nm2;
    consider n2,m2 be object such that
A4: n2 in NAT & m2 in NAT and
A5: [n2,m2]=nm2 by A2,ZFMISC_1:def 2;
    consider n1,m1 be object such that
A6: n1 in NAT & m1 in NAT and
A7: [n1,m1]=nm1 by A1,ZFMISC_1:def 2;
    reconsider n1,n2,m1,m2 as Element of NAT by A6,A4;
A8: (2|^n2)*(2*m2+1)-1=PairFunc.nm2 by A5,Def1;
A9: (2|^n1)*(2*m1+1)-1=PairFunc.nm1 by A7,Def1;
    then n1=n2 by A3,A8,CARD_4:4;
    hence nm1=nm2 by A3,A7,A5,A9,A8,CARD_4:4;
  end;
  hence PairFunc is one-to-one by FUNCT_2:19;
  now
    let i be object;
    assume
   i in NAT;
    then reconsider i9=i as Element of NAT;
    consider n, m be Nat such that
A10: i9+1=(2|^n) *(2*m+1) by Th1;
 n in NAT & m in NAT by ORDINAL1:def 12;
    then
A11:  [n,m] in [:NAT,NAT:] by ZFMISC_1:87;
    i9-0=((2|^n) *(2*m+1))-1 by A10;
    then dom PairFunc = [:NAT,NAT:] & i= PairFunc.[n,m] by Def1,FUNCT_2:def 1;
    hence i in rng PairFunc by FUNCT_1:def 3,A11;
  end;
  then NAT c= rng PairFunc;
  then NAT=rng PairFunc;
  hence PairFunc is onto;
end;
