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, W2 being Submodule of V,
  U1 being Submodule of W1 + W2, U2 being strict Submodule of W1
  st U1 = W2 & U2 = W1 /\ W2 holds
  ex F being linear-transformation of
  VectQuot(W1 + W2, U1), VectQuot(W1, U2)
  st F is bijective
  proof
    let R be Ring;
    let V be LeftMod of R, W1, W2 be Submodule of V,
        U1 be Submodule of W1 + W2,
    U2 be strict Submodule of W1 such that
    A1: U1 = W2 & U2 = W1 /\ W2;
    set Z1 = VectQuot(W1 + W2, U1);
    set Z2 = VectQuot(W1, U2);
    defpred P[object, object] means
    ex v being Element of W1 + W2 st $1 = v & $2 = v + U1;
    A2: for z being Element of W1 holds
    ex y being Element of Z1 st P[z,y]
    proof
      let z be Element of W1;
      reconsider zv = z as Element of V by ZMODUL01:25;
      zv in W1;
      then zv in W1 + W2 by ZMODUL01:93;
      then reconsider zz = zv as Element of W1 + W2;
      set y = zz + U1;
      y is Coset of U1 by VECTSP_4:def 6;
      then y in CosetSet(W1 + W2, U1);
      then reconsider yy = y as Element of Z1 by VECTSP10:def 6;
      take yy;
      thus thesis;
    end;
    consider f be Function of
    the carrier of W1, the carrier of Z1 such that
    A3: for z being Element of W1 holds P[z,f.z] from FUNCT_2:sch 3(A2);
    f is linear-transformation of W1, Z1
    proof
      for x, y being Element of W1 holds f.(x+y) = (f.x) + (f.y)
      proof
        let x, y be Element of W1;
        consider xx be Element of W1 + W2 such that
        C1: x = xx & f.x = xx + U1 by A3;
        consider yy be Element of W1 + W2 such that
        C2: y = yy & f.y = yy + U1 by A3;
        consider xy be Element of W1 + W2 such that
        C3: x + y = xy & f.(x+y) = xy + U1 by A3;
        reconsider xv = x, yv = y as Element of V by ZMODUL01:25;
        xx + U1 is Coset of U1 & yy + U1 is Coset of U1 by VECTSP_4:def 6;
        then xx + U1 in CosetSet(W1 + W2, U1) &
        yy + U1 in CosetSet(W1 + W2, U1);
        then reconsider xU = xx + U1, yU = yy + U1
        as Element of CosetSet(W1 + W2, U1);
        C4: xx + yy = xv + yv by C1,C2,ZMODUL01:28
        .= xy by C3,ZMODUL01:28;
        thus (f.x) + (f.y) = addCoset(W1 + W2, U1).(xU, yU)
        by C1,C2,VECTSP10:def 6
        .= f.(x+y) by C3,C4,VECTSP10:def 3;
      end;
      then B1: f is additive;
      for a being Element of R,
          x being Element of W1 holds f.(a*x) = a*(f.x)
      proof
        let a be Element of R, x be Element of W1;
        consider xx be Element of W1 + W2 such that
        C1: x = xx & f.x = xx + U1 by A3;
        consider ax be Element of W1 + W2 such that
        C2: a * x = ax & f.(a*x) = ax + U1 by A3;
        reconsider xv = x as Element of V by ZMODUL01:25;
        C3: a * xx = a * xv by C1,ZMODUL01:29
        .= ax by C2,ZMODUL01:29;
        xx + U1 is Coset of U1 by VECTSP_4:def 6;
        then xx + U1 in CosetSet(W1 + W2, U1);
        then reconsider xU = xx + U1 as Element of CosetSet(W1 + W2, U1);
        thus f.(a*x) = lmultCoset(W1 + W2, U1).(a, xU) by C2,C3,VECTSP10:def 5
        .= a*(f.x) by C1,VECTSP10:def 6;
      end;
      then f is homogeneous;
      hence thesis by B1;
    end;
    then reconsider f as linear-transformation of W1, Z1;
    A4: ker f = U2
    proof
      for v being Element of W1 holds v in ker f iff v in U2
      proof
        let v be Element of W1;
        hereby
          assume v in ker f;
          then C1: f.v = 0.Z1 by RANKNULL:10;
          consider vv be Element of W1 + W2 such that
          C2: v = vv & f.v = vv + U1 by A3;
          vv + U1 = zeroCoset(W1 + W2, U1) by C1,C2,VECTSP10:def 6
          .= the carrier of U1;
          then C3: v in W2 by A1,C2,ZMODUL01:63;
          v in W1;
          hence v in U2 by A1,C3,ZMODUL01:94;
        end;
        assume C1: v in U2;
        consider vv be Element of W1 + W2 such that
        C2: v = vv & f.v = vv + U1 by A3;
        vv in U1 by A1,C1,C2,ZMODUL01:94;
        then f.v = zeroCoset(W1 + W2, U1) by C2,ZMODUL01:63
        .= 0.Z1 by VECTSP10:def 6;
        hence v in ker f by RANKNULL:10;
      end;
      hence thesis by ZMODUL01:46;
    end;
    A5: im f = VectQuot(W1 + W2, U1)
    proof
      for y being object st y in the carrier of Z1
      holds f"{y} <> {}
      proof
        let y be object such that
        C2: y in the carrier of Z1;
        y in CosetSet(W1 + W2, U1) by C2,VECTSP10:def 6;
        then consider yy be Coset of U1 such that
        C8: y = yy;
        consider z be Element of W1 + W2 such that
        C3: y = z + U1 by C8,VECTSP_4:def 6;
        z in W1 + W2;
        then consider z1, z2 be Element of V such that
        C4: z1 in W1 & z2 in W2 & z = z1 + z2 by ZMODUL01:92;
        reconsider zz1 = z1 as Element of W1 by C4;
        consider zzz1 be Element of W1 + W2 such that
        C6: zz1 = zzz1 & f.zz1 = zzz1 + U1 by A3;
        z2 in W1 + W2 by C4,ZMODUL01:93;
        then reconsider zzz2 = z2 as Element of W1 + W2;
        C7: z = zzz1 + zzz2 by C4,C6,ZMODUL01:28;
        y = f.zz1 by A1,C3,C4,C6,C7,ZMODUL01:65;
        then f.zz1 in {y} by TARSKI:def 1;
        hence f"{y} <> {} by FUNCT_2:38;
      end;
      then B1: rng f = the carrier of Z1 by FUNCT_2:41;
      B2: dom f = the carrier of W1 by FUNCT_2:def 1;
      the carrier of im f = [#]im f
      .= f .: [#]W1 by RANKNULL:def 2
      .= the carrier of Z1 by B1,B2,RELAT_1:113;
      hence thesis by ZMODUL01:47;
    end;
    reconsider F = Zdecom(f) as linear-transformation of Z2, Z1 by A4,A5;
    consider FI be linear-transformation of Z1, Z2 such that
    X1: FI = F" & FI is bijective by A4,A5,defdecom,ZMODUL06:42;
    take FI;
    thus thesis by X1;
  end;
