let PTN be PT_net_Str ; :: thesis: for M0 being Boolean_marking of PTN
for Q0, Q1 being FinSequence of the Transitions of PTN st Q0 ^ Q1 is_firable_on M0 holds
( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 )

let M0 be Boolean_marking of PTN; :: thesis: for Q0, Q1 being FinSequence of the Transitions of PTN st Q0 ^ Q1 is_firable_on M0 holds
( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 )

let Q0, Q1 be FinSequence of the Transitions of PTN; :: thesis: ( Q0 ^ Q1 is_firable_on M0 implies ( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 ) )
assume A1: Q0 ^ Q1 is_firable_on M0 ; :: thesis: ( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 )
now
per cases ( ( Q0 = {} & Q1 = {} ) or ( Q0 = {} & Q1 <> {} ) or ( Q0 <> {} & Q1 = {} ) or ( Q0 <> {} & Q1 <> {} ) ) ;
case A4: ( Q0 <> {} & Q1 <> {} ) ; :: thesis: for i being Element of NAT holds
( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 )

let i be Element of NAT ; :: thesis: ( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 )
A5: len Q0 <> 0 by A4;
A6: len Q1 <> 0 by A4;
then (len Q0) + (len Q1) <> 0 by NAT_1:7;
then len (Q0 ^ Q1) <> 0 by FINSEQ_1:35;
then Q0 ^ Q1 <> {} ;
then consider M being FinSequence of Bool_marks_of PTN such that
len (Q0 ^ Q1) = len M and
A7: (Q0 ^ Q1) /. 1 is_firable_on M0 and
A8: M /. 1 = Firing ((Q0 ^ Q1) /. 1),M0 and
A9: for i being Element of NAT st i < len (Q0 ^ Q1) & i > 0 holds
( (Q0 ^ Q1) /. (i + 1) is_firable_on M /. i & M /. (i + 1) = Firing ((Q0 ^ Q1) /. (i + 1)),(M /. i) ) by A1, Def4;
consider M3 being FinSequence of Bool_marks_of PTN such that
A10: len Q0 = len M3 and
A11: Firing Q0,M0 = M3 /. (len M3) and
A12: M3 /. 1 = Firing (Q0 /. 1),M0 and
A13: for i being Element of NAT st i < len Q0 & i > 0 holds
M3 /. (i + 1) = Firing (Q0 /. (i + 1)),(M3 /. i) by A4, Def5;
consider M4 being FinSequence of Bool_marks_of PTN such that
A14: len Q1 = len M4 and
Firing Q1,(Firing Q0,M0) = M4 /. (len M4) and
A15: M4 /. 1 = Firing (Q1 /. 1),(Firing Q0,M0) and
A16: for i being Element of NAT st i < len Q1 & i > 0 holds
M4 /. (i + 1) = Firing (Q1 /. (i + 1)),(M4 /. i) by A4, Def5;
A17: len Q0 > 0 by A5, NAT_1:3;
A18: len Q1 > 0 by A6, NAT_1:3;
A19: 0 + 1 <= len Q0 by A17, NAT_1:13;
defpred S1[ Element of NAT ] means ( 1 + $1 <= len Q0 implies M /. (1 + $1) = M3 /. (1 + $1) );
A20: S1[ 0 ] by A8, A12, Th8;
0 < len Q1 by A6, NAT_1:3;
then 0 + (len Q0) < (len Q0) + (len Q1) by XREAL_1:8;
then A21: len Q0 < len (Q0 ^ Q1) by FINSEQ_1:35;
A22: now
let k be Element of NAT ; :: thesis: ( S1[k] implies S1[k + 1] )
A23: 0 <= k by NAT_1:2;
then A24: 0 < 1 + k ;
assume A25: S1[k] ; :: thesis: S1[k + 1]
now
assume A26: 1 + (k + 1) <= len Q0 ; :: thesis: M /. (1 + (k + 1)) = M3 /. (1 + (k + 1))
then A27: (Q0 ^ Q1) /. (1 + (k + 1)) = Q0 /. (1 + (k + 1)) by Th8, NAT_1:11;
A28: 1 + k < len Q0 by A26, NAT_1:13;
then ( 0 < 1 + k & 1 + k < len (Q0 ^ Q1) ) by A21, A23, XXREAL_0:2;
then M /. (1 + (k + 1)) = Firing (Q0 /. (1 + (k + 1))),(M3 /. (1 + k)) by A9, A25, A26, A27, NAT_1:13;
hence M /. (1 + (k + 1)) = M3 /. (1 + (k + 1)) by A13, A24, A28; :: thesis: verum
end;
hence S1[k + 1] ; :: thesis: verum
end;
A29: for k being Element of NAT holds S1[k] from NAT_1:sch 1(A20, A22);
A30: 0 + 1 <= len Q1 by A18, NAT_1:13;
reconsider m = (len Q0) - 1 as Element of NAT by A5, NAT_1:3, NAT_1:20;
defpred S2[ Element of NAT ] means ( 1 + $1 <= len Q1 implies M /. (((len Q0) + 1) + $1) = M4 /. (1 + $1) );
M /. (((len Q0) + 1) + 0 ) = Firing ((Q0 ^ Q1) /. ((len Q0) + 1)),(M /. (1 + m)) by A9, A17, A21
.= Firing ((Q0 ^ Q1) /. ((len Q0) + 1)),(Firing Q0,M0) by A10, A11, A29
.= M4 /. (1 + 0 ) by A15, A30, GOBOARD2:5 ;
then A31: S2[ 0 ] ;
A32: now
let k be Element of NAT ; :: thesis: ( S2[k] implies S2[k + 1] )
A33: (((len Q0) + 1) + k) + 1 = ((len Q0) + 1) + (k + 1) ;
0 <= k by NAT_1:2;
then A34: 0 < 1 + k ;
0 <= k + (len Q0) by NAT_1:2;
then A35: 0 < ((len Q0) + k) + 1 ;
assume A36: S2[k] ; :: thesis: S2[k + 1]
now
assume A37: 1 + (k + 1) <= len Q1 ; :: thesis: M /. (((len Q0) + 1) + (k + 1)) = M4 /. (1 + (k + 1))
then A38: (Q0 ^ Q1) /. ((len Q0) + (1 + (k + 1))) = Q1 /. (1 + (k + 1)) by GOBOARD2:5, NAT_1:11;
A39: 1 + k < len Q1 by A37, NAT_1:13;
then (len Q0) + (1 + k) < (len Q0) + (len Q1) by XREAL_1:8;
then ((len Q0) + 1) + k < len (Q0 ^ Q1) by FINSEQ_1:35;
then M /. (((len Q0) + 1) + (k + 1)) = Firing (Q1 /. (1 + (k + 1))),(M4 /. (1 + k)) by A9, A33, A35, A36, A37, A38, NAT_1:13;
hence M /. (((len Q0) + 1) + (k + 1)) = M4 /. (1 + (k + 1)) by A16, A34, A39; :: thesis: verum
end;
hence S2[k + 1] ; :: thesis: verum
end;
A40: for k being Element of NAT holds S2[k] from NAT_1:sch 1(A31, A32);
consider j being Nat such that
A41: len M3 = j + 1 by A5, A10, NAT_1:6;
reconsider j = j as Element of NAT by ORDINAL1:def 13;
len M3 = j + 1 by A41;
then A42: M /. (len M3) = M3 /. (len M3) by A10, A29;
Q1 /. 1 = (Q0 ^ Q1) /. ((len Q0) + 1) by A30, GOBOARD2:5;
then A43: Q1 /. 1 is_firable_on M3 /. (len M3) by A9, A10, A17, A21, A42;
now
let i be Element of NAT ; :: thesis: ( i < len Q1 & i > 0 implies ( Q1 /. (i + 1) is_firable_on M4 /. i & M4 /. (i + 1) = Firing (Q1 /. (i + 1)),(M4 /. i) ) )
assume A44: ( i < len Q1 & i > 0 ) ; :: thesis: ( Q1 /. (i + 1) is_firable_on M4 /. i & M4 /. (i + 1) = Firing (Q1 /. (i + 1)),(M4 /. i) )
len (Q0 ^ Q1) = (len Q0) + (len Q1) by FINSEQ_1:35;
then A45: (len Q0) + i < len (Q0 ^ Q1) by A44, XREAL_1:8;
i < (len Q0) + i by A5, NAT_1:3, XREAL_1:31;
then A46: ( (Q0 ^ Q1) /. (((len Q0) + i) + 1) is_firable_on M /. ((len Q0) + i) & M /. (((len Q0) + i) + 1) = Firing ((Q0 ^ Q1) /. (((len Q0) + i) + 1)),(M /. ((len Q0) + i)) ) by A9, A44, A45;
( i + 1 >= 1 & i + 1 <= len Q1 ) by A44, NAT_1:11, NAT_1:13;
then A47: i + 1 in dom Q1 by FINSEQ_3:27;
A48: (Q0 ^ Q1) /. (((len Q0) + i) + 1) = (Q0 ^ Q1) /. ((len Q0) + (i + 1))
.= Q1 /. (i + 1) by A47, FINSEQ_4:84 ;
consider j being Nat such that
A49: i = j + 1 by A44, NAT_1:6;
reconsider j = j as Element of NAT by ORDINAL1:def 13;
((len Q0) + 1) + j = (len Q0) + (j + 1) ;
then A50: M /. ((len Q0) + i) = M4 /. i by A40, A44, A49;
A51: ((len Q0) + 1) + i = ((len Q0) + i) + 1 ;
i + 1 <= len Q1 by A44, NAT_1:13;
hence ( Q1 /. (i + 1) is_firable_on M4 /. i & M4 /. (i + 1) = Firing (Q1 /. (i + 1)),(M4 /. i) ) by A40, A46, A48, A50, A51; :: thesis: verum
end;
hence Q1 is_firable_on Firing Q0,M0 by A11, A14, A15, A43, Def4; :: thesis: Q0 is_firable_on M0
A52: Q0 /. 1 is_firable_on M0 by A7, A19, Th8;
now
let i be Element of NAT ; :: thesis: ( i < len Q0 & i > 0 implies ( Q0 /. (i + 1) is_firable_on M3 /. i & M3 /. (i + 1) = Firing (Q0 /. (i + 1)),(M3 /. i) ) )
assume A53: ( i < len Q0 & i > 0 ) ; :: thesis: ( Q0 /. (i + 1) is_firable_on M3 /. i & M3 /. (i + 1) = Firing (Q0 /. (i + 1)),(M3 /. i) )
then i < len (Q0 ^ Q1) by A21, XXREAL_0:2;
then A54: ( (Q0 ^ Q1) /. (i + 1) is_firable_on M /. i & M /. (i + 1) = Firing ((Q0 ^ Q1) /. (i + 1)),(M /. i) ) by A9, A53;
( i + 1 >= 1 & i + 1 <= len Q0 ) by A53, NAT_1:11, NAT_1:13;
then i + 1 in dom Q0 by FINSEQ_3:27;
then A55: (Q0 ^ Q1) /. (i + 1) = Q0 /. (i + 1) by FINSEQ_4:83;
consider j being Nat such that
A56: i = j + 1 by A53, NAT_1:6;
reconsider j = j as Element of NAT by ORDINAL1:def 13;
i = j + 1 by A56;
then A57: M /. i = M3 /. i by A29, A53;
i + 1 <= len Q0 by A53, NAT_1:13;
hence ( Q0 /. (i + 1) is_firable_on M3 /. i & M3 /. (i + 1) = Firing (Q0 /. (i + 1)),(M3 /. i) ) by A29, A54, A55, A57; :: thesis: verum
end;
hence Q0 is_firable_on M0 by A10, A12, A52, Def4; :: thesis: verum
end;
end;
end;
hence ( Q1 is_firable_on Firing Q0,M0 & Q0 is_firable_on M0 ) ; :: thesis: verum