Example

We have languages: We can construct FSA for both languages: For :

stateDiagram
[*] --> q0
q0 --> q0 : 0
q0 --> q1 : 1
q1 --> q1 : 0,1
q1 --> [*]

For

stateDiagram
[*] --> r0
r0 --> r1 : 0
r1 --> r1 : 0,1
r1 --> [*]

We now construct the cartesian product consturction, create the sets of tuples of things

stateDiagram
[*] --> (q0,r0)
(q0,r0)
(q0,r1)
(q0,r2)
(q1,r0)
(q1,r1)
(q1,r2)

For each tuple, every item of the tuple points to the same item, for example if , then So, lets construct the new FSA

stateDiagram
[*] --> (q0,r0)
(q0,r0) --> (q0,r1) : 0
(q0,r0) --> (q1,r2) : 1
(q0,r1) --> (q0,r1) : 0
(q0,r1) --> (q1,r1) : 1
(q0,r2) --> (q0,r2) : 0
(q0,r2) --> (q1,r2) : 1
(q1,r0) --> (q1,r1) : 0
(q1,r0) --> (q1,r2) : 1
(q1,r1) --> (q1,r1) : 0,1
(q1,r2) --> (q1,r2) : 0,1

Now, we make all the states that contain a terminal state, its own terminal state

stateDiagram
[*] --> (q0,r0)
(q0,r0) --> (q0,r1) : 0
(q0,r0) --> (q1,r2) : 1
(q0,r1) --> (q0,r1) : 0
(q0,r1) --> (q1,r1) : 1
(q0,r2) --> (q0,r2) : 0
(q0,r2) --> (q1,r2) : 1
(q1,r0) --> (q1,r1) : 0
(q1,r0) --> (q1,r2) : 1
(q1,r1) --> (q1,r1) : 0,1
(q1,r2) --> (q1,r2) : 0,1
(q0,r1) --> [*]
(q1,r0) --> [*]
(q1,r1) --> [*]
(q1,r2) --> [*]