How can I match irreducible fractions with regex?
For example, 23/25, 3/4, 5/2, 100/101, etc.
First of all, I have no idea about the gcd-algorithm realization in
Nope it cannot be done. Like a good computer scientist I will ignore the specifics of the tool regex and assume you are asking if there is a regular expression. I do not have enough knowledge about regex's features to ensure it is restricted to regular expressions. That caveat aside, on with the show.
Rewording this we get:
Let
L
be the language {"a
/b
"| wherea
andb
are natural numbers encoded in a radixr
anda
andb
are coprime}. IsL
regular?
Assume such a language is regular. Then there exists a DFA that can decide membership in L
. Let N
be the number of states of such a DFA. There are an infinite number of primes. As the number of primes is infinite, there are arbitrarily many primes greater than the largest number encodable in N
digits in the radix r
. (Note: The largest number is clearly r
raised to the power of N
. I am using this weird wording to show how to accommodate unary.) Select N+1
primes that are greater than this number. All of these numbers are encoded using at least N+1
digits (in the radix r
). Enumerate these primes p₀
to pₙ
. Let sᵢ
be the state of the pᵢ
is in immediately after reading the /
. By the pigeon hole principle, there are N
states and N+1
sᵢ
states so there exists at least one pair of indexes (j,k)
such that sⱼ = sₖ
. So starting from the initial state of the DFA, inputs pₖ/
and pⱼ/
lead to the same state sⱼ
(or sₖ
) and pⱼ
and pₖ
are distinct primes.
L
must accept all pairs of distinct primes p/q
as they are coprime and reject all primes divided by themselves p/p
as p
is not coprime to p
. Now the language accepts pⱼ = pₖ
so there is a sequence of states from sⱼ
using the string pₖ
to an accepting state, call this sequence β
. Let α
be the sequence of states reading pₖ
starting from the initial state. The sequence of states for the DFA starting at the initial state for the string pₖ/pₖ
must be the same as α
followed by β
. This sequence starts in an initial state, goes to sₖ
(by reading the input pₖ
), and reaches an accepting state by reading pₖ
. The DFA accepts pₖ/pₖ
and pₖ/pₖ
is in L
. pₖ
is not coprime to pₖ
, and therefore pₖ/pₖ
is not in L
. Contradiction. Therefore the language L
is irregular, or no regular expression exists.