reserve a,b,m,x,y,i1,i2,i3,i for Integer,
  k,p,q,n for Nat,
  c,c1,c2 for Element of NAT,
  z for set;
reserve fp,fp1 for FinSequence of NAT,

  b,c,d, n for Element of NAT,
  a for Nat;
reserve i,m,m1,m2,m3,r,s,a,b,c,c1,c2,x,y for Integer;
reserve

  a,b,c,m for Element of NAT;

theorem Th51:
  for X being finite set st card X = m holds ex fp being
  FinSequence st len fp = m & (for a st a in dom fp holds fp.a in X) & fp is
  one-to-one
proof
  defpred P[Nat] means for X being finite set holds card X = $1 implies ex fp
being FinSequence st len fp = $1 & (for a st a in dom fp holds fp.a in X) & fp
  is one-to-one;
  let X be finite set;
A1: for m being Nat st P[m] holds P[m + 1]
  proof
    let m be Nat such that
A2: P[m];
    let X be finite set;
    assume
A3: card X = m + 1;
    then consider x being object such that
A4: x in X by CARD_1:27,XBOOLE_0:def 1;
    set Y = X\{x};
    card Y = card X - card {x} by A4,EULER_1:4
      .= (m+1) - 1 by A3,CARD_1:30
      .= m;
    then consider fp1 being FinSequence such that
A5: len fp1 = m and
A6: for a st a in dom fp1 holds fp1.a in Y and
A7: fp1 is one-to-one by A2;
    set fp = fp1^<*x*>;
A8: len fp = m + 1 by A5,FINSEQ_2:16;
    for a,b being object st a in dom fp & b in dom fp & a<>b
holds fp.a <> fp.b
    proof
      let a,b be object;
      assume that
A9:   a in dom fp and
A10:  b in dom fp and
A11:  a<>b;
A12:  a in Seg (m+1) by A8,A9,FINSEQ_1:def 3;
A13:  b in Seg (m+1) by A8,A10,FINSEQ_1:def 3;
      reconsider a,b as Element of NAT by A9,A10;
      per cases by A12,FINSEQ_2:7;
      suppose
A14:    a in Seg m;
        per cases by A13,FINSEQ_2:7;
        suppose
          b in Seg m;
          then
A15:      b in dom fp1 by A5,FINSEQ_1:def 3;
          then
A16:      fp.b = fp1.b by FINSEQ_1:def 7;
A17:      a in dom fp1 by A5,A14,FINSEQ_1:def 3;
          then fp.a = fp1.a by FINSEQ_1:def 7;
          hence thesis by A7,A11,A17,A15,A16;
        end;
        suppose
A18:      b = m + 1;
          a in dom fp1 by A5,A14,FINSEQ_1:def 3;
          then fp1.a in Y & fp.a = fp1.a by A6,FINSEQ_1:def 7;
          then
A19:      not fp.a in {x} by XBOOLE_0:def 5;
          fp.b = x by A5,A18,FINSEQ_1:42;
          hence thesis by A19,TARSKI:def 1;
        end;
      end;
      suppose
A20:    a = m + 1;
        then b in Seg m by A11,A13,FINSEQ_2:7;
        then b in dom fp1 by A5,FINSEQ_1:def 3;
        then fp1.b in Y & fp.b = fp1.b by A6,FINSEQ_1:def 7;
        then not fp.b in {x} by XBOOLE_0:def 5;
        then fp.b <> x by TARSKI:def 1;
        hence thesis by A5,A20,FINSEQ_1:42;
      end;
    end;
    then
A21: for a,b being object st a in dom fp & b in dom fp & fp.a = fp.b
holds a = b;
    take fp;
    for a being object st a in dom fp holds fp.a in X
    proof
      let a be object;
      assume a in dom fp;
      then
A22:  a in Seg (m+1) by A8,FINSEQ_1:def 3;
      per cases by A22,FINSEQ_2:7;
      suppose
        a in Seg m;
        then
A23:    a in dom fp1 by A5,FINSEQ_1:def 3;
        then fp.a = fp1.a by FINSEQ_1:def 7;
        then fp.a in Y by A6,A23;
        hence thesis;
      end;
      suppose
        a = m + 1;
        hence thesis by A4,A5,FINSEQ_1:42;
      end;
    end;
    hence thesis by A5,A21,FINSEQ_2:16;
  end;
A24: P[0]
  proof
    set fp = <*>NAT;
    let X be finite set;
    assume card X = 0;
    take fp;
    thus len fp = 0;
    thus thesis;
  end;
  for m being Nat holds P[m] from NAT_1:sch 2(A24,A1);
  hence thesis;
end;
