Schreiben Sie eine mathematische Aussage mit den folgenden Symbolen:
There exists at least one non-negative integer
(geschrieben alsE
existentieller Quantor)All non-negative integers
(geschrieben alsA
Universal Quantifier)+
(Zusatz)*
(Multiplikation)=
(Gleichberechtigung)>
,<
(Vergleichsoperatoren)&
(und),|
(oder),!
(nicht)(
,)
(zum Gruppieren)- Variablennamen
das ist gleichbedeutend mit der Aussage
Es gibt eine rationale Zahl a, so dass π + e * a rational ist.
(natürlich ist die mathematische Konstante, die dem Umfang geteilt durch den Durchmesser eines Kreises entspricht, und ist die Euler-Zahl )
Sie müssen nachweisen, dass Ihre Aussage tatsächlich der obigen Aussage entspricht.
Offensichtlich ist der „kürzeste“ Weg, dies zu tun, die Aussage als wahr oder falsch zu beweisen und dann mit einer trivial wahren oder falschen Aussage zu antworten, da alle wahren Aussagen einander äquivalent sind, ebenso wie alle falschen Aussagen.
Der Wahrheitswert der gegebenen Aussage ist jedoch ein ungelöstes Problem in der Mathematik : Wir wissen nicht einmal, ob irrational ist! Abgesehen von bahnbrechenden mathematischen Untersuchungen besteht die Herausforderung darin, eine „einfache“ äquivalente Aussage zu finden, ihre Äquivalenz zu beweisen und sie so kurz wie möglich zu beschreiben.
Wertung
E
A
+
*
=
>
<
&
|
und !
jeweils 1 zur Punktzahl hinzufügen. (
und )
füge nichts zur Punktzahl hinzu. Jeder Variablenname erhöht die Punktzahl um 1.
ZB E x (A ba x+ba>x*(x+ba))
Punktzahl 13 ( E
x
A
ba
x
+
ba
>
x
*
x
+
ba
)
Die niedrigste Punktzahl gewinnt.
Hinweis:
Haftungsausschluss: Dieser Hinweis wurde nicht vom OP verfasst.
- Dies ist nicht eine Code-Golf - Herausforderung. Antworten müssen keinen Code enthalten.
- Dies ist vergleichbar mit einer Proof-Golf- Herausforderung, da Sie eine Aussage schreiben und nachweisen müssen, dass sie einer anderen Aussage entspricht.
- Sie dürfen eine trivial wahre (z. B. für alle x, x = x
Ax x=x
) oder eine trivial falsche Aussage (z. B. für alle x, x> xAx x>x
) einreichen, wenn Sie nachweisen können, dass die obige Aussage wahr / falsch ist. - Sie dürfen zusätzliche Symbole verwenden (ähnlich dem Lemma in Proof-Golf), aber die Punktzahl wird genauso gezählt, wie wenn Sie sie nicht verwenden.
Wenn Sie beispielsweise definierena => b
, dass(!a) | b
jedes Mal , wenn Sie=>
einen Proof verwenden, Ihre Punktzahl um 2 erhöht wird. Da Konstanten in den zulässigen Symbolen nicht aufgeführt sind, dürfen Sie sie nicht verwenden.
Zum Beispiel: Die Anweisung1 > 0
kann geschrieben werden alsForall zero: ( zero + zero = zero ) => Forall one: ( Forall x: x * one = x ) => one > zero
bei der Punktzahl von 23. (Denken Sie daran, dass
=>
2 pro Nutzung kostet).
Hinweise
- Um natürliche Konstanten zu verwenden, können
E0, 0+0=0 & E1, At 1*t=t &
Sie dies tun (Sie brauchen also keine=>
expansiveren Konstanten ). Für Zahlen größer als 1 addieren Sie einfach einige Einsen
You are allowed to submit a trivially-true (e.g., for all x, x = x Ax x=x) or a trivially-false statement (e.g., for all x, x > x Ax x>x) if you can prove the statement above is true/false.
. Die Aussage ist jetzt weder bewiesen noch widerlegt, daher macht es mir nichts aus, wenn das Problem langweilig wird, weil ein solches Problem gelöst istI'd be impressed by any solution no matter the score.
Die Partitur sollte nur diejenigen zum Ziel haben, die dieses Problem lösen könnenAntworten:
671
E a (a+a>a*a & (E b (E c (E d (A e (A f (f<a | (E g (E h (E i ((A j ((!(j=(f+f+h)*(f+f+h)+h | j=(f+f+a+i)*(f+f+a+i)+i) | j+a<e & (E k ((A l (!(l>a & (E m k=l*m)) | (E m l=e*m))) & (E l (E m (m<k & g=(e*l+(j+a))*k+m)))))) & (A k (!(E l (l=(j+k)*(j+k)+k+a & l<e & (E m ((A n (!(n>a & (E o m=n*o)) | (E o n=e*o))) & (E n (E o (o<m & g=(e*n+l)*m+o))))))) | j<a+a & k=a | (E l (E m ((E n (n=(l+m)*(l+m)+m+a & n<e & (E o ((A p (!(p>a & (E q o=p*q)) | (E q p=e*q))) & (E p (E q (q<o & g=(e*p+n)*o+q))))))) & j=l+a+a & k=j*j*m))))))) & (E j (E k (E l ((E m (m=(k+l)*(k+l)+l & (E n (n=(f+m)*(f+m)+m+a & n<e & (E o ((A p (!(p>a & (E q o=p*q)) | (E q p=e*q))) & (E p (E q (q<o & j=(e*p+n)*o+q))))))))) & (A m (A n (A o (!(E p (p=(n+o)*(n+o)+o & (E q (q=(m+p)*(m+p)+p+a & q<e & (E r ((A s (!(s>a & (E t r=s*t)) | (E t s=e*t))) & (E s (E t (t<r & j=(e*s+q)*r+t))))))))) | m<a & n=a & o=f | (E p (E q (E r (!(E s (s=(q+r)*(q+r)+r & (E t (t=(p+s)*(p+s)+s+a & t<e & (E u ((A v (!(v>a & (E w u=v*w)) | (E w v=e*w))) & (E v (E w (w<u & j=(e*v+t)*u+w))))))))) | m=p+a & n=(f+a)*q & o=f*r)))))))) & (E m (m=b*(h*f)*l & (E n (n=b*(h*f+h)*l & (E o (o=c*(k*f)*i & (E p (p=c*(k*f+k)*i & (E q (q=d*i*l & (m+o<q & n+p>q | m<p+q & n>o+q | o<n+q & p>m+q))))))))))))))))))))))))))
Wie es funktioniert
Multiplizieren Sie zunächst mit den angegebenen gemeinsamen Nennern von a und (π + e · a), um die Bedingung wie folgt umzuschreiben: Es gibt a, b, c ∈ ℕ (nicht alle Nullen) mit a · π + b · e = c oder a · π - b · e = c oder - a · π + b · e = c. Drei Fälle sind erforderlich, um Schilderprobleme zu lösen.
Dann müssen wir dies umschreiben, um über π und e über rationale Approximationen zu sprechen: Für alle rationalen Approximationen π₀ <π <π₁ und e₀ <e <e₁ gilt a · π₀ + b · e₀ <c <a · π₁ + b · e₁ oder a · π e - b · e₁ <c <a · π₁ + b · e₀ oder - a · π₁ + b · e <<c <- a · π₀ + b · e₁. (Beachten Sie, dass wir jetzt kostenlos die Bedingung "Nicht alle Nullen" erhalten.)
Nun zum schwierigen Teil. Wie kommen wir zu diesen rationalen Annäherungen? Wir wollen Formeln wie verwenden
2/1 · 2/3 · 4/3 · 4/5 2 (2 · k) / (2 · k + 1) <π / 2 <2/1 · 2/3 · 4/3 · 4/5 ⋯ (2 · k) / (2 · k + 1) · (2 · k + 2) / (2 · k + 1),
((k + 1) / k) k <e <(k + 1) / k) k + 1 ,
Es gibt jedoch keine offensichtliche Möglichkeit, die iterativen Definitionen dieser Produkte zu schreiben. Also bauen wir ein paar Maschinen auf, die ich zuerst in diesem Quora-Beitrag beschrieben habe . Definieren:
dividiert (d, a): = ∃b, a = d · b,
powerOfPrime (a, p): = ∀b, ((b> 1 und dividiert (b, a)) ⇒ dividiert (p, b)),
was erfüllt ist, wenn a = 1 oder p = 1 oder p Primzahl ist und a eine Potenz davon ist. Dann
isDigit (a, s, p): = a <p und ∃b, (powerOfPrime (b, p) und ∃qr, (r <b und s = (p · q + a) · b + r))
ist erfüllt, wenn a = 0 ist, oder a ist eine Ziffer der Basis-p-Zahl s. Auf diese Weise können wir eine beliebige endliche Menge mit den Ziffern einer Basis-p-Zahl darstellen. Nun können wir iterative Berechnungen übersetzen, indem wir grob schreiben, dass es eine Menge von Zwischenzuständen gibt, so dass sich der Endzustand in der Menge befindet und jeder Zustand in der Menge entweder der Anfangszustand ist oder in einem Schritt einem anderen Zustand in der folgt einstellen.
Details finden Sie im Code unten.
Generieren von Code in Haskell
Probieren Sie es online!
quelle
isDigit
, ist dies der einzige Ort, an dem Sie es verwenden.powerOfPrime
undisDigit
in unerwarteten Fällen repräsentieren, solange es eine Möglichkeit gibt, jedes endliche Set zu repräsentieren.)a
die Punktzahl 7 oder höher ist, dann lohnt es sich, einenex (\a' -> a' := a :& ... )
Wrapper hinzuzufügenisDigit
.k>0
, wieeBound
ein Null-Nenner (und ein Null-Zähler) imk==0
Fall gibt, damit alle Alternativen scheitern.270
a|b&c
ist,a|(b&c)
da ich denke, dass das Entfernen dieser Klammern es besser aussehen lässt, jedenfalls sind sie kostenlos.Verwendete JavaScript,
"(expr)".replace(/\{.*?\}/g,'').match(/[a-z0-9]+|[^a-z0-9\s\(\)]/g)
um Token zu zählen.quelle
mult = t
? Dax
nur eine begrenzte Anzahl von Ziffern zulässig ist, müssen Sie auch einee1 = e2 = 0
ausreichende Größe berücksichtigent
. Außerdem benötigen Sie mehr Klammern oder andere Disambiguierungen für mehrdeutige Konstrukte wie_ & _ | _
.mult
.mult=t2
Am Ende sehe ich kein Problem .e1=e2=0
Sollte behoben sein, aber nicht so sicher, so ändere ich derzeit die Annahme nicht.a & b | c
ist(a & b) | c
dann ist Ihrt*1=t
definitiv am falschen Ort. Auch Sie haben die triviale Lösung nicht ausgeschlossenc1 = c4 & c2 = c5 & c3 = 0 & diff = diff2
.diff≠diff2
arbeiten?!(c2=c5)
wie wir bereits wissen,e
als irrational bezeichnen. Selbst wenn es nicht funktioniert, wird der Score nicht steigen