:: Axiomatization of {B}oolean Algebras Based on Sheffer Stroke :: by Violetta Kozarkiewicz and Adam Grabowski :: :: Received May 31, 2004 :: Copyright (c) 2004-2021 Association of Mizar Users :: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland). :: This code can be distributed under the GNU General Public Licence :: version 3.0 or later, or the Creative Commons Attribution-ShareAlike :: License version 3.0 or later, subject to the binding interpretation :: detailed in file COPYING.interpretation. :: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these :: licenses, or see http://www.gnu.org/licenses/gpl.html and :: http://creativecommons.org/licenses/by-sa/3.0/. environ vocabularies LATTICES, ROBBINS1, XBOOLE_0, SUBSET_1, ARYTM_3, EQREL_1, STRUCT_0, BINOP_1, FUNCT_5, RELAT_1, FUNCT_1, SHEFFER1, CARD_1; notations TARSKI, XBOOLE_0, FUNCT_5, ORDINAL1, CARD_1, STRUCT_0, LATTICES, BINOP_1, ROBBINS1; constructors BINOP_1, ROBBINS1, FUNCT_5; registrations LATTICES, LATTICE6, ROBBINS1, CARD_1, STRUCT_0; begin :: Preliminaries theorem :: SHEFFER1:1 for L being join-commutative join-associative Huntington non empty ComplLLattStr, a, b being Element of L holds (a + b)` = a` *' b`; begin :: Huntington's First Axiomatization of Boolean Algebras definition let IT be non empty LattStr; attr IT is upper-bounded' means :: SHEFFER1:def 1 ex c being Element of IT st for a being Element of IT holds c "/\" a = a & a "/\" c = a; end; definition let L be non empty LattStr; assume L is upper-bounded'; func Top' L -> Element of L means :: SHEFFER1:def 2 for a being Element of L holds it "/\" a = a & a "/\" it = a; end; definition let IT be non empty LattStr; attr IT is lower-bounded' means :: SHEFFER1:def 3 ex c being Element of IT st for a being Element of IT holds c "\/" a = a & a "\/" c = a; end; definition let L be non empty LattStr; assume L is lower-bounded'; func Bot' L -> Element of L means :: SHEFFER1:def 4 for a being Element of L holds it "\/" a = a & a "\/" it = a; end; definition let IT be non empty LattStr; attr IT is distributive' means :: SHEFFER1:def 5 for a, b, c being Element of IT holds a "\/" (b "/\" c) = (a "\/" b) "/\" (a "\/" c); end; definition let L be non empty LattStr, a, b be Element of L; pred a is_a_complement'_of b means :: SHEFFER1:def 6 b "\/" a = Top' L & a "\/" b = Top' L & b "/\" a = Bot' L & a "/\" b = Bot' L; end; definition let IT be non empty LattStr; attr IT is complemented' means :: SHEFFER1:def 7 for b being Element of IT ex a being Element of IT st a is_a_complement'_of b; end; definition let L be non empty LattStr, x be Element of L; assume L is complemented' distributive upper-bounded' meet-commutative; func x `# -> Element of L means :: SHEFFER1:def 8 it is_a_complement'_of x; end; registration cluster Boolean join-idempotent upper-bounded' complemented' distributive' lower-bounded' Lattice-like for 1-element LattStr; end; theorem :: SHEFFER1:2 for L being complemented' join-commutative meet-commutative distributive upper-bounded' distributive' non empty LattStr for x be Element of L holds x "\/" x `# = Top' L; theorem :: SHEFFER1:3 for L being complemented' join-commutative meet-commutative distributive upper-bounded' distributive' non empty LattStr for x being Element of L holds x "/\" x `# = Bot' L; theorem :: SHEFFER1:4 for L being complemented' join-commutative meet-commutative join-idempotent distributive upper-bounded' distributive' non empty LattStr for x being Element of L holds x "\/" Top' L = Top' L; theorem :: SHEFFER1:5 for L being complemented' join-commutative meet-commutative join-idempotent distributive upper-bounded' lower-bounded' distributive' non empty LattStr for x being Element of L holds x "/\" Bot' L = Bot' L; theorem :: SHEFFER1:6 for L being join-commutative meet-absorbing meet-commutative join-absorbing join-idempotent distributive non empty LattStr for x, y, z being Element of L holds ((x "\/" y) "\/" z) "/\" x = x; theorem :: SHEFFER1:7 for L being join-commutative meet-absorbing meet-commutative join-absorbing join-idempotent distributive' non empty LattStr for x, y, z being Element of L holds ((x "/\" y) "/\" z) "\/" x = x; definition let G be non empty /\-SemiLattStr; attr G is meet-idempotent means :: SHEFFER1:def 9 for x being Element of G holds x "/\" x = x; end; theorem :: SHEFFER1:8 for L being complemented' join-commutative meet-commutative distributive upper-bounded' lower-bounded' distributive' non empty LattStr holds L is meet-idempotent; theorem :: SHEFFER1:9 for L being complemented' join-commutative meet-commutative distributive upper-bounded' lower-bounded' distributive' non empty LattStr holds L is join-idempotent; theorem :: SHEFFER1:10 for L being complemented' join-commutative meet-commutative join-idempotent distributive upper-bounded' distributive' non empty LattStr holds L is meet-absorbing; theorem :: SHEFFER1:11 for L being complemented' join-commutative upper-bounded' meet-commutative join-idempotent distributive distributive' lower-bounded' non empty LattStr holds L is join-absorbing; theorem :: SHEFFER1:12 for L being complemented' join-commutative meet-commutative upper-bounded' lower-bounded' join-idempotent distributive distributive' non empty LattStr holds L is upper-bounded; theorem :: SHEFFER1:13 for L being Boolean Lattice-like non empty LattStr holds L is upper-bounded'; theorem :: SHEFFER1:14 for L being complemented' join-commutative meet-commutative upper-bounded' lower-bounded' join-idempotent distributive distributive' non empty LattStr holds L is lower-bounded; theorem :: SHEFFER1:15 for L being Boolean Lattice-like non empty LattStr holds L is lower-bounded'; theorem :: SHEFFER1:16 for L being join-commutative meet-commutative meet-absorbing join-absorbing join-idempotent distributive non empty LattStr holds L is join-associative; theorem :: SHEFFER1:17 for L being join-commutative meet-commutative meet-absorbing join-absorbing join-idempotent distributive' non empty LattStr holds L is meet-associative; theorem :: SHEFFER1:18 for L being complemented' join-commutative meet-commutative lower-bounded' upper-bounded' join-idempotent distributive distributive' non empty LattStr holds Top L = Top' L; theorem :: SHEFFER1:19 for L being complemented' join-commutative meet-commutative lower-bounded' upper-bounded' join-idempotent distributive distributive' non empty LattStr holds Bottom L = Bot' L; theorem :: SHEFFER1:20 for L being Boolean distributive' Lattice-like non empty LattStr holds Top L = Top' L; theorem :: SHEFFER1:21 for L being Boolean complemented lower-bounded upper-bounded distributive distributive' Lattice-like non empty LattStr holds Bottom L = Bot' L; theorem :: SHEFFER1:22 for L being complemented' lower-bounded' upper-bounded' join-commutative meet-commutative join-idempotent distributive distributive' non empty LattStr, x, y being Element of L holds x is_a_complement'_of y iff x is_a_complement_of y; theorem :: SHEFFER1:23 for L being complemented' join-commutative meet-commutative lower-bounded' upper-bounded' join-idempotent distributive distributive' non empty LattStr holds L is complemented; theorem :: SHEFFER1:24 for L being Boolean lower-bounded' upper-bounded' distributive' Lattice-like non empty LattStr holds L is complemented'; theorem :: SHEFFER1:25 for L being non empty LattStr holds L is Boolean Lattice iff L is lower-bounded' upper-bounded' join-commutative meet-commutative distributive distributive' complemented'; registration cluster Boolean Lattice-like -> lower-bounded' upper-bounded' complemented' join-commutative meet-commutative distributive distributive' for non empty LattStr; cluster lower-bounded' upper-bounded' complemented' join-commutative meet-commutative distributive distributive' -> Boolean Lattice-like for non empty LattStr; end; begin :: Axiomatization Based on Sheffer Stroke definition struct (1-sorted) ShefferStr (# carrier -> set, stroke -> BinOp of the carrier #); end; definition struct (ShefferStr,LattStr) ShefferLattStr (# carrier -> set, L_join -> BinOp of the carrier, L_meet -> BinOp of the carrier, stroke -> BinOp of the carrier #); end; definition struct (ShefferStr,OrthoLattStr) ShefferOrthoLattStr (# carrier -> set, L_join -> BinOp of the carrier, L_meet -> BinOp of the carrier, Compl -> UnOp of the carrier, stroke -> BinOp of the carrier #); end; definition func TrivShefferOrthoLattStr -> ShefferOrthoLattStr equals :: SHEFFER1:def 10 ShefferOrthoLattStr (# {0}, op2, op2, op1, op2 #); end; registration cluster 1-element for ShefferStr; cluster 1-element for ShefferLattStr; cluster 1-element for ShefferOrthoLattStr; end; definition let L be non empty ShefferStr; let x, y be Element of L; func x | y -> Element of L equals :: SHEFFER1:def 11 (the stroke of L).(x,y); end; definition let L be non empty ShefferOrthoLattStr; attr L is properly_defined means :: SHEFFER1:def 12 (for x being Element of L holds x | x = x`) & (for x, y being Element of L holds x "\/" y = (x | x) | (y | y)) & ( for x, y being Element of L holds x "/\" y = (x | y) | (x | y)) & for x, y being Element of L holds x | y = x` + y`; end; definition let L be non empty ShefferStr; attr L is satisfying_Sheffer_1 means :: SHEFFER1:def 13 for x being Element of L holds (x | x) | (x | x) = x; attr L is satisfying_Sheffer_2 means :: SHEFFER1:def 14 for x, y being Element of L holds x | (y | (y | y)) = x | x; attr L is satisfying_Sheffer_3 means :: SHEFFER1:def 15 for x, y, z being Element of L holds (x | (y | z)) | (x | (y | z)) = ((y | y) | x) | ((z | z) | x); end; registration cluster -> satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 for 1-element ShefferStr; end; registration cluster -> join-commutative join-associative for 1-element \/-SemiLattStr; cluster -> meet-commutative meet-associative for 1-element /\-SemiLattStr; end; registration cluster -> join-absorbing meet-absorbing Boolean for 1-element LattStr; end; registration cluster TrivShefferOrthoLattStr -> 1-element; cluster TrivShefferOrthoLattStr -> properly_defined well-complemented; end; registration cluster properly_defined Boolean well-complemented Lattice-like satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 for non empty ShefferOrthoLattStr; end; theorem :: SHEFFER1:26 for L being properly_defined Boolean well-complemented Lattice-like non empty ShefferOrthoLattStr holds L is satisfying_Sheffer_1; theorem :: SHEFFER1:27 for L being properly_defined Boolean well-complemented Lattice-like non empty ShefferOrthoLattStr holds L is satisfying_Sheffer_2; theorem :: SHEFFER1:28 for L being properly_defined Boolean well-complemented Lattice-like non empty ShefferOrthoLattStr holds L is satisfying_Sheffer_3; definition let L be non empty ShefferStr; let a be Element of L; func a" -> Element of L equals :: SHEFFER1:def 16 a | a; end; theorem :: SHEFFER1:29 for L being satisfying_Sheffer_3 non empty ShefferOrthoLattStr, x, y , z being Element of L holds (x | (y | z))" = (y" | x) | (z" | x); theorem :: SHEFFER1:30 for L being satisfying_Sheffer_1 non empty ShefferOrthoLattStr, x being Element of L holds x = (x")"; theorem :: SHEFFER1:31 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr, x, y being Element of L holds x | y = y | x; theorem :: SHEFFER1:32 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr, x, y being Element of L holds x | (x | x) = y | (y | y); theorem :: SHEFFER1:33 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr holds L is join-commutative; theorem :: SHEFFER1:34 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr holds L is meet-commutative; theorem :: SHEFFER1:35 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr holds L is distributive; theorem :: SHEFFER1:36 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr holds L is distributive'; theorem :: SHEFFER1:37 for L being satisfying_Sheffer_1 satisfying_Sheffer_2 satisfying_Sheffer_3 properly_defined non empty ShefferOrthoLattStr holds L is Boolean Lattice;