Écrivez une déclaration mathématique en utilisant les symboles:
There exists at least one non-negative integer
(écrit commeE
, quantificateur existentiel)All non-negative integers
(écrit commeA
, quantificateur universel)+
(une addition)*
(multiplication)=
(égalité)>
,<
(opérateurs de comparaison)&
(et),|
(ou),!
(non)(
,)
(pour le regroupement)- noms de variables
ce qui équivaut à la déclaration
Il existe un nombre rationnel a, tel que π + e * a est rationnel.
(bien sûr, est la constante mathématique égale à la circonférence divisée par le diamètre d'un cercle, et est le nombre d'Euler )
Vous devez prouver que votre déclaration est en effet équivalente à la déclaration ci-dessus.
De toute évidence, la façon la plus «courte» de procéder consiste à prouver que la déclaration est vraie ou fausse, puis à répondre par une déclaration triviale vraie ou fausse, car toutes les déclarations vraies sont équivalentes les unes aux autres, comme toutes les déclarations fausses.
Cependant, la valeur de vérité de l'énoncé donné est un problème non résolu en mathématiques : nous ne savons même pas si est irrationnel! Par conséquent, à moins d'une recherche mathématique révolutionnaire, le défi consiste à trouver une déclaration équivalente «simple», à prouver son équivalence et à la décrire aussi brièvement que possible.
Notation
E
A
+
*
=
>
<
&
|
et !
chacun ajoute 1 au score. (
et )
n'ajoutez rien au score. Chaque nom de variable ajoute 1 au score.
Par exemple, E x (A ba x+ba>x*(x+ba))
score 13 ( E
x
A
ba
x
+
ba
>
x
*
x
+
ba
)
Le score le plus bas l'emporte.
Remarque:
Avertissement: Cette note n'a pas été écrite par le PO.
- Ce n'est pas un défi de code-golf . Il n'est pas nécessaire que les réponses contiennent du code.
- Ceci est similaire, mais pas une preuve de golf défi, car vous devez écrire une déclaration et prouver équivalente à une autre déclaration.
- Vous êtes autorisé à soumettre une
Ax x=x
déclaration trivialement vraie (par exemple, pour tous les x, x = x ) ou une déclaration trivialement fausse (par exemple, pour tous les x, x> xAx x>x
) si vous pouvez prouver que la déclaration ci-dessus est vraie / fausse. - Vous êtes autorisé à utiliser des symboles supplémentaires (similaires au lemme dans le golf d'épreuve), mais le score serait compté de la même manière que si vous ne les utilisiez pas.
Par exemple, si vous définisseza => b
comme signifiant(!a) | b
, chaque fois que vous utilisez=>
dans votre preuve, votre score augmente de 2. Étant donné que les constantes ne sont pas répertoriées dans les symboles autorisés, vous ne devez pas les utiliser.
Par exemple: l'instruction1 > 0
peut être écrite sous la formeForall zero: ( zero + zero = zero ) => Forall one: ( Forall x: x * one = x ) => one > zero
au score de 23. (rappelez-vous que cela
=>
coûte 2 par utilisation).
Conseils
- Pour utiliser des constantes naturelles, vous pouvez le faire
E0, 0+0=0 & E1, At 1*t=t &
(vous n'avez donc pas besoin de=>
ce qui est plus étendu); pour les nombres supérieurs à 1, ajoutez simplement quelques 1
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.
. La déclaration n'est maintenant ni prouvée ni réfutée, donc cela ne me dérange vraiment pas si le problème devient ennuyeux parce qu'un tel problème est résoluI'd be impressed by any solution no matter the score.
Le score était seulement de viser ceux qui peuvent résoudre ce problèmeRéponses:
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))))))))))))))))))))))))))
Comment ça fonctionne
Tout d'abord, multipliez par les dénominateurs communs supposés de a et (π + e · a) pour réécrire la condition comme: il existe a, b, c ∈ ℕ (pas tous zéro) avec a · π + b · e = c ou a · π - b · e = c ou −a · π + b · e = c. Trois cas sont nécessaires pour traiter les problèmes de signalisation.
Ensuite, nous devrons réécrire ceci pour parler de π et e via des approximations rationnelles: pour toutes les approximations rationnelles π₀ <π <π₁ et e₀ <e <e₁, nous avons un · π₀ + b · e₀ <c <a · π₁ + b · e₁ ou a · π₀ - b · e₁ <c <a · π₁ + b · e₀ ou −a · π₁ + b · e₀ <c <−a · π₀ + b · e₁. (Notez que nous obtenons maintenant la condition «pas tout zéro» gratuitement.)
Maintenant pour la partie difficile. Comment obtenir ces approximations rationnelles? Nous voulons utiliser des formules comme
2/1 · 2/3 · 4/3 · 4/5 ⋯ (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 ,
mais il n'y a aucun moyen évident d'écrire les définitions itératives de ces produits. Nous avons donc construit un peu de machinerie que j'ai décrite pour la première fois dans ce post de Quora . Définir:
divise (d, a): = ∃b, a = d · b,
powerOfPrime (a, p): = ∀b, ((b> 1 et divise (b, a)) ⇒ divise (p, b)),
qui est satisfaite si a = 1, ou p = 1, ou p est premier et a en est une puissance. alors
isDigit (a, s, p): = a <p et ∃b, (powerOfPrime (b, p) et ∃qr, (r <b et s = (p · q + a) · b + r))
est satisfaite si a = 0, ou a est un chiffre du nombre p de base s. Cela nous permet de représenter n'importe quel ensemble fini en utilisant les chiffres d'un certain nombre de base-p. Maintenant, nous pouvons traduire des calculs itératifs en écrivant, en gros, il existe un ensemble d'états intermédiaires tels que l'état final est dans l'ensemble, et chaque état dans l'ensemble est soit l'état initial ou suit en une étape d'un autre état dans le ensemble.
Les détails sont dans le code ci-dessous.
Génération de code dans Haskell
Essayez-le en ligne!
la source
isDigit
, le seul endroit où vous l'utilisez.powerOfPrime
et quels résultatsisDigit
représentent dans des cas inattendus, tant qu'il existe un moyen de représenter chaque set fini.)a
a un score de 7 ou plus, je pense, alors cela vaudra la peine d'ajouter unex (\a' -> a' := a :& ... )
wrapperisDigit
.k>0
, careBound
donne un dénominateur zéro (et un numérateur zéro) dans lek==0
cas, donc toutes les alternatives échouent.270
a|b&c
esta|(b&c)
parce que je pense que la suppression de ces parenthèses donne une meilleure apparence, de toute façon elles sont gratuites.JavaScript utilisé
"(expr)".replace(/\{.*?\}/g,'').match(/[a-z0-9]+|[^a-z0-9\s\(\)]/g)
pour compter les jetons.la source
mult = t
? De plus, commex
il ne peut avoir qu'un nombre fini de chiffres, vous devrez prévoire1 = e2 = 0
suffisamment de chiffrest
. Vous aurez également besoin de plus de parenthèses ou d'autres désambiguïsations pour les constructions ambiguës comme_ & _ | _
.mult
. Je ne vois aucun problèmemult=t2
à la fin.e1=e2=0
devrait être corrigé mais pas certain, donc je ne change pas actuellement l'acception.a & b | c
c'est le cas,(a & b) | c
vous êtest*1=t
définitivement au mauvais endroit. Vous n'avez pas non plus exclu la solution trivialec1 = c4 & c2 = c5 & c3 = 0 & diff = diff2
.diff≠diff2
travailler?!(c2=c5)
comme nous le savons déjàe
est irrationnel, donc même si cela ne fonctionne pas, le score n'augmentera pas