
theorem Th22:
  for G being _finite real-weighted WGraph, src being Vertex of G,
n being Nat holds (DIJK:CompSeq(src).n)`2 c= G.edgesBetween(dom (DIJK:CompSeq(
  src).n)`1)
proof
  let G be _finite real-weighted WGraph, src be Vertex of G;
  set DCS = DIJK:CompSeq(src), D0 = DCS.0;
  defpred P[Nat] means (DCS.$1)`2 c= G.edgesBetween(dom ((DCS.$1)`1));
  now
    let n be Nat;
    set Dn = DCS.n, Dn1 = DCS.(n+1);
    set BE = DIJK:NextBestEdges(Dn), e = the Element of BE;
    set target = (the_Target_of G).e;
    set val= (Dn`1).((the_Source_of G).e)+(the_Weight_of G).e;
    set DnE = Dn`2 \/ {e};
    assume
A1: Dn`2 c= G.edgesBetween(dom Dn`1);
A2: Dn1 = DIJK:Step(Dn) by Def11;
    now
      let x be object;
      n <= n+1 by NAT_1:12;
      then
A3:   dom Dn`1 c= dom Dn1`1 by Th18;
      assume
A4:   x in Dn1`2;
      now
        per cases;
        suppose
          BE = {};
          then Dn1 = Dn by A2,Def8;
          hence x in G.edgesBetween(dom Dn1`1) by A1,A4;
        end;
        suppose
A5:       BE <> {};
          then
A6:       Dn1 = [Dn`1+*(target .--> val),DnE] by A2,Def8;
          then
A7:       Dn1`2 = DnE;
          Dn1`1 = Dn`1+*(target .--> val) by A6;
          then
A8:       dom Dn1`1 = dom Dn`1 \/ {target} by Lm1;
A9:       e in BE by A5;
          now
            per cases by A4,A7,XBOOLE_0:def 3;
            suppose
A10:          x in Dn`2;
              (the_Source_of G).x in dom Dn`1 & (the_Target_of G).x in
              dom Dn`1 by A1,A10,GLIB_000:31;
              hence x in G.edgesBetween(dom Dn1`1) by A3,A10,GLIB_000:31;
            end;
            suppose
              x in {e};
              then
A11:          x = e by TARSKI:def 1;
              then (the_Target_of G).x in {target} by TARSKI:def 1;
              then
A12:          (the_Target_of G).x in dom Dn1`1 by A8,XBOOLE_0:def 3;
              e DSJoins dom Dn`1,the_Vertices_of G \ dom Dn`1,G by A5,Def7;
              then (the_Source_of G).x in dom Dn`1 by A11;
              hence x in G.edgesBetween(dom Dn1`1) by A3,A9,A11,A12,GLIB_000:31
;
            end;
          end;
          hence x in G.edgesBetween(dom Dn1`1);
        end;
      end;
      hence x in G.edgesBetween(dom Dn1`1);
    end;
    hence Dn1`2 c= G.edgesBetween(dom Dn1`1);
  end;
  then
A13: for k being Nat st P[k] holds P[k+1];
  D0=DIJK:Init(src) by Def11;
  then for x being object st x in D0`2 holds x in G.edgesBetween(dom D0`1);
  then
A14: P[ 0 ] by TARSKI:def 3;
  for n being Nat holds P[n] from NAT_1:sch 2(A14,A13);
  hence thesis;
end;
