:: SHEFFER1 semantic presentation

theorem Th1: :: SHEFFER1:1
for b1 being non empty join-commutative join-associative Huntington ComplLattStr
for b2, b3 being Element of b1 holds (b2 + b3) ` = (b2 ` ) *' (b3 ` )
proof end;

theorem Th2: :: SHEFFER1:2
for b1 being non empty join-commutative join-associative Huntington ComplLattStr
for b2, b3 being Element of b1 holds (b2 *' b3) ` = (b2 ` ) + (b3 ` ) by ROBBINS1:3;

definition
let c1 be non empty LattStr ;
attr a1 is upper-bounded' means :Def1: :: SHEFFER1:def 1
ex b1 being Element of a1 st
for b2 being Element of a1 holds
( b1 "/\" b2 = b2 & b2 "/\" b1 = b2 );
end;

:: deftheorem Def1 defines upper-bounded' SHEFFER1:def 1 :
for b1 being non empty LattStr holds
( b1 is upper-bounded' iff ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b2 "/\" b3 = b3 & b3 "/\" b2 = b3 ) );

definition
let c1 be non empty LattStr ;
assume E3: c1 is upper-bounded' ;
func Top' c1 -> Element of a1 means :Def2: :: SHEFFER1:def 2
for b1 being Element of a1 holds
( a2 "/\" b1 = b1 & b1 "/\" a2 = b1 );
existence
ex b1 being Element of c1 st
for b2 being Element of c1 holds
( b1 "/\" b2 = b2 & b2 "/\" b1 = b2 )
by E3, Def1;
uniqueness
for b1, b2 being Element of c1 st ( for b3 being Element of c1 holds
( b1 "/\" b3 = b3 & b3 "/\" b1 = b3 ) ) & ( for b3 being Element of c1 holds
( b2 "/\" b3 = b3 & b3 "/\" b2 = b3 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines Top' SHEFFER1:def 2 :
for b1 being non empty LattStr st b1 is upper-bounded' holds
for b2 being Element of b1 holds
( b2 = Top' b1 iff for b3 being Element of b1 holds
( b2 "/\" b3 = b3 & b3 "/\" b2 = b3 ) );

definition
let c1 be non empty LattStr ;
attr a1 is lower-bounded' means :Def3: :: SHEFFER1:def 3
ex b1 being Element of a1 st
for b2 being Element of a1 holds
( b1 "\/" b2 = b2 & b2 "\/" b1 = b2 );
end;

:: deftheorem Def3 defines lower-bounded' SHEFFER1:def 3 :
for b1 being non empty LattStr holds
( b1 is lower-bounded' iff ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b2 "\/" b3 = b3 & b3 "\/" b2 = b3 ) );

definition
let c1 be non empty LattStr ;
assume E5: c1 is lower-bounded' ;
func Bot' c1 -> Element of a1 means :Def4: :: SHEFFER1:def 4
for b1 being Element of a1 holds
( a2 "\/" b1 = b1 & b1 "\/" a2 = b1 );
existence
ex b1 being Element of c1 st
for b2 being Element of c1 holds
( b1 "\/" b2 = b2 & b2 "\/" b1 = b2 )
by E5, Def3;
uniqueness
for b1, b2 being Element of c1 st ( for b3 being Element of c1 holds
( b1 "\/" b3 = b3 & b3 "\/" b1 = b3 ) ) & ( for b3 being Element of c1 holds
( b2 "\/" b3 = b3 & b3 "\/" b2 = b3 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines Bot' SHEFFER1:def 4 :
for b1 being non empty LattStr st b1 is lower-bounded' holds
for b2 being Element of b1 holds
( b2 = Bot' b1 iff for b3 being Element of b1 holds
( b2 "\/" b3 = b3 & b3 "\/" b2 = b3 ) );

definition
let c1 be non empty LattStr ;
attr a1 is distributive' means :Def5: :: SHEFFER1:def 5
for b1, b2, b3 being Element of a1 holds b1 "\/" (b2 "/\" b3) = (b1 "\/" b2) "/\" (b1 "\/" b3);
end;

:: deftheorem Def5 defines distributive' SHEFFER1:def 5 :
for b1 being non empty LattStr holds
( b1 is distributive' iff for b2, b3, b4 being Element of b1 holds b2 "\/" (b3 "/\" b4) = (b2 "\/" b3) "/\" (b2 "\/" b4) );

definition
let c1 be non empty LattStr ;
let c2, c3 be Element of c1;
pred c2 is_a_complement'_of c3 means :Def6: :: SHEFFER1:def 6
( a3 "\/" a2 = Top' a1 & a2 "\/" a3 = Top' a1 & a3 "/\" a2 = Bot' a1 & a2 "/\" a3 = Bot' a1 );
end;

:: deftheorem Def6 defines is_a_complement'_of SHEFFER1:def 6 :
for b1 being non empty LattStr
for b2, b3 being Element of b1 holds
( b2 is_a_complement'_of b3 iff ( b3 "\/" b2 = Top' b1 & b2 "\/" b3 = Top' b1 & b3 "/\" b2 = Bot' b1 & b2 "/\" b3 = Bot' b1 ) );

definition
let c1 be non empty LattStr ;
attr a1 is complemented' means :Def7: :: SHEFFER1:def 7
for b1 being Element of a1 ex b2 being Element of a1 st b2 is_a_complement'_of b1;
end;

:: deftheorem Def7 defines complemented' SHEFFER1:def 7 :
for b1 being non empty LattStr holds
( b1 is complemented' iff for b2 being Element of b1 ex b3 being Element of b1 st b3 is_a_complement'_of b2 );

definition
let c1 be non empty LattStr ;
let c2 be Element of c1;
assume E9: ( c1 is complemented' & c1 is distributive & c1 is upper-bounded' & c1 is meet-commutative ) ;
func c2 `# -> Element of a1 means :Def8: :: SHEFFER1:def 8
a3 is_a_complement'_of a2;
existence
ex b1 being Element of c1 st b1 is_a_complement'_of c2
by E9, Def7;
uniqueness
for b1, b2 being Element of c1 st b1 is_a_complement'_of c2 & b2 is_a_complement'_of c2 holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines `# SHEFFER1:def 8 :
for b1 being non empty LattStr
for b2 being Element of b1 st b1 is complemented' & b1 is distributive & b1 is upper-bounded' & b1 is meet-commutative holds
for b3 being Element of b1 holds
( b3 = b2 `# iff b3 is_a_complement'_of b2 );

registration
cluster non empty Lattice-like Boolean join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr ;
existence
ex b1 being non empty LattStr st
( b1 is Boolean & b1 is join-idempotent & b1 is upper-bounded' & b1 is complemented' & b1 is distributive' & b1 is lower-bounded' & b1 is Lattice-like )
proof end;
end;

theorem Th3: :: SHEFFER1:3
for b1 being non empty join-commutative meet-commutative distributive upper-bounded' distributive' complemented' LattStr
for b2 being Element of b1 holds b2 "\/" (b2 `# ) = Top' b1
proof end;

theorem Th4: :: SHEFFER1:4
for b1 being non empty join-commutative meet-commutative distributive upper-bounded' distributive' complemented' LattStr
for b2 being Element of b1 holds b2 "/\" (b2 `# ) = Bot' b1
proof end;

theorem Th5: :: SHEFFER1:5
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' distributive' complemented' LattStr
for b2 being Element of b1 holds b2 "\/" (Top' b1) = Top' b1
proof end;

theorem Th6: :: SHEFFER1:6
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr
for b2 being Element of b1 holds b2 "/\" (Bot' b1) = Bot' b1
proof end;

theorem Th7: :: SHEFFER1:7
for b1 being non empty join-commutative meet-commutative meet-absorbing join-absorbing distributive join-idempotent LattStr
for b2, b3, b4 being Element of b1 holds ((b2 "\/" b3) "\/" b4) "/\" b2 = b2
proof end;

theorem Th8: :: SHEFFER1:8
for b1 being non empty join-commutative meet-commutative meet-absorbing join-absorbing join-idempotent distributive' LattStr
for b2, b3, b4 being Element of b1 holds ((b2 "/\" b3) "/\" b4) "\/" b2 = b2
proof end;

definition
let c1 be non empty /\-SemiLattStr ;
attr a1 is meet-idempotent means :Def9: :: SHEFFER1:def 9
for b1 being Element of a1 holds b1 "/\" b1 = b1;
end;

:: deftheorem Def9 defines meet-idempotent SHEFFER1:def 9 :
for b1 being non empty /\-SemiLattStr holds
( b1 is meet-idempotent iff for b2 being Element of b1 holds b2 "/\" b2 = b2 );

theorem Th9: :: SHEFFER1:9
for b1 being non empty join-commutative meet-commutative distributive upper-bounded' lower-bounded' distributive' complemented' LattStr holds b1 is meet-idempotent
proof end;

theorem Th10: :: SHEFFER1:10
for b1 being non empty join-commutative meet-commutative distributive upper-bounded' lower-bounded' distributive' complemented' LattStr holds b1 is join-idempotent
proof end;

theorem Th11: :: SHEFFER1:11
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' distributive' complemented' LattStr holds b1 is meet-absorbing
proof end;

theorem Th12: :: SHEFFER1:12
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr holds b1 is join-absorbing
proof end;

theorem Th13: :: SHEFFER1:13
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr holds b1 is upper-bounded
proof end;

theorem Th14: :: SHEFFER1:14
for b1 being non empty Lattice-like Boolean LattStr holds b1 is upper-bounded'
proof end;

theorem Th15: :: SHEFFER1:15
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr holds b1 is lower-bounded
proof end;

theorem Th16: :: SHEFFER1:16
for b1 being non empty Lattice-like Boolean LattStr holds b1 is lower-bounded'
proof end;

theorem Th17: :: SHEFFER1:17
for b1 being non empty join-commutative meet-commutative meet-absorbing join-absorbing distributive join-idempotent LattStr holds b1 is join-associative
proof end;

theorem Th18: :: SHEFFER1:18
for b1 being non empty join-commutative meet-commutative meet-absorbing join-absorbing join-idempotent distributive' LattStr holds b1 is meet-associative
proof end;

theorem Th19: :: SHEFFER1:19
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr holds Top b1 = Top' b1
proof end;

theorem Th20: :: SHEFFER1:20
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr holds Bottom b1 = Bot' b1
proof end;

theorem Th21: :: SHEFFER1:21
for b1 being non empty Lattice-like Boolean distributive' LattStr holds Top b1 = Top' b1
proof end;

theorem Th22: :: SHEFFER1:22
for b1 being non empty Lattice-like distributive lower-bounded upper-bounded complemented Boolean distributive' LattStr holds Bottom b1 = Bot' b1
proof end;

theorem Th23: :: SHEFFER1:23
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr
for b2, b3 being Element of b1 holds
( b2 is_a_complement'_of b3 iff b2 is_a_complement_of b3 )
proof end;

theorem Th24: :: SHEFFER1:24
for b1 being non empty join-commutative meet-commutative distributive join-idempotent upper-bounded' lower-bounded' distributive' complemented' LattStr holds b1 is complemented
proof end;

theorem Th25: :: SHEFFER1:25
for b1 being non empty Lattice-like Boolean upper-bounded' lower-bounded' distributive' LattStr holds b1 is complemented'
proof end;

theorem Th26: :: SHEFFER1:26
for b1 being non empty LattStr holds
( b1 is Boolean Lattice iff ( b1 is lower-bounded' & b1 is upper-bounded' & b1 is join-commutative & b1 is meet-commutative & b1 is distributive & b1 is distributive' & b1 is complemented' ) )
proof end;

registration
cluster non empty Lattice-like Boolean -> non empty join-commutative meet-commutative distributive upper-bounded' lower-bounded' distributive' complemented' LattStr ;
coherence
for b1 being non empty LattStr st b1 is Boolean & b1 is Lattice-like holds
( b1 is lower-bounded' & b1 is upper-bounded' & b1 is complemented' & b1 is join-commutative & b1 is meet-commutative & b1 is distributive & b1 is distributive' )
by Th26;
cluster non empty join-commutative meet-commutative distributive upper-bounded' lower-bounded' distributive' complemented' -> non empty Lattice-like Boolean LattStr ;
coherence
for b1 being non empty LattStr st b1 is lower-bounded' & b1 is upper-bounded' & b1 is complemented' & b1 is join-commutative & b1 is meet-commutative & b1 is distributive & b1 is distributive' holds
( b1 is Boolean & b1 is Lattice-like )
by Th26;
end;

definition
attr a1 is strict;
struct ShefferStr -> 1-sorted ;
aggr ShefferStr(# carrier, stroke #) -> ShefferStr ;
sel stroke c1 -> BinOp of the carrier of a1;
end;

definition
attr a1 is strict;
struct ShefferLattStr -> ShefferStr , LattStr ;
aggr ShefferLattStr(# carrier, L_join, L_meet, stroke #) -> ShefferLattStr ;
end;

definition
attr a1 is strict;
struct ShefferOrthoLattStr -> ShefferStr , OrthoLattStr ;
aggr ShefferOrthoLattStr(# carrier, L_join, L_meet, Compl, stroke #) -> ShefferOrthoLattStr ;
end;

definition
func TrivShefferOrthoLattStr -> ShefferOrthoLattStr equals :: SHEFFER1:def 10
ShefferOrthoLattStr(# {{} },op2 ,op2 ,op1 ,op2 #);
coherence
ShefferOrthoLattStr(# {{} },op2 ,op2 ,op1 ,op2 #) is ShefferOrthoLattStr
;
end;

:: deftheorem Def10 defines TrivShefferOrthoLattStr SHEFFER1:def 10 :
TrivShefferOrthoLattStr = ShefferOrthoLattStr(# {{} },op2 ,op2 ,op1 ,op2 #);

registration
cluster non empty ShefferStr ;
existence
not for b1 being ShefferStr holds b1 is empty
proof end;
cluster non empty ShefferLattStr ;
existence
not for b1 being ShefferLattStr holds b1 is empty
proof end;
cluster non empty ShefferOrthoLattStr ;
existence
not for b1 being ShefferOrthoLattStr holds b1 is empty
proof end;
end;

definition
let c1 be non empty ShefferStr ;
let c2, c3 be Element of c1;
func c2 | c3 -> Element of a1 equals :: SHEFFER1:def 11
the stroke of a1 . a2,a3;
coherence
the stroke of c1 . c2,c3 is Element of c1
;
end;

:: deftheorem Def11 defines | SHEFFER1:def 11 :
for b1 being non empty ShefferStr
for b2, b3 being Element of b1 holds b2 | b3 = the stroke of b1 . b2,b3;

definition
let c1 be non empty ShefferOrthoLattStr ;
attr a1 is properly_defined means :Def12: :: SHEFFER1:def 12
( ( for b1 being Element of a1 holds b1 | b1 = b1 ` ) & ( for b1, b2 being Element of a1 holds b1 "\/" b2 = (b1 | b1) | (b2 | b2) ) & ( for b1, b2 being Element of a1 holds b1 "/\" b2 = (b1 | b2) | (b1 | b2) ) & ( for b1, b2 being Element of a1 holds b1 | b2 = (b1 ` ) + (b2 ` ) ) );
end;

:: deftheorem Def12 defines properly_defined SHEFFER1:def 12 :
for b1 being non empty ShefferOrthoLattStr holds
( b1 is properly_defined iff ( ( for b2 being Element of b1 holds b2 | b2 = b2 ` ) & ( for b2, b3 being Element of b1 holds b2 "\/" b3 = (b2 | b2) | (b3 | b3) ) & ( for b2, b3 being Element of b1 holds b2 "/\" b3 = (b2 | b3) | (b2 | b3) ) & ( for b2, b3 being Element of b1 holds b2 | b3 = (b2 ` ) + (b3 ` ) ) ) );

definition
let c1 be non empty ShefferStr ;
attr a1 is satisfying_Sheffer_1 means :Def13: :: SHEFFER1:def 13
for b1 being Element of a1 holds (b1 | b1) | (b1 | b1) = b1;
attr a1 is satisfying_Sheffer_2 means :Def14: :: SHEFFER1:def 14
for b1, b2 being Element of a1 holds b1 | (b2 | (b2 | b2)) = b1 | b1;
attr a1 is satisfying_Sheffer_3 means :Def15: :: SHEFFER1:def 15
for b1, b2, b3 being Element of a1 holds (b1 | (b2 | b3)) | (b1 | (b2 | b3)) = ((b2 | b2) | b1) | ((b3 | b3) | b1);
end;

:: deftheorem Def13 defines satisfying_Sheffer_1 SHEFFER1:def 13 :
for b1 being non empty ShefferStr holds
( b1 is satisfying_Sheffer_1 iff for b2 being Element of b1 holds (b2 | b2) | (b2 | b2) = b2 );

:: deftheorem Def14 defines satisfying_Sheffer_2 SHEFFER1:def 14 :
for b1 being non empty ShefferStr holds
( b1 is satisfying_Sheffer_2 iff for b2, b3 being Element of b1 holds b2 | (b3 | (b3 | b3)) = b2 | b2 );

:: deftheorem Def15 defines satisfying_Sheffer_3 SHEFFER1:def 15 :
for b1 being non empty ShefferStr holds
( b1 is satisfying_Sheffer_3 iff for b2, b3, b4 being Element of b1 holds (b2 | (b3 | b4)) | (b2 | (b3 | b4)) = ((b3 | b3) | b2) | ((b4 | b4) | b2) );

registration
cluster non empty trivial -> non empty satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferStr ;
coherence
for b1 being non empty ShefferStr st b1 is trivial holds
( b1 is satisfying_Sheffer_1 & b1 is satisfying_Sheffer_2 & b1 is satisfying_Sheffer_3 )
proof end;
end;

registration
cluster non empty trivial -> non empty join-commutative join-associative \/-SemiLattStr ;
coherence
for b1 being non empty \/-SemiLattStr st b1 is trivial holds
( b1 is join-commutative & b1 is join-associative )
proof end;
cluster non empty trivial -> non empty meet-commutative meet-associative /\-SemiLattStr ;
coherence
for b1 being non empty /\-SemiLattStr st b1 is trivial holds
( b1 is meet-commutative & b1 is meet-associative )
proof end;
end;

registration
cluster non empty trivial -> non empty meet-absorbing join-absorbing Boolean LattStr ;
coherence
for b1 being non empty LattStr st b1 is trivial holds
( b1 is join-absorbing & b1 is meet-absorbing & b1 is Boolean )
proof end;
end;

registration
cluster TrivShefferOrthoLattStr -> non empty ;
coherence
not TrivShefferOrthoLattStr is empty
by STRUCT_0:def 1;
cluster TrivShefferOrthoLattStr -> trivial ;
coherence
TrivShefferOrthoLattStr is trivial
by REALSET2:def 5;
cluster TrivShefferOrthoLattStr -> well-complemented properly_defined ;
coherence
( TrivShefferOrthoLattStr is properly_defined & TrivShefferOrthoLattStr is well-complemented )
proof end;
end;

registration
cluster non empty join-commutative meet-commutative Lattice-like distributive Boolean well-complemented upper-bounded' lower-bounded' distributive' complemented' properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr ;
existence
ex b1 being non empty ShefferOrthoLattStr st
( b1 is properly_defined & b1 is Boolean & b1 is well-complemented & b1 is Lattice-like & b1 is satisfying_Sheffer_1 & b1 is satisfying_Sheffer_2 & b1 is satisfying_Sheffer_3 )
proof end;
end;

theorem Th27: :: SHEFFER1:27
for b1 being non empty Lattice-like Boolean well-complemented properly_defined ShefferOrthoLattStr holds b1 is satisfying_Sheffer_1
proof end;

theorem Th28: :: SHEFFER1:28
for b1 being non empty Lattice-like Boolean well-complemented properly_defined ShefferOrthoLattStr holds b1 is satisfying_Sheffer_2
proof end;

theorem Th29: :: SHEFFER1:29
for b1 being non empty Lattice-like Boolean well-complemented properly_defined ShefferOrthoLattStr holds b1 is satisfying_Sheffer_3
proof end;

definition
let c1 be non empty ShefferStr ;
let c2 be Element of c1;
func c2 " -> Element of a1 equals :: SHEFFER1:def 16
a2 | a2;
coherence
c2 | c2 is Element of c1
;
end;

:: deftheorem Def16 defines " SHEFFER1:def 16 :
for b1 being non empty ShefferStr
for b2 being Element of b1 holds b2 " = b2 | b2;

theorem Th30: :: SHEFFER1:30
for b1 being non empty satisfying_Sheffer_3 ShefferOrthoLattStr
for b2, b3, b4 being Element of b1 holds (b2 | (b3 | b4)) " = ((b3 " ) | b2) | ((b4 " ) | b2) by Def15;

theorem Th31: :: SHEFFER1:31
for b1 being non empty satisfying_Sheffer_1 ShefferOrthoLattStr
for b2 being Element of b1 holds b2 = (b2 " ) " by Def13;

theorem Th32: :: SHEFFER1:32
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr
for b2, b3 being Element of b1 holds b2 | b3 = b3 | b2
proof end;

theorem Th33: :: SHEFFER1:33
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr
for b2, b3 being Element of b1 holds b2 | (b2 | b2) = b3 | (b3 | b3)
proof end;

theorem Th34: :: SHEFFER1:34
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr holds b1 is join-commutative
proof end;

theorem Th35: :: SHEFFER1:35
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr holds b1 is meet-commutative
proof end;

theorem Th36: :: SHEFFER1:36
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr holds b1 is distributive
proof end;

theorem Th37: :: SHEFFER1:37
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr holds b1 is distributive'
proof end;

theorem Th38: :: SHEFFER1:38
for b1 being non empty properly_defined satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 ShefferOrthoLattStr holds b1 is Boolean Lattice
proof end;