:: INTPRO_1 semantic presentation

definition
let c1 be set ;
attr a1 is with_FALSUM means :Def1: :: INTPRO_1:def 1
<*0*> in a1;
end;

:: deftheorem Def1 defines with_FALSUM INTPRO_1:def 1 :
for b1 being set holds
( b1 is with_FALSUM iff <*0*> in b1 );

definition
let c1 be set ;
attr a1 is with_int_implication means :Def2: :: INTPRO_1:def 2
for b1, b2 being FinSequence st b1 in a1 & b2 in a1 holds
(<*1*> ^ b1) ^ b2 in a1;
end;

:: deftheorem Def2 defines with_int_implication INTPRO_1:def 2 :
for b1 being set holds
( b1 is with_int_implication iff for b2, b3 being FinSequence st b2 in b1 & b3 in b1 holds
(<*1*> ^ b2) ^ b3 in b1 );

definition
let c1 be set ;
attr a1 is with_int_conjunction means :Def3: :: INTPRO_1:def 3
for b1, b2 being FinSequence st b1 in a1 & b2 in a1 holds
(<*2*> ^ b1) ^ b2 in a1;
end;

:: deftheorem Def3 defines with_int_conjunction INTPRO_1:def 3 :
for b1 being set holds
( b1 is with_int_conjunction iff for b2, b3 being FinSequence st b2 in b1 & b3 in b1 holds
(<*2*> ^ b2) ^ b3 in b1 );

definition
let c1 be set ;
attr a1 is with_int_disjunction means :Def4: :: INTPRO_1:def 4
for b1, b2 being FinSequence st b1 in a1 & b2 in a1 holds
(<*3*> ^ b1) ^ b2 in a1;
end;

:: deftheorem Def4 defines with_int_disjunction INTPRO_1:def 4 :
for b1 being set holds
( b1 is with_int_disjunction iff for b2, b3 being FinSequence st b2 in b1 & b3 in b1 holds
(<*3*> ^ b2) ^ b3 in b1 );

definition
let c1 be set ;
attr a1 is with_int_propositional_variables means :Def5: :: INTPRO_1:def 5
for b1 being Nat holds <*(5 + (2 * b1))*> in a1;
end;

:: deftheorem Def5 defines with_int_propositional_variables INTPRO_1:def 5 :
for b1 being set holds
( b1 is with_int_propositional_variables iff for b2 being Nat holds <*(5 + (2 * b2))*> in b1 );

definition
let c1 be set ;
attr a1 is with_modal_operator means :Def6: :: INTPRO_1:def 6
for b1 being FinSequence st b1 in a1 holds
<*6*> ^ b1 in a1;
end;

:: deftheorem Def6 defines with_modal_operator INTPRO_1:def 6 :
for b1 being set holds
( b1 is with_modal_operator iff for b2 being FinSequence st b2 in b1 holds
<*6*> ^ b2 in b1 );

definition
let c1 be set ;
attr a1 is MC-closed means :Def7: :: INTPRO_1:def 7
( a1 c= NAT * & a1 is with_FALSUM & a1 is with_int_implication & a1 is with_int_conjunction & a1 is with_int_disjunction & a1 is with_int_propositional_variables & a1 is with_modal_operator );
end;

:: deftheorem Def7 defines MC-closed INTPRO_1:def 7 :
for b1 being set holds
( b1 is MC-closed iff ( b1 c= NAT * & b1 is with_FALSUM & b1 is with_int_implication & b1 is with_int_conjunction & b1 is with_int_disjunction & b1 is with_int_propositional_variables & b1 is with_modal_operator ) );

Lemma8: for b1 being set st b1 is MC-closed holds
not b1 is empty
proof end;

registration
cluster MC-closed -> non empty with_FALSUM with_int_implication with_int_conjunction with_int_disjunction with_int_propositional_variables with_modal_operator set ;
coherence
for b1 being set st b1 is MC-closed holds
( b1 is with_FALSUM & b1 is with_int_implication & b1 is with_int_conjunction & b1 is with_int_disjunction & b1 is with_int_propositional_variables & b1 is with_modal_operator & not b1 is empty )
by Def7, Lemma8;
cluster with_FALSUM with_int_implication with_int_conjunction with_int_disjunction with_int_propositional_variables with_modal_operator -> MC-closed Element of K40((NAT * ));
coherence
for b1 being Subset of (NAT * ) st b1 is with_FALSUM & b1 is with_int_implication & b1 is with_int_conjunction & b1 is with_int_disjunction & b1 is with_int_propositional_variables & b1 is with_modal_operator holds
b1 is MC-closed
by Def7;
end;

definition
func MC-wff -> set means :Def8: :: INTPRO_1:def 8
( a1 is MC-closed & ( for b1 being set st b1 is MC-closed holds
a1 c= b1 ) );
existence
ex b1 being set st
( b1 is MC-closed & ( for b2 being set st b2 is MC-closed holds
b1 c= b2 ) )
proof end;
uniqueness
for b1, b2 being set st b1 is MC-closed & ( for b3 being set st b3 is MC-closed holds
b1 c= b3 ) & b2 is MC-closed & ( for b3 being set st b3 is MC-closed holds
b2 c= b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines MC-wff INTPRO_1:def 8 :
for b1 being set holds
( b1 = MC-wff iff ( b1 is MC-closed & ( for b2 being set st b2 is MC-closed holds
b1 c= b2 ) ) );

registration
cluster MC-wff -> non empty with_FALSUM with_int_implication with_int_conjunction with_int_disjunction with_int_propositional_variables with_modal_operator MC-closed ;
coherence
MC-wff is MC-closed
by Def8;
end;

registration
cluster non empty with_FALSUM with_int_implication with_int_conjunction with_int_disjunction with_int_propositional_variables with_modal_operator MC-closed set ;
existence
ex b1 being set st
( b1 is MC-closed & not b1 is empty )
proof end;
end;

registration
cluster MC-wff -> non empty functional with_FALSUM with_int_implication with_int_conjunction with_int_disjunction with_int_propositional_variables with_modal_operator MC-closed ;
coherence
MC-wff is functional
proof end;
end;

registration
cluster -> FinSequence-like Element of MC-wff ;
coherence
for b1 being Element of MC-wff holds b1 is FinSequence-like
proof end;
end;

definition
mode MC-formula is Element of MC-wff ;
end;

definition
func FALSUM -> MC-formula equals :: INTPRO_1:def 9
<*0*>;
correctness
coherence
<*0*> is MC-formula
;
by Def1;
let c1, c2 be Element of MC-wff ;
func c1 => c2 -> MC-formula equals :: INTPRO_1:def 10
(<*1*> ^ a1) ^ a2;
correctness
coherence
(<*1*> ^ c1) ^ c2 is MC-formula
;
by Def2;
func c1 '&' c2 -> MC-formula equals :: INTPRO_1:def 11
(<*2*> ^ a1) ^ a2;
correctness
coherence
(<*2*> ^ c1) ^ c2 is MC-formula
;
by Def3;
func c1 'or' c2 -> MC-formula equals :: INTPRO_1:def 12
(<*3*> ^ a1) ^ a2;
correctness
coherence
(<*3*> ^ c1) ^ c2 is MC-formula
;
by Def4;
end;

:: deftheorem Def9 defines FALSUM INTPRO_1:def 9 :
FALSUM = <*0*>;

:: deftheorem Def10 defines => INTPRO_1:def 10 :
for b1, b2 being Element of MC-wff holds b1 => b2 = (<*1*> ^ b1) ^ b2;

:: deftheorem Def11 defines '&' INTPRO_1:def 11 :
for b1, b2 being Element of MC-wff holds b1 '&' b2 = (<*2*> ^ b1) ^ b2;

:: deftheorem Def12 defines 'or' INTPRO_1:def 12 :
for b1, b2 being Element of MC-wff holds b1 'or' b2 = (<*3*> ^ b1) ^ b2;

definition
let c1 be Element of MC-wff ;
func Nes c1 -> MC-formula equals :: INTPRO_1:def 13
<*6*> ^ a1;
correctness
coherence
<*6*> ^ c1 is MC-formula
;
by Def6;
end;

:: deftheorem Def13 defines Nes INTPRO_1:def 13 :
for b1 being Element of MC-wff holds Nes b1 = <*6*> ^ b1;

definition
let c1 be Subset of MC-wff ;
attr a1 is IPC_theory means :Def14: :: INTPRO_1:def 14
for b1, b2, b3 being Element of MC-wff holds
( b1 => (b2 => b1) in a1 & (b1 => (b2 => b3)) => ((b1 => b2) => (b1 => b3)) in a1 & (b1 '&' b2) => b1 in a1 & (b1 '&' b2) => b2 in a1 & b1 => (b2 => (b1 '&' b2)) in a1 & b1 => (b1 'or' b2) in a1 & b2 => (b1 'or' b2) in a1 & (b1 => b3) => ((b2 => b3) => ((b1 'or' b2) => b3)) in a1 & FALSUM => b1 in a1 & ( b1 in a1 & b1 => b2 in a1 implies b2 in a1 ) );
correctness
;
end;

:: deftheorem Def14 defines IPC_theory INTPRO_1:def 14 :
for b1 being Subset of MC-wff holds
( b1 is IPC_theory iff for b2, b3, b4 being Element of MC-wff holds
( b2 => (b3 => b2) in b1 & (b2 => (b3 => b4)) => ((b2 => b3) => (b2 => b4)) in b1 & (b2 '&' b3) => b2 in b1 & (b2 '&' b3) => b3 in b1 & b2 => (b3 => (b2 '&' b3)) in b1 & b2 => (b2 'or' b3) in b1 & b3 => (b2 'or' b3) in b1 & (b2 => b4) => ((b3 => b4) => ((b2 'or' b3) => b4)) in b1 & FALSUM => b2 in b1 & ( b2 in b1 & b2 => b3 in b1 implies b3 in b1 ) ) );

definition
let c1 be Subset of MC-wff ;
func CnIPC c1 -> Subset of MC-wff means :Def15: :: INTPRO_1:def 15
for b1 being Element of MC-wff holds
( b1 in a2 iff for b2 being Subset of MC-wff st b2 is IPC_theory & a1 c= b2 holds
b1 in b2 );
existence
ex b1 being Subset of MC-wff st
for b2 being Element of MC-wff holds
( b2 in b1 iff for b3 being Subset of MC-wff st b3 is IPC_theory & c1 c= b3 holds
b2 in b3 )
proof end;
uniqueness
for b1, b2 being Subset of MC-wff st ( for b3 being Element of MC-wff holds
( b3 in b1 iff for b4 being Subset of MC-wff st b4 is IPC_theory & c1 c= b4 holds
b3 in b4 ) ) & ( for b3 being Element of MC-wff holds
( b3 in b2 iff for b4 being Subset of MC-wff st b4 is IPC_theory & c1 c= b4 holds
b3 in b4 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def15 defines CnIPC INTPRO_1:def 15 :
for b1, b2 being Subset of MC-wff holds
( b2 = CnIPC b1 iff for b3 being Element of MC-wff holds
( b3 in b2 iff for b4 being Subset of MC-wff st b4 is IPC_theory & b1 c= b4 holds
b3 in b4 ) );

definition
func IPC-Taut -> Subset of MC-wff equals :: INTPRO_1:def 16
CnIPC ({} MC-wff );
correctness
coherence
CnIPC ({} MC-wff ) is Subset of MC-wff
;
;
end;

:: deftheorem Def16 defines IPC-Taut INTPRO_1:def 16 :
IPC-Taut = CnIPC ({} MC-wff );

definition
let c1 be Element of MC-wff ;
func neg c1 -> MC-formula equals :: INTPRO_1:def 17
a1 => FALSUM ;
correctness
coherence
c1 => FALSUM is MC-formula
;
;
end;

:: deftheorem Def17 defines neg INTPRO_1:def 17 :
for b1 being Element of MC-wff holds neg b1 = b1 => FALSUM ;

definition
func IVERUM -> MC-formula equals :: INTPRO_1:def 18
FALSUM => FALSUM ;
correctness
coherence
FALSUM => FALSUM is MC-formula
;
;
end;

:: deftheorem Def18 defines IVERUM INTPRO_1:def 18 :
IVERUM = FALSUM => FALSUM ;

theorem Th1: :: INTPRO_1:1
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds b2 => (b3 => b2) in CnIPC b1
proof end;

theorem Th2: :: INTPRO_1:2
for b1 being Subset of MC-wff
for b2, b3, b4 being Element of MC-wff holds (b2 => (b3 => b4)) => ((b2 => b3) => (b2 => b4)) in CnIPC b1
proof end;

theorem Th3: :: INTPRO_1:3
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds (b2 '&' b3) => b2 in CnIPC b1
proof end;

theorem Th4: :: INTPRO_1:4
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds (b2 '&' b3) => b3 in CnIPC b1
proof end;

theorem Th5: :: INTPRO_1:5
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds b2 => (b3 => (b2 '&' b3)) in CnIPC b1
proof end;

theorem Th6: :: INTPRO_1:6
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds b2 => (b2 'or' b3) in CnIPC b1
proof end;

theorem Th7: :: INTPRO_1:7
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds b2 => (b3 'or' b2) in CnIPC b1
proof end;

theorem Th8: :: INTPRO_1:8
for b1 being Subset of MC-wff
for b2, b3, b4 being Element of MC-wff holds (b2 => b3) => ((b4 => b3) => ((b2 'or' b4) => b3)) in CnIPC b1
proof end;

theorem Th9: :: INTPRO_1:9
for b1 being Subset of MC-wff
for b2 being Element of MC-wff holds FALSUM => b2 in CnIPC b1
proof end;

theorem Th10: :: INTPRO_1:10
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff st b2 in CnIPC b1 & b2 => b3 in CnIPC b1 holds
b3 in CnIPC b1
proof end;

theorem Th11: :: INTPRO_1:11
for b1, b2 being Subset of MC-wff st b1 is IPC_theory & b2 c= b1 holds
CnIPC b2 c= b1
proof end;

theorem Th12: :: INTPRO_1:12
for b1 being Subset of MC-wff holds b1 c= CnIPC b1
proof end;

theorem Th13: :: INTPRO_1:13
for b1, b2 being Subset of MC-wff st b1 c= b2 holds
CnIPC b1 c= CnIPC b2
proof end;

Lemma25: for b1 being Subset of MC-wff holds CnIPC (CnIPC b1) c= CnIPC b1
proof end;

theorem Th14: :: INTPRO_1:14
for b1 being Subset of MC-wff holds CnIPC (CnIPC b1) = CnIPC b1
proof end;

Lemma26: for b1 being Subset of MC-wff holds CnIPC b1 is IPC_theory
proof end;

registration
let c1 be Subset of MC-wff ;
cluster CnIPC a1 -> IPC_theory ;
coherence
CnIPC c1 is IPC_theory
by Lemma26;
end;

theorem Th15: :: INTPRO_1:15
for b1 being Subset of MC-wff holds
( b1 is IPC_theory iff CnIPC b1 = b1 )
proof end;

theorem Th16: :: INTPRO_1:16
for b1 being Subset of MC-wff st b1 is IPC_theory holds
IPC-Taut c= b1
proof end;

registration
cluster IPC-Taut -> IPC_theory ;
coherence
IPC-Taut is IPC_theory
;
end;

theorem Th17: :: INTPRO_1:17
for b1 being Element of MC-wff holds b1 => b1 in IPC-Taut
proof end;

theorem Th18: :: INTPRO_1:18
for b1, b2 being Element of MC-wff st b1 in IPC-Taut holds
b2 => b1 in IPC-Taut
proof end;

theorem Th19: :: INTPRO_1:19
IVERUM in IPC-Taut by Def14;

theorem Th20: :: INTPRO_1:20
for b1, b2 being Element of MC-wff holds (b1 => b2) => (b1 => b1) in IPC-Taut
proof end;

theorem Th21: :: INTPRO_1:21
for b1, b2 being Element of MC-wff holds (b1 => b2) => (b2 => b2) in IPC-Taut
proof end;

theorem Th22: :: INTPRO_1:22
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b3 => b1) => (b3 => b2)) in IPC-Taut
proof end;

theorem Th23: :: INTPRO_1:23
for b1, b2, b3 being Element of MC-wff st b1 => (b2 => b3) in IPC-Taut holds
b2 => (b1 => b3) in IPC-Taut
proof end;

theorem Th24: :: INTPRO_1:24
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b2 => b3) => (b1 => b3)) in IPC-Taut
proof end;

theorem Th25: :: INTPRO_1:25
for b1, b2, b3 being Element of MC-wff st b1 => b2 in IPC-Taut holds
(b2 => b3) => (b1 => b3) in IPC-Taut
proof end;

theorem Th26: :: INTPRO_1:26
for b1, b2, b3 being Element of MC-wff st b1 => b2 in IPC-Taut & b2 => b3 in IPC-Taut holds
b1 => b3 in IPC-Taut
proof end;

Lemma35: for b1, b2, b3, b4 being Element of MC-wff holds (((b1 => b2) => (b3 => b2)) => b4) => ((b3 => b1) => b4) in IPC-Taut
proof end;

theorem Th27: :: INTPRO_1:27
for b1, b2, b3, b4 being Element of MC-wff holds (b1 => (b2 => b3)) => ((b4 => b2) => (b1 => (b4 => b3))) in IPC-Taut
proof end;

theorem Th28: :: INTPRO_1:28
for b1, b2, b3 being Element of MC-wff holds ((b1 => b2) => b3) => (b2 => b3) in IPC-Taut
proof end;

theorem Th29: :: INTPRO_1:29
for b1, b2, b3 being Element of MC-wff holds (b1 => (b2 => b3)) => (b2 => (b1 => b3)) in IPC-Taut
proof end;

theorem Th30: :: INTPRO_1:30
for b1, b2 being Element of MC-wff holds (b1 => (b1 => b2)) => (b1 => b2) in IPC-Taut
proof end;

theorem Th31: :: INTPRO_1:31
for b1, b2 being Element of MC-wff holds b1 => ((b1 => b2) => b2) in IPC-Taut
proof end;

theorem Th32: :: INTPRO_1:32
for b1, b2, b3 being Element of MC-wff st b1 => (b2 => b3) in IPC-Taut & b2 in IPC-Taut holds
b1 => b3 in IPC-Taut
proof end;

theorem Th33: :: INTPRO_1:33
for b1 being Element of MC-wff holds b1 => (b1 '&' b1) in IPC-Taut
proof end;

theorem Th34: :: INTPRO_1:34
for b1, b2 being Element of MC-wff holds
( b1 '&' b2 in IPC-Taut iff ( b1 in IPC-Taut & b2 in IPC-Taut ) )
proof end;

theorem Th35: :: INTPRO_1:35
for b1, b2 being Element of MC-wff holds
( b1 '&' b2 in IPC-Taut iff b2 '&' b1 in IPC-Taut )
proof end;

theorem Th36: :: INTPRO_1:36
for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) => b3) => (b1 => (b2 => b3)) in IPC-Taut
proof end;

theorem Th37: :: INTPRO_1:37
for b1, b2, b3 being Element of MC-wff holds (b1 => (b2 => b3)) => ((b1 '&' b2) => b3) in IPC-Taut
proof end;

theorem Th38: :: INTPRO_1:38
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b1 => b3) => (b1 => (b2 '&' b3))) in IPC-Taut
proof end;

theorem Th39: :: INTPRO_1:39
for b1, b2 being Element of MC-wff holds ((b1 => b2) '&' b1) => b2 in IPC-Taut
proof end;

theorem Th40: :: INTPRO_1:40
for b1, b2, b3 being Element of MC-wff holds (((b1 => b2) '&' b1) '&' b3) => b2 in IPC-Taut
proof end;

theorem Th41: :: INTPRO_1:41
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b3 '&' b1) => b2) in IPC-Taut
proof end;

theorem Th42: :: INTPRO_1:42
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b1 '&' b3) => b2) in IPC-Taut
proof end;

theorem Th43: :: INTPRO_1:43
for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) => b3) => ((b1 '&' b2) => (b3 '&' b2)) in IPC-Taut
proof end;

theorem Th44: :: INTPRO_1:44
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b1 '&' b3) => (b2 '&' b3)) in IPC-Taut
proof end;

theorem Th45: :: INTPRO_1:45
for b1, b2, b3 being Element of MC-wff holds ((b1 => b2) '&' (b1 '&' b3)) => (b2 '&' b3) in IPC-Taut
proof end;

theorem Th46: :: INTPRO_1:46
for b1, b2 being Element of MC-wff holds (b1 '&' b2) => (b2 '&' b1) in IPC-Taut
proof end;

theorem Th47: :: INTPRO_1:47
for b1, b2, b3 being Element of MC-wff holds ((b1 => b2) '&' (b1 '&' b3)) => (b3 '&' b2) in IPC-Taut
proof end;

theorem Th48: :: INTPRO_1:48
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b1 '&' b3) => (b3 '&' b2)) in IPC-Taut
proof end;

theorem Th49: :: INTPRO_1:49
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b3 '&' b1) => (b3 '&' b2)) in IPC-Taut
proof end;

theorem Th50: :: INTPRO_1:50
for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => (b1 '&' (b3 '&' b2)) in IPC-Taut
proof end;

theorem Th51: :: INTPRO_1:51
for b1, b2, b3 being Element of MC-wff holds ((b1 => b2) '&' (b1 => b3)) => (b1 => (b2 '&' b3)) in IPC-Taut
proof end;

Lemma54: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => b2 in IPC-Taut
proof end;

Lemma55: for b1, b2, b3 being Element of MC-wff holds (((b1 '&' b2) '&' b3) '&' ((b1 '&' b2) '&' b3)) => (((b1 '&' b2) '&' b3) '&' b2) in IPC-Taut
proof end;

Lemma56: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => (((b1 '&' b2) '&' b3) '&' b2) in IPC-Taut
proof end;

Lemma57: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => (b1 '&' b3) in IPC-Taut
proof end;

Lemma58: for b1, b2, b3 being Element of MC-wff holds (((b1 '&' b2) '&' b3) '&' b2) => ((b1 '&' b3) '&' b2) in IPC-Taut
proof end;

Lemma59: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => ((b1 '&' b3) '&' b2) in IPC-Taut
proof end;

Lemma60: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => ((b2 '&' b1) '&' b3) in IPC-Taut
proof end;

Lemma61: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => ((b3 '&' b1) '&' b2) in IPC-Taut
proof end;

Lemma62: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => ((b3 '&' b2) '&' b1) in IPC-Taut
proof end;

Lemma63: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => (b1 '&' (b3 '&' b2)) in IPC-Taut
proof end;

Lemma64: for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => (b1 '&' (b3 '&' b2)) in IPC-Taut
proof end;

theorem Th52: :: INTPRO_1:52
for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => (b1 '&' (b2 '&' b3)) in IPC-Taut
proof end;

Lemma65: for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => ((b3 '&' b2) '&' b1) in IPC-Taut
proof end;

Lemma66: for b1, b2, b3 being Element of MC-wff holds ((b1 '&' b2) '&' b3) => ((b2 '&' b1) '&' b3) in IPC-Taut
proof end;

Lemma67: for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => ((b2 '&' b3) '&' b1) in IPC-Taut
proof end;

Lemma68: for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => ((b1 '&' b3) '&' b2) in IPC-Taut
proof end;

Lemma69: for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => (b1 '&' (b3 '&' b2)) in IPC-Taut
proof end;

theorem Th53: :: INTPRO_1:53
for b1, b2, b3 being Element of MC-wff holds (b1 '&' (b2 '&' b3)) => ((b1 '&' b2) '&' b3) in IPC-Taut
proof end;

theorem Th54: :: INTPRO_1:54
for b1 being Element of MC-wff holds (b1 'or' b1) => b1 in IPC-Taut
proof end;

theorem Th55: :: INTPRO_1:55
for b1, b2 being Element of MC-wff st ( b1 in IPC-Taut or b2 in IPC-Taut ) holds
b1 'or' b2 in IPC-Taut
proof end;

theorem Th56: :: INTPRO_1:56
for b1, b2 being Element of MC-wff holds (b1 'or' b2) => (b2 'or' b1) in IPC-Taut
proof end;

theorem Th57: :: INTPRO_1:57
for b1, b2 being Element of MC-wff holds
( b1 'or' b2 in IPC-Taut iff b2 'or' b1 in IPC-Taut )
proof end;

theorem Th58: :: INTPRO_1:58
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => (b1 => (b2 'or' b3)) in IPC-Taut
proof end;

theorem Th59: :: INTPRO_1:59
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => (b1 => (b3 'or' b2)) in IPC-Taut
proof end;

theorem Th60: :: INTPRO_1:60
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b1 'or' b3) => (b2 'or' b3)) in IPC-Taut
proof end;

theorem Th61: :: INTPRO_1:61
for b1, b2, b3 being Element of MC-wff st b1 => b2 in IPC-Taut holds
(b1 'or' b3) => (b2 'or' b3) in IPC-Taut
proof end;

theorem Th62: :: INTPRO_1:62
for b1, b2, b3 being Element of MC-wff holds (b1 => b2) => ((b3 'or' b1) => (b3 'or' b2)) in IPC-Taut
proof end;

theorem Th63: :: INTPRO_1:63
for b1, b2, b3 being Element of MC-wff st b1 => b2 in IPC-Taut holds
(b3 'or' b1) => (b3 'or' b2) in IPC-Taut
proof end;

theorem Th64: :: INTPRO_1:64
for b1, b2, b3 being Element of MC-wff holds (b1 'or' (b2 'or' b3)) => (b2 'or' (b1 'or' b3)) in IPC-Taut
proof end;

theorem Th65: :: INTPRO_1:65
for b1, b2, b3 being Element of MC-wff holds (b1 'or' (b2 'or' b3)) => ((b1 'or' b2) 'or' b3) in IPC-Taut
proof end;

theorem Th66: :: INTPRO_1:66
for b1, b2, b3 being Element of MC-wff holds ((b1 'or' b2) 'or' b3) => (b1 'or' (b2 'or' b3)) in IPC-Taut
proof end;

definition
let c1 be Subset of MC-wff ;
attr a1 is CPC_theory means :Def19: :: INTPRO_1:def 19
for b1, b2, b3 being Element of MC-wff holds
( b1 => (b2 => b1) in a1 & (b1 => (b2 => b3)) => ((b1 => b2) => (b1 => b3)) in a1 & (b1 '&' b2) => b1 in a1 & (b1 '&' b2) => b2 in a1 & b1 => (b2 => (b1 '&' b2)) in a1 & b1 => (b1 'or' b2) in a1 & b2 => (b1 'or' b2) in a1 & (b1 => b3) => ((b2 => b3) => ((b1 'or' b2) => b3)) in a1 & FALSUM => b1 in a1 & b1 'or' (b1 => FALSUM ) in a1 & ( b1 in a1 & b1 => b2 in a1 implies b2 in a1 ) );
correctness
;
end;

:: deftheorem Def19 defines CPC_theory INTPRO_1:def 19 :
for b1 being Subset of MC-wff holds
( b1 is CPC_theory iff for b2, b3, b4 being Element of MC-wff holds
( b2 => (b3 => b2) in b1 & (b2 => (b3 => b4)) => ((b2 => b3) => (b2 => b4)) in b1 & (b2 '&' b3) => b2 in b1 & (b2 '&' b3) => b3 in b1 & b2 => (b3 => (b2 '&' b3)) in b1 & b2 => (b2 'or' b3) in b1 & b3 => (b2 'or' b3) in b1 & (b2 => b4) => ((b3 => b4) => ((b2 'or' b3) => b4)) in b1 & FALSUM => b2 in b1 & b2 'or' (b2 => FALSUM ) in b1 & ( b2 in b1 & b2 => b3 in b1 implies b3 in b1 ) ) );

theorem Th67: :: INTPRO_1:67
for b1 being Subset of MC-wff st b1 is CPC_theory holds
b1 is IPC_theory
proof end;

definition
let c1 be Subset of MC-wff ;
func CnCPC c1 -> Subset of MC-wff means :Def20: :: INTPRO_1:def 20
for b1 being Element of MC-wff holds
( b1 in a2 iff for b2 being Subset of MC-wff st b2 is CPC_theory & a1 c= b2 holds
b1 in b2 );
existence
ex b1 being Subset of MC-wff st
for b2 being Element of MC-wff holds
( b2 in b1 iff for b3 being Subset of MC-wff st b3 is CPC_theory & c1 c= b3 holds
b2 in b3 )
proof end;
uniqueness
for b1, b2 being Subset of MC-wff st ( for b3 being Element of MC-wff holds
( b3 in b1 iff for b4 being Subset of MC-wff st b4 is CPC_theory & c1 c= b4 holds
b3 in b4 ) ) & ( for b3 being Element of MC-wff holds
( b3 in b2 iff for b4 being Subset of MC-wff st b4 is CPC_theory & c1 c= b4 holds
b3 in b4 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def20 defines CnCPC INTPRO_1:def 20 :
for b1, b2 being Subset of MC-wff holds
( b2 = CnCPC b1 iff for b3 being Element of MC-wff holds
( b3 in b2 iff for b4 being Subset of MC-wff st b4 is CPC_theory & b1 c= b4 holds
b3 in b4 ) );

definition
func CPC-Taut -> Subset of MC-wff equals :: INTPRO_1:def 21
CnCPC ({} MC-wff );
correctness
coherence
CnCPC ({} MC-wff ) is Subset of MC-wff
;
;
end;

:: deftheorem Def21 defines CPC-Taut INTPRO_1:def 21 :
CPC-Taut = CnCPC ({} MC-wff );

theorem Th68: :: INTPRO_1:68
for b1 being Subset of MC-wff holds CnIPC b1 c= CnCPC b1
proof end;

theorem Th69: :: INTPRO_1:69
for b1 being Subset of MC-wff
for b2, b3, b4 being Element of MC-wff holds
( b2 => (b3 => b2) in CnCPC b1 & (b2 => (b3 => b4)) => ((b2 => b3) => (b2 => b4)) in CnCPC b1 & (b2 '&' b3) => b2 in CnCPC b1 & (b2 '&' b3) => b3 in CnCPC b1 & b2 => (b3 => (b2 '&' b3)) in CnCPC b1 & b2 => (b2 'or' b3) in CnCPC b1 & b3 => (b2 'or' b3) in CnCPC b1 & (b2 => b4) => ((b3 => b4) => ((b2 'or' b3) => b4)) in CnCPC b1 & FALSUM => b2 in CnCPC b1 & b2 'or' (b2 => FALSUM ) in CnCPC b1 )
proof end;

theorem Th70: :: INTPRO_1:70
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff st b2 in CnCPC b1 & b2 => b3 in CnCPC b1 holds
b3 in CnCPC b1
proof end;

theorem Th71: :: INTPRO_1:71
for b1, b2 being Subset of MC-wff st b1 is CPC_theory & b2 c= b1 holds
CnCPC b2 c= b1
proof end;

theorem Th72: :: INTPRO_1:72
for b1 being Subset of MC-wff holds b1 c= CnCPC b1
proof end;

theorem Th73: :: INTPRO_1:73
for b1, b2 being Subset of MC-wff st b1 c= b2 holds
CnCPC b1 c= CnCPC b2
proof end;

Lemma88: for b1 being Subset of MC-wff holds CnCPC (CnCPC b1) c= CnCPC b1
proof end;

theorem Th74: :: INTPRO_1:74
for b1 being Subset of MC-wff holds CnCPC (CnCPC b1) = CnCPC b1
proof end;

Lemma89: for b1 being Subset of MC-wff holds CnCPC b1 is CPC_theory
proof end;

registration
let c1 be Subset of MC-wff ;
cluster CnCPC a1 -> CPC_theory ;
coherence
CnCPC c1 is CPC_theory
by Lemma89;
end;

theorem Th75: :: INTPRO_1:75
for b1 being Subset of MC-wff holds
( b1 is CPC_theory iff CnCPC b1 = b1 )
proof end;

theorem Th76: :: INTPRO_1:76
for b1 being Subset of MC-wff st b1 is CPC_theory holds
CPC-Taut c= b1
proof end;

registration
cluster CPC-Taut -> CPC_theory ;
coherence
CPC-Taut is CPC_theory
;
end;

theorem Th77: :: INTPRO_1:77
IPC-Taut c= CPC-Taut by Th68;

definition
let c1 be Subset of MC-wff ;
attr a1 is S4_theory means :Def22: :: INTPRO_1:def 22
for b1, b2, b3 being Element of MC-wff holds
( b1 => (b2 => b1) in a1 & (b1 => (b2 => b3)) => ((b1 => b2) => (b1 => b3)) in a1 & (b1 '&' b2) => b1 in a1 & (b1 '&' b2) => b2 in a1 & b1 => (b2 => (b1 '&' b2)) in a1 & b1 => (b1 'or' b2) in a1 & b2 => (b1 'or' b2) in a1 & (b1 => b3) => ((b2 => b3) => ((b1 'or' b2) => b3)) in a1 & FALSUM => b1 in a1 & b1 'or' (b1 => FALSUM ) in a1 & (Nes (b1 => b2)) => ((Nes b1) => (Nes b2)) in a1 & (Nes b1) => b1 in a1 & (Nes b1) => (Nes (Nes b1)) in a1 & ( b1 in a1 & b1 => b2 in a1 implies b2 in a1 ) & ( b1 in a1 implies Nes b1 in a1 ) );
correctness
;
end;

:: deftheorem Def22 defines S4_theory INTPRO_1:def 22 :
for b1 being Subset of MC-wff holds
( b1 is S4_theory iff for b2, b3, b4 being Element of MC-wff holds
( b2 => (b3 => b2) in b1 & (b2 => (b3 => b4)) => ((b2 => b3) => (b2 => b4)) in b1 & (b2 '&' b3) => b2 in b1 & (b2 '&' b3) => b3 in b1 & b2 => (b3 => (b2 '&' b3)) in b1 & b2 => (b2 'or' b3) in b1 & b3 => (b2 'or' b3) in b1 & (b2 => b4) => ((b3 => b4) => ((b2 'or' b3) => b4)) in b1 & FALSUM => b2 in b1 & b2 'or' (b2 => FALSUM ) in b1 & (Nes (b2 => b3)) => ((Nes b2) => (Nes b3)) in b1 & (Nes b2) => b2 in b1 & (Nes b2) => (Nes (Nes b2)) in b1 & ( b2 in b1 & b2 => b3 in b1 implies b3 in b1 ) & ( b2 in b1 implies Nes b2 in b1 ) ) );

theorem Th78: :: INTPRO_1:78
for b1 being Subset of MC-wff st b1 is S4_theory holds
b1 is CPC_theory
proof end;

theorem Th79: :: INTPRO_1:79
for b1 being Subset of MC-wff st b1 is S4_theory holds
b1 is IPC_theory
proof end;

definition
let c1 be Subset of MC-wff ;
func CnS4 c1 -> Subset of MC-wff means :Def23: :: INTPRO_1:def 23
for b1 being Element of MC-wff holds
( b1 in a2 iff for b2 being Subset of MC-wff st b2 is S4_theory & a1 c= b2 holds
b1 in b2 );
existence
ex b1 being Subset of MC-wff st
for b2 being Element of MC-wff holds
( b2 in b1 iff for b3 being Subset of MC-wff st b3 is S4_theory & c1 c= b3 holds
b2 in b3 )
proof end;
uniqueness
for b1, b2 being Subset of MC-wff st ( for b3 being Element of MC-wff holds
( b3 in b1 iff for b4 being Subset of MC-wff st b4 is S4_theory & c1 c= b4 holds
b3 in b4 ) ) & ( for b3 being Element of MC-wff holds
( b3 in b2 iff for b4 being Subset of MC-wff st b4 is S4_theory & c1 c= b4 holds
b3 in b4 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def23 defines CnS4 INTPRO_1:def 23 :
for b1, b2 being Subset of MC-wff holds
( b2 = CnS4 b1 iff for b3 being Element of MC-wff holds
( b3 in b2 iff for b4 being Subset of MC-wff st b4 is S4_theory & b1 c= b4 holds
b3 in b4 ) );

definition
func S4-Taut -> Subset of MC-wff equals :: INTPRO_1:def 24
CnS4 ({} MC-wff );
correctness
coherence
CnS4 ({} MC-wff ) is Subset of MC-wff
;
;
end;

:: deftheorem Def24 defines S4-Taut INTPRO_1:def 24 :
S4-Taut = CnS4 ({} MC-wff );

theorem Th80: :: INTPRO_1:80
for b1 being Subset of MC-wff holds CnCPC b1 c= CnS4 b1
proof end;

theorem Th81: :: INTPRO_1:81
for b1 being Subset of MC-wff holds CnIPC b1 c= CnS4 b1
proof end;

theorem Th82: :: INTPRO_1:82
for b1 being Subset of MC-wff
for b2, b3, b4 being Element of MC-wff holds
( b2 => (b3 => b2) in CnS4 b1 & (b2 => (b3 => b4)) => ((b2 => b3) => (b2 => b4)) in CnS4 b1 & (b2 '&' b3) => b2 in CnS4 b1 & (b2 '&' b3) => b3 in CnS4 b1 & b2 => (b3 => (b2 '&' b3)) in CnS4 b1 & b2 => (b2 'or' b3) in CnS4 b1 & b3 => (b2 'or' b3) in CnS4 b1 & (b2 => b4) => ((b3 => b4) => ((b2 'or' b3) => b4)) in CnS4 b1 & FALSUM => b2 in CnS4 b1 & b2 'or' (b2 => FALSUM ) in CnS4 b1 )
proof end;

theorem Th83: :: INTPRO_1:83
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff st b2 in CnS4 b1 & b2 => b3 in CnS4 b1 holds
b3 in CnS4 b1
proof end;

theorem Th84: :: INTPRO_1:84
for b1 being Subset of MC-wff
for b2, b3 being Element of MC-wff holds (Nes (b2 => b3)) => ((Nes b2) => (Nes b3)) in CnS4 b1
proof end;

theorem Th85: :: INTPRO_1:85
for b1 being Subset of MC-wff
for b2 being Element of MC-wff holds (Nes b2) => b2 in CnS4 b1
proof end;

theorem Th86: :: INTPRO_1:86
for b1 being Subset of MC-wff
for b2 being Element of MC-wff holds (Nes b2) => (Nes (Nes b2)) in CnS4 b1
proof end;

theorem Th87: :: INTPRO_1:87
for b1 being Subset of MC-wff
for b2 being Element of MC-wff st b2 in CnS4 b1 holds
Nes b2 in CnS4 b1
proof end;

theorem Th88: :: INTPRO_1:88
for b1, b2 being Subset of MC-wff st b1 is S4_theory & b2 c= b1 holds
CnS4 b2 c= b1
proof end;

theorem Th89: :: INTPRO_1:89
for b1 being Subset of MC-wff holds b1 c= CnS4 b1
proof end;

theorem Th90: :: INTPRO_1:90
for b1, b2 being Subset of MC-wff st b1 c= b2 holds
CnS4 b1 c= CnS4 b2
proof end;

Lemma105: for b1 being Subset of MC-wff holds CnS4 (CnS4 b1) c= CnS4 b1
proof end;

theorem Th91: :: INTPRO_1:91
for b1 being Subset of MC-wff holds CnS4 (CnS4 b1) = CnS4 b1
proof end;

Lemma106: for b1 being Subset of MC-wff holds CnS4 b1 is S4_theory
proof end;

registration
let c1 be Subset of MC-wff ;
cluster CnS4 a1 -> S4_theory ;
coherence
CnS4 c1 is S4_theory
by Lemma106;
end;

theorem Th92: :: INTPRO_1:92
for b1 being Subset of MC-wff holds
( b1 is S4_theory iff CnS4 b1 = b1 )
proof end;

theorem Th93: :: INTPRO_1:93
for b1 being Subset of MC-wff st b1 is S4_theory holds
S4-Taut c= b1
proof end;

registration
cluster S4-Taut -> S4_theory ;
coherence
S4-Taut is S4_theory
;
end;

theorem Th94: :: INTPRO_1:94
CPC-Taut c= S4-Taut by Th80;

theorem Th95: :: INTPRO_1:95
IPC-Taut c= S4-Taut by Th81;