Зада́ча выполни́мости бу́левых фо́рмул (SAT, ВЫП) — важная для теории вычислительной сложности алгоритмическая задача.
 Экземпляром задачи является булева формула, состоящая только из имён переменных, скобок и операций 
  
    
      
        ∧
      
    
    {\displaystyle \wedge }
  
 (И), 
  
    
      
        ∨
      
    
    {\displaystyle \vee }
  
 (ИЛИ) и 
  
    
      
        ¬
      
    
    {\displaystyle \neg }
  
 (HE).
Задача заключается в следующем: можно ли назначить всем переменным, встречающимся в формуле, значения ложь и истина так, чтобы формула стала истинной.
 Согласно теореме Кука, доказанной Стивеном Куком в 1971 году, задача SAT для булевых формул, записанных в конъюнктивной нормальной форме, является NP-полной. Требование о записи в конъюнктивной форме существенно, так как, например, задача SAT для формул, представленных в дизъюнктивной нормальной форме, тривиально решается за линейное время в зависимости от размера записи формулы (для выполнимости формулы требуется только наличие хотя бы одной конъюнкции, не содержащей одновременно 
  
    
      
        x
      
    
    {\displaystyle x}
  
 и отрицание 
  
    
      
        ¬
        x
      
    
    {\displaystyle \neg x}
  
 для некоторой переменной 
  
    
      
        x
      
    
    {\displaystyle x}
  
).
 Чтобы точно сформулировать задачу распознавания, фиксируется конечный алфавит, с помощью которого задаются экземпляры языка. Хопкрофт, Мотвани и Ульман в книге «Введение в теорию автоматов, языков и исчислений» (англ. Introduction to Automata Theory, Languages, and Computation) предлагают использовать следующий алфавит: 
  
    
      
        {
        ∧
        ,
        ∨
        ,
        ¬
        ,
        (
        ,
        )
        ,
        x
        ,
        0
        ,
        1
        }
      
    
    {\displaystyle \{\wedge ,\vee ,\neg ,(,),x,0,1\}}
  
.
 При использовании такого алфавита скобки и операторы записываются естественным образом, а переменные получают следующие имена: 
  
    
      
        x
        1
        ,
        x
        10
        ,
        x
        11
        ,
        x
        100
        ,
        …
      
    
    {\displaystyle x1,x10,x11,x100,\dots }
  
, согласно их номерам в двоичной записи.
 Пусть некоторая булева формула, записанная в обычной математической нотации, имела длину 
  
    
      
        N
      
    
    {\displaystyle N}
  
 символов. В ней каждое вхождение каждой переменной было описано хотя бы одним символом, следовательно, всего в данной формуле не более 
  
    
      
        N
      
    
    {\displaystyle N}
  
 переменных. Значит, в предложенной выше нотации каждая переменная будет записана с помощью 
  
    
      
        O
        
          (
          
            log
            ⁡
            
              N
            
          
          )
        
      
    
    {\displaystyle O\left(\log {N}\right)}
  
 символов. В таком случае, вся формула в новой нотации будет иметь длину 
  
    
      
        O
        
          (
          
            N
            log
            ⁡
            
              N
            
          
          )
        
      
    
    {\displaystyle O\left(N\log {N}\right)}
  
 символов, то есть длина строки возрастет в полиномиальное число раз.
 Например, формула 
  
    
      
        a
        ∧
        ¬
        (
        b
        ∨
        c
        )
      
    
    {\displaystyle a\wedge \neg (b\vee c)}
  
 примет вид 
  
    
      
        x
        1
        ∧
        ¬
        (
        x
        10
        ∨
        x
        11
        )
      
    
    {\displaystyle x1\wedge \neg (x10\vee x11)}
  
.
 В 1970-м году в статье Стивена Кука был впервые введен термин «NP-полная задача», и задача SAT была первой задачей, для которой доказывалось это свойство.
 В доказательстве теоремы Кука каждая задача из класса NP в явном виде сводится к SAT. После появления результатов Кука была доказана NP-полнота для множества других задач. При этом чаще всего для доказательства NP-полноты некоторой задачи приводится полиномиальная сводимость задачи SAT к данной задаче, возможно в несколько шагов, то есть с использованием нескольких промежуточных задач.
 Интересными важными частными случаями задачи SAT являются:
 Одним из наиболее эффективных методов распараллеливания задач SAT являются CDCL-решатели (CDCL, англ. conflict-driven clause learning), основывающиеся на нехронологических вариантах алгоритма DPLL.