Re: How can I make FullSimplify work for user-defined functions?
- To: mathgroup at smc.vnet.net
- Subject: [mg52593] Re: [mg52569] How can I make FullSimplify work for user-defined functions?
- From: DrBob <drbob at bigfoot.com>
- Date: Fri, 3 Dec 2004 03:54:05 -0500 (EST)
- References: <200412020721.CAA05840@smc.vnet.net>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
Something like this may work for you:
newlb /:
newlb[(n_Integer)?EvenQ] <=
pval[n_] /; Inequality[4,
LessEqual, n, Less,
10^6] := True
newlb[100] <= pval[100]
True
By the way, here's a significantly faster (and FAR simpler) pvalue function:
Needs["NumberTheory`NumberTheoryFunctions`"]
myP[n_] :=
Block[{m = PrimePi[n/2], p},
While[! PrimeQ[n - (p = Prime@m)], m--];
p]
pvalue[n_] := Module[{p, m, k, hit}, {m =
n/2; If[Element[m, Primes], {p = m}, {k = PrimePi[m];
Do[If[Element[n - Prime[i], Primes], hit = i;
Break[]], {i, k, 1, -1}], p = Prime[hit]}]}; p]
n = 100000;
Timing[mine = myP /@ Range[4, n, 2];]
Timing[yours = pvalue /@ Range[4, n, 2];]
mine == yours
{2.75 Second,Null}
{3.766 Second,Null}
True
Here's a corresponding version of MGPP, also with timings:
myMGPP = {0, #} + {1, -1}myP@# &;
MGPPP[n_] := Module[{p, q}, {m = n/2;
If[Element[m, Primes], {p = m, q = m}, {k = PrimePi[m];
Do[If[Element[n - Prime[i], Primes], hit = i;
Break[]], {i, k, 1, -1}], p = Prime[hit], q = n - p}]}; {p, q}]
n = 100000;
Timing[mine = myMGPP /@ Range[4, n, 2];]
Timing[yours = MGPPP /@ Range[4, n, 2];]
{3.031 Second,Null}
{3.485 Second,Null}
Bobby
On Thu, 2 Dec 2004 02:21:28 -0500 (EST), Gilmar Rodr?guez Pierluissi <gilmar.rodriguez at nwfwmd.state.fl.us> wrote:
> (First; a necessary short introduction, and then
> two questions. Please, bear with me...)
>
> Let N be an even integer greater or equal to 4.
>
> Assume that there exist points (Pi, Qi) on the line
> Y = -X + N such that:
>
> (1.) both Pi, and Qi are primes,
>
> (2.) the points (Pi,0) are on the subinterval [2,N/2]
> of the X-Axis,
>
> (3.) the points (0,Qi) are on the subinterval [N/2,N-2]
> of the Y-Axis.
>A Minimal Goldbach Prime Partition Point corresponding
> to N,(abbreviated: "MGPPP[N]")is a point (P,Q) among
> the points (Pi,Qi) such that:
>
> the distance between the point (P,Q) and the point (N/2,N/2)
>
> = smallest distance among all distances between
> the points (Pi, Qi) and the point (N/2, N/2).
>
> If N is of the form N = 2P then MGPPP[N] = (N/2,N/2).
>
> If N is of the form N = P + Q, with P not equal to Q, then
> MGPPP[N] = (P,Q).
>
> For geometrical pictures please visit:
> http://gilmarlily.netfirms.com/goldbach/goldbach.htm
>
> Please download the following Mathematica notebook
> (version 5.0)by double-cliking this link:
>
> http://gilmarlily.netfirms.com/download/FullSimplify.nb
>
> You can use this notebook to duplicate the evaluations
> appearing in the discussion below:
>
> Having said the above; the following program
> calculates the MGPPP[N]:
>
> MGPPP[n_] := Module[{p, q},
> {m = n/2; If[Element[m,
> Primes], {p = m, q = m}, {k =PrimePi[m];
> Do[If[Element[n - Prime[i], Primes], hit = i;
> Break[]], {i, k, 1, -1}],p = Prime[hit],
> q = n - p}]}; {p, q}]
>
> Examples:
>
> MGPPP[4]={2,2}
>
> MGPPP[100]={47,53}.
>
> The above program can be easily changed as follows to give
> only the "p-value" (instead of the point {p,q}):
>
> pvalue[n_] := Module[{p},
> {m = n/2; If[Element[m,
> Primes], {p = m}, {k =PrimePi[m];
> Do[If[Element[n - Prime[i], Primes], hit = i;
> Break[]],{i, k, 1, -1}], p = Prime[hit]}]}; p]
>
> A plot to depict the p-values is given by:
>
> plt1=ListPlot[Table[pvalue[n],{n,4,100,2}],PlotJoined®True,
> PlotStyle®Hue[0.1]]
>
> It has been conjectured that the Minimal Goldbach Prime Partition
> p-values have a lower bound given by:
>
> Prime[PrimePi[Sqrt[N]].
>
> To visualize this do:
>
> (** oldlb= abbreviation for old lower bound. **)
>
> oldlb[n_]:=Prime[PrimePi[Sqrt[n]]];
>
> plt2=ListPlot[Table[oldlb[n],{n,4,100,2}],
> PlotJoined®True,PlotStyle®Hue[0.2]]
>
> Show[plt1,plt2]
>
> Try also:
>
> TableForm[Table[{n,oldlb[n],pvalue[n]},{n,4,100,2}],
> TableHeadings->{None,{"n","oldlb[n]","p"}},
> TableAlignments->Center]
>
> However; that lower bound can be improved by the following
> new lower bound:
>
> Prime[PrimePi[(N+2*Sqrt[N])/4].
>
> The following program makes use of this latest interval:
>
> pval[n_] := Module[{p},
> {m = n/2; If[Element[m,
> Primes], {p = m}, {k =PrimePi[m];
> l=PrimePi[(n+2*Sqrt[n])/4];
> Do[If[Element[n - Prime[i], Primes], hit = i;
> Break[]], {i, k, l, -1}], p = Prime[hit]}]}; p]
>
> To compare the p-values with the old and new lower bounds do:
>
> plt3=ListPlot[Table[pval[n],{n,4,100,2}],PlotJoined®True,
> PlotStyle®Hue[0.1]]
>
> newlb[n_]:=Prime[PrimePi[(n+2*Sqrt[n])/4]]
>
> plt4=ListPlot[Table[newlb[n],{n,4,100,2}],
> PlotJoined®True,PlotStyle®Hue[0.6]]
>
> Show[plt3,plt4]
>
> Show[plt2,plt3,plt4]
>
> Try also:
>
> TableForm[Table[{n,newlb[n],pval[n]},{n,4,100,2}],
> TableHeadings->{None,{"n","newlb[n]","p"}},
> TableAlignments->Center]
>
>
> Finally; I try the FullSimplify command, to test the validity
> of the new bound,via:
>
> FullSimplify[newlb[n]<= pval[n],Element[n,EvenQ]&&n³4]
>
> hoping that this evaluation gives me "True" as a result.
>
> I get instead a cryptic:
>
> "Prime[PrimePi[1/4(2Sqrt[n]+n)]]<= p$214"
>
> as answer.
>
> Then I realize: one would really need to prove Goldbach's Conjecture first,
> so that the "True" after the above FullSimplify evaluation is truly valid.
>
> So I try instead:
>
> FullSimplify[newlb[n]<=pval[n],Element[n,EvenQ]&&n³4&&n<10^6]
>
> and this time I get:
>
> "Prime[PrimePi[1/4(2Sqrt[n]+n)]]<= p$358".
>
> My questions are:
>
> (1.) How can I make FullSimplify work for user-defined functions?
>
> (2.) How can I make
> FullSimplify[newlb[n]<=pval[n],Element[n,EvenQ]&&n³4&&n<10^6]
> "True"?
>
> Thank you for your attention, and your help!
>
>
>
>
--
DrBob at bigfoot.com
www.eclecticdreams.net
- References:
- How can I make FullSimplify work for user-defined functions?
- From: gilmar.rodriguez@nwfwmd.state.fl.us (Gilmar Rodr?guez Pierluissi)
- How can I make FullSimplify work for user-defined functions?