reserve I for non empty set;
reserve M for ManySortedSet of I;
reserve Y,x,y,y1,i,j for set;
reserve k for Element of NAT;
reserve p for FinSequence;
reserve S for non void non empty ManySortedSign;
reserve A for non-empty MSAlgebra over S;

theorem
  for B1,B2 be Subset of CongrLatt A, C1,C2 be MSCongruence of A st C1 =
  "\/"(B1,EqRelLatt the Sorts of A) & C2 = "\/"(B2,EqRelLatt the Sorts of A)
  holds C1 "\/" C2 = "\/"(B1 \/ B2,EqRelLatt the Sorts of A)
proof
  let B1,B2 be Subset of CongrLatt A;
  let C1,C2 be MSCongruence of A;
  set C = EqRelLatt the Sorts of A;
  assume
A1: C1 = "\/"(B1,EqRelLatt the Sorts of A) & C2 = "\/"(B2,EqRelLatt the
  Sorts of A);
  the carrier of CongrLatt A c= the carrier of EqRelLatt the Sorts of A by
NAT_LAT:def 12;
  then reconsider D1 = B1, D2 = B2 as Subset of EqRelLatt the Sorts of A by
XBOOLE_1:1;
A2: { "\/" D1, "\/" D2 } c= {"\/" Y where Y is Subset of C: Y in { B1,B2 } }
  proof
    let x be object;
    assume x in { "\/" D1, "\/" D2 };
    then
A3: x = "\/" D1 or x = "\/" D2 by TARSKI:def 2;
    D1 in { B1,B2 } & D2 in { B1,B2 } by TARSKI:def 2;
    hence thesis by A3;
  end;
  {"\/" Y where Y is Subset of C: Y in { B1,B2 } } c= { "\/" D1, "\/" D2 }
  proof
    let x be object;
    assume x in {"\/" Y where Y is Subset of C: Y in { B1,B2 } };
    then consider X1 be Subset of C such that
A4: x = "\/" X1 and
A5: X1 in { B1,B2 };
    X1 = B1 or X1 = B2 by A5,TARSKI:def 2;
    hence thesis by A4,TARSKI:def 2;
  end;
  then
A6: {"\/" Y where Y is Subset of C: Y in { B1,B2 } } = { "\/" D1, "\/" D2 }
  by A2;
  now
    let i be object;
    assume i in { B1,B2 };
    then i = D1 or i = D2 by TARSKI:def 2;
    hence i in bool the carrier of C;
  end;
  then
A7: { B1,B2 } c= bool the carrier of C;
  thus "\/" (B1 \/ B2,EqRelLatt the Sorts of A) = "\/" (union { B1,B2 }, C) by
ZFMISC_1:75
    .= "\/" ({"\/" Y where Y is Subset of C: Y in { B1,B2 } }, C) by A7,
LATTICE3:48
    .= ( "\/" D1 ) "\/" ( "\/" D2 ) by A6,LATTICE3:43
    .= (the L_join of C).(C1,C2) by A1,LATTICES:def 1
    .= C1 "\/" C2 by MSUALG_5:def 5;
end;
