:: BOOLMARK semantic presentation

theorem Th1: :: BOOLMARK:1
for b1, b2 being non empty set
for b3 being Function of b1,b2
for b4 being Subset of b1
for b5 being Element of b2 holds
b3 +* (b4 --> b5) is Function of b1,b2
proof
let c1, c2 be non empty set ;
let c3 be Function of c1,c2;
let c4 be Subset of c1;
let c5 be Element of c2;
E2: dom c3 = c1 by FUNCT_2:def 1;
E3: dom (c3 +* (c4 --> c5)) = (dom c3) \/ (dom (c4 --> c5)) by FUNCT_4:def 1
.= c1 \/ c4 by E2, FUNCOP_1:19
.= ([#] c1) \/ c4 by SUBSET_1:def 4
.= [#] c1 by SUBSET_1:28
.= c1 by SUBSET_1:def 4 ;
E4: rng c3 c= c2 by RELSET_1:12;
rng (c4 --> c5) c= {c5} by FUNCOP_1:19;
then E5: (rng c3) \/ (rng (c4 --> c5)) c= c2 \/ {c5} by E4, XBOOLE_1:13;
rng (c3 +* (c4 --> c5)) c= (rng c3) \/ (rng (c4 --> c5)) by FUNCT_4:18;
then rng (c3 +* (c4 --> c5)) c= c2 \/ {c5} by E5, XBOOLE_1:1;
then rng (c3 +* (c4 --> c5)) c= c2 by ZFMISC_1:46;
hence c3 +* (c4 --> c5) is Function of c1,c2 by E3, FUNCT_2:def 1, RELSET_1:11;
end;

theorem Th2: :: BOOLMARK:2
for b1, b2 being non empty set
for b3, b4 being Subset of b1
for b5 being Function of b1,b2 holds
( b5 .: b3 misses b5 .: b4 implies b3 misses b4 )
proof
let c1, c2 be non empty set ;
let c3, c4 be Subset of c1;
let c5 be Function of c1,c2;
assume E3: (c5 .: c3) /\ (c5 .: c4) = {} ; :: according to XBOOLE_0:def 7
assume c3 /\ c4 <> {} ; :: according to XBOOLE_0:def 7
then consider c6 being Element of c1 such that
E4: c6 in c3 /\ c4 by SUBSET_1:10;
( c6 in c3 & c6 in c4 ) by E4, XBOOLE_0:def 3;
then ( c5 . c6 in c5 .: c3 & c5 . c6 in c5 .: c4 ) by FUNCT_2:43;
hence not verum by E3, XBOOLE_0:def 3;
end;

theorem Th3: :: BOOLMARK:3
for b1, b2 being set
for b3 being Function
for b4 being set holds
( b1 misses b2 implies (b3 +* (b1 --> b4)) .: b2 = b3 .: b2 )
proof
let c1, c2 be set ;
let c3 be Function;
let c4 be set ;
assume that
E4: c1 /\ c2 = {} and
E5: (c3 +* (c1 --> c4)) .: c2 <> c3 .: c2 ; :: according to XBOOLE_0:def 7
E6: dom (c3 +* (c1 --> c4)) = (dom c3) \/ (dom (c1 --> c4)) by FUNCT_4:def 1;
E7: dom (c1 --> c4) = c1 by FUNCOP_1:19;
E8: not for b1 being set holds
( b1 in (c3 +* (c1 --> c4)) .: c2 iff b1 in c3 .: c2 ) by E5, TARSKI:2;
now
per cases not ( ( for b1 being set holds
not ( b1 in (c3 +* (c1 --> c4)) .: c2 & not b1 in c3 .: c2 ) ) & ( for b1 being set holds
not ( not b1 in (c3 +* (c1 --> c4)) .: c2 & b1 in c3 .: c2 ) ) )
by E8;
case ex b1 being set st
( b1 in (c3 +* (c1 --> c4)) .: c2 & not b1 in c3 .: c2 ) ;
then consider c5 being set such that
E9: c5 in (c3 +* (c1 --> c4)) .: c2 and
E10: not c5 in c3 .: c2 ;
consider c6 being set such that
E11: c6 in dom (c3 +* (c1 --> c4)) and
E12: c6 in c2 and
E13: c5 = (c3 +* (c1 --> c4)) . c6 by E9, FUNCT_1:def 12;
E14: not c6 in c1 by E4, E12, XBOOLE_0:def 3;
then E15: c6 in dom c3 by E6, E7, E11, XBOOLE_0:def 2;
c5 = c3 . c6 by E7, E13, E14, FUNCT_4:12;
hence not verum by E10, E12, E15, FUNCT_1:def 12;
end;
case ex b1 being set st
( not b1 in (c3 +* (c1 --> c4)) .: c2 & b1 in c3 .: c2 ) ;
then consider c5 being set such that
E9: not c5 in (c3 +* (c1 --> c4)) .: c2 and
E10: c5 in c3 .: c2 ;
consider c6 being set such that
E11: c6 in dom c3 and
E12: c6 in c2 and
E13: c5 = c3 . c6 by E10, FUNCT_1:def 12;
E14: not c6 in c1 by E4, E12, XBOOLE_0:def 3;
E15: c6 in dom (c3 +* (c1 --> c4)) by E6, E11, XBOOLE_0:def 2;
c5 = (c3 +* (c1 --> c4)) . c6 by E7, E13, E14, FUNCT_4:12;
hence not verum by E9, E12, E15, FUNCT_1:def 12;
end;
end;
end;
hence not verum ;
end;

definition
let c1 be PT_net_Str ;
func Bool_marks_of c1 -> FUNCTION_DOMAIN of the Places of a1, BOOLEAN equals :: BOOLMARK:def 1
Funcs the Places of a1,BOOLEAN ;
correctness
coherence
Funcs the Places of c1,BOOLEAN is FUNCTION_DOMAIN of the Places of c1, BOOLEAN
;
;
end;

:: deftheorem Def1 defines Bool_marks_of BOOLMARK:def 1 :
for b1 being PT_net_Str holds Bool_marks_of b1 = Funcs the Places of b1,BOOLEAN ;

definition
let c1 be PT_net_Str ;
mode Boolean_marking is Element of Bool_marks_of a1;
end;

definition
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be transition of c1;
pred c3 is_firable_on c2 means :Def2: :: BOOLMARK:def 2
a2 .: (*' {a3}) c= {TRUE };
end;

:: deftheorem Def2 defines is_firable_on BOOLMARK:def 2 :
for b1 being PT_net_Str
for b2 being Boolean_marking of b1
for b3 being transition of b1 holds
( b3 is_firable_on b2 iff b2 .: (*' {b3}) c= {TRUE } );

notation
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be transition of c1;
antonym c3 is_not_firable_on c2 for c3 is_firable_on c2;
end;

definition
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be transition of c1;
func Firing c3,c2 -> Boolean_marking of a1 equals :: BOOLMARK:def 3
(a2 +* ((*' {a3}) --> FALSE )) +* (({a3} *' ) --> TRUE );
coherence
(c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE ) is Boolean_marking of c1
proof
set c4 = (c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE );
c2 +* ((*' {c3}) --> FALSE ) is Function of the Places of c1, BOOLEAN by Th1;
then (c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE ) is Function of the Places of c1, BOOLEAN by Th1;
then (c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE ) in Funcs the Places of c1,BOOLEAN by FUNCT_2:11;
hence (c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE ) is Boolean_marking of c1 ;
end;
correctness
;
end;

:: deftheorem Def3 defines Firing BOOLMARK:def 3 :
for b1 being PT_net_Str
for b2 being Boolean_marking of b1
for b3 being transition of b1 holds Firing b3,b2 = (b2 +* ((*' {b3}) --> FALSE )) +* (({b3} *' ) --> TRUE );

definition
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be FinSequence of the Transitions of c1;
pred c3 is_firable_on c2 means :Def4: :: BOOLMARK:def 4
not ( not a3 = {} & ( for b1 being FinSequence of Bool_marks_of a1 holds
not ( len a3 = len b1 & a3 /. 1 is_firable_on a2 & b1 /. 1 = Firing (a3 /. 1),a2 & ( for b2 being Nat holds
( b2 < len a3 & b2 > 0 implies ( a3 /. (b2 + 1) is_firable_on b1 /. b2 & b1 /. (b2 + 1) = Firing (a3 /. (b2 + 1)),(b1 /. b2) ) ) ) ) ) );
end;

:: deftheorem Def4 defines is_firable_on BOOLMARK:def 4 :
for b1 being PT_net_Str
for b2 being Boolean_marking of b1
for b3 being FinSequence of the Transitions of b1 holds
( b3 is_firable_on b2 iff not ( not b3 = {} & ( for b4 being FinSequence of Bool_marks_of b1 holds
not ( len b3 = len b4 & b3 /. 1 is_firable_on b2 & b4 /. 1 = Firing (b3 /. 1),b2 & ( for b5 being Nat holds
( b5 < len b3 & b5 > 0 implies ( b3 /. (b5 + 1) is_firable_on b4 /. b5 & b4 /. (b5 + 1) = Firing (b3 /. (b5 + 1)),(b4 /. b5) ) ) ) ) ) ) );

notation
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be FinSequence of the Transitions of c1;
antonym c3 is_not_firable_on c2 for c3 is_firable_on c2;
end;

definition
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be FinSequence of the Transitions of c1;
func Firing c3,c2 -> Boolean_marking of a1 means :Def5: :: BOOLMARK:def 5
a4 = a2 if a3 = {}
otherwise ex b1 being FinSequence of Bool_marks_of a1 st
( len a3 = len b1 & a4 = b1 /. (len b1) & b1 /. 1 = Firing (a3 /. 1),a2 & ( for b2 being Nat holds
( b2 < len a3 & b2 > 0 implies b1 /. (b2 + 1) = Firing (a3 /. (b2 + 1)),(b1 /. b2) ) ) );
existence
( not ( c3 = {} & ( for b1 being Boolean_marking of c1 holds
not b1 = c2 ) ) & not ( not c3 = {} & ( for b1 being Boolean_marking of c1
for b2 being FinSequence of Bool_marks_of c1 holds
not ( len c3 = len b2 & b1 = b2 /. (len b2) & b2 /. 1 = Firing (c3 /. 1),c2 & ( for b3 being Nat holds
( b3 < len c3 & b3 > 0 implies b2 /. (b3 + 1) = Firing (c3 /. (b3 + 1)),(b2 /. b3) ) ) ) ) ) )
proof
defpred S1[ Nat] means for b1 being FinSequence of the Transitions of c1 holds
( a1 = len b1 implies ( not ( b1 = {} & ( for b2 being Boolean_marking of c1 holds
not b2 = c2 ) ) & not ( b1 <> {} & ( for b2 being Boolean_marking of c1
for b3 being FinSequence of Bool_marks_of c1 holds
not ( len b1 = len b3 & b2 = b3 /. (len b3) & b3 /. 1 = Firing (b1 /. 1),c2 & ( for b4 being Nat holds
( b4 < len b1 & b4 > 0 implies b3 /. (b4 + 1) = Firing (b1 /. (b4 + 1)),(b3 /. b4) ) ) ) ) ) ) );
E6: S1[0] by FINSEQ_1:25;
E7: now
let c4 be Nat;
assume E8: S1[c4] ;
thus S1[c4 + 1]
proof
let c5 be FinSequence of the Transitions of c1;
assume E9: c4 + 1 = len c5 ;
thus not ( c5 = {} & ( for b1 being Boolean_marking of c1 holds
not b1 = c2 ) ) ;
thus not ( c5 <> {} & ( for b1 being Boolean_marking of c1
for b2 being FinSequence of Bool_marks_of c1 holds
not ( len c5 = len b2 & b1 = b2 /. (len b2) & b2 /. 1 = Firing (c5 /. 1),c2 & ( for b3 being Nat holds
( b3 < len c5 & b3 > 0 implies b2 /. (b3 + 1) = Firing (c5 /. (b3 + 1)),(b2 /. b3) ) ) ) ) )
proof
assume c5 <> {} ;
then len c5 <> 0 by FINSEQ_1:25;
then consider c6 being FinSequence of the Transitions of c1, c7 being transition of c1 such that
E10: c5 = c6 ^ <*c7*> by FINSEQ_2:22;
c4 + 1 = (len c6) + 1 by E9, E10, FINSEQ_2:19;
then E11: c4 = len c6 ;
per cases not ( not c6 = {} & not c6 <> {} ) ;
suppose E12: c6 = {} ;
take c8 = Firing c7,c2;
take c9 = <*c8*>;
E13: len c5 = (len c6) + (len <*c7*>) by E10, FINSEQ_1:35
.= 0 + (len <*c7*>) by E12, FINSEQ_1:25
.= 0 + 1 by FINSEQ_1:56 ;
hence len c5 = len c9 by FINSEQ_1:56;
hence c8 = c9 /. (len c9) by E13, FINSEQ_4:25;
c5 = <*c7*> by E10, E12, FINSEQ_1:47;
then c5 /. 1 = c7 by FINSEQ_4:25;
hence c9 /. 1 = Firing (c5 /. 1),c2 by FINSEQ_4:25;
let c10 be Nat;
assume ( c10 < len c5 & c10 > 0 ) ;
hence c9 /. (c10 + 1) = Firing (c5 /. (c10 + 1)),(c9 /. c10) by E13, NAT_1:38;
end;
suppose E12: c6 <> {} ;
then consider c8 being Boolean_marking of c1, c9 being FinSequence of Bool_marks_of c1 such that
E13: len c6 = len c9 and
E14: c8 = c9 /. (len c9) and
E15: c9 /. 1 = Firing (c6 /. 1),c2 and
E16: for b1 being Nat holds
( b1 < len c6 & b1 > 0 implies c9 /. (b1 + 1) = Firing (c6 /. (b1 + 1)),(c9 /. b1) ) by E8, E11;
take c10 = Firing c7,c8;
take c11 = c9 ^ <*c10*>;
E17: len c11 = (len c9) + (len <*c10*>) by FINSEQ_1:35
.= (len c9) + 1 by FINSEQ_1:57 ;
E18: len c5 = (len c6) + (len <*c7*>) by E10, FINSEQ_1:35
.= (len c6) + 1 by FINSEQ_1:57 ;
hence len c5 = len c11 by E13, E17;
thus c10 = c11 /. (len c11) by E17, FINSEQ_4:82;
len c6 <> 0 by E12, FINSEQ_1:25;
then E19: len c6 > 0 by NAT_1:19;
then 0 + 1 < (len c9) + 1 by E13, XREAL_1:8;
then E20: 1 <= len c9 by NAT_1:38;
then E21: 1 in dom c9 by FINSEQ_3:27;
0 + 1 < (len c6) + 1 by E19, XREAL_1:8;
then 1 <= len c6 by NAT_1:38;
then E22: 1 in dom c6 by FINSEQ_3:27;
thus c11 /. 1 = c9 /. 1 by E21, FINSEQ_4:83
.= Firing (c5 /. 1),c2 by E10, E15, E22, FINSEQ_4:83 ;
let c12 be Nat;
assume that
E23: c12 < len c5 and
E24: c12 > 0 ;
thus c11 /. (c12 + 1) = Firing (c5 /. (c12 + 1)),(c11 /. c12)
proof
E25: Seg ((len c6) + 1) = (Seg (len c6)) \/ {((len c6) + 1)} by FINSEQ_1:11;
E26: 1 <= c12 + 1 by NAT_1:37;
c12 + 1 <= (len c6) + 1 by E18, E23, NAT_1:38;
then E27: c12 + 1 in Seg ((len c6) + 1) by E26, FINSEQ_1:3;
per cases ( c12 + 1 in Seg (len c6) or c12 + 1 in {((len c6) + 1)} ) by E25, E27, XBOOLE_0:def 2;
suppose E28: c12 + 1 in Seg (len c6) ;
then c12 + 1 <= len c6 by FINSEQ_1:3;
then c12 < len c6 by NAT_1:38;
then E29: c9 /. (c12 + 1) = Firing (c6 /. (c12 + 1)),(c9 /. c12) by E16, E24;
0 + 1 < c12 + 1 by E24, XREAL_1:8;
then E30: 1 <= c12 by NAT_1:38;
c12 + 1 in dom c9 by E13, E28, FINSEQ_1:def 3;
then E31: c9 /. (c12 + 1) = c11 /. (c12 + 1) by FINSEQ_4:83;
E32: c12 + 1 <= len c9 by E13, E28, FINSEQ_1:3;
c12 + 1 in dom c6 by E28, FINSEQ_1:def 3;
then E33: c6 /. (c12 + 1) = c5 /. (c12 + 1) by E10, FINSEQ_4:83;
c12 + 1 <= (len c9) + 1 by E32, NAT_1:37;
then c12 <= len c9 by XREAL_1:8;
then c12 in dom c9 by E30, FINSEQ_3:27;
hence c11 /. (c12 + 1) = Firing (c5 /. (c12 + 1)),(c11 /. c12) by E29, E31, E33, FINSEQ_4:83;
end;
suppose c12 + 1 in {((len c6) + 1)} ;
then E28: c12 + 1 = (len c6) + 1 by TARSKI:def 1;
then E29: c12 = len c6 ;
E30: c11 /. (c12 + 1) = c10 by E13, E28, FINSEQ_4:82;
E31: c5 /. (c12 + 1) = c7 by E10, E28, FINSEQ_4:82;
len c9 in dom c9 by E20, FINSEQ_3:27;
hence c11 /. (c12 + 1) = Firing (c5 /. (c12 + 1)),(c11 /. c12) by E13, E14, E29, E30, E31, FINSEQ_4:83;
end;
end;
end;
end;
end;
end;
end;
end;
for b1 being Nat holds
S1[b1] from NAT_1:sch 1(E6, E7);
hence ( not ( c3 = {} & ( for b1 being Boolean_marking of c1 holds
not b1 = c2 ) ) & not ( not c3 = {} & ( for b1 being Boolean_marking of c1
for b2 being FinSequence of Bool_marks_of c1 holds
not ( len c3 = len b2 & b1 = b2 /. (len b2) & b2 /. 1 = Firing (c3 /. 1),c2 & ( for b3 being Nat holds
( b3 < len c3 & b3 > 0 implies b2 /. (b3 + 1) = Firing (c3 /. (b3 + 1)),(b2 /. b3) ) ) ) ) ) ) ;
end;
uniqueness
for b1, b2 being Boolean_marking of c1 holds
( ( c3 = {} & b1 = c2 & b2 = c2 implies b1 = b2 ) & ( not c3 = {} & ex b3 being FinSequence of Bool_marks_of c1 st
( len c3 = len b3 & b1 = b3 /. (len b3) & b3 /. 1 = Firing (c3 /. 1),c2 & ( for b4 being Nat holds
( b4 < len c3 & b4 > 0 implies b3 /. (b4 + 1) = Firing (c3 /. (b4 + 1)),(b3 /. b4) ) ) ) & ex b3 being FinSequence of Bool_marks_of c1 st
( len c3 = len b3 & b2 = b3 /. (len b3) & b3 /. 1 = Firing (c3 /. 1),c2 & ( for b4 being Nat holds
( b4 < len c3 & b4 > 0 implies b3 /. (b4 + 1) = Firing (c3 /. (b4 + 1)),(b3 /. b4) ) ) ) implies b1 = b2 ) )
proof
let c4, c5 be Boolean_marking of c1;
thus ( c3 = {} & c4 = c2 & c5 = c2 implies c4 = c5 ) ;
assume c3 <> {} ;
given c6 being FinSequence of Bool_marks_of c1 such that E6: len c3 = len c6 and
E7: c4 = c6 /. (len c6) and
E8: c6 /. 1 = Firing (c3 /. 1),c2 and
E9: for b1 being Nat holds
( b1 < len c3 & b1 > 0 implies c6 /. (b1 + 1) = Firing (c3 /. (b1 + 1)),(c6 /. b1) ) ;
given c7 being FinSequence of Bool_marks_of c1 such that E10: len c3 = len c7 and
E11: c5 = c7 /. (len c7) and
E12: c7 /. 1 = Firing (c3 /. 1),c2 and
E13: for b1 being Nat holds
( b1 < len c3 & b1 > 0 implies c7 /. (b1 + 1) = Firing (c3 /. (b1 + 1)),(c7 /. b1) ) ;
defpred S1[ Nat] means ( a1 in Seg (len c3) implies c6 /. a1 = c7 /. a1 );
E14: S1[0] by FINSEQ_1:3;
E15: now
let c8 be Nat;
assume E16: S1[c8] ;
now
assume E17: c8 + 1 in Seg (len c3) ;
per cases not ( not c8 = 0 & not c8 <> 0 ) ;
suppose c8 = 0 ;
hence c6 /. (c8 + 1) = c7 /. (c8 + 1) by E8, E12;
end;
suppose E18: c8 <> 0 ;
E19: c8 + 1 <= len c3 by E17, FINSEQ_1:3;
E20: c8 < c8 + 1 by XREAL_1:31;
then E21: ( c8 > 0 & c8 < len c3 ) by E18, E19, XXREAL_0:2, NAT_1:19;
( 1 <= c8 & c8 <= len c3 ) by E18, E19, E20, XXREAL_0:2, NAT_1:39;
hence c6 /. (c8 + 1) = Firing (c3 /. (c8 + 1)),(c7 /. c8) by E9, E16, E21, FINSEQ_1:3
.= c7 /. (c8 + 1) by E13, E21 ;

end;
end;
end;
hence S1[c8 + 1] ;
end;
E16: for b1 being Nat holds
S1[b1] from NAT_1:sch 1(E14, E15);
now
let c8 be Nat;
assume E17: c8 in Seg (len c3) ;
then E18: ( c8 in dom c6 & c8 in dom c7 ) by E6, E10, FINSEQ_1:def 3;
hence c6 . c8 = c6 /. c8 by FINSEQ_4:def 4
.= c7 /. c8 by E16, E17
.= c7 . c8 by E18, FINSEQ_4:def 4 ;

end;
hence c4 = c5 by E6, E7, E10, E11, FINSEQ_2:10;
end;
correctness
consistency
for b1 being Boolean_marking of c1 holds
verum
;
;
end;

:: deftheorem Def5 defines Firing BOOLMARK:def 5 :
for b1 being PT_net_Str
for b2 being Boolean_marking of b1
for b3 being FinSequence of the Transitions of b1
for b4 being Boolean_marking of b1 holds
( ( b3 = {} implies ( b4 = Firing b3,b2 iff b4 = b2 ) ) & ( not b3 = {} implies ( b4 = Firing b3,b2 iff ex b5 being FinSequence of Bool_marks_of b1 st
( len b3 = len b5 & b4 = b5 /. (len b5) & b5 /. 1 = Firing (b3 /. 1),b2 & ( for b6 being Nat holds
( b6 < len b3 & b6 > 0 implies b5 /. (b6 + 1) = Firing (b3 /. (b6 + 1)),(b5 /. b6) ) ) ) ) ) );

theorem Th4: :: BOOLMARK:4
canceled;

theorem Th5: :: BOOLMARK:5
for b1 being non empty set
for b2 being set
for b3 being Function holds (b3 +* (b1 --> b2)) .: b1 = {b2}
proof
let c1 be non empty set ;
let c2 be set ;
let c3 be Function;
now
let c4 be set ;
thus ( c4 in (c3 +* (c1 --> c2)) .: c1 implies c4 = c2 )
proof
assume c4 in (c3 +* (c1 --> c2)) .: c1 ;
then consider c5 being set such that
E8: ( c5 in dom (c3 +* (c1 --> c2)) & c5 in c1 & c4 = (c3 +* (c1 --> c2)) . c5 ) by FUNCT_1:def 12;
c5 in dom (c1 --> c2) by E8, FUNCOP_1:19;
then c4 = (c1 --> c2) . c5 by E8, FUNCT_4:14;
hence c4 = c2 by E8, FUNCOP_1:13;
end;
consider c5 being set such that
E8: c5 in c1 by XBOOLE_0:def 1;
( c5 in dom (c1 --> c2) & (c1 --> c2) . c5 = c2 ) by E8, FUNCOP_1:13, FUNCOP_1:19;
then ( c5 in dom (c3 +* (c1 --> c2)) & c2 = (c3 +* (c1 --> c2)) . c5 ) by FUNCT_4:13, FUNCT_4:14;
hence ( c4 = c2 implies c4 in (c3 +* (c1 --> c2)) .: c1 ) by E8, FUNCT_1:def 12;
end;
hence (c3 +* (c1 --> c2)) .: c1 = {c2} by TARSKI:def 1;
end;

theorem Th6: :: BOOLMARK:6
for b1 being PT_net_Str
for b2 being Boolean_marking of b1
for b3 being transition of b1
for b4 being place of b1 holds
( b4 in {b3} *' implies (Firing b3,b2) . b4 = TRUE )
proof
let c1 be PT_net_Str ;
let c2 be Boolean_marking of c1;
let c3 be transition of c1;
let c4 be place of c1;
assume E9: c4 in {c3} *' ;
E10: ((c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE )) .: ({c3} *' ) = {TRUE } by E9, Th5;
set c5 = (c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE );
E11: [#] the Places of c1 = the Places of c1 by SUBSET_1:def 4;
E12: ( dom c2 = the Places of c1 & dom ((*' {c3}) --> FALSE ) = *' {c3} & dom (({c3} *' ) --> TRUE ) = {c3} *' ) by FUNCOP_1:19, FUNCT_2:def 1;
then dom ((c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE )) = (dom (c2 +* ((*' {c3}) --> FALSE ))) \/ ({c3} *' ) by FUNCT_4:def 1
.= (the Places of c1 \/ (*' {c3})) \/ ({c3} *' ) by E12, FUNCT_4:def 1
.= the Places of c1 \/ ((*' {c3}) \/ ({c3} *' )) by XBOOLE_1:4
.= the Places of c1 by E11, SUBSET_1:28 ;
then ((c2 +* ((*' {c3}) --> FALSE )) +* (({c3} *' ) --> TRUE )) . c4 in {TRUE } by E9, E10, FUNCT_1:def 12;
hence (Firing c3,c2) . c4 = TRUE by TARSKI:def 1;
end;

E9: now
let c1 be PT_net_Str ;
let c2 be non empty Subset of the Places of c1;
assume E10: for b1 being Boolean_marking of c1 holds
( b1 .: c2 = {FALSE } implies for b2 being transition of c1 holds
( b2 is_firable_on b1 implies (Firing b2,b1) .: c2 = {FALSE } ) ) ;
assume not c2 is Deadlock-like ;
then not *' c2 c= c2 *' by PETRI:def 5;
then consider c3 being transition of c1 such that
E11: c3 in *' c2 and
E12: not c3 in c2 *' by SUBSET_1:7;
set c4 = (the Places of c1 --> TRUE ) +* (c2 --> FALSE );
E13: [#] the Places of c1 = the Places of c1 by SUBSET_1:def 4;
( dom (the Places of c1 --> TRUE ) = the Places of c1 & dom (c2 --> FALSE ) = c2 ) by FUNCOP_1:19;
then E14: dom ((the Places of c1 --> TRUE ) +* (c2 --> FALSE )) = the Places of c1 \/ c2 by FUNCT_4:def 1
.= the Places of c1 by E13, SUBSET_1:28 ;
( rng (the Places of c1 --> TRUE ) c= {TRUE } & rng (c2 --> FALSE ) c= {FALSE } ) by FUNCOP_1:19;
then ( rng (the Places of c1 --> TRUE ) c= BOOLEAN & rng (c2 --> FALSE ) c= BOOLEAN ) by XBOOLE_1:1;
then E15: (rng (the Places of c1 --> TRUE )) \/ (rng (c2 --> FALSE )) c= BOOLEAN by XBOOLE_1:8;
rng ((the Places of c1 --> TRUE ) +* (c2 --> FALSE )) c= (rng (the Places of c1 --> TRUE )) \/ (rng (c2 --> FALSE ))