Share via


연산 및 함수

큐비트 데이터 형식에 대한 설명에서 자세히 설명한 대로 양자 계산은 대상 양자 프로세서에서 기본적으로 지원되는 연산의 부작용 형태로 실행됩니다. 실제로 이는 Q#의 유일한 부작용입니다. 모든 형식은 변경할 수 없으므로Q#에서 명시적으로 표현되는 값에 영향을 주는 부작용은 없습니다. 따라서 특정 호출 가능 항목의 구현이 이러한 기본적으로 구현된 연산을 직접 또는 간접적으로 호출하지 않는 한 동일한 입력이 제공되면 해당 실행에서 항상 동일한 입력을 고려하여 동일한 출력을 생성합니다.

Q#에서는 이러한 완전히 결정적인 계산을 함수로 명시적으로 분할할 수 있습니다. 기본적으로 지원되는 명령 세트는 언어 자체에 고정되어 기본 제공되는 것이 아니라 완전히 구성 가능하고 Q# 라이브러리로 표현되므로 함수에서 다른 함수만 호출할 수 있고 어떤 연산도 호출할 수 없도록 요구하여 결정성이 보장됩니다. 또한 결정적이지 않은 기본 명령(즉, 양자 상태에 영향을 주므로)은 연산으로 표현됩니다. 이러한 두 가지 제한 사항으로 인해 입력 값이 알려지는 즉시 함수를 평가할 수 있으며, 원칙상 동일한 입력에 대해 두 번 이상 평가할 필요가 없습니다.

따라서 Q#은 두 가지 형식의 호출 가능 항목, 즉 연산 및 함수를 구분합니다. 모든 호출 가능 항목은 단일 인수(잠재적으로 튜플 값)를 입력으로 사용하고 단일 값(튜플)을 출력으로 생성합니다. 구문적으로, 연산 형식은 <TIn> => <TOut> is <Char>로 표현되며 여기서 <TIn>은 인수 형식, <TOut>은 반환 유형, <Char>연산 특성으로 바뀌게 됩니다. 특성을 지정할 필요가 없는 경우 구문은 <TIn> => <TOut>으로 간소화됩니다. 마찬가지로 함수 형식은 <TIn> -> <TOut>으로 표현됩니다.

이 결정성 보장을 제외하고는 연산과 함수 간에 거의 차이가 없습니다. 둘 모두는 자유롭게 전달할 수 있는 첫 번째 클래스 값입니다. 다음 예제와 같이 다른 호출 가능 항목에 대한 반환 값 또는 인수로 사용할 수 있습니다.

function Pow<'T>(op : 'T => Unit, pow : Int) : 'T => Unit {
    return PowImpl(op, pow, _);
}

둘 모두는 형식 매개 변수화된 정의(예: 위의 Pow형식 매개 변수화된 함수)를 기준으로 인스턴스화할 수 있고, 예제의 return 문에서와 같이 부분적으로 적용할 수 있습니다.

연산 특성

입력 및 출력 형식에 대한 정보 외에도 연산 형식에는 연산의 특성에 대한 정보가 포함됩니다. 예를 들어 이 정보는 연산에서 지원되는 함자를 설명합니다. 또한 내부 표현에는 컴파일러에서 유추하는 최적화 관련 정보도 포함됩니다.

연산의 특징은 미리 정의된 레이블 및 기본 제공 레이블 집합입니다. 형식 시그니처의 일부인 특수 식의 형태로 표현됩니다. 식은 미리 정의된 레이블 집합 중 하나 또는 지원되는 이진 연산자를 통한 특성 식 조합으로 구성됩니다.

AdjCtl 등, 미리 정의된 두 가지 집합이 있습니다.

  • Adj는 연산이 인접할 수 있음을 나타내는 단일 레이블을 포함하는 집합입니다. 즉, Adjoint 함자를 지원하고 적용된 양자 변환을 "실행 취소"(즉, 반전)할 수 있습니다.
  • Ctl은 연산을 제어할 수 있음을 나타내는 단일 레이블을 포함하는 집합입니다. 즉, Controlled 함자를 지원하며 다른 큐비트의 상태에 따라 해당 실행의 조건을 지정할 수 있습니다.

특성 식의 일부로 지원되는 두 연산자는 합집합 + 및 교집합 *입니다. EBNF에서

    predefined = "Adj" | "Ctl";
    characteristics = predefined 
        | "(", characteristics, ")" 
        | characteristics ("+"|"*") characteristics;

예상대로 *의 우선 순위가 +보다 높고 둘 다 왼쪽 결합입니다. 예를 들어 일항 연산의 형식은 <TIn> => <TOut> is Adj + Ctl으로 표현되며, 여기서 <TIn>은 연산 인수의 형식으로, <TOut>은 반환된 값의 형식으로 바꿔야 합니다.

참고

이 양식에서 연산의 특징을 나타내는 두 가지 주요 장점이 있습니다. 그 중 하나는 모든 레이블 조합에 대해 기하급수적으로 많은 언어 키워드를 사용하지 않고도 새 레이블을 도입할 수 있다는 점입니다. 더 중요한 것은 연산의 특성을 나타내는 식을 사용하면 향후 연산 특성에 대한 매개 변수화도 지원할 수 있습니다.