reserve G, G1, G2 for _Graph, H for Subgraph of G;

theorem Th114:
  for F being PGraphMapping of G1, G2 st F is weak_SG-embedding onto
  holds G2.allSpanningForests() = rng(SG2SGFunc(F) | G1.allSpanningForests())
proof
  let F be PGraphMapping of G1, G2;
  set f = SG2SGFunc(F);
  assume A1: F is weak_SG-embedding onto;
  then rng F_V = the_Vertices_of G2 by GLIB_010:def 12;
  then A2: rng(f | G1.allSpanningForests()) c= G2.allSpanningForests()
    by A1, Th113;
  dom F_V = the_Vertices_of G1 by A1, GLIB_010:def 11;
  then F_V is total by PARTFUN1:def 2;
  then G2.allForests() c= rng(f | G1.allForests()) &
    G2.allSpanningSG() c= rng(f | G1.allSpanningSG())
    by A1, Th68, Th91;
  then G2.allForests() /\ G2.allSpanningSG() c=
    rng(f | G1.allForests()) /\ rng(f | G1.allSpanningSG())
    by XBOOLE_1:27;
  then A3: G2.allSpanningForests() c=
    rng(f | G1.allForests()) /\ rng(f | G1.allSpanningSG()) by Th103;
  A4: rng(f | G1.allForests()) = f.:G1.allForests() by RELAT_1:115;
  A5: rng(f | G1.allSpanningSG()) = f.:G1.allSpanningSG()
    by RELAT_1:115;
  A6: f is one-to-one by A1, Th31;
  rng(f | G1.allForests()) /\ rng(f | G1.allSpanningSG())
     = f.:(G1.allForests() /\ G1.allSpanningSG()) by A4, A5, A6, FUNCT_1:62
    .= rng(f | (G1.allForests() /\ G1.allSpanningSG())) by RELAT_1:115
    .= rng(f | G1.allSpanningForests()) by Th103;
  hence thesis by A2, A3, XBOOLE_0:def 10;
end;
