lattice2.miz



    begin

    reserve A for set,

C for non empty set,

B for Subset of A,

x for Element of A,

f,g for Function of A, C;

    theorem :: LATTICE2:1

    

     Th1: ( dom (g | B)) = B

    proof

      

      thus ( dom (g | B)) = (( dom g) /\ B) by RELAT_1: 61

      .= (A /\ B) by FUNCT_2:def 1

      .= B by XBOOLE_1: 28;

    end;

    theorem :: LATTICE2:2

    

     Th2: (f | B) = (g | B) iff for x st x in B holds (g . x) = (f . x)

    proof

      thus (f | B) = (g | B) implies for x st x in B holds (g . x) = (f . x)

      proof

        assume

         A1: (f | B) = (g | B);

        let x;

        assume

         A2: x in B;

        

        hence (g . x) = ((g | B) . x) by FUNCT_1: 49

        .= (f . x) by A1, A2, FUNCT_1: 49;

      end;

      reconsider f9 = (f | B), g9 = (g | B) as Function of B, C by FUNCT_2: 32;

      assume

       A3: for x st x in B holds (g . x) = (f . x);

       A4:

      now

        let x be object;

        assume

         A5: x in B;

        

        hence (f9 . x) = (f . x) by FUNCT_1: 49

        .= (g . x) by A3, A5

        .= (g9 . x) by A5, FUNCT_1: 49;

      end;

      

      thus (f | B) = (f9 | B)

      .= (g9 | B) by A4, FUNCT_2: 12

      .= (g | B);

    end;

    theorem :: LATTICE2:3

    

     Th3: for B be set holds (f +* (g | B)) is Function of A, C

    proof

      let B be set;

      

       A1: ( dom f) = A & ( dom g) = A by FUNCT_2:def 1;

      ( dom (f +* (g | B))) = (( dom f) \/ ( dom (g | B))) by FUNCT_4:def 1

      .= (( dom f) \/ (( dom g) /\ B)) by RELAT_1: 61

      .= A by A1, XBOOLE_1: 22;

      hence thesis by FUNCT_2: 67;

    end;

    theorem :: LATTICE2:4

    

     Th4: ((g | B) +* f) = f

    proof

      ( dom (g | B)) = B & ( dom f) = A by Th1, FUNCT_2:def 1;

      hence thesis by FUNCT_4: 19;

    end;

    theorem :: LATTICE2:5

    

     Th5: for f,g be Function holds g c= f implies (f +* g) = f

    proof

      let f,g be Function;

      assume

       A1: g c= f;

      then ( dom g) c= ( dom f) by GRFUNC_1: 2;

      then

       A2: ( dom f) = (( dom f) \/ ( dom g)) by XBOOLE_1: 12;

      for x be object st x in ( dom f) holds (x in ( dom g) implies (f . x) = (g . x)) & ( not x in ( dom g) implies (f . x) = (f . x)) by A1, GRFUNC_1: 2;

      hence thesis by A2, FUNCT_4:def 1;

    end;

    theorem :: LATTICE2:6

    (f +* (f | B)) = f by Th5, RELAT_1: 59;

    theorem :: LATTICE2:7

    

     Th7: (for x st x in B holds (g . x) = (f . x)) implies (f +* (g | B)) = f

    proof

      assume x in B implies (g . x) = (f . x);

      then (g | B) = (f | B) by Th2;

      hence thesis by Th5, RELAT_1: 59;

    end;

    reserve B for Element of ( Fin A);

    theorem :: LATTICE2:8

    ((g | B) +* f) = f

    proof

      reconsider C = B as Subset of A by FINSUB_1: 16;

      ((g | C) +* f) = f by Th4;

      hence thesis;

    end;

    theorem :: LATTICE2:9

    

     Th9: ( dom (g | B)) = B

    proof

      reconsider C = B as Subset of A by FINSUB_1: 16;

      ( dom (g | C)) = C by Th1;

      hence thesis;

    end;

    theorem :: LATTICE2:10

    

     Th10: (for x st x in B holds (g . x) = (f . x)) implies (f +* (g | B)) = f

    proof

      reconsider C = B as Subset of A by FINSUB_1: 16;

      (for x st x in C holds (g . x) = (f . x)) implies (f +* (g | C)) = f by Th7;

      hence thesis;

    end;

    definition

      let D be non empty set;

      let o,o9 be BinOp of D;

      :: LATTICE2:def1

      pred o absorbs o9 means for x,y be Element of D holds (o . (x,(o9 . (x,y)))) = x;

    end

    notation

      let D be non empty set;

      let o,o9 be BinOp of D;

      antonym o doesn't_absorb o9 for o absorbs o9;

    end

    reserve L for non empty LattStr,

a,b,c for Element of L;

    theorem :: LATTICE2:11

    

     Th11: the L_join of L is commutative associative & the L_meet of L is commutative associative & the L_join of L absorbs the L_meet of L & the L_meet of L absorbs the L_join of L implies L is Lattice-like

    proof

      assume that

       A1: the L_join of L is commutative and

       A2: the L_join of L is associative and

       A3: the L_meet of L is commutative and

       A4: the L_meet of L is associative and

       A5: the L_join of L absorbs the L_meet of L and

       A6: the L_meet of L absorbs the L_join of L;

      thus (a "\/" b) = (b "\/" a) by A1;

      thus (a "\/" (b "\/" c)) = ((a "\/" b) "\/" c) by A2;

      thus ((a "/\" b) "\/" b) = b

      proof

        

        thus ((a "/\" b) "\/" b) = (b "\/" (a "/\" b)) by A1

        .= (b "\/" (b "/\" a)) by A3

        .= b by A5;

      end;

      thus (a "/\" b) = (b "/\" a) by A3;

      thus (a "/\" (b "/\" c)) = ((a "/\" b) "/\" c) by A4;

      let a, b;

      thus thesis by A6;

    end;

    definition

      let L be LattStr;

      :: LATTICE2:def2

      func L .: -> strict LattStr equals LattStr (# the carrier of L, the L_meet of L, the L_join of L #);

      correctness ;

    end

    registration

      let L be non empty LattStr;

      cluster (L .: ) -> non empty;

      coherence ;

    end

    theorem :: LATTICE2:12

    the carrier of L = the carrier of (L .: ) & the L_join of L = the L_meet of (L .: ) & the L_meet of L = the L_join of (L .: );

    theorem :: LATTICE2:13

    for L be strict non empty LattStr holds ((L .: ) .: ) = L;

    reserve L for Lattice;

    reserve a,b,c,u,v for Element of L;

    theorem :: LATTICE2:14

    

     Th14: (for v holds (u "\/" v) = v) implies u = ( Bottom L)

    proof

      assume

       A1: (u "\/" v) = v;

      now

        let v;

        (v "\/" u) = v by A1;

        then u [= v;

        hence (v "/\" u) = u by LATTICES: 4;

      end;

      hence thesis by RLSUB_2: 64;

    end;

    theorem :: LATTICE2:15

    

     Th15: (for v holds (the L_join of L . (u,v)) = v) implies u = ( Bottom L)

    proof

      assume for v holds (the L_join of L . (u,v)) = v;

      then for v holds (u "\/" v) = v;

      hence thesis by Th14;

    end;

    theorem :: LATTICE2:16

    

     Th16: (for v holds (u "/\" v) = v) implies u = ( Top L)

    proof

      assume

       A1: (u "/\" v) = v;

      now

        let v;

        (v "/\" u) = v by A1;

        then v [= u by LATTICES: 4;

        hence u = (v "\/" u);

      end;

      hence thesis by RLSUB_2: 65;

    end;

    theorem :: LATTICE2:17

    

     Th17: (for v holds (the L_meet of L . (u,v)) = v) implies u = ( Top L)

    proof

      assume for v holds (the L_meet of L . (u,v)) = v;

      then for v holds (u "/\" v) = v;

      hence thesis by Th16;

    end;

    registration

      let L;

      cluster the L_join of L -> idempotent;

      coherence

      proof

        let a;

        

        thus (the L_join of L . (a,a)) = (a "\/" a)

        .= a;

      end;

    end

    registration

      let L be join-commutative non empty \/-SemiLattStr;

      cluster the L_join of L -> commutative;

      coherence

      proof

        let a,b be Element of L;

        

        thus (the L_join of L . (a,b)) = (b "\/" a) by LATTICES:def 1

        .= (the L_join of L . (b,a));

      end;

    end

    theorem :: LATTICE2:18

    

     Th18: the L_join of L is having_a_unity implies ( Bottom L) = ( the_unity_wrt the L_join of L)

    proof

      set J = the L_join of L;

      given u such that

       A1: u is_a_unity_wrt J;

      (the L_join of L . (u,v)) = v by A1, BINOP_1: 4;

      then u = ( Bottom L) by Th15;

      hence thesis by A1, BINOP_1:def 8;

    end;

    registration

      let L be join-associative non empty \/-SemiLattStr;

      cluster the L_join of L -> associative;

      coherence

      proof

        let a,b,c be Element of L;

        

        thus (the L_join of L . (a,(the L_join of L . (b,c)))) = (a "\/" (b "\/" c))

        .= ((a "\/" b) "\/" c) by LATTICES:def 5

        .= (the L_join of L . ((the L_join of L . (a,b)),c));

      end;

    end

    registration

      let L;

      cluster the L_meet of L -> idempotent;

      coherence

      proof

        let a;

        

        thus (the L_meet of L . (a,a)) = (a "/\" a)

        .= a;

      end;

    end

    registration

      let L be meet-commutative non empty /\-SemiLattStr;

      cluster the L_meet of L -> commutative;

      coherence

      proof

        let a,b be Element of L;

        

        thus (the L_meet of L . (a,b)) = (b "/\" a) by LATTICES:def 2

        .= (the L_meet of L . (b,a));

      end;

    end

    registration

      let L be meet-associative non empty /\-SemiLattStr;

      cluster the L_meet of L -> associative;

      coherence

      proof

        let a,b,c be Element of L;

        

        thus (the L_meet of L . (a,(the L_meet of L . (b,c)))) = (a "/\" (b "/\" c))

        .= ((a "/\" b) "/\" c) by LATTICES:def 7

        .= (the L_meet of L . ((the L_meet of L . (a,b)),c));

      end;

    end

    theorem :: LATTICE2:19

    

     Th19: the L_meet of L is having_a_unity implies ( Top L) = ( the_unity_wrt the L_meet of L)

    proof

      set J = the L_meet of L;

      given u such that

       A1: u is_a_unity_wrt J;

      (the L_meet of L . (u,v)) = v by A1, BINOP_1: 4;

      then u = ( Top L) by Th17;

      hence thesis by A1, BINOP_1:def 8;

    end;

    theorem :: LATTICE2:20

    

     Th20: the L_join of L is_distributive_wrt the L_join of L

    proof

      now

        let a, b, c;

        

        thus (the L_join of L . (a,(the L_join of L . (b,c)))) = (a "\/" (b "\/" c))

        .= ((a "\/" b) "\/" c) by LATTICES:def 5

        .= (((a "\/" a) "\/" b) "\/" c)

        .= (((a "\/" b) "\/" a) "\/" c) by LATTICES:def 5

        .= ((a "\/" b) "\/" (a "\/" c)) by LATTICES:def 5

        .= (the L_join of L . ((the L_join of L . (a,b)),(the L_join of L . (a,c))));

      end;

      hence thesis by BINOP_1: 12;

    end;

    theorem :: LATTICE2:21

    L is D_Lattice implies the L_join of L is_distributive_wrt the L_meet of L

    proof

      assume

       A1: L is D_Lattice;

      now

        let a, b, c;

        

        thus (the L_join of L . (a,(the L_meet of L . (b,c)))) = (a "\/" (b "/\" c))

        .= ((a "\/" b) "/\" (a "\/" c)) by A1, LATTICES: 11

        .= (the L_meet of L . ((the L_join of L . (a,b)),(the L_join of L . (a,c))));

      end;

      hence thesis by BINOP_1: 12;

    end;

    theorem :: LATTICE2:22

    

     Th22: the L_join of L is_distributive_wrt the L_meet of L implies L is distributive

    proof

      assume

       A1: the L_join of L is_distributive_wrt the L_meet of L;

      then

       A2: for a, b, c holds (a "\/" (b "/\" c)) = ((a "\/" b) "/\" (a "\/" c)) by BINOP_1: 12;

      let a, b, c;

      

      thus (a "/\" (b "\/" c)) = ((a "/\" (c "\/" a)) "/\" (c "\/" b)) by LATTICES:def 9

      .= (a "/\" ((c "\/" a) "/\" (c "\/" b))) by LATTICES:def 7

      .= (a "/\" ((a "/\" b) "\/" c)) by A2

      .= (((a "/\" b) "\/" a) "/\" ((a "/\" b) "\/" c)) by LATTICES:def 8

      .= ((a "/\" b) "\/" (a "/\" c)) by A1, BINOP_1: 12;

    end;

    theorem :: LATTICE2:23

    

     Th23: L is D_Lattice implies the L_meet of L is_distributive_wrt the L_join of L

    proof

      assume

       A1: L is D_Lattice;

      now

        let a, b, c;

        

        thus (the L_meet of L . (a,(the L_join of L . (b,c)))) = (a "/\" (b "\/" c))

        .= ((a "/\" b) "\/" (a "/\" c)) by A1, LATTICES:def 11

        .= (the L_join of L . ((the L_meet of L . (a,b)),(the L_meet of L . (a,c))));

      end;

      hence thesis by BINOP_1: 12;

    end;

    theorem :: LATTICE2:24

    the L_meet of L is_distributive_wrt the L_join of L implies L is distributive by BINOP_1: 12;

    theorem :: LATTICE2:25

    

     Th25: the L_meet of L is_distributive_wrt the L_meet of L

    proof

      now

        let a, b, c;

        

        thus (the L_meet of L . (a,(the L_meet of L . (b,c)))) = (a "/\" (b "/\" c))

        .= ((a "/\" b) "/\" c) by LATTICES:def 7

        .= (((a "/\" a) "/\" b) "/\" c)

        .= (((a "/\" b) "/\" a) "/\" c) by LATTICES:def 7

        .= ((a "/\" b) "/\" (a "/\" c)) by LATTICES:def 7

        .= (the L_meet of L . ((the L_meet of L . (a,b)),(the L_meet of L . (a,c))));

      end;

      hence thesis by BINOP_1: 12;

    end;

    theorem :: LATTICE2:26

    

     Th26: the L_join of L absorbs the L_meet of L

    proof

      let x,y be Element of L;

      

      thus (the L_join of L . (x,(the L_meet of L . (x,y)))) = (x "\/" (x "/\" y))

      .= x by LATTICES:def 8;

    end;

    theorem :: LATTICE2:27

    

     Th27: the L_meet of L absorbs the L_join of L

    proof

      let x,y be Element of L;

      

      thus (the L_meet of L . (x,(the L_join of L . (x,y)))) = (x "/\" (x "\/" y))

      .= x by LATTICES:def 9;

    end;

    definition

      let A be non empty set, L be Lattice;

      let B be Element of ( Fin A);

      let f be Function of A, the carrier of L;

      :: LATTICE2:def3

      func FinJoin (B,f) -> Element of L equals (the L_join of L $$ (B,f));

      correctness ;

      :: LATTICE2:def4

      func FinMeet (B,f) -> Element of L equals (the L_meet of L $$ (B,f));

      correctness ;

    end

    reserve A for non empty set,

x for Element of A,

B for Element of ( Fin A),

f,g for Function of A, the carrier of L;

    theorem :: LATTICE2:28

    

     Th28: x in B implies (f . x) [= ( FinJoin (B,f)) by SETWISEO: 22;

    theorem :: LATTICE2:29

    

     Th29: (ex x st x in B & u [= (f . x)) implies u [= ( FinJoin (B,f))

    proof

      given x such that

       A1: x in B and

       A2: u [= (f . x);

      (f . x) [= ( FinJoin (B,f)) by A1, Th28;

      then

       A3: ((f . x) "\/" ( FinJoin (B,f))) = ( FinJoin (B,f));

      

      then (u "\/" ( FinJoin (B,f))) = ((u "\/" (f . x)) "\/" ( FinJoin (B,f))) by LATTICES:def 5

      .= ( FinJoin (B,f)) by A2, A3;

      hence thesis;

    end;

    theorem :: LATTICE2:30

    (for x st x in B holds (f . x) = u) & B <> {} implies ( FinJoin (B,f)) = u by SETWISEO: 24;

    theorem :: LATTICE2:31

    ( FinJoin (B,f)) [= u implies for x st x in B holds (f . x) [= u

    proof

      assume

       A1: ( FinJoin (B,f)) [= u;

      let x;

      assume x in B;

      then (f . x) [= ( FinJoin (B,f)) by Th28;

      hence thesis by A1, LATTICES: 7;

    end;

    theorem :: LATTICE2:32

    

     Th32: B <> {} & (for x st x in B holds (f . x) [= u) implies ( FinJoin (B,f)) [= u

    proof

      assume that

       A1: B <> {} and

       A2: for x st x in B holds (f . x) [= u;

      set J = the L_join of L;

       A3:

      now

        let x;

        assume x in B;

        then

         A4: (f . x) [= u by A2;

        

        thus ((J [:] (f,u)) . x) = ((f . x) "\/" u) by FUNCOP_1: 48

        .= u by A4;

      end;

      (( FinJoin (B,f)) "\/" u) = (J $$ (B,(J [:] (f,u)))) by A1, Th20, SETWISEO: 28

      .= u by A1, A3, SETWISEO: 24;

      hence thesis;

    end;

    theorem :: LATTICE2:33

    B <> {} & (for x st x in B holds (f . x) [= (g . x)) implies ( FinJoin (B,f)) [= ( FinJoin (B,g))

    proof

      assume that

       A1: B <> {} and

       A2: for x st x in B holds (f . x) [= (g . x);

      now

        let x;

        assume

         A3: x in B;

        then (f . x) [= (g . x) by A2;

        hence (f . x) [= ( FinJoin (B,g)) by A3, Th29;

      end;

      hence thesis by A1, Th32;

    end;

    theorem :: LATTICE2:34

    

     Th34: B <> {} & (f | B) = (g | B) implies ( FinJoin (B,f)) = ( FinJoin (B,g))

    proof

      assume that

       A1: B <> {} and

       A2: (f | B) = (g | B);

      (f .: B) = (g .: B) by A2, RELAT_1: 166;

      hence thesis by A1, SETWISEO: 26;

    end;

    theorem :: LATTICE2:35

    B <> {} implies (v "\/" ( FinJoin (B,f))) = ( FinJoin (B,(the L_join of L [;] (v,f)))) by Th20, SETWISEO: 27;

    registration

      let L be Lattice;

      cluster (L .: ) -> Lattice-like;

      coherence

      proof

        the L_join of (L .: ) absorbs the L_meet of (L .: ) & the L_meet of (L .: ) absorbs the L_join of (L .: ) by Th26, Th27;

        hence thesis by Th11;

      end;

    end

    theorem :: LATTICE2:36

    for L be Lattice, B be Element of ( Fin A) holds for f be Function of A, the carrier of L, f9 be Function of A, the carrier of (L .: ) st f = f9 holds ( FinJoin (B,f)) = ( FinMeet (B,f9)) & ( FinMeet (B,f)) = ( FinJoin (B,f9));

    theorem :: LATTICE2:37

    

     Th37: for a9,b9 be Element of (L .: ) st a = a9 & b = b9 holds (a "/\" b) = (a9 "\/" b9) & (a "\/" b) = (a9 "/\" b9);

    theorem :: LATTICE2:38

    

     Th38: a [= b implies for a9,b9 be Element of (L .: ) st a = a9 & b = b9 holds b9 [= a9

    proof

      assume a [= b;

      then

       A1: (a "\/" b) = b;

      let a9,b9 be Element of (L .: );

      assume a = a9 & b = b9;

      then (b9 "/\" a9) = b9 by A1, Th37;

      hence thesis by LATTICES: 4;

    end;

    theorem :: LATTICE2:39

    

     Th39: for a9,b9 be Element of (L .: ) st a9 [= b9 & a = a9 & b = b9 holds b [= a

    proof

      let a9,b9 be Element of (L .: );

      assume that

       A1: a9 [= b9 and

       A2: a = a9 & b = b9;

      (a9 "\/" b9) = b9 by A1;

      then (b "/\" a) = b by A2, Th37;

      hence thesis by LATTICES: 4;

    end;

    theorem :: LATTICE2:40

    

     Th40: x in B implies ( FinMeet (B,f)) [= (f . x)

    proof

      reconsider f9 = f as Function of A, the carrier of (L .: );

      assume x in B;

      then (f9 . x) [= ( FinJoin (B,f9)) by Th28;

      hence thesis by Th39;

    end;

    theorem :: LATTICE2:41

    

     Th41: (ex x st x in B & (f . x) [= u) implies ( FinMeet (B,f)) [= u

    proof

      given x such that

       A1: x in B and

       A2: (f . x) [= u;

      reconsider u9 = u as Element of (L .: );

      reconsider f9 = f as Function of A, the carrier of (L .: );

      u9 [= (f9 . x) by A2, Th38;

      then u9 [= ( FinJoin (B,f9)) by A1, Th29;

      hence thesis by Th39;

    end;

    theorem :: LATTICE2:42

    (for x st x in B holds (f . x) = u) & B <> {} implies ( FinMeet (B,f)) = u by SETWISEO: 24;

    theorem :: LATTICE2:43

    B <> {} implies (v "/\" ( FinMeet (B,f))) = ( FinMeet (B,(the L_meet of L [;] (v,f)))) by Th25, SETWISEO: 27;

    theorem :: LATTICE2:44

    u [= ( FinMeet (B,f)) implies for x st x in B holds u [= (f . x)

    proof

      assume

       A1: u [= ( FinMeet (B,f));

      let x;

      assume x in B;

      then ( FinMeet (B,f)) [= (f . x) by Th40;

      hence thesis by A1, LATTICES: 7;

    end;

    theorem :: LATTICE2:45

    B <> {} & (f | B) = (g | B) implies ( FinMeet (B,f)) = ( FinMeet (B,g))

    proof

      reconsider f9 = f, g9 = g as Function of A, the carrier of (L .: );

      

       A1: ( FinMeet (B,f)) = ( FinJoin (B,f9)) & ( FinMeet (B,g)) = ( FinJoin (B,g9));

      assume B <> {} & (f | B) = (g | B);

      hence thesis by A1, Th34;

    end;

    theorem :: LATTICE2:46

    

     Th46: B <> {} & (for x st x in B holds u [= (f . x)) implies u [= ( FinMeet (B,f))

    proof

      assume that

       A1: B <> {} and

       A2: for x st x in B holds u [= (f . x);

      reconsider u9 = u as Element of (L .: );

      reconsider f9 = f as Function of A, the carrier of (L .: );

      for x st x in B holds (f9 . x) [= u9 by A2, Th38;

      then ( FinJoin (B,f9)) [= u9 by A1, Th32;

      hence thesis by Th39;

    end;

    theorem :: LATTICE2:47

    B <> {} & (for x st x in B holds (f . x) [= (g . x)) implies ( FinMeet (B,f)) [= ( FinMeet (B,g))

    proof

      assume that

       A1: B <> {} and

       A2: for x st x in B holds (f . x) [= (g . x);

      now

        let x;

        assume

         A3: x in B;

        then (f . x) [= (g . x) by A2;

        hence ( FinMeet (B,f)) [= (g . x) by A3, Th41;

      end;

      hence thesis by A1, Th46;

    end;

    theorem :: LATTICE2:48

    for L be Lattice holds L is lower-bounded iff (L .: ) is upper-bounded

    proof

      let L be Lattice;

      thus L is lower-bounded implies (L .: ) is upper-bounded

      proof

        given c be Element of L such that

         A1: for a be Element of L holds (c "/\" a) = c & (a "/\" c) = c;

        reconsider c9 = c as Element of (L .: );

        take c9;

        let a9 be Element of (L .: );

        reconsider a = a9 as Element of L;

        

        thus (c9 "\/" a9) = (c "/\" a)

        .= c9 by A1;

        hence (a9 "\/" c9) = c9;

      end;

      given c be Element of (L .: ) such that

       A2: for a be Element of (L .: ) holds (c "\/" a) = c & (a "\/" c) = c;

      reconsider c9 = c as Element of L;

      take c9;

      let a9 be Element of L;

      reconsider a = a9 as Element of (L .: );

      

      thus (c9 "/\" a9) = (c "\/" a)

      .= c9 by A2;

      hence (a9 "/\" c9) = c9;

    end;

    theorem :: LATTICE2:49

    

     Th49: for L be Lattice holds L is upper-bounded iff (L .: ) is lower-bounded

    proof

      let L be Lattice;

      thus L is upper-bounded implies (L .: ) is lower-bounded

      proof

        given c be Element of L such that

         A1: for a be Element of L holds (c "\/" a) = c & (a "\/" c) = c;

        reconsider c9 = c as Element of (L .: );

        take c9;

        let a9 be Element of (L .: );

        reconsider a = a9 as Element of L;

        

        thus (c9 "/\" a9) = (c "\/" a)

        .= c9 by A1;

        hence (a9 "/\" c9) = c9;

      end;

      given c be Element of (L .: ) such that

       A2: for a be Element of (L .: ) holds (c "/\" a) = c & (a "/\" c) = c;

      reconsider c9 = c as Element of L;

      take c9;

      let a9 be Element of L;

      reconsider a = a9 as Element of (L .: );

      

      thus (c9 "\/" a9) = (c "/\" a)

      .= c9 by A2;

      hence (a9 "\/" c9) = c9;

    end;

    theorem :: LATTICE2:50

    L is D_Lattice iff (L .: ) is D_Lattice by Th22, Th23;

    reserve L for 0_Lattice,

f,g for Function of A, the carrier of L,

u for Element of L;

    theorem :: LATTICE2:51

    

     Th51: ( Bottom L) is_a_unity_wrt the L_join of L

    proof

      now

        let u;

        

        thus (the L_join of L . (( Bottom L),u)) = (( Bottom L) "\/" u)

        .= u;

      end;

      hence thesis by BINOP_1: 4;

    end;

    registration

      let L;

      cluster the L_join of L -> having_a_unity;

      coherence

      proof

        ( Bottom L) is_a_unity_wrt the L_join of L by Th51;

        hence thesis;

      end;

    end

    theorem :: LATTICE2:52

    ( Bottom L) = ( the_unity_wrt the L_join of L) by Th18;

    theorem :: LATTICE2:53

    

     Th53: (f | B) = (g | B) implies ( FinJoin (B,f)) = ( FinJoin (B,g))

    proof

      set J = the L_join of L;

      

       A1: ( Bottom L) = ( the_unity_wrt J) by Th18;

      assume

       A2: (f | B) = (g | B);

      now

        per cases ;

          suppose

           A3: B = {} ;

          

          hence ( FinJoin (B,f)) = (J $$ (( {}. A),f))

          .= ( Bottom L) by A1, SETWISEO: 31

          .= (J $$ (( {}. A),g)) by A1, SETWISEO: 31

          .= ( FinJoin (B,g)) by A3;

        end;

          suppose B <> {} ;

          hence thesis by A2, Th34;

        end;

      end;

      hence thesis;

    end;

    theorem :: LATTICE2:54

    

     Th54: (for x st x in B holds (f . x) [= u) implies ( FinJoin (B,f)) [= u

    proof

      assume

       A1: for x st x in B holds (f . x) [= u;

      set J = the L_join of L;

      

       A2: ( Bottom L) = ( the_unity_wrt J) by Th18;

      now

        per cases ;

          suppose B = {} ;

          

          then ( FinJoin (B,f)) = (J $$ (( {}. A),f))

          .= ( Bottom L) by A2, SETWISEO: 31;

          hence thesis;

        end;

          suppose B <> {} ;

          hence thesis by A1, Th32;

        end;

      end;

      hence thesis;

    end;

    theorem :: LATTICE2:55

    (for x st x in B holds (f . x) [= (g . x)) implies ( FinJoin (B,f)) [= ( FinJoin (B,g))

    proof

      assume

       A1: for x st x in B holds (f . x) [= (g . x);

      now

        let x;

        assume

         A2: x in B;

        then (f . x) [= (g . x) by A1;

        hence (f . x) [= ( FinJoin (B,g)) by A2, Th29;

      end;

      hence thesis by Th54;

    end;

    reserve L for 1_Lattice,

f,g for Function of A, the carrier of L,

u for Element of L;

    theorem :: LATTICE2:56

    

     Th56: ( Top L) is_a_unity_wrt the L_meet of L

    proof

      now

        let u;

        

        thus (the L_meet of L . (( Top L),u)) = (( Top L) "/\" u)

        .= u;

      end;

      hence thesis by BINOP_1: 4;

    end;

    registration

      let L;

      cluster the L_meet of L -> having_a_unity;

      coherence

      proof

        ( Top L) is_a_unity_wrt the L_meet of L by Th56;

        hence thesis;

      end;

    end

    theorem :: LATTICE2:57

    ( Top L) = ( the_unity_wrt the L_meet of L) by Th19;

    theorem :: LATTICE2:58

    (f | B) = (g | B) implies ( FinMeet (B,f)) = ( FinMeet (B,g))

    proof

      assume

       A1: (f | B) = (g | B);

      reconsider f9 = f, g9 = g as Function of A, the carrier of (L .: );

      

       A2: ( FinMeet (B,g)) = ( FinJoin (B,g9));

      (L .: ) is 0_Lattice & ( FinMeet (B,f)) = ( FinJoin (B,f9)) by Th49;

      hence thesis by A1, A2, Th53;

    end;

    theorem :: LATTICE2:59

    

     Th59: (for x st x in B holds u [= (f . x)) implies u [= ( FinMeet (B,f))

    proof

      reconsider f9 = f as Function of A, the carrier of (L .: );

      reconsider u9 = u as Element of (L .: );

      assume for x st x in B holds u [= (f . x);

      then

       A1: for x st x in B holds (f9 . x) [= u9 by Th38;

      (L .: ) is 0_Lattice by Th49;

      then ( FinJoin (B,f9)) [= u9 by A1, Th54;

      hence thesis by Th39;

    end;

    theorem :: LATTICE2:60

    (for x st x in B holds (f . x) [= (g . x)) implies ( FinMeet (B,f)) [= ( FinMeet (B,g))

    proof

      assume

       A1: for x st x in B holds (f . x) [= (g . x);

      now

        let x;

        assume

         A2: x in B;

        then (f . x) [= (g . x) by A1;

        hence ( FinMeet (B,f)) [= (g . x) by A2, Th41;

      end;

      hence thesis by Th59;

    end;

    theorem :: LATTICE2:61

    for L be 0_Lattice holds ( Bottom L) = ( Top (L .: ))

    proof

      let L be 0_Lattice;

      reconsider u = ( Bottom L) as Element of (L .: );

      now

        let v be Element of (L .: );

        reconsider v9 = v as Element of L;

        

        thus (v "\/" u) = (( Bottom L) "/\" v9) by Th37

        .= u;

      end;

      hence thesis by RLSUB_2: 65;

    end;

    theorem :: LATTICE2:62

    for L be 1_Lattice holds ( Top L) = ( Bottom (L .: ))

    proof

      let L be 1_Lattice;

      reconsider u = ( Top L) as Element of (L .: );

      now

        let v be Element of (L .: );

        reconsider v9 = v as Element of L;

        

        thus (v "/\" u) = (( Top L) "\/" v9) by Th37

        .= u;

      end;

      hence thesis by RLSUB_2: 64;

    end;

    definition

      mode D0_Lattice is distributive lower-bounded Lattice;

    end

    reserve L for D0_Lattice,

f,g for Function of A, the carrier of L,

u for Element of L;

    theorem :: LATTICE2:63

    the L_meet of L is_distributive_wrt the L_join of L by Th23;

    theorem :: LATTICE2:64

    

     Th64: (the L_meet of L . (u,( FinJoin (B,f)))) = ( FinJoin (B,(the L_meet of L [;] (u,f))))

    proof

      

       A1: (the L_meet of L . (u,( Bottom L))) = (u "/\" ( Bottom L))

      .= ( Bottom L);

      the L_meet of L is_distributive_wrt the L_join of L & ( Bottom L) = ( the_unity_wrt the L_join of L) by Th18, Th23;

      hence thesis by A1, SETWOP_2: 12;

    end;

    theorem :: LATTICE2:65

    (for x st x in B holds (g . x) = (u "/\" (f . x))) implies (u "/\" ( FinJoin (B,f))) = ( FinJoin (B,g))

    proof

      reconsider G = ((the L_meet of L [;] (u,f)) +* (g | B)) as Function of A, the carrier of L by Th3;

      ( dom (g | B)) = B by Th9;

      then

       A1: (G | B) = (g | B) by FUNCT_4: 23;

      assume

       A2: for x st x in B holds (g . x) = (u "/\" (f . x));

      now

        let x;

        assume x in B;

        

        hence (g . x) = (u "/\" (f . x)) by A2

        .= ((the L_meet of L [;] (u,f)) . x) by FUNCOP_1: 53;

      end;

      then G = (the L_meet of L [;] (u,f)) by Th10;

      

      hence (u "/\" ( FinJoin (B,f))) = ( FinJoin (B,G)) by Th64

      .= ( FinJoin (B,g)) by A1, Th53;

    end;

    theorem :: LATTICE2:66

    (u "/\" ( FinJoin (B,f))) = ( FinJoin (B,(the L_meet of L [;] (u,f)))) by Th64;

    definition

      let IT be Lattice;

      :: LATTICE2:def5

      attr IT is Heyting means IT is implicative lower-bounded;

    end

    registration

      cluster Heyting for Lattice;

      existence

      proof

        set L = the B_Lattice;

        take L;

        thus L is implicative lower-bounded;

      end;

    end

    registration

      cluster Heyting -> implicative lower-bounded for Lattice;

      coherence ;

      cluster implicative lower-bounded -> Heyting for Lattice;

      coherence ;

    end

    definition

      mode H_Lattice is Heyting Lattice;

    end

    registration

      cluster Heyting strict for Lattice;

      existence

      proof

        set L = the strict B_Lattice;

        L is I_Lattice;

        hence thesis;

      end;

    end

    theorem :: LATTICE2:67

    for L be 0_Lattice holds L is H_Lattice iff for x,z be Element of L holds ex y be Element of L st (x "/\" y) [= z & for v be Element of L st (x "/\" v) [= z holds v [= y

    proof

      let L be 0_Lattice;

      L is H_Lattice iff L is I_Lattice;

      hence thesis by FILTER_0:def 6;

    end;

    theorem :: LATTICE2:68

    for L be Lattice holds L is finite iff (L .: ) is finite;

    registration

      cluster finite -> lower-bounded for Lattice;

      coherence

      proof

        let L be Lattice;

        assume L is finite;

        then

        reconsider B = the carrier of L as Element of ( Fin the carrier of L) by FINSUB_1:def 5;

        take c = ( FinMeet (B,( id the carrier of L)));

        let a be Element of L;

        (( id the carrier of L) . a) [= a;

        then

         A1: c [= a by Th41;

        hence (c "/\" a) = c by LATTICES: 4;

        thus (a "/\" c) = c by A1, LATTICES: 4;

      end;

      cluster finite -> upper-bounded for Lattice;

      coherence

      proof

        let L be Lattice;

        assume L is finite;

        then

        reconsider B = the carrier of L as Element of ( Fin the carrier of L) by FINSUB_1:def 5;

        take c = ( FinJoin (B,( id the carrier of L)));

        let a be Element of L;

        a [= (( id the carrier of L) . a);

        then

         A2: a [= c by Th29;

        hence (c "\/" a) = c;

        thus (a "\/" c) = c by A2;

      end;

    end

    registration

      cluster finite -> bounded for Lattice;

      coherence ;

    end

    registration

      cluster distributive finite -> Heyting for Lattice;

      coherence

      proof

        let L be Lattice;

        assume

         A1: L is distributive finite;

        then

        reconsider L as D0_Lattice;

        set C = the carrier of L;

        L is implicative

        proof

          let p,q be Element of C;

          defpred X[ Element of C] means (p "/\" $1) [= q;

          set B = { x where x be Element of C : X[x] };

          

           A2: B c= C from FRAENKEL:sch 10;

          then B is finite by A1, FINSET_1: 1;

          then

          reconsider B as Element of ( Fin C) by A2, FINSUB_1:def 5;

          take r = ( FinJoin (B,( id C)));

           A3:

          now

            let x be Element of C;

            assume x in B;

            then

             A4: ex x9 be Element of C st x9 = x & (p "/\" x9) [= q;

            ((the L_meet of L [;] (p,( id C))) . x) = (the L_meet of L . (p,(( id C) . x))) by FUNCOP_1: 53

            .= (p "/\" x);

            hence ((the L_meet of L [;] (p,( id C))) . x) [= q by A4;

          end;

          (p "/\" r) = ( FinJoin (B,(the L_meet of L [;] (p,( id C))))) by Th64;

          hence (p "/\" r) [= q by A3, Th54;

          let r1 be Element of C;

          assume (p "/\" r1) [= q;

          then

           A5: r1 in B;

          r1 = (( id C) . r1);

          hence r1 [= r by A5, Th28;

        end;

        hence thesis;

      end;

    end