Im trying to implement a program that will check the descriptions of two FA and check if they are equivalent.

Im assuming (for simplicity) that each FA is in minimal form, the input alphabet is {a b} and each FA only has one finish state.

Format for an FA is as follows: Number_States, Start_State, Finish_State, State_Number, Next_A, Next_B. So and example of it would be something like this, where the Start_State is 0 and the Finish_State is 4:

```
State next_a next_b
0 0 1
1 2 1
2 0 3
3 4 1
4 4 4
```

Im also assuming that two FA are the equivalent if they have the same number of states and they are the same apart from state renumbering.

Right now, I can eeasily check if two FA are the same by looping throughout the 2d arrays and checking if each number is the exact same. However, I'm not sure exactly how to be able to see if they are equivalent if the states are renumbered.

For example, these two arrays are the exact same, so it returns true.

```
int fa_1[5][2] = {{0, 1},
{2, 1},
{0, 3},
{4, 1},
{4, 4}};
int fa_2[5][2] = {{0, 1},
{2, 1},
{0, 3},
{4, 1},
{4, 4}};
```

For example, these two arrays are not equivalent, it has a 2 instead of a 0 in the third row and thus doesn't define the same language.

```
int fa_1[5][2] = {{0, 1},
{2, 1},
{0, 3},
{4, 1},
{4, 4}};
int fa_2[5][2] = {{0, 1},
{2, 1},
{2, 3},
{4, 1},
{4, 4}};
```

For example, these two arrays don't have the same exact numbers, but they are equivalent because they define the same language.

```
int fa_1[5][2] = {{0, 1},
{2, 1},
{0, 3},
{4, 1},
{4, 4}};
int fa_2[5][2] = {{1, 2},
{3, 2},
{1, 4},
{5, 2},
{5, 5}};
```

Sorry if I explained it confusingly, I'm just not sure how to see if they are equivalent based on the renumbering part....

Any help is appreciated!