:: FF_SIEC semantic presentation

definition
let c1 be Net ;
canceled;
func chaos c1 -> set equals :: FF_SIEC:def 2
(Elements a1) \/ {(Elements a1)};
correctness
coherence
(Elements c1) \/ {(Elements c1)} is set
;
;
end;

:: deftheorem Def1 FF_SIEC:def 1 :
canceled;

:: deftheorem Def2 defines chaos FF_SIEC:def 2 :
for b1 being Net holds chaos b1 = (Elements b1) \/ {(Elements b1)};

definition
let c1, c2 be set ;
assume E1: c1 misses c2 ;
canceled;
func PTempty_f_net c1,c2 -> strict Pnet equals :Def4: :: FF_SIEC:def 4
Net(# a1,a2,{} #);
correctness
coherence
Net(# c1,c2,{} #) is strict Pnet
;
proof end;
end;

:: deftheorem Def3 FF_SIEC:def 3 :
canceled;

:: deftheorem Def4 defines PTempty_f_net FF_SIEC:def 4 :
for b1, b2 being set st b1 misses b2 holds
PTempty_f_net b1,b2 = Net(# b1,b2,{} #);

definition
let c1 be set ;
func Tempty_f_net c1 -> strict Pnet equals :: FF_SIEC:def 5
PTempty_f_net a1,{} ;
correctness
coherence
PTempty_f_net c1,{} is strict Pnet
;
;
func Pempty_f_net c1 -> strict Pnet equals :: FF_SIEC:def 6
PTempty_f_net {} ,a1;
correctness
coherence
PTempty_f_net {} ,c1 is strict Pnet
;
;
end;

:: deftheorem Def5 defines Tempty_f_net FF_SIEC:def 5 :
for b1 being set holds Tempty_f_net b1 = PTempty_f_net b1,{} ;

:: deftheorem Def6 defines Pempty_f_net FF_SIEC:def 6 :
for b1 being set holds Pempty_f_net b1 = PTempty_f_net {} ,b1;

definition
let c1 be set ;
func Tsingle_f_net c1 -> strict Pnet equals :: FF_SIEC:def 7
PTempty_f_net {} ,{a1};
correctness
coherence
PTempty_f_net {} ,{c1} is strict Pnet
;
;
func Psingle_f_net c1 -> strict Pnet equals :: FF_SIEC:def 8
PTempty_f_net {a1},{} ;
correctness
coherence
PTempty_f_net {c1},{} is strict Pnet
;
;
end;

:: deftheorem Def7 defines Tsingle_f_net FF_SIEC:def 7 :
for b1 being set holds Tsingle_f_net b1 = PTempty_f_net {} ,{b1};

:: deftheorem Def8 defines Psingle_f_net FF_SIEC:def 8 :
for b1 being set holds Psingle_f_net b1 = PTempty_f_net {b1},{} ;

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

:: deftheorem Def9 defines empty_f_net FF_SIEC:def 9 :
empty_f_net = PTempty_f_net {} ,{} ;

theorem Th1: :: FF_SIEC:1
canceled;

theorem Th2: :: FF_SIEC:2
for b1, b2 being set st b1 misses b2 holds
( the Places of (PTempty_f_net b1,b2) = b1 & the Transitions of (PTempty_f_net b1,b2) = b2 & the Flow of (PTempty_f_net b1,b2) = {} )
proof end;

theorem Th3: :: FF_SIEC:3
for b1 being set holds
( the Places of (Tempty_f_net b1) = b1 & the Transitions of (Tempty_f_net b1) = {} & the Flow of (Tempty_f_net b1) = {} )
proof end;

theorem Th4: :: FF_SIEC:4
for b1 being set holds
( the Places of (Pempty_f_net b1) = {} & the Transitions of (Pempty_f_net b1) = b1 & the Flow of (Pempty_f_net b1) = {} )
proof end;

theorem Th5: :: FF_SIEC:5
for b1 being set holds
( the Places of (Tsingle_f_net b1) = {} & the Transitions of (Tsingle_f_net b1) = {b1} & the Flow of (Tsingle_f_net b1) = {} )
proof end;

theorem Th6: :: FF_SIEC:6
for b1 being set holds
( the Places of (Psingle_f_net b1) = {b1} & the Transitions of (Psingle_f_net b1) = {} & the Flow of (Psingle_f_net b1) = {} )
proof end;

theorem Th7: :: FF_SIEC:7
( the Places of empty_f_net = {} & the Transitions of empty_f_net = {} & the Flow of empty_f_net = {} )
proof end;

theorem Th8: :: FF_SIEC:8
for b1 being Pnet holds
( the Places of b1 c= Elements b1 & the Transitions of b1 c= Elements b1 ) by NET_1:4, NET_1:5;

theorem Th9: :: FF_SIEC:9
canceled;

theorem Th10: :: FF_SIEC:10
canceled;

theorem Th11: :: FF_SIEC:11
for b1, b2 being set
for b3 being Pnet holds
( ( [b1,b2] in the Flow of b3 & b1 in the Transitions of b3 implies ( not b1 in the Places of b3 & not b2 in the Transitions of b3 & b2 in the Places of b3 ) ) & ( [b1,b2] in the Flow of b3 & b2 in the Transitions of b3 implies ( not b2 in the Places of b3 & not b1 in the Transitions of b3 & b1 in the Places of b3 ) ) & ( [b1,b2] in the Flow of b3 & b1 in the Places of b3 implies ( not b2 in the Places of b3 & not b1 in the Transitions of b3 & b2 in the Transitions of b3 ) ) & ( [b1,b2] in the Flow of b3 & b2 in the Places of b3 implies ( not b1 in the Places of b3 & not b2 in the Transitions of b3 & b1 in the Transitions of b3 ) ) )
proof end;

theorem Th12: :: FF_SIEC:12
for b1 being Pnet holds chaos b1 <> {}
proof end;

theorem Th13: :: FF_SIEC:13
for b1 being Pnet holds
( the Flow of b1 c= [:(Elements b1),(Elements b1):] & the Flow of b1 ~ c= [:(Elements b1),(Elements b1):] )
proof end;

theorem Th14: :: FF_SIEC:14
for b1 being Pnet holds
( rng (the Flow of b1 | the Transitions of b1) c= the Places of b1 & rng ((the Flow of b1 ~ ) | the Transitions of b1) c= the Places of b1 & dom (the Flow of b1 | the Transitions of b1) c= the Transitions of b1 & dom ((the Flow of b1 ~ ) | the Transitions of b1) c= the Transitions of b1 & rng (the Flow of b1 | the Places of b1) c= the Transitions of b1 & rng ((the Flow of b1 ~ ) | the Places of b1) c= the Transitions of b1 & dom (the Flow of b1 | the Places of b1) c= the Places of b1 & dom ((the Flow of b1 ~ ) | the Places of b1) c= the Places of b1 & rng (id the Transitions of b1) c= the Transitions of b1 & dom (id the Transitions of b1) c= the Transitions of b1 & rng (id the Places of b1) c= the Places of b1 & dom (id the Places of b1) c= the Places of b1 )
proof end;

Lemma5: for b1, b2, b3, b4 being set st b2 misses b4 & b1 c= b2 & b3 c= b4 holds
b1 misses b3
proof end;

theorem Th15: :: FF_SIEC:15
for b1 being Pnet holds
( rng (the Flow of b1 | the Transitions of b1) misses dom (the Flow of b1 | the Transitions of b1) & rng (the Flow of b1 | the Transitions of b1) misses dom ((the Flow of b1 ~ ) | the Transitions of b1) & rng (the Flow of b1 | the Transitions of b1) misses dom (id the Transitions of b1) & rng ((the Flow of b1 ~ ) | the Transitions of b1) misses dom (the Flow of b1 | the Transitions of b1) & rng ((the Flow of b1 ~ ) | the Transitions of b1) misses dom ((the Flow of b1 ~ ) | the Transitions of b1) & rng ((the Flow of b1 ~ ) | the Transitions of b1) misses dom (id the Transitions of b1) & dom (the Flow of b1 | the Transitions of b1) misses rng (the Flow of b1 | the Transitions of b1) & dom (the Flow of b1 | the Transitions of b1) misses rng ((the Flow of b1 ~ ) | the Transitions of b1) & dom (the Flow of b1 | the Transitions of b1) misses rng (id the Places of b1) & dom ((the Flow of b1 ~ ) | the Transitions of b1) misses rng (the Flow of b1 | the Transitions of b1) & dom ((the Flow of b1 ~ ) | the Transitions of b1) misses rng ((the Flow of b1 ~ ) | the Transitions of b1) & dom ((the Flow of b1 ~ ) | the Transitions of b1) misses rng (id the Places of b1) & rng (the Flow of b1 | the Places of b1) misses dom (the Flow of b1 | the Places of b1) & rng (the Flow of b1 | the Places of b1) misses dom ((the Flow of b1 ~ ) | the Places of b1) & rng (the Flow of b1 | the Places of b1) misses dom (id the Places of b1) & rng ((the Flow of b1 ~ ) | the Places of b1) misses dom (the Flow of b1 | the Places of b1) & rng ((the Flow of b1 ~ ) | the Places of b1) misses dom ((the Flow of b1 ~ ) | the Places of b1) & rng ((the Flow of b1 ~ ) | the Places of b1) misses dom (id the Places of b1) & dom (the Flow of b1 | the Places of b1) misses rng (the Flow of b1 | the Places of b1) & dom (the Flow of b1 | the Places of b1) misses rng ((the Flow of b1 ~ ) | the Places of b1) & dom (the Flow of b1 | the Places of b1) misses rng (id the Transitions of b1) & dom ((the Flow of b1 ~ ) | the Places of b1) misses rng (the Flow of b1 | the Places of b1) & dom ((the Flow of b1 ~ ) | the Places of b1) misses rng ((the Flow of b1 ~ ) | the Places of b1) & dom ((the Flow of b1 ~ ) | the Places of b1) misses rng (id the Transitions of b1) )
proof end;

theorem Th16: :: FF_SIEC:16
for b1 being Pnet holds
( (the Flow of b1 | the Transitions of b1) * (the Flow of b1 | the Transitions of b1) = {} & ((the Flow of b1 ~ ) | the Transitions of b1) * ((the Flow of b1 ~ ) | the Transitions of b1) = {} & (the Flow of b1 | the Transitions of b1) * ((the Flow of b1 ~ ) | the Transitions of b1) = {} & ((the Flow of b1 ~ ) | the Transitions of b1) * (the Flow of b1 | the Transitions of b1) = {} & (the Flow of b1 | the Places of b1) * (the Flow of b1 | the Places of b1) = {} & ((the Flow of b1 ~ ) | the Places of b1) * ((the Flow of b1 ~ ) | the Places of b1) = {} & (the Flow of b1 | the Places of b1) * ((the Flow of b1 ~ ) | the Places of b1) = {} & ((the Flow of b1 ~ ) | the Places of b1) * (the Flow of b1 | the Places of b1) = {} )
proof end;

theorem Th17: :: FF_SIEC:17
for b1 being Pnet holds
( (the Flow of b1 | the Transitions of b1) * (id the Places of b1) = the Flow of b1 | the Transitions of b1 & ((the Flow of b1 ~ ) | the Transitions of b1) * (id the Places of b1) = (the Flow of b1 ~ ) | the Transitions of b1 & (id the Transitions of b1) * (the Flow of b1 | the Transitions of b1) = the Flow of b1 | the Transitions of b1 & (id the Transitions of b1) * ((the Flow of b1 ~ ) | the Transitions of b1) = (the Flow of b1 ~ ) | the Transitions of b1 & (the Flow of b1 | the Places of b1) * (id the Transitions of b1) = the Flow of b1 | the Places of b1 & ((the Flow of b1 ~ ) | the Places of b1) * (id the Transitions of b1) = (the Flow of b1 ~ ) | the Places of b1 & (id the Places of b1) * (the Flow of b1 | the Places of b1) = the Flow of b1 | the Places of b1 & (id the Places of b1) * ((the Flow of b1 ~ ) | the Places of b1) = (the Flow of b1 ~ ) | the Places of b1 & (the Flow of b1 | the Places of b1) * (id the Transitions of b1) = the Flow of b1 | the Places of b1 & ((the Flow of b1 ~ ) | the Places of b1) * (id the Transitions of b1) = (the Flow of b1 ~ ) | the Places of b1 & (id the Transitions of b1) * (the Flow of b1 | the Places of b1) = {} & (id the Transitions of b1) * ((the Flow of b1 ~ ) | the Places of b1) = {} & (the Flow of b1 | the Places of b1) * (id the Places of b1) = {} & ((the Flow of b1 ~ ) | the Places of b1) * (id the Places of b1) = {} & (id the Places of b1) * (the Flow of b1 | the Transitions of b1) = {} & (id the Places of b1) * ((the Flow of b1 ~ ) | the Transitions of b1) = {} & (the Flow of b1 | the Transitions of b1) * (id the Transitions of b1) = {} & ((the Flow of b1 ~ ) | the Transitions of b1) * (id the Transitions of b1) = {} )
proof end;

theorem Th18: :: FF_SIEC:18
for b1 being Pnet holds
( (the Flow of b1 ~ ) | the Transitions of b1 misses id (Elements b1) & the Flow of b1 | the Transitions of b1 misses id (Elements b1) & (the Flow of b1 ~ ) | the Places of b1 misses id (Elements b1) & the Flow of b1 | the Places of b1 misses id (Elements b1) )
proof end;

theorem Th19: :: FF_SIEC:19
for b1 being Pnet holds
( (((the Flow of b1 ~ ) | the Transitions of b1) \/ (id the Places of b1)) \ (id (Elements b1)) = (the Flow of b1 ~ ) | the Transitions of b1 & ((the Flow of b1 | the Transitions of b1) \/ (id the Places of b1)) \ (id (Elements b1)) = the Flow of b1 | the Transitions of b1 & (((the Flow of b1 ~ ) | the Places of b1) \/ (id the Places of b1)) \ (id (Elements b1)) = (the Flow of b1 ~ ) | the Places of b1 & ((the Flow of b1 | the Places of b1) \/ (id the Places of b1)) \ (id (Elements b1)) = the Flow of b1 | the Places of b1 & (((the Flow of b1 ~ ) | the Places of b1) \/ (id the Transitions of b1)) \ (id (Elements b1)) = (the Flow of b1 ~ ) | the Places of b1 & ((the Flow of b1 | the Places of b1) \/ (id the Transitions of b1)) \ (id (Elements b1)) = the Flow of b1 | the Places of b1 & (((the Flow of b1 ~ ) | the Transitions of b1) \/ (id the Transitions of b1)) \ (id (Elements b1)) = (the Flow of b1 ~ ) | the Transitions of b1 & ((the Flow of b1 | the Transitions of b1) \/ (id the Transitions of b1)) \ (id (Elements b1)) = the Flow of b1 | the Transitions of b1 )
proof end;

theorem Th20: :: FF_SIEC:20
for b1 being Pnet holds
( (the Flow of b1 | the Places of b1) ~ = (the Flow of b1 ~ ) | the Transitions of b1 & (the Flow of b1 | the Transitions of b1) ~ = (the Flow of b1 ~ ) | the Places of b1 )
proof end;

theorem Th21: :: FF_SIEC:21
for b1 being Pnet holds
( (the Flow of b1 | the Places of b1) \/ (the Flow of b1 | the Transitions of b1) = the Flow of b1 & (the Flow of b1 | the Transitions of b1) \/ (the Flow of b1 | the Places of b1) = the Flow of b1 & ((the Flow of b1 | the Places of b1) ~ ) \/ ((the Flow of b1 | the Transitions of b1) ~ ) = the Flow of b1 ~ & ((the Flow of b1 | the Transitions of b1) ~ ) \/ ((the Flow of b1 | the Places of b1) ~ ) = the Flow of b1 ~ )
proof end;

definition
let c1 be Pnet;
func f_enter c1 -> Relation equals :: FF_SIEC:def 10
((the Flow of a1 ~ ) | the Transitions of a1) \/ (id the Places of a1);
correctness
coherence
((the Flow of c1 ~ ) | the Transitions of c1) \/ (id the Places of c1) is Relation
;
;
func f_exit c1 -> Relation equals :: FF_SIEC:def 11
(the Flow of a1 | the Transitions of a1) \/ (id the Places of a1);
correctness
coherence
(the Flow of c1 | the Transitions of c1) \/ (id the Places of c1) is Relation
;
;
end;

:: deftheorem Def10 defines f_enter FF_SIEC:def 10 :
for b1 being Pnet holds f_enter b1 = ((the Flow of b1 ~ ) | the Transitions of b1) \/ (id the Places of b1);

:: deftheorem Def11 defines f_exit FF_SIEC:def 11 :
for b1 being Pnet holds f_exit b1 = (the Flow of b1 | the Transitions of b1) \/ (id the Places of b1);

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

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

theorem Th24: :: FF_SIEC:24
for b1 being Pnet holds
( (f_exit b1) * (f_exit b1) = f_exit b1 & (f_exit b1) * (f_enter b1) = f_exit b1 & (f_enter b1) * (f_enter b1) = f_enter b1 & (f_enter b1) * (f_exit b1) = f_enter b1 )
proof end;

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

definition
let c1 be Pnet;
func f_prox c1 -> Relation equals :: FF_SIEC:def 12
((the Flow of a1 | the Places of a1) \/ ((the Flow of a1 ~ ) | the Places of a1)) \/ (id the Places of a1);
correctness
coherence
((the Flow of c1 | the Places of c1) \/ ((the Flow of c1 ~ ) | the Places of c1)) \/ (id the Places of c1) is Relation
;
;
func f_flow c1 -> Relation equals :: FF_SIEC:def 13
the Flow of a1 \/ (id (Elements a1));
correctness
coherence
the Flow of c1 \/ (id (Elements c1)) is Relation
;
;
end;

:: deftheorem Def12 defines f_prox FF_SIEC:def 12 :
for b1 being Pnet holds f_prox b1 = ((the Flow of b1 | the Places of b1) \/ ((the Flow of b1 ~ ) | the Places of b1)) \/ (id the Places of b1);

:: deftheorem Def13 defines f_flow FF_SIEC:def 13 :
for b1 being Pnet holds f_flow b1 = the Flow of b1 \/ (id (Elements b1));

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

definition
let c1 be Pnet;
func f_places c1 -> set equals :: FF_SIEC:def 14
the Places of a1;
correctness
coherence
the Places of c1 is set
;
;
func f_transitions c1 -> set equals :: FF_SIEC:def 15
the Transitions of a1;
correctness
coherence
the Transitions of c1 is set
;
;
func f_pre c1 -> Relation equals :: FF_SIEC:def 16
the Flow of a1 | the Transitions of a1;
correctness
coherence
the Flow of c1 | the Transitions of c1 is Relation
;
;
func f_post c1 -> Relation equals :: FF_SIEC:def 17
(the Flow of a1 ~ ) | the Transitions of a1;
correctness
coherence
(the Flow of c1 ~ ) | the Transitions of c1 is Relation
;
;
end;

:: deftheorem Def14 defines f_places FF_SIEC:def 14 :
for b1 being Pnet holds f_places b1 = the Places of b1;

:: deftheorem Def15 defines f_transitions FF_SIEC:def 15 :
for b1 being Pnet holds f_transitions b1 = the Transitions of b1;

:: deftheorem Def16 defines f_pre FF_SIEC:def 16 :
for b1 being Pnet holds f_pre b1 = the Flow of b1 | the Transitions of b1;

:: deftheorem Def17 defines f_post FF_SIEC:def 17 :
for b1 being Pnet holds f_post b1 = (the Flow of b1 ~ ) | the Transitions of b1;

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

theorem Th28: :: FF_SIEC:28
for b1 being Pnet holds f_places b1 misses f_transitions b1 by NET_1:def 1;

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

definition
let c1 be Pnet;
func f_entrance c1 -> Relation equals :: FF_SIEC:def 18
((the Flow of a1 ~ ) | the Places of a1) \/ (id the Transitions of a1);
correctness
coherence
((the Flow of c1 ~ ) | the Places of c1) \/ (id the Transitions of c1) is Relation
;
;
func f_escape c1 -> Relation equals :: FF_SIEC:def 19
(the Flow of a1 | the Places of a1) \/ (id the Transitions of a1);
correctness
coherence
(the Flow of c1 | the Places of c1) \/ (id the Transitions of c1) is Relation
;
;
end;

:: deftheorem Def18 defines f_entrance FF_SIEC:def 18 :
for b1 being Pnet holds f_entrance b1 = ((the Flow of b1 ~ ) | the Places of b1) \/ (id the Transitions of b1);

:: deftheorem Def19 defines f_escape FF_SIEC:def 19 :
for b1 being Pnet holds f_escape b1 = (the Flow of b1 | the Places of b1) \/ (id the Transitions of b1);

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

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

theorem Th32: :: FF_SIEC:32
for b1 being Pnet holds
( (f_escape b1) * (f_escape b1) = f_escape b1 & (f_escape b1) * (f_entrance b1) = f_escape b1 & (f_entrance b1) * (f_entrance b1) = f_entrance b1 & (f_entrance b1) * (f_escape b1) = f_entrance b1 )
proof end;

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

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

definition
let c1 be Pnet;
func f_adjac c1 -> Relation equals :: FF_SIEC:def 20
((the Flow of a1 | the Transitions of a1) \/ ((the Flow of a1 ~ ) | the Transitions of a1)) \/ (id the Transitions of a1);
correctness
coherence
((the Flow of c1 | the Transitions of c1) \/ ((the Flow of c1 ~ ) | the Transitions of c1)) \/ (id the Transitions of c1) is Relation
;
;
end;

:: deftheorem Def20 defines f_adjac FF_SIEC:def 20 :
for b1 being Pnet holds f_adjac b1 = ((the Flow of b1 | the Transitions of b1) \/ ((the Flow of b1 ~ ) | the Transitions of b1)) \/ (id the Transitions of b1);

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