Re: Matching two patterns?
- To: mathgroup at smc.vnet.net
- Subject: [mg74146] Re: [mg74105] Matching two patterns?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 12 Mar 2007 22:09:13 -0500 (EST)
On 10 Mar 2007, at 12:52, Neri wrote: > Can two patterns be matched with each other, to find if they > intersect? > > What I mean is that { _, 1} matches {1, _ } in the sense that there > are lists that fit both, in this case {1,1}. > However, { _, 1} doesn't match { _, 2} in the sense that no list can > fit both. > > For lists it seems easy to write a function that does that, but I > wondered if such a function already exists and can it be more general? > > Thanks, > > Neri > > What you asking for is impossible, even in the case of lists, because it is based on a confusion of semantics (the question of existence) and syntax (pattern matching). For that reason is no way for Mathematica to decide if there exists anything that matches any given pattern. Even in the simplest case, for example that of a "self- contradictory pattern" such as: _?(# == 1 && # == 2&) we can tell from our knowledge of elementary arithmetic that this will never match anything but Mathematica has no no way to decide such semantic questions by pattern matching, since pattern matching involves only syntax (and there is nothing wrong with the syntax of the above pattern). Of course the question of whether there exists a real number which is equal to 1 and equal to 2 can be decided by Mathematica: Resolve[Exists[a,Element[a,Reals],a==1&&a==2]] False but this has nothing to do with pattern matching. It seems to me that only thing that might be related to your question that can actually be done is something like this: MatchQ[{_,1},{_,_Integer}] True which tells you that anything that matches {_,1} will also match {_,_Integer}. Note however that although MatchQ[{_,_Integer},{_,1}] False it does not actually mean that Mathematica somehow made use of the fact that not all integers are equal to 1. That is a semantic question and can't be decided by pattern matching. Andrzej Kozlowski