# Overview

## 1. ZK DSL (Domain-Specific Language)

ZK DSL은 영지식 증명에서 검증할 조건을 사람이 이해할 수 있는 코드 형태로 표현하기 위한 전용 언어이다.\
일반 프로그래밍 언어처럼 변수, 함수, 제어문을 사용해 로직을 작성하면, 내부에서 이를 제약식·회로 표현으로 자동 변환하는 역할을 한다.

즉, "이 값들이 이런 관계를 만족해야 한다"는 논리를 ZK 프로토콜이 이해할 수 있는 수학적 제약식 세트로 바꿔 주는 것이 ZK DSL이다.

Circom, Noir, Cairo는 모두 이런 의미에서 **각기 다른 스타일의 ZK DSL**에 해당한다.

## 2. Proving System&#x20;

Proving System은 주어진 제약식·회로에 대해 실제로 영지식 증명을 만들어 내고 검증하는 암호 프로토콜이다.\
어떤 커밋먼트 스킴을 쓰는지, 증명 크기가 얼마나 되는지, 검증 시간이 어떤지, 신뢰 설정이 필요한지 여부 같은 것들이 모두 이 층에서 결정된다.

즉, DSL이 "무엇을 만족해야 하는지"를 정의한다면, Proving System은 "그 조건을 짧은 증명으로 안전하게 증명·검증하는 방법"을 제공하는 층이다.

Halo2는 별도의 언어라기보다, 이런 Proving System을 구현한 라이브러리/프레임워크에 가깝다.

***

이후 페이지들은 위 두 층을 기준으로 다음과 같은 흐름으로 구성된다.

먼저 Circom, Noir, Cairo를 각각 살펴보며

* 어떤 배경과 목적에서 등장했는지,
* 회로를 어떤 방식으로 표현하는지(템플릿/컴포넌트, VM 기반 등),
* 간단한 예제를 통해 "코드 → 제약식(R1CS) → witness → proof" 흐름이 어떻게 이어지는지를 정리한다.

이어서 Halo2를 중심으로

* PLONKish Artemis, 컬럼/게이트/룩업 구조,
* 재귀·집계 증명 지원 등 Proving System 레벨의 특징을 설명하고,

앞서 다룬 DSL들이 어떤 식으로 이러한 프루빙 백엔드에 연결될 수 있는지를 살펴본다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://upsidezkp.gitbook.io/upside-zkp-docs/step-4/zkp-dsl-proving-system/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
