reserve x, y, y1, y2 for object;
reserve V for Z_Module;
reserve W, W1, W2 for Submodule of V;
reserve u, v for VECTOR of V;
reserve i, j, k, n for Element of NAT;
reserve V,W for finite-rank free Z_Module;
reserve T for linear-transformation of V,W;

theorem
  for R being Ring
  for V being LeftMod of R, W1 being Submodule of V,
      W2 being Submodule of W1,
  U1 being Submodule of V, U2 being Submodule of VectQuot(V, U1)
  st U1 = W2 & U2 = VectQuot(W1, W2)
  holds ex F being linear-transformation of
  VectQuot(VectQuot(V, U1), U2), VectQuot(V, W1)
  st F is bijective
  proof
    let R be Ring;
    let V be LeftMod of R, W1 be Submodule of V, W2 be Submodule of W1,
    U1 be Submodule of V, U2 be Submodule of VectQuot(V, U1);
    assume A1:  U1 = W2 & U2 = VectQuot(W1, W2);
    set Z1 = VectQuot(VectQuot(V, U1), U2);
    set Z2 = VectQuot(V, W1);
    YY: rng (ZQMorph(V,U1)) = the carrier of VectQuot(V,U1)
    by FUNCT_2:def 3;
    defpred P[object, object] means
    ex v being Element of V st $1 = v + U1 & $2 = v + W1;
    A2: for z being Element of VectQuot(V, U1) holds
    ex y being Element of VectQuot(V, W1) st P[z,y]
    proof
      let z be Element of VectQuot(V, U1);
      consider v be Element of V such that
      A17: z = (ZQMorph(V,U1)).v by FUNCT_2:113,YY;
      A19: (ZQMorph(V,U1)).v = v + U1 by defMophVW;
      set y = v + W1;
      y is Coset of W1 by VECTSP_4:def 6;
      then y in CosetSet(V, W1);
      then reconsider y as Element of VectQuot(V, W1) by VECTSP10:def 6;
      take y;
      thus thesis by A17,A19;
    end;
    consider f be Function of VectQuot(V, U1), VectQuot(V, W1)
    such that
    A3: for z being Element of VectQuot(V, U1)
    holds P[z,f.z] from FUNCT_2:sch 3(A2);
    f is linear-transformation of VectQuot(V, U1), VectQuot(V, W1)
    proof
      for x, y being Element of VectQuot(V, U1)
      holds f.(x+y) = (f.x) + (f.y)
      proof
        let x, y be Element of VectQuot(V, U1);
        consider xx be Element of V such that
        C1: x = xx + U1 & f.x = xx + W1 by A3;
        consider yy be Element of V such that
        C2: y = yy + U1 & f.y = yy + W1 by A3;
        consider xy be Element of V such that
        C3: x + y = xy + U1 & f.(x+y) = xy + W1 by A3;
        reconsider xU = xx + U1, yU = yy + U1
        as Element of CosetSet(V, U1) by C1,C2,VECTSP10:def 6;
        reconsider fxU = xx + W1, fyU = yy + W1
        as Element of CosetSet(V, W1) by C1,C2,VECTSP10:def 6;
        xy + U1 = addCoset(V, U1).(xU, yU) by C3,C1,C2,VECTSP10:def 6
        .= (xx + yy) + U1 by VECTSP10:def 3;
        then (xx + yy) in xy + U1 by ZMODUL01:58;
        then consider w be Vector of V such that
        D21: xx + yy = xy + w & w in U1;
        w in W1 by A1,D21,ZMODUL01:24;
        then
        D3: xx + yy in xy + W1 by D21;
        xx + yy in (xx + yy)+W1 by ZMODUL01:58;
        then
        C4: xy + W1 = (xx + yy) + W1 by D3,ZMODUL01:68;
        thus
        (f.x) + (f.y) = addCoset(V, W1).(fxU, fyU) by C1,C2,VECTSP10:def 6
        .= f.(x+y) by C4,C3,VECTSP10:def 3;
      end;
      then B1: f is additive;
      for a being Element of R,
      x being Element of VectQuot(V, U1)
      holds f.(a*x) = a*(f.x)
      proof
        let a be Element of R, x be Element of VectQuot(V, U1);
        consider xx be Element of V such that
        C1: x = xx + U1 & f.x = xx + W1 by A3;
        consider ax be Element of V such that
        C3: a*x = ax + U1 & f.(a*x) = ax + W1 by A3;
        reconsider xU = xx + U1 as Element of CosetSet(V, U1)
        by C1,VECTSP10:def 6;
        reconsider fxU = xx + W1 as Element of CosetSet(V, W1)
        by C1,VECTSP10:def 6;
        ax + U1 = lmultCoset(V, U1).(a,xU) by C3,C1,VECTSP10:def 6
        .= (a*xx) + U1 by VECTSP10:def 5;
        then (a*xx) in ax + U1 by ZMODUL01:58;
        then consider w be Vector of V such that
        D21: a*xx = ax+ w & w in U1;
        w in W1 by A1,D21,ZMODUL01:24;
        then
        D3: a*xx in ax + W1 by D21;
        a*xx in (a*xx) + W1 by ZMODUL01:58; then
        C4: ax + W1 = (a*xx) + W1 by D3,ZMODUL01:68;
        thus a*(f.x) = lmultCoset(V, W1).(a,fxU) by C1,VECTSP10:def 6
        .= f.(a*x) by C4,C3,VECTSP10:def 5;
      end;
      then f is homogeneous;
      hence thesis by B1;
    end;
    then reconsider f as linear-transformation of VectQuot(V, U1),
    VectQuot(V, W1);
    A4: ker f = U2
    proof
      for v being Element of VectQuot(V, U1)
      holds v in ker f iff v in U2
      proof
        let v be Element of VectQuot(V, U1);
        hereby
          assume v in ker f;
          then C1: f.v = 0.VectQuot(V, W1) by RANKNULL:10;
          consider vv be Element of V such that
          C2: v = vv + U1 & f.v = vv + W1 by A3;
          vv + W1 = zeroCoset(V, W1) by C1,C2,VECTSP10:def 6
          .= the carrier of W1;
          then vv in W1 by ZMODUL01:63;
          then reconsider vv1 = vv as Vector of W1;
          for x being object holds x in vv + U1 iff x in vv1 + W2
          proof
            let x be object;
            hereby
              assume x in vv + U1;
              then consider w3 be Vector of V such that
              X1: x = vv + w3 & w3 in U1;
              w3 in W1 by A1,X1,ZMODUL01:24;
              then reconsider ww3 = w3 as Vector of W1;
              X2: vv + w3 = vv1 + ww3 by ZMODUL01:28;
              thus x in vv1+W2 by A1,X1,X2;
            end;
            assume x in vv1 + W2;
            then consider w2 be Vector of W1 such that
            X1: x = vv1 + w2 & w2 in W2;
            w2 in V by A1,X1,ZMODUL01:24;
            then reconsider ww2 = w2 as Vector of V;
            X2: vv + ww2 = vv1 + w2 by ZMODUL01:28;
            thus x in vv+U1 by A1,X1,X2;
          end;
          then v = vv1 + W2 by C2,TARSKI:2;
          then v is Coset of W2 by VECTSP_4:def 6;
          then v in CosetSet(W1, W2);
          hence v in U2 by A1,VECTSP10:def 6;
        end;
        assume v in U2;
        then v in CosetSet(W1, W2) by A1,VECTSP10:def 6;
        then ex A being Coset of W2 st v = A;
        then consider vv1 be Vector of W1 such that
        X1: v = vv1 + W2 by VECTSP_4:def 6;
        consider vv be Element of V such that
        C2: v = vv + U1 & f.v = vv + W1 by A3;
        vv in vv1 + W2 by C2,X1,ZMODUL01:58;
        then vv in W1;
        then f.v = zeroCoset(V, W1) by C2,ZMODUL01:63
        .= 0.VectQuot(V, W1) by VECTSP10:def 6;
        hence v in ker f by RANKNULL:10;
      end;
      hence thesis by A1,ZMODUL01:46;
    end;
    A5: im f = VectQuot(V, W1)
    proof
      for y being object st y in the carrier of VectQuot(V, W1)
      holds f"{y} <> {}
      proof
        let y be object such that
        C2: y in the carrier of VectQuot(V, W1);
        y in CosetSet(V, W1) by C2,VECTSP10:def 6;
        then consider yy be Coset of W1 such that
        C8: y = yy;
        consider z be Element of V such that
        C3: y = z + W1 by C8,VECTSP_4:def 6;
        z + U1 is Coset of U1 by VECTSP_4:def 6;
        then z + U1 in CosetSet(V,U1);
        then reconsider y1 = z + U1 as Vector of VectQuot(V, U1)
        by VECTSP10:def 6;
        consider z1 be Element of V such that
        C6: y1 = z1 + U1 & f.y1 = z1 + W1 by A3;
        z1 in z1 + U1 by ZMODUL01:58;
        then consider w be Vector of V such that
        D21: z1 = z+ w & w in U1 by C6;
        w in W1 by A1,D21,ZMODUL01:24; then
        D3: z1 in z + W1 by D21;
        z1 in z1+W1 by ZMODUL01:58;
        then y = f.y1 by C3,C6,D3,ZMODUL01:68;
        then f.y1 in {y} by TARSKI:def 1;
        hence f"{y} <> {} by FUNCT_2:38;
      end;
      then B1: rng f = the carrier of VectQuot(V, W1) by FUNCT_2:41;
      B2: dom f = the carrier of VectQuot(V, U1) by FUNCT_2:def 1;
      the carrier of im f = [#]im f
      .= f .: [#]VectQuot(V, U1) by RANKNULL:def 2
      .= the carrier of VectQuot(V, W1) by B1,B2,RELAT_1:113;
      hence thesis by ZMODUL01:47;
    end;
    reconsider F = Zdecom(f) as linear-transformation of Z1, Z2
    by A4,A5;
    take F;
    thus thesis by A4,A5,defdecom;
  end;
