:: Lattice of Substitutions Is a Heyting Algebra
:: by Adam Grabowski
::
:: Received December 31, 1998
:: Copyright (c) 1998 Association of Mizar Users


begin

theorem :: HEYTING2:1
canceled;

theorem Th2: :: HEYTING2:2
for V, C, a, b being set st b in SubstitutionSet V,C & a in b holds
a is finite Function
proof end;

Lm1: for A, B, C being set st A = B \/ C & A c= B holds
A = B
proof end;

begin

theorem :: HEYTING2:3
canceled;

theorem :: HEYTING2:4
canceled;

theorem :: HEYTING2:5
canceled;

theorem Th6: :: HEYTING2:6
for V, C being set
for a being finite Element of PFuncs V,C holds {a} in SubstitutionSet V,C
proof end;

theorem :: HEYTING2:7
for V, C being set
for A, B being Element of SubstitutionSet V,C st A ^ B = A holds
for a being set st a in A holds
ex b being set st
( b in B & b c= a )
proof end;

theorem Th8: :: HEYTING2:8
for V, C being set
for A, B being Element of SubstitutionSet V,C st mi (A ^ B) = A holds
for a being set st a in A holds
ex b being set st
( b in B & b c= a )
proof end;

theorem Th9: :: HEYTING2:9
for V, C being set
for A, B being Element of SubstitutionSet V,C st ( for a being set st a in A holds
ex b being set st
( b in B & b c= a ) ) holds
mi (A ^ B) = A
proof end;

definition
let V be set ;
let C be finite set ;
let A be Element of Fin (PFuncs V,C);
func Involved A -> set means :Def1: :: HEYTING2:def 1
for x being set holds
( x in it iff ex f being finite Function st
( f in A & x in dom f ) );
existence
ex b1 being set st
for x being set holds
( x in b1 iff ex f being finite Function st
( f in A & x in dom f ) )
proof end;
uniqueness
for b1, b2 being set st ( for x being set holds
( x in b1 iff ex f being finite Function st
( f in A & x in dom f ) ) ) & ( for x being set holds
( x in b2 iff ex f being finite Function st
( f in A & x in dom f ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines Involved HEYTING2:def 1 :
for V being set
for C being finite set
for A being Element of Fin (PFuncs V,C)
for b4 being set holds
( b4 = Involved A iff for x being set holds
( x in b4 iff ex f being finite Function st
( f in A & x in dom f ) ) );

theorem Th10: :: HEYTING2:10
for V being set
for C being finite set
for A being Element of Fin (PFuncs V,C) holds Involved A c= V
proof end;

Lm2: for V being set
for C being finite set
for A being non empty Element of Fin (PFuncs V,C) holds Involved A is finite
proof end;

theorem Th11: :: HEYTING2:11
for V being set
for C being finite set
for A being Element of Fin (PFuncs V,C) st A = {} holds
Involved A = {}
proof end;

theorem Th12: :: HEYTING2:12
for V being set
for C being finite set
for A being Element of Fin (PFuncs V,C) holds Involved A is finite
proof end;

theorem :: HEYTING2:13
for C being finite set
for A being Element of Fin (PFuncs {} ,C) holds Involved A = {} by Th10, XBOOLE_1:3;

definition
let V be set ;
let C be finite set ;
let A be Element of Fin (PFuncs V,C);
func - A -> Element of Fin (PFuncs V,C) equals :: HEYTING2:def 2
{ f where f is Element of PFuncs (Involved A),C : for g being Element of PFuncs V,C st g in A holds
not f tolerates g
}
;
coherence
{ f where f is Element of PFuncs (Involved A),C : for g being Element of PFuncs V,C st g in A holds
not f tolerates g
}
is Element of Fin (PFuncs V,C)
proof end;
end;

:: deftheorem defines - HEYTING2:def 2 :
for V being set
for C being finite set
for A being Element of Fin (PFuncs V,C) holds - A = { f where f is Element of PFuncs (Involved A),C : for g being Element of PFuncs V,C st g in A holds
not f tolerates g
}
;

theorem Th14: :: HEYTING2:14
for V being set
for C being finite set
for A being Element of SubstitutionSet V,C holds A ^ (- A) = {}
proof end;

theorem Th15: :: HEYTING2:15
for V being set
for C being finite set
for A being Element of SubstitutionSet V,C st A = {} holds
- A = {{} }
proof end;

theorem :: HEYTING2:16
for V being set
for C being finite set
for A being Element of SubstitutionSet V,C st A = {{} } holds
- A = {}
proof end;

theorem Th17: :: HEYTING2:17
for V being set
for C being finite set
for A being Element of SubstitutionSet V,C holds mi (A ^ (- A)) = Bottom (SubstLatt V,C)
proof end;

theorem :: HEYTING2:18
for V being non empty set
for C being non empty finite set
for A being Element of SubstitutionSet V,C st A = {} holds
mi (- A) = Top (SubstLatt V,C)
proof end;

theorem Th19: :: HEYTING2:19
for V being set
for C being finite set
for A being Element of SubstitutionSet V,C
for a being Element of PFuncs V,C
for B being Element of SubstitutionSet V,C st B = {a} & A ^ B = {} holds
ex b being finite set st
( b in - A & b c= a )
proof end;

definition
let V be set ;
let C be finite set ;
let A, B be Element of Fin (PFuncs V,C);
func A =>> B -> Element of Fin (PFuncs V,C) equals :: HEYTING2:def 3
(PFuncs V,C) /\ { (union { ((f . i) \ i) where i is Element of PFuncs V,C : i in A } ) where f is Element of PFuncs A,B : dom f = A } ;
coherence
(PFuncs V,C) /\ { (union { ((f . i) \ i) where i is Element of PFuncs V,C : i in A } ) where f is Element of PFuncs A,B : dom f = A } is Element of Fin (PFuncs V,C)
proof end;
end;

:: deftheorem defines =>> HEYTING2:def 3 :
for V being set
for C being finite set
for A, B being Element of Fin (PFuncs V,C) holds A =>> B = (PFuncs V,C) /\ { (union { ((f . i) \ i) where i is Element of PFuncs V,C : i in A } ) where f is Element of PFuncs A,B : dom f = A } ;

theorem Th20: :: HEYTING2:20
for V being set
for C being finite set
for A, B being Element of Fin (PFuncs V,C)
for s being set st s in A =>> B holds
ex f being PartFunc of A,B st
( s = union { ((f . i) \ i) where i is Element of PFuncs V,C : i in A } & dom f = A )
proof end;

Lm3: for a, V being set
for C being finite set
for A being Element of Fin (PFuncs V,C)
for K being Element of SubstitutionSet V,C st a in A ^ (A =>> K) holds
ex b being set st
( b in K & b c= a )
proof end;

theorem :: HEYTING2:21
for V being set
for C being finite set
for A being Element of Fin (PFuncs V,C) st A = {} holds
A =>> A = {{} }
proof end;

Lm4: for V being set
for C being finite set
for K being Element of SubstitutionSet V,C
for X being set st X c= K holds
X in SubstitutionSet V,C
proof end;

theorem Th22: :: HEYTING2:22
for V being set
for C being finite set
for u being Element of (SubstLatt V,C)
for X being set st X c= u holds
X is Element of (SubstLatt V,C)
proof end;

begin

definition
let V be set ;
let C be finite set ;
func pseudo_compl V,C -> UnOp of the carrier of (SubstLatt V,C) means :Def4: :: HEYTING2:def 4
for u being Element of (SubstLatt V,C)
for u' being Element of SubstitutionSet V,C st u' = u holds
it . u = mi (- u');
existence
ex b1 being UnOp of the carrier of (SubstLatt V,C) st
for u being Element of (SubstLatt V,C)
for u' being Element of SubstitutionSet V,C st u' = u holds
b1 . u = mi (- u')
proof end;
correctness
uniqueness
for b1, b2 being UnOp of the carrier of (SubstLatt V,C) st ( for u being Element of (SubstLatt V,C)
for u' being Element of SubstitutionSet V,C st u' = u holds
b1 . u = mi (- u') ) & ( for u being Element of (SubstLatt V,C)
for u' being Element of SubstitutionSet V,C st u' = u holds
b2 . u = mi (- u') ) holds
b1 = b2
;
proof end;
func StrongImpl V,C -> BinOp of the carrier of (SubstLatt V,C) means :Def5: :: HEYTING2:def 5
for u, v being Element of (SubstLatt V,C)
for u', v' being Element of SubstitutionSet V,C st u' = u & v' = v holds
it . u,v = mi (u' =>> v');
existence
ex b1 being BinOp of the carrier of (SubstLatt V,C) st
for u, v being Element of (SubstLatt V,C)
for u', v' being Element of SubstitutionSet V,C st u' = u & v' = v holds
b1 . u,v = mi (u' =>> v')
proof end;
correctness
uniqueness
for b1, b2 being BinOp of the carrier of (SubstLatt V,C) st ( for u, v being Element of (SubstLatt V,C)
for u', v' being Element of SubstitutionSet V,C st u' = u & v' = v holds
b1 . u,v = mi (u' =>> v') ) & ( for u, v being Element of (SubstLatt V,C)
for u', v' being Element of SubstitutionSet V,C st u' = u & v' = v holds
b2 . u,v = mi (u' =>> v') ) holds
b1 = b2
;
proof end;
let u be Element of (SubstLatt V,C);
func SUB u -> Element of Fin the carrier of (SubstLatt V,C) equals :: HEYTING2:def 6
bool u;
coherence
bool u is Element of Fin the carrier of (SubstLatt V,C)
proof end;
correctness
;
func diff u -> UnOp of the carrier of (SubstLatt V,C) means :Def7: :: HEYTING2:def 7
for v being Element of (SubstLatt V,C) holds it . v = u \ v;
existence
ex b1 being UnOp of the carrier of (SubstLatt V,C) st
for v being Element of (SubstLatt V,C) holds b1 . v = u \ v
proof end;
correctness
uniqueness
for b1, b2 being UnOp of the carrier of (SubstLatt V,C) st ( for v being Element of (SubstLatt V,C) holds b1 . v = u \ v ) & ( for v being Element of (SubstLatt V,C) holds b2 . v = u \ v ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def4 defines pseudo_compl HEYTING2:def 4 :
for V being set
for C being finite set
for b3 being UnOp of the carrier of (SubstLatt V,C) holds
( b3 = pseudo_compl V,C iff for u being Element of (SubstLatt V,C)
for u' being Element of SubstitutionSet V,C st u' = u holds
b3 . u = mi (- u') );

:: deftheorem Def5 defines StrongImpl HEYTING2:def 5 :
for V being set
for C being finite set
for b3 being BinOp of the carrier of (SubstLatt V,C) holds
( b3 = StrongImpl V,C iff for u, v being Element of (SubstLatt V,C)
for u', v' being Element of SubstitutionSet V,C st u' = u & v' = v holds
b3 . u,v = mi (u' =>> v') );

:: deftheorem defines SUB HEYTING2:def 6 :
for V being set
for C being finite set
for u being Element of (SubstLatt V,C) holds SUB u = bool u;

:: deftheorem Def7 defines diff HEYTING2:def 7 :
for V being set
for C being finite set
for u being Element of (SubstLatt V,C)
for b4 being UnOp of the carrier of (SubstLatt V,C) holds
( b4 = diff u iff for v being Element of (SubstLatt V,C) holds b4 . v = u \ v );

Lm5: for V being set
for C being finite set
for v, u being Element of (SubstLatt V,C) st v in SUB u holds
v "\/" ((diff u) . v) = u
proof end;

Lm6: for V being set
for C being finite set
for u being Element of (SubstLatt V,C)
for a being Element of PFuncs V,C
for K being Element of Fin (PFuncs V,C) st K = {a} holds
ex v being Element of SubstitutionSet V,C st
( v in SUB u & v ^ K = {} & ( for b being Element of PFuncs V,C st b in (diff u) . v holds
b tolerates a ) )
proof end;

definition
let V be set ;
let C be finite set ;
func Atom V,C -> Function of (PFuncs V,C),the carrier of (SubstLatt V,C) means :Def8: :: HEYTING2:def 8
for a being Element of PFuncs V,C holds it . a = mi {.a.};
existence
ex b1 being Function of (PFuncs V,C),the carrier of (SubstLatt V,C) st
for a being Element of PFuncs V,C holds b1 . a = mi {.a.}
proof end;
correctness
uniqueness
for b1, b2 being Function of (PFuncs V,C),the carrier of (SubstLatt V,C) st ( for a being Element of PFuncs V,C holds b1 . a = mi {.a.} ) & ( for a being Element of PFuncs V,C holds b2 . a = mi {.a.} ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def8 defines Atom HEYTING2:def 8 :
for V being set
for C being finite set
for b3 being Function of (PFuncs V,C),the carrier of (SubstLatt V,C) holds
( b3 = Atom V,C iff for a being Element of PFuncs V,C holds b3 . a = mi {.a.} );

Lm7: for V being set
for C being finite set
for a being Element of PFuncs V,C st a is finite holds
(Atom V,C) . a = {a}
proof end;

theorem Th23: :: HEYTING2:23
for V being set
for C being finite set
for K being Element of SubstitutionSet V,C holds FinJoin K,(Atom V,C) = FinUnion K,(singleton (PFuncs V,C))
proof end;

theorem Th24: :: HEYTING2:24
for V being set
for C being finite set
for u being Element of SubstitutionSet V,C holds u = FinJoin u,(Atom V,C)
proof end;

Lm8: for V being set
for C being finite set
for u, v being Element of (SubstLatt V,C) st ( for a being set st a in u holds
ex b being set st
( b in v & b c= a ) ) holds
u [= v
proof end;

theorem Th25: :: HEYTING2:25
for V being set
for C being finite set
for u, v being Element of (SubstLatt V,C) holds (diff u) . v [= u
proof end;

theorem Th26: :: HEYTING2:26
for V being set
for C being finite set
for a being Element of PFuncs V,C st a is finite holds
for c being set st c in (Atom V,C) . a holds
c = a
proof end;

theorem Th27: :: HEYTING2:27
for V being set
for C being finite set
for u being Element of (SubstLatt V,C)
for K, L being Element of SubstitutionSet V,C
for a being Element of PFuncs V,C st K = {a} & L = u & L ^ K = {} holds
(Atom V,C) . a [= (pseudo_compl V,C) . u
proof end;

theorem Th28: :: HEYTING2:28
for V being set
for C being finite set
for a being finite Element of PFuncs V,C holds a in (Atom V,C) . a
proof end;

Lm9: for V being set
for C being finite set
for u, v being Element of (SubstLatt V,C) st u [= v holds
for x being set st x in u holds
ex b being set st
( b in v & b c= x )
proof end;

theorem Th29: :: HEYTING2:29
for V being set
for C being finite set
for a being Element of PFuncs V,C
for u, v being Element of SubstitutionSet V,C st ( for c being set st c in u holds
ex b being set st
( b in v & b c= c \/ a ) ) holds
ex b being set st
( b in u =>> v & b c= a )
proof end;

theorem Th30: :: HEYTING2:30
for V being set
for C being finite set
for u, v being Element of (SubstLatt V,C)
for a being finite Element of PFuncs V,C st ( for b being Element of PFuncs V,C st b in u holds
b tolerates a ) & u "/\" ((Atom V,C) . a) [= v holds
(Atom V,C) . a [= (StrongImpl V,C) . u,v
proof end;

deffunc H1( set , set ) -> Element of bool [:[:the carrier of (SubstLatt $1,$2),the carrier of (SubstLatt $1,$2):],the carrier of (SubstLatt $1,$2):] = the L_meet of (SubstLatt $1,$2);

theorem Th31: :: HEYTING2:31
for V being set
for C being finite set
for u being Element of (SubstLatt V,C) holds u "/\" ((pseudo_compl V,C) . u) = Bottom (SubstLatt V,C)
proof end;

theorem Th32: :: HEYTING2:32
for V being set
for C being finite set
for u, v being Element of (SubstLatt V,C) holds u "/\" ((StrongImpl V,C) . u,v) [= v
proof end;

Lm10: now
let V be set ; :: thesis: for C being finite set
for u, v being Element of (SubstLatt V,C) holds
( u "/\" H2(u,v) [= v & ( for w being Element of (SubstLatt V,C) st u "/\" v [= w holds
v [= H2(u,w) ) )

let C be finite set ; :: thesis: for u, v being Element of (SubstLatt V,C) holds
( u "/\" H2(u,v) [= v & ( for w being Element of (SubstLatt V,C) st u "/\" v [= w holds
v [= H2(u,w) ) )

let u, v be Element of (SubstLatt V,C); :: thesis: ( u "/\" H2(u,v) [= v & ( for w being Element of (SubstLatt V,C) st u "/\" v [= w holds
v [= H2(u,w) ) )

deffunc H2( Element of (SubstLatt V,C), Element of (SubstLatt V,C)) -> Element of the carrier of (SubstLatt V,C) = FinJoin (SUB $1),(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff $1),$2));
set Psi = H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v);
reconsider v' = v as Element of SubstitutionSet V,C by SUBSTLAT:def 4;
A1: now
let w be Element of (SubstLatt V,C); :: thesis: ( w in SUB u implies (H1(V,C) [;] u,(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))) . w [= v )
set u2 = (diff u) . w;
set pc = (pseudo_compl V,C) . w;
set si = (StrongImpl V,C) . ((diff u) . w),v;
A2: w "/\" (((pseudo_compl V,C) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v)) = (w "/\" ((pseudo_compl V,C) . w)) "/\" ((StrongImpl V,C) . ((diff u) . w),v) by LATTICES:def 7
.= (Bottom (SubstLatt V,C)) "/\" ((StrongImpl V,C) . ((diff u) . w),v) by Th31
.= Bottom (SubstLatt V,C) by LATTICES:40 ;
assume w in SUB u ; :: thesis: (H1(V,C) [;] u,(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))) . w [= v
then A3: w "\/" ((diff u) . w) = u by Lm5;
(H1(V,C) [;] u,(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))) . w = H1(V,C) . u,((H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v)) . w) by FUNCOP_1:66
.= u "/\" ((H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v)) . w) by LATTICES:def 2
.= u "/\" (H1(V,C) . ((pseudo_compl V,C) . w),(((StrongImpl V,C) [:] (diff u),v) . w)) by FUNCOP_1:48
.= u "/\" (((pseudo_compl V,C) . w) "/\" (((StrongImpl V,C) [:] (diff u),v) . w)) by LATTICES:def 2
.= u "/\" (((pseudo_compl V,C) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v)) by FUNCOP_1:60
.= (w "/\" (((pseudo_compl V,C) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v))) "\/" (((diff u) . w) "/\" (((pseudo_compl V,C) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v))) by A3, LATTICES:def 11
.= ((diff u) . w) "/\" (((StrongImpl V,C) . ((diff u) . w),v) "/\" ((pseudo_compl V,C) . w)) by A2, LATTICES:39
.= (((diff u) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v)) "/\" ((pseudo_compl V,C) . w) by LATTICES:def 7 ;
then A4: (H1(V,C) [;] u,(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))) . w [= ((diff u) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v) by LATTICES:23;
((diff u) . w) "/\" ((StrongImpl V,C) . ((diff u) . w),v) [= v by Th32;
hence (H1(V,C) [;] u,(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))) . w [= v by A4, LATTICES:25; :: thesis: verum
end;
u "/\" H2(u,v) = FinJoin (SUB u),(H1(V,C) [;] u,(H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))) by LATTICE2:83;
hence u "/\" H2(u,v) [= v by A1, LATTICE2:70; :: thesis: for w being Element of (SubstLatt V,C) st u "/\" v [= w holds
v [= H2(u,w)

let w be Element of (SubstLatt V,C); :: thesis: ( u "/\" v [= w implies v [= H2(u,w) )
assume A5: u "/\" v [= w ; :: thesis: v [= H2(u,w)
A6: v = FinJoin v',(Atom V,C) by Th24;
then A7: u "/\" v = FinJoin v',(H1(V,C) [;] u,(Atom V,C)) by LATTICE2:83;
now
set pf = pseudo_compl V,C;
set sf = (StrongImpl V,C) [:] (diff u),w;
let a be Element of PFuncs V,C; :: thesis: ( a in v' implies (Atom V,C) . a [= H2(u,w) )
reconsider SA = {.a.} as Element of Fin (PFuncs V,C) ;
consider v being Element of SubstitutionSet V,C such that
A8: v in SUB u and
A9: v ^ SA = {} and
A10: for b being Element of PFuncs V,C st b in (diff u) . v holds
b tolerates a by Lm6;
assume A11: a in v' ; :: thesis: (Atom V,C) . a [= H2(u,w)
then A12: a is finite by Th2;
reconsider v' = v as Element of (SubstLatt V,C) by SUBSTLAT:def 4;
set dv = (diff u) . v';
(H1(V,C) [;] u,(Atom V,C)) . a [= w by A7, A5, A11, LATTICE2:46;
then H1(V,C) . u,((Atom V,C) . a) [= w by FUNCOP_1:66;
then A13: u "/\" ((Atom V,C) . a) [= w by LATTICES:def 2;
a is finite by A11, Th2;
then reconsider SS = {a} as Element of SubstitutionSet V,C by Th6;
v ^ SS = {} by A9;
then A14: (Atom V,C) . a [= (pseudo_compl V,C) . v' by Th27;
((diff u) . v') "/\" ((Atom V,C) . a) [= u "/\" ((Atom V,C) . a) by Th25, LATTICES:27;
then ((diff u) . v') "/\" ((Atom V,C) . a) [= w by A13, LATTICES:25;
then (Atom V,C) . a [= (StrongImpl V,C) . ((diff u) . v'),w by A10, A12, Th30;
then A15: (Atom V,C) . a [= ((StrongImpl V,C) [:] (diff u),w) . v' by FUNCOP_1:60;
((pseudo_compl V,C) . v') "/\" (((StrongImpl V,C) [:] (diff u),w) . v') = H1(V,C) . ((pseudo_compl V,C) . v'),(((StrongImpl V,C) [:] (diff u),w) . v') by LATTICES:def 2
.= (H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),w)) . v' by FUNCOP_1:48 ;
then (Atom V,C) . a [= (H1(V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),w)) . v' by A14, A15, FILTER_0:7;
hence (Atom V,C) . a [= H2(u,w) by A8, LATTICE2:44; :: thesis: verum
end;
hence v [= H2(u,w) by A6, LATTICE2:70; :: thesis: verum
end;

Lm11: for V being set
for C being finite set holds SubstLatt V,C is implicative
proof end;

registration
let V be set ;
let C be finite set ;
cluster SubstLatt V,C -> implicative ;
coherence
SubstLatt V,C is implicative
by Lm11;
end;

theorem :: HEYTING2:33
for V being set
for C being finite set
for u, v being Element of (SubstLatt V,C) holds u => v = FinJoin (SUB u),(the L_meet of (SubstLatt V,C) .: (pseudo_compl V,C),((StrongImpl V,C) [:] (diff u),v))
proof end;