reserve G for _Graph;
reserve G2 for _Graph, G1 for Supergraph of G2;
reserve V for set;
reserve v for object;

theorem
  for G being non _trivial _Graph, v1,e being object, v2 being Vertex of G
  for G1 being addAdjVertex of G,v1,e,v2
  for G2 being removeVertex of G1,v2
  for G3 being removeVertex of G,v2
  st not e in the_Edges_of G & not v1 in the_Vertices_of G
  holds G2 is addVertex of G3, v1
proof
  let G be non _trivial _Graph, v1,e be object, v2 be Vertex of G;
  let G1 be addAdjVertex of G,v1,e,v2;
  let G2 be removeVertex of G1,v2;
  let G3 be removeVertex of G,v2;
  assume A1: not e in the_Edges_of G & not v1 in the_Vertices_of G;
  A2: v2 is Vertex of G1 & v1 <> v2 by A1, Th72;
  A3: the_Vertices_of G2 = the_Vertices_of G1 \ {v2} by A2, GLIB_000:47
    .= (the_Vertices_of G \/ {v1}) \ {v2} by A1, Def12
    .= (the_Vertices_of G \ {v2}) \/ ({v1} \ {v2}) by XBOOLE_1:42
    .= (the_Vertices_of G \ {v2}) \/ {v1} by A2, ZFMISC_1:14
    .= the_Vertices_of G3 \/ {v1} by GLIB_000:47;
  :: lemma for equality of edge sets
  for e1 being object holds e1 in G1.edgesBetween(the_Vertices_of G1 \ {v2})
    iff e1 in G.edgesBetween(the_Vertices_of G \ {v2})
  proof
    let e1 be object;
    set x1 = (the_Source_of G1).e1, y1 = (the_Target_of G1).e1;
    set x = (the_Source_of G).e1, y = (the_Target_of G).e1;
    hereby
      assume e1 in G1.edgesBetween(the_Vertices_of G1 \ {v2});
      then A4: e1 in the_Edges_of G1 & x1 in the_Vertices_of G1 \ {v2} &
        y1 in the_Vertices_of G1 \ {v2} by GLIB_000:31;
      then e1 DJoins x1, y1, G1 by GLIB_000:def 14;
      then per cases by Th75;
      suppose A5: e1 DJoins x1, y1, G;
        then A6: e1 in the_Edges_of G by GLIB_000:def 14;
        e1 Joins x1, y1, G by A5, GLIB_000:16;
        then A7: x1 in the_Vertices_of G & y1 in the_Vertices_of G
          by GLIB_000:13;
        not x1 in {v2} & not y1 in {v2} by A4, XBOOLE_0:def 5;
        then A8: x1 in the_Vertices_of G\{v2} & y1 in the_Vertices_of G\{v2}
          by A7, XBOOLE_0:def 5;
        x = x1 & y = y1 by A5, GLIB_000:def 14;
        hence e1 in G.edgesBetween(the_Vertices_of G \ {v2})
          by A6, A8, GLIB_000:31;
      end;
      suppose A9: not e1 in the_Edges_of G;
        the_Edges_of G1 = the_Edges_of G \/ {e} by A1, Def12;
        then e1 in {e} by A4, A9, XBOOLE_0:def 3;
        then e1 = e by TARSKI:def 1;
        then e1 DJoins v1,v2,G1 by A1, Th136;
        then y1 = v2 by GLIB_000:def 14;
        then y1 in {v2} by TARSKI:def 1;
        hence e1 in G.edgesBetween(the_Vertices_of G \ {v2})
          by A4, XBOOLE_0:def 5; :: by contradiction
      end;
    end;
    assume e1 in G.edgesBetween(the_Vertices_of G \ {v2});
    then A10: e1 in the_Edges_of G & x in the_Vertices_of G \ {v2} &
      y in the_Vertices_of G \ {v2} by GLIB_000:31;
    the_Vertices_of G c= the_Vertices_of G1 by Def9;
    then A11: x in the_Vertices_of G1 \ {v2} & y in the_Vertices_of G1 \ {v2}
      by A10, XBOOLE_1:33, TARSKI:def 3;
    A12: x = x1 & y = y1 by A10, Def9;
    the_Edges_of G c= the_Edges_of G1 by Def9;
    hence e1 in G1.edgesBetween(the_Vertices_of G1 \ {v2})
      by A10, A11, A12, GLIB_000:31;
  end;
  then A13: G1.edgesBetween(the_Vertices_of G1 \ {v2})
    = G.edgesBetween(the_Vertices_of G \ {v2}) by TARSKI:2;
  A14: the_Edges_of G2 = G1.edgesBetween(the_Vertices_of G1 \ {v2})
      by A2, GLIB_000:47
    .= the_Edges_of G3 by A13, GLIB_000:47;
  dom the_Source_of G2 = the_Edges_of G2 &
    dom the_Target_of G2 = the_Edges_of G2 by GLIB_000:4;
  then A16: dom the_Source_of G2 = dom the_Source_of G3 &
    dom the_Target_of G2 = dom the_Target_of G3 by A14, GLIB_000:4;
  for e1 being object st e1 in dom the_Source_of G2 holds
    (the_Source_of G2).e1 = (the_Source_of G3).e1
  proof
    let e1 be object;
    assume e1 in dom the_Source_of G2;
    then A17: e1 in the_Edges_of G2;
    thus (the_Source_of G2).e1 = (the_Source_of G1).e1 by A17, GLIB_000:def 32
      .= (the_Source_of G).e1 by A14, A17, Def9
      .= (the_Source_of G3).e1 by A14, A17, GLIB_000:def 32;
  end;
  then A19: the_Source_of G2 = the_Source_of G3 by A16, FUNCT_1:2;
  for e1 being object st e1 in dom the_Target_of G2 holds
    (the_Target_of G2).e1 = (the_Target_of G3).e1
  proof
    let e1 be object;
    assume e1 in dom the_Target_of G2;
    then A20: e1 in the_Edges_of G2;
    thus (the_Target_of G2).e1 = (the_Target_of G1).e1 by A20, GLIB_000:def 32
      .= (the_Target_of G).e1 by A14, A20, Def9
      .= (the_Target_of G3).e1 by A14, A20, GLIB_000:def 32;
  end;
  then A22: the_Target_of G2 = the_Target_of G3 by A16, FUNCT_1:2;
  :: left is to show Supergraph property
  now
    the_Vertices_of G c= the_Vertices_of G1 by Def9;
    then the_Vertices_of G \ {v2} c= the_Vertices_of G1 \ {v2} by XBOOLE_1:33;
    then the_Vertices_of G3 c= the_Vertices_of G1 \ {v2} by GLIB_000:47;
    hence the_Vertices_of G3 c= the_Vertices_of G2 by A2, GLIB_000:47;
    thus the_Edges_of G3 c= the_Edges_of G2 by A14;
    let e1 be set;
    assume e1 in the_Edges_of G3;
    thus (the_Source_of G3).e1 = (the_Source_of G2).e1 &
      (the_Target_of G3).e1 = (the_Target_of G2).e1 by A19, A22;
  end;
  then G2 is Supergraph of G3 by Def9;
  hence thesis by A3, A14, A19, A22, Def10;
end;
