reserve f for Function;
reserve p,q for FinSequence;
reserve A,B,C for set,x,x1,x2,y,z for object;
reserve k,l,m,n for Nat;
reserve a for Nat;
reserve D for non empty set;
reserve d,d1,d2,d3 for Element of D;
reserve L,M for Element of NAT;

theorem Th60:
  rng p = dom p implies p is one-to-one
proof
  defpred P[Nat] means for p st len p = $1 & rng p = dom p holds p is
  one-to-one;
A1: len p = len p;
A2: now
    let k;
    assume
A3: P[k];
    thus P[k+1]
    proof
      set x = k + 1;
      let p;
      set q = p - {k + 1};
      assume that
A4:   len p = k + 1 and
A5:   rng p = dom p;
A6:   dom p = Seg(k + 1) by A4,FINSEQ_1:def 3;
      then
A7:   k + 1 in rng p by A5,FINSEQ_1:4;
      now
        rng q = Seg(k + 1) \ {k + 1} by A5,A6,FINSEQ_3:65
          .= Seg k by FINSEQ_1:10;
        then card(rng q) = k by FINSEQ_1:57;
        then
A8:     card k = card(rng q);
        p.(x..p) = x by A5,A6,Th19,FINSEQ_1:4;
        then
A9:     p.(x..p) in {k + 1} by TARSKI:def 1;
        let l;
        assume that
A10:    l in dom p and
A11:    l <> (k + 1)..p and
A12:    p.l = k + 1;
A13:    card{x..p,l} = 2 by A11,CARD_2:57;
        p.l in {k + 1} by A12,TARSKI:def 1;
        then
A14:    l in p " {x} by A10,FUNCT_1:def 7;
        x..p in dom p by A5,A6,Th20,FINSEQ_1:4;
        then x..p in p " {x} by A9,FUNCT_1:def 7;
        then {x..p,l} c= p " {k + 1} by A14,ZFMISC_1:32;
        then
A15:    2 <= card(p " {k + 1}) by A13,NAT_1:43;
        len q = (k + 1) - card(p " {k + 1}) by A4,FINSEQ_3:59;
        then
        2 + len q <= card(p " {x}) + ((k + 1) - card(p " {k + 1})) by A15,
XREAL_1:6;
        then len q + 1 + 1 <= k + 1;
        then len q + 1 <= k by XREAL_1:6;
        then
A16:    len q <= k - 1 by XREAL_1:19;
        dom q = Seg(len q) by FINSEQ_1:def 3;
        then card Segm k c= card(dom q) &
         card Segm len q = card(dom q) by CARD_1:12,FINSEQ_1:57,A8;
        then k <= len q by NAT_1:40;
        then k <= k - 1 by A16,XXREAL_0:2;
        then k + 1 <= k + 0 by XREAL_1:19;
        hence contradiction by XREAL_1:6;
      end;
      then
A17:  p just_once_values k + 1 by A7,Th27;
      then
A18:  len q = (k + 1) - 1 by A4,Th30
        .= k;
A19:  q = (p -| (k + 1)) ^ (p |-- (k + 1)) by A17,Th54;
      rng q = Seg(k + 1) \ {k + 1} by A5,A6,FINSEQ_3:65
        .= Seg k by FINSEQ_1:10;
      then dom q = rng q by A18,FINSEQ_1:def 3;
      hence thesis by A3,A7,A18,A19,Th56;
    end;
  end;
A20: P[0]
  proof
    let p;
    assume len p = 0;
    then p = {};
    hence thesis;
  end;
  for k holds P[k] from NAT_1:sch 2(A20,A2);
  hence thesis by A1;
end;
