
theorem Th21:
  for G being _finite real-weighted WGraph, s being Vertex of G, n
being Nat holds card dom (DIJK:CompSeq(s).n)`1 = min(n+1, card(G.reachableDFrom
  (s)))
proof
  let G be _finite real-weighted WGraph, src be Vertex of G;
  set DCS = DIJK:CompSeq( src), VL0 = dom (DCS.0)`1;
  set RFS = G.reachableDFrom(src);
  defpred P[Nat] means card dom (DCS.$1)`1 = min($1+1, card RFS);
  src in RFS by GLIB_002:18;
  then {src} c= RFS by ZFMISC_1:31;
  then card {src} <= card RFS by NAT_1:43;
  then
A1: 0+1 <= card RFS by CARD_1:30;
  now
    let k be Nat such that
A2: card dom (DCS.k)`1 = min(k+1, card RFS);
    set Gk = DCS.k, Gk1b = DCS.(k+1);
    set BestEdges = DIJK:NextBestEdges(Gk);
A3: DCS.(k+1) = DIJK:Step(DCS.k) by Def11;
    now
      per cases;
      suppose
A4:     BestEdges = {};
        then card dom Gk`1 = card RFS by Th20;
        then card RFS <= k+1 by A2,XXREAL_0:def 9;
        then
A5:     card RFS <= k+1+1 by NAT_1:12;
        card dom Gk1b`1 = card dom Gk`1 by A3,A4,Th15;
        then card dom Gk1b`1 = card RFS by A4,Th20;
        hence card dom Gk1b`1 = min((k+1)+1, card RFS) by A5,XXREAL_0:def 9;
      end;
      suppose
A6:     BestEdges <> {};
        then
A7:     dom Gk`1 <> RFS by Th20;
A8:     now
          dom Gk`1 c= RFS by Th19;
          then
A9:       dom Gk`1 c< RFS by A7,XBOOLE_0:def 8;
          assume card dom Gk`1 = card RFS;
          hence contradiction by A9,CARD_2:48;
        end;
        then k+1 <= card RFS by A2,XXREAL_0:def 9;
        then
A10:    k+1+1 <= card RFS + 1 by XREAL_1:6;
        k+1+1 <> card RFS + 1 by A2,A8;
        then k+1+1 < card RFS + 1 by A10,XXREAL_0:1;
        then
A11:    (k+1+1) <= card RFS by NAT_1:13;
        card dom Gk1b`1 = card dom Gk`1 + 1 by A3,A6,Th15;
        then card dom Gk1b`1 = (k+1)+1 by A2,A8,XXREAL_0:15;
        hence card dom Gk1b`1 = min((k+1)+1, card RFS) by A11,XXREAL_0:def 9;
      end;
    end;
    hence card dom (DCS.(k+1))`1 = min((k+1)+1, card RFS);
  end;
  then
A12: for k being Nat st P[k] holds P[k+1];
  DCS.0 = DIJK:Init(src) by Def11;
  then card VL0 = card {src}
    .= 1 by CARD_1:30;
  then
A13: P[ 0 ] by A1,XXREAL_0:def 9;
  for n being Nat holds P[n] from NAT_1:sch 2(A13,A12);
  hence thesis;
end;
