Article CONLAT_2, MML version 4.99.1005

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

:: CONLAT_2:def 1
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   @ b2 = b2;

:: CONLAT_2:funcreg 1
registration
  let a1 be non quasi-empty ContextStr;
  cluster ConceptLattice a1 -> non empty strict bounded;
end;

:: CONLAT_2:th 1
theorem
for b1 being non quasi-empty ContextStr holds
   Bottom ConceptLattice b1 = Concept-with-all-Attributes b1 & Top ConceptLattice b1 = Concept-with-all-Objects b1;

:: CONLAT_2:th 2
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty Element of bool bool the Objects of b1 holds
   (ObjectDerivation b1) . union b2 = meet {(ObjectDerivation b1) . b3 where b3 is Element of bool the Objects of b1: b3 in b2};

:: CONLAT_2:th 3
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty Element of bool bool the Attributes of b1 holds
   (AttributeDerivation b1) . union b2 = meet {(AttributeDerivation b1) . b3 where b3 is Element of bool the Attributes of b1: b3 in b2};

:: CONLAT_2:th 4
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the carrier of ConceptLattice b1 holds
   "/\"(b2,ConceptLattice b1) is non empty concept-like ConceptStr over b1 &
    "\/"(b2,ConceptLattice b1) is non empty concept-like ConceptStr over b1;

:: CONLAT_2:funcnot 2 => CONLAT_2:func 2
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be Element of bool the carrier of ConceptLattice a1;
  func "/\"(A2,A1) -> non empty concept-like ConceptStr over a1 equals
    "/\"(a2,ConceptLattice a1);
end;

:: CONLAT_2:def 2
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the carrier of ConceptLattice b1 holds
   "/\"(b2,b1) = "/\"(b2,ConceptLattice b1);

:: CONLAT_2:funcnot 3 => CONLAT_2:func 3
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be Element of bool the carrier of ConceptLattice a1;
  func "\/"(A2,A1) -> non empty concept-like ConceptStr over a1 equals
    "\/"(a2,ConceptLattice a1);
end;

:: CONLAT_2:def 3
theorem
for b1 being non quasi-empty ContextStr
for b2 being Element of bool the carrier of ConceptLattice b1 holds
   "\/"(b2,b1) = "\/"(b2,ConceptLattice b1);

:: CONLAT_2:th 5
theorem
for b1 being non quasi-empty ContextStr holds
   "\/"({} ConceptLattice b1,b1) = Concept-with-all-Attributes b1 &
    "/\"({} ConceptLattice b1,b1) = Concept-with-all-Objects b1;

:: CONLAT_2:th 6
theorem
for b1 being non quasi-empty ContextStr holds
   "\/"([#] the carrier of ConceptLattice b1,b1) = Concept-with-all-Objects b1 &
    "/\"([#] the carrier of ConceptLattice b1,b1) = Concept-with-all-Attributes b1;

:: CONLAT_2:th 7
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty Element of bool the carrier of ConceptLattice b1 holds
   the Extent of "\/"(b2,b1) = (AttributeDerivation b1) . ((ObjectDerivation b1) . union {the Extent of ConceptStr(#b3,b4#) where b3 is Element of bool the Objects of b1, b4 is Element of bool the Attributes of b1: ConceptStr(#b3,b4#) in b2}) &
    the Intent of "\/"(b2,b1) = meet {the Intent of ConceptStr(#b3,b4#) where b3 is Element of bool the Objects of b1, b4 is Element of bool the Attributes of b1: ConceptStr(#b3,b4#) in b2};

:: CONLAT_2:th 8
theorem
for b1 being non quasi-empty ContextStr
for b2 being non empty Element of bool the carrier of ConceptLattice b1 holds
   the Extent of "/\"(b2,b1) = meet {the Extent of ConceptStr(#b3,b4#) where b3 is Element of bool the Objects of b1, b4 is Element of bool the Attributes of b1: ConceptStr(#b3,b4#) in b2} &
    the Intent of "/\"(b2,b1) = (ObjectDerivation b1) . ((AttributeDerivation b1) . union {the Intent of ConceptStr(#b3,b4#) where b3 is Element of bool the Objects of b1, b4 is Element of bool the Attributes of b1: ConceptStr(#b3,b4#) in b2});

:: CONLAT_2:th 9
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   "\/"({ConceptStr(#b3,b4#) where b3 is Element of bool the Objects of b1, b4 is Element of bool the Attributes of b1: ex b5 being Element of the Objects of b1 st
      b5 in the Extent of b2 &
       b3 = (AttributeDerivation b1) . ((ObjectDerivation b1) . {b5}) &
       b4 = (ObjectDerivation b1) . {b5}},ConceptLattice b1) = b2;

:: CONLAT_2:th 10
theorem
for b1 being non quasi-empty ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   "/\"({ConceptStr(#b3,b4#) where b3 is Element of bool the Objects of b1, b4 is Element of bool the Attributes of b1: ex b5 being Element of the Attributes of b1 st
      b5 in the Intent of b2 &
       b3 = (AttributeDerivation b1) . {b5} &
       b4 = (ObjectDerivation b1) . ((AttributeDerivation b1) . {b5})},ConceptLattice b1) = b2;

:: CONLAT_2:funcnot 4 => CONLAT_2:func 4
definition
  let a1 be non quasi-empty ContextStr;
  func gamma A1 -> Function-like quasi_total Relation of the Objects of a1,the carrier of ConceptLattice a1 means
    for b1 being Element of the Objects of a1 holds
       ex b2 being Element of bool the Objects of a1 st
          ex b3 being Element of bool the Attributes of a1 st
             it . b1 = ConceptStr(#b2,b3#) &
              b2 = (AttributeDerivation a1) . ((ObjectDerivation a1) . {b1}) &
              b3 = (ObjectDerivation a1) . {b1};
end;

:: CONLAT_2:def 4
theorem
for b1 being non quasi-empty ContextStr
for b2 being Function-like quasi_total Relation of the Objects of b1,the carrier of ConceptLattice b1 holds
      b2 = gamma b1
   iff
      for b3 being Element of the Objects of b1 holds
         ex b4 being Element of bool the Objects of b1 st
            ex b5 being Element of bool the Attributes of b1 st
               b2 . b3 = ConceptStr(#b4,b5#) &
                b4 = (AttributeDerivation b1) . ((ObjectDerivation b1) . {b3}) &
                b5 = (ObjectDerivation b1) . {b3};

:: CONLAT_2:funcnot 5 => CONLAT_2:func 5
definition
  let a1 be non quasi-empty ContextStr;
  func delta A1 -> Function-like quasi_total Relation of the Attributes of a1,the carrier of ConceptLattice a1 means
    for b1 being Element of the Attributes of a1 holds
       ex b2 being Element of bool the Objects of a1 st
          ex b3 being Element of bool the Attributes of a1 st
             it . b1 = ConceptStr(#b2,b3#) &
              b2 = (AttributeDerivation a1) . {b1} &
              b3 = (ObjectDerivation a1) . ((AttributeDerivation a1) . {b1});
end;

:: CONLAT_2:def 5
theorem
for b1 being non quasi-empty ContextStr
for b2 being Function-like quasi_total Relation of the Attributes of b1,the carrier of ConceptLattice b1 holds
      b2 = delta b1
   iff
      for b3 being Element of the Attributes of b1 holds
         ex b4 being Element of bool the Objects of b1 st
            ex b5 being Element of bool the Attributes of b1 st
               b2 . b3 = ConceptStr(#b4,b5#) &
                b4 = (AttributeDerivation b1) . {b3} &
                b5 = (ObjectDerivation b1) . ((AttributeDerivation b1) . {b3});

:: CONLAT_2:th 11
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
   (gamma b1) . b2 is non empty concept-like ConceptStr over b1 &
    (delta b1) . b3 is non empty concept-like ConceptStr over b1;

:: CONLAT_2:th 12
theorem
for b1 being non quasi-empty ContextStr holds
   rng gamma b1 is supremum-dense(ConceptLattice b1) & rng delta b1 is infimum-dense(ConceptLattice b1);

:: CONLAT_2:th 13
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
      (gamma b1) . b2 [= (delta b1) . b3;

:: CONLAT_2:th 14
theorem
for b1 being non empty Lattice-like complete LattStr
for b2 being non quasi-empty ContextStr holds
      ConceptLattice b2,b1 are_isomorphic
   iff
      ex b3 being Function-like quasi_total Relation of the Objects of b2,the carrier of b1 st
         ex b4 being Function-like quasi_total Relation of the Attributes of b2,the carrier of b1 st
            rng b3 is supremum-dense(b1) &
             rng b4 is infimum-dense(b1) &
             (for b5 being Element of the Objects of b2
             for b6 being Element of the Attributes of b2 holds
                   b5 is-connected-with b6
                iff
                   b3 . b5 [= b4 . b6);

:: CONLAT_2:funcnot 6 => CONLAT_2:func 6
definition
  let a1 be non empty Lattice-like LattStr;
  func Context A1 -> non quasi-empty strict ContextStr equals
    ContextStr(#the carrier of a1,the carrier of a1,LattRel a1#);
end;

:: CONLAT_2:def 6
theorem
for b1 being non empty Lattice-like LattStr holds
   Context b1 = ContextStr(#the carrier of b1,the carrier of b1,LattRel b1#);

:: CONLAT_2:th 15
theorem
for b1 being non empty Lattice-like complete LattStr holds
   ConceptLattice Context b1,b1 are_isomorphic;

:: CONLAT_2:th 16
theorem
for b1 being non empty Lattice-like LattStr holds
      b1 is complete
   iff
      ex b2 being non quasi-empty ContextStr st
         ConceptLattice b2,b1 are_isomorphic;

:: CONLAT_2:funcreg 2
registration
  let a1 be non empty Lattice-like complete LattStr;
  cluster a1 .: -> strict complete;
end;

:: CONLAT_2:funcnot 7 => CONLAT_2:func 7
definition
  let a1 be non quasi-empty ContextStr;
  func A1 .: -> non quasi-empty strict ContextStr equals
    ContextStr(#the Attributes of a1,the Objects of a1,(the Information of a1) ~#);
end;

:: CONLAT_2:def 7
theorem
for b1 being non quasi-empty ContextStr holds
   b1 .: = ContextStr(#the Attributes of b1,the Objects of b1,(the Information of b1) ~#);

:: CONLAT_2:th 17
theorem
for b1 being non quasi-empty strict ContextStr holds
   b1 .: .: = b1;

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

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

:: CONLAT_2:funcnot 8 => CONLAT_2:func 8
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be ConceptStr over a1;
  func A2 .: -> strict ConceptStr over a1 .: means
    the Extent of it = the Intent of a2 & the Intent of it = the Extent of a2;
end;

:: CONLAT_2:def 8
theorem
for b1 being non quasi-empty ContextStr
for b2 being ConceptStr over b1
for b3 being strict ConceptStr over b1 .: holds
      b3 = b2 .:
   iff
      the Extent of b3 = the Intent of b2 & the Intent of b3 = the Extent of b2;

:: CONLAT_2:funcnot 9 => CONLAT_2:func 9
definition
  let a1 be non quasi-empty ContextStr;
  let a2 be non empty concept-like ConceptStr over a1;
  redefine func a2 .: -> strict non empty concept-like ConceptStr over a1 .:;
end;

:: CONLAT_2:th 20
theorem
for b1 being non quasi-empty strict ContextStr
for b2 being strict non empty concept-like ConceptStr over b1 holds
   b2 .: .: = b2;

:: CONLAT_2:funcnot 10 => CONLAT_2:func 10
definition
  let a1 be non quasi-empty ContextStr;
  func DualHomomorphism A1 -> Homomorphism of (ConceptLattice a1) .:,ConceptLattice (a1 .:) means
    for b1 being strict non empty concept-like ConceptStr over a1 holds
       it . b1 = b1 .:;
end;

:: CONLAT_2:def 9
theorem
for b1 being non quasi-empty ContextStr
for b2 being Homomorphism of (ConceptLattice b1) .:,ConceptLattice (b1 .:) holds
      b2 = DualHomomorphism b1
   iff
      for b3 being strict non empty concept-like ConceptStr over b1 holds
         b2 . b3 = b3 .:;

:: CONLAT_2:th 21
theorem
for b1 being non quasi-empty ContextStr holds
   DualHomomorphism b1 is isomorphism((ConceptLattice b1) .:, ConceptLattice (b1 .:));

:: CONLAT_2:th 22
theorem
for b1 being non quasi-empty ContextStr holds
   ConceptLattice (b1 .:),(ConceptLattice b1) .: are_isomorphic;