:: Definitions of Petri Net - Part I
:: by Waldemar Korczy\'nski
::
:: Received January 31, 1992
:: Copyright (c) 1992-2021 Association of Mizar Users


definition
let X, Y be set ;
assume A1: X misses Y ;
func PTempty_f_net (X,Y) -> strict Pnet equals :Def1: :: FF_SIEC:def 1
PT_net_Str(# X,Y,({} (X,Y)),({} (Y,X)) #);
correctness
coherence
PT_net_Str(# X,Y,({} (X,Y)),({} (Y,X)) #) is strict Pnet
;
proof end;
end;

:: deftheorem Def1 defines PTempty_f_net FF_SIEC:def 1 :
for X, Y being set st X misses Y holds
PTempty_f_net (X,Y) = PT_net_Str(# X,Y,({} (X,Y)),({} (Y,X)) #);

definition
let X be set ;
func Tempty_f_net X -> strict Pnet equals :: FF_SIEC:def 2
PTempty_f_net (X,{});
correctness
coherence
PTempty_f_net (X,{}) is strict Pnet
;
;
func Pempty_f_net X -> strict Pnet equals :: FF_SIEC:def 3
PTempty_f_net ({},X);
correctness
coherence
PTempty_f_net ({},X) is strict Pnet
;
;
end;

:: deftheorem defines Tempty_f_net FF_SIEC:def 2 :
for X being set holds Tempty_f_net X = PTempty_f_net (X,{});

:: deftheorem defines Pempty_f_net FF_SIEC:def 3 :
for X being set holds Pempty_f_net X = PTempty_f_net ({},X);

definition
let x be object ;
func Tsingle_f_net x -> strict Pnet equals :: FF_SIEC:def 4
PTempty_f_net ({},{x});
correctness
coherence
PTempty_f_net ({},{x}) is strict Pnet
;
;
func Psingle_f_net x -> strict Pnet equals :: FF_SIEC:def 5
PTempty_f_net ({x},{});
correctness
coherence
PTempty_f_net ({x},{}) is strict Pnet
;
;
end;

:: deftheorem defines Tsingle_f_net FF_SIEC:def 4 :
for x being object holds Tsingle_f_net x = PTempty_f_net ({},{x});

:: deftheorem defines Psingle_f_net FF_SIEC:def 5 :
for x being object holds Psingle_f_net x = PTempty_f_net ({x},{});

definition
func empty_f_net -> strict Pnet equals :: FF_SIEC:def 6
PTempty_f_net ({},{});
correctness
coherence
PTempty_f_net ({},{}) is strict Pnet
;
;
end;

:: deftheorem defines empty_f_net FF_SIEC:def 6 :
empty_f_net = PTempty_f_net ({},{});

theorem :: FF_SIEC:1
for X, Y being set st X misses Y holds
( the carrier of (PTempty_f_net (X,Y)) = X & the carrier' of (PTempty_f_net (X,Y)) = Y & Flow (PTempty_f_net (X,Y)) = {} )
proof end;

theorem :: FF_SIEC:2
for X being set holds
( the carrier of (Tempty_f_net X) = X & the carrier' of (Tempty_f_net X) = {} & Flow (Tempty_f_net X) = {} )
proof end;

theorem :: FF_SIEC:3
for X being set holds
( the carrier of (Pempty_f_net X) = {} & the carrier' of (Pempty_f_net X) = X & Flow (Pempty_f_net X) = {} )
proof end;

theorem :: FF_SIEC:4
for x being object holds
( the carrier of (Tsingle_f_net x) = {} & the carrier' of (Tsingle_f_net x) = {x} & Flow (Tsingle_f_net x) = {} )
proof end;

theorem :: FF_SIEC:5
for x being object holds
( the carrier of (Psingle_f_net x) = {x} & the carrier' of (Psingle_f_net x) = {} & Flow (Psingle_f_net x) = {} )
proof end;

theorem :: FF_SIEC:6
( the carrier of empty_f_net = {} & the carrier' of empty_f_net = {} & Flow empty_f_net = {} )
proof end;

theorem Th7: :: FF_SIEC:7
for x, y being object
for M being Pnet holds
( ( [x,y] in Flow M & x in the carrier' of M implies ( not x in the carrier of M & not y in the carrier' of M & y in the carrier of M ) ) & ( [x,y] in Flow M & y in the carrier' of M implies ( not y in the carrier of M & not x in the carrier' of M & x in the carrier of M ) ) & ( [x,y] in Flow M & x in the carrier of M implies ( not y in the carrier of M & not x in the carrier' of M & y in the carrier' of M ) ) & ( [x,y] in Flow M & y in the carrier of M implies ( not x in the carrier of M & not y in the carrier' of M & x in the carrier' of M ) ) )
proof end;

theorem Th8: :: FF_SIEC:8
for M being Pnet holds
( Flow M c= [:(Elements M),(Elements M):] & (Flow M) ~ c= [:(Elements M),(Elements M):] )
proof end;

theorem Th9: :: FF_SIEC:9
for M being Pnet holds
( rng ((Flow M) | the carrier' of M) c= the carrier of M & rng (((Flow M) ~) | the carrier' of M) c= the carrier of M & rng ((Flow M) | the carrier of M) c= the carrier' of M & rng (((Flow M) ~) | the carrier of M) c= the carrier' of M & rng (id the carrier' of M) c= the carrier' of M & dom (id the carrier' of M) c= the carrier' of M & rng (id the carrier of M) c= the carrier of M & dom (id the carrier of M) c= the carrier of M )
proof end;

theorem Th10: :: FF_SIEC:10
for M being Pnet holds
( rng ((Flow M) | the carrier' of M) misses dom ((Flow M) | the carrier' of M) & rng ((Flow M) | the carrier' of M) misses dom (((Flow M) ~) | the carrier' of M) & rng ((Flow M) | the carrier' of M) misses dom (id the carrier' of M) & rng (((Flow M) ~) | the carrier' of M) misses dom ((Flow M) | the carrier' of M) & rng (((Flow M) ~) | the carrier' of M) misses dom (((Flow M) ~) | the carrier' of M) & rng (((Flow M) ~) | the carrier' of M) misses dom (id the carrier' of M) & dom ((Flow M) | the carrier' of M) misses rng ((Flow M) | the carrier' of M) & dom ((Flow M) | the carrier' of M) misses rng (((Flow M) ~) | the carrier' of M) & dom ((Flow M) | the carrier' of M) misses rng (id the carrier of M) & dom (((Flow M) ~) | the carrier' of M) misses rng ((Flow M) | the carrier' of M) & dom (((Flow M) ~) | the carrier' of M) misses rng (((Flow M) ~) | the carrier' of M) & dom (((Flow M) ~) | the carrier' of M) misses rng (id the carrier of M) & rng ((Flow M) | the carrier of M) misses dom ((Flow M) | the carrier of M) & rng ((Flow M) | the carrier of M) misses dom (((Flow M) ~) | the carrier of M) & rng ((Flow M) | the carrier of M) misses dom (id the carrier of M) & rng (((Flow M) ~) | the carrier of M) misses dom ((Flow M) | the carrier of M) & rng (((Flow M) ~) | the carrier of M) misses dom (((Flow M) ~) | the carrier of M) & rng (((Flow M) ~) | the carrier of M) misses dom (id the carrier of M) & dom ((Flow M) | the carrier of M) misses rng ((Flow M) | the carrier of M) & dom ((Flow M) | the carrier of M) misses rng (((Flow M) ~) | the carrier of M) & dom ((Flow M) | the carrier of M) misses rng (id the carrier' of M) & dom (((Flow M) ~) | the carrier of M) misses rng ((Flow M) | the carrier of M) & dom (((Flow M) ~) | the carrier of M) misses rng (((Flow M) ~) | the carrier of M) & dom (((Flow M) ~) | the carrier of M) misses rng (id the carrier' of M) )
proof end;

theorem Th11: :: FF_SIEC:11
for M being Pnet holds
( ((Flow M) | the carrier' of M) * ((Flow M) | the carrier' of M) = {} & (((Flow M) ~) | the carrier' of M) * (((Flow M) ~) | the carrier' of M) = {} & ((Flow M) | the carrier' of M) * (((Flow M) ~) | the carrier' of M) = {} & (((Flow M) ~) | the carrier' of M) * ((Flow M) | the carrier' of M) = {} & ((Flow M) | the carrier of M) * ((Flow M) | the carrier of M) = {} & (((Flow M) ~) | the carrier of M) * (((Flow M) ~) | the carrier of M) = {} & ((Flow M) | the carrier of M) * (((Flow M) ~) | the carrier of M) = {} & (((Flow M) ~) | the carrier of M) * ((Flow M) | the carrier of M) = {} )
proof end;

theorem Th12: :: FF_SIEC:12
for M being Pnet holds
( ((Flow M) | the carrier' of M) * (id the carrier of M) = (Flow M) | the carrier' of M & (((Flow M) ~) | the carrier' of M) * (id the carrier of M) = ((Flow M) ~) | the carrier' of M & (id the carrier' of M) * ((Flow M) | the carrier' of M) = (Flow M) | the carrier' of M & (id the carrier' of M) * (((Flow M) ~) | the carrier' of M) = ((Flow M) ~) | the carrier' of M & ((Flow M) | the carrier of M) * (id the carrier' of M) = (Flow M) | the carrier of M & (((Flow M) ~) | the carrier of M) * (id the carrier' of M) = ((Flow M) ~) | the carrier of M & (id the carrier of M) * ((Flow M) | the carrier of M) = (Flow M) | the carrier of M & (id the carrier of M) * (((Flow M) ~) | the carrier of M) = ((Flow M) ~) | the carrier of M & ((Flow M) | the carrier of M) * (id the carrier' of M) = (Flow M) | the carrier of M & (((Flow M) ~) | the carrier of M) * (id the carrier' of M) = ((Flow M) ~) | the carrier of M & (id the carrier' of M) * ((Flow M) | the carrier of M) = {} & (id the carrier' of M) * (((Flow M) ~) | the carrier of M) = {} & ((Flow M) | the carrier of M) * (id the carrier of M) = {} & (((Flow M) ~) | the carrier of M) * (id the carrier of M) = {} & (id the carrier of M) * ((Flow M) | the carrier' of M) = {} & (id the carrier of M) * (((Flow M) ~) | the carrier' of M) = {} & ((Flow M) | the carrier' of M) * (id the carrier' of M) = {} & (((Flow M) ~) | the carrier' of M) * (id the carrier' of M) = {} )
proof end;

theorem Th13: :: FF_SIEC:13
for M being Pnet holds
( ((Flow M) ~) | the carrier' of M misses id (Elements M) & (Flow M) | the carrier' of M misses id (Elements M) & ((Flow M) ~) | the carrier of M misses id (Elements M) & (Flow M) | the carrier of M misses id (Elements M) )
proof end;

theorem Th14: :: FF_SIEC:14
for M being Pnet holds
( ((((Flow M) ~) | the carrier' of M) \/ (id the carrier of M)) \ (id (Elements M)) = ((Flow M) ~) | the carrier' of M & (((Flow M) | the carrier' of M) \/ (id the carrier of M)) \ (id (Elements M)) = (Flow M) | the carrier' of M & ((((Flow M) ~) | the carrier of M) \/ (id the carrier of M)) \ (id (Elements M)) = ((Flow M) ~) | the carrier of M & (((Flow M) | the carrier of M) \/ (id the carrier of M)) \ (id (Elements M)) = (Flow M) | the carrier of M & ((((Flow M) ~) | the carrier of M) \/ (id the carrier' of M)) \ (id (Elements M)) = ((Flow M) ~) | the carrier of M & (((Flow M) | the carrier of M) \/ (id the carrier' of M)) \ (id (Elements M)) = (Flow M) | the carrier of M & ((((Flow M) ~) | the carrier' of M) \/ (id the carrier' of M)) \ (id (Elements M)) = ((Flow M) ~) | the carrier' of M & (((Flow M) | the carrier' of M) \/ (id the carrier' of M)) \ (id (Elements M)) = (Flow M) | the carrier' of M )
proof end;

theorem Th15: :: FF_SIEC:15
for M being Pnet holds
( ((Flow M) | the carrier of M) ~ = ((Flow M) ~) | the carrier' of M & ((Flow M) | the carrier' of M) ~ = ((Flow M) ~) | the carrier of M )
proof end;

theorem Th16: :: FF_SIEC:16
for M being Pnet holds
( ((Flow M) | the carrier of M) \/ ((Flow M) | the carrier' of M) = Flow M & ((Flow M) | the carrier' of M) \/ ((Flow M) | the carrier of M) = Flow M & (((Flow M) | the carrier of M) ~) \/ (((Flow M) | the carrier' of M) ~) = (Flow M) ~ & (((Flow M) | the carrier' of M) ~) \/ (((Flow M) | the carrier of M) ~) = (Flow M) ~ )
proof end;

:: T R A N S F O R M A T I O N S
:: A [F -> E]
definition
let M be Pnet;
func f_enter M -> Relation equals :: FF_SIEC:def 7
(((Flow M) ~) | the carrier' of M) \/ (id the carrier of M);
correctness
coherence
(((Flow M) ~) | the carrier' of M) \/ (id the carrier of M) is Relation
;
;
func f_exit M -> Relation equals :: FF_SIEC:def 8
((Flow M) | the carrier' of M) \/ (id the carrier of M);
correctness
coherence
((Flow M) | the carrier' of M) \/ (id the carrier of M) is Relation
;
;
end;

:: deftheorem defines f_enter FF_SIEC:def 7 :
for M being Pnet holds f_enter M = (((Flow M) ~) | the carrier' of M) \/ (id the carrier of M);

:: deftheorem defines f_exit FF_SIEC:def 8 :
for M being Pnet holds f_exit M = ((Flow M) | the carrier' of M) \/ (id the carrier of M);

theorem :: FF_SIEC:17
for M being Pnet holds
( f_exit M c= [:(Elements M),(Elements M):] & f_enter M c= [:(Elements M),(Elements M):] )
proof end;

theorem :: FF_SIEC:18
for M being Pnet holds
( dom (f_exit M) c= Elements M & rng (f_exit M) c= Elements M & dom (f_enter M) c= Elements M & rng (f_enter M) c= Elements M )
proof end;

theorem :: FF_SIEC:19
for M being Pnet holds
( (f_exit M) * (f_exit M) = f_exit M & (f_exit M) * (f_enter M) = f_exit M & (f_enter M) * (f_enter M) = f_enter M & (f_enter M) * (f_exit M) = f_enter M )
proof end;

theorem :: FF_SIEC:20
for M being Pnet holds
( (f_exit M) * ((f_exit M) \ (id (Elements M))) = {} & (f_enter M) * ((f_enter M) \ (id (Elements M))) = {} )
proof end;

::B [F ->R]
definition
let M be Pnet;
func f_prox M -> Relation equals :: FF_SIEC:def 9
(((Flow M) | the carrier of M) \/ (((Flow M) ~) | the carrier of M)) \/ (id the carrier of M);
correctness
coherence
(((Flow M) | the carrier of M) \/ (((Flow M) ~) | the carrier of M)) \/ (id the carrier of M) is Relation
;
;
func f_flow M -> Relation equals :: FF_SIEC:def 10
(Flow M) \/ (id (Elements M));
correctness
coherence
(Flow M) \/ (id (Elements M)) is Relation
;
;
end;

:: deftheorem defines f_prox FF_SIEC:def 9 :
for M being Pnet holds f_prox M = (((Flow M) | the carrier of M) \/ (((Flow M) ~) | the carrier of M)) \/ (id the carrier of M);

:: deftheorem defines f_flow FF_SIEC:def 10 :
for M being Pnet holds f_flow M = (Flow M) \/ (id (Elements M));

theorem :: FF_SIEC:21
for M being Pnet holds
( (f_prox M) * (f_prox M) = f_prox M & ((f_prox M) \ (id (Elements M))) * (f_prox M) = {} & ((f_prox M) \/ ((f_prox M) ~)) \/ (id (Elements M)) = (f_flow M) \/ ((f_flow M) ~) )
proof end;

::C [F ->P]
definition
let M be Pnet;
func f_places M -> set equals :: FF_SIEC:def 11
the carrier of M;
correctness
coherence
the carrier of M is set
;
;
func f_transitions M -> set equals :: FF_SIEC:def 12
the carrier' of M;
correctness
coherence
the carrier' of M is set
;
;
func f_pre M -> Relation equals :: FF_SIEC:def 13
(Flow M) | the carrier' of M;
correctness
coherence
(Flow M) | the carrier' of M is Relation
;
;
func f_post M -> Relation equals :: FF_SIEC:def 14
((Flow M) ~) | the carrier' of M;
correctness
coherence
((Flow M) ~) | the carrier' of M is Relation
;
;
end;

:: deftheorem defines f_places FF_SIEC:def 11 :
for M being Pnet holds f_places M = the carrier of M;

:: deftheorem defines f_transitions FF_SIEC:def 12 :
for M being Pnet holds f_transitions M = the carrier' of M;

:: deftheorem defines f_pre FF_SIEC:def 13 :
for M being Pnet holds f_pre M = (Flow M) | the carrier' of M;

:: deftheorem defines f_post FF_SIEC:def 14 :
for M being Pnet holds f_post M = ((Flow M) ~) | the carrier' of M;

theorem :: FF_SIEC:22
for M being Pnet holds
( f_pre M c= [:(f_transitions M),(f_places M):] & f_post M c= [:(f_transitions M),(f_places M):] )
proof end;

theorem :: FF_SIEC:23
for M being Pnet holds
( f_prox M c= [:(Elements M),(Elements M):] & f_flow M c= [:(Elements M),(Elements M):] )
proof end;

::A [F -> E]
definition
let M be Pnet;
func f_entrance M -> Relation equals :: FF_SIEC:def 15
(((Flow M) ~) | the carrier of M) \/ (id the carrier' of M);
correctness
coherence
(((Flow M) ~) | the carrier of M) \/ (id the carrier' of M) is Relation
;
;
func f_escape M -> Relation equals :: FF_SIEC:def 16
((Flow M) | the carrier of M) \/ (id the carrier' of M);
correctness
coherence
((Flow M) | the carrier of M) \/ (id the carrier' of M) is Relation
;
;
end;

:: deftheorem defines f_entrance FF_SIEC:def 15 :
for M being Pnet holds f_entrance M = (((Flow M) ~) | the carrier of M) \/ (id the carrier' of M);

:: deftheorem defines f_escape FF_SIEC:def 16 :
for M being Pnet holds f_escape M = ((Flow M) | the carrier of M) \/ (id the carrier' of M);

theorem :: FF_SIEC:24
for M being Pnet holds
( f_escape M c= [:(Elements M),(Elements M):] & f_entrance M c= [:(Elements M),(Elements M):] )
proof end;

theorem :: FF_SIEC:25
for M being Pnet holds
( dom (f_escape M) c= Elements M & rng (f_escape M) c= Elements M & dom (f_entrance M) c= Elements M & rng (f_entrance M) c= Elements M )
proof end;

theorem :: FF_SIEC:26
for M being Pnet holds
( (f_escape M) * (f_escape M) = f_escape M & (f_escape M) * (f_entrance M) = f_escape M & (f_entrance M) * (f_entrance M) = f_entrance M & (f_entrance M) * (f_escape M) = f_entrance M )
proof end;

theorem :: FF_SIEC:27
for M being Pnet holds
( (f_escape M) * ((f_escape M) \ (id (Elements M))) = {} & (f_entrance M) * ((f_entrance M) \ (id (Elements M))) = {} )
proof end;

notation
let M be Pnet;
synonym f_circulation M for f_flow M;
end;

definition
let M be Pnet;
func f_adjac M -> Relation equals :: FF_SIEC:def 17
(((Flow M) | the carrier' of M) \/ (((Flow M) ~) | the carrier' of M)) \/ (id the carrier' of M);
correctness
coherence
(((Flow M) | the carrier' of M) \/ (((Flow M) ~) | the carrier' of M)) \/ (id the carrier' of M) is Relation
;
;
end;

:: deftheorem defines f_adjac FF_SIEC:def 17 :
for M being Pnet holds f_adjac M = (((Flow M) | the carrier' of M) \/ (((Flow M) ~) | the carrier' of M)) \/ (id the carrier' of M);

theorem :: FF_SIEC:28
for M being Pnet holds
( (f_adjac M) * (f_adjac M) = f_adjac M & ((f_adjac M) \ (id (Elements M))) * (f_adjac M) = {} & ((f_adjac M) \/ ((f_adjac M) ~)) \/ (id (Elements M)) = (f_circulation M) \/ ((f_circulation M) ~) )
proof end;