Một toán tử ghép nối song song [7], ký hiệu || là một phép toán ghép nối 2 thành phần phần mềm (được biểu diễn bằng 2 hệ trạng thái được gán nhãn) bằng cách đồng bộ các hành vi chung trên bảng chữ cái và đan xen các hành động còn lại.
Giả sử có 2 hệ chuyển trạng thái được gán nhãn là M1= (S1, S01, Act1, T1) và M2= (S2, S02, Act2, T2), ghép nối song song giữa M1 và M2, ký hiệu M1 || M2 được định nghĩa như sau:
Nếu M1 = hoặc M2 = thì M1|| M2 = . Ngược lại, M1|| M2 = (S, S0, Act, T) trong đó:
S= S1S2, Act= Act1 Act2, S0 = (S01, S02) và hàm T được xác định như sau:
Với mọi (s1,a,s2) ∈ T1 và (s1′, a, s2′) ∈ T2 thì ( (s1, s1′), a, (s2, s2′) ) ∈ T Với (s1,a,s2) ∈ T1, a ∉ Act2 thì s′ ∈ S2 ta có ( (s1,s′), a, (s2,s′) ) ∈ T Với (s1′, a, s2′) ∈ T2, a ∉ Act1 thì s ∈ S1 ta có ( (s, s1′), a, (s, s2′) ) ∈ T
Ví dụ 3.6: Ghép nối song song hai LTS Input và Output như trên hình 3.7.
Hình 3.7: LTS Input và Output.
Khi ghép nối hai mô hình trên, hai hành động send và ack là đồng bộ, các hành động còn lại đan xen nhau. Theo các quy tắc trên ta xác định được hệ chuyển trạng thái song song được gán nhãn M′ = (S′, S0′, Act′, T′) trong đó:
S′ = S1 x S2 = {(0,a), (0,b), (0,c), (1,a), (1,b), (1,c), (2,a), (2,b), (2,c)} Act′ = {in, send, out, ack}
S0′ = (0, a) Input 0 1 2 in send ack a b c send out ack Output
T′ = {((0,a), in, (1,a)), ((1,a), send, (2,b)), ((2,b), out, (2,c)), ((2,c), ack, (0,a)), ((0,b), in, (1,b)), ((0,b), out, (0,c)), ((1,b), out, (1,c)), ((0,c), in, (1,c)) }
Chúng ta tiến hành loại bỏ tất cả các trạng thái không đến được từ trạng thái khởi tạo (0,a) và tất cả các hành động đưa hệ thống về trạng thái đó ta sẽ thu được một hệ thống chuyển trạng thái ghép nối song song được gán nhãn M = (S, S0, Act, T) trong đó:
S = S1 x S2 = {(0,a), (1,a), (2,b), (2,c)} Act = {in, send, out, ack}
S0 = (0, a)
T = {((0,a), in, (1,a)), ((1,a), send, (2,b)), ((2,b), out, (2,c)), ((2,c), ack, (0,a))}
Hình 3.8: LTS ghép nối song song Input||Output.