Fewest (distinct) characters for Turing Completeness Summary:
For any given language, what is the smallest amount of unique characters for your language to be Turing-Complete?
Challenge:
For any language of your choice, find the smallest subset of characters that allows your language to be Turing-Complete. You may reuse your set of characters as many times as you want.

Examples:

JavaScript: +!()[] (http://www.jsfuck.com)

Brainfuck: +&lt;&gt;[] (assumes a wrapping cell size)

Python 2: ()+1cehrx (made from scripts like exec(chr(1+1+1)+chr(1)))


Scoring:
This challenge is scored in characters, not bytes.  For example, The scores for the examples are 6, 5, and 9.

Notes:

This challenge differentiates from others in the sense that you only your language to be Turing-Complete (not necessarily being able to use every feature of the language.)

Although you can, please do not post answers without reducing the characters used. Example: Brainfuck with 8 characters (since every other character is a comment by default.)

You MUST provide at least a brief explanation as to why your subset is Turing-Complete.
Haskell, 4 chars

()=;


With ()= we are able to define S, K and I. The definitions must be separated by either ; or a NL.

We define (==) as S (the second line shows a more readable version):

((=====)==(======))(=======)=(=====)(=======)((======)(=======))
( a     == b      ) c       = a      c       ( b       c       )


(===) as K:

(=====)===(======)=(=====)
 a     === b      = a


and (====) as I:

(====)(=====)=(=====)
(====) a     = a 


Luckily (==), (===), (====), etc. are valid function/parameter names.

As @ais523 points out, SKI isn't enough in a strongly typed language like Haskell, so we need to add a fixpoint combinator (=====):

(=====)(======)=(======)((=====)(======))
(=====) f      = f      ((=====) f      )