Article CONLAT_1, MML version 4.99.1005

:: CONLAT_1:structnot 1 => CONLAT_1:struct 1
definition
  struct() 2-sorted(#
    Objects -> set,
    Attributes -> set
  #);
end;

:: CONLAT_1:attrnot 1 => CONLAT_1:attr 1
definition
  let a1 be 2-sorted;
  attr a1 is strict;
end;

:: CONLAT_1:exreg 1
registration
  cluster strict 2-sorted;
end;

:: CONLAT_1:aggrnot 1 => CONLAT_1:aggr 1
definition
  let a1, a2 be set;
  aggr 2-sorted(#a1,a2#) -> strict 2-sorted;
end;

:: CONLAT_1:selnot 1 => CONLAT_1:sel 1
definition
  let a1 be 2-sorted;
  sel the Objects of a1 -> set;
end;

:: CONLAT_1:selnot 2 => CONLAT_1:sel 2
definition
  let a1 be 2-sorted;
  sel the Attributes of a1 -> set;
end;

:: CONLAT_1:attrnot 2 => CONLAT_1:attr 2
definition
  let a1 be 2-sorted;
  attr a1 is empty means
    the Objects of a1 is empty & the Attributes of a1 is empty;
end;

:: CONLAT_1:dfs 1
definiens
  let a1 be 2-sorted;
To prove
     a1 is empty
it is sufficient to prove
  thus the Objects of a1 is empty & the Attributes of a1 is empty;

:: CONLAT_1:def 1
theorem
for b1 being 2-sorted holds
      b1 is empty
   iff
      the Objects of b1 is empty & the Attributes of b1 is empty;

:: CONLAT_1:attrnot 3 => CONLAT_1:attr 3
definition
  let a1 be 2-sorted;
  attr a1 is quasi-empty means
    (the Objects of a1 is not empty) implies the Attributes of a1 is empty;
end;

:: CONLAT_1:dfs 2
definiens
  let a1 be 2-sorted;
To prove
     a1 is quasi-empty
it is sufficient to prove
  thus (the Objects of a1 is not empty) implies the Attributes of a1 is empty;

:: CONLAT_1:def 2
theorem
for b1 being 2-sorted holds
      b1 is quasi-empty
   iff
      (the Objects of b1 is empty or the Attributes of b1 is empty);

:: CONLAT_1:exreg 2
registration
  cluster strict non empty 2-sorted;
end;

:: CONLAT_1:exreg 3
registration
  cluster strict non quasi-empty 2-sorted;
end;

:: CONLAT_1:exreg 4
registration
  cluster strict empty quasi-empty 2-sorted;
end;

:: CONLAT_1:structnot 2 => CONLAT_1:struct 2
definition
  struct(2-sorted) ContextStr(#
    Objects -> set,
    Attributes -> set,
    Information -> Relation of the Objects of it,the Attributes of it
  #);
end;

:: CONLAT_1:attrnot 4 => CONLAT_1:attr 4
definition
  let a1 be ContextStr;
  attr a1 is strict;
end;

:: CONLAT_1:exreg 5
registration
  cluster strict ContextStr;
end;

:: CONLAT_1:aggrnot 2 => CONLAT_1:aggr 2
definition
  let a1, a2 be set;
  let a3 be Relation of a1,a2;
  aggr ContextStr(#a1,a2,a3#) -> strict ContextStr;
end;

:: CONLAT_1:selnot 3 => CONLAT_1:sel 3
definition
  let a1 be ContextStr;
  sel the Information of a1 -> Relation of the Objects of a1,the Attributes of a1;
end;

:: CONLAT_1:exreg 6
registration
  cluster non empty strict ContextStr;
end;

:: CONLAT_1:exreg 7
registration
  cluster non quasi-empty strict ContextStr;
end;

:: CONLAT_1:modenot 1
definition
  mode FormalContext is non quasi-empty ContextStr;
end;

:: CONLAT_1:modenot 2
definition
  let a1 be 2-sorted;
  mode Object of a1 is Element of the Objects of a1;
end;

:: CONLAT_1:modenot 3
definition
  let a1 be 2-sorted;
  mode Attribute of a1 is Element of the Attributes of a1;
end;

:: CONLAT_1:funcreg 1
registration
  let a1 be non quasi-empty 2-sorted;
  cluster the Attributes of a1 -> non empty;
end;

:: CONLAT_1:funcreg 2
registration
  let a1 be non quasi-empty 2-sorted;
  cluster the Objects of a1 -> non empty;
end;

:: CONLAT_1:exreg 8
registration
  let a1 be non quasi-empty 2-sorted;
  cluster non empty Element of bool the Objects of a1;
end;

:: CONLAT_1:exreg 9
registration
  let a1 be non quasi-empty 2-sorted;
  cluster non empty Element of bool the Attributes of a1;
end;

:: CONLAT_1:prednot 1 => CONLAT_1:pred 1
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be Element of the Objects of a1;
  let a3 be Element of the Attributes of a1;
  pred A2 is-connected-with A3 means
    [a2,a3] in the Information of a1;
end;

:: CONLAT_1:dfs 3
definiens
  let a1 be non quasi-empty ContextStr;
  let a2 be Element of the Objects of a1;
  let a3 be Element of the Attributes of a1;
To prove
     a2 is-connected-with a3
it is sufficient to prove
  thus [a2,a3] in the Information of a1;

:: CONLAT_1:def 5
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of the Objects of b1
for b3 being Element of the Attributes of b1 holds
      b2 is-connected-with b3
   iff
      [b2,b3] in the Information of b1;

:: CONLAT_1:prednot 2 => not CONLAT_1:pred 1
notation
  let a1 be non quasi-empty ContextStr;
  let a2 be Element of the Objects of a1;
  let a3 be Element of the Attributes of a1;
  antonym a2 is-not-connected-with a3 for a2 is-connected-with a3;
end;

:: CONLAT_1:funcnot 1 => CONLAT_1:func 1
definition
  let a1 be non quasi-empty ContextStr;
  func ObjectDerivation A1 -> Function-like quasi_total Relation of bool the Objects of a1,bool the Attributes of a1 means
    for b1 being Element of bool the Objects of a1 holds
       it . b1 = {b2 where b2 is Element of the Attributes of a1: for b3 being Element of the Objects of a1
             st b3 in b1
          holds b3 is-connected-with b2};
end;

:: CONLAT_1:def 6
theorem
for b1 being non quasi-empty ContextStr
for b2 being Function-like quasi_total Relation of bool the Objects of b1,bool the Attributes of b1 holds
      b2 = ObjectDerivation b1
   iff
      for b3 being Element of bool the Objects of b1 holds
         b2 . b3 = {b4 where b4 is Element of the Attributes of b1: for b5 being Element of the Objects of b1
               st b5 in b3
            holds b5 is-connected-with b4};

:: CONLAT_1:funcnot 2 => CONLAT_1:func 2
definition
  let a1 be non quasi-empty ContextStr;
  func AttributeDerivation A1 -> Function-like quasi_total Relation of bool the Attributes of a1,bool the Objects of a1 means
    for b1 being Element of bool the Attributes of a1 holds
       it . b1 = {b2 where b2 is Element of the Objects of a1: for b3 being Element of the Attributes of a1
             st b3 in b1
          holds b2 is-connected-with b3};
end;

:: CONLAT_1:def 7
theorem
for b1 being non quasi-empty ContextStr
for b2 being Function-like quasi_total Relation of bool the Attributes of b1,bool the Objects of b1 holds
      b2 = AttributeDerivation b1
   iff
      for b3 being Element of bool the Attributes of b1 holds
         b2 . b3 = {b4 where b4 is Element of the Objects of b1: for b5 being Element of the Attributes of b1
               st b5 in b3
            holds b4 is-connected-with b5};

:: CONLAT_1:th 1
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of the Objects of b1 holds
   (ObjectDerivation b1) . {b2} = {b3 where b3 is Element of the Attributes of b1: b2 is-connected-with b3};

:: CONLAT_1:th 2
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of the Attributes of b1 holds
   (AttributeDerivation b1) . {b2} = {b3 where b3 is Element of the Objects of b1: b3 is-connected-with b2};

:: CONLAT_1:th 3
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being Element of bool the Objects of b1
      st b2 c= b3
   holds (ObjectDerivation b1) . b3 c= (ObjectDerivation b1) . b2;

:: CONLAT_1:th 4
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being Element of bool the Attributes of b1
      st b2 c= b3
   holds (AttributeDerivation b1) . b3 c= (AttributeDerivation b1) . b2;

:: CONLAT_1:th 5
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1 holds
   b2 c= (AttributeDerivation b1) . ((ObjectDerivation b1) . b2);

:: CONLAT_1:th 6
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Attributes of b1 holds
   b2 c= (ObjectDerivation b1) . ((AttributeDerivation b1) . b2);

:: CONLAT_1:th 7
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1 holds
   (ObjectDerivation b1) . b2 = (ObjectDerivation b1) . ((AttributeDerivation b1) . ((ObjectDerivation b1) . b2));

:: CONLAT_1:th 8
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Attributes of b1 holds
   (AttributeDerivation b1) . b2 = (AttributeDerivation b1) . ((ObjectDerivation b1) . ((AttributeDerivation b1) . b2));

:: CONLAT_1:th 9
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1
for b3 being Element of bool the Attributes of b1 holds
      b2 c= (AttributeDerivation b1) . b3
   iff
      [:b2,b3:] c= the Information of b1;

:: CONLAT_1:th 10
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1
for b3 being Element of bool the Attributes of b1 holds
      b3 c= (ObjectDerivation b1) . b2
   iff
      [:b2,b3:] c= the Information of b1;

:: CONLAT_1:th 11
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1
for b3 being Element of bool the Attributes of b1 holds
      b2 c= (AttributeDerivation b1) . b3
   iff
      b3 c= (ObjectDerivation b1) . b2;

:: CONLAT_1:funcnot 3 => CONLAT_1:func 3
definition
  let a1 be non quasi-empty ContextStr;
  func phi A1 -> Function-like quasi_total Relation of the carrier of BoolePoset the Objects of a1,the carrier of BoolePoset the Attributes of a1 equals
    ObjectDerivation a1;
end;

:: CONLAT_1:def 8
theorem
for b1 being non quasi-empty ContextStr holds
   phi b1 = ObjectDerivation b1;

:: CONLAT_1:funcnot 4 => CONLAT_1:func 4
definition
  let a1 be non quasi-empty ContextStr;
  func psi A1 -> Function-like quasi_total Relation of the carrier of BoolePoset the Attributes of a1,the carrier of BoolePoset the Objects of a1 equals
    AttributeDerivation a1;
end;

:: CONLAT_1:def 9
theorem
for b1 being non quasi-empty ContextStr holds
   psi b1 = AttributeDerivation b1;

:: CONLAT_1:attrnot 5 => CONLAT_1:attr 5
definition
  let a1, a2 be non empty RelStr;
  let a3 be Connection of a1,a2;
  attr a3 is co-Galois means
    ex b1 being Function-like quasi_total Relation of the carrier of a1,the carrier of a2 st
       ex b2 being Function-like quasi_total Relation of the carrier of a2,the carrier of a1 st
          a3 = [b1,b2] &
           b1 is antitone(a1, a2) &
           b2 is antitone(a2, a1) &
           (for b3, b4 being Element of the carrier of a1
           for b5, b6 being Element of the carrier of a2 holds
           b3 <= b2 . (b1 . b3) & b5 <= b1 . (b2 . b5));
end;

:: CONLAT_1:dfs 8
definiens
  let a1, a2 be non empty RelStr;
  let a3 be Connection of a1,a2;
To prove
     a3 is co-Galois
it is sufficient to prove
  thus ex b1 being Function-like quasi_total Relation of the carrier of a1,the carrier of a2 st
       ex b2 being Function-like quasi_total Relation of the carrier of a2,the carrier of a1 st
          a3 = [b1,b2] &
           b1 is antitone(a1, a2) &
           b2 is antitone(a2, a1) &
           (for b3, b4 being Element of the carrier of a1
           for b5, b6 being Element of the carrier of a2 holds
           b3 <= b2 . (b1 . b3) & b5 <= b1 . (b2 . b5));

:: CONLAT_1:def 10
theorem
for b1, b2 being non empty RelStr
for b3 being Connection of b1,b2 holds
      b3 is co-Galois(b1, b2)
   iff
      ex b4 being Function-like quasi_total Relation of the carrier of b1,the carrier of b2 st
         ex b5 being Function-like quasi_total Relation of the carrier of b2,the carrier of b1 st
            b3 = [b4,b5] &
             b4 is antitone(b1, b2) &
             b5 is antitone(b2, b1) &
             (for b6, b7 being Element of the carrier of b1
             for b8, b9 being Element of the carrier of b2 holds
             b6 <= b5 . (b4 . b6) & b8 <= b4 . (b5 . b8));

:: CONLAT_1:th 13
theorem
for b1, b2 being non empty reflexive transitive antisymmetric RelStr
for b3 being Connection of b1,b2
for b4 being Function-like quasi_total Relation of the carrier of b1,the carrier of b2
for b5 being Function-like quasi_total Relation of the carrier of b2,the carrier of b1
      st b3 = [b4,b5]
   holds    b3 is co-Galois(b1, b2)
   iff
      for b6 being Element of the carrier of b1
      for b7 being Element of the carrier of b2 holds
            b6 <= b5 . b7
         iff
            b7 <= b4 . b6;

:: CONLAT_1:th 14
theorem
for b1, b2 being non empty reflexive transitive antisymmetric RelStr
for b3 being Connection of b1,b2
   st b3 is co-Galois(b1, b2)
for b4 being Function-like quasi_total Relation of the carrier of b1,the carrier of b2
for b5 being Function-like quasi_total Relation of the carrier of b2,the carrier of b1
      st b3 = [b4,b5]
   holds b4 = b4 * (b5 * b4) & b5 = b5 * (b4 * b5);

:: CONLAT_1:th 15
theorem
for b1 being non quasi-empty ContextStr holds
   [phi b1,psi b1] is co-Galois(BoolePoset the Objects of b1, BoolePoset the Attributes of b1);

:: CONLAT_1:th 16
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being Element of bool the Objects of b1 holds
(ObjectDerivation b1) . (b2 \/ b3) = ((ObjectDerivation b1) . b2) /\ ((ObjectDerivation b1) . b3);

:: CONLAT_1:th 17
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being Element of bool the Attributes of b1 holds
(AttributeDerivation b1) . (b2 \/ b3) = ((AttributeDerivation b1) . b2) /\ ((AttributeDerivation b1) . b3);

:: CONLAT_1:th 18
theorem
for b1 being non quasi-empty ContextStr holds
   (ObjectDerivation b1) . {} = the Attributes of b1;

:: CONLAT_1:th 19
theorem
for b1 being non quasi-empty ContextStr holds
   (AttributeDerivation b1) . {} = the Objects of b1;

:: CONLAT_1:structnot 3 => CONLAT_1:struct 3
definition
  let a1 be 2-sorted;
  struct() ConceptStr(#
    Extent -> Element of bool the Objects of A1,
    Intent -> Element of bool the Attributes of A1
  #);
end;

:: CONLAT_1:attrnot 6 => CONLAT_1:attr 6
definition
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
  attr a2 is strict;
end;

:: CONLAT_1:exreg 10
registration
  let a1 be 2-sorted;
  cluster strict ConceptStr over a1;
end;

:: CONLAT_1:aggrnot 3 => CONLAT_1:aggr 3
definition
  let a1 be 2-sorted;
  let a2 be Element of bool the Objects of a1;
  let a3 be Element of bool the Attributes of a1;
  aggr ConceptStr(#a2,a3#) -> strict ConceptStr over a1;
end;

:: CONLAT_1:selnot 4 => CONLAT_1:sel 4
definition
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
  sel the Extent of a2 -> Element of bool the Objects of a1;
end;

:: CONLAT_1:selnot 5 => CONLAT_1:sel 5
definition
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
  sel the Intent of a2 -> Element of bool the Attributes of a1;
end;

:: CONLAT_1:attrnot 7 => CONLAT_1:attr 7
definition
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
  attr a2 is empty means
    the Extent of a2 is empty & the Intent of a2 is empty;
end;

:: CONLAT_1:dfs 9
definiens
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
To prove
     a2 is empty
it is sufficient to prove
  thus the Extent of a2 is empty & the Intent of a2 is empty;

:: CONLAT_1:def 11
theorem
for b1 being 2-sorted
for b2 being ConceptStr over b1 holds
      b2 is empty(b1)
   iff
      the Extent of b2 is empty & the Intent of b2 is empty;

:: CONLAT_1:attrnot 8 => CONLAT_1:attr 8
definition
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
  attr a2 is quasi-empty means
    (the Extent of a2 is not empty) implies the Intent of a2 is empty;
end;

:: CONLAT_1:dfs 10
definiens
  let a1 be 2-sorted;
  let a2 be ConceptStr over a1;
To prove
     a2 is quasi-empty
it is sufficient to prove
  thus (the Extent of a2 is not empty) implies the Intent of a2 is empty;

:: CONLAT_1:def 12
theorem
for b1 being 2-sorted
for b2 being ConceptStr over b1 holds
      b2 is quasi-empty(b1)
   iff
      (the Extent of b2 is empty or the Intent of b2 is empty);

:: CONLAT_1:exreg 11
registration
  let a1 be non quasi-empty 2-sorted;
  cluster strict non empty ConceptStr over a1;
end;

:: CONLAT_1:exreg 12
registration
  let a1 be non quasi-empty 2-sorted;
  cluster strict quasi-empty ConceptStr over a1;
end;

:: CONLAT_1:condreg 1
registration
  let a1 be empty 2-sorted;
  cluster -> empty (ConceptStr over a1);
end;

:: CONLAT_1:condreg 2
registration
  let a1 be quasi-empty 2-sorted;
  cluster -> quasi-empty (ConceptStr over a1);
end;

:: CONLAT_1:attrnot 9 => CONLAT_1:attr 9
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
  attr a2 is concept-like means
    (ObjectDerivation a1) . the Extent of a2 = the Intent of a2 &
     (AttributeDerivation a1) . the Intent of a2 = the Extent of a2;
end;

:: CONLAT_1:dfs 11
definiens
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
To prove
     a2 is concept-like
it is sufficient to prove
  thus (ObjectDerivation a1) . the Extent of a2 = the Intent of a2 &
     (AttributeDerivation a1) . the Intent of a2 = the Extent of a2;

:: CONLAT_1:def 13
theorem
for b1 being non quasi-empty ContextStr
for b2 being ConceptStr over b1 holds
      b2 is concept-like(b1)
   iff
      (ObjectDerivation b1) . the Extent of b2 = the Intent of b2 &
       (AttributeDerivation b1) . the Intent of b2 = the Extent of b2;

:: CONLAT_1:exreg 13
registration
  let a1 be non quasi-empty ContextStr;
  cluster non empty concept-like ConceptStr over a1;
end;

:: CONLAT_1:modenot 4
definition
  let a1 be non quasi-empty ContextStr;
  mode FormalConcept of a1 is non empty concept-like ConceptStr over a1;
end;

:: CONLAT_1:exreg 14
registration
  let a1 be non quasi-empty ContextStr;
  cluster strict non empty concept-like ConceptStr over a1;
end;

:: CONLAT_1:th 20
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1 holds
   ConceptStr(#(AttributeDerivation b1) . ((ObjectDerivation b1) . b2),(ObjectDerivation b1) . b2#) is non empty concept-like ConceptStr over b1 &
    (for b3 being Element of bool the Objects of b1
    for b4 being Element of bool the Attributes of b1
          st ConceptStr(#b3,b4#) is non empty concept-like ConceptStr over b1 & b2 c= b3
       holds (AttributeDerivation b1) . ((ObjectDerivation b1) . b2) c= b3);

:: CONLAT_1:th 21
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Objects of b1 holds
      ex b3 being Element of bool the Attributes of b1 st
         ConceptStr(#b2,b3#) is non empty concept-like ConceptStr over b1
   iff
      (AttributeDerivation b1) . ((ObjectDerivation b1) . b2) = b2;

:: CONLAT_1:th 22
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Attributes of b1 holds
   ConceptStr(#(AttributeDerivation b1) . b2,(ObjectDerivation b1) . ((AttributeDerivation b1) . b2)#) is non empty concept-like ConceptStr over b1 &
    (for b3 being Element of bool the Objects of b1
    for b4 being Element of bool the Attributes of b1
          st ConceptStr(#b3,b4#) is non empty concept-like ConceptStr over b1 & b2 c= b4
       holds (ObjectDerivation b1) . ((AttributeDerivation b1) . b2) c= b4);

:: CONLAT_1:th 23
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the Attributes of b1 holds
      ex b3 being Element of bool the Objects of b1 st
         ConceptStr(#b3,b2#) is non empty concept-like ConceptStr over b1
   iff
      (ObjectDerivation b1) . ((AttributeDerivation b1) . b2) = b2;

:: CONLAT_1:attrnot 10 => CONLAT_1:attr 10
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
  attr a2 is universal means
    the Extent of a2 = the Objects of a1;
end;

:: CONLAT_1:dfs 12
definiens
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
To prove
     a2 is universal
it is sufficient to prove
  thus the Extent of a2 = the Objects of a1;

:: CONLAT_1:def 14
theorem
for b1 being non quasi-empty ContextStr
for b2 being ConceptStr over b1 holds
      b2 is universal(b1)
   iff
      the Extent of b2 = the Objects of b1;

:: CONLAT_1:attrnot 11 => CONLAT_1:attr 11
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
  attr a2 is co-universal means
    the Intent of a2 = the Attributes of a1;
end;

:: CONLAT_1:dfs 13
definiens
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
To prove
     a2 is co-universal
it is sufficient to prove
  thus the Intent of a2 = the Attributes of a1;

:: CONLAT_1:def 15
theorem
for b1 being non quasi-empty ContextStr
for b2 being ConceptStr over b1 holds
      b2 is co-universal(b1)
   iff
      the Intent of b2 = the Attributes of b1;

:: CONLAT_1:exreg 15
registration
  let a1 be non quasi-empty ContextStr;
  cluster strict non empty concept-like universal ConceptStr over a1;
end;

:: CONLAT_1:exreg 16
registration
  let a1 be non quasi-empty ContextStr;
  cluster strict non empty concept-like co-universal ConceptStr over a1;
end;

:: CONLAT_1:funcnot 5 => CONLAT_1:func 5
definition
  let a1 be non quasi-empty ContextStr;
  func Concept-with-all-Objects A1 -> strict non empty concept-like universal ConceptStr over a1 means
    ex b1 being Element of bool the Objects of a1 st
       ex b2 being Element of bool the Attributes of a1 st
          it = ConceptStr(#b1,b2#) &
           b1 = (AttributeDerivation a1) . {} &
           b2 = (ObjectDerivation a1) . ((AttributeDerivation a1) . {});
end;

:: CONLAT_1:def 16
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like universal ConceptStr over b1 holds
      b2 = Concept-with-all-Objects b1
   iff
      ex b3 being Element of bool the Objects of b1 st
         ex b4 being Element of bool the Attributes of b1 st
            b2 = ConceptStr(#b3,b4#) &
             b3 = (AttributeDerivation b1) . {} &
             b4 = (ObjectDerivation b1) . ((AttributeDerivation b1) . {});

:: CONLAT_1:funcnot 6 => CONLAT_1:func 6
definition
  let a1 be non quasi-empty ContextStr;
  func Concept-with-all-Attributes A1 -> strict non empty concept-like co-universal ConceptStr over a1 means
    ex b1 being Element of bool the Objects of a1 st
       ex b2 being Element of bool the Attributes of a1 st
          it = ConceptStr(#b1,b2#) &
           b1 = (AttributeDerivation a1) . ((ObjectDerivation a1) . {}) &
           b2 = (ObjectDerivation a1) . {};
end;

:: CONLAT_1:def 17
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like co-universal ConceptStr over b1 holds
      b2 = Concept-with-all-Attributes b1
   iff
      ex b3 being Element of bool the Objects of b1 st
         ex b4 being Element of bool the Attributes of b1 st
            b2 = ConceptStr(#b3,b4#) &
             b3 = (AttributeDerivation b1) . ((ObjectDerivation b1) . {}) &
             b4 = (ObjectDerivation b1) . {};

:: CONLAT_1:th 24
theorem
for b1 being non quasi-empty ContextStr holds
   the Extent of Concept-with-all-Objects b1 = the Objects of b1 & the Intent of Concept-with-all-Attributes b1 = the Attributes of b1;

:: CONLAT_1:th 25
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty concept-like ConceptStr over b1 holds
   (the Extent of b2 = {} implies b2 is co-universal(b1)) & (the Intent of b2 = {} implies b2 is universal(b1));

:: CONLAT_1:th 26
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   (the Extent of b2 = {} implies b2 = Concept-with-all-Attributes b1) &
    (the Intent of b2 = {} implies b2 = Concept-with-all-Objects b1);

:: CONLAT_1:th 27
theorem
for b1 being non quasi-empty ContextStr
for b2 being quasi-empty ConceptStr over b1
      st b2 is non empty concept-like ConceptStr over b1 & b2 is not universal(b1)
   holds b2 is co-universal(b1);

:: CONLAT_1:th 28
theorem
for b1 being non quasi-empty ContextStr
for b2 being quasi-empty ConceptStr over b1
      st b2 is strict non empty concept-like ConceptStr over b1 & b2 <> Concept-with-all-Objects b1
   holds b2 = Concept-with-all-Attributes b1;

:: CONLAT_1:modenot 5 => CONLAT_1:mode 1
definition
  let a1 be non quasi-empty ContextStr;
  mode Set-of-FormalConcepts of A1 -> non empty set means
    for b1 being set
          st b1 in it
       holds b1 is non empty concept-like ConceptStr over a1;
end;

:: CONLAT_1:dfs 16
definiens
  let a1 be non quasi-empty ContextStr;
  let a2 be non empty set;
To prove
     a2 is Set-of-FormalConcepts of a1
it is sufficient to prove
  thus for b1 being set
          st b1 in a2
       holds b1 is non empty concept-like ConceptStr over a1;

:: CONLAT_1:def 18
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty set holds
      b2 is Set-of-FormalConcepts of b1
   iff
      for b3 being set
            st b3 in b2
         holds b3 is non empty concept-like ConceptStr over b1;

:: CONLAT_1:modenot 6 => CONLAT_1:mode 2
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be Set-of-FormalConcepts of a1;
  redefine mode Element of a2 -> non empty concept-like ConceptStr over a1;
end;

:: CONLAT_1:prednot 3 => CONLAT_1:pred 2
definition
  let a1 be non quasi-empty ContextStr;
  let a2, a3 be non empty concept-like ConceptStr over a1;
  pred A2 is-SubConcept-of A3 means
    the Extent of a2 c= the Extent of a3;
end;

:: CONLAT_1:dfs 17
definiens
  let a1 be non quasi-empty ContextStr;
  let a2, a3 be non empty concept-like ConceptStr over a1;
To prove
     a2 is-SubConcept-of a3
it is sufficient to prove
  thus the Extent of a2 c= the Extent of a3;

:: CONLAT_1:def 19
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being non empty concept-like ConceptStr over b1 holds
   b2 is-SubConcept-of b3
iff
   the Extent of b2 c= the Extent of b3;

:: CONLAT_1:prednot 4 => CONLAT_1:pred 2
notation
  let a1 be non quasi-empty ContextStr;
  let a2, a3 be non empty concept-like ConceptStr over a1;
  synonym a3 is-SuperConcept-of a2 for a2 is-SubConcept-of a3;
end;

:: CONLAT_1:th 31
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being non empty concept-like ConceptStr over b1 holds
   b2 is-SubConcept-of b3
iff
   the Intent of b3 c= the Intent of b2;

:: CONLAT_1:th 33
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being non empty concept-like ConceptStr over b1 holds
   b3 is-SubConcept-of b2
iff
   the Intent of b2 c= the Intent of b3;

:: CONLAT_1:th 34
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty concept-like ConceptStr over b1 holds
   b2 is-SubConcept-of Concept-with-all-Objects b1 & Concept-with-all-Attributes b1 is-SubConcept-of b2;

:: CONLAT_1:funcnot 7 => CONLAT_1:func 7
definition
  let a1 be non quasi-empty ContextStr;
  func B-carrier A1 -> non empty set equals
    {ConceptStr(#b1,b2#) where b1 is Element of bool the Objects of a1, b2 is Element of bool the Attributes of a1: ConceptStr(#b1,b2#) is not empty(a1) & (ObjectDerivation a1) . b1 = b2 & (AttributeDerivation a1) . b2 = b1};
end;

:: CONLAT_1:def 20
theorem
for b1 being non quasi-empty ContextStr holds
   B-carrier b1 = {ConceptStr(#b2,b3#) where b2 is Element of bool the Objects of b1, b3 is Element of bool the Attributes of b1: ConceptStr(#b2,b3#) is not empty(b1) & (ObjectDerivation b1) . b2 = b3 & (AttributeDerivation b1) . b3 = b2};

:: CONLAT_1:funcnot 8 => CONLAT_1:func 8
definition
  let a1 be non quasi-empty ContextStr;
  redefine func B-carrier a1 -> Set-of-FormalConcepts of a1;
end;

:: CONLAT_1:funcreg 3
registration
  let a1 be non quasi-empty ContextStr;
  cluster B-carrier a1 -> non empty;
end;

:: CONLAT_1:th 35
theorem
for b1 being non quasi-empty ContextStr
for b2 being set holds
      b2 in B-carrier b1
   iff
      b2 is strict non empty concept-like ConceptStr over b1;

:: CONLAT_1:funcnot 9 => CONLAT_1:func 9
definition
  let a1 be non quasi-empty ContextStr;
  func B-meet A1 -> Function-like quasi_total Relation of [:B-carrier a1,B-carrier a1:],B-carrier a1 means
    for b1, b2 being strict non empty concept-like ConceptStr over a1 holds
    ex b3 being Element of bool the Objects of a1 st
       ex b4 being Element of bool the Attributes of a1 st
          it .(b1,b2) = ConceptStr(#b3,b4#) &
           b3 = (the Extent of b1) /\ the Extent of b2 &
           b4 = (ObjectDerivation a1) . ((AttributeDerivation a1) . ((the Intent of b1) \/ the Intent of b2));
end;

:: CONLAT_1:def 21
theorem
for b1 being non quasi-empty ContextStr
for b2 being Function-like quasi_total Relation of [:B-carrier b1,B-carrier b1:],B-carrier b1 holds
      b2 = B-meet b1
   iff
      for b3, b4 being strict non empty concept-like ConceptStr over b1 holds
      ex b5 being Element of bool the Objects of b1 st
         ex b6 being Element of bool the Attributes of b1 st
            b2 .(b3,b4) = ConceptStr(#b5,b6#) &
             b5 = (the Extent of b3) /\ the Extent of b4 &
             b6 = (ObjectDerivation b1) . ((AttributeDerivation b1) . ((the Intent of b3) \/ the Intent of b4));

:: CONLAT_1:funcnot 10 => CONLAT_1:func 10
definition
  let a1 be non quasi-empty ContextStr;
  func B-join A1 -> Function-like quasi_total Relation of [:B-carrier a1,B-carrier a1:],B-carrier a1 means
    for b1, b2 being strict non empty concept-like ConceptStr over a1 holds
    ex b3 being Element of bool the Objects of a1 st
       ex b4 being Element of bool the Attributes of a1 st
          it .(b1,b2) = ConceptStr(#b3,b4#) &
           b3 = (AttributeDerivation a1) . ((ObjectDerivation a1) . ((the Extent of b1) \/ the Extent of b2)) &
           b4 = (the Intent of b1) /\ the Intent of b2;
end;

:: CONLAT_1:def 22
theorem
for b1 being non quasi-empty ContextStr
for b2 being Function-like quasi_total Relation of [:B-carrier b1,B-carrier b1:],B-carrier b1 holds
      b2 = B-join b1
   iff
      for b3, b4 being strict non empty concept-like ConceptStr over b1 holds
      ex b5 being Element of bool the Objects of b1 st
         ex b6 being Element of bool the Attributes of b1 st
            b2 .(b3,b4) = ConceptStr(#b5,b6#) &
             b5 = (AttributeDerivation b1) . ((ObjectDerivation b1) . ((the Extent of b3) \/ the Extent of b4)) &
             b6 = (the Intent of b3) /\ the Intent of b4;

:: CONLAT_1:th 36
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being strict non empty concept-like ConceptStr over b1 holds
(B-meet b1) .(b2,b3) = (B-meet b1) .(b3,b2);

:: CONLAT_1:th 37
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being strict non empty concept-like ConceptStr over b1 holds
(B-join b1) .(b2,b3) = (B-join b1) .(b3,b2);

:: CONLAT_1:th 38
theorem
for b1 being non quasi-empty ContextStr
for b2, b3, b4 being strict non empty concept-like ConceptStr over b1 holds
(B-meet b1) .(b2,(B-meet b1) .(b3,b4)) = (B-meet b1) .((B-meet b1) .(b2,b3),b4);

:: CONLAT_1:th 39
theorem
for b1 being non quasi-empty ContextStr
for b2, b3, b4 being strict non empty concept-like ConceptStr over b1 holds
(B-join b1) .(b2,(B-join b1) .(b3,b4)) = (B-join b1) .((B-join b1) .(b2,b3),b4);

:: CONLAT_1:th 40
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being strict non empty concept-like ConceptStr over b1 holds
(B-join b1) .((B-meet b1) .(b2,b3),b3) = b3;

:: CONLAT_1:th 41
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being strict non empty concept-like ConceptStr over b1 holds
(B-meet b1) .(b2,(B-join b1) .(b2,b3)) = b2;

:: CONLAT_1:th 42
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   (B-meet b1) .(b2,Concept-with-all-Objects b1) = b2;

:: CONLAT_1:th 43
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   (B-join b1) .(b2,Concept-with-all-Objects b1) = Concept-with-all-Objects b1;

:: CONLAT_1:th 44
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   (B-join b1) .(b2,Concept-with-all-Attributes b1) = b2;

:: CONLAT_1:th 45
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   (B-meet b1) .(b2,Concept-with-all-Attributes b1) = Concept-with-all-Attributes b1;

:: CONLAT_1:funcnot 11 => CONLAT_1:func 11
definition
  let a1 be non quasi-empty ContextStr;
  func ConceptLattice A1 -> non empty strict LattStr equals
    LattStr(#B-carrier a1,B-join a1,B-meet a1#);
end;

:: CONLAT_1:def 23
theorem
for b1 being non quasi-empty ContextStr holds
   ConceptLattice b1 = LattStr(#B-carrier b1,B-join b1,B-meet b1#);

:: CONLAT_1:th 46
theorem
for b1 being non quasi-empty ContextStr holds
   ConceptLattice b1 is non empty Lattice-like LattStr;

:: CONLAT_1:funcreg 4
registration
  let a1 be non quasi-empty ContextStr;
  cluster ConceptLattice a1 -> non empty strict Lattice-like;
end;

:: CONLAT_1:modenot 7 => CONLAT_1:mode 3
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be non empty Element of bool the carrier of ConceptLattice a1;
  redefine mode Element of a2 -> non empty concept-like ConceptStr over a1;
end;

:: CONLAT_1:funcnot 12 => CONLAT_1:func 12
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be Element of the carrier of ConceptLattice a1;
  func A2 @ -> strict non empty concept-like ConceptStr over a1 equals
    a2;
end;

:: CONLAT_1:def 24
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of the carrier of ConceptLattice b1 holds
   b2 @ = b2;

:: CONLAT_1:th 47
theorem
for b1 being non quasi-empty ContextStr
for b2, b3 being Element of the carrier of ConceptLattice b1 holds
   b2 [= b3
iff
   b2 @ is-SubConcept-of b3 @;

:: CONLAT_1:th 48
theorem
for b1 being non quasi-empty ContextStr holds
   ConceptLattice b1 is non empty Lattice-like complete LattStr;

:: CONLAT_1:funcreg 5
registration
  let a1 be non quasi-empty ContextStr;
  cluster ConceptLattice a1 -> non empty strict complete;
end;