Tulis pernyataan matematika, menggunakan simbol:
There exists at least one non-negative integer
(ditulis sebagaiE
, penjumlahan eksistensial)All non-negative integers
(ditulis sebagaiA
, quantifier universal)+
(tambahan)*
(perkalian)=
(persamaan)>
,<
(operator pembanding)&
(dan),|
(atau),!
(tidak)(
,)
(untuk pengelompokan)- nama variabel
yang setara dengan pernyataan itu
Ada bilangan rasional a, sehingga π + e * a adalah rasional.
(tentu saja, adalah konstanta matematika yang sama dengan keliling dibagi dengan diameter lingkaran, dan adalah angka Euler )
Anda harus membuktikan bahwa pernyataan Anda memang setara dengan pernyataan di atas.
Jelas, cara "terpendek" untuk menyelesaikan ini adalah dengan membuktikan pernyataan itu benar atau salah, dan kemudian menjawab dengan pernyataan yang benar atau salah, karena semua pernyataan benar setara satu sama lain, seperti semua pernyataan salah.
Namun, nilai kebenaran pernyataan yang diberikan adalah masalah yang belum terpecahkan dalam matematika : kita bahkan tidak tahu apakah tidak rasional! Oleh karena itu, kecuali penelitian matematika terobosan, tantangannya adalah untuk menemukan pernyataan setara "sederhana", membuktikan kesetaraannya, dan menggambarkannya sesingkat mungkin.
Mencetak gol
E
A
+
*
=
>
<
&
|
dan !
masing - masing menambahkan 1 pada skor. (
dan )
jangan menambahkan apa pun pada skor. Setiap nama variabel menambahkan 1 pada skor.
Misalnya, E x (A ba x+ba>x*(x+ba))
skor 13 ( E
x
A
ba
x
+
ba
>
x
*
x
+
ba
)
Skor terendah menang.
catatan:
Penafian: Catatan ini tidak ditulis oleh OP.
- Ini bukan sebuah kode-golf tantangan. Jawaban tidak wajib mengandung kode.
- Ini mirip dengan, tetapi tidak, tantangan golf bukti , karena Anda perlu menulis pernyataan dan membuktikannya setara dengan pernyataan lain.
- Anda diperbolehkan mengirimkan pernyataan trivially-true (mis. Untuk semua x, x = x
Ax x=x
) atau pernyataan trivially-false (mis., Untuk semua x, x> xAx x>x
) jika Anda dapat membuktikan pernyataan di atas benar / salah. - Anda diizinkan untuk menggunakan simbol tambahan (mirip dengan lemma dalam golf bukti), tetapi skornya akan dihitung sama dengan Anda tidak menggunakannya.
Misalnya, jika Anda mendefinisikana => b
mean(!a) | b
, setiap kali Anda menggunakan=>
bukti Anda, skor Anda meningkat 2. Karena konstanta tidak terdaftar dalam simbol yang diizinkan, Anda tidak boleh menggunakannya.
Sebagai contoh: Pernyataan1 > 0
dapat ditulis sebagaiForall zero: ( zero + zero = zero ) => Forall one: ( Forall x: x * one = x ) => one > zero
pada skor 23. (ingat bahwa
=>
biaya 2 per penggunaan).
Petunjuk
- Untuk menggunakan konstanta alami, Anda dapat melakukannya
E0, 0+0=0 & E1, At 1*t=t &
(jadi Anda tidak perlu=>
yang lebih ekspansif); untuk angka yang lebih besar dari 1, tambahkan saja 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.
. Pernyataan ini sekarang tidak terbukti atau tidak terbukti, jadi saya benar-benar tidak keberatan jika masalah menjadi membosankan karena masalah seperti itu diselesaikanI'd be impressed by any solution no matter the score.
Skor itu hanya untuk membidik orang-orang yang bisa menyelesaikan masalah iniJawaban:
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))))))))))))))))))))))))))
Bagaimana itu bekerja
Pertama, gandakan melalui penyebut yang konon berasal dari a dan (π + e · a) untuk menulis ulang kondisi sebagai: ada a, b, c ∈ ℕ (tidak semuanya nol) dengan a · π + b · e = c atau a · π - b · e = c atau −a · π + b · e = c. Tiga kasus diperlukan untuk menangani masalah tanda.
Maka kita perlu menulis ulang ini untuk berbicara tentang π dan e melalui perkiraan rasional: untuk semua perkiraan rasional π₀ <π <π₁ dan e₀ <e <e₁, kita memiliki · π₀ + b · e · <c <a · π₁ + b · e₁ atau a · π₀ - b · e₁ <c <a · π₁ + b · e₀ atau −a · π₁ + b · e₀ <c <−a · π₀ + b · e₁. (Perhatikan bahwa kami sekarang mendapatkan kondisi "tidak semuanya nol" gratis.)
Sekarang untuk bagian yang sulit. Bagaimana kita mendapatkan perkiraan rasional ini? Kami ingin menggunakan formula seperti
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 ,
tetapi tidak ada cara yang jelas untuk menulis definisi berulang dari produk-produk ini. Jadi kami membangun sedikit mesin yang pertama kali saya jelaskan di pos Quora ini . Menetapkan:
membagi (d, a): = ∃b, a = d · b,
powerOfPrime (a, p): = ∀b, ((b> 1 dan membagi (b, a)) ⇒ membagi (p, b)),
yang terpenuhi iff a = 1, atau p = 1, atau p adalah prima dan a adalah kekuatannya. Kemudian
isDigit (a, s, p): = a <p dan ∃b, (powerOfPrime (b, p) dan ∃qr, (r <b dan s = (p · q + a) · b + r))
puas jika a = 0, atau a adalah angka dari basa-p s. Ini memungkinkan kami merepresentasikan set terbatas apa pun menggunakan digit beberapa nomor base-p. Sekarang kita dapat menerjemahkan perhitungan iteratif dengan menulis, secara kasar, ada sekumpulan keadaan peralihan sedemikian sehingga keadaan akhir ada di dalam himpunan, dan setiap keadaan dalam himpunan adalah keadaan awal atau mengikuti dalam satu langkah dari beberapa keadaan lain di dalam set.
Detail ada dalam kode di bawah ini.
Menghasilkan kode di Haskell
Cobalah online!
sumber
isDigit
, satu-satunya tempat Anda menggunakannya.powerOfPrime
danisDigit
berakhir mewakili dalam kasus yang tidak terduga, selama ada beberapa cara untuk mewakili setiap set yang terbatas.)a
memiliki skor 7 atau lebih tinggi, saya pikir, maka akan layak menambahkanex (\a' -> a' := a :& ... )
pembungkus keisDigit
.k>0
, karenaeBound
memberikan nol penyebut (dan satu nol pembilang) dalamk==0
kasus ini, sehingga semua alternatif gagal.270
a|b&c
adalaha|(b&c)
karena saya pikir menghapus tanda kurung ini membuatnya terlihat lebih baik, toh itu gratis.JavaScript yang digunakan
"(expr)".replace(/\{.*?\}/g,'').match(/[a-z0-9]+|[^a-z0-9\s\(\)]/g)
untuk menghitung token.sumber
mult = t
? Juga karenax
hanya dapat memiliki banyak digit, Anda harus memungkinkane1 = e2 = 0
untuk cukup besart
. Anda juga akan membutuhkan lebih banyak tanda kurung atau disambiguasi lain untuk konstruksi yang ambigu_ & _ | _
.mult
. Tidak melihat masalahmult=t2
di akhir.e1=e2=0
harus diperbaiki tetapi tidak begitu pasti, jadi saya saat ini tidak mengubah konsepsi.a & b | c
sudah(a & b) | c
maka Andat*1=t
pasti di tempat yang salah. Anda juga belum mengecualikan solusi sepelec1 = c4 & c2 = c5 & c3 = 0 & diff = diff2
.diff≠diff2
bekerja?!(c2=c5)
karena kita sudah tahue
itu tidak rasional, jadi bahkan jika ini tidak berhasil skor tidak akan meningkat