Implicit computational complexity

This article is an orphan, as no other articles link to it. Please introduce links to this page from related articles; try the Find link tool for suggestions. (February 2023)

|

Implicit computational complexity (ICC) is a subfield of computational complexity theory that characterizes programs by constraints on the way in which they are constructed, without reference to a specific underlying machine model or to explicit bounds on computational resources unlike conventional complexity theory.[1][2] ICC was developed in the 1990s and employs the techniques of proof theory, substructural logic, model theory and recursion theory to prove bounds on the expressive power of high-level formal languages.[3][4] ICC is also concerned with the practical realization of functional programming languages, language tools and type theory that can control the resource usage of programs in a formally verifiable sense.[5][6]

## Implicit Representations of polynomial time

[edit]

The important complexity classes of polynomial-time decidable sets (the class P) and polynomial-time computable functions (FP) have received much attention and possess several implicit representations. Two examples follow.

### Cons-free programs

[edit]

Jones[7][8] defined a programming language that can solve decision problems where the input is a binary string, and showed that a problem can be decided in this language if and only if it is in P. The language can be briefly described as follows. It receives the input as a list of bits. It has variables that can point to the list and change by application of the "tail" operation so they can move forward on the list. It can define recursive functions, but has no Higher-order functions. Crucially, it has no data-type constructors (hence the name cons-free): the input list is the one and only data structure throughout the program. The lack of constructors limits the computational power of the language, so it is no wonder that it cannot decide all the decidable problems, but the interest in it for Implicit Computational Complexity lies in that it can decide exactly P, and this is independent of the execution time of the programs, that can be exponential. Interestingly, Jones has also shown that if non-determinism is added to the language (as in a Nondeterministic Turing machine), the class of problems that can be accepted is still P.

### Function algebras with recursion on notation

[edit]

Bellantoni and Cook[9] showed that a certain class of functions coincides with FP. These are functions which are defined, like the primitive recursive functions, by a set of base functions and operators for constructing new functions from existing ones. A special recursion scheme is used instead of the primitive recursion scheme, as will be seen below, and in addition, the functions have their arguments partitioned in two "sorts". This is denoted by separating arguments by a semicolon:  f ( x 1 , … , x k ; x k + 1 , … , x k + n ) {\displaystyle f(x_{1},\dots ,x_{k};x_{k+1},\dots ,x_{k+n})} . The arguments following the semicolon are called safe (a more intuitive name might be "protected"). When a value is passed in a safe position, it is not allowed to grow too much — note the difference between clauses (3) and (4) below. Another important difference to the definition of primitive recursive functions, is that here the arguments are considered as binary strings and we can increase a value by adding a bit (x0 or x1) in contrast to the numeric successor function (x’).

Here is the list of basic functions:

1. empty string:  ε {\displaystyle \varepsilon } (a zero-ary function)
2. projections:  π i k , n ( x 1 , … , x k ; x k + 1 , … , x k + n ) = x i , {\displaystyle \pi _{i}^{k,n}(x_{1},\ldots ,x_{k};x_{k+1},\ldots ,x_{k+n})=x_{i},} for each  1 ≤ i ≤ k + n {\displaystyle 1\leq i\leq k+n}
3. normal binary successors:  S i ( x ; ) = x i , i ∈ { 0 , 1 } {\displaystyle S_{i}(x;)=xi,\ i\in \\{0,1\\}}
4. bounded safe binary successors:  S i ( z ; x ) = { x i if | x | < | z | x otherwise {\displaystyle S_{i}(z;x)=\left\\{{\begin{array}{ll}xi&{\text{if }}|x|<|z|\\\x&{\text{otherwise}}\end{array}}\right.}
5. binary predecessor:  P ( ; ε ) = ε , P ( ; x i ) = x {\displaystyle P(;\varepsilon )=\varepsilon ,P(;xi)=x}
6. numerical predecessor:  p ( ; ε ) = ε , p ( ; x ′ ) = x {\displaystyle p(;\varepsilon )=\varepsilon ,\ p(;x')=x}
7. conditional:  Q ( ; ε , y , z 0 , z 1 ) = y , Q ( ; x i , y , z 0 , z 1 ) = z i {\displaystyle Q(;\varepsilon ,y,z_{0},z_{1})=y,Q(;xi,y,z_{0},z_{1})=z_{i}}
8. tally product:  × ( x , y ; ) = 1 | x | × | y | {\displaystyle \times (x,y;)=1^{|x|\times |y|}} .

We can combine functions to form new ones using a composition scheme and a recursion scheme. Given  g , r -> , s -> {\displaystyle g,{\vec {r}},{\vec {s}}} , their predicative composition,  f = g ∘ ( r -> ; s -> ) {\displaystyle f=g\circ ({\vec {r}};{\vec {s}})} is defined by  f ( x -> ; y -> ) = g ( r -> ( x -> ; ) ; s -> ( x -> ; y -> ) ) . {\displaystyle f({\vec {x}};{\vec {y}})=g({\vec {r}}({\vec {x}};);{\vec {s}}({\vec {x}};{\vec {y}})).} Given  g , h 0 , h 1 {\displaystyle g,h_{0},h_{1}} , the predicative recursion on notation scheme defines a function  f {\displaystyle f} by  f ( ε , x -> ; y -> ) = g ( x -> ; y -> ) , f ( z i , x -> ; y -> ) = h i ( z , x -> ; y -> , f ( z , x -> ; y -> ) ) . {\displaystyle {\begin{aligned}f(\varepsilon ,{\vec {x}};{\vec {y}})&=g({\vec {x}};{\vec {y}}),\\\f(zi,{\vec {x}};{\vec {y}})&=h_{i}(z,{\vec {x}};{\vec {y}},f(z,{\vec {x}};{\vec {y}})).\end{aligned}}} It is called "recursion on notation", because in each recursive call we strip a bit of the recursion argument, in contrast with recursion "on value" which goes from z to z-1.

Example. We define a function  r ( x ) {\displaystyle r(x)} that receives a binary string x and returns a string of 0s of the same length as x. For readability we omit invocations of the projection functions which are technically necessary to retrieve function argument, e.g.,  π 1 1 ( x ) {\displaystyle \pi _{1}^{1}(x)} to get x in function  g ( x ) {\displaystyle g(x)} .  g ( x ) = f ( x , x ) , where f ( ε , x ; ) = ε , f ( z i , x ; ) = S 0 ( x ; f ( z , x ; ) ) . {\displaystyle {\begin{aligned}g(x)&=f(x,x),{\text{where}}\\\f(\varepsilon ,x;)&=\varepsilon ,\\\f(zi,x;)&=S_{0}(x;f(z,x;)).\end{aligned}}} Note how we need to initially keep a copy of x in order to be able to apply the bounded binary successor operator in the recursion.

## Other Classes

[edit]

Implicit representations have been found for many complexity classes, including the hierarchy of time classes P, EXPTIME, 2-EXPTIME,... and the space classes L, PSPACE, EXPSPACE,...;[8] as well as the classes of the hierarchy DTIME(O(n)), DSPACE(O(n)), DTIME( O ( 2 n ) {\displaystyle O(2^{n})} ), DSPACE( O ( 2 n ) {\displaystyle O(2^{n})} ),...[10] For most classes, several alternative representations are known.

## References

[edit]

1. ^ "ICC'01 - Implicit Computational Complexity". www.dcs.ed.ac.uk. Retrieved 2023-08-06.
2. ^ "Implicit Computational Complexity". perso.ens-lyon.fr. Retrieved 2023-08-06.
3. ^ Girard, Jean-Yves; Scott, Philip; Andre, Scedrov (1992). "Bounded linear logic: a modular approach to polynomial-time computability". Theoretical Computer Science. 97 (1): 1–66\. doi:10.1016/0304-3975(92)90386-T.1-66&rft.date=1992&rft_id=info:doi/10.1016/0304-3975(92)90386-T&rft.aulast=Girard&rft.aufirst=Jean-Yves&rft.au=Scott,+Philip&rft.au=Andre,+Scedrov&rft_id=https://dx.doi.org/10.1016/0304-3975%2892%2990386-T&rfr_id=info:sid/en.wikipedia.org:Implicit+computational+complexity" class="Z3988">
4. ^ "No.033 Implicit Computational Complexity and Applications: Resource Control, Security, Real-Number Computation | SeminarsNII Shonan Meeting". NII Shonan Meeting. Retrieved 2023-08-06.
5. ^ "DICE 2014 – Developments in Implicit Computational Complexity". dice14.tcs.ifi.lmu.de. Retrieved 2023-08-06.
6. ^ Aubert, Clément; Rubiano, Thomas; Rusch, Neea; Seiller, Thomas (2022). "Realizing Implicit Computational Complexity". 7th International Conference on Formal Structures for Computation and Deduction, {FSCD} 2022. LIPIcs. 228: 26:1–26:33.
7. ^ Jones, Neil D. (1999). "LOGSPACE and PTIME Characterized by Programming Languages". Theoretical Computer Science. 228 (1–2): 151–174\. doi:10.1016/S0304-3975(98)00357-0.1–2&rft.pages=151-174&rft.date=1999&rft_id=info:doi/10.1016/S0304-3975(98)00357-0&rft.aulast=Jones&rft.aufirst=Neil+D.&rfr_id=info:sid/en.wikipedia.org:Implicit+computational+complexity" class="Z3988">
8. ^ a b Jones, Neil D. (2001). "The expressive power of higher-order types or, life without CONS". Journal of Functional Programming. 11 (1): 55–94\. doi:10.1017/S0956796800003889.55-94&rft.date=2001&rft_id=info:doi/10.1017/S0956796800003889&rft.aulast=Jones&rft.aufirst=Neil+D.&rft_id=https://doi.org/10.1017%2FS0956796800003889&rfr_id=info:sid/en.wikipedia.org:Implicit+computational+complexity" class="Z3988">
9. ^ Bellantoni, Stephen; Cook, Stephen (1992). "A new recursion-theoretic characterization of the polytime functions (Extended abstract)". Proceedings of the twenty-fourth annual ACM symposium on Theory of computing - STOC '92. pp. 283–293\. doi:10.1145/129712.129740. ISBN 0897915119. S2CID 2215181.283-293&rft.date=1992&rft_id=https://api.semanticscholar.org/CorpusID:2215181#id-name=S2CID&rft_id=info:doi/10.1145/129712.129740&rft.isbn=0897915119&rft.aulast=Bellantoni&rft.aufirst=Stephen&rft.au=Cook,+Stephen&rfr_id=info:sid/en.wikipedia.org:Implicit+computational+complexity" class="Z3988">
10. ^ Kristiansen, Lars; Voda, Paul J. "Programming Languages Capturing Complexity Classes". Nordic Journal of Computing. 12 (2005): 89–115.89-115&rft.aulast=Kristiansen&rft.aufirst=Lars&rft.au=Voda,+Paul+J.&rfr_id=info:sid/en.wikipedia.org:Implicit+computational+complexity" class="Z3988">