:: The Formalization of Decision Free {P}etri Net :: by Pratima K. Shah , Pauline N. Kawamoto and Mariusz Giero :: :: Received March 31, 2014 :: Copyright (c) 2014-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 PETRI_DF, NUMBERS, XBOOLE_0, FUNCT_1, SUBSET_1, RELAT_1, TARSKI, PETRI, FUNCT_2, ARYTM_3, FINSEQ_1, PARTFUN1, XXREAL_0, CARD_1, CARD_3, ORDINAL4, NAT_1, ARYTM_1, BOOLMARK, STRUCT_0, PNPROC_1, ZFMISC_1, INT_1, FINSET_1, AOFA_I00, NET_1, FINSEQ_4, RFINSEQ, FINSEQ_6, JORDAN23; notations TARSKI, XBOOLE_0, SUBSET_1, ORDINAL1, NUMBERS, XCMPLX_0, NAT_1, FUNCT_1, PARTFUN1, FUNCT_2, DOMAIN_1, XXREAL_0, STRUCT_0, ZFMISC_1, RELSET_1, FINSEQ_1, PARTIT_2, PETRI, FINSET_1, NAT_D, WSIERP_1, RLAFFIN3, NET_1, FINSEQ_6, FINSEQ_4, JORDAN23, RFINSEQ; constructors PARTIT_2, NAT_D, WSIERP_1, RLAFFIN3, NET_1, FINSEQ_4, FINSEQ_6, RFINSEQ, JORDAN23; registrations XXREAL_0, XREAL_0, FINSEQ_1, ORDINAL1, CARD_1, RELSET_1, STRUCT_0, XBOOLE_0, SUBSET_1, XTUPLE_0, FINSET_1, NAT_1, MEMBERED, VALUED_0, PETRI; requirements REAL, NUMERALS, BOOLE, SUBSET, ARITHM; begin :: Preliminaries reserve N for PT_net_Str, PTN for Petri_net, i for Nat; theorem :: PETRI_DF:1 for x,y be Nat, f be FinSequence st f/^1 is one-to-one & 1 < x & x <= len f & 1 < y & y <= len f & f.x = f.y holds x = y; theorem :: PETRI_DF:2 for D be non empty set, f be non empty FinSequence of D st f is circular holds f.1 = f.len f; registration let D be non empty set; let a,b be Element of D; cluster <*a,b,a*> -> circular for FinSequence of D; end; theorem :: PETRI_DF:3 for a,b be object st a <> b holds <*a,b,a*> is almost-one-to-one; definition let X be set; let Y be non empty set; let P be finite Subset of X; let M0 be Function of X,Y; mode Enumeration of M0, P -> FinSequence of Y means :: PETRI_DF:def 1 len it = len the Enumeration of P & for i st i in dom it holds it.i = M0.((the Enumeration of P).i) if P is non empty otherwise it = <*>Y; end; definition func PetriNet -> Petri_net equals :: PETRI_DF:def 2 PT_net_Str(# {0},{1},[#] ({0},{1}),[#] ({1},{0}) #); end; notation let N; synonym places_and_trans_of N for Elements N; end; registration let PTN; cluster places_and_trans_of PTN -> non empty; end; reserve fs for FinSequence of places_and_trans_of PTN; definition let PTN,fs; func places_of fs -> finite Subset of PTN equals :: PETRI_DF:def 3 { p where p is place of PTN : p in rng fs }; func transitions_of fs -> finite Subset of the carrier' of PTN equals :: PETRI_DF:def 4 {t where t is transition of PTN : t in rng fs}; end; begin :: The number of tokens in a circuit :: Relation Between P and NAT definition let N; func nat_marks_of N -> FUNCTION_DOMAIN of the carrier of N, NAT equals :: PETRI_DF:def 5 Funcs(the carrier of N, NAT); end; definition let N; mode marking of N is Element of nat_marks_of N; end; :: Generation of nat marking and summation of that definition let N; let P be finite Subset of N; let M0 be marking of N; func num_marks(P, M0) -> Element of NAT equals :: PETRI_DF:def 6 Sum (the Enumeration of M0,P); end; begin :: Decision-Free Petri Net Concept and Properties of Circuits in Petri Nets definition let IT be Petri_net; attr IT is decision_free_like means :: PETRI_DF:def 7 for s being place of IT holds ((ex t being transition of IT st [t, s] in the T-S_Arcs of IT) & (for t1, t2 being transition of IT st [t1, s] in the T-S_Arcs of IT & [t2, s] in the T-S_Arcs of IT holds t1 = t2)) & ((ex t being transition of IT st [s, t] in the S-T_Arcs of IT) & (for t1, t2 being transition of IT st [s, t1] in the S-T_Arcs of IT & [s, t2] in the S-T_Arcs of IT holds t1 = t2)); end; :: directed_path_like Attribute for :: FinSequence of places_and_trans_of Petri_net definition let PTN; let IT be FinSequence of places_and_trans_of PTN; attr IT is directed_path_like means :: PETRI_DF:def 8 len IT >= 3 & len IT mod 2 = 1 & (for i st i mod 2 = 1 & i + 1 < len IT holds [IT.i, IT.(i+1)] in the S-T_Arcs of PTN & [IT.(i+1),IT.(i+2)] in the T-S_Arcs of PTN) & IT.len IT in the carrier of PTN; end; theorem :: PETRI_DF:4 for fs be FinSequence of places_and_trans_of PetriNet st fs = <*0,1,0*> holds fs is directed_path_like; registration let PTN; cluster directed_path_like -> non empty for FinSequence of places_and_trans_of PTN; end; :: With_directed_path Mode for place\transition Nets definition let IT be Petri_net; attr IT is With_directed_path means :: PETRI_DF:def 9 ex fs being FinSequence of places_and_trans_of IT st fs is directed_path_like; end; :: directed_circuit_like Attribute for FinSequence of :: places_and_trans_of PetriNet definition let PTN; attr PTN is With_directed_circuit means :: PETRI_DF:def 10 ex fs st fs is directed_path_like circular almost-one-to-one; end; registration cluster PetriNet -> decision_free_like With_directed_circuit Petri; end; registration cluster With_directed_circuit Petri decision_free_like for Petri_net; end; registration cluster With_directed_circuit -> With_directed_path for Petri_net; end; registration cluster With_directed_path for Petri_net; end; registration let Dftn be With_directed_path Petri_net; cluster directed_path_like for FinSequence of places_and_trans_of Dftn; end; reserve Dftn for With_directed_path Petri_net; reserve dct for directed_path_like FinSequence of places_and_trans_of Dftn; theorem :: PETRI_DF:5 [dct.1, dct.2] in the S-T_Arcs of Dftn; theorem :: PETRI_DF:6 [dct.(len dct -1), dct.(len dct)] in the T-S_Arcs of Dftn; reserve Dftn for With_directed_path Petri Petri_net, dct for directed_path_like FinSequence of places_and_trans_of Dftn; theorem :: PETRI_DF:7 dct.i in places_of dct & i in dom dct implies i mod 2 = 1; theorem :: PETRI_DF:8 dct.i in transitions_of dct & i in dom dct implies i mod 2 = 0; theorem :: PETRI_DF:9 dct.i in transitions_of dct & i in dom dct implies [dct.(i-1),dct.i] in the S-T_Arcs of Dftn & [dct.i,dct.(i+1)] in the T-S_Arcs of Dftn; theorem :: PETRI_DF:10 dct.i in places_of dct & 1 < i & i < len dct implies [dct.(i-2),dct.(i-1)] in the S-T_Arcs of Dftn & [dct.(i-1),dct.i] in the T-S_Arcs of Dftn & [dct.i,dct.(i+1)] in the S-T_Arcs of Dftn & [dct.(i+1),dct.(i+2)] in the T-S_Arcs of Dftn & 3 <= i; begin :: Firable and Firing Conditions for Transitions with natural marking reserve M0 for marking of PTN, t for transition of PTN, Q,Q1 for FinSequence of the carrier' of PTN; definition let PTN,M0,t; pred t is_firable_at M0 means :: PETRI_DF:def 11 for m being Nat holds m in M0.:*'{t} implies m > 0; end; notation let PTN,M0,t; antonym t is_not_firable_at M0 for t is_firable_at M0; end; definition let PTN,M0,t; func Firing(t, M0) -> marking of PTN means :: PETRI_DF:def 12 for s being place of PTN holds (s in *'{t} & not s in {t}*' implies it.s = M0.s -1) & (s in {t}*' & not s in *'{t} implies it.s = M0.s + 1) & ((s in *'{t} & s in {t}*') or (not s in *'{t} & not s in {t}*') implies it.s = M0.s) if t is_firable_at M0 otherwise it = M0; end; definition let PTN,M0,Q; pred Q is_firable_at M0 means :: PETRI_DF:def 13 Q = {} or ex M being FinSequence of nat_marks_of PTN st len Q = len M & Q/.1 is_firable_at M0 & M/.1 = Firing(Q/.1, M0) & for i st i < len Q & i > 0 holds Q/.(i+1) is_firable_at M/.i & M/.(i+1) = Firing(Q/.(i+1), M/.i); end; notation let PTN,M0,Q; antonym Q is_not_firable_at M0 for Q is_firable_at M0; end; definition let PTN,M0,Q; func Firing(Q, M0) -> marking of PTN means :: PETRI_DF:def 14 it = M0 if Q = {} otherwise ex M being FinSequence of nat_marks_of PTN st len Q = len M & it = M/.len M & M/.1 = Firing(Q/.1, M0) & for i st i < len Q & i > 0 holds M/.(i+1) = Firing(Q/.(i+1),M/.i); end; theorem :: PETRI_DF:11 Firing(t, M0) = Firing(<*t*>, M0); theorem :: PETRI_DF:12 t is_firable_at M0 iff <*t*> is_firable_at M0; theorem :: PETRI_DF:13 Firing(Q^Q1, M0) = Firing(Q1, Firing(Q,M0)); theorem :: PETRI_DF:14 Q^Q1 is_firable_at M0 implies Q1 is_firable_at Firing(Q, M0) & Q is_firable_at M0; begin :: The theorem stating that the number of tokens in a circuit :: remains the same after any firing sequence theorem :: PETRI_DF:15 for Dftn being With_directed_path Petri decision_free_like Petri_net, dct being directed_path_like FinSequence of places_and_trans_of Dftn, t being transition of Dftn st dct is circular & ex p1 being place of Dftn st p1 in places_of dct & ([p1, t] in the S-T_Arcs of Dftn or [t, p1] in the T-S_Arcs of Dftn) holds t in transitions_of dct; definition mode Decision_free_PT is With_directed_circuit Petri decision_free_like Petri_net; end; registration let Dftn be With_directed_circuit Petri_net; cluster directed_path_like circular almost-one-to-one for FinSequence of places_and_trans_of Dftn; end; definition let Dftn be With_directed_circuit Petri_net; mode Circuit_of_places_and_trans of Dftn is directed_path_like circular almost-one-to-one FinSequence of places_and_trans_of Dftn; end; theorem :: PETRI_DF:16 for Dftn being Decision_free_PT, dct being Circuit_of_places_and_trans of Dftn, M0 being marking of Dftn, t being transition of Dftn holds num_marks(places_of dct, M0) = num_marks(places_of dct, Firing(t, M0)); theorem :: PETRI_DF:17 for Dftn being Decision_free_PT, dct being Circuit_of_places_and_trans of Dftn, M0 being marking of Dftn, Q being FinSequence of the carrier' of Dftn holds num_marks(places_of dct, M0) = num_marks(places_of dct, Firing(Q, M0));