reserve G, G2 for _Graph, V, E for set,
  v for object;

theorem Th52:
  for G2, v, V for G1 being addAdjVertexAll of G2,v,V, E being set
  st V c= the_Vertices_of G2 & not v in the_Vertices_of G2 &
    the_Edges_of G1 = the_Edges_of G2 \/ E & E misses the_Edges_of G2
  holds ex f, g being Function of E, V \/ {v} st
    the_Source_of G1 = the_Source_of G2 +* f &
    the_Target_of G1 = the_Target_of G2 +* g &
    for e being object st e in E holds e DJoins f.e,g.e,G1 &
      (f.e = v iff g.e <> v)
proof
  let G2, v, V;
  let G1 be addAdjVertexAll of G2,v,V;
  let E be set;
  assume that
    A1: V c= the_Vertices_of G2 & not v in the_Vertices_of G2 and
    A2: the_Edges_of G1 = the_Edges_of G2 \/ E & E misses the_Edges_of G2;
  consider E1 being set such that
    A3: card V = card E1 & E1 misses the_Edges_of G2 and
    A4: the_Edges_of G1 = the_Edges_of G2 \/ E1 and
    for v1 being object st v1 in V ex e1 being object st e1 in E1 &
      e1 Joins v1,v,G1 &
      for e2 being object st e2 Joins v1,v,G1 holds e1 = e2 by A1, Def4;
  A5: E1 /\ the_Edges_of G2 = {} by A3, XBOOLE_0:def 7;
  A6: E = E1 by A2, A3, A4, XBOOLE_1:71;
  :: define f and g
  defpred P[object,object] means ex v2 being object st $1 DJoins $2,v2,G1;
  A7: for e being object st e in E holds
    ex v1 being object st v1 in V \/ {v} & P[e,v1]
  proof
    let e be object;
    set x = (the_Source_of G1).e, y = (the_Target_of G1).e;
    assume A8: e in E;
    then A9: not e in the_Edges_of G2 by A5, A6, Lm7;
    take x;
    A10: e in the_Edges_of G1 by A8, A4, A6, XBOOLE_0:def 3;
    then e Joins x,y,G1 by GLIB_000:def 13;
    then x = v or x in V by A1, A3, A4, A9, Th51;
    then x in {v} or x in V by TARSKI:def 1;
    hence x in V \/ {v} by XBOOLE_0:def 3;
    take y;
    thus e DJoins x,y,G1 by A10, GLIB_000:def 14;
  end;
  consider f being Function of E, V \/ {v} such that
    A11: for e being object st e in E holds P[e,f.e] from FUNCT_2:sch 1(A7);
  defpred Q[object,object] means $1 DJoins f.$1,$2,G1;
  A12: for e being object st e in E holds
    ex v2 being object st v2 in V \/ {v} & Q[e,v2]
  proof
    let e be object;
    assume A13: e in E;
    then consider v2 being object such that
      A14: e DJoins f.e,v2,G1 by A11;
    take v2;
    A15: not e in the_Edges_of G2 by A5, A6, A13, Lm7;
    e Joins f.e,v2,G1 by A14, GLIB_000:16;
    then v2 = v or v2 in V by A1, A3, A4, A15, Th51;
    then v2 in {v} or v2 in V by TARSKI:def 1;
    hence v2 in V \/ {v} by XBOOLE_0:def 3;
    thus thesis by A14;
  end;
  consider g being Function of E, V \/ {v} such that
    A16: for e being object st e in E holds Q[e,g.e] from FUNCT_2:sch 1(A12);
  take f,g;
  :: show S1 = S2 +* f
  A17: dom (the_Source_of G2 +* f)
     = dom the_Source_of G2 \/ dom f by FUNCT_4:def 1
    .= the_Edges_of G2 \/ dom f by GLIB_000:4
    .= the_Edges_of G2 \/ E by FUNCT_2:def 1
    .= dom the_Source_of G1 by A2, GLIB_000:4;
  for e being object st e in dom the_Source_of G1 holds
    (the_Source_of G1).e = (the_Source_of G2 +* f).e
  proof
    let e be object;
    assume e in dom the_Source_of G1;
    then per cases by A2, XBOOLE_0:def 3;
    suppose A18: e in the_Edges_of G2;
      then not e in dom f by A5, A6, Lm7;
      then (the_Source_of G2 +* f).e = (the_Source_of G2).e by FUNCT_4:11
        .= (the_Source_of G1).e by A18, GLIB_006:def 9;
      hence thesis;
    end;
    suppose A19: e in E;
      then e in dom f by FUNCT_2:def 1;
      then A20: (the_Source_of G2 +* f).e = f.e by FUNCT_4:13;
      e DJoins f.e,g.e,G1 by A16, A19;
      hence thesis by A20,GLIB_000:def 14;
     end;
  end;
  hence the_Source_of G1 = the_Source_of G2 +* f by A17, FUNCT_1:2;
  :: show T1 = T2 +* g (symmetric case)
  A21: dom (the_Target_of G2 +* g)
     = dom the_Target_of G2 \/ dom g by FUNCT_4:def 1
    .= the_Edges_of G2 \/ dom g by GLIB_000:4
    .= the_Edges_of G2 \/ E by FUNCT_2:def 1
    .= dom the_Target_of G1 by A2, GLIB_000:4;
  for e being object st e in dom the_Target_of G1 holds
    (the_Target_of G1).e = (the_Target_of G2 +* g).e
  proof
    let e be object;
    assume e in dom the_Target_of G1;
    then per cases by A2, XBOOLE_0:def 3;
    suppose A22: e in the_Edges_of G2;
      then not e in dom g by A5, A6, Lm7;
      then (the_Target_of G2 +* g).e = (the_Target_of G2).e by FUNCT_4:11
        .= (the_Target_of G1).e by A22, GLIB_006:def 9;
      hence thesis;
    end;
    suppose A23: e in E;
      then e in dom g by FUNCT_2:def 1;
      then A24: (the_Target_of G2 +* g).e = g.e by FUNCT_4:13;
      e DJoins f.e,g.e,G1 by A16, A23;
      hence thesis by A24,GLIB_000:def 14;
     end;
  end;
  hence the_Target_of G1 = the_Target_of G2 +* g by A21, FUNCT_1:2;
  :: show the rest
  let e be object;
  assume A25: e in E;
  hence A26: e DJoins f.e,g.e,G1 by A16;
  then A27: e Joins f.e,g.e,G1 by GLIB_000:16;
  thus f.e = v implies g.e <> v by A1, A27, Def4;
  assume A28: g.e <> v;
  assume f.e <> v;
  then e DJoins f.e,g.e,G2 by A1, A26, A28, Def4;
  then e in the_Edges_of G2 by GLIB_000:def 14;
  hence contradiction by A25, A5, A6, Lm7;
end;
