Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^4: check for square-number with a regex

by moritz (Cardinal)
on Oct 23, 2009 at 15:47 UTC ( [id://802930]=note: print w/replies, xml ) Need Help??


in reply to Re^3: check for square-number with a regex
in thread check for square-number with a regex

First of all sorry for getting the numbering wrong, I misremembered REG as being Typ-0 and Turing as being Typ-3, it's the other way round.

What's another example of Perl regexes recognising a language that a CFG can't?
m/^(\w+)\1$/

Is already outside CFG.

CFG is parsed by a non-deterministic finite automaton which has access to a stack of infinite size.

Since it can only access the top element of the stack, it has only access to the capture in reverse order, or with a finite look-behind on the stack (implemented by storing some values in the state of the NFA). A more formal proof can be made with the Pumping lemma for context-free languages.

I also think that the regex primality test is outside of CFG, but I've never proven that, so don't rely on it ;-)

Replies are listed 'Best First'.
Re^5: check for square-number with a regex
by JadeNB (Chaplain) on Nov 26, 2009 at 23:35 UTC
    I also think that the regex primality test is outside of CFG, but I've never proven that, so don't rely on it ;-)
    Doesn't the pumping lemma that you cited also show what you claim? Specifically, if there were a CFG that recognised exactly the strings of 1s of prime length, then we would have the assertion that any sufficiently large prime s could be written as s = u + v + x + y + z, with everyone non-negative and v + y at least 1, in such a way that u + x + i*(v + y) + z was also prime for every non-negative i. However, in that case,
    • if u + x + z = 0, then we can take i to be composite, so that u + x + z + i*(v + y) = i*(v + y) is composite;
    • or
    • otherwise, we may take i = (v + y + 2)*(u + x + z), so that u + x + z + i*(v + y) = (v + y + 1)^2*(u + x + z) is composite.
    This is a contradiction.

    UPDATE: Forgot to handle the case u + x + z = 0.
    UPDATE 2: Oops, and I was quite sloppy in my choice of i even when u + x + z is positive. I think that it's OK now.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://802930]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (2)
As of 2024-04-20 05:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found