FRACTRAN

FRACTRAN

FRACTRAN bir olan egzotik ve Turing-tam programlama dili için geçerli doğal tamsayılar . 1987'de bir tanımını yayınlayan matematikçi John Conway tarafından icat edildi .

Tamsayılar üzerinde herhangi bir hesaplanabilir işlevi kesirler listesi ile temsil etmekten oluşur .

A tamsayısının görüntüsünü bulmak için, A ile çarpılan kesirlerin ilki için listeye bakarız, B tamsayısı verir, sonra prosedürü tekrar B tamsayısına uygularız.Çarpılan listenin kesirlerinden hiçbiri ile çarpılırsa önceki sonuç bir tamsayı vermez, prosedür durur.

Misal

Kesirler listesine karşılık gelen FRACTRAN programını düşünün .

Tam sayı 14'e ne tam sayı ne de tam sayı olarak uygulanırsa , program hemen durur.

Eğer bunu 15 tamsayısına uygularsak, arka arkaya 20 (çünkü sadece biri bir tamsayıdır), sonra 6 (çünkü bir tamsayıdır), sonra 8 (çünkü sadece bir tamsayı verir), sonra prosedür durur.

Prensip

İlke, tamsayıların asal çarpanlarının ürünlerine ayrışmanın varlığına ve p-adik değerleme kavramına dayanmaktadır .

Her A tamsayısının, p asal sayısının üssüne A'daki p'nin değerlemesi adı verilen ve not edildiği benzersiz bir asal faktör ayrışması vardır .

Belirli bir A tamsayısı için , sonlu sayıları dışında tümü sıfırdır. A tamsayısının, B tamsayısının elde edilmesini sağlayan bir kesir ile çarpılması ,.

Bu nedenle, önceki liste 2, 3 ve 5'in değerlemeleri üzerinde çalışır. İlk fraksiyon 1'i 2 ve 5'in değerlemelerinden çıkarır (bu mümkünse) ve 3'ün değerini 1'e yükseltir, ikinci fraksiyon yalnızca değerleme 2 veya 5 sıfır ise, 2'nin değerini iki birim artırır ve 3'ün değerini bir birim azaltır.

A, A '30 ile üssü ile yazıldığında ve iki döngü kullanarak, prosedür A'yı sonra'ya dönüştürür ve sonra durur.

Program böylece değerlemeler üzerinde işlemlerin tanımlanmasını mümkün kılar.

Temel işlemler

İlave

Tek kesiri içeren liste , 2 ve 3'ün değerlemelerini toplamayı mümkün kılar: A, 6 ile A 'üssü ile yazıldığında , prosedür A'ya dönüşene kadar uygulanır .

Çarpma işlemi

Ek bir döngü kullanarak çarpımsal bir fonksiyon oluşturabiliriz. Bunun için algoritmaya durum kavramını eklemek gerekir . Bu algoritma bir sayıya uygulanır ve onu 2, 3, 5 ve ayrıca 7, 11 ve 13 değerlerine dönüştürür ve üzerinde çalışır:

Şu anki durum Durum Aksiyon Sonraki durum
AT v7> 0
1’den v7’ye 1’i v3’e ekle
AT
v7 = 0 ve
v2> 0
V2'den 1 çıkar B
v7 = 0 ve
v2 = 0 ve
v3> 0
V3'ten 1 çıkar AT
v7 = 0 ve
v2 = 0 ve
v3 = 0
Dur
B v3> 0 1'i v3'ten çıkarın 1'i v5'e
ekleyin 1'i v7'ye
ekleyin
B
v3 = 0 Hiçbir şey değil AT

Durum B, v3'ü v5'e ekleyen ve ayrıca v3'ü v7'ye taşıyan bir döngüdür ve A durumu, döngü B v2'yi tekrarlayan bir döngüdür. Durum A ayrıca, döngü B sonlandırıldığında başlangıç ​​değerini (v7'de bulunan) v3'e döndürür.

Bu durumları yönetmek için yeni değişkenler gereklidir: durum göstergeleri rolünü oynarlar. Döngü B'nin durum bayrakları v11 ve v13'tür. Tek döngü B için iki durum göstergesi gereklidir: aslında, döngünün girişinde tüketilen ilk gösterge (v11), programa devam etmesi gerektiğini belirtmek için ikinci bir göstergeye (v13) sahip olmak gerekir. aynı durum. V13 bayrağı, döngünün "sonraki" ifadesi sırasında v11 olarak değiştirilir.

Durum göstergelerini ve talimatları çarpma algoritması tablosuna ekleyerek şunları elde ederiz:

talimat
frakranı
Şu anki durum
Durum göstergeleri
Durum Aksiyon Sonraki durum
AT Hayır v7> 0 V7'den 1 çıkar, v3'ten
1 ekle
AT
v7 = 0 ve
v2> 0
V2'den 1'i çıkar,
v11'i 1'e ayarla
B
v7 = 0 ve
v2 = 0 ve
v3> 0
V3'ten 1 çıkar AT
v7 = 0 ve
v2 = 0 ve
v3 = 0
Dur
B s11, s13 v3> 0 1'i v3'ten çıkarın 1'i v5'e
ekleyin 1'i v7'ye
ekleyin
B
v3 = 0 V11'i 0 olarak ayarlayın AT

FRACTRAN komutlarının listesini yazarken, durum A'nın komutlarını en son koymalıyız çünkü durum A'da durum göstergesi yoktur, varsayılan durumdur.

Bu nedenle FRACTRAN çarpma programı aşağıdaki listedir:


Numarayı girerseniz program geri döner .

Çıkarma

Basit bir fraksiyon sayısı dönüştürür içine


Öklid bölümü

Öklid bölme arasında bir ile b ( a ve b doğal sayılar, b > 1), doğal verilmektedir numaraları q ve r , öyle ki R < b ve a = bq + r . Bu Öklid bölünme çok çıkarma bir döngü olarak görülebilir: bölünmesi bir göre b olup çıkarmak için , b ile ilgili olarak gerekli olduğu kadar çok kez, bu çıkartma, tekabül gerçekleştirilir sayısı q , son değer bir dinlenme eşleşir.

Algoritma daha sonra a , v3 içeren b , q içermesi amaçlanan v5 ve r içermesi amaçlanan v7 üzerinde çalışır . Bu değişkenler 4 durum göstergesi v11, v13, v17, v19 ile desteklenir.

Aşağıdaki FRACTRAN programı üç durumdan oluşur:


FRACTRAN talimatları
Şu anki durum
Durum göstergeleri
şartlar ve koşullar Hareketler Sonraki durum
AT s11, s13 v2> 0 ve
v3> 0
V2'den 1 çıkar, v3'ten 1 çıkar,
v7'den 1
ekle
AT
v2 = 0 ve
v3> 0
V3'ten 1 çıkar,
v11'i 0'a ayarla
X
v3 = 0 1’den v5’e ekle v11’i
0’a
ayarla v17’yi 1’e ayarla
B
B s17, s19 v7> 0 V7'den 1 çıkar, v3'ten
1 ekle
B
v7 = 0
V11'i 1'e ayarlayın v17'yi 0'a ayarlayın
AT
X v3> 0 V3'ten 1 çıkar X
v3 = 0 Dur

Programın yazımı daha sonra:

Sen girmek zorunda sadece çıkmak almak için nereye ile .

Süit üretimi

Bazı programlar süresiz olarak döngü yapar ve sonsuz dizi oluşturur.

Conway'in asal sayı algoritması

Aşağıdaki program, Richard Guy The Book of Numbers ile birlikte yazılan kitapta John Conway tarafından sunulmuştur . John Conway onlara "Fantastik 14 Kesirler" diyor .

2 tamsayısı uygulanan bu program, formunun bütün şartlarını içeren bir dizi üreten bir olan asal sayı . Tersine, bu dizideki herhangi bir 2'nin üssü 1 veya bir asal sayıya sahiptir. Bu devam oyunun adı Conway primegame .

Algoritma esasen bir Öklid bölünme algoritmasıdır. Şeklinde bir dizi başlayarak: prensibi aşağıdaki gibidir , burada 0 ≤ m < n , bölmek için algoritma çalışır n tüm numaraları ile + 1 n o en büyük tam sayıyı bulana kadar 1, k , öyle ki k böler n + 1 ve sonra geri döner . Algoritmanın 2 kuvvetini döndürdüğü tek durum, k = 1 olduğu durumlardır , yani n + 1'in asal olduğu durumlardır .

Fibonacci Dizisi

Aşağıdaki program:

3 tamsayısına uygulandığında, a ve b'nin Fibonacci dizisinin iki ardışık terimi olduğu formun tüm terimlerini içeren bir dizi oluşturur . Tersine, form dizisinin herhangi bir terimi , Fibonacci dizisinin iki ardışık terimine üslü olarak sahiptir.

Algoritma, temelde sağlamaktan başlayarak oluşan bir toplama algoritmasıdır .

Gösteri

Aslında :

 

Syracuse Süit

Kenneth G. Monks tarafından sunulan bu program:

uygulandığında , ardışık olarak tüm terimleri içeren bir dizi oluşturur ; burada b , ilk terim N'nin Syracuse dizisinin terimlerini çaprazlar. Tersine, bu dizideki herhangi bir 2'nin üssü Syracuse dizisinin bir elemanına sahiptir.

Gösteri Bu nedenle, N üssü N çift ise N / 2 ve N tek ise (3N + 1) / 2 olarak modifiye edilmiştir ki bu Syracuse dizisinin ilkesidir.  

Kenneth Monks'un fikri, bu program tarafından üretilen döngüsel dizilerin özelliklerini arayarak döngüsel Syracuse dizilerini incelemektir.

Evrensel program

Conway ayrıca aşağıdaki kesirlerden oluşan evrensel bir FRACTRAN programı tanımlamıştır:

Daha sonra, herhangi bir özyinelemeli kısmi fonksiyon f için, herhangi bir n tamsayısı için , yukarıdaki listeyle birlikte FRACTRAN programını sayıya uygulayarak , sayıya ancak ve ancak hesaplama yapılırsa ulaşacağımız şekilde bir c tamsayısının var olduğunu gösterebiliriz . f ( n ) biter. Bu özellik, tüm hesaplanabilir fonksiyonları FRACTRAN'da elde ettiğimizi gösterir.

Notlar ve referanslar

Notlar

  1. Kapak ve Gopinath'ın kitabında yayınlanan FRACTRAN: Aritmetik için basit bir evrensel programlama dili makalesinde , İletişim ve Hesaplamada Açık Sorunlar , Springer-Verlag, New York, (1987), s. 4-26.
  2. (inç) Benzer algoritmalar bu sayfada açıklanmıştır .
  3. Ayrıntılı bir açıklama için bkz. Julian Havil, Nonplussed!: Mathematical Proof of Implausible Ideas , Princeton University Press , 2007, ( ISBN  978-0691120560 ) .

Referanslar

  1. Julian Havil, Nonplussed!: Mathematical Proof of Implausible Ideas , s. 162-163.
  2. devamı Bkz A007542 ait OEIS .
  3. (en) [PDF] Kenneth G. Monks, "  3x + 1 minus the +  ," in Discrete Mathematics and Theoretical Computer Science 5, 2002 47-54.

Ayrıca görün

İlgili Makaleler

Bibliyografik kaynaklar

<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">