reserve G for _Graph;
reserve V for non empty set, E for Relation of V;
reserve E for symmetric Relation of V;
reserve G for GraphFromSymRel of V, E;

theorem Th106:
  for G1 being non-multi _Graph
  for G2 being GraphFromSymRel of the_Vertices_of G1, VertexAdjSymRel(G1)
  ex F being PGraphMapping of G1, G2
  st F is isomorphism & F_V = id the_Vertices_of G1 &
    for e being object st e in the_Edges_of G1
    holds F_E.e = [(the_Source_of G1).e,(the_Target_of G1).e] or
      F_E.e = [(the_Target_of G1).e,(the_Source_of G1).e]
proof
  let G be non-multi _Graph;
  set E0 = VertexAdjSymRel(G), G0 = createGraph(the_Vertices_of G, E0);
  let G9 be GraphFromSymRel of the_Vertices_of G, E0;
  the_Vertices_of G9 = the_Vertices_of G0 by GLIB_000:def 33
    .= the_Vertices_of G;
  then reconsider f = id the_Vertices_of G
    as PartFunc of the_Vertices_of G, the_Vertices_of G9;
  consider E9 being RepEdgeSelection of G0 such that
    A1: G9 is inducedSubgraph of G0, the_Vertices_of G0, E9
    by GLIB_009:def 7;
  the_Edges_of G0 = G0.edgesBetween(the_Vertices_of G0) &
    the_Vertices_of G0 c= the_Vertices_of G0 by GLIB_000:34;
  then A2: the_Edges_of G9 = E9 by A1, GLIB_000:def 37;
  defpred P[object,object] means $2 in E9 &
    ($2 = [(the_Source_of G).$1,(the_Target_of G).$1] or
     $2 = [(the_Target_of G).$1,(the_Source_of G).$1]);
  A3: for x,y1,y2 being object st x in the_Edges_of G & P[x,y1] & P[x,y2]
    holds y1 = y2
  proof
    let x,y1,y2 be object;
    assume A4: x in the_Edges_of G & P[x,y1] & P[x,y2];
    set v = (the_Source_of G).x, w = (the_Target_of G).x;
    per cases by A4;
    suppose y1 = [v,w] & y2 = [v,w];
      hence thesis;
    end;
    suppose A5: y1 = [v,w] & y2 = [w,v];
      A6: y1 in the_Edges_of G9 & y2 in the_Edges_of G9 by A2, A4;
      then y1 in the_Edges_of G0 & y2 in the_Edges_of G0;
      then y1 in E0 & y2 in E0;
      then y1 DJoins v,w,G0 & y2 DJoins w,v,G0 by A5, Th63;
      then A7: y1 Joins v,w,G0 & y2 Joins v,w,G0 by GLIB_000:16;
      then consider y0 being object such that
        y0 Joins v,w,G0 & y0 in E9 and
        A8: for y9 being object st y9 Joins v,w,G0 & y9 in E9 holds y9 = y0
        by GLIB_009:def 5;
      y1 = y0 & y2 = y0 by A2, A6, A7, A8;
      hence thesis;
    end;
    suppose A9: y1 = [w,v] & y2 = [v,w];
      A10: y1 in the_Edges_of G9 & y2 in the_Edges_of G9 by A2, A4;
      then y1 in the_Edges_of G0 & y2 in the_Edges_of G0;
      then y1 in E0 & y2 in E0;
      then y1 DJoins w,v,G0 & y2 DJoins v,w,G0 by A9, Th63;
      then A11: y1 Joins v,w,G0 & y2 Joins v,w,G0 by GLIB_000:16;
      then consider y0 being object such that
        y0 Joins v,w,G0 & y0 in E9 and
        A12: for y9 being object st y9 Joins v,w,G0 & y9 in E9 holds y9 = y0
        by GLIB_009:def 5;
      y1 = y0 & y2 = y0 by A2, A10, A11, A12;
      hence thesis;
    end;
    suppose y1 = [w,v] & y2 = [w,v];
      hence thesis;
    end;
  end;
  A13: for x being object st x in the_Edges_of G ex y being object st P[x,y]
  proof
    let x be object;
    assume A14: x in the_Edges_of G;
    set v = (the_Source_of G).x, w = (the_Target_of G).x;
    x Joins v,w,G & x Joins w,v,G by A14, GLIB_000:def 13;
    then A15: [v,w] DJoins v,w,G0 & [w,v] DJoins w,v,G0 by Th32, Th63;
    then [v,w] Joins v,w,G0 by GLIB_000:16;
    then consider z being object such that
      A16: z Joins v,w,G0 & z in E9 and
      for e9 being object st e9 Joins v,w,G0 & e9 in E9 holds e9 = z
      by GLIB_009:def 5;
    take z;
    per cases by A16, GLIB_000:16;
    suppose z DJoins v,w,G0;
      hence thesis by A15, A16, GLIB_000:def 21;
    end;
    suppose z DJoins w,v,G0;
      hence thesis by A15, A16, GLIB_000:def 21;
    end;
  end;
  consider g being Function such that
    A17: dom g = the_Edges_of G and
    A18: for x being object st x in the_Edges_of G holds P[x,g.x]
    from FUNCT_1:sch 2(A3, A13);
  now
    let y be object;
    hereby
      assume y in rng g;
      then consider x being object such that
        A19: x in dom g & g.x = y by FUNCT_1:def 3;
      thus y in the_Edges_of G9 by A2,A17,A18,A19;
    end;
    assume A20: y in the_Edges_of G9;
    set v = (the_Source_of G9).y, w = (the_Target_of G9).y;
    y DJoins v,w,G9 by A20, GLIB_000:def 14;
    then A21: y DJoins v,w,G0 by GLIB_000:72;
    then A22: y = [v,w] by Th64;
    then consider x being object such that
      A23: x Joins v,w,G by A21, Th32, Th63;
    A24: x in the_Edges_of G by A23, GLIB_000:def 13;
    per cases by A23, GLIB_000:def 13;
    suppose (the_Source_of G).x = v & (the_Target_of G).x = w;
      then A25: P[x,y] by A2, A20, A22;
      P[x,g.x] by A18, A24;
      then y = g.x by A3, A24, A25;
      hence y in rng g by A17, A24, FUNCT_1:3;
    end;
    suppose (the_Source_of G).x = w & (the_Target_of G).x = v;
      then A26: P[x,y] by A2, A20, A22;
      P[x,g.x] by A18, A24;
      then y = g.x by A3, A24, A26;
      hence y in rng g by A17, A24, FUNCT_1:3;
    end;
  end;
  then A27: rng g = the_Edges_of G9 by TARSKI:2;
  then reconsider g as PartFunc of the_Edges_of G, the_Edges_of G9
    by A17, RELSET_1:4;
  now
    thus for e being object st e in dom g holds
      (the_Source_of G).e in dom f & (the_Target_of G).e in dom f by FUNCT_2:5;
    let e,v,w be object;
    assume A28: e in dom g & v in dom f & w in dom f & e Joins v,w,G;
    then A29: e in the_Edges_of G;
    per cases by A28, GLIB_000:def 13;
    suppose A30: (the_Source_of G).e = v & (the_Target_of G).e = w;
      per cases by A18, A28;
      suppose g.e in E9 & g.e=[(the_Source_of G).e,(the_Target_of G).e];
        then A31: g.e = [v,w] by A30;
        g.e in rng g by A28, FUNCT_1:3;
        then A32: g.e in the_Edges_of G9;
        e Joins v,w,G by A30, A29, GLIB_000:def 13;
        then [v,w] in E0 by Th32;
        then g.e DJoins v,w,G0 & v is set & w is set by A31, Th63, TARSKI:1;
        then g.e DJoins v,w,G9 by A32, GLIB_000:73;
        then g.e Joins v,w,G9 by GLIB_000:16;
        then g.e Joins f.v,w,G9 by A28, FUNCT_1:18;
        hence g.e Joins f.v,f.w,G9 by A28, FUNCT_1:18;
      end;
      suppose g.e in E9 & g.e=[(the_Target_of G).e,(the_Source_of G).e];
        then A33: g.e = [w,v] by A30;
        g.e in rng g by A28, FUNCT_1:3;
        then A34: g.e in the_Edges_of G9;
        e Joins w,v,G by A30, A29, GLIB_000:def 13;
        then g.e DJoins w,v,G0 & v is set & w is set
          by A33, Th63, TARSKI:1, Th32;
        then g.e DJoins w,v,G9 by A34, GLIB_000:73;
        then g.e Joins v,w,G9 by GLIB_000:16;
        then g.e Joins f.v,w,G9 by A28, FUNCT_1:18;
        hence g.e Joins f.v,f.w,G9 by A28, FUNCT_1:18;
      end;
    end;
    suppose A35: (the_Source_of G).e = w & (the_Target_of G).e = v;
      per cases by A18, A28;
      suppose g.e in E9 & g.e=[(the_Source_of G).e,(the_Target_of G).e];
        then A36: g.e = [w,v] by A35;
        g.e in rng g by A28, FUNCT_1:3;
        then A37: g.e in the_Edges_of G9;
        e Joins w,v,G by A35, A29, GLIB_000:def 13;
        then [w,v] in E0 by Th32;
        then g.e DJoins w,v,G0 & v is set & w is set by A36, Th63, TARSKI:1;
        then g.e DJoins w,v,G9 by A37, GLIB_000:73;
        then g.e Joins v,w,G9 by GLIB_000:16;
        then g.e Joins f.v,w,G9 by A28, FUNCT_1:18;
        hence g.e Joins f.v,f.w,G9 by A28, FUNCT_1:18;
      end;
      suppose g.e in E9 & g.e=[(the_Target_of G).e,(the_Source_of G).e];
        then A38: g.e = [v,w] by A35;
        g.e in rng g by A28, FUNCT_1:3;
        then A39: g.e in the_Edges_of G9;
        e Joins v,w,G by A35, A29, GLIB_000:def 13;
        then g.e DJoins v,w,G0 & v is set & w is set
          by A38, Th63, TARSKI:1, Th32;
        then g.e DJoins v,w,G9 by A39, GLIB_000:73;
        then g.e Joins v,w,G9 by GLIB_000:16;
        then g.e Joins f.v,w,G9 by A28, FUNCT_1:18;
        hence g.e Joins f.v,f.w,G9 by A28, FUNCT_1:18;
      end;
    end;
  end;
  then reconsider F = [f,g] as PGraphMapping of G, G9 by GLIB_010:8;
  take F;
  now
    let x1,x2 be object;
    assume A40: x1 in dom g & x2 in dom g & g.x1 = g.x2;
    per cases by A18, A40;
    suppose g.x1=[(the_Source_of G).x1,(the_Target_of G).x1] &
        g.x2=[(the_Source_of G).x2,(the_Target_of G).x2];
      then (the_Source_of G).x1 = (the_Source_of G).x2 &
        (the_Target_of G).x1 = (the_Target_of G).x2 by A40, XTUPLE_0:1;
      then x1 DJoins (the_Source_of G).x1,(the_Target_of G).x1,G &
        x2 DJoins (the_Source_of G).x1,(the_Target_of G).x1,G
        by A40, GLIB_000:def 14;
      hence x1 = x2 by GLIB_000:def 21;
    end;
    suppose g.x1=[(the_Source_of G).x1,(the_Target_of G).x1] &
        g.x2=[(the_Target_of G).x2,(the_Source_of G).x2];
      then (the_Source_of G).x1 = (the_Target_of G).x2 &
        (the_Target_of G).x1 = (the_Source_of G).x2 by A40, XTUPLE_0:1;
      then x1 Joins (the_Source_of G).x1,(the_Target_of G).x1,G &
        x2 Joins (the_Source_of G).x1,(the_Target_of G).x1,G
        by A40, GLIB_000:def 13;
      hence x1 = x2 by GLIB_000:def 20;
    end;
    suppose g.x1=[(the_Target_of G).x1,(the_Source_of G).x1] &
        g.x2=[(the_Source_of G).x2,(the_Target_of G).x2];
      then (the_Source_of G).x1 = (the_Target_of G).x2 &
        (the_Target_of G).x1 = (the_Source_of G).x2 by A40, XTUPLE_0:1;
      then x1 Joins (the_Source_of G).x1,(the_Target_of G).x1,G &
        x2 Joins (the_Source_of G).x1,(the_Target_of G).x1,G
        by A40, GLIB_000:def 13;
      hence x1 = x2 by GLIB_000:def 20;
    end;
    suppose g.x1=[(the_Target_of G).x1,(the_Source_of G).x1] &
        g.x2=[(the_Target_of G).x2,(the_Source_of G).x2];
      then (the_Source_of G).x1 = (the_Source_of G).x2 &
        (the_Target_of G).x1 = (the_Target_of G).x2 by A40, XTUPLE_0:1;
      then x1 DJoins (the_Source_of G).x1,(the_Target_of G).x1,G &
        x2 DJoins (the_Source_of G).x1,(the_Target_of G).x1,G
        by A40, GLIB_000:def 14;
      hence x1 = x2 by GLIB_000:def 21;
    end;
  end;
  then A41: g is one-to-one by FUNCT_1:def 4;
  f is one-to-one & F_V = f & F_E = g;
  then A42: F is one-to-one by A41, GLIB_010:def 13;
  the_Vertices_of G = the_Vertices_of G0
    .= the_Vertices_of G9 by GLIB_000:def 33;
  then A43: dom f=the_Vertices_of G & rng f=the_Vertices_of G9;
  F_V = f & F_E = g;
  then A44: F is total onto by A17, A27, A43, GLIB_010:def 11, GLIB_010:def 12;
  thus F is isomorphism by A42, A44;
  thus F_V = id the_Vertices_of G;
  thus thesis by A18;
end;
