Sadece veri türleri sayısal skalerler ve dizilerin keyfi yuvaları olan işlevsel bir programlama dili düşünün. Dilin sınırsız yinelemeden yoksun olması nedeniyle aşağıdakilere izin verilmez:
- Açık döngüler (yan etkiler olmadan fazla kullanılmaz)
- yineleme
- keyfi birinci sınıf fonksiyonlar (y birleştirici yok)
Bununla birlikte, dil:
- üst düzey fonksiyonlar
- lexically scoped izin bağlamaları
- dallanma kontrol akışı
- ortak skaler matematik ve mantık fonksiyonları
- x ile aynı değerlere sahip bir n elemanlı dizi oluşturan dolgu (n, x) gibi basit bir dizi yapıcı
- en önemlisi: paralel yapılandırılmış yineleme (haritalama, azaltma, tarama, tüm çiftler gibi) gerçekleştiren kısıtlı bir üst düzey operatörler kümesi.
Veri paralel operatörleri hakkında daha spesifik olmak gerekirse:
- y = harita (f, x) => y [i] = f [i]
- Bazı permütasyon p için y = azaltmak (f, a, x) => y = f (a, f (y [p [0]], f (y [p [1]], ...)))
- y = tarama (f, a, x) => y [i] = azaltma (f, a, y [0 ... i-1])
- y = allpairs (f, x, y) => y [i, j] = f (x [i], y [j])
Başka operatörler de olabilirdi, ancak hak kazanmak için polinom çalışma süresine sahip olmalı, bazı makul veri paralel hesaplama modeli altında uygulanabilir olmalı ve çoğu polinom alanında kullanılmalıdır.
Açıkçası bu dilde ifade edilemeyen bazı yapılar vardır, örneğin:
while f(x) > tol:
x <- update(x)
Bu sistemde ne ifade edebiliriz? Sadece FP'deki arama problemleriyle sınırlı mıyız? Tüm polinom zaman algoritmalarını yakalayabilir miyiz? Ayrıca, bu sınıf için çok az sayıda operatör var mı?