# 魔術言語 Zoltraak
Zoltraakは本格的な魔法時代のプログラミング言語です。
Zoltraakには自然言語を別の形の言語に変換するプロンプトコンパイラシステムを採用し、数語の呪文から複雑な魔導書を生成し、微調整の後それを古代語として圧縮し呪文を秘匿する事も可能です。
これにより無詠唱での高速なプログラム実行と、独自言語呪文や暗号呪文へのコンパイルも可能とするため周りから呪文を抜き取られリバースエンジニアリングされる心配もありません。
また、独自言語を用い数語微修正するのみで、実行言語が瞬時に変わり術が発動します。
これにより相対する敵よりも高速かつ柔軟な術の発動を可能とします。

![](assets/images/dai4697_A_digital_painting_of_a_female_wizard_casting_a_powerfu_84046a02-5831-48c1-b8e3-c8b5a49d69e8.png)

# 目次

1. [魔術言語 Zoltraak](#魔術言語-zoltraak)
   - [用語定義](#用語定義)
   - [文字](#文字)
   - [主な機能（予定）](#主な機能予定)
   - [利用方法](#利用方法)
2. [オプション（Option）](#オプションoption)
3. [様々なプログラミング言語でのZoltraakの利用方法](#様々なプログラミング言語でのzoltraakの利用方法)
4. [インストール方法](#インストール方法)
5. [プロジェクトへの参加](#プロジェクトへの参加)
6. [使用方法](#使用方法)
7. [プロンプトコンパイラの分類について](#プロンプトコンパイラの分類について)
   - [世界・国家](#世界国家)
8. [TODO](#todo)
   - [ドキュメント生成](#ドキュメント生成)
   - [テスト](#テスト)
   - [Issue管理](#issue管理)
   - [ファイル管理](#ファイル管理)
   - [要件定義関連](#要件定義関連)
   - [その他](#その他)


![Last frame of video](assets/images/last_frame.png)


## 用語定義

| 魔術 | 説明 | プロンプト |
|---|---|---|
| 即時魔法 | 対話形式の自然言語による指示のこと。即座に魔法を発動できる。 | zoltraak 魔導書 |
| 錬成魔法 | ドキュメント形式で記述された魔法の定義のこと。じっくりと魔法を錬成できる。 | zoltraak 魔導書 --prompt 呪文 |
| 錬成器 | 魔法を錬成するための道具のこと。魔法の品質を高めるのに役立つ。 | zoltraak -c 錬成器 |
| 魔導書 | 魔法の理論や使い方を体系的にまとめた書物のこと。魔法の学習に役立ちこれ自体は一般言語で執筆されている。zoltraakにより魔法を発動することも出来る。 | zoltraak 魔導書 |
| 古代魔導書 | 太古の魔法使いたちが残した神秘的な書物。ルーン文字で書かれており、強力な魔法の秘密が記されている。解読は容易ではないが、魔法の真髄を学ぶことができる。 | zoltraak -a 古代魔導書 |
| 魔法石 | 魔導書を錬成器で錬成したもの、魔導書を実行すると魔法石により魔法が発動する | zoltraak -c 魔法石.md |
| 魔法石 | 魔導書を錬成器で錬成したもの、魔導書を実行すると魔法石により魔法が発動する | zoltraak -c 魔法石.md |



### 文字
| 魔法体系 | 説明 | 自然言語プログラミング体系 |
|---|---|---|
| 世界語 | 人間が日常的に使用する言語。自然に発生し、文法や語彙が複雑。魔法を唱えるのに使われる。 | 自然言語 |
| 古代語 | 魔法を正確に記述するための言語。厳密な文法と限られた語彙を持つ。魔導書の記述に使われる。 | プログラミング言語 |
| ルーン文字 | 魔法陣や魔法具に刻まれる神秘的な文字。魔力を込めて使われる。 | Python |

## 主な機能（予定）

- マークダウンファイルから様々な高級言語のコードへの変換
  - 対応言語: Python, Java, C++, JavaScript, TypeScriptなど
- AnthropicのClaude AIモデルを利用したコード生成
- 変換済みファイルのキャッシュによる高速な再実行 
- 進捗状況の追跡とテストケースの実行
- CI/CDワークフローとの統合

## 利用方法

```sh
pip install zoltraak
```

```
zoltraak book.md -p "本を書きたい"
```

ファイル作成後は以下のように何度でも書き換えることができる。
```
zoltraak book.md -p "もっと分量増やしたい"
```

```sh
# RAGに突っ込むファイル群を指定
zoltraak aaaa.md -f ./input.md （作成予定）
# 一括修正
zoltraak dir/*.md （作成予定）
```


![llmcomment.png](assets/images/llmcomment.png)


| |プロンプト|ドキュメント|高級言語|
|---|---|---|---|
|ファイルなし|zoltraak docs --prompt text|zoltraak docs|zoltraak docs|
|ファイルあり (修正変更なし)|zoltraak docs --prompt text|zoltraak docs|zoltraak docs|
|ファイルあり (修正変更あり)|zoltraak docs --prompt text|zoltraak docs|zoltraak docs|

この表では、各セルに `zoltraak {ファイル名}` の形式でファイル名を入れています。

- 左側の列は、ファイルの有無とファイルの状態を表しています。
  1. ファイルなし
  2. ファイルあり (修正変更なし)
  3. ファイルあり (修正変更あり)

- 上側の行は、ファイルの種類とその説明を表しています。
  - テキストファイル (読み上げ文章)
  - マークダウンファイル (要件定義書)
  - Pythonファイル (高級言語)

各セルには、対応するファイルの種類に基づいて `zoltraak 読み上げ文章`、`zoltraak 要件定義書`、`zoltraak 高級言語` のようなコマンドが入っています

この表は、ファイルの有無とファイルの状態の関係性を明確に表現しており、ファイルの種類ごとにそれぞれの状態が適用可能であることを示しています。また、各セルにファイル名を入れることで、具体的なファイルの例を提供しています。


## オプション（Option）

Zoltraakには以下のようなオプションが用意されています。

- `--output-dir`: 生成されたPythonファイルの出力ディレクトリを指定します。デフォルトは"generated"ディレクトリです。
- `-p`, `--prompt`: 追加のプロンプト情報を指定します。これにより、既存のMarkdownファイルに対して変更を提案したり、新しい要件定義書を生成することができます。
- `-c`, `--compiler`: 要件定義書のテンプレートとなるMarkdownファイルのパスを指定します。デフォルトは"reqdef.md"です。

これらのオプションを使うことで、Zoltraakの機能をより柔軟に活用できます。例えば、既存のMarkdownファイルに対して変更を提案したり、新しい要件定義書を生成することができます。

また、要件定義書のテンプレートとなるMarkdownファイルを変更することで、生成される要件定義書の形式を変更することも可能です。




## 様々なプログラミング言語でのZoltraakの利用方法

Zoltraakは様々なプログラミング言語のファイルを処理することができます。以下に主要な言語での利用例を示します。

ファイル作成 & 

```
# 様々な言語でzoltraak を試してみよう

## Python
zoltraak script.py -p "ユーザー情報を管理するクラスを作成したい"
zoltraak utils.py -p "CSVファイルを読み込んでデータを処理する関数が必要"

## JavaScript
zoltraak app.js -p "TODOリストを管理するReactコンポーネントが必要"
zoltraak server.js -p "ExpressでRESTful APIを実装したい"

## Java  
zoltraak Main.java -p "学生の成績を計算するメソッドを追加してほしい"
zoltraak UserService.java -p "ユーザーのCRUD操作を行うメソッドを作成"

## C++
zoltraak main.cpp -p "リンクリストを使ってデータを管理する関数を書きたい" 
zoltraak utils.h -p "数学計算用のユーティリティ関数を定義したい"

## Ruby
zoltraak app.rb -p "ユーザー認証機能を実装したい"
zoltraak parser.rb -p "JSONデータをパースしてオブジェクトに変換する機能が欲しい"

上記は一例ですが、このようにzoltraak を使えば様々な言語やシチュエーションでコード生成ができます。
ぜひ色々なプロンプトを試して、zoltraak の可能性を探ってみてください！
```

実行



このように、zoltraak は対象となるファイルの拡張子から言語を判断し、適切な形式でコードを生成します。プロンプトには自然言語で実現したい機能や要件を記述するだけで、zoltraak が自動的にコードを生成してくれます。
プログラミング言語に関わらず、同じようにzoltraak を使うことができるため、様々なプロジェクトで活用できるでしょう。







## インストール方法


## プロジェクトへの参加

1. リポジトリをクローンします:
   ```
   git clone https://github.com/yourusername/Zoltraak.git
   ```

2. プロジェクトディレクトリに移動します:
   ```
   cd Zoltraak
   ```

3. 必要な依存関係をインストールします:
   ```
   pip install -r requirements.txt
   ```

4. Anthropic APIキーを設定します:
   - プロジェクトのルートディレクトリに`.env`ファイルを作成します。
   - 以下の行を`.env`ファイルに追加し、`YOUR_API_KEY`を実際のAnthropicのAPIキーに置き換えます:
     ```
     ANTHROPIC_API_KEY=YOUR_API_KEY
     ```

## ディレクトリ構成

```
setting/
├── compiler: 詠唱から自然言語への変換器
│   ├── akirapp.md
│   ├── func.md
│   ├── lisp.md
│   ├── obj.md
│   ├── obj_lisp.md
│   ├── obj_lisp_g.md
│   ├── obj_lisp_g_base64.md
│   └── reqdef.md
├── encryption: 暗号化ツール
│   └── emoji.md
├── formatter: プロンプトフォーマッタ
│   ├── md_comment.md
│   └── py_comment.md
├── interpretspec: インタプリタ型LLM強化プロンプト
│   └── hirokichi.md
└── softdb: 柔らかいDB


memo: setting内の全てのベンチマークは各々やるような実験システムもいれたい

```


## 使用方法

MarkdownファイルをPythonコードに変換するには、以下のコマンドを使用します。


はい、以下に英語のREADMEを日本語に翻訳しました。

## インストール
Zoltraakをインストールするには、以下のコマンドを実行します。

```sh
pip install zoltraak 
```

## 使用方法

MarkdownファイルをPythonコードに変換するには、以下のコマンドを使用します。

```
zoltraak <path_to_markdown_file>
```

`<path_to_markdown_file>`をMarkdownファイルのパスに置き換えてください。

生成されたPythonコードは、`generated`ディレクトリに、Markdownファイルと同じファイル名で`.py`拡張子を持つファイルとして保存されます。

## キャッシング

Zoltraakは、変更されていないMarkdownファイルの不要な変換を避けるために、キャッシングメカニズムを実装しています。各Markdownファイルのハッシュ値を計算し、`hashes.txt`ファイルに保存します。変換コマンドを実行すると、Zoltraakは現在のハッシュ値を保存されているものと比較します。ハッシュ値が一致する場合、Markdownファイルが変更されていないことを示しているため、変換はスキップされ、以前に生成されたPythonコードが使用されます。

## CI/CDとの統合

ZoltraakはCI/CDワークフローに統合して、変換プロセスを自動化することができます。`run_tests.sh`スクリプトは、この統合を容易にするために提供されています。以下の手順を実行します。

1. 仮想環境を作成し、アクティベートします。

2. 必要な依存関係をインストールします。

3. MarkdownファイルをPythonコードに変換します。

4. 生成されたPythonコードを実行します。

5. 対応するユニットテストを実行します。

`run_tests.sh`スクリプトをCI/CDパイプラインで使用するには、CI/CDシステムがビルドプロセスの一部としてスクリプトを実行するように設定してください。

## 貢献

コントリビューションを歓迎します！問題を見つけた場合や改善の提案がある場合は、issueを開くかプルリクエストを送信してください。

## ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。詳細については、[LICENSE](LICENSE)ファイルを参照してください。


## プロンプトコンパイラの分類について



| 大項目 | 中項目 | 規模感 | 抽象度 | 宣言型                                                         | 手続き型                                                       |
|------|------|------|------|----------------------------------------------------------------|----------------------------------------------------------------|
| 単機能 | 要件定義書 | 小規模  | 低 | - 要件定義書 | - 要件定義書から手順書への変換 |
| 単機能 | プログラムファイル | 小規模  | 低 | - Kubernetesマニフェストファイル<br>- Terraformファイル (IaC)<br>- Ansibleのplaybook | - シェルスクリプト<br>- Makefile<br>- CI/CDパイプライン<br>- プロンプトフロー |
| 単機能 | 画像ファイル | 小規模  | 低 | - AIによる画像生成機能 | - 画像処理スクリプト |
| 単機能 | 動画ファイル | 小規模  | 低 | - 動画ファイル作成機能 | - 動画編集スクリプト |
| プロジェクト | 要件定義 | 中規模 | 中 | - 要件定義書を用いたソフトウェア開発プロジェクト<br>- 要件定義書を用いた建築設計プロジェクト<br>- 要件定義書を用いた企画提案プロジェクト<br>- 要件定義書を用いたデータ可視化プロジェクト | - 要件定義書から設計書への変換<br>- 要件定義書から仕様書への変換<br>- 要件定義書からプロジェクト計画書への変換 |
| プロジェクト | 設計 | 中規模 | 中 | - 設計書、アーキテクチャ図を用いたソフトウェア開発プロジェクト<br>- 設計図、青写真、模型を用いた建築設計プロジェクト | - コーディング規約、詳細設計書、テスト仕様書を用いたソフトウェア開発プロジェクト<br>- 施工手順書、工程表、資材リストを用いた建築設計プロジェクト |
| プロジェクト | 企画 | 中規模 | 中 | - プレゼンテーション資料、スライド、図表を用いた企画提案プロジェクト | - タスクリスト、スケジュール表、予算計画を用いたプロジェクト管理 |
| プロジェクト | データ分析 | 中規模 | 中 | - データ分析レポート、ダッシュボード、グラフを用いたデータ可視化プロジェクト | - データクレンジング手順、分析手法、レポートテンプレートを用いたデータ分析プロジェクト |
| 業界 |全体   | 大規模 | 高 | - 業界標準、ベストプラクティス<br>- 企業理念、ミッション、ビジョン<br>- 長期戦略、事業計画<br>- 組織文化、 価値観 | - 業務プロセス、ワークフロー<br>- 組織構造、権限と責任<br>- 予算管理、資源配分<br>- 人事制度、評価システム |
| 業界    | IT業界 | 大規模 | 高 | - コーディング規約、設計原則<br>- アジャイル開発手法<br>- クラウドネイティブアーキテクチャ<br>- DevOps文化 | - ソフトウェア開発ライフサイクル<br>- マイクロサービスアーキテクチャ<br>- CI/CDパイプライン<br>- アジャイルプロジェクト管理 |
| 業界    | 建築業界 | 大規模 | 高 | - 建築基準法、都市計画法<br>- 環境性能評価、省エネルギー基準<br>- ユニバーサルデザイン<br>- 安全施工管理 | - BIM (Building Information Modeling)<br>- ゼネコン、サブコン、専門工事業者の役割分担<br>- 工程管理、原価管理<br>- 品質管理、環境管理 |
| 世界    | - | 最大   | 最大 | - 理想の社会像、ユートピア<br>- 憲法、基本法、権利章典<br>- 国連の持続可能な開発目標（SDGs）<br>- 人権宣言、子どもの権利条約 | - 法律、規則、倫理規定<br>- 国家予算、財政計画<br>- 外交政策、安全保障戦略<br>- 教育制度、社会保障制度 |



## 世界・国家

| 宣言型                                                         | 手続き型                                                       |
|----------------------------------------------------------------|----------------------------------------------------------------|
| - 理想の社会像、ユートピア<br>- 憲法、基本法、権利章典<br>- 国連の持続可能な開発目標（SDGs）<br>- 人権宣言、子どもの権利条約 | - 法律、規則、倫理規定<br>- 国家予算、財政計画<br>- 外交政策、安全保障戦略<br>- 教育制度、社会保障制度 |

世界・国家レベルでは、宣言型には理想の社会像やユートピア、憲法や基本法、権利章典、国連のSDGsなどが含まれます。これらは、目指すべき社会の姿や価値観を明確に示すものです。

一方、手続き型には、具体的な法律や規則、倫理規定、国家予算や財政計画、外交政策や安全保障戦略、教育制度や社会保障制度などが含まれます。これらは、宣言型で示された理想の社会を実現するための具体的な手段や方法を定めるものです。

宣言型と手続き型を適切に組み合わせることで、理想の社会の実現に向けて効果的に取り組むことができます。宣言型で目指すべき方向性を明確にし、手続き型でその実現のための具体的な道筋を示すことが重要です。



小規模 (機能ベース) の宣言型の部分に、動画ファイル作成機能、画像出力機能、AI APIを追加しました。これらは、宣言型のアプローチを用いて、特定の機能を実現するプロンプトコンパイラの例です。

また、小規模 (機能ベース) の手続き型の部分に、CI/CDパイプラインとプロンプトフローを追加しました。CI/CDパイプラインは、手続き型のアプローチを用いて、ソフトウェアの継続的なインテグレーションとデリバリーを自動化するプロンプトコンパイラの一例です。プロンプトフローは、手続き型のアプローチを用いて、プロンプトの実行フローを定義するプロンプトコンパイラの一例です。

この修正された表は、小規模 (機能ベース) のプロンプトコンパイラの種類をより具体的に表現しています。



| 業界       | 宣言型（最終成果イメージ）                 | 手続き型（ゴールまでの手順）                            |
|-----------|----------------------|-----------------------------------|
| 建築業界     | 設計図、青写真             | 施工手順書、工程表                       |
| 料理業界     | レシピ、料理写真            | 調理手順、料理動画                       |
| 音楽業界     | 楽譜、コード進行                 | 演奏手順、練習スケジュール             |
| 教育業界     | シラバス、カリキュラム         | 授業計画、学習スケジュール                   |
| 映画業界     | 脚本、絵コンテ             | 撮影スケジュール、編集作業                   |
| ファッション業界 | デザイン画、着こなし例         | 縫製手順、コーディネート手順                  |
| スポーツ業界   | 戦術図、フォーメーション        | トレーニングメニュー、試合の流れ                |
| ビジネス業界   | 事業計画書、組織図           | 業務フロー、営業プロセス                    |
| 医療業界     | 処方箋、診断書             | 治療計画、リハビリテーションプログラム             |
| 法律業界     | 憲法、法律、政令、省令、法律条文、契約書 | 訴訟手続き、法的手続き                     |
| 生物        | DNA塩基配列              | 遺伝子発現、タンパク質合成、細胞分化、器官形成の過程    |


宣言型：
- ゴールの定義に重点を置く
- 目的地や到達点を明確に示す
- 具体的な手順は抽象化されている
- "What"（何を達成するか）に焦点を当てる

手続き型：
- ゴールへの道のりに重点を置く
- 目的地に到達するための具体的な手順を示す
- 各ステップを順序立てて説明する
- "How"（どのように達成するか）に焦点を当てる

例えば、旅行で目的地に行く場合を考えてみましょう。

宣言型：「パリに行きたい」と宣言するだけで、具体的な交通手段や経路は明示しません。

手続き型：「羽田空港からシャルル・ド・ゴール空港までの飛行機に乗り、空港から市内へは電車で移動する」と、目的地に到達するための詳細な手順を示します。

このように、宣言型はゴールや目的地を明確に定義することに重点を置き、手続き型はゴールへ到達するための具体的な手順に重点を置いています。両方のアプローチを適切に組み合わせることで、効果的に目的を達成することができます。

### 時間軸とゴールの関係

音楽や動画など、時間の流れが関わるものについては、時間軸に沿って進行していきますが、それがゴールまでの過程を意味する場合もあれば、それ自体をゴールと考えることができる場合もあります。

例えば、友人を鼓舞したい、元気にしたいというゴールがある場合、友人に渡すポップな音楽はその過程の一部となります。一方、荘厳な音楽を作ろうという場合、音楽自体がゴールであり、それまでの制作過程がゴールに至るまでの過程となります。

### 生成AIとイメージの世界

生成AIは、ゴールのイメージを示すことで、そのイメージを実現するための過程を自動的に生成することができます。つまり、生成AIはゴールを示せば、その過程を実行してあるべき姿にする補助輪の役目を担っているのです。

将来的には、イメージしたものがすぐに具現化できるようになるでしょう。それは「魔法」と言っても過言ではありません。生成AIの発展により、私たちはイメージの世界により近づいているのです。






## TODO

### 急ぎ

- [ ] https://x.com/ai_syacho/status/1782956863912649114

```
ModuleNotFoundError系は
pip install ~~~~
で解決されます。

今回は
pip install anthropic
を行うことで解決されます。

↓
pip install zoltraak
一発で依存関係全て入る様に調整します。
```

### CLIコマンド関連
- [ ] zoltraak -p "manim動画を作りたい"  これで要件定義書とプログラムが生成

  - 

### ドキュメント生成
- [ ] 出力されたPythonファイルと詳細設計書のドキュメントを欲しい。
  - pythonファイルからドキュメントを生成したい
    - 例: `Zoltraakgenerated/calc.py` のようにpythonファイルを指定すると、そのファイルに対応するマークダウンドキュメントを生成、更新できるようにする 
    - pythonファイルのdocstringやコメントからドキュメントを自動生成する
    - 生成されたドキュメントはマークダウン形式で出力する

### テスト
- [ ] テストファイルは別途作成し、必要なタイミングでgit pushなどによりテストが実行されるようにしたい。

### Issue管理
- [ ] issueを記述したい。

### ファイル管理
- [x] 繰り返し利用する場合は、MarkdownファイルとPythonファイルを自動的に紐付けたい。（変更がある場合のみ再コンパイル）

### 要件定義関連
- [ ] 読み上げ文章から要件定義書を生成するプログラムをあきらさんのプロジェクトで実装する。
  - 宣言型と手続き型はごちゃっと入れた方が良さそう
- [ ] ZoltraakAAA.md 〜したい で定義書を修正
- [ ] あると嬉しいのは要件定義を決める際のプロンプトドキュメント 
  - コンパイラファイルは選択したい
- [ ] プログラムから要件定義に戻すフローが必要。

### その他
- [ ] 各種高級言語の変な癖を解消するための中間ファイルを事前に用意しておくのがよい。
- [ ] このファイルで、色合いに相当する部分のプロンプトの行数を教えて
- [ ] 差分をプロンプトとして伝達したい。
- [ ] 全て１から作り直す。mdファイルから
![image](assets/images//graph.png)







## プロンプトの分類

プロンプトは以下の4つの分類に分けることができます。

|       | 抽象的 | 具体的 |
|-------|-------|--------|
| 曖昧 | ① 初期プロンプト<br>例）ほにゃらしたい | ③ 試行錯誤段階<br>対話型（インタプリタ）|
| 厳密 | ② 要件定義書<br>曖昧さが排除された状態 | ④ マニュアル化<br>ドキュメント型（コンパイル）|

- ①曖昧で抽象的：初期のプロンプトがこれに相当。「ほにゃらしたい」という曖昧な要求。
- ②厳密で抽象的：要件定義書など。プロンプトから定義書を作成することで曖昧さが排除され、抽象的な状態になる。 
- ③曖昧で具体的：具体的な行動は伴っているが、まだ試行錯誤している段階。対話型（インタプリタ）とも言える。
- ④厳密で具体的：1本の具体的な行動に落とし込まれており、マニュアル化（ドキュメント型、コンパイル）された状態。

つまり、プロンプトが「曖昧」な時は対話型、「厳密」な時はドキュメント型で使っていると言えます。
プロンプトの性質を理解することで、AIとの対話をより効果的に行うことができるでしょう。


## 全体の流れ

- ①曖昧で抽象的：初期のプロンプトがこれに相当。「ほにゃらしたい」という曖昧な要求。

shell
```
zoltraak "本書きたい"
```
↓

mdファイル
gen_def_{goal}.md

```
# ゴール: 本を書きたい
要件定義書:
{def}
```
↓

- ②厳密で抽象的：要件定義書など。プロンプトから定義書を作成することで曖昧さが排除され、抽象的な状態になる。 
def_{goal}.md
```
書籍執筆要件定義書:
import {def}
import {def}
import {def}

~~~~~~~
~~~~~~~
~~~~~~~
~~~~~~~
~~~~~~~
```
↓

- ③曖昧で具体的：具体的な行動は伴っているが、まだ試行錯誤している段階。対話型（インタプリタ）とも言える。
exe_{goal}.py
```
プログラム # コメント
プログラム # コメント
プログラム # コメント
プログラム # コメント
```
- ④厳密で具体的：1本の具体的な行動に落とし込まれており、マニュアル化（ドキュメント型、コンパイル）された状態。

exe_{goal}.md
```
詳細手順書（暗号化、抽象化、使い手がわかりやすい状態にする。[]

```

zoltraak book.md





-------------



## 数学表現について



行列
$$
A = \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{pmatrix}
$$

行列式は、行列の値を一つの数値で表したものです。例えば、$2 \times 2$行列$B$の行列式は以下のように計算されます。

$$
B = \begin{pmatrix}
2 & 3 \\
1 & 4
\end{pmatrix}
$$

$$
\det B = \begin{vmatrix}
2 & 3 \\
1 & 4
\end{vmatrix} = 2 \times 4 - 3 \times 1 = 5
$$

また、$3 \times 3$行列$C$の行列式は以下のように計算されます。

$$
C = \begin{pmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{pmatrix}
$$

$$
\det C = \begin{vmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{vmatrix} = 1 \times (5 \times 9 - 6 \times 8) - 2 \times (4 \times 9 - 6 \times 7) + 3 \times (4 \times 8 - 5 \times 7) = 0
$$



量子力学の基本的な数式の一つにシュレーディンガー方程式があります。この方程式は、量子系の状態の時間発展を記述します。一次元の場合の時間に依存しないシュレーディンガー方程式は以下のように表されます。

量子力学の問題を解いてみましょう。以下のシュレーディンガー方程式を考えます。

$$
- \frac{\hbar^2}{2m} \frac{d^2 \psi}{dx^2} + V(x) \psi = E \psi
$$

ここで、
- $\hbar$ はディラック定数（プランク定数を $2\pi$ で割ったもの）
- $m$ は粒子の質量
- $\psi$ は波動関数
- $V(x)$ はポテンシャルエネルギー
- $E$ は系の全エネルギー

この方程式を使って、無限深さのポテンシャル井戸内での粒子のエネルギー状態を求めます。ポテンシャル$V(x)$は以下のように与えられます。

$$
V(x) = \begin{cases} 
0 & \text{if } 0 \leq x \leq a \\
\infty & \text{otherwise}
\end{cases}
$$

境界条件$\psi(0) = \psi(a) = 0$を用いて、この問題を解いてみましょう。この条件下で、波動関数$\psi(x)$とエネルギー$E$を求めることが目標です。

この問題の解は、量子力学の基本的な理解を深めるのに役立ちます。


## 解答

シュレーディンガー方程式を解くために、以下の手順で進めます。

1. 境界条件を考慮して、波動関数の一般解を求める。
2. 境界条件から、エネルギー固有値を求める。
3. エネルギー固有値を用いて、規格化された波動関数を求める。

### 1. 波動関数の一般解

ポテンシャル内部（$0 \leq x \leq a$）では、シュレーディンガー方程式は以下のようになります。

$$
- \frac{\hbar^2}{2m} \frac{d^2 \psi}{dx^2} = E \psi
$$

この方程式の一般解は、以下のように表されます。

$$
\psi(x) = A \sin(kx) + B \cos(kx), \quad k = \sqrt{\frac{2mE}{\hbar^2}}
$$

ここで、$A$と$B$は定数です。

### 2. エネルギー固有値

境界条件$\psi(0) = \psi(a) = 0$を適用すると、以下の条件が得られます。

$$
B = 0, \quad \sin(ka) = 0
$$

したがって、$ka$は$\pi$の整数倍でなければなりません。

$$
ka = n\pi, \quad n = 1, 2, 3, \ldots
$$

これを$k$について解くと、エネルギー固有値が得られます。

$$
E_n = \frac{\hbar^2 \pi^2 n^2}{2ma^2}, \quad n = 1, 2, 3, \ldots
$$

### 3. 規格化された波動関数

エネルギー固有値を用いて、規格化された波動関数を求めます。

$$
\psi_n(x) = A_n \sin\left(\frac{n\pi x}{a}\right), \quad n = 1, 2, 3, \ldots
$$

規格化条件から、係数$A_n$を決定します。

$$
\int_0^a |\psi_n(x)|^2 dx = 1
$$

これを解くと、以下のようになります。

$$
A_n = \sqrt{\frac{2}{a}}
$$

したがって、規格化された波動関数は以下のように表されます。

$$
\psi_n(x) = \sqrt{\frac{2}{a}} \sin\left(\frac{n\pi x}{a}\right), \quad n = 1, 2, 3, \ldots
$$

以上が、無限深さのポテンシャル井戸内での粒子のエネルギー状態と波動関数の導出過程です。この結果は、量子力学の基本的な概念を理解する上で重要な役割を果たします。





### 1. 波動関数の一般解

$$
\begin{aligned}
- \frac{\hbar^2}{2m} \frac{d^2 \psi}{dx^2} &= E \psi \\
\psi(x) &= A \sin(kx) + B \cos(kx), \quad k = \sqrt{\frac{2mE}{\hbar^2}} \\
B &= 0, \quad \sin(ka) = 0 \\
ka &= n\pi, \quad n = 1, 2, 3, \ldots \\
E_n &= \frac{\hbar^2 \pi^2 n^2}{2ma^2}, \quad n = 1, 2, 3, \ldots \\
\psi_n(x) &= A_n \sin\left(\frac{n\pi x}{a}\right), \quad n = 1, 2, 3, \ldots \\
\int_0^a |\psi_n(x)|^2 dx &= 1 \\
A_n &= \sqrt{\frac{2}{a}} \\
\psi_n(x) &= \sqrt{\frac{2}{a}} \sin\left(\frac{n\pi x}{a}\right), \quad n = 1, 2, 3, \ldots
\end{aligned}
$$





無限深さのポテンシャル井戸内での粒子の量子力学的な振る舞いを理解するために、時間独立シュレディンガー方程式を用いて、粒子のエネルギー固有状態と波動関数を求めます。ポテンシャル$V(x)$は以下のように定義されます。

$$
V(x) = \begin{cases} 
0 & 0 \leq x \leq a の範囲内\\
\infty & それ以外の領域
\end{cases}
$$

境界条件$\psi(0) = \psi(a) = 0$を満たすように解を求めます。この条件下で、粒子の波動関数$\psi(x)$とエネルギー$E$を導出することが目標です。


$$
- \frac{\hbar^2}{2m} \frac{d^2 \psi}{dx^2} + V(x) \psi = E \psi
$$









### 自然言語プログラミングの系譜


```
*ChatGPT登場
    |→ プロンプトエンジニアリング
        *プロンプトのシステム開発適用の必要性
            |→ プロンプトプログラミング
                * Claude3 Opusの出現
                |→ ドキュメントプログラミング
                    |→ 自然言語プログラミング
                            motoki → arbor → zoltraak
                                        * Groq x Llama3の対話不可能な高速テキスト出力制御
                                                |→ 自然言語フレームワーク zoltraak
                                                |→ プログラミング統一言語 babel
                                                                        ↑ イマココ
```



### アップロードの仕方


PyPIにパッケージをアップロードする手順は以下の通りです。

1. パッケージの準備:
   - プロジェクトのディレクトリ構成を適切に設定します。
   - [setup.py](file:///Users/motokidaisuke/motoki/setup.py#1%2C1-1%2C1)ファイルを作成し、パッケージの情報（名前、バージョン、依存関係など）を記述します。
   - [README.md](file:///Users/motokidaisuke/motoki/README.md#1%2C1-1%2C1)ファイルを作成し、パッケージの説明や使用方法を記載します。

2. アカウントの作成とAPIトークンの取得:
   - PyPIのWebサイト（https://pypi.org/）にアクセスします。
   - 新しいアカウントを作成するか、既存のアカウントにログインします。
   - アカウントの設定ページで、APIトークンを生成します。

3. ビルドとアップロード用ツールのインストール:
   - `twine`と`setuptools`をインストールします。
     ```
     pip install twine setuptools
     ```

4. パッケージのビルド:
   - プロジェクトのルートディレクトリで以下のコマンドを実行し、パッケージをビルドします。
     ```
     python setup.py sdist bdist_wheel
     ```
   - これにより、`dist`ディレクトリにパッケージの配布用ファイルが生成されます。

5. PyPIへのアップロード:
   - 以下のコマンドを実行し、パッケージをPyPIにアップロードします。
     ```
     twine upload dist/*
     ```
   - ユーザー名とパスワードの代わりに、取得したAPIトークンを使用します。

6. アップロードの確認:
   - PyPIのWebサイトにアクセスし、アップロードしたパッケージが正しく表示されていることを確認します。

これで、`zoltraak`パッケージがPyPIに公開されました。ユーザーは`pip install zoltraak`コマンドを使用してパッケージをインストールできます。

注意点:
- パッケージ名は一意である必要があります。既に存在する名前は使用できません。
- バージョン番号は、新しいバージョンをアップロードするたびに増やす必要があります。
- `setup.py`ファイルには、適切なメタデータと依存関係を記述してください。
- `README.md`ファイルには、パッケージの説明や使用方法を明確に記載してください。

以上が、PyPIへのパッケージのアップロード手順です。問題がある場合は、PyPIのドキュメンテーションを参照するか、コミュニティに質問してください。




## 仮想環境を用いて実行

`pyenv` はPythonのバージョン管理ツールですが、直接的に仮想環境を作成する機能は持っていません。仮想環境を作成するためには、`pyenv-virtualenv` というプラグインを使用する必要があります。

以下は `pyenv-virtualenv` を使用して仮想環境を作成する手順です。

1. **pyenv-virtualenv のインストール**

   まずは `pyenv-virtualenv` プラグインをインストールします。これは `pyenv` が既にインストールされていることを前提としています。

   ```bash
   git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
   ```

   インストール後、シェルの設定ファイル (例えば `.bashrc` や `.zshrc`) に以下を追加して、シェルを再起動します。

   ```bash
   eval "$(pyenv init --path)"
   eval "$(pyenv virtualenv-init -)"
   ```

2. **Python のインストール**

   `pyenv` を使用して、仮想環境用の Python バージョンをインストールします。

   ```bash
   pyenv install 3.8.5  # 例として Python 3.8.5 をインストール
   ```

3. **仮想環境の作成**

   次に、指定した Python バージョンで仮想環境を作成します。

   ```bash
   pyenv virtualenv 3.8.5 my-virtual-env-3.8.5
   ```

   ここで `my-virtual-env-3.8.5` は仮想環境の名前です。

4. **仮想環境のアクティベーション**

   作成した仮想環境をアクティブにします。

   ```bash
   pyenv activate my-virtual-env-3.8.5
   ```

   これで、指定した仮想環境がアクティブになります。

5. **仮想環境のデアクティベーション**

   仮想環境をデアクティブにするには、以下のコマンドを使用します。

   ```bash
   pyenv deactivate
   ```

これで `pyenv` と `pyenv-virtualenv` を使用して Python の仮想環境を作成し、管理する方法を説明しました。


### howto

使い方
1 .env ファイルにANTHROPIC_API_KEY={Anthropicのキー}
2. pip install zoltraak
3. zoltraak "最新の大規模言語モデルが学べるポケモンゲームの様なシステムを作りたい"

これで、以下の様な要件定義書が出来ます。
叩き台なので、適宜修正してください。

-c 以降は用途に応じて変更できるプロンプトコンパイラになります。
コンパイラ名: dev_func
説明: 関数型プログラミングを用いた開発タスクに関する要件定義書を生成するコンパイラ

コンパイラ名: dev_obj
説明: オブジェクト指向設計を用いた開発タスクに関する要件定義書を生成するコンパイラ

コンパイラ名: biz_consult
説明: ビジネスコンサルティングに関するドキュメントを生成するコンパイラ

コンパイラ名: general_def
説明: 一般的な開発タスクに関する要件定義書を生成するコンパイラ

コンパイラ名: general_reqdef
説明: 一般的な要求事項に関する要件定義書を生成するコンパイラ

具体例
zoltraak "Manimを用いて、MoE（専門家の混合）モデルを視覚化するプログラムを開発する" -c dev_func
zoltraak "今月中にオブジェクト指向設計を用いて、多機能在庫管理システムを開発する" -c dev_obj
zoltraak "今月中に中小企業向けのビジネスコンサルティングドキュメントを作成する。具体的には、マーケティング戦略、財務管理、人材育成に関するアドバイスを含む" -c biz_consult
zoltraak "今月中に教育用の拡張現実（AR）アプリケーションを開発する" -c general_def
zoltraak "今月中に政府向けの少子化対策として、具体的な施策と予算案を含む提言書を執筆する" -c general_reqdef

dev_func
dev_obj
biz_consult
general_def
general_reqdef




## アーキ

- compiler: 抽象文書を具体文書に変換するコンパイラ
- archtecture: 
  - 文書を構造体として骨組みを作る実行体
  - 
- execute: 



```
アーキテクチャ (Architecture) とデザイン (Design) という言葉の原義から、その意図を読み解いてみましょう。

アーキテクチャ (Architecture):
- 語源はギリシャ語の "arkhitekton" で、"chief builder" (主要な建設者) を意味します。
- 建築の文脈では、建物の全体的な構造や様式を指します。
- ITの文脈では、システムの全体的な構造や設計原則を意味します。
- つまり、アーキテクチャは「全体を見渡し、大局的な設計を行う」という意図を持っています。

デザイン (Design):
- 語源はラテン語の "designare" で、"to mark out, devise, choose, designate, appoint" (印をつける、考案する、選ぶ、指定する、任命する) を意味します。
- 一般的に、機能性と美的感覚を兼ね備えた設計を指します。
- ITの文脈では、システムの詳細な設計や実装方法を意味します。
- つまり、デザインは「具体的な設計を行い、機能性と美的感覚を追求する」という意図を持っています。

これらの言葉の原義から、アーキテクチャは「大局的な視点」を、デザインは「詳細な視点」を重視していることがわかります。アーキテクチャは、システム全体の構造や設計原則を定義し、デザインはその原則に基づいて具体的な設計を行うという役割分担があると言えます。

また、アーキテクチャが "chief builder" を意味することから、アーキテクトは技術的なリーダーシップを発揮し、プロジェクトの方向性を示す役割を担っていることがわかります。一方、デザインは "to mark out, devise" を意味することから、デザイナーは創造性を発揮し、機能性と美的感覚を兼ね備えた設計を行う役割を担っていると言えます。

```






# サードパーティ定義書
- `Python開発者`= `{developer.dev_python}`
- `JavaScript開発者` = `{developer.dev_javascript}`
- `保険システムアーキテクト` = `{insurance_system_architect.architecture}`
- `デザイナー` = `{designer.design}`
- `保険ドメインエキスパート` = `{insurance_domain_expert.domain_knowledge}`
- `アクチュアリー` = `{actuary.risk_analysis}`
- `プロジェクトマネージャー` = `{project_manager.management}`
- `品質保証エンジニア` = `{qa_engineer.quality_assurance}`
- `セキュリティスペシャリスト` = `{security_specialist.security}`
- `電話応対ロボット` = `{phone_robot.customer_service}`
- `窓口応対ロボット` = `{counter_robot.customer_service}`

# 自作定義書
- `システム全体図` = `{insurance_system_architect.system_overview_diagram}`
- `ユースケース図` = `{insurance_domain_expert.usecase_diagram}` 
- `シーケンス図` = `{insurance_system_architect.sequence_diagram}`
- `ER図` = `{insurance_domain_expert.er_diagram}`
## 保険システム開発の仕様書

### 目的
本仕様書は、保険関係のシステム開発を行うにあたり、開発者、アーキテクト、デザイナー、ドメインエキスパート、アクチュアリー、プロジェクトマネージャー、品質保証エンジニア、セキュリティスペシャリスト、そしてカスタマーサービスロボットの役割と連携方法を明確にすることを目的とします。

### 成果物
- 業務要件定義書 (`保険ドメインエキスパート`・`アクチュアリー`)
- システム設計書 (`保険システムアーキテクト`) 
- ユーザーインターフェース設計書 (`デザイナー`)
- ソースコード (開発者)
  - `Python開発者`によるバックエンドシステム
  - `JavaScript開発者`によるフロントエンドシステム
- テスト仕様書・テスト結果報告書 (`品質保証エンジニア`) 
- 脆弱性診断報告書・セキュリティテスト結果報告書 (`セキュリティスペシャリスト`)
- プロジェクト計画書・進捗報告書 (`プロジェクトマネージャー`)
- カスタマーサービスロボット仕様書 (`電話応対ロボット`・`窓口応対ロボット`)
- ユーザーマニュアル (`デザイナー`・開発者)
- `システム全体図`
- `ユースケース図`
- `シーケンス図`
- `ER図`

### 開発体制
- 開発者 (Developer)
  - Pythonによる開発を担当: `Python開発者`
  - JavaScriptによる開発を担当: `JavaScript開発者` 
- アーキテクト (Architect): `保険システムアーキテクト`
  - システム全体のアーキテクチャ設計を担当
  - 技術的なリーダーシップを発揮し、プロジェクトの方向性を示す
- デザイナー (Designer): `デザイナー`
  - ユーザーインターフェースのデザインを担当 
  - 機能性と美的感覚を兼ね備えたデザインを追求する
- 保険ドメインエキスパート: `保険ドメインエキスパート`
  - 保険業務に関する専門知識を提供
  - 業務要件の定義と確認を行う
- アクチュアリー: `アクチュアリー`  
  - 保険商品の設計と料率計算を担当
  - リスク分析とモデリングを行う
- プロジェクトマネージャー: `プロジェクトマネージャー`
  - プロジェクト全体の管理と調整を行う
  - スケジュール、コスト、品質、リスクを管理する
- 品質保証エンジニア: `品質保証エンジニア` 
  - テスト計画の作成とテストの実施を担当
  - 品質基準の設定と品質管理を行う  
- セキュリティスペシャリスト: `セキュリティスペシャリスト`
  - セキュリティ要件の定義とセキュリティ設計を担当
  - 脆弱性診断とセキュリティテストを実施する
- カスタマーサービスロボット:
  - 電話応対: `電話応対ロボット`
  - 窓口応対: `窓口応対ロボット`

### 開発プロセス 
1. `保険ドメインエキスパート`と`アクチュアリー`が業務要件を定義する
   - 保険商品の仕様と料率体系を決定する
2. `保険システムアーキテクト`がシステム全体のアーキテクチャを設計する
   - 設計原則を定義し、全体的な構造を決定する 
   - `セキュリティスペシャリスト`と協力し、セキュリティ要件を組み込む
3. `デザイナー`がユーザーインターフェースのデザインを行う
   - `保険システムアーキテクト`の設計原則に基づき、具体的なデザインを作成する
4. 開発者が`保険システムアーキテクト`の設計と`デザイナー`のデザインに基づいて開発を行う
   - `Python開発者`は主にバックエンドの開発を担当
   - `JavaScript開発者`はフロントエンドの開発を担当
5. `品質保証エンジニア`がテスト計画を作成し、テストを実施する
   - 単体テスト、結合テスト、システムテストを網羅的に行う
6. `セキュリティスペシャリスト`が脆弱性診断とセキュリティテストを実施する
   - 潜在的なセキュリティリスクを特定し、対策を講じる
7. `プロジェクトマネージャー`が各工程の進捗を管理し、問題があれば適宜調整する
   - スケジュール、コスト、品質、リスクを常にモニタリングする
8. `電話応対ロボット`と`窓口応対ロボット`の動作を確認する
   - カスタマーサービスの自動化部分をテストし、チューニングする
9. 各工程で密な連携を取り、フィードバックを行う 
   - 定期的なミーティングを開催し、進捗状況の共有と課題の解決を図る


### 留意事項
- 各工程でのコミュニケーションを密に取り、認識齟齬がないようにする
- `保険ドメインエキスパート`と`アクチュアリー`の知見を活かし、業務要件を正しく理解する
- `セキュリティスペシャリスト`の助言を得て、セキュリティとパフォーマンスに十分配慮し、堅牢で効率的なシステムを構築する
- 変化する要件に柔軟に対応できるよう、保守性の高いコードを書く
- `電話応対ロボット`と`窓口応対ロボット`の自然な対話を実現し、顧客満足度を高める
