Is it zero- or one- indexed? Your task is to determine whether some arbitrary programming language has zero-indexed or one-indexed arrays based on sample inputs and outputs
Inputs

An array of integers with at least 2 elements
A positive integer index
The value of the array at that index

Output
One of four distinct values representing:

One-indexed if the language unambiguously has one-indexed arrays
Zero-indexed if the language unambiguously has zero-indexed arrays
Unknown if the given inputs aren't enough to determine whether the language is zero- or one- indexed because it is ambiguous.
Neither  if the language is not zero- or one-indexed because it is something else that may or may not make any sense.

Example Test Cases
Formatted as [array, elements][index] == value_at_index  =&gt;  output
[2, 3][1] == 2  ==&gt;  one-indexed
[2, 3][1] == 3  ==&gt;  zero-indexed
[1, 2, 2, 3][2] == 2  ==&gt;  unknown
[4, 5][1] == 17  ==&gt;  neither
[-3, 5, 2][2] == 5  ==&gt;  one-indexed
[-744, 1337, 420, -69][3] == -69  ==&gt;  zero-indexed
[-744, 1337, 420, -69][3] == 420  ==&gt;  one-indexed
[-744, 1337, 420, -69][3] == -744  ==&gt;  neither
[42, 42, 42, 42, 42][2] == 42  ==&gt;  unknown
[42, 42, 42, 42, 42][1] == 56  ==&gt;  neither

Rules and Scoring

Use any convenient I/O methods
Use any convenient representation for each of the four distinct categories as long as it is consistent and each possible category is mapped to exactly one value.
You may assume that all array values are between \$-2^{31}\$ and \$2^{31} - 1\$, inclusive (i.e. the signed int32 range.)
You may assume that arrays are no longer than \$65535\$ elements.
You may assume that the index is in-bounds for both zero- and one-indexed semantics.

Shortest code wins. Happy golfing!
convey, 47 bytes
Returns 0 for neither, 1 for one-based, 2 for zero-based and 3 for unknown.
{2+~`0
?;\2:!2[
v^&lt;]`
?;\?+2
v^&lt; v*+}
!&gt;&gt;&gt;=?^
2

Try it online!
Run for 1 2 2 3 with index 2 and value 2:

On the left we split the input lines with ;\ ^&lt; into the three paths.
The first one pushes two zeroes after length of path + index time steps into the +. The second one path tries to push the array into + – if there are values waiting (the two zeroes), they get passed through unaltered. Otherwise, they get deleted ?]. The two values then get pushed into =, where they are compared to the third input. The result are two boolean bits. The second one gets multiplied by 2, then they get added together.