The Mizar article:

Filters - Part II. Quotient Lattices Modulo Filters and Direct Product of Two Lattices

by
Grzegorz Bancerek

Received April 19, 1991

Copyright (c) 1991 Association of Mizar Users

MML identifier: FILTER_1
[ MML identifier index ]


environ

 vocabulary LATTICES, FILTER_0, RELAT_1, EQREL_1, BINOP_1, BOOLE, FUNCT_1,
      LATTICE2, ZF_LANG, SUBSET_1, FUNCT_4, WELLORD1, FUNCT_3, PARTFUN1,
      FILTER_1;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1, FUNCT_1, FUNCT_2,
      BINOP_1, EQREL_1, DOMAIN_1, WELLORD1, FUNCT_3, FUNCT_4, STRUCT_0,
      LATTICES, FILTER_0, LATTICE2;
 constructors BINOP_1, DOMAIN_1, WELLORD1, FUNCT_3, FUNCT_4, FILTER_0,
      LATTICE2, MEMBERED, EQREL_1, XBOOLE_0;
 clusters LATTICES, FILTER_0, LATTICE2, RELSET_1, STRUCT_0, SUBSET_1, MEMBERED,
      ZFMISC_1, XBOOLE_0, PARTFUN1;
 requirements SUBSET, BOOLE;
 definitions TARSKI, FUNCT_1, WELLORD1, BINOP_1, FILTER_0, LATTICE2, LATTICES,
      STRUCT_0, XBOOLE_0;
 theorems FUNCT_1, FUNCT_2, FUNCT_3, FUNCT_4, WELLORD1, DOMAIN_1, BINOP_1,
      EQREL_1, RELAT_1, ZFMISC_1, LATTICES, FILTER_0, LATTICE2, STRUCT_0,
      RELSET_1, WELLORD2, XBOOLE_0, XBOOLE_1;
 schemes FUNCT_1, FUNCT_2, BINOP_1;

begin

 deffunc carr(LattStr) = the carrier of $1;
 deffunc join(LattStr) = the L_join of $1;
 deffunc meet(LattStr) = the L_meet of $1;

 reserve L,L1,L2 for Lattice, F1,F2 for Filter of L,
  p,q,r,s for Element of L,
  p1,q1,r1,s1 for Element of L1,
  p2,q2,r2,s2 for Element of L2,
  X,x,x1,x2,y,y1,y2 for set,
  D,D1,D2 for non empty set, R for Relation,
  R_D for Equivalence_Relation of D,
  a,b,d for Element of D,
  a1,b1,c1 for Element of D1,
  a2,b2,c2 for Element of D2,
  B for B_Lattice, F_B for Filter of B,
  I for I_Lattice, F_I for Filter of I,
  i,i1,i2,j,j1,j2,k for Element of I,
  f1,g1 for BinOp of D1, f2,g2 for BinOp of D2;

theorem
 Th1: F1 /\ F2 is Filter of L
  proof consider p such that
A1:  p in F1 by FILTER_0:11;
   consider q such that
A2:  q in F2 by FILTER_0:11;
      p "\/" q in F1 & p "\/" q in F2 by A1,A2,FILTER_0:10;
   then reconsider D = F1 /\ F2 as non empty Subset of L
     by XBOOLE_0:def 3;
      D is Filter of L
     proof let p,q;
         (p in D & q in D iff p in F1 & q in F1 & p in F2 & q in F2) &
       (p "/\" q in F1 & p "/\" q in F2 iff p in F1 & q in F1 & p in F2 & q in
 F2) &
       (p "/\" q in F1 & p "/\" q in F2 iff p "/\" q in F1 /\ F2)
         by FILTER_0:def 1,XBOOLE_0:def 3;
      hence thesis;
     end;
   hence thesis;
  end;

theorem
   <.p.) = <.q.) implies p = q
  proof assume <.p.) = <.q.);
    then p in <.q.) & q in <.p.) by FILTER_0:19;
    then p [= q & q [= p by FILTER_0:18;
   hence thesis by LATTICES:26;
  end;

 definition let L,F1,F2;
  redefine func F1 /\ F2 -> Filter of L;
   coherence by Th1;
 end;

 definition let D,R;
  mode UnOp of D,R -> UnOp of D means :Def1:
   for x,y being Element of D st [x,y] in R
      holds [it.x,it.y] in R;
   existence
    proof
     deffunc F(Element of D) = $1;
     consider f being UnOp of D such that
A1:    for x being Element of D holds f.x = F(x) from LambdaD;
     take f; let x,y be Element of D;
        f.x = x & f.y = y by A1;
     hence thesis;
    end;

  mode BinOp of D,R -> BinOp of D means :Def2:
   for x1,y1, x2,y2 being Element of D
   st [x1,y1] in R & [x2,y2] in R holds
    [it.(x1,x2),it.(y1,y2)] in R;
   existence
    proof
     deffunc F(Element of D,Element of D) = $1;
     consider f being BinOp of D such that
A2:    for x,y being Element of D holds f.(x,y) = F(x,y)
         from BinOpLambda;
     take f; let x1,y1, x2,y2 be Element of D;
        f.(x1,x2) = x1 & f.(y1,y2) = y1 by A2;
     hence thesis;
    end;
 end;

 reserve F,G for BinOp of D,R_D;

 definition let D; let R be Equivalence_Relation of D;
  mode UnOp of R is UnOp of D,R;
  mode BinOp of R is BinOp of D,R;
  cluster Class R -> non empty;
   coherence
    proof consider d being Element of D;
        Class(R,d) in Class R by EQREL_1:def 5;
     hence thesis;
    end;
 end;

 definition let D; let R be Equivalence_Relation of D;
  let d be Element of D;
  redefine func Class(R,d) -> Element of Class R;
   coherence by EQREL_1:def 5;
 end;

 definition let D; let R be Equivalence_Relation of D; let u be UnOp of D;
  assume
A1: u is UnOp of D,R;
  func u /\/ R -> UnOp of Class R means
     for x,y st x in Class R & y in x holds it.x = Class(R,u.y);

   existence
    proof
       deffunc F(Element of D) = Class(R,$1);
       consider f being Function of D, Class R such that
A2:    for x being Element of D holds f.x = F(x) from LambdaD;
        now let X; assume X in Class R;
       then consider x such that
A3:      x in D & X = Class(R,x) by EQREL_1:def 5;
       thus X <> {} by A3,EQREL_1:28;
      end;
     then consider g being Function such that
A4:    dom g = Class R & for X st X in Class R holds g.X in X by WELLORD2:28;
A5:    rng g c= D
       proof let x; assume x in rng g;
        then consider y such that
A6:      y in dom g & x = g.y by FUNCT_1:def 5;
           x in y & y c= D by A4,A6;
        hence thesis;
       end;
     then reconsider g as Function of Class R, D by A4,FUNCT_2:def 1,RELSET_1:
11;
     take uR = f*u*g; let x,y;
     assume
A7:    x in Class R & y in x;
     then reconsider x' = x as Element of Class R;
     reconsider y' = y as Element of D by A7;
        g.x in rng g by A4,A7,FUNCT_1:def 5;
      then g.x in D & D = dom (f*u) & Class R = dom uR by A5,FUNCT_2:def 1;
then A8:    uR.x = (f*u).(g.x) & (f*u).(g.x) = f.(u.(g.x)) by A7,FUNCT_1:22;
 A9:     ex x1 st x1 in D & x' = Class(R,x1) by EQREL_1:def 5;
        g.x' in x by A4;
      then [g.x',y'] in R by A7,A9,EQREL_1:30;
      then [u.(g.x'),u.y'] in R by A1,Def1;
      then u.(g.x') in Class(R,u.y') & f.(u.(g.x')) = Class(R,u.(g.x')) &
       f.(u.y') = Class(R,u.y') by A2,EQREL_1:27;
     hence uR.x = Class(R,u.y) by A8,EQREL_1:31;
    end;
   uniqueness
    proof let u1,u2 be UnOp of Class R such that
A10:   for x,y st x in Class R & y in x holds u1.x = Class(R,u.y) and
A11:   for x,y st x in Class R & y in x holds u2.x = Class(R,u.y);
        now let x; assume
A12:     x in Class R;
       then consider y such that
A13:     y in D & x = Class(R,y) by EQREL_1:def 5;
          y in x by A13,EQREL_1:28;
        then u1.x = Class(R,u.y) & u2.x = Class(R,u.y) by A10,A11,A12;
       hence u1.x = u2.x;
      end;
     hence thesis by FUNCT_2:18;
    end;
 end;

 definition let D; let R be Equivalence_Relation of D; let b be BinOp of D;
  assume
A1: b is BinOp of D,R;
  func b /\/ R -> BinOp of Class R means:Def4:
   for x,y, x1,y1 st x in Class R & y in Class R & x1 in x & y1 in y holds
    it.(x,y) = Class(R,b.(x1,y1));
   existence
    proof
     deffunc F(Element of D) = Class(R,$1);
     consider f being Function of D, Class R such that
A2:    for x being Element of D holds f.x = F(x) from LambdaD;
        now let X; assume X in Class R;
       then consider x such that
A3:      x in D & X = Class(R,x) by EQREL_1:def 5;
       thus X <> {} by A3,EQREL_1:28;
      end;
     then consider g being Function such that
A4:    dom g = Class R & for X st X in Class R holds g.X in X by WELLORD2:28;
        rng g c= D
       proof let x; assume x in rng g;
        then consider y such that
A5:      y in dom g & x = g.y by FUNCT_1:def 5;
           x in y & y c= D by A4,A5;
        hence thesis;
       end;
     then reconsider g as Function of Class R, D by A4,FUNCT_2:def 1,RELSET_1:
11;
     deffunc F(Element of Class R,Element of Class R) = f.(b.(g.$1,g.$2));
     consider bR being BinOp of Class R such that
A6:    for x,y being Element of Class R
       holds bR.(x,y) = F(x,y) from BinOpLambda;
     take bR; let x,y, x1,y1;
     assume
A7:    x in Class R & y in Class R & x1 in x & y1 in y;
     then reconsider x' = x, y' = y as Element of Class R;
     reconsider x1' = x1, y1' = y1 as Element of D by A7;
 A8:     ex x2 st x2 in D & x' = Class(R,x2) by EQREL_1:def 5;
 A9:     ex y2 st y2 in D & y' = Class(R,y2) by EQREL_1:def 5;
        g.x' in x & g.y' in y by A4;
      then [g.x',x1'] in R & [g.y',y1'] in R by A7,A8,A9,EQREL_1:30;
      then [b.(g.x',g.y'),b.(x1',y1')] in R by A1,Def2;
      then b.(g.x',g.y') in Class(R,b.(x1',y1')) & bR.(x',y') = f.(b.(g.x',g.
y')) &
       f.(b.(g.x',g.y')) = Class(R,b.(g.x',g.y')) &
        f.(b.(x1',y1')) = Class(R,b.(x1',y1')) by A2,A6,EQREL_1:27;
     hence bR.(x,y) = Class(R,b.(x1,y1)) by EQREL_1:31;
    end;
   uniqueness
    proof let b1,b2 be BinOp of Class R such that
A10:   for x,y, x1,y1 st x in Class R & y in Class R & x1 in x & y1 in y holds
       b1.(x,y) = Class(R,b.(x1,y1)) and
A11:   for x,y, x1,y1 st x in Class R & y in Class R & x1 in x & y1 in y holds
       b2.(x,y) = Class(R,b.(x1,y1));
        now let x,y be Element of Class R;
       consider x1 such that
A12:     x1 in D & x = Class(R,x1) by EQREL_1:def 5;
       consider y1 such that
A13:     y1 in D & y = Class(R,y1) by EQREL_1:def 5;
          x1 in x & y1 in y by A12,A13,EQREL_1:28;
        then b1.(x,y) = Class(R,b.(x1,y1)) &
         b2.(x,y) = Class(R,b.(x1,y1)) by A10,A11;
       hence b1.(x,y) = b2.(x,y);
      end;
     hence thesis by BINOP_1:2;
    end;
 end;

theorem
 Th3: (F /\/ R_D).(Class(R_D,a), Class(R_D,b)) = Class(R_D, F.(a,b))
  proof a in Class(R_D,a) & b in Class(R_D,b) by EQREL_1:28;
   hence thesis by Def4;
  end;

SchAux1 { D()->non empty set, R()->Equivalence_Relation of D(), P[set] }:
 for x being Element of Class R() holds P[x]
  provided
A1: for x being Element of D() holds P[Class(R(),x)]
  proof let x be Element of Class R();
      ex y st y in D() & x = Class(R(),y) by EQREL_1:def 5;
   hence thesis by A1;
  end;

SchAux2 { D()->non empty set, R()->Equivalence_Relation of D(), P[set,set] }:
 for x,y being Element of Class R() holds P[x,y]
  provided
A1: for x,y being Element of D() holds P[Class(R(),x),Class(R(),y)]
  proof let x1,x2 be Element of Class R();
 A2:   ex y1 st y1 in D() & x1 = Class(R(),y1) by EQREL_1:def 5;
      ex y2 st y2 in D() & x2 = Class(R(),y2) by EQREL_1:def 5;
   hence thesis by A1,A2;
  end;

SchAux3 { D()->non empty set, R()->Equivalence_Relation of D(),
          P[set,set,set] }:
 for x,y,z being Element of Class R() holds P[x,y,z]
  provided
A1: for x,y,z being Element of D() holds
     P[Class(R(),x),Class(R(),y),Class(R(),z)]
  proof let x1,x2,x3 be Element of Class R();
 A2:   ex y1 st y1 in D() & x1 = Class(R(),y1) by EQREL_1:def 5;
 A3:   ex y2 st y2 in D() & x2 = Class(R(),y2) by EQREL_1:def 5;
      ex y3 be set st y3 in D() & x3 = Class(R(),y3) by EQREL_1:def 5;
   hence thesis by A1,A2,A3;
  end;

theorem
 Th4: F is commutative implies F/\/R_D is commutative
  proof assume
A1:  for a,b holds F.(a,b) = F.(b,a);
   defpred P[Element of Class R_D, Element of Class R_D] means
      (F/\/R_D).($1,$2) = (F/\/R_D).($2,$1);
A2:  now let x1,x2 be Element of D;
     thus P[Class(R_D,x1),Class(R_D,x2)]
     proof
     thus (F/\/R_D).(Class(R_D,x1),Class(R_D,x2))
        = Class(R_D, F.(x1,x2)) by Th3
       .= Class(R_D, F.(x2,x1)) by A1
       .= (F/\/R_D).(Class(R_D,x2),Class(R_D,x1)) by Th3;
    end;
    end;
    thus for c1,c2 being Element of Class R_D holds P[c1,c2]
     from SchAux2(A2);
  end;

theorem
 Th5: F is associative implies F/\/R_D is associative
  proof assume
A1:  for d,a,b holds F.(d,F.(a,b)) = F.(F.(d,a),b);
   defpred P[Element of Class R_D, Element of Class R_D, Element of Class R_D]
      means
      (F/\/R_D).($1,(F/\/R_D).($2,$3)) = (F/\/R_D).((F/\/R_D).($1,$2),$3);
A2:  now let x1,x2,x3 be Element of D;
    thus P[Class(R_D,x1),Class(R_D,x2),Class(R_D,x3)]
    proof
     thus (F/\/R_D).(Class(R_D,x1),(F/\/R_D).(Class(R_D,x2),Class(R_D,x3)))
        = (F/\/R_D).(Class(R_D,x1),Class(R_D, F.(x2,x3))) by Th3
       .= Class(R_D, F.(x1,F.(x2,x3))) by Th3
       .= Class(R_D, F.(F.(x1,x2),x3)) by A1
       .= (F/\/R_D).(Class(R_D,F.(x1,x2)),Class(R_D, x3)) by Th3
       .= (F/\/R_D).((F/\/R_D).(Class(R_D,x1),Class(R_D,x2)),Class(R_D,x3))
           by Th3;
     end;
    end;
   thus for c1,c2,c3 being Element of Class R_D holds P[c1,c2,c3]
       from SchAux3(A2);
  end;

theorem
 Th6: d is_a_left_unity_wrt F implies Class(R_D,d) is_a_left_unity_wrt F/\/R_D
  proof assume
A1:  F.(d,a) = a;
   defpred P[Element of Class R_D] means
     (F/\/R_D).(Class(R_D,d),$1) = $1;
A2:  now let a;
     thus P[Class(R_D,a)]
     proof
       thus (F/\/R_D).(Class(R_D,d),Class(R_D,a))
          = Class(R_D, F.(d,a)) by Th3 .= Class(R_D, a) by A1;
     end;
    end;
   thus for c being Element of Class R_D holds P[c]
       from SchAux1(A2);
  end;

theorem
 Th7: d is_a_right_unity_wrt F implies
   Class(R_D,d) is_a_right_unity_wrt F/\/R_D
  proof assume
A1:  F.(a,d) = a;
   defpred P[Element of Class R_D] means
     (F/\/R_D).($1,Class(R_D,d)) = $1;
A2:  now let a;
     thus P[Class(R_D,a)]
     proof
       thus (F/\/R_D).(Class(R_D,a),Class(R_D,d))
          = Class(R_D, F.(a,d)) by Th3 .= Class(R_D, a) by A1;
     end;
    end;
   thus for c being Element of Class R_D holds P[c]
       from SchAux1(A2);
  end;

theorem
   d is_a_unity_wrt F implies Class(R_D,d) is_a_unity_wrt F/\/R_D
  proof assume
      d is_a_left_unity_wrt F & d is_a_right_unity_wrt F;
   hence Class(R_D,d) is_a_left_unity_wrt F/\/R_D &
         Class(R_D,d) is_a_right_unity_wrt F/\/R_D by Th6,Th7;
  end;

theorem Th9:
 F is_left_distributive_wrt G implies F/\/R_D is_left_distributive_wrt G/\/R_D
  proof assume
A1:  for d,a,b holds F.(d,G.(a,b)) = G.(F.(d,a),F.(d,b));
   deffunc Cl(Element of D) = Class(R_D,$1);
   defpred P[Element of Class R_D, Element of Class R_D, Element of Class R_D]
      means (F/\/R_D).($1,(G/\/R_D).($2,$3)) =
       (G/\/R_D).((F/\/R_D).($1,$2),(F/\/R_D).($1,$3));
A2:  now let x1,x2,x3 be Element of D;
      thus P[Class(R_D,x1),Class(R_D,x2),Class(R_D,x3)]
      proof
       thus (F/\/R_D).(Cl(x1),(G/\/R_D).(Cl(x2),Cl(x3)))
        = (F/\/R_D).(Cl(x1),Cl(G.(x2,x3))) by Th3
       .= Cl(F.(x1,G.(x2,x3))) by Th3
       .= Cl(G.(F.(x1,x2),F.(x1,x3))) by A1
       .= (G/\/R_D).(Cl(F.(x1,x2)),Cl(F.(x1,x3))) by Th3
       .= (G/\/R_D).((F/\/R_D).(Cl(x1),Cl(x2)),Cl(F.(x1,x3))) by Th3
       .= (G/\/R_D).((F/\/R_D).(Cl(x1),Cl(x2)),(F/\/R_D).(Cl(x1),Cl(x3)))
         by Th3;
      end;
    end;
   thus for c1,c2,c3 being Element of Class R_D holds P[c1,c2,c3]
    from SchAux3(A2);
  end;

theorem Th10:
 F is_right_distributive_wrt G implies
   F/\/R_D is_right_distributive_wrt G/\/R_D
  proof assume
A1:  for a,b,d holds F.(G.(a,b),d) = G.(F.(a,d),F.(b,d));
   deffunc Cl(Element of D) = Class(R_D,$1);
   defpred P[Element of Class R_D, Element of Class R_D, Element of Class R_D]
    means (F/\/R_D).((G/\/R_D).($1,$2),$3) =
      (G/\/R_D).((F/\/R_D).($1,$3),(F/\/R_D).($2,$3));
A2:  now let x2,x3,x1 be Element of D;
      thus P[Class(R_D,x2),Class(R_D,x3),Class(R_D,x1)]
      proof
       thus (F/\/R_D).((G/\/R_D).(Cl(x2),Cl(x3)),Cl(x1))
        = (F/\/R_D).(Cl(G.(x2,x3)),Cl(x1)) by Th3
       .= Cl(F.(G.(x2,x3),x1)) by Th3
       .= Cl(G.(F.(x2,x1),F.(x3,x1))) by A1
       .= (G/\/R_D).(Cl(F.(x2,x1)),Cl(F.(x3,x1))) by Th3
       .= (G/\/R_D).((F/\/R_D).(Cl(x2),Cl(x1)),Cl(F.(x3,x1))) by Th3
       .= (G/\/R_D).((F/\/R_D).(Cl(x2),Cl(x1)),(F/\/R_D).(Cl(x3),Cl(x1)))
         by Th3;
      end;
    end;
  thus for c2,c3,c1 being Element of Class R_D holds P[c2,c3,c1]
      from SchAux3(A2);
  end;

theorem
   F is_distributive_wrt G implies F/\/R_D is_distributive_wrt G/\/R_D
  proof assume
      F is_left_distributive_wrt G & F is_right_distributive_wrt G;
   hence F/\/R_D is_left_distributive_wrt G/\/R_D &
         F/\/R_D is_right_distributive_wrt G/\/R_D by Th9,Th10;
  end;

theorem
 Th12: F absorbs G implies F/\/R_D absorbs G/\/R_D
  proof assume
A1:  for x,y being Element of D holds F.(x,G.(x,y)) = x;
   deffunc Cl(Element of D) = Class(R_D,$1);
   defpred P[Element of Class R_D,Element of Class R_D] means
     (F/\/R_D).($1,(G/\/R_D).($1,$2)) = $1;
A2:  now let x1,x2 be Element of D;
      thus  P[Class(R_D  ,x1),Class(R_D,x2)]
       proof
        thus (F/\/R_D).(Cl(x1),(G/\/R_D).(Cl(x1),Cl(x2)))
         = (F/\/R_D).(Cl(x1),Cl(G.(x1,x2))) by Th3
        .= Cl(F.(x1,G.(x1,x2))) by Th3
        .= Cl(x1) by A1;
       end;
    end;
   thus for x,y being Element of Class R_D holds P[x,y] from SchAux2(A2);
  end;

theorem
 Th13: the L_join of I is BinOp of the carrier of I, equivalence_wrt F_I
  proof
   set R = equivalence_wrt F_I;
   set o = the L_join of I;
   let x1,y1, x2,y2 be Element of (the carrier of I);
   assume [x1,y1] in R & [x2,y2] in R;
    then x1 <=> y1 in F_I & x2 <=> y2 in F_I &
    x1 <=> y1 = (x1 => y1) "/\" (y1 => x1) &
    x2 <=> y2 = (x2 => y2) "/\" (y2 => x2)
     by FILTER_0:def 11,def 12;
then A1:  x1 => y1 in F_I & x2 => y2 in F_I & y1 => x1 in F_I & y2 => x2 in F_I
     by FILTER_0:def 1;
      x2 "/\" (x1 => y1) = (x1 => y1) "/\" x2 &
    (x1 => y1) "/\" (x2 "/\" (x2 => y2)) = (x1 => y1) "/\" x2 "/\" (x2 => y2) &
    x1 "/\" ((x1 => y1) "/\" (x2 => y2)) = x1 "/\" (x1 => y1) "/\" (x2 => y2) &
    x2 "/\" ((x1 => y1) "/\" (x2 => y2)) = x2 "/\" (x1 => y1) "/\" (x2 => y2) &
    x1 "/\" (x1 => y1) [= y1 & x2 "/\" (x2 => y2) [= y2
     by FILTER_0:def 8,LATTICES:def 7;
    then x1 "/\" ((x1 => y1) "/\" (x2 => y2)) [= y1 &
     x2 "/\" ((x1 => y1) "/\" (x2 => y2)) [= y2 by FILTER_0:2;
    then x1 "/\" ((x1 => y1) "/\" (x2 => y2)) "\/" (x2 "/\" ((x1 => y1) "/\"
 (x2 => y2))) [=
     y1 "\/" y2 by FILTER_0:4;
    then (x1 "\/" x2) "/\" ((x1 => y1) "/\" (x2 => y2)) [= y1 "\/"
 y2 by LATTICES:def 11;
    then (x1 => y1) "/\" (x2 => y2) [= (x1 "\/" x2) => (y1 "\/" y2) &
    (x1 => y1) "/\" (x2 => y2) in F_I by A1,FILTER_0:def 1,def 8;
then A2:  (x1 "\/" x2) => (y1 "\/" y2) in F_I by FILTER_0:9;
      y2 "/\" (y1 => x1) = (y1 => x1) "/\" y2 &
    (y1 => x1) "/\" (y2 "/\" (y2 => x2)) = (y1 => x1) "/\" y2 "/\" (y2 => x2) &
    y1 "/\" ((y1 => x1) "/\" (y2 => x2)) = y1 "/\" (y1 => x1) "/\" (y2 => x2) &
    y2 "/\" ((y1 => x1) "/\" (y2 => x2)) = y2 "/\" (y1 => x1) "/\" (y2 => x2) &
    y1 "/\" (y1 => x1) [= x1 & y2 "/\" (y2 => x2) [= x2
     by FILTER_0:def 8,LATTICES:def 7;
    then y1 "/\" ((y1 => x1) "/\" (y2 => x2)) [= x1 &
     y2 "/\" ((y1 => x1) "/\" (y2 => x2)) [= x2 by FILTER_0:2;
    then y1 "/\" ((y1 => x1) "/\" (y2 => x2)) "\/" (y2 "/\" ((y1 => x1) "/\"
 (y2 => x2))) [=
     x1 "\/" x2 by FILTER_0:4;
    then (y1 "\/" y2) "/\" ((y1 => x1) "/\" (y2 => x2)) [= x1 "\/"
 x2 by LATTICES:def 11;
    then (y1 => x1) "/\" (y2 => x2) [= (y1 "\/" y2) => (x1 "\/" x2) &
    (y1 => x1) "/\" (y2 => x2) in F_I by A1,FILTER_0:def 1,def 8;
    then ((x1 "\/" x2) => (y1 "\/" y2)) "/\" ((y1 "\/" y2) => (x1 "\/" x2)) =
       (x1 "\/" x2) <=> (y1 "\/" y2) &
    (y1 "\/" y2) => (x1 "\/" x2) in F_I by FILTER_0:9,def 11;
    then (x1 "\/" x2) <=> (y1 "\/" y2) in F_I &
    o.(x1,x2) = x1 "\/" x2 & o.(y1,y2) = y1 "\/" y2
     by A2,FILTER_0:def 1,LATTICES:def 1;
   hence [o.(x1,x2),o.(y1,y2)] in R by FILTER_0:def 12;
  end;

theorem
 Th14: the L_meet of I is BinOp of the carrier of I, equivalence_wrt F_I
  proof
   set R = equivalence_wrt F_I;
   set o = the L_meet of I;
   let x1,y1, x2,y2 be Element of I;
   assume [x1,y1] in R & [x2,y2] in R;
    then x1 <=> y1 in F_I & x2 <=> y2 in F_I &
    x1 <=> y1 = (x1 => y1) "/\" (y1 => x1) &
    x2 <=> y2 = (x2 => y2) "/\" (y2 => x2)
     by FILTER_0:def 11,def 12;
then A1:  x1 => y1 in F_I & x2 => y2 in F_I & y1 => x1 in F_I & y2 => x2 in F_I
     by FILTER_0:def 1;
      x1 "/\" (x1 => y1) [= y1 & x2 "/\" (x2 => y2) [= y2
     by FILTER_0:def 8;
    then x1 "/\" (x1 => y1) "/\" (x2 "/\" (x2 => y2)) =
       x1 "/\" (x1 => y1) "/\" x2 "/\" (x2 => y2) & x2 "/\" x1 = x1 "/\" x2 &
    x1 "/\" (x1 => y1) "/\" x2 = x2 "/\" (x1 "/\" (x1 => y1)) &
    x2 "/\" x1 "/\" (x1 => y1) = x2 "/\" (x1 "/\" (x1 => y1)) &
    x1 "/\" x2 "/\" (x1 => y1) "/\" (x2 => y2) =
       x1 "/\" x2 "/\" ((x1 => y1) "/\" (x2 => y2)) &
    x1 "/\" (x1 => y1) "/\" (x2 "/\" (x2 => y2)) [= y1 "/\" y2
     by FILTER_0:5,LATTICES:def 7;
    then (x1 => y1) "/\" (x2 => y2) [= (x1 "/\" x2) => (y1 "/\" y2) &
    (x1 => y1) "/\" (x2 => y2) in F_I by A1,FILTER_0:def 1,def 8;
then A2:  (x1 "/\" x2) => (y1 "/\" y2) in F_I by FILTER_0:9;
      y1 "/\" (y1 => x1) [= x1 & y2 "/\" (y2 => x2) [= x2
     by FILTER_0:def 8;
    then y1 "/\" (y1 => x1) "/\" (y2 "/\" (y2 => x2)) =
       y1 "/\" (y1 => x1) "/\" y2 "/\" (y2 => x2) & y2 "/\" y1 = y1 "/\" y2 &
    y1 "/\" (y1 => x1) "/\" y2 = y2 "/\" (y1 "/\" (y1 => x1)) &
    y2 "/\" y1 "/\" (y1 => x1) = y2 "/\" (y1 "/\" (y1 => x1)) &
    y1 "/\" y2 "/\" (y1 => x1) "/\" (y2 => x2) =
       y1 "/\" y2 "/\" ((y1 => x1) "/\" (y2 => x2)) &
    y1 "/\" (y1 => x1) "/\" (y2 "/\" (y2 => x2)) [= x1 "/\" x2
     by FILTER_0:5,LATTICES:def 7;
    then (y1 => x1) "/\" (y2 => x2) [= (y1 "/\" y2) => (x1 "/\" x2) &
    (y1 => x1) "/\" (y2 => x2) in F_I by A1,FILTER_0:def 1,def 8;
    then ((x1 "/\" x2) => (y1 "/\" y2)) "/\" ((y1 "/\" y2) => (x1 "/\" x2)) =
       (x1 "/\" x2) <=> (y1 "/\" y2) &
    (y1 "/\" y2) => (x1 "/\" x2) in F_I by FILTER_0:9,def 11;
    then (x1 "/\" x2) <=> (y1 "/\" y2) in F_I &
    o.(x1,x2) = x1 "/\" x2 & o.(y1,y2) = y1 "/\" y2
     by A2,FILTER_0:def 1,LATTICES:def 2;
   hence [o.(x1,x2),o.(y1,y2)] in R by FILTER_0:def 12;
  end;

 definition let L be Lattice, F be Filter of L;
  assume
A1:
   L is I_Lattice;
  func L /\/ F -> strict Lattice means:
Def5:
   for R being Equivalence_Relation of the carrier of L st
    R = equivalence_wrt F holds
     it = LattStr (#Class R, (the L_join of L)/\/R, (the L_meet of L)/\/R#);
   existence
    proof reconsider I = L as I_Lattice by A1;
     reconsider F_I = F as Filter of I;
     reconsider j = the L_join of I, m = the L_meet of I as
       BinOp of equivalence_wrt F_I by Th13,Th14;
     reconsider LL = LattStr (#Class equivalence_wrt F_I,
                       j/\/equivalence_wrt F_I,
                       m/\/equivalence_wrt F_I#)
        as non empty strict LattStr by STRUCT_0:def 1;
        join(L) is commutative & join(L) is associative &
      meet(L) is commutative & meet(L) is associative &
      join(L) absorbs meet(L) & meet(L) absorbs join(L)
       by LATTICE2:40,41;
      then join(LL) is commutative & join(LL) is associative &
      meet(LL) is commutative & meet(LL) is associative &
      join(LL) absorbs meet(LL) & meet(LL) absorbs join(LL)
       by Th4,Th5,Th12;
     then reconsider LL as strict Lattice by LATTICE2:17;
     take LL; thus thesis;
    end;
   uniqueness
    proof let L1, L2 be strict Lattice such that
A2:   for R being Equivalence_Relation of the carrier of L st
       R = equivalence_wrt F holds
       L1 = LattStr (#Class R, (the L_join of L)/\/R, (the L_meet of L)/\/R#)
 and
A3:   for R being Equivalence_Relation of the carrier of L st
       R = equivalence_wrt F holds
       L2 = LattStr (#Class R, (the L_join of L)/\/R, (the L_meet of L)/\/R#);
     reconsider I = L as I_Lattice by A1;
     reconsider FI = F as Filter of I;
     set R = equivalence_wrt FI;
     reconsider o1 = join(L), o2 = meet(L) as BinOp of R by Th13,Th14;
     thus L1 = LattStr (#Class R, o1/\/R, o2/\/R#) by A2 .= L2 by A3;
    end;
 end;

 definition let L be Lattice, F be Filter of L,
    a be Element of L;
  assume
A1:
   L is I_Lattice;
  func a /\/ F -> Element of L /\/ F means:
Def6:
    for R being Equivalence_Relation of the carrier of L st
      R = equivalence_wrt F holds it = Class(R, a);
   existence
    proof reconsider I = L as I_Lattice by A1;
     reconsider F_I = F as Filter of I;
     reconsider i = a as Element of I;
     set R = equivalence_wrt F_I;
     reconsider j = join(I), m = meet(I) as BinOp of R by Th13,Th14;
        I /\/ F_I = LattStr (#Class R, j/\/R, m/\/R#) by Def5;
     then reconsider c = Class(equivalence_wrt F_I,i)
        as Element of L/\/F;
     take c; thus thesis;
    end;
   uniqueness
    proof let c1,c2 be Element of L /\/ F such that
A2:   for R being Equivalence_Relation of the carrier of L st
       R = equivalence_wrt F holds c1 = Class(R, a) and
A3:   for R being Equivalence_Relation of the carrier of L st
       R = equivalence_wrt F holds c2 = Class(R, a);
     reconsider I = L as I_Lattice by A1;
     reconsider F_I = F as Filter of I;
        c1 = Class(equivalence_wrt F_I, a) by A2;
     hence thesis by A3;
    end;
 end;

theorem
 Th15: (i/\/F_I) "\/" (j/\/F_I) = (i"\/"j)/\/F_I &
   (i/\/F_I) "/\" (j/\/F_I) = (i"/\"j)/\/F_I
  proof set R = equivalence_wrt F_I;
   reconsider jj = join(I), mm = meet(I) as BinOp of R by Th13,Th14;
A1:  i/\/F_I = Class(R,i) & j/\/F_I = Class(R,j) &
    (i"\/"j)/\/F_I = Class(R,i"\/"j) &
    (i"/\"j)/\/F_I = Class(R,i"/\"j) by Def6;
A2:  I /\/ F_I = LattStr (#Class R, jj/\/R, mm/\/R#) by Def5;
   hence (i/\/F_I) "\/" (j/\/F_I) =
         (jj/\/R).(i/\/F_I,j/\/F_I) by LATTICES:def 1
      .= Class(R,jj.(i,j)) by A1,Th3 .= (i"\/"j)/\/F_I by A1,LATTICES:def 1;
   thus (i/\/F_I) "/\" (j/\/F_I) =
         (mm/\/R).(i/\/F_I,j/\/F_I) by A2,LATTICES:def 2
      .= Class(R,mm.(i,j)) by A1,Th3 .= (i"/\"j)/\/F_I by A1,LATTICES:def 2;
  end;

theorem
 Th16: i/\/F_I [= j/\/F_I iff i => j in F_I
  proof set R = equivalence_wrt F_I;
   set a = i"\/"j; set b = a => j;
   thus i/\/F_I [= j/\/F_I implies i => j in F_I
     proof assume (i/\/F_I) "\/" (j/\/F_I) = j/\/F_I;
       then (i"\/"j)/\/F_I = j/\/F_I & Class(R,i"\/"j) = (i"\/"j)/\/F_I &
       j/\/F_I = Class(R,j) & i"\/"j in Class(R,i"\/"j) & j in Class(R,j)
        by Def6,Th15,EQREL_1:28;
       then [i"\/"j,j] in R & a"/\"b = (i"/\"b)"\/"(j"/\"b) & a"/\"b [= j &
        i"/\"b [= (i"/\"b)"\/"(j"/\"b)
         by EQREL_1:30,FILTER_0:def 8,LATTICES:22,def 11;
       then (i"\/"j) <=> j in F_I & (i"\/"j) <=> j = ((i"\/"j) => j)"/\"(j =>
(i"\/"
j)) &
        i"/\"b [= j by FILTER_0:def 11,def 12,LATTICES:25;
       then (i"\/"j) => j in F_I & (i"\/"j) => j [= i => j by FILTER_0:def 1,
def 8;
      hence thesis by FILTER_0:9;
     end;
   assume
A1:  i => j in F_I;
      i"/\"(i => j) [= j & j"/\"(i => j) [= j & j"\/"j = j &
    (i"/\"(i => j))"\/"(j"/\"(i => j)) = (i"\/"j)"/\"(i => j) & j [= i"\/"j & j
"/\"Top I [= j
     by FILTER_0:2,3,def 8,LATTICES:17,def 11;
    then (i"\/"j)"/\"(i => j) [= j & j"/\"Top I [= i"\/"j & I is 1_Lattice
      by FILTER_0:4,37,LATTICES:25;
    then i => j [= (i"\/"j) => j & Top I [= j => (i"\/"j) & Top I in F_I
      by FILTER_0:12,def 8;
    then (i"\/"j) => j in F_I & j => (i"\/"j) in F_I &
    ((i"\/"j) => j)"/\"(j => (i"\/"j)) = (i"\/"j) <=> j
      by A1,FILTER_0:9,def 11;
    then (i"\/"j) <=> j in F_I by FILTER_0:def 1;
then A2:  [i"\/"j,j] in R by FILTER_0:def 12;
   thus (i/\/F_I) "\/" (j/\/F_I) = (i"\/"j)/\/F_I by Th15
        .= Class(R,i"\/"j) by Def6 .= Class(R,j) by A2,EQREL_1:44
        .= j/\/F_I by Def6;
  end;

theorem
 Th17: (i"/\"j) => k = i => (j => k)
  proof
      (i"/\"j)"/\"((i"/\"j)=>k) [= k & (j"/\"i)"/\"((i"/\"j)=>k) = j"/\"(i"/\"(
(
i
"/\"j)=>k)) &
    i"/\"j = j"/\"i by FILTER_0:def 8,LATTICES:def 7;
    then i"/\"((i"/\"j)=>k) [= j=>k by FILTER_0:def 8;
then A1:  (i"/\"j)=>k [= i=>(j=>k) by FILTER_0:def 8;
      i"/\"(i=>(j=>k)) [= j=>k by FILTER_0:def 8;
    then j"/\"(i"/\"(i=>(j=>k))) [= j"/\"(j=>k) & j"/\"(j=>k) [= k & j"/\"i =
i"/\"
j &
    j"/\"(i"/\"(i=>(j=>k))) = j"/\"i"/\"(i=>(j=>k))
     by FILTER_0:def 8,LATTICES:27,def 7;
    then i"/\"j"/\"(i=>(j=>k)) [= k by LATTICES:25;
    then i=>(j=>k) [= (i"/\"j)=>k by FILTER_0:def 8;
   hence thesis by A1,LATTICES:26;
  end;

theorem
 Th18: I is lower-bounded
    implies I/\/F_I is 0_Lattice & Bottom (I/\/F_I) = (Bottom I)/\/F_I
  proof
   assume A1: I is lower-bounded;
   then consider i such that
A2:  i"/\"j = i & j"/\"i = i by LATTICES:def 13;
A3:  Bottom I = i by A1,A2,LATTICES:def 16;
   set L = I/\/F_I; set R = equivalence_wrt F_I;
   set x = i/\/F_I;
A4: now let y be Element of L;
        L = LattStr (#Class R, (the L_join of I)/\/R, (the L_meet of I)/\/R#)
       by Def5;
     then consider j such that
A5:    y = Class(R,j) by EQREL_1:45;
      A6: i"/\"j = i & y = j/\/F_I by A2,A5,Def6;
     hence x"/\"y = x by Th15;
     thus y"/\"x = x by A6,Th15;
    end;
   hence I/\/F_I is 0_Lattice by LATTICES:def 13;
   hence thesis by A3,A4,LATTICES:def 16;
  end;

theorem
 Th19: I/\/F_I is 1_Lattice & Top (I/\/F_I) = (Top I)/\/F_I
  proof
   set L = I/\/F_I; set R = equivalence_wrt F_I;
   set x = (Top I)/\/F_I;
A1: now let y be Element of L;
        L = LattStr (#Class R, (the L_join of I)/\/R, (the L_meet of I)/\/R#)
       by Def5;
     then consider j such that
A2:    y = Class(R,j) by EQREL_1:45;
        I is 1_Lattice by FILTER_0:37;
      then A3: (Top I)"\/"j = Top I & y = j/\/F_I by A2,Def6,LATTICES:44;
     hence x"\/"y = x by Th15;
     thus y"\/"x = x by A3,Th15;
    end;
   hence I/\/F_I is 1_Lattice by LATTICES:def 14;
   hence thesis by A1,LATTICES:def 17;
  end;

theorem
 Th20: I/\/F_I is implicative
  proof set L = I/\/F_I; set R = equivalence_wrt F_I;
   let x,y be Element of L;
A1:  L = LattStr (#Class R, (the L_join of I)/\/R, (the L_meet of I)/\/R#)
     by Def5;
   then consider i such that
A2:  x = Class(R,i) by EQREL_1:45;
   consider j such that
A3:  y = Class(R,j) by A1,EQREL_1:45;
   take z = (i=>j)/\/F_I;
A4:  I is 1_Lattice & x = i/\/F_I & y = j/\/F_I by A2,A3,Def6,FILTER_0:37;
    then i"/\"(i=>j) [= j & (i"/\"(i=>j))"/\"Top I = i"/\"(i=>j)
     by FILTER_0:def 8,LATTICES:43;
    then Top I [= (i"/\"(i=>j))=>j & Top I in F_I by A4,FILTER_0:12,def 8;
    then (i"/\"(i=>j))=>j in F_I by FILTER_0:9;
    then (i"/\"(i=>j))/\/F_I [= y by A4,Th16;
   hence x"/\"z [= y by A4,Th15;
   let t be Element of L;
   consider k such that
A5:  t = Class(R,k) by A1,EQREL_1:45;
A6:  (i/\/F_I)"/\"(k/\/F_I) = (i"/\"k)/\/F_I & k/\/F_I = t by A5,Def6,Th15;
   assume x"/\"t [= y;
    then (i"/\"k)=>j in F_I & i"/\"k = k"/\"i by A4,A6,Th16;
    then k=>(i=>j) in F_I by Th17;
   hence thesis by A6,Th16;
  end;

theorem
   B/\/F_B is B_Lattice
  proof set L = B/\/F_B; set R = equivalence_wrt F_B;
A1:  B is I_Lattice & B is 0_Lattice by FILTER_0:40;
then A2:  L is 0_Lattice & Bottom L = (Bottom
B)/\/F_B & L is 1_Lattice & Top L = (Top B)/\/F_B
     by Th18,Th19;
   then reconsider L as 01_Lattice by LATTICES:def 15;
A3:  L is complemented
     proof let x be Element of L;
         L = LattStr (#Class R, (the L_join of B)/\/R, (the L_meet of B)/\/R#)
        by A1,Def5;
      then consider a being Element of B such that
A4:     x = Class(R,a) by EQREL_1:45;
      reconsider y = a`/\/F_B as Element of L;
      take y;
A5:     x = a/\/F_B by A1,A4,Def6;
      hence y"\/"x = (a`"\/"a)/\/F_B by A1,Th15 .= Top L by A2,LATTICES:48;
      hence x"\/"y = Top L;
      thus y"/\"x = (a`"/\"a)/\/F_B by A1,A5,Th15 .= Bottom
L by A2,LATTICES:47;
      hence x"/\"y = Bottom L;
     end;
      L is I_Lattice by A1,Th20;
   hence thesis by A3,LATTICES:def 20;
  end;

 definition let D1,D2 be set;
  let f1 be BinOp of D1; let f2 be BinOp of D2;
  redefine func |:f1,f2:| -> BinOp of [:D1,D2:];
   coherence
    proof
        (D1 = {} implies [:D1,D1:] = {}) &
      (D2 = {} implies [:D2,D2:] = {}) by ZFMISC_1:113;
      then dom f1 = [:D1,D1:] & rng f1 c= D1 & dom f2 = [:D2,D2:] & rng f2 c=
D2
        by FUNCT_2:def 1,RELSET_1:12;
then A1:    [:rng f1,rng f2:] c= [:D1,D2:] & rng |:f1,f2:| c= [:rng f1,rng f2:]
&
       dom |:f1,f2:| = [:[:D1,D2:],[:D1,D2:]:]
        by FUNCT_4:59,61,ZFMISC_1:119;
      then rng |:f1,f2:| c= [:D1,D2:] by XBOOLE_1:1;
     hence thesis by A1,FUNCT_2:4;
    end;
 end;

theorem
 Th22: |:f1,f2:|.([a1,a2],[b1,b2]) = [f1.(a1,b1),f2.(a2,b2)]
  proof
      [[a1,a2],[b1,b2]] in [:[:D1,D2:],[:D1,D2:]:] &
    f1.(a1,b1) = f1.[a1,b1] & f2.(a2,b2) = f2.[a2,b2] &
    |:f1,f2:|.([a1,a2],[b1,b2]) = |:f1,f2:|.[[a1,a2],[b1,b2]] &
    dom |:f1,f2:| = [:[:D1,D2:],[:D1,D2:]:] by BINOP_1:def 1,FUNCT_2:def 1;
   hence thesis by FUNCT_4:58;
  end;

 AuxCart1 { D1() -> non empty set, D2() -> non empty set, P[set] }:
  for d being Element of [:D1(),D2():] holds P[d]
   provided
A1:  for d1 being Element of D1(),
        d2 being Element of D2() holds P[[d1,d2]]
  proof let d be Element of [:D1(),D2():];
      ex d1 being Element of D1(),
    d2 being Element of D2() st
  d = [d1,d2] by DOMAIN_1:9;
   hence thesis by A1;
  end;

 AuxCart2 { D1() -> non empty set, D2() -> non empty set, P[set,set] }:
  for d,d' being Element of [:D1(),D2():] holds P[d,d']
   provided
A1:  for d1,d1' being Element of D1(),
      d2,d2' being Element of D2() holds
     P[[d1,d2],[d1',d2']]
  proof let d,d' be Element of [:D1(),D2():];
 A2:   ex d1 being Element of D1(),
      d2 being Element of D2() st
  d = [d1,d2] by DOMAIN_1:9;
      ex d1' being Element of D1(),
      d2' being Element of D2() st
  d' = [d1',d2'] by DOMAIN_1:9;
   hence thesis by A1,A2;
  end;

 AuxCart3 { D1() -> non empty set, D2() -> non empty set, P[set,set,set] }:
  for a,b,c being Element of [:D1(),D2():] holds P[a,b,c]
   provided
A1:  for a1,b1,c1 being Element of D1(),
        a2,b2,c2 being Element of D2() holds
     P[[a1,a2],[b1,b2],[c1,c2]]
  proof let a,b,c be Element of [:D1(),D2():];
 A2:   ex a1 being Element of D1(),
         a2 being Element of D2() st
  a = [a1,a2] by DOMAIN_1:9;
 A3:   ex b1 being Element of D1(),
         b2 being Element of D2() st
  b = [b1,b2] by DOMAIN_1:9;
      ex c1 being Element of D1(),
       c2 being Element of D2() st
  c = [c1,c2] by DOMAIN_1:9;
   hence thesis by A1,A2,A3;
  end;

theorem
 Th23: f1 is commutative & f2 is commutative iff |:f1,f2:| is commutative
  proof
   defpred P[set,set] means |:f1,f2:|.($1,$2) = |:f1,f2:|.($2,$1);
   thus f1 is commutative & f2 is commutative implies |:f1,f2:| is commutative
     proof assume
A1:     for a,b being Element of D1 holds f1.(a,b) = f1.(b,a);
      assume
A2:     for a,b being Element of D2 holds f2.(a,b) = f2.(b,a);
A3:     for d1,d1' being Element of D1,
            d2,d2' being Element of D2 holds
            P[[d1,d2],[d1',d2']]
      proof let a1,b1 be Element of D1,
               a2,b2 be Element of D2;
        thus |:f1,f2:|.([a1,a2],[b1,b2]) = [f1.(a1,b1),f2.(a2,b2)] by Th22
                .= [f1.(b1,a1),f2.(a2,b2)] by A1
                .= [f1.(b1,a1),f2.(b2,a2)] by A2
                .= |:f1,f2:|.([b1,b2],[a1,a2]) by Th22;
       end;
      thus for a,b being Element of [:D1,D2:] holds P[a,b]
        from AuxCart2(A3);
     end;
   assume
A4:  for a,b being Element of [:D1,D2:]
          holds |:f1,f2:|.(a,b) = |:f1,f2:|.(b,a);
   thus for a,b being Element of D1 holds f1.(a,b) = f1.(b,a)
     proof let a1,b1; consider a2,b2;
         [f1.(a1,b1),f2.(a2,b2)] = |:f1,f2:|.([a1,a2],[b1,b2]) by Th22
          .= |:f1,f2:|.([b1,b2],[a1,a2]) by A4
          .= [f1.(b1,a1),f2.(b2,a2)] by Th22;
      hence thesis by ZFMISC_1:33;
     end;
   let a2,b2; consider a1,b1;
      [f1.(a1,b1),f2.(a2,b2)] = |:f1,f2:|.([a1,a2],[b1,b2]) by Th22
       .= |:f1,f2:|.([b1,b2],[a1,a2]) by A4
       .= [f1.(b1,a1),f2.(b2,a2)] by Th22;
   hence thesis by ZFMISC_1:33;
  end;

theorem
 Th24: f1 is associative & f2 is associative iff |:f1,f2:| is associative
  proof
   thus f1 is associative & f2 is associative implies |:f1,f2:| is associative
     proof assume
A1:     for a,b,c being Element of D1
          holds f1.(a,f1.(b,c)) = f1.(f1.(a,b),c);
      defpred P[set,set,set] means
      |:f1,f2:|.($1,|:f1,f2:|.($2,$3)) = |:f1,f2:|.(|:f1,f2:|.($1,$2),$3);
      assume
A2:     for a,b,c being Element of D2
          holds f2.(a,f2.(b,c)) = f2.(f2.(a,b),c);
A3:     now let a1,b1,c1 be Element of D1,
               a2,b2,c2 be Element of D2;
        |:f1,f2:|.([a1,a2],|:f1,f2:|.([b1,b2],[c1,c2]))
                 = |:f1,f2:|.([a1,a2],[f1.(b1,c1),f2.(b2,c2)]) by Th22
                .= [f1.(a1,f1.(b1,c1)),f2.(a2,f2.(b2,c2))] by Th22
                .= [f1.(f1.(a1,b1),c1),f2.(a2,f2.(b2,c2))] by A1
                .= [f1.(f1.(a1,b1),c1),f2.(f2.(a2,b2),c2)] by A2
                .= |:f1,f2:|.([f1.(a1,b1),f2.(a2,b2)],[c1,c2]) by Th22
                .= |:f1,f2:|.(|:f1,f2:|.([a1,a2],[b1,b2]),[c1,c2]) by Th22;
         hence P[[a1,a2],[b1,b2],[c1,c2]];
       end;
      thus for a,b,c being Element of [:D1,D2:] holds P[a,b,c]
          from AuxCart3(A3);
     end;
   assume
A4:  for a,b,c being Element of [:D1,D2:] holds
         |:f1,f2:|.(a,|:f1,f2:|.(b,c)) = |:f1,f2:|.(|:f1,f2:|.(a,b),c);
   thus for a,b,c being Element of D1
        holds f1.(a,f1.(b,c)) = f1.(f1.(a,b),c)
     proof let a1,b1,c1; consider a2,b2,c2;
         [f1.(a1,f1.(b1,c1)), f2.(a2,f2.(b2,c2))]
            = |:f1,f2:|.([a1,a2],[f1.(b1,c1),f2.(b2,c2)]) by Th22
           .= |:f1,f2:|.([a1,a2],|:f1,f2:|.([b1,b2],[c1,c2])) by Th22
           .= |:f1,f2:|.(|:f1,f2:|.([a1,a2],[b1,b2]),[c1,c2]) by A4
           .= |:f1,f2:|.([f1.(a1,b1),f2.(a2,b2)],[c1,c2]) by Th22
           .= [f1.(f1.(a1,b1),c1), f2.(f2.(a2,b2),c2)] by Th22;
      hence thesis by ZFMISC_1:33;
     end;
   let a2,b2,c2; consider a1,b1,c1;
      [f1.(a1,f1.(b1,c1)), f2.(a2,f2.(b2,c2))]
         = |:f1,f2:|.([a1,a2],[f1.(b1,c1),f2.(b2,c2)]) by Th22
        .= |:f1,f2:|.([a1,a2],|:f1,f2:|.([b1,b2],[c1,c2])) by Th22
        .= |:f1,f2:|.(|:f1,f2:|.([a1,a2],[b1,b2]),[c1,c2]) by A4
        .= |:f1,f2:|.([f1.(a1,b1),f2.(a2,b2)],[c1,c2]) by Th22
        .= [f1.(f1.(a1,b1),c1), f2.(f2.(a2,b2),c2)] by Th22;
   hence thesis by ZFMISC_1:33;
  end;

theorem
 Th25: a1 is_a_left_unity_wrt f1 & a2 is_a_left_unity_wrt f2 iff
   [a1,a2] is_a_left_unity_wrt |:f1,f2:|
  proof
   thus a1 is_a_left_unity_wrt f1 & a2 is_a_left_unity_wrt f2 implies
      [a1,a2] is_a_left_unity_wrt |:f1,f2:|
     proof assume
A1:     f1.(a1,b1) = b1; assume
A2:     f2.(a2,b2) = b2;
      defpred P[set] means |:f1,f2:|.([a1,a2],$1) = $1;
A3:    now let b1,b2;
        |:f1,f2:|.([a1,a2],[b1,b2]) = [f1.(a1,b1),f2.(a2,b2)] by Th22
               .= [b1,f2.(a2,b2)] by A1 .= [b1,b2] by A2;
        hence P[[b1,b2]];
       end;
      thus for a being Element of [:D1,D2:]
            holds P[a] from AuxCart1(A3);
     end;
   assume
A4:  for a being Element of [:D1,D2:]
      holds |:f1,f2:|.([a1,a2],a) = a;
   thus f1.(a1,b1) = b1
     proof consider b2;
         [f1.(a1,b1),f2.(a2,b2)] = |:f1,f2:|.([a1,a2],[b1,b2]) by Th22
          .= [b1,b2] by A4;
      hence thesis by ZFMISC_1:33;
     end;
   let b2; consider b1;
      [f1.(a1,b1),f2.(a2,b2)] = |:f1,f2:|.([a1,a2],[b1,b2]) by Th22
       .= [b1,b2] by A4;
   hence thesis by ZFMISC_1:33;
  end;

theorem
 Th26: a1 is_a_right_unity_wrt f1 & a2 is_a_right_unity_wrt f2 iff
   [a1,a2] is_a_right_unity_wrt |:f1,f2:|
  proof
   thus a1 is_a_right_unity_wrt f1 & a2 is_a_right_unity_wrt f2 implies
      [a1,a2] is_a_right_unity_wrt |:f1,f2:|
     proof assume
A1:     f1.(b1,a1) = b1; assume
A2:     f2.(b2,a2) = b2;
      defpred P[set] means |:f1,f2:|.($1,[a1,a2]) = $1;
A3:     now let b1,b2;
        |:f1,f2:|.([b1,b2],[a1,a2]) = [f1.(b1,a1),f2.(b2,a2)] by Th22
               .= [b1,f2.(b2,a2)] by A1 .= [b1,b2] by A2;
        hence P[[b1,b2]];
       end;
      thus for a being Element of [:D1,D2:] holds P[a]
         from AuxCart1(A3);
     end;
   assume
A4:  for a being Element of [:D1,D2:]
      holds |:f1,f2:|.(a,[a1,a2]) = a;
   thus f1.(b1,a1) = b1
     proof consider b2;
         [f1.(b1,a1),f2.(b2,a2)] = |:f1,f2:|.([b1,b2],[a1,a2]) by Th22
          .= [b1,b2] by A4;
      hence thesis by ZFMISC_1:33;
     end;
   let b2; consider b1;
      [f1.(b1,a1),f2.(b2,a2)] = |:f1,f2:|.([b1,b2],[a1,a2]) by Th22
       .= [b1,b2] by A4;
   hence thesis by ZFMISC_1:33;
  end;

theorem
   a1 is_a_unity_wrt f1 & a2 is_a_unity_wrt f2 iff
   [a1,a2] is_a_unity_wrt |:f1,f2:|
  proof
   thus a1 is_a_unity_wrt f1 & a2 is_a_unity_wrt f2 implies
      [a1,a2] is_a_unity_wrt |:f1,f2:|
     proof assume
         a1 is_a_left_unity_wrt f1 & a1 is_a_right_unity_wrt f1 &
       a2 is_a_left_unity_wrt f2 & a2 is_a_right_unity_wrt f2;
      hence [a1,a2] is_a_left_unity_wrt |:f1,f2:| &
            [a1,a2] is_a_right_unity_wrt |:f1,f2:| by Th25,Th26;
     end;
   assume [a1,a2] is_a_left_unity_wrt |:f1,f2:| &
          [a1,a2] is_a_right_unity_wrt |:f1,f2:|;
   hence a1 is_a_left_unity_wrt f1 & a1 is_a_right_unity_wrt f1 &
       a2 is_a_left_unity_wrt f2 & a2 is_a_right_unity_wrt f2 by Th25,Th26;
  end;

theorem
 Th28: f1 is_left_distributive_wrt g1 & f2 is_left_distributive_wrt g2 iff
   |:f1,f2:| is_left_distributive_wrt |:g1,g2:|
  proof
   thus f1 is_left_distributive_wrt g1 & f2 is_left_distributive_wrt g2
      implies |:f1,f2:| is_left_distributive_wrt |:g1,g2:|
     proof assume
A1:     for a1,b1,c1 holds f1.(a1,g1.(b1,c1)) = g1.(f1.(a1,b1),f1.(a1,c1));
      defpred P[set,set,set] means
      |:f1,f2:|.($1,|:g1,g2:|.($2,$3)) =
         |:g1,g2:|.(|:f1,f2:|.($1,$2),|:f1,f2:|.($1,$3));
      assume
A2:     for a2,b2,c2 holds f2.(a2,g2.(b2,c2)) = g2.(f2.(a2,b2),f2.(a2,c2));
A3:     now let a1,b1,c1, a2,b2,c2;
        |:f1,f2:|.([a1,a2],|:g1,g2:|.([b1,b2],[c1,c2]))
          = |:f1,f2:|.([a1,a2],[g1.(b1,c1),g2.(b2,c2)]) by Th22
         .= [f1.(a1,g1.(b1,c1)),f2.(a2,g2.(b2,c2))] by Th22
         .= [g1.(f1.(a1,b1),f1.(a1,c1)),f2.(a2,g2.(b2,c2))] by A1
         .= [g1.(f1.(a1,b1),f1.(a1,c1)),g2.(f2.(a2,b2),f2.(a2,c2))] by A2
         .= |:g1,g2:|.([f1.(a1,b1),f2.(a2,b2)],[f1.(a1,c1),f2.(a2,c2)])
              by Th22
         .= |:g1,g2:|.(|:f1,f2:|.([a1,a2],[b1,b2]),[f1.(a1,c1),f2.(a2,c2)])
              by Th22
         .= |:g1,g2:|.(|:f1,f2:|.([a1,a2],[b1,b2]),|:f1,f2:|.([a1,a2],[c1,c2]))
              by Th22;
         hence P[[a1,a2],[b1,b2],[c1,c2]];
       end;
      thus for a,b,c being Element of [:D1,D2:] holds P[a,b,c]
         from AuxCart3(A3);
     end;
   assume
A4:  for a,b,c being Element of [:D1,D2:] holds
      |:f1,f2:|.(a,|:g1,g2:|.(b,c)) =
       |:g1,g2:|.(|:f1,f2:|.(a,b),|:f1,f2:|.(a,c));
A5:  now let a1,b1,c1, a2,b2,c2;
     thus [f1.(a1,g1.(b1,c1)),f2.(a2,g2.(b2,c2))] =
         |:f1,f2:|.([a1,a2],[g1.(b1,c1),g2.(b2,c2)]) by Th22
      .= |:f1,f2:|.([a1,a2],|:g1,g2:|.([b1,b2],[c1,c2])) by Th22
      .= |:g1,g2:|.(|:f1,f2:|.([a1,a2],[b1,b2]),|:f1,f2:|.([a1,a2],[c1,c2]))
        by A4
      .= |:g1,g2:|.([f1.(a1,b1),f2.(a2,b2)],|:f1,f2:|.([a1,a2],[c1,c2]))
        by Th22
      .= |:g1,g2:|.([f1.(a1,b1),f2.(a2,b2)],[f1.(a1,c1),f2.(a2,c2)]) by Th22
      .= [g1.(f1.(a1,b1),f1.(a1,c1)),g2.(f2.(a2,b2),f2.(a2,c2))] by Th22;
    end;
   thus for a1,b1,c1 holds f1.(a1,g1.(b1,c1)) = g1.(f1.(a1,b1),f1.(a1,c1))
     proof let a1,b1,c1; consider a2,b2,c2;
         [f1.(a1,g1.(b1,c1)),f2.(a2,g2.(b2,c2))] =
        [g1.(f1.(a1,b1),f1.(a1,c1)),g2.(f2.(a2,b2),f2.(a2,c2))] by A5;
      hence thesis by ZFMISC_1:33;
     end;
   let a2,b2,c2; consider a1,b1,c1;
      [f1.(a1,g1.(b1,c1)),f2.(a2,g2.(b2,c2))] =
     [g1.(f1.(a1,b1),f1.(a1,c1)),g2.(f2.(a2,b2),f2.(a2,c2))] by A5;
   hence thesis by ZFMISC_1:33;
  end;

theorem
 Th29: f1 is_right_distributive_wrt g1 & f2 is_right_distributive_wrt g2 iff
   |:f1,f2:| is_right_distributive_wrt |:g1,g2:|
  proof
   thus f1 is_right_distributive_wrt g1 & f2 is_right_distributive_wrt g2
      implies |:f1,f2:| is_right_distributive_wrt |:g1,g2:|
     proof assume
A1:     for b1,c1,a1 holds f1.(g1.(b1,c1),a1) = g1.(f1.(b1,a1),f1.(c1,a1));
      defpred P[set,set,set] means
       |:f1,f2:|.(|:g1,g2:|.($2,$3),$1) =
          |:g1,g2:|.(|:f1,f2:|.($2,$1),|:f1,f2:|.($3,$1));
      assume
A2:     for b2,c2,a2 holds f2.(g2.(b2,c2),a2) = g2.(f2.(b2,a2),f2.(c2,a2));
A3:     now let a1,b1,c1, a2,b2,c2;
        |:f1,f2:|.(|:g1,g2:|.([b1,b2],[c1,c2]),[a1,a2])
           = |:f1,f2:|.([g1.(b1,c1),g2.(b2,c2)],[a1,a2]) by Th22
          .= [f1.(g1.(b1,c1),a1),f2.(g2.(b2,c2),a2)] by Th22
          .= [g1.(f1.(b1,a1),f1.(c1,a1)),f2.(g2.(b2,c2),a2)] by A1
          .= [g1.(f1.(b1,a1),f1.(c1,a1)),g2.(f2.(b2,a2),f2.(c2,a2))] by A2
          .= |:g1,g2:|.([f1.(b1,a1),f2.(b2,a2)],[f1.(c1,a1),f2.(c2,a2)])
              by Th22
          .= |:g1,g2:|.(|:f1,f2:|.([b1,b2],[a1,a2]),[f1.(c1,a1),f2.(c2,a2)])
              by Th22
         .= |:g1,g2:|.(|:f1,f2:|.([b1,b2],[a1,a2]),|:f1,f2:|.([c1,c2],[a1,a2]))
              by Th22;
         hence P[[a1,a2],[b1,b2],[c1,c2]];
       end;
      for a,b,c being Element of [:D1,D2:] holds P[a,b,c]
         from AuxCart3(A3); then
      for b,c,a being Element of [:D1,D2:] holds P[a,b,c];
      hence |:f1,f2:| is_right_distributive_wrt |:g1,g2:| by BINOP_1:def 19;
     end;
   assume
A4:  for b,c,a being Element of [:D1,D2:] holds
      |:f1,f2:|.(|:g1,g2:|.(b,c),a) =
       |:g1,g2:|.(|:f1,f2:|.(b,a),|:f1,f2:|.(c,a));
A5:  now let a1,b1,c1, a2,b2,c2;
     thus [f1.(g1.(b1,c1),a1),f2.(g2.(b2,c2),a2)] =
         |:f1,f2:|.([g1.(b1,c1),g2.(b2,c2)],[a1,a2]) by Th22
      .= |:f1,f2:|.(|:g1,g2:|.([b1,b2],[c1,c2]),[a1,a2]) by Th22
      .= |:g1,g2:|.(|:f1,f2:|.([b1,b2],[a1,a2]),|:f1,f2:|.([c1,c2],[a1,a2]))
        by A4
      .= |:g1,g2:|.([f1.(b1,a1),f2.(b2,a2)],|:f1,f2:|.([c1,c2],[a1,a2]))
        by Th22
      .= |:g1,g2:|.([f1.(b1,a1),f2.(b2,a2)],[f1.(c1,a1),f2.(c2,a2)]) by Th22
      .= [g1.(f1.(b1,a1),f1.(c1,a1)),g2.(f2.(b2,a2),f2.(c2,a2))] by Th22;
    end;
   thus for b1,c1,a1 holds f1.(g1.(b1,c1),a1) = g1.(f1.(b1,a1),f1.(c1,a1))
     proof let b1,c1,a1; consider a2,b2,c2;
         [f1.(g1.(b1,c1),a1),f2.(g2.(b2,c2),a2)] =
        [g1.(f1.(b1,a1),f1.(c1,a1)),g2.(f2.(b2,a2),f2.(c2,a2))] by A5;
      hence thesis by ZFMISC_1:33;
     end;
   let b2,c2,a2; consider a1,b1,c1;
      [f1.(g1.(b1,c1),a1),f2.(g2.(b2,c2),a2)] =
     [g1.(f1.(b1,a1),f1.(c1,a1)),g2.(f2.(b2,a2),f2.(c2,a2))] by A5;
   hence thesis by ZFMISC_1:33;
  end;

theorem
 Th30: f1 is_distributive_wrt g1 & f2 is_distributive_wrt g2 iff
   |:f1,f2:| is_distributive_wrt |:g1,g2:|
  proof
   thus f1 is_distributive_wrt g1 & f2 is_distributive_wrt g2 implies
      |:f1,f2:| is_distributive_wrt |:g1,g2:|
     proof assume
         f1 is_left_distributive_wrt g1 & f1 is_right_distributive_wrt g1 &
       f2 is_left_distributive_wrt g2 & f2 is_right_distributive_wrt g2;
      hence |:f1,f2:| is_left_distributive_wrt |:g1,g2:| &
            |:f1,f2:| is_right_distributive_wrt |:g1,g2:| by Th28,Th29;
     end;
   assume |:f1,f2:| is_left_distributive_wrt |:g1,g2:| &
          |:f1,f2:| is_right_distributive_wrt |:g1,g2:|;
   hence f1 is_left_distributive_wrt g1 & f1 is_right_distributive_wrt g1 &
         f2 is_left_distributive_wrt g2 & f2 is_right_distributive_wrt g2
          by Th28,Th29;
  end;

theorem
 Th31: f1 absorbs g1 & f2 absorbs g2 iff |:f1,f2:| absorbs |:g1,g2:|
  proof
   defpred P[set,set] means |:f1,f2:|.($1,|:g1,g2:|.($1,$2)) = $1;
   thus f1 absorbs g1 & f2 absorbs g2 implies |:f1,f2:| absorbs |:g1,g2:|
     proof assume
A1:     for a1,b1 holds f1.(a1,g1.(a1,b1)) = a1;
      assume
A2:     for a2,b2 holds f2.(a2,g2.(a2,b2)) = a2;
A3:    for d1,d1' being Element of D1,
            d2,d2' being Element of D2 holds
            P[[d1,d2],[d1',d2']]
       proof let a1,b1, a2,b2;
        thus |:f1,f2:|.([a1,a2],|:g1,g2:|.([a1,a2],[b1,b2]))
            = |:f1,f2:|.([a1,a2],[g1.(a1,b1),g2.(a2,b2)]) by Th22
           .= [f1.(a1,g1.(a1,b1)),f2.(a2,g2.(a2,b2))] by Th22
           .= [a1,f2.(a2,g2.(a2,b2))] by A1
           .= [a1,a2] by A2;
       end;
      thus for a,b being Element of [:D1,D2:] holds P[a,b]
         from AuxCart2(A3);
     end;
   assume
A4:  for a,b being Element of [:D1,D2:]
      holds |:f1,f2:|.(a,|:g1,g2:|.(a,b)) = a;
   thus for a1,b1 holds f1.(a1,g1.(a1,b1)) = a1
     proof let a1,b1; consider a2,b2;
         [a1,a2] = |:f1,f2:|.([a1,a2],|:g1,g2:|.([a1,a2],[b1,b2])) by A4
         .= |:f1,f2:|.([a1,a2],[g1.(a1,b1),g2.(a2,b2)]) by Th22
         .= [f1.(a1,g1.(a1,b1)),f2.(a2,g2.(a2,b2))] by Th22;
      hence thesis by ZFMISC_1:33;
     end;
   let a2,b2; consider a1,b1;
      [a1,a2] = |:f1,f2:|.([a1,a2],|:g1,g2:|.([a1,a2],[b1,b2])) by A4
      .= |:f1,f2:|.([a1,a2],[g1.(a1,b1),g2.(a2,b2)]) by Th22
      .= [f1.(a1,g1.(a1,b1)),f2.(a2,g2.(a2,b2))] by Th22;
   hence thesis by ZFMISC_1:33;
  end;

 definition let L1,L2 be non empty LattStr;
  func [:L1,L2:] -> strict LattStr equals:
Def7:
    LattStr (#[:the carrier of L1, the carrier of L2:],
                 |:the L_join of L1, the L_join of L2:|,
                 |:the L_meet of L1, the L_meet of L2:|#);
   correctness;
 end;

definition let L1,L2 be non empty LattStr;
 cluster [:L1,L2:] -> non empty;
 coherence
  proof [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
                 |:the L_join of L1, the L_join of L2:|,
                 |:the L_meet of L1, the L_meet of L2:|#) by Def7;
   hence the carrier of [:L1,L2:] is non empty;
  end;
end;

 definition let L be Lattice;
  func LattRel L -> Relation equals:
Def8:
     { [p,q] where p is Element of L,
              q is Element of L: p [= q };
   coherence
    proof
        now let x; assume x in { [p,q] where p is Element of L,
         q is Element of L: p [= q };
        then ex p,q being Element of L
          st x = [p,q] & p [= q;
       hence ex x1,x2 st x = [x1,x2];
      end; hence thesis by RELAT_1:def 1;
    end;
 end;

theorem
 Th32: [p,q] in LattRel L iff p [= q
  proof
A1:  LattRel L = { [r,s]: r [= s } by Def8;
   thus [p,q] in LattRel L implies p [= q
     proof assume [p,q] in LattRel L;
      then consider r,s such that
A2:     [p,q] = [r,s] & r [= s by A1;
         p = r & q = s by A2,ZFMISC_1:33;
      hence thesis by A2;
     end;
   thus thesis by A1;
  end;

theorem
 Th33: dom LattRel L = the carrier of L &
  rng LattRel L = the carrier of L & field LattRel L = the carrier of L
  proof
A1:  LattRel L = { [p,q]: p [= q } by Def8;
      now let x;
     thus x in the carrier of L implies ex y st [x,y] in LattRel L
       proof assume x in the carrier of L;
        then reconsider p = x as Element of L;
           [p,p] in LattRel L by Th32;
        hence thesis;
       end;
     given y such that
A2:   [x,y] in LattRel L;
     consider p,q such that
A3:   [x,y] = [p,q] & p [= q by A1,A2;
        x = p by A3,ZFMISC_1:33;
     hence x in the carrier of L;
    end;
   hence
A4:  dom LattRel L = the carrier of L by RELAT_1:def 4;
      now let x;
     thus x in the carrier of L implies ex y st [y,x] in LattRel L
       proof assume x in the carrier of L;
        then reconsider p = x as Element of L;
           [p,p] in LattRel L by Th32;
        hence thesis;
       end;
     given y such that
A5:   [y,x] in LattRel L;
     consider p,q such that
A6:   [y,x] = [p,q] & p [= q by A1,A5;
        x = q by A6,ZFMISC_1:33;
     hence x in the carrier of L;
    end;
   hence rng LattRel L = the carrier of L by RELAT_1:def 5;
   hence field LattRel L = (the carrier of L) \/ the carrier of L
      by A4,RELAT_1:def 6 .= the carrier of L;
  end;

 definition let L1,L2 be Lattice;
  pred L1,L2 are_isomorphic means
      LattRel L1, LattRel L2 are_isomorphic;
   reflexivity by WELLORD1:48;
   symmetry by WELLORD1:50;
  cluster [:L1,L2:] -> Lattice-like;
   coherence
    proof
     reconsider LL = LattStr (#[:the carrier of L1, the carrier of L2:],
               |:the L_join of L1, the L_join of L2:|,
               |:the L_meet of L1, the L_meet of L2:|#)
            as non empty LattStr by STRUCT_0:def 1;
        join(L1) is commutative & join(L1) is associative &
      meet(L1) is commutative & meet(L1) is associative &
      join(L1) absorbs meet(L1) & meet(L1) absorbs join(L1) &
      join(L2) is commutative & join(L2) is associative &
      meet(L2) is commutative & meet(L2) is associative &
      join(L2) absorbs meet(L2) & meet(L2) absorbs join(L2)
       by LATTICE2:40,41;
      then join(LL) is commutative & join(LL) is associative &
      meet(LL) is commutative & meet(LL) is associative &
      join(LL) absorbs meet(LL) & meet(LL) absorbs join(LL)
       by Th23,Th24,Th31;
      then LL is strict Lattice & LL = [:L1,L2:] by Def7,LATTICE2:17;
     hence thesis;
    end;
 end;

theorem
   for L1,L2,L3 being Lattice st L1,L2 are_isomorphic & L2,L3 are_isomorphic
   holds L1,L3 are_isomorphic
  proof let L1,L2,L3 be Lattice; assume
      LattRel L1, LattRel L2 are_isomorphic &
    LattRel L2, LattRel L3 are_isomorphic;
   hence LattRel L1, LattRel L3 are_isomorphic by WELLORD1:52;
  end;

theorem
   for L1,L2 being non empty LattStr st [:L1,L2:] is Lattice holds
   L1 is Lattice & L2 is Lattice
  proof let L1,L2 be non empty LattStr such that
A1:  [:L1,L2:] is Lattice;
   reconsider LL = LattStr (#[:the carrier of L1, the carrier of L2:],
           |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#)
      as non empty LattStr by STRUCT_0:def 1;
      [:L1,L2:] = LL by Def7;
    then join(LL) is commutative & join(LL) is associative &
    meet(LL) is commutative & meet(LL) is associative &
    join(LL) absorbs meet(LL) & meet(LL) absorbs join(LL)
       by A1,LATTICE2:27,29,31,32,40,41;
    then join(L1) is commutative & join(L1) is associative &
    meet(L1) is commutative & meet(L1) is associative &
    join(L1) absorbs meet(L1) & meet(L1) absorbs join(L1) &
    join(L2) is commutative & join(L2) is associative &
    meet(L2) is commutative & meet(L2) is associative &
    join(L2) absorbs meet(L2) & meet(L2) absorbs join(L2)
       by Th23,Th24,Th31;
   hence thesis by LATTICE2:17;
  end;

 definition let L1,L2 be Lattice;
  let a be Element of L1, b be Element of L2;
  redefine func [a,b] -> Element of [:L1,L2:];
   coherence
    proof
        [a,b] is Element of [:the carrier of L1, the carrier of L2:] &
      [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
               |:the L_join of L1, the L_join of L2:|,
               |:the L_meet of L1, the L_meet of L2:|#) by Def7;
     hence thesis;
    end;
 end;

theorem
 Th36: [p1,p2] "\/" [q1,q2] = [p1"\/"q1,p2"\/"q2] &
   [p1,p2] "/\" [q1,q2] = [p1"/\"q1,p2"/\"q2]
  proof
A1:  [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
               |:the L_join of L1, the L_join of L2:|,
               |:the L_meet of L1, the L_meet of L2:|#) by Def7;
   thus [p1,p2] "\/" [q1,q2]
       = join([:L1,L2:]).([p1,p2],[q1,q2]) by LATTICES:def 1
      .= [join(L1).(p1,q1),join(L2).(p2,q2)] by A1,Th22
      .= [p1"\/"q1,join(L2).(p2,q2)] by LATTICES:def 1
      .= [p1"\/"q1,p2"\/"q2] by LATTICES:def 1;
   thus [p1,p2] "/\" [q1,q2]
       = meet([:L1,L2:]).([p1,p2],[q1,q2]) by LATTICES:def 2
      .= [meet(L1).(p1,q1),meet(L2).(p2,q2)] by A1,Th22
      .= [p1"/\"q1,meet(L2).(p2,q2)] by LATTICES:def 2
      .= [p1"/\"q1,p2"/\"q2] by LATTICES:def 2;
  end;

theorem
 Th37: [p1,p2] [= [q1,q2] iff p1 [= q1 & p2 [= q2
  proof
   thus [p1,p2] [= [q1,q2] implies p1 [= q1 & p2 [= q2
     proof assume [p1,p2] "\/" [q1,q2] = [q1,q2];
       then [p1"\/"q1,p2"\/"q2] = [q1,q2] by Th36;
      hence p1"\/"q1 = q1 & p2"\/"q2 = q2 by ZFMISC_1:33;
     end;
   assume p1"\/"q1 = q1 & p2"\/"q2 = q2;
   hence [p1,p2] "\/" [q1,q2] = [q1,q2] by Th36;
  end;

theorem
   L1 is modular & L2 is modular iff [:L1,L2:] is modular
  proof
   thus L1 is modular & L2 is modular
     implies [:L1,L2:] is modular
     proof assume
A1:     for p1,q1,r1 st p1 [= r1 holds p1"\/"(q1"/\"r1) = (p1"\/"q1)"/\"r1;
      assume
A2:     for p2,q2,r2 st p2 [= r2 holds p2"\/"(q2"/\"r2) = (p2"\/"q2)"/\"r2;
      let a,b,c be Element of [:L1,L2:] such that
A3:     a [= c;
A4:     [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
                |:join(L1), join(L2):|, |:meet(L1), meet(L2):|#) by Def7;
      then consider p1,p2 such that
A5:    a = [p1,p2] by DOMAIN_1:9;
      consider q1,q2 such that
A6:    b = [q1,q2] by A4,DOMAIN_1:9;
      consider r1,r2 such that
A7:    c = [r1,r2] by A4,DOMAIN_1:9;
A8:    p1 [= r1 & p2 [= r2 by A3,A5,A7,Th37;
      thus a"\/"(b"/\"c) = a"\/"([q1"/\"r1,q2"/\"r2]) by A6,A7,Th36
        .= [p1"\/"(q1"/\"r1),p2"\/"(q2"/\"r2)] by A5,Th36
        .= [(p1"\/"q1)"/\"r1,p2"\/"(q2"/\"r2)] by A1,A8
        .= [(p1"\/"q1)"/\"r1,(p2"\/"q2)"/\"r2] by A2,A8
        .= [p1"\/"q1,p2"\/"q2]"/\"c by A7,Th36
        .= (a"\/"b)"/\"c by A5,A6,Th36;
     end;
   assume
A9:  for a,b,c be Element of [:L1,L2:] st a [= c
      holds a"\/"(b"/\"c) = (a"\/"b)"/\"c;
   thus L1 is modular
     proof let p1,q1,r1 such that
A10:     p1 [= r1;
      consider p2,q2;
         [p1,p2] [= [r1,p2] by A10,Th37;
       then [p1,p2]"\/"([q1,q2]"/\"[r1,p2]) = ([p1,p2]"\/"[q1,q2])"/\"[r1,p2]
&
       [q1,q2]"/\"[r1,p2] = [q1"/\"r1,q2"/\"p2] &
       [p1,p2]"\/"[q1,q2] = [p1"\/"q1,p2"\/"q2] &
       [p1,p2]"\/"[q1"/\"r1,q2"/\"p2] = [p1"\/"(q1"/\"r1),p2"\/"(q2"/\"p2)] &
       [p1"\/"q1,p2"\/"q2]"/\"[r1,p2] = [(p1"\/"q1)"/\"r1,(p2"\/"q2)"/\"
p2] by A9,Th36;
      hence thesis by ZFMISC_1:33;
     end;
   let p2,q2,r2 such that
A11:  p2 [= r2;
   consider p1,q1;
      [p1,p2] [= [p1,r2] by A11,Th37;
    then [p1,p2]"\/"([q1,q2]"/\"[p1,r2]) = ([p1,p2]"\/"[q1,q2])"/\"[p1,r2] &
    [q1,q2]"/\"[p1,r2] = [q1"/\"p1,q2"/\"r2] &
    [p1,p2]"\/"[q1,q2] = [p1"\/"q1,p2"\/"q2] &
    [p1,p2]"\/"[q1"/\"p1,q2"/\"r2] = [p1"\/"(q1"/\"p1),p2"\/"(q2"/\"r2)] &
    [p1"\/"q1,p2"\/"q2]"/\"[p1,r2] = [(p1"\/"q1)"/\"p1,(p2"\/"q2)"/\"
r2] by A9,Th36;
   hence thesis by ZFMISC_1:33;
  end;

theorem
 Th39: L1 is D_Lattice & L2 is D_Lattice iff [:L1,L2:] is D_Lattice
  proof
A1:  [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
           |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
   thus L1 is D_Lattice & L2 is D_Lattice implies [:L1,L2:] is D_Lattice
     proof assume L1 is D_Lattice & L2 is D_Lattice;
       then join(L1) is_distributive_wrt meet(L1) &
       join(L2) is_distributive_wrt meet(L2) by LATTICE2:35;
       then |:join(L1),join(L2):| is_distributive_wrt |:meet(L1),meet(L2):|
         by Th30;
      hence thesis by A1,LATTICE2:36;
     end;
   assume [:L1,L2:] is D_Lattice;
    then join([:L1,L2:]) is_distributive_wrt meet([:L1,L2:]) by LATTICE2:35;
    then join(L1) is_distributive_wrt meet(L1) &
    join(L2) is_distributive_wrt meet(L2) by A1,Th30;
   hence thesis by LATTICE2:36;
  end;

theorem
 Th40: L1 is lower-bounded & L2 is lower-bounded
    iff [:L1,L2:] is lower-bounded
  proof
A1: [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
           |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
   thus L1 is lower-bounded & L2 is lower-bounded
      implies [:L1,L2:] is lower-bounded
     proof given p1 such that
A2:     p1"/\"q1 = p1 & q1"/\"p1 = p1;
      given p2 such that
A3:     p2"/\"q2 = p2 & q2"/\"p2 = p2;
      take a = [p1,p2]; let b be Element of [:L1,L2:];
      consider q1,q2 such that
A4:     b = [q1,q2] by A1,DOMAIN_1:9;
      thus a"/\"b = [p1"/\"q1,p2"/\"q2] by A4,Th36 .= [p1,p2"/\"
q2] by A2 .= a by A3;
      hence b"/\"a = a;
     end;
   given a being Element of [:L1,L2:] such that
A5:  for b being Element of [:L1,L2:] holds
      a"/\"b = a & b"/\"a = a;
   consider p1,p2 such that
A6:  a = [p1,p2] by A1,DOMAIN_1:9;
   thus L1 is lower-bounded
     proof take p1; let q1; consider q2;
         a = a"/\"[q1,q2] by A5 .= [p1"/\"q1,p2"/\"q2] by A6,Th36;
      hence thesis by A6,ZFMISC_1:33;
     end;
   take p2; let q2; consider q1;
      a = a"/\"[q1,q2] by A5 .= [p1"/\"q1,p2"/\"q2] by A6,Th36;
   hence thesis by A6,ZFMISC_1:33;
  end;

theorem
 Th41: L1 is upper-bounded & L2 is upper-bounded
   iff [:L1,L2:] is upper-bounded
  proof
A1: [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
           |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
   thus L1 is upper-bounded & L2 is upper-bounded
      implies [:L1,L2:] is upper-bounded
     proof given p1 such that
A2:     p1"\/"q1 = p1 & q1"\/"p1 = p1;
      given p2 such that
A3:     p2"\/"q2 = p2 & q2"\/"p2 = p2;
      take a = [p1,p2]; let b be Element of [:L1,L2:];
      consider q1,q2 such that
A4:     b = [q1,q2] by A1,DOMAIN_1:9;
      thus a"\/"b = [p1"\/"q1,p2"\/"q2] by A4,Th36 .= [p1,p2"\/"
q2] by A2 .= a by A3;
      hence b"\/"a = a;
     end;
   given a being Element of [:L1,L2:] such that
A5:  for b being Element of [:L1,L2:] holds
       a"\/"b = a & b"\/"a = a;
   consider p1,p2 such that
A6:  a = [p1,p2] by A1,DOMAIN_1:9;
   thus L1 is upper-bounded
     proof take p1; let q1; consider q2;
         a = a"\/"[q1,q2] by A5 .= [p1"\/"q1,p2"\/"q2] by A6,Th36;
      hence thesis by A6,ZFMISC_1:33;
     end;
   take p2; let q2; consider q1;
      a = a"\/"[q1,q2] by A5 .= [p1"\/"q1,p2"\/"q2] by A6,Th36;
   hence thesis by A6,ZFMISC_1:33;
  end;

theorem
 Th42: L1 is bounded & L2 is bounded
   iff [:L1,L2:] is bounded
  proof
   thus L1 is bounded & L2 is bounded
      implies [:L1,L2:] is bounded
     proof assume
         L1 is lower-bounded & L1 is upper-bounded &
       L2 is lower-bounded & L2 is upper-bounded;
      hence [:L1,L2:] is lower-bounded & [:L1,L2:] is upper-bounded
       by Th40,Th41;
     end;
   assume [:L1,L2:] is lower-bounded & [:L1,L2:] is upper-bounded;
   hence L1 is lower-bounded & L1 is upper-bounded &
     L2 is lower-bounded & L2 is upper-bounded by Th40,Th41;
  end;

theorem
 Th43: L1 is 0_Lattice & L2 is 0_Lattice implies Bottom [:L1,L2:] = [Bottom L1,
Bottom L2]
  proof assume
A1:    L1 is 0_Lattice & L2 is 0_Lattice;
A2: now let a be Element of [:L1,L2:];
        [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
           |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
     then consider p1,p2 such that
A3:    a = [p1,p2] by DOMAIN_1:9;
     thus [Bottom L1,Bottom L2]"/\"a = [Bottom L1"/\"p1,Bottom
L2"/\"p2] by A3,Th36 .= [Bottom L1,Bottom L2"/\"
p2] by A1,LATTICES:40
             .= [Bottom L1,Bottom L2] by A1,LATTICES:40;
     hence a"/\"[Bottom L1,Bottom L2]=[Bottom L1,Bottom L2];
    end;
     [:L1,L2:] is lower-bounded by A1,Th40;
   hence Bottom [:L1,L2:] = [Bottom L1,Bottom L2] by A2,LATTICES:def 16;
  end;

theorem
 Th44: L1 is 1_Lattice & L2 is 1_Lattice implies Top [:L1,L2:] = [Top L1,Top
L2]
  proof assume
A1:    L1 is 1_Lattice & L2 is 1_Lattice;
then A2:  [:L1,L2:] is upper-bounded by Th41;
      now let a be Element of [:L1,L2:];
        [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
           |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
     then consider p1,p2 such that
A3:    a = [p1,p2] by DOMAIN_1:9;
     thus [Top L1,Top L2]"\/"a = [Top L1"\/"p1,Top L2"\/"p2] by A3,Th36 .= [
Top L1,Top L2"\/"
p2] by A1,LATTICES:44
             .= [Top L1,Top L2] by A1,LATTICES:44;
     hence a"\/"[Top L1,Top L2] = [Top L1,Top L2];
    end;
   hence thesis by A2,LATTICES:def 17;
  end;

theorem
 Th45: L1 is 01_Lattice & L2 is 01_Lattice implies
  (p1 is_a_complement_of q1 & p2 is_a_complement_of q2 iff
    [p1,p2] is_a_complement_of [q1,q2])
  proof assume
A1:  L1 is 01_Lattice & L2 is 01_Lattice;
   thus p1 is_a_complement_of q1 & p2 is_a_complement_of q2 implies
      [p1,p2] is_a_complement_of [q1,q2]
     proof assume p1 is_a_complement_of q1 & p2 is_a_complement_of q2;
then A2:     p1"\/"q1 = Top L1 & p1"/\"q1 = Bottom
L1 & p2"\/"q2 = Top L2 & p2"/\"q2 = Bottom L2
         by LATTICES:def 18;
      hence [p1,p2]"\/"[q1,q2] = [Top L1,Top L2] by Th36
            .= Top [:L1,L2:] by A1,Th44;
      hence [q1,q2]"\/"[p1,p2] = Top [:L1,L2:];
      thus [p1,p2]"/\"[q1,q2] = [Bottom L1,Bottom L2] by A2,Th36
            .= Bottom [:L1,L2:] by A1,Th43;
      hence [q1,q2]"/\"[p1,p2] = Bottom [:L1,L2:];
     end;
   assume [p1,p2] is_a_complement_of [q1,q2];
then A3:  [p1,p2]"\/"[q1,q2] = Top [:L1,L2:] & [p1,p2]"/\"[q1,q2] = Bottom [:L1
,L2:]
      by LATTICES:def 18;
      [Top L1,Top L2] = Top [:L1,L2:] by A1,Th44;
 then A4: [Top L1,Top L2] = [p1"\/"q1,p2"\/"q2] by A3,Th36;
then A5: p1"\/"q1 = Top L1 by ZFMISC_1:33;
     [Bottom L1,Bottom L2] = Bottom [:L1,L2:] by A1,Th43;
then A6: [p1"/\"q1,p2"/\"q2] = [Bottom L1,Bottom L2] by A3,Th36;
then p1"/\"q1 = Bottom L1 by ZFMISC_1:33;
   hence p1 is_a_complement_of q1
     by A5,LATTICES:def 18;
A7: p2"\/"q2 = Top L2 by A4,ZFMISC_1:33;
   p2"/\"q2 = Bottom L2 by A6,ZFMISC_1:33;
   hence p2 is_a_complement_of q2
     by A7,LATTICES:def 18;
  end;

theorem
 Th46: L1 is C_Lattice & L2 is C_Lattice iff [:L1,L2:] is C_Lattice
  proof
A1: [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
            |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
   thus L1 is C_Lattice & L2 is C_Lattice implies [:L1,L2:] is C_Lattice
     proof assume
A2:     L1 is C_Lattice & L2 is C_Lattice;
      then reconsider L = [:L1,L2:] as 01_Lattice by Th42;
         L is complemented
        proof let a be Element of L;
         consider p1,p2 such that
A3:        a = [p1,p2] by A1,DOMAIN_1:9;
         consider q1 such that
A4:        q1 is_a_complement_of p1 by A2,LATTICES:def 19;
         consider q2 such that
A5:        q2 is_a_complement_of p2 by A2,LATTICES:def 19;
         reconsider b = [q1,q2] as Element of L;
         take b; thus thesis by A2,A3,A4,A5,Th45;
        end;
      hence thesis;
     end;
   assume
A6:  [:L1,L2:] is C_Lattice;
   then reconsider C1 = L1, C2 = L2 as 01_Lattice by Th42;
      C1 is complemented
     proof let p1' be Element of C1;
      consider p2' being Element of C2;
      reconsider p1 = p1' as Element of L1;
      reconsider p2 = p2' as Element of L2;
      consider b being Element of [:L1,L2:] such that
A7:     b is_a_complement_of [p1,p2] by A6,LATTICES:def 19;
      consider q1,q2 such that
A8:     b = [q1,q2] by A1,DOMAIN_1:9;
      reconsider q1' = q1 as Element of C1;
      take q1';
      thus thesis by A7,A8,Th45;
     end;
   hence L1 is C_Lattice;
      C2 is complemented
     proof let p2' be Element of C2;
      consider p1' being Element of C1;
      reconsider p1 = p1' as Element of L1;
      reconsider p2 = p2' as Element of L2;
      consider b being Element of [:L1,L2:] such that
A9:     b is_a_complement_of [p1,p2] by A6,LATTICES:def 19;
      consider q1,q2 such that
A10:     b = [q1,q2] by A1,DOMAIN_1:9;
      reconsider q2' = q2 as Element of C2;
      take q2';
      thus thesis by A9,A10,Th45;
     end;
   hence L2 is C_Lattice;
  end;

theorem
   L1 is B_Lattice & L2 is B_Lattice iff [:L1,L2:] is B_Lattice
  proof
      (L1 is B_Lattice iff L1 is C_Lattice & L1 is D_Lattice) &
    (L2 is B_Lattice iff L2 is C_Lattice & L2 is D_Lattice) &
    ([:L1,L2:] is C_Lattice iff L1 is C_Lattice & L2 is C_Lattice) &
    ([:L1,L2:] is D_Lattice iff L1 is D_Lattice & L2 is D_Lattice) &
    ([:L1,L2:] is B_Lattice iff
       [:L1,L2:] is C_Lattice & [:L1,L2:] is D_Lattice)
      by Th39,Th46,LATTICES:def 20;
   hence thesis;
  end;

theorem
   L1 is implicative & L2 is implicative
   iff [:L1,L2:] is implicative
  proof
A1: [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
            |:join(L1), join(L2):|, |:meet(L1),meet(L2):|#) by Def7;
   thus L1 is implicative & L2 is implicative
      implies [:L1,L2:] is implicative
     proof assume
A2:    for p1,q1 ex r1 st p1"/\"r1 [= q1 &
        for s1 st p1"/\"s1 [= q1 holds s1 [= r1;
      assume
A3:    for p2,q2 ex r2 st p2"/\"r2 [= q2 &
        for s2 st p2"/\"s2 [= q2 holds s2 [= r2;
      let a,b be Element of [:L1,L2:];
      consider p1,p2 such that
A4:     a = [p1,p2] by A1,DOMAIN_1:9;
      consider q1,q2 such that
A5:     b = [q1,q2] by A1,DOMAIN_1:9;
      consider r1 such that
A6:    p1"/\"r1 [= q1 & for s1 st p1"/\"s1 [= q1 holds s1 [= r1 by A2;
      consider r2 such that
A7:    p2"/\"r2 [= q2 & for s2 st p2"/\"s2 [= q2 holds s2 [= r2 by A3;
      take [r1,r2]; a"/\"[r1,r2] = [p1"/\"r1,p2"/\"r2] by A4,Th36;
      hence a"/\"[r1,r2] [= b by A5,A6,A7,Th37;
      let d be Element of [:L1,L2:];
      consider s1,s2 such that
A8:     d = [s1,s2] by A1,DOMAIN_1:9;
      assume a"/\"d [= b; then [p1"/\"s1,p2"/\"s2] [= b by A4,A8,Th36;
       then p1"/\"s1 [= q1 & p2"/\"s2 [= q2 by A5,Th37;
       then s1 [= r1 & s2 [= r2 by A6,A7;
      hence d [= [r1,r2] by A8,Th37;
     end;
   assume
A9:  for a,b being Element of [:L1,L2:]
       ex c being Element of [:L1,L2:] st
     a"/\"c [= b & for d being Element of [:L1,L2:] st a"/\"
d [= b
       holds d [= c;
   thus for p1,q1 ex r1 st p1"/\"r1 [= q1 &
      for s1 st p1"/\"s1 [= q1 holds s1 [= r1
     proof let p1,q1; consider p2,q2;
      consider c being Element of [:L1,L2:] such that
A10:     [p1,p2]"/\"c [= [q1,q2] &
        for d being Element of [:L1,L2:] st
        [p1,p2]"/\"d [= [q1,q2] holds d [= c by A9;
      consider r1,r2 such that
A11:     c = [r1,r2] by A1,DOMAIN_1:9;
      take r1; A12: [p1,p2]"/\"c = [p1"/\"r1,p2"/\"r2] by A11,Th36;
then A13:     p1"/\"r1 [= q1 & p2"/\"r2 [= q2 by A10,Th37;
      thus p1"/\"r1 [= q1 by A10,A12,Th37;
      let s1; assume p1"/\"s1 [= q1;
       then [p1"/\"s1,p2"/\"r2] [= [q1,q2] by A13,Th37;
       then [p1,p2]"/\"[s1,r2] [= [q1,q2] by Th36;
       then [s1,r2] [= c by A10;
      hence s1 [= r1 by A11,Th37;
     end;
   let p2,q2; consider p1,q1;
   consider c being Element of [:L1,L2:] such that
A14:  [p1,p2]"/\"c [= [q1,q2] & for d being Element of [:L1,L2:]
st
     [p1,p2]"/\"d [= [q1,q2] holds d [= c by A9;
   consider r1,r2 such that
A15:  c = [r1,r2] by A1,DOMAIN_1:9;
   take r2; A16: [p1,p2]"/\"c = [p1"/\"r1,p2"/\"r2] by A15,Th36;
then A17:  p1"/\"r1 [= q1 & p2"/\"r2 [= q2 by A14,Th37;
   thus p2"/\"r2 [= q2 by A14,A16,Th37;
   let s2; assume p2"/\"s2 [= q2;
    then [p1"/\"r1,p2"/\"s2] [= [q1,q2] by A17,Th37;
    then [p1,p2]"/\"[r1,s2] [= [q1,q2] by Th36;
    then [r1,s2] [= c by A14;
   hence s2 [= r2 by A15,Th37;
  end;

theorem
   [:L1,L2:].: = [:L1.:,L2.: :]
  proof
      [:L1,L2:] = LattStr (#[:the carrier of L1, the carrier of L2:],
                |:join(L1), join(L2):|, |:meet(L1), meet(L2):|#) &
    [:L1.:,L2.: :] = LattStr (#[:the carrier of L1.:, the carrier of L2.: :],
           |:join(L1.:), join(L2.:):|, |:meet(L1.:), meet(L2.:):| #) &
    L1.: = LattStr(#the carrier of L1, meet(L1), join(L1)#) &
    L2.: = LattStr(#the carrier of L2, meet(L2), join(L2)#) &
    [:L1,L2:].: = LattStr(#the carrier of [:L1,L2:],
                 meet([:L1,L2:]), join([:L1,L2:])#) by Def7,LATTICE2:def 2;
   hence thesis;
  end;

theorem
   [:L1,L2:], [:L2,L1:] are_isomorphic
  proof set R = LattRel [:L1,L2:]; set S = LattRel [:L2,L1:];
   set D1 = the carrier of L1; set D2 = the carrier of L2;
   set p2 = pr2(D1,D2); set p1 = pr1(D1,D2);
   take f = <:p2, p1:>;
A1:  field R = the carrier of [:L1,L2:] &
    field S = the carrier of [:L2,L1:] &
    [:L1,L2:] = LattStr (#[:D1, D2:],
       |:join(L1), join(L2):|, |:meet(L1), meet(L2):|#) &
    [:L2,L1:] = LattStr (#[:D2, D1:],
       |:join(L2), join(L1):|, |:meet(L2), meet(L1):|#) by Def7,Th33;
      dom p1 = [:D1,D2:] & dom p2 = [:D1,D2:] by FUNCT_3:def 5,def 6;
    then dom p2 /\ dom p1 = [:D1,D2:];
   hence
A2:  dom f = field R by A1,FUNCT_3:def 8;
      rng p1 = D1 & rng p2 = D2 by FUNCT_3:60,62;
   hence rng f c= field S by A1,FUNCT_3:71;
   thus field S c= rng f
     proof let x; assume x in field S;
      then consider r2,r1 such that
A3:    x = [r2,r1] by A1,DOMAIN_1:9;
         f.[r1,r2] in rng f & f.[r1,r2] = [p2.[r1,r2],p1.[r1,r2]] &
       p2.[r1,r2] = r2 & p1.[r1,r2] = r1
        by A1,A2,FUNCT_1:def 5,FUNCT_3:def 5,def 6,def 8;
      hence thesis by A3;
     end;
   thus f is one-to-one
     proof let x,y; assume
A4:    x in dom f; then consider r1,r2 such that
A5:    x = [r1,r2] by A1,A2,DOMAIN_1:9;
      assume
A6:    y in dom f & f.x = f.y; then consider q1,q2 such that
A7:    y = [q1,q2] by A1,A2,DOMAIN_1:9;
         p1.[r1,r2] = r1 & p2.[r1,r2] = r2 & p1.[q1,q2] = q1 &
       p2.[q1,q2] = q2 & f.x = [p2.x,p1.x] & f.y = [p2.y,p1.y]
        by A4,A6,FUNCT_3:def 5,def 6,def 8;
       then r1 = q1 & r2 = q2 by A5,A6,A7,ZFMISC_1:33;
      hence thesis by A5,A7;
     end;
A8:  R = { [a,b] where a is Element of [:L1,L2:],
          b is Element of [:L1,L2:]: a [= b } &
    S = { [a,b] where a is Element of [:L2,L1:],
          b is Element of [:L2,L1:]: a [= b }
             by Def8;
   let x,y;
   thus [x,y] in R implies x in field R & y in field R & [f.x,f.y] in S
     proof assume [x,y] in R;
      then consider a,b being Element of [:L1,L2:]
      such that
A9:    [x,y] = [a,b] & a [= b by A8;
      consider r1,r2 such that
A10:    a = [r1,r2] by A1,DOMAIN_1:9;
      consider q1,q2 such that
A11:    b = [q1,q2] by A1,DOMAIN_1:9;
A12:    r1 [= q1 & r2 [= q2 by A9,A10,A11,Th37;
A13:    x = a & y = b by A9,ZFMISC_1:33;
      hence x in field R & y in field R by A1;
         [r2,r1] [= [q2,q1] & p1.x = r1 & p2.x = r2 & p1.y = q1 & p2.y = q2 &
       f.x = [p2.x,p1.x] & f.y = [p2.y,p1.y]
        by A1,A2,A10,A11,A12,A13,Th37,FUNCT_3:def 5,def 6,def 8;
      hence thesis by A8;
     end;
   assume
A14: x in field R & y in field R;
   then consider r1,r2 such that
A15: x = [r1,r2] by A1,DOMAIN_1:9;
   consider q1,q2 such that
A16: y = [q1,q2] by A1,A14,DOMAIN_1:9;
   assume
A17: [f.x,f.y] in S;
      f.[r1,r2] = [p2.[r1,r2],p1.[r1,r2]] & p1.[r1,r2] = r1 & p2.[r1,r2] = r2 &
    f.[q1,q2] = [p2.[q1,q2],p1.[q1,q2]] & p1.[q1,q2] = q1 & p2.[q1,q2] = q2
     by A1,A2,FUNCT_3:def 5,def 6,def 8;
    then [r2,r1] [= [q2,q1] by A15,A16,A17,Th32;
    then r2 [= q2 & r1 [= q1 by Th37;
    then [r1,r2] [= [q1,q2] by Th37;
   hence [x,y] in R by A15,A16,Th32;
  end;

 reserve B for B_Lattice,
  a,b,c,d for Element of B;

theorem
 Th51: a <=> b = (a"/\"b)"\/"(a`"/\"b`)
  proof
   thus a <=> b = (a => b)"/\"(b => a) by FILTER_0:def 11
       .= (a`"\/"b)"/\"(b => a) by FILTER_0:55
       .= (a`"\/"b)"/\"(b`"\/"a) by FILTER_0:55
       .= (a`"/\"(b`"\/"a))"\/"(b"/\"(b`"\/"a)) by LATTICES:def 11
       .= ((a`"/\"b`)"\/"(a`"/\"a))"\/"(b"/\"(b`"\/"a)) by LATTICES:def 11
       .= ((a`"/\"b`)"\/"(a`"/\"a))"\/"((b"/\"b`)"\/"(b"/\"
a)) by LATTICES:def 11
       .= ((a`"/\"b`)"\/"Bottom B)"\/"((b"/\"b`)"\/"(b"/\"a)) by LATTICES:47
       .= ((a`"/\"b`)"\/"Bottom B)"\/"(Bottom B"\/"(b"/\"a)) by LATTICES:47
       .= (a`"/\"b`)"\/"(Bottom B"\/"(b"/\"a)) by LATTICES:39
       .= (a"/\"b)"\/"(a`"/\"b`) by LATTICES:39;
  end;

theorem
 Th52: (a => b)` = a "/\" b` & (a <=> b)` = (a "/\" b`) "\/" (a` "/\" b) &
   (a <=> b)` = a <=> b` & (a <=> b)` = a` <=> b
  proof
A1:  now let a,b;
     thus (a => b)` = (a` "\/" b)` by FILTER_0:55 .= a`` "/\" b` by LATTICES:51
                   .= a "/\" b` by LATTICES:49;
    end;
   hence (a => b)` = a "/\" b`;
   thus (a <=> b)` = ((a=>b)"/\"(b=>a))` by FILTER_0:def 11
          .= (a=>b)`"\/"(b=>a)` by LATTICES:50
          .= (a"/\"b`)"\/"(b=>a)` by A1 .= (a"/\"b`)"\/"(a`"/\"b) by A1;
   hence (a <=> b)` = (a"/\"b`)"\/"(a`"/\"b``) by LATTICES:49
          .= a <=> b` by Th51;
   hence (a <=> b)` = (a"/\"b`)"\/"(a`"/\"b``) by Th51
          .= (a``"/\"b`)"\/"(a`"/\"b``) by LATTICES:49
          .= (a`"/\"b)"\/"(a``"/\"b`) by LATTICES:49
          .= a` <=> b by Th51;
  end;

theorem
 Th53: a <=> b = a <=> c implies b = c
  proof
   set ab = a"/\"b; set ac = a"/\"c;
   set bc = b"/\"c; set b'c' = b`"/\"c`;
   set a'b' = a`"/\"b`; set a'c' = a`"/\"c`;
   set a'b = a`"/\"b; set a'c = a`"/\"c;
   set ab' = a"/\"b`; set ac' = a"/\"c`;
    A1: (a<=>b) <=> (a<=>c) = ((a<=>b)"/\"(a<=>c))"\/"((a<=>b)`"/\"(a<=>c)`) &
    a<=>b = ab"\/"a'b' & a<=>c = ac"\/"a'c' & (a<=>b)` = ab'"\/"a'b &
    (a<=>c)` = ac'"\/"a'c &
    (ab"\/"a'b')"/\"(ac"\/"a'c') = (ab"/\"(ac"\/"a'c'))"\/"(a'b'"/\"(ac"\/"
a'c')) &
    ab"/\"(ac"\/"a'c') = (ab"/\"ac)"\/"(ab"/\"a'c') & ab"/\"a'c' = ab"/\"a`"/\"
c` &
    a'b'"/\"(ac"\/"a'c') = (a'b'"/\"ac)"\/"(a'b'"/\"a'c') & b"/\"a"/\"a` = b
"/\"(a"/\"a`) &
    b"/\"Bottom B = Bottom B & b`"/\"Bottom B = Bottom B & Bottom B"/\"c =
Bottom B & Bottom B"/\"c` = Bottom B &
    a"/\"a` = Bottom B & a`"/\"a = Bottom B & ab = b"/\"a & a'b' = b`"/\"a` &
    a'b'"/\"ac = a'b'"/\"a"/\"c & b`"/\"a`"/\"a = b`"/\"(a`"/\"a) &
    (ab"/\"ac)"\/"Bottom B = ab"/\"ac & Bottom
B"\/"(a'b'"/\"a'c') = a'b'"/\"a'c' &
    (ab'"\/"a'b)"/\"(ac'"\/"a'c) = (ab'"/\"(ac'"\/"a'c))"\/"(a'b"/\"(ac'"\/"
a'c)) &
    ab'"/\"(ac'"\/"a'c) = (ab'"/\"ac')"\/"(ab'"/\"a'c) & ab'"/\"a'c = ab'"/\"a`
"/\"c &
    a'b"/\"(ac'"\/"a'c) = (a'b"/\"ac')"\/"(a'b"/\"a'c) & b`"/\"a"/\"a` = b`"/\"
(a"/\"a`) &
    b`"/\"Bottom B = Bottom B & b"/\"Bottom B = Bottom B & Bottom B"/\"c` =
Bottom B & Bottom B"/\"c = Bottom B &
    a"/\"a` = Bottom B & a`"/\"a = Bottom B & ab' = b`"/\"a & a'b = b"/\"a` &
    a'b"/\"ac' = a'b"/\"a"/\"c` & b"/\"a`"/\"a = b"/\"(a`"/\"a) &
    (ab'"/\"ac')"\/"Bottom B = ab'"/\"ac' & Bottom
B"\/"(a'b"/\"a'c) = a'b"/\"a'c
     by Th51,Th52,LATTICES:39,40,47,def 7,def 11;
      ab"/\"ac = ab"/\"a"/\"c & ab"/\"a = a"/\"ab & a"/\"ab = a"/\"a"/\"b & a
"/\"
a = a &
    a'b'"/\"a'c' = a'b'"/\"a`"/\"c` & a'b'"/\"a` = a`"/\"a'b' & a`"/\"a'b' = a`
"/\"a`"/\"b` &
    a`"/\"a` = a` & ab'"/\"ac' = ab'"/\"a"/\"c` & ab'"/\"a = a"/\"ab' & (a"/\"b
"/\"c) = a"/\"bc &
    a"/\"ab' = a"/\"a"/\"b` & a'b"/\"a'c = a'b"/\"a`"/\"c & a'b"/\"a` = a`"/\"
a'b &
    (a`"/\"b"/\"c) = a`"/\"bc & (a"/\"b`"/\"c`) = a"/\"b'c' & (a`"/\"b`"/\"c`)
 = a`"/\"b'c' & a`"/\"a'b = a`"/\"a`"/\"b &
    (a"/\"bc)"\/"(a`"/\"b'c')"\/"((a"/\"b'c')"\/"(a`"/\"bc)) =
      (a"/\"bc)"\/"(a`"/\"b'c')"\/"(a"/\"b'c')"\/"(a`"/\"bc) &
    (a"/\"bc)"\/"(a`"/\"b'c')"\/"(a"/\"b'c') = (a"/\"b'c')"\/"((a"/\"bc)"\/"(a`
"/\"b'c')) &
    (a"/\"b'c')"\/"((a"/\"bc)"\/"(a`"/\"b'c')) = (a"/\"b'c')"\/"(a"/\"bc)"\/"
(a`"/\"b'c') &
    (a"/\"b'c')"\/"(a"/\"bc) = a"/\"(b'c'"\/"bc) & b'c'"\/"bc = bc"\/"b'c' &
    (a`"/\"b'c')"\/"(a`"/\"bc) = a`"/\"(b'c'"\/"bc) & (Top B)"/\"(b'c'"\/"
bc) = b'c'"\/"bc &
    (a"/\"(b'c'"\/"bc))"\/"(a`"/\"b'c')"\/"(a`"/\"bc) =
      (a"/\"(b'c'"\/"bc))"\/"((a`"/\"b'c')"\/"(a`"/\"bc)) & a"\/"a` = Top B &
    (a"/\"(b'c'"\/"bc))"\/"(a`"/\"(b'c'"\/"bc)) = (a"\/"a`)"/\"(b'c'"\/"bc)
     by LATTICES:18,43,48,def 5,def 7,def 11;
then A2:  (a<=>b) <=> (a<=>c) = b <=> c & B is I_Lattice by A1,Th51,FILTER_0:40
;
   assume a<=>b = a<=>c;
    then (a<=>b) => (a<=>c) = Top B & (a<=>c) => (a<=>b) = Top
B by A2,FILTER_0:38;
    then b <=> c = Top B"/\"Top B by A2,FILTER_0:def 11 .= Top
B by LATTICES:18;
    then (b => c)"/\"(c => b) = Top B & (b => c)"/\"(c => b) = (c => b)"/\"(b
=> c)
     by FILTER_0:def 11;
    then Top B [= b => c & Top B [= c => b by LATTICES:23;
    then b"/\"Top B [= b"/\"(b => c) & c"/\"Top
B [= c"/\"(c => b) & b"/\"(b => c) [= c &
    c"/\"(c => b) [= b & b"/\"Top B = b & c"/\"Top B = c
     by A2,FILTER_0:def 8,LATTICES:27,43;
    then b [= c & c [= b by LATTICES:25;
   hence thesis by LATTICES:26;
  end;

theorem
 Th54: a <=> (a <=> b) = b
  proof
      a<=>(a<=>b) = (a"/\"(a<=>b))"\/"(a`"/\"(a<=>b)`) &
    a<=>b = (a"/\"b)"\/"(a`"/\"b`) & (a<=>b)` = (a"/\"b`)"\/"(a`"/\"b) &
    a"/\"((a"/\"b)"\/"(a`"/\"b`)) = (a"/\"(a"/\"b))"\/"(a"/\"(a`"/\"b`)) &
    a`"/\"((a"/\"b`)"\/"(a`"/\"b)) = (a`"/\"(a"/\"b`))"\/"(a`"/\"(a`"/\"b)) &
    a"/\"(a"/\"b) = a"/\"a"/\"b & a`"/\"(a"/\"b`) = a`"/\"a"/\"b` & a"/\"
a = a & a`"/\"a` = a` &
    a`"/\"(a`"/\"b) = a`"/\"a`"/\"b & a"/\"(a`"/\"b`) = a"/\"a`"/\"b` & Bottom
B"/\"
b = Bottom B &
    a"/\"a` = Bottom B & a`"/\"a = Bottom B & (a"/\"b)"\/"Bottom B = a"/\"b &
Bottom B"\/"(a`"/\"
b) = a`"/\"b &
    (a"/\"b)"\/"(a`"/\"b) = (a"\/"a`)"/\"b & a"\/"a` = Top B & Top
B"/\"b = b & Bottom B
"/\"b` = Bottom B
     by Th51,Th52,LATTICES:18,39,40,43,47,48,def 7,def 11;
   hence thesis;
  end;

theorem
   (i"\/"j) => i = j => i & i => (i"/\"j) = i => j
  proof
      j=>i [= (j=>i)"\/"i & i"\/"(j=>i) = (j=>i)"\/"i & j"/\"(j=>i) [= i &
    i"\/"i = i by FILTER_0:def 8,LATTICES:17,22;
    then i"\/"(j"/\"(j=>i)) [= i & i"\/"(j"/\"(j=>i)) = (i"\/"j)"/\"(i"\/"(j=>
i)) &
    (i"\/"j)"/\"(j=>i) [= (i"\/"j)"/\"(i"\/"
(j=>i)) by FILTER_0:1,LATTICES:27,31;
    then (i"\/"j)"/\"(j=>i) [= i & j [= j"\/"i & i"\/"j = j"\/"
i by LATTICES:22,25;
then A1:  j=>i [= (i"\/"j)=>i & (i"\/"j)"/\"((i"\/"j)=>i) [= i &
    j"/\"((i"\/"j)=>i) [= (i"\/"j)"/\"((i"\/"
j)=>i) by FILTER_0:def 8,LATTICES:27;
    then j"/\"((i"\/"j)=>i) [= i by LATTICES:25;
    then (i"\/"j)=>i [= j=>i by FILTER_0:def 8;
   hence (i"\/"j) => i = j => i by A1,LATTICES:26;
      i"/\"(i=>(i"/\"j)) [= i"/\"j & j"/\"i [= j & i"/\"j = j"/\"i
     by FILTER_0:def 8,LATTICES:23;
    then i"/\"(i=>(i"/\"j)) [= j by LATTICES:25;
then A2:  i=>(i"/\"j) [= i=>j by FILTER_0:def 8;
      i"/\"(i=>j) [= j by FILTER_0:def 8;
    then i"/\"(i"/\"(i=>j)) [= i"/\"j & i"/\"(i"/\"(i=>j)) = i"/\"i"/\"(i=>j)
& i
"/\"i = i
     by LATTICES:18,27,def 7;
    then i=>j [= i=>(i"/\"j) by FILTER_0:def 8;
   hence thesis by A2,LATTICES:26;
  end;

theorem
 Th56: i => j [= i => (j"\/"k) & i => j [= (i"/\"k) => j &
   i => j [= i => (k"\/"j) & i => j [= (k"/\"i) => j
  proof
A1:  i"/\"(i=>j) [= j & j [= j"\/"k & i"/\"k [= i
     by FILTER_0:def 8,LATTICES:22,23;
then A2:  i"/\"(i=>j) [= j"\/"k & (i"/\"k)"/\"(i=>j) [= i"/\"
(i=>j) by LATTICES:25,27;
    then (i"/\"k)"/\"(i=>j) [= j by A1,LATTICES:25;
   hence thesis by A2,FILTER_0:def 8;
  end;

 Lm1: i => j in F_I implies i => (j"\/"k) in F_I & i => (k"\/"j) in F_I &
   (i"/\"k) => j in F_I & (k"/\"i) => j in F_I
  proof
      i => j [= i => (j"\/"k) & i => j [= (i"/\"k) => j &
    i => j [= i => (k"\/"j) & i => j [= (k"/\"i) => j by Th56;
   hence thesis by FILTER_0:9;
  end;

theorem
 Th57: (i => k)"/\"(j => k) [= (i"\/"j) => k
  proof i"/\"(i=>k) [= k & j"/\"(j=>k) [= k by FILTER_0:def 8;
    then i"/\"(i=>k)"/\"(j=>k) [= k & j"/\"(j=>k)"/\"(i=>k) [= k &
    i"/\"((i=>k)"/\"(j=>k)) = i"/\"(i=>k)"/\"(j=>k) &
    (i"/\"((i=>k)"/\"(j=>k)))"\/"(j"/\"((i=>k)"/\"(j=>k))) = (i"\/"j)"/\"
((i=>k)"/\"(j=>k)) &
    (j=>k)"/\"(i=>k) = (i=>k)"/\"(j=>k) & j"/\"((j=>k)"/\"(i=>k)) = j"/\"(j=>k)
"/\"(i=>k)
     by FILTER_0:2,LATTICES:def 7,def 11;
    then (i"\/"j)"/\"((i=>k)"/\"(j=>k)) [= k by FILTER_0:6;
   hence (i=>k)"/\"(j=>k) [= (i"\/"j)=> k by FILTER_0:def 8;
  end;

 Lm2: i => k in F_I & j => k in F_I implies (i"\/"j) => k in F_I
  proof
A1:  (i=>k)"/\"(j=>k) [= (i"\/"j)=> k by Th57;
   assume i => k in F_I & j => k in F_I;
    then (i=>k)"/\"(j=>k) in F_I by FILTER_0:def 1;
   hence thesis by A1,FILTER_0:9;
  end;

theorem
 Th58: (i => j)"/\"(i => k) [= i => (j"/\"k)
  proof i"/\"(i=>k) [= k & i"/\"(i=>j) [= j by FILTER_0:def 8;
    then (i"/\"(i=>j))"/\"(i"/\"(i=>k)) [= j"/\"k & i"/\"i = i &
    (i"/\"(i=>j))"/\"(i"/\"(i=>k)) = ((i"/\"(i=>j))"/\"i)"/\"(i=>k) &
    (i"/\"(i=>j))"/\"i = i"/\"(i"/\"(i=>j)) & i"/\"(i"/\"(i=>j)) = i"/\"i"/\"
(i=>j) &
    i"/\"((i=>j)"/\"(i=>k)) = i"/\"(i=>j)"/\"
(i=>k) by FILTER_0:5,LATTICES:18,def 7;
   hence (i=>j)"/\"(i=>k) [= i=>(j"/\"k) by FILTER_0:def 8;
  end;

 Lm3: i => j in F_I & i => k in F_I implies i => (j"/\"k) in F_I
  proof
A1:  (i=>j)"/\"(i=>k) [= i=>(j"/\"k) by Th58;
   assume i => j in F_I & i => k in F_I;
    then (i=>j)"/\"(i=>k) in F_I by FILTER_0:def 1;
   hence thesis by A1,FILTER_0:9;
  end;

theorem
 Th59: i1 <=> i2 in F_I & j1 <=> j2 in F_I implies
   (i1"\/"j1) <=> (i2"\/"j2) in F_I & (i1"/\"j1) <=> (i2"/\"j2) in F_I
  proof assume
A1:  i1 <=> i2 in F_I & j1 <=> j2 in F_I;
      i1 <=> i2 = (i1=>i2)"/\"(i2=>i1) & j1 <=> j2 = (j1=>j2)"/\"(j2=>j1)
     by FILTER_0:def 11;
    then i1=>i2 in F_I & i2=>i1 in F_I & j1=>j2 in F_I & j2=>j1 in F_I
     by A1,FILTER_0:def 1;
    then (i1"/\"j1)=>i2 in F_I & (i1"/\"j1)=>j2 in F_I &
    (i2"/\"j2)=>i1 in F_I & (i2"/\"j2)=>j1 in F_I &
    i1=>(i2"\/"j2) in F_I & j1=>(i2"\/"j2) in F_I &
    i2=>(i1"\/"j1) in F_I & j2=>(i1"\/"j1) in F_I by Lm1;
    then (i1"/\"j1) => (i2"/\"j2) in F_I & (i2"/\"j2) => (i1"/\"j1) in F_I &
    (i1"/\"j1) <=> (i2"/\"j2) = ((i1"/\"j1)=>(i2"/\"j2))"/\"((i2"/\"j2)=>(i1
"/\"j1)) &
    (i1"\/"j1) => (i2"\/"j2) in F_I & (i2"\/"j2) => (i1"\/"j1) in F_I &
    (i1"\/"j1) <=> (i2"\/"j2) = ((i1"\/"j1)=>(i2"\/"j2))"/\"((i2"\/"j2)=>(i1
"\/"j1))
      by Lm2,Lm3,FILTER_0:def 11;
   hence thesis by FILTER_0:def 1;
  end;

 Lm4: i in Class(equivalence_wrt F_I,j) iff i <=> j in F_I
  proof
      (i in Class(equivalence_wrt F_I,j) iff [i,j] in equivalence_wrt F_I) &
    ([i,j] in equivalence_wrt F_I iff i <=> j in F_I)
      by EQREL_1:27,FILTER_0:def 12;
   hence thesis;
  end;

theorem Th60:
 i in Class(equivalence_wrt F_I,k) & j in Class(equivalence_wrt F_I,k) implies
   i"\/"j in Class(equivalence_wrt F_I,k) & i"/\"
j in Class(equivalence_wrt F_I,k)
  proof assume
      i in Class(equivalence_wrt F_I,k) & j in Class(equivalence_wrt F_I,k);
    then i <=> k in F_I & j <=> k in F_I & k"\/"k = k & k"/\"k = k
     by Lm4,LATTICES:17,18;
    then (i"\/"j) <=> k in F_I & (i"/\"j) <=> k in F_I by Th59;
   hence thesis by Lm4;
  end;

theorem
 Th61: c"\/"(c <=>d) in Class(equivalence_wrt <.d.),c) &
   for b st b in Class(equivalence_wrt <.d.),c) holds b [= c"\/"(c <=>d)
  proof set A = Class(equivalence_wrt <.d.),c);
A1:  B is I_Lattice by FILTER_0:40;
      d in <.d.) & c <=>(c <=>d) = d & (c <=>d)<=>c = c <=>(c <=>d)
     by Th54,FILTER_0:19,77;
    then c <=>d in A & c in A by A1,Lm4,EQREL_1:28;
   hence (c"\/"(c <=>d)) in A by A1,Th60;
   let b; assume b in A;
    then b<=>c in <.d.) by A1,Lm4;
    then d [= b<=>c & (b<=>c)` = (b"/\"c`)"\/"(b`"/\"c) by Th52,FILTER_0:18;
    then (b"/\"c`)"\/"(b`"/\"c) [= d` by LATTICES:53;
    then ((b"/\"c`)"\/"(b`"/\"c))"/\"c` [= d`"/\"c` & (b"/\"c`)"/\"c`= b"/\"(c
`"/\"
c`) & c` = c`"/\"c` &
    ((b"/\"c`)"\/"(b`"/\"c))"/\"c` = ((b"/\"c`)"/\"c`)"\/"((b`"/\"c)"/\"c`) & b
"/\"c`"\/"Bottom B = b"/\"c` &
    (b`"/\"c)"/\"c`= b`"/\"(c"/\"c`) & Bottom
B = c"/\"c` & d`"/\"c` = c`"/\"d` & c
"/\"b [= c &
    c"/\"b = b"/\"c & c"/\"d [= c & (c"/\"d)"\/"c = c"\/"(c"/\"d) & b`"/\"
Bottom B = Bottom B
     by LATTICES:18,23,27,39,40,47,def 7,def 11;
    then (b"/\"c`)"\/"(b"/\"c) [= (c`"/\"d`)"\/"(b"/\"c) & (b"/\"c`)"\/"(b"/\"
c) = b
"/\"(c`"\/"c) &
    c`"\/"c = Top B & b"/\"Top
B = b & (c`"/\"d`)"\/"(b"/\"c) [= (c`"/\"d`)"\/"c &
    (c`"/\"d`)"\/"c = c"\/"(c`"/\"d`) & c = c"\/"(c"/\"d) & (c"/\"d)"\/"(c`"/\"
d`) = c <=>d &
    c"\/"(c"/\"d)"\/"(c`"/\"d`) = c"\/"((c"/\"d)"\/"(c`"/\"d`))
     by Th51,FILTER_0:1,LATTICES:43,48,def 5,def 8,def 11;
   hence thesis by LATTICES:25;
  end;

theorem
   B, [:B/\/<.a.),latt <.a.):] are_isomorphic
  proof set F = <.a.); set E = equivalence_wrt F;
A1: B is 0_Lattice & B is 1_Lattice & B is I_Lattice
     by FILTER_0:40;
   deffunc F(set) = Class(E,$1);
   consider g being Function such that
A2:  dom g = the carrier of B & for x st x in the carrier of B holds
     g.x = F(x) from Lambda;
A3: (b"\/"(b<=>a)) <=> b = b"\/"a
     proof
         (b"\/"(b<=>a)) <=> b = ((b"\/"(b<=>a))"/\"b)"\/"((b"\/"(b<=>a))`"/\"
b`) &
       (b"\/"(b<=>a))` = b`"/\"(b<=>a)` & (b<=>a)` = (b"/\"a`)"\/"(b`"/\"a) &
       b`"/\"((b"/\"a`)"\/"(b`"/\"a)) = (b`"/\"(b"/\"a`))"\/"(b`"/\"(b`"/\"
a)) &
       b`"/\"(b"/\"a`) = b`"/\"b"/\"a` & b`"/\"b = Bottom
B & b`"/\"(b`"/\"a) = b`
"/\"b`"/\"a &
       b`"/\"b` = b` & Bottom B"/\"a` = Bottom B & Bottom
B"\/"(b`"/\"a) = b`"/\"a &
       b`"/\"(b`"/\"a) = b`"/\"a"/\"b` &
       b<=>a = (b"/\"a)"\/"(b`"/\"a`) & b"\/"((b"/\"a)"\/"(b`"/\"a`)) = b"\/"(b
"/\"a)"\/"(b`"/\"a`) &
       b"\/"(b"/\"a) = (b"/\"a)"\/"b & (b"/\"a)"\/"b = b &
       (b"\/"(b`"/\"a`))"/\"b = (b"/\"b)"\/"(b`"/\"a`"/\"b) & b`"/\"(a`"/\"
b) = b`"/\"a`"/\"b &
       a`"/\"b = b"/\"a` & b"/\"b = b & b"\/"Bottom B = b
        by Th51,Th52,LATTICES:18,39,40,47,51,def 5,def 7,def 8,def 11;
      hence (b"\/"(b<=>a)) <=> b = b"\/"((b"/\"a)"\/"(b`"/\"
a)) by LATTICES:def 5
                              .= b"\/"((b"\/"b`)"/\"a) by LATTICES:def 11
                              .= b"\/"(Top B"/\"a) by LATTICES:48
                              .= b"\/"a by LATTICES:43;
     end;
A4: the carrier of latt F = F by FILTER_0:63;
   deffunc F(Element of B) = ($1"\/"($1<=>a)) <=> $1;
   consider h being UnOp of the carrier of B such that
A5:  h.b = F(b) from LambdaD;
   take f = <:g,h:>; set R = LattRel B; set S = LattRel [:B/\/F,latt F:];
A6: field R = the carrier of B &
    field S = the carrier of [:B/\/F,latt F:] by Th33;
    A7: dom h = dom g by A2,FUNCT_2:def 1;
   hence
A8: dom f = field R by A2,A6,FUNCT_3:70;
   reconsider o1 = join(B), o2 = meet(B) as BinOp of E by A1,Th13,Th14;
A9: the carrier of latt F = F &
    LattStr(#Class E,o1/\/E,o2/\/E#) = B/\/F by A1,Def5,FILTER_0:63;
A10: h.b is Element of latt F
     proof b"\/"(b<=>a) in Class(E,b) by Th61;
       then [b"\/"(b<=>a),b] in E by EQREL_1:27;
       then h.b = (b"\/"(b<=>a)) <=> b & (b"\/"(b<=>a)) <=> b in F
        by A5,FILTER_0:def 12;
      hence thesis by FILTER_0:63;
     end;
A11: [:B/\/F, latt F:] = LattStr (#[:carr(B/\/F), carr(latt F):],
        |:join(B/\/F),join(latt F):|,|:meet(B/\/F),meet(latt F):|#)
          by Def7;
   thus rng f c= field S
     proof let x; assume x in rng f;
      then consider y such that
A12:    y in dom f & x = f.y by FUNCT_1:def 5;
      reconsider y as Element of B by A2,A7,A12,FUNCT_3:70;
         g.y = Class(E,y) by A2;
      then reconsider z1 = g.y as Element of B/\/F by A9;
      reconsider z2 = h.y as Element of latt F by A10;
         x = [z1,z2] by A12,FUNCT_3:def 8;
      hence thesis by A6;
     end;
   thus field S c= rng f
     proof let x; assume x in field S;
      then consider y being Element of Class E,
               z being Element of F such that
A13:    x = [y,z] by A6,A9,A11,DOMAIN_1:9;
      consider b such that
A14:    y = Class(E,b) by EQREL_1:45;
      set ty = b"\/"(b<=>a);
A15:    ty in y by A14,Th61;
then A16:    y = Class(E,ty) by A14,EQREL_1:31;
         ty <=> (ty <=> z) = z by Th54;
       then (ty <=> z) <=> ty = z by FILTER_0:77;
       then [ty <=> z,ty] in E by FILTER_0:def 12;
then A17:       ty <=> z in y by A16,EQREL_1:27;
then A18:    y = Class(E,ty<=>z) by A14,EQREL_1:31;
       then (ty<=>z)"\/"((ty<=>z)<=>a) in y by Th61;
       then (ty<=>z)"\/"((ty<=>z)<=>a) [= ty & ty [= (ty<=>z)"\/"((ty<=>z)<=>a
)
        by A14,A15,A18,Th61;
       then h.(ty<=>z) = ((ty<=>z)"\/"((ty<=>z)<=>a)) <=> (ty<=>z) &
       (ty<=>z)"\/"((ty<=>z)<=>a) = ty &
       y = Class(E,ty<=>z) by A5,A14,A17,EQREL_1:31,LATTICES:26;
       then g.(ty <=> z) = y & h.(ty <=> z) = z by A2,Th54;
       then x = f.(ty <=> z) by A6,A8,A13,FUNCT_3:def 8;
      hence thesis by A6,A8,FUNCT_1:def 5;
     end;
   thus f is one-to-one
     proof let x,y; assume x in dom f & y in dom f;
      then reconsider x' = x, y' = y as Element of B by A2,A7,
FUNCT_3:70;
A19:    f.x = [g.x',h.x'] & f.y = [g.y',h.y'] & g.x' = Class(E,x') &
       g.y' = Class(E,y') & h.x' = (x'"\/"(x'<=>a)) <=> x' &
       x'"\/"(x'<=>a) in Class(E,x') & y'"\/"(y'<=>a) in Class(E,y') &
       h.y' = (y'"\/"(y'<=>a)) <=> y' by A2,A5,A6,A8,Th61,FUNCT_3:def 8;
      assume f.x = f.y;
then A20:    g.x = g.y & h.x = h.y by A19,ZFMISC_1:33;
       then x'"\/"(x'<=>a) [= y'"\/"(y'<=>a) & y'"\/"(y'<=>a) [= x'"\/"(x'<=>a
)
        by A19,Th61;
       then y'"\/"(y'<=>a) = x'"\/"(x'<=>a) by LATTICES:26;
      hence x = y by A19,A20,Th53;
     end;
   let x,y;
   thus [x,y] in R implies x in field R & y in field R & [f.x,f.y] in S
     proof assume
A21:    [x,y] in R;
      hence x in field R & y in field R by RELAT_1:30;
      reconsider x' = x, y' = y as Element of B
        by A6,A21,RELAT_1:30;
A22:    x' [= y' & x'"/\"Top B = x' by A21,Th32,LATTICES:43;
       then Top B [= x' => y' & Top B in F by A1,FILTER_0:12,def 8;
       then x' => y' in F by FILTER_0:9;
then A23:    x'/\/F [= y'/\/F & x'/\/F = Class(E,x') & Class(E,x') = g.x' &
       y'/\/F = Class(E,y') & Class(E,y') = g.y' by A1,A2,Def6,Th16;
A24:    h.x' = (x'"\/"(x'<=>a)) <=> x' & h.y' = (y'"\/"(y'<=>a)) <=> y' &
       f.x' = [g.x',h.x'] & f.y' = [g.y',h.y'] & x'"\/"a [= y'"\/"a &
       (x'"\/"(x'<=>a)) <=> x' = x'"\/"a & (y'"\/"(y'<=>a)) <=> y' = y'"\/"a
         by A3,A5,A6,A8,A22,FILTER_0:1,FUNCT_3:def 8;
         x'"\/"(x'<=>a) in Class(E,x') & y'"\/"
(y'<=>a) in Class(E,y') by Th61;
      then reconsider hx = h.x, hy = h.y as Element of latt F
         by A1,A4,A24,Lm4;
         hx [= hy by A24,FILTER_0:65;
       then [x'/\/F,hx] [= [y'/\/F,hy] by A23,Th37;
      hence thesis by A23,A24,Th32;
     end;
   assume x in field R & y in field R;
   then reconsider x' = x, y' = y as Element of B by Th33;
A25: x'/\/F = Class(E,x') & y'/\/F = Class(E,y') &
    Class(E,x') = g.x' & Class(E,y') = g.y' &
    h.x' = (x'"\/"(x'<=>a)) <=> x' & h.y' = (y'"\/"(y'<=>a)) <=> y' &
    f.x' = [g.x',h.x'] & f.y' = [g.y',h.y'] &
    (x'"\/"(x'<=>a)) <=> x' = x'"\/"a & (y'"\/"(y'<=>a)) <=> y' = y'"\/"a
      by A1,A2,A3,A5,A6,A8,Def6,FUNCT_3:def 8;
      x'"\/"(x'<=>a) in Class(E,x') & y'"\/"(y'<=>a) in Class(E,y') by Th61;
   then reconsider hx = h.x, hy = h.y as Element of latt F
      by A1,A4,A25,Lm4;
   assume [f.x,f.y] in S;
    then [x'/\/F,hx] [= [y'/\/F,hy] by A25,Th32;
    then x'/\/F [= y'/\/F & hx [= hy by Th37;
    then x' => y' in F & x' => y' = x'`"\/"y' & x'"\/"a [= y'"\/"a & x' [= x'
"\/"a
      by A1,A25,Th16,FILTER_0:55,65,LATTICES:22;
    then a [= x'`"\/"y' & x'"/\"(x'"\/"a) [= x'"/\"(y'"\/"a) & x'"/\"(x'"\/"a)
= x'
     by FILTER_0:18,LATTICES:21,27;
then A26: x'"/\"a [= x'"/\"(x'`"\/"y') & x'"/\"(x'`"\/"y') = x'"/\"x'`"\/"(x'
"/\"
y') & x'"/\"x'` = Bottom B &
    Bottom B"\/"(x'"/\"y') = x'"/\"y' & x' [= (x'"/\"y')"\/"(x'"/\"a) & y'"/\"
x' [= y' &
    y'"/\"x' = x'"/\"y' by LATTICES:23,27,39,47,def 11;
    then x'"/\"a [= y' by LATTICES:25;
    then (x'"/\"y')"\/"(x'"/\"a) [= y' by A26,FILTER_0:6;
    then x' [= y' by A26,LATTICES:25;
   hence [x,y] in R by Th32;
  end;

Back to top