Sayı teorisi stiline yazın


19

Şu sembolleri kullanarak bir matematik ifadesi yazın:

  • There exists at least one non-negative integer( Evaroluşsal niceleyici olarak yazılır )
  • All non-negative integers( Aevrensel niceleyici olarak yazılmıştır )
  • + (ilave)
  • * (çarpma işlemi)
  • = (Eşitlik)
  • >, <(karşılaştırma operatörleri)
  • &(ve), |(veya),! (değil)
  • (, )(gruplama için)
  • değişken isimleri

ifadeye eşdeğer olan

Tional + e * a rasyonel olacak şekilde rasyonel bir sayı vardır.

(tabii ki, π=3,1415 ... matematiksel sabit bir çemberin çapı ile bölünen çevresi ve eşittir e=2,7182 ... olan Euler sayısı )

İfadenizin gerçekten yukarıdaki ifadeye eşdeğer olduğunu kanıtlamanız gerekir.

Açıkçası, bununla ilgili "en kısa" yol, ifadenin doğru veya yanlış olduğunu kanıtlamak ve daha sonra, tüm yanlış ifadeler gibi, tüm doğru ifadeler birbirine eşdeğer olduğu için önemsiz derecede doğru veya yanlış bir ifadeyle cevap vermektir.

Ancak, verilen ifadenin doğruluk değeri matematikte çözülmemiş bir sorundur : π+e mantıksız ! Bu nedenle, çığır açan bir matematiksel araştırmayı engellemek, zorluk “basit” eşdeğer bir ifade bulmak, denkliğini kanıtlamak ve mümkün olduğunca kısaca tanımlamaktır.

puanlama

E A + * = > < & |ve !her biri skora 1 ekler. (ve )skora hiçbir şey eklemeyin. Her değişken adı skora 1 ekler.

Örneğin, E x (A ba x+ba>x*(x+ba))puan 13 ( E x A ba x + ba > x * x + ba)

En düşük puan kazanır.


Not:

Feragat: Bu not OP tarafından yazılmamıştır.

  • Bu değil bir meydan okuma. Yanıtların kod içermesi gerekmez.
  • Bu bir benzer, ancak değil bir ifade yazmanız ve başka bir ifadeye eşdeğer olduğunu kanıtlamanız gerektiğinden, zorluğuna .
  • Yukarıdaki ifadenin doğru / yanlış olduğunu kanıtlayabiliyorsanız, önemsiz olarak doğru (örneğin, tüm x, x = x için Ax x=x) veya önemsiz olarak yanlış bir ifade (örneğin, tüm x, x> x için Ax x>x) göndermenize izin verilir .
  • Ek semboller kullanmanıza izin verilir (prova golfündeki lemmaya benzer), ancak puan onları kullanmadığınız gibi sayılır.
    Örneğin, a => bdemek istediğinizi kanıtlarsanız, kanıtınızda (!a) | bher kullandığınızda =>puanınız 2 artar.
  • Sabitler izin verilen simgelerde yer almadığı için bunları kullanmamalısınız.
    Örneğin: İfade 1 > 0şu şekilde yazılabilir:

    
    Forall zero: ( zero + zero = zero ) =>
    Forall one: ( Forall x: x * one = x ) =>
    one > zero
    

    23. ( =>kullanım başına 2 maliyet olduğunu unutmayın ).

İpuçları

  • Doğal sabitleri kullanmak için bunu yapabilirsiniz E0, 0+0=0 & E1, At 1*t=t &(böylece =>hangisinin daha geniş olduğuna ihtiyacınız yoktur ); 1'den büyük sayılar için, sadece 1'ler ekleyin

5
Buradaki konsepti seviyorum, ancak ifadeyi yazmak gerçekten zor ve puan ne olursa olsun herhangi bir çözümden etkileneceğim. Daha basit bir şey kullanmanızı öneririm.
xnor

1
Verilen ifadeye eşdeğer bir matematiksel ifadeye ihtiyacınız var . Hangi anlamda eşdeğer olmalılar ? Doğruysam, verilen ifade yanlıştır. Bu yüzden diğer ifadelerle denkliğini kavramak benim için zor. Örneğin, bu eşdeğerdir i + E * bir rasyonel şekilde, bir rasyonel sayı a duyulmaktadır (burada i sanal birim)?
Luis Mendo

1
Mevcut not sadece söyle 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..
İfade

1
Yazılan soru, büyük ölçüde lede gömülü gibi görünüyordu ve gerçekten neler olduğunu açıklamaktan kaçındı, bu yüzden notlarda küçük bir açıklama yazdım (zorluğun önemsizliğinin verilen ifadenin şu anda bilinmeyen gerçek değerine bağlı olduğu) .
Lynn

I'd be impressed by any solution no matter the score.Skor sadece bu sorunu
çözenler

Yanıtlar:


27

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))))))))))))))))))))))))))

Nasıl çalışır

İlk olarak, koşulu şu şekilde yeniden yazmak için a ve (· + e · a) ifadelerinin ortak paydaları ile çarpın: a, b, c ∈ zero (hepsi sıfır değil) ve π + b · e = c veya a · π - b · e = c veya −a · π + b · e = c. İşaret sorunları ile başa çıkmak için üç durum gereklidir.

O zaman π ve e hakkında rasyonel yaklaşımlarla konuşmak için bunu yeniden yazmamız gerekecek: ra <π <π₁ ve e₀ <e <all tüm rasyonel yaklaşımlar için · π₀ + b · e₀ <c <a · π₁ + b · e₁ veya bir · π₀ - b · e₁ <c <a · π₁ + b · e₀ veya −a · π₁ + b · e₀ <c <−a · π₀ + b · e₁. (Artık "sıfırdan farklı değil" koşulunu ücretsiz olarak aldığımızı unutmayın.)

Şimdi zor kısım için. Bu rasyonel yaklaşımları nasıl elde ederiz? Gibi formüller kullanmak istiyoruz.

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 ,

ancak bu ürünlerin yinelemeli tanımlarını yazmanın açık bir yolu yoktur. Bu yüzden, bu Quora yayınında ilk olarak tarif ettiğim biraz makine oluşturduk . Tanımlamak:

(d, a) bölünür: = ∃b, a = d · b,

powerOfPrime (a, p): = ∀b, ((b> 1 ve bölünür (b, a)) ⇒ bölünür (p, b)),

a = 1 veya p = 1 veya p'nin asal olduğu ve a'nın bir gücü olduğu durumlarda tatmin olur. Sonra

isDigit (a, s, p): = a <p ve ∃b, (powerOfPrime (b, p) ve ∃qr, (r <b ve s = (p · q + a) · b + r))

a = 0 olduğunda veya a, p-p sayısının s basamağıdır. Bu, bazı baz-p sayılarının basamaklarını kullanarak herhangi bir sonlu seti temsil etmemizi sağlar. Şimdi yinelemeli hesaplamaları yazarak çevirebiliriz, kabaca, son durum kümede olacak şekilde bir dizi ara durum vardır ve kümedeki her durum ya başlangıç ​​durumudur ya da Ayarlamak.

Ayrıntılar aşağıdaki koddadır.

Haskell'de kod oluşturuluyor

{-# LANGUAGE ImplicitParams, TypeFamilies, Rank2Types #-}

-- Define an embedded domain-specific language for propositions.
infixr 2 :|

infixr 3 :&

infix 4 :=

infix 4 :>

infix 4 :<

infixl 6 :+

infixl 7 :*

data Nat v
  = Var v
  | Nat v :+ Nat v
  | Nat v :* Nat v

instance Num (Nat v) where
  (+) = (:+)
  (*) = (:*)
  abs = id
  signum = error "signum Nat"
  fromInteger = error "fromInteger Nat"
  negate = error "negate Nat"

data Prop v
  = Ex (v -> Prop v)
  | Al (v -> Prop v)
  | Nat v := Nat v
  | Nat v :> Nat v
  | Nat v :< Nat v
  | Prop v :& Prop v
  | Prop v :| Prop v
  | Not (Prop v)

-- Display propositions in the given format.
allVars :: [String]
allVars = do
  s <- "" : allVars
  c <- ['a' .. 'z']
  pure (s ++ [c])

showNat :: Int -> Nat String -> ShowS
showNat _ (Var v) = showString v
showNat prec (a :+ b) =
  showParen (prec > 6) $ showNat 6 a . showString "+" . showNat 7 b
showNat prec (a :* b) =
  showParen (prec > 7) $ showNat 7 a . showString "*" . showNat 8 b

showProp :: Int -> Prop String -> [String] -> ShowS
showProp prec (Ex p) (v:free) =
  showParen (prec > 1) $ showString ("E " ++ v ++ " ") . showProp 4 (p v) free
showProp prec (Al p) (v:free) =
  showParen (prec > 1) $ showString ("A " ++ v ++ " ") . showProp 4 (p v) free
showProp prec (a := b) _ =
  showParen (prec > 4) $ showNat 5 a . showString "=" . showNat 5 b
showProp prec (a :> b) _ =
  showParen (prec > 4) $ showNat 5 a . showString ">" . showNat 5 b
showProp prec (a :< b) _ =
  showParen (prec > 4) $ showNat 5 a . showString "<" . showNat 5 b
showProp prec (p :& q) free =
  showParen (prec > 3) $
  showProp 4 p free . showString " & " . showProp 3 q free
showProp prec (p :| q) free =
  showParen (prec > 2) $
  showProp 3 p free . showString " | " . showProp 2 q free
showProp _ (Not p) free = showString "!" . showProp 9 p free

-- Compute the score.
scoreNat :: Nat v -> Int
scoreNat (Var _) = 1
scoreNat (a :+ b) = scoreNat a + 1 + scoreNat b
scoreNat (a :* b) = scoreNat a + 1 + scoreNat b

scoreProp :: Prop () -> Int
scoreProp (Ex p) = 2 + scoreProp (p ())
scoreProp (Al p) = 2 + scoreProp (p ())
scoreProp (p := q) = scoreNat p + 1 + scoreNat q
scoreProp (p :> q) = scoreNat p + 1 + scoreNat q
scoreProp (p :< q) = scoreNat p + 1 + scoreNat q
scoreProp (p :& q) = scoreProp p + 1 + scoreProp q
scoreProp (p :| q) = scoreProp p + 1 + scoreProp q
scoreProp (Not p) = 1 + scoreProp p

-- Convenience wrappers for n-ary exists and forall.
class OpenProp p where
  type OpenPropV p
  ex, al :: p -> Prop (OpenPropV p)

instance OpenProp (Prop v) where
  type OpenPropV (Prop v) = v
  ex = id
  al = id

instance (OpenProp p, a ~ Nat (OpenPropV p)) => OpenProp (a -> p) where
  type OpenPropV (a -> p) = OpenPropV p
  ex p = Ex (ex . p . Var)
  al p = Al (al . p . Var)

-- Utility for common subexpression elimination.
cse :: Int -> Nat v -> (Nat v -> Prop v) -> Prop v
cse uses x cont
  | (scoreNat x - 1) * (uses - 1) > 6 = ex (\x' -> x' := x :& cont x')
  | otherwise = cont x

-- p implies q.
infixl 1 ==>

p ==> q = Not p :| q

-- Define one as the unique n with n+n>n*n.
withOne ::
     ((?one :: Nat v) =>
        Prop v)
  -> Prop v
withOne p =
  ex
    (\one ->
       let ?one = one
       in one + one :> one * one :& p)

-- a is a multiple of d.
divides d a = ex (\b -> a := d * b)

-- a is a power of p (assuming p is prime).
powerOfPrime a p = al (\b -> b :> ?one :& divides b a ==> divides p b)

-- a is 0 or a digit of the base-p number s (assuming p is prime).
isDigit a s p =
  cse 2 a $ \a ->
    a :< p :&
    ex
      (\b -> powerOfPrime b p :& ex (\q r -> r :< b :& s := (p * q + a) * b + r))

-- An injection from ℕ² to ℕ, for representing tuples.
pair a b = (a + b) ^ 2 + b

-- πn₀/πd < π/4 < πn₁/πd, with both fractions approaching π/4 as k
-- increases:
-- πn₀ = 2²·4²·6²⋯(2·k)²·k
-- πn₁ = 2²·4²·6²⋯(2·k)²·(k + 1)
-- πd = 1²⋅3²·5²⋯(2·k + 1)²
πBound p k cont =
  ex
    (\s x πd ->
       al
         (\i ->
            (i := pair (k + k) x :| i := pair (k + k + ?one) πd ==>
             isDigit (i + ?one) s p) :&
            al
              (\a ->
                 isDigit (pair i a + ?one) s p ==>
                 ((i :< ?one + ?one :& a := ?one) :|
                  ex
                    (\i' a' ->
                       isDigit (pair i' a' + ?one) s p :&
                       i := i' + ?one + ?one :& a := i ^ 2 * a')))) :&
       let πn = x * k
           πn = πn + x
       in cont πn πn πd)

-- en₀/ed < e < en₁/ed, with both fractions approaching e as k
-- increases:
-- en₀ = (k + 1)^k * k
-- en₁ = (k + 1)^(k + 1)
-- ed = k^(k + 1)
eBound p k cont =
  ex
    (\s x ed ->
       cse 3 (pair x ed) (\y -> isDigit (pair k y + ?one) s p) :&
       al
         (\i a b ->
            cse 3 (pair a b) (\y -> isDigit (pair i y + ?one) s p) ==>
            (i :< ?one :& a := ?one :& b := k) :|
            ex
              (\i' a' b' ->
                 cse 3 (pair a' b') (\y -> isDigit (pair i' y + ?one) s p) ==>
                 i := i' + ?one :& a := (k + ?one) * a' :& b := k * b')) :&
       let en = x * k
           en = en + x
       in cont en en ed)

-- There exist a, b, c ∈ ℕ (not all zero) with a·π/4 + b·e = c or
-- a·π/4 = b·e + c or b·e = a·π/4 + c.
prop :: Prop v
prop =
  withOne $
  ex
    (\a b c ->
       al
         (\p k ->
            k :< ?one :|
            Bound p k $ n πn πd ->
               eBound p k $ \en en ed ->
                 cse 3 (a * πn * ed) $ \x ->
                   cse 3 (a * πn * ed) $ \x ->
                     cse 3 (b * en * πd) $ \y ->
                       cse 3 (b * en * πd) $ \y ->
                         cse 6 (c * πd * ed) $ \z ->
                           (x + y :< z :& x + y :> z) :|
                           (x :< y + z :& x :> y + z) :|
                           (y :< x + z :& y :> x + z))))

main :: IO ()
main = do
  print (scoreProp prop)
  putStrLn (showProp 0 prop allVars "")

Çevrimiçi deneyin!


"a = 1 veya p en önemliyse ve a bunun bir gücüdür" - bu da p = 1 olabilir. p> 1 tarafından ima edilmiş olmasına rağmen isDigit, onu kullandığınız tek yer.
Ørjan Johansen

@ ØrjanJohansen Teşekkürler, bu notu düzelttim. (Aslında, her sonlu kümeyi temsil etmenin bir yolu olduğu sürece, beklenmedik durumlarda hangi kümelerin powerOfPrimeve isDigitrüzgarın temsil edildiği önemli değildir .)
Anders Kaseorg

2
Eğer a7 veya daha yüksek puan var, sanırım, o zaman bir ekleyerek değerinde olacaktır ex (\a' -> a' := a :& ... )için sargıyı isDigit.
Ørjan Johansen

@ ØrjanJohansen Elbette, bu 68'i kurtarıyor. Teşekkürler!
Anders Kaseorg

İhtiyacınız olması gerektiğine inanıyorum k>0, çünkü durumda eBoundsıfır payda (ve bir sıfır pay) verir k==0, bu yüzden tüm alternatifler başarısız olur.
Ørjan Johansen

3

270

E1                                                                              { Exist 1, defined when Any k introduced }
Ec1 Ec2 Ec3 Ec4 Ec5 Ak k*1=k & c3>1 & ( En0 An n<n0 |                           { for large enough n, |(c1-c4)e+c3(4-pi)/8+(c2-c5)|<1/k }
Ex Ep Ew Emult At (Eb ((b>1 & Eh b*h=t) &! Eh h*p=b)) |                         { x read in base-p, then each digit in base-w. t as a digit }
Ee1 Ee2 Ehigher Elower e2<p & lower<t & ((higher*p+e1)*p+e2)*t+lower=x &        { last digit e1, this digit e2 }
    { Can infer that e2=w+1 | e1<=e2 & u1<=u2 & i1<=i2 & s1<=s2 & t1<=t2, so some conditions omitted }
Ei1 Es1 Et1 Eu1 (((u1*w)+i1)*w+t1)*w+s1=e1 &                                    { (u,i,t,s) }
Ei2 Es2 Et2 Eu2 i2<w & s2<w & t2<w & (((u2*w)+i2)*w+t2)*w+s2=e2 &               { e2=1+w is initial state u=i=0, s=t=1 }
(e2=w+1 | e1=e2 | i2=i1+1+1 & s2=s1*(n+1) & t2=t1*n &                           { i=2n, s=(n+1)^n, mult=t=n^n, s/mult=e }
Eg1 Eg2 g1+1=(i2+i2)*(i2+i2) & g1*u1+mult=g1*u2+g2 & g2<g1) &                   { u/mult=sum[j=4,8,...,4n]1/(j*j-1)=(4-pi)/8. mult=g1*(u2-u1)+g2 }
(t>1 | i2=n+n & t2=mult & Ediff Ediff2                                          { check at an end t=1 }
c1*s2+c2*mult+c3*u2+diff=c4*s2+c5*mult+diff2 & k*(diff+diff2)<mult))            { |diff-diff2|<=diff+diff2<mult/k, so ...<1/k }

a|b&c dır-dir a|(b&c) Bunları parantez çıkarmadan yine onlar özgürsünüz, iyi görünmesini sağlar düşünüyorum beri.

"(expr)".replace(/\{.*?\}/g,'').match(/[a-z0-9]+|[^a-z0-9\s\(\)]/g)Jetonları saymak için JavaScript kullanıldı .


Neden alabilirsin mult = t? Ayrıca x, yalnızca sonlu sayıda basamağa sahip olabileceğinden, e1 = e2 = 0yeterince büyük olmasına izin vermeniz gerekir t. Ayrıca gibi belirsiz yapılar için daha fazla parantez veya başka bir anlam ayrımı yapmanız gerekir _ & _ | _.
Anders Kaseorg

@AndersKaseorg Her öğeyi çarparım mult. mult=t2Sonunda herhangi bir sorun görmüyorum . e1=e2=0sabit olmalı, ancak kesin değil, bu yüzden şu anda kabulü değiştirmiyorum.
l4m2

Eğer a & b | cbir (a & b) | co senin t*1=tyanlış yerde kesinlikle. Ayrıca önemsiz çözümü de dışlamadınız c1 = c4 & c2 = c5 & c3 = 0 & diff = diff2.
Anders Kaseorg

@AndersKaseorg Neden diff≠diff2çalışırım?
l4m2

Neyse kullanabilirsiniz !(c2=c5)zaten biliyorum olarak emantıksız yani çalışma puanı artmaz değil bu bile,
l4m2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.