ユニット 4 / 11

シンボリック計算: SymPy による人工知能の制御

利益:

  • SymPy のコア機能 (単純化、因数分解、方程式解法、導関数、積分、極限) を認識し、それを使用して AI 出力を検証する機能
  • SymPy コードを人工知能に出力し、コード自体を実行することで、決定論的で正確な結果を取得する機能。人工知能によってコード出力が予測されることは検証ではないことを理解する
  • 人工知能の結果が SymPy の出力と一致しない場合、SymPy をベースとしてエラーを特定し、ドメインなどの微妙な部分を手動で追加する機能。

このモジュールの最も実用的で強力なツールは、この単元にあります。それは、シンボリック計算とその Python ライブラリ SymPy です。記号微積分とは、数値ではなく記号 (x、y などの変数) を使用して正確な数学を行うことです。つまり、正確な式で積分を計算し、文字を使用して方程式を解き、式を単純化します。 SymPy は、これを行うオープンソースで無料の決定論的な Python ライブラリです。つまり、同じ入力に対して常に同じ正確な結果が得られます。これにより、AI 出力の検証に最適になります。AI はスピードと洞察を提供し、SymPy は精度を提供します。

この単元の中心的なアイデアは、AI に計算を行わせ、その結果を SymPy に検証させるというものです。さらに良いのは、AI に SymPy コードを作成させ、コードを実行して最終結果を得るということです。つまり、SymPyの決定論によってAIの幻覚リスクを排除するのです。

もう 1 つの定義: CAS (Computer Algebra System) は、記号数学を実行するソフトウェアに与えられた一般名です。 SymPy は CAS です。商用の例としては Mathematica や Maple がありますが、SymPy は Python で実行されるため無料でアクセス可能です。

SymPy のコア機能

SymPy は次のことを正確に実行します。

  • 単純化: simplify(expression) は、式を最も単純な形式に縮小します。
  • 因数分解 / 展開:factor() および Expand()。
  • 方程式を解く:solve(equation, x) は方程式の正確な根を求めます。
  • 導関数: diff(expr, x)。
  • 積分:integrate(expr, x) (不定) またはintegrate(expr, (x, a, b)) (定)。
  • 制限: 制限(式、x、ドット)。
  • シリーズは、series(expression, x, 0, n) の略です。
  • 行列演算、連立方程式、微分方程式など。

ステップバイステップ: AI + SymPy 検証ワークフロー

1. AIに問題を解決してもらいます。段階的な解決策と最終結果を取得します。

2. AI に同じ問題の SymPy コードを作成させます。 「この結果を SymPy で検証するコードを書いてください」と言います。

3. コードを自分で実行します。 AI にコードの出力を「予測」させないでください。それは幻覚です。実際の Python 環境でコードを実行します。

4. 2 つの結果を比較します。 AI によって手動で検出された結果と SymPy の出力が同じであれば、信頼性は高まります。異なる場合、障害は AI にあります (SymPy を信頼してください)。

5. 違いがある場合は、エラーを見つけます。 AI に「SymPy はこれを与えました。あなたの結果は異なります。間違いを見つけてください。」と伝えます。

注意: AI からコードを取得して、「このコードは何を生成しますか?」と尋ねると、 AI に質問することは検証ではありません。AI はコード出力を作成することもできるためです。コードは必ず実際の Python 環境 (ローカル インストール、Jupyter、またはオンライン Python ランナー) で実行してください。SymPy の能力は、実行時に明らかになります。

AIマニュアルソリューションなど SymPy — 比較

特徴

AIマニュアルソリューション

シンピー

速度

とても速い

速い

精度

保証なし(幻覚)

決定的な、確かな

手順を説明する

良い

弱い(結果重視)

直感・戦略

良い

なし

検証の資格

いいえ

はい

最適な組み合わせ: 説明と戦略には AI、精度には SymPy。

ミニケース3個

ケース 1 — 積分不一致。生徒がAI ∫ x/(x²+1) dx と質問しました。 YZ は、(1/2)・ln(x²+1) + C を与えました。学生は、integrate(x/(x**2+1), x); を実行しました。 SymPy は log(x**2 + 1)/2 を返しました。彼らは同じでした、つまり完全な信頼でした。次に、微分制御も diff で実行されました。 x/(x²+1) に戻ります。トリプル確認、3分。

ケース 2 — 単純化エラー。教師は AI に式 (x²−1)/(x−1) を簡略化させました。 YZ は x+1 と言いました (正しいですが、条件 x≠1 が省略されています)。 SymPy simplify((x**2-1)/(x-1)) も x+1 を与えましたが、教師が手動でドメイン制約 (x=1 では未定義) を追加しました。教訓: SymPy ですら、ドメインの細かさを重視しないことがあります。人間が数学的なコンテキストを追加します。

ケース 3 — 方程式系。あるエンジニアは AI に 3 つの未知数を含む連立一次方程式を解かせましたが、1 つの変数で間違いを犯しました。 SymPy とsolve([equations], [x, y, z]) は正確な解を与えました。 AI の Z 値が間違っていました。エンジニアは SymPy の結果を受け取り、AI にバグ、つまり符号エラーを発見させました。 4分で解決しました。

コピー可能な 4 つのテンプレート

1) YZ から SymPy 検証コードをリクエストします。

次の問題を解決しました: [問題]、結果は [結果] です。次に、この結果を検証する SymPy 実行可能コードを作成します。コードでシンボルを定義し、結果を計算して出力します。コードの出力を推測しないでください。実行させていただきます。

2) SymPy を使用したゼロからのソリューション:

SymPy を使用して次の問題を解決する Python コードを作成します: [問題]。必要なインポート、シンボル定義、および印刷を追加します。コードが生成するものを記述します。コードを教えていただければ実行させていただきます。コードの各行に短いコメントを追加します。

3) SymPy 出力を使用して AI を修正します。

[結果] と言いましたが、SymPy は次のように示しました: [SymPy 出力]。両者は異なります。 SymPy は決定論的であるため、それが正しいものとして受け入れてください。解決策のどのステップを間違えたかを見つけて、それを示します。

4) 導関数/積分クロスチェック コード:

次の積分を取得しました: ∫ [f(x)] dx = [F(x)]。これを検証するには、F(x) の DERIVATIVE を取得し、それが f(x) と等しいかどうかをチェックするコードを SymPy で記述します (simplify(diff(F)-f) == 0 のロジックを使用)。コードを与えるだけです。

弱いプロンプト / 強いプロンプト

弱者: 「∫ sin²(x) dx とは何ですか? SymPy でも確認して出力を書いてください。」
結果: AI は答えと「SymPy 出力」の両方に適合します。どちらも一貫しているように見えますが、どちらも確認されていません。偽りの自信。
Strong: 「∫ sin²(x) dx (import、symbol、integrate、print) の実行可能な SymPy コードを書きます。出力は書きません。私が実行して確認します。また、結果を微分して sin²(x) に返すことをチェックする行を追加します。」
結果: コードを実行すると、SymPy の正確な出力が表示されます。検証が現実になる。

よくある間違い

  • AI にコード出力を予測させます。これは検証ではありません。 AI は出力に適合することもできます。コードを実行します。
  • SymPy の結果を読まずに受け入れる。 SymPy の出力形式は時々特殊です (例: log = 自然対数)。解釈の仕方を知る。
  • ドメインを忘れてしまいます。 SymPy の単純化では、x≠1 などの制約が常に強調されるわけではありません。人間がコンテキストを追加します。
  • シンボル定義が正しくありません。 x =Symbols('x') を忘れると、コードは機能しません。仮定 (正、実数) は結果 (シンボル('x'、正=True)) に影響します。
  • 輸入品が不足している。 sympy import * や必要な関数からインポートするのを忘れるのはよくある間違いです。
ヒント: SymPy で等価性の正しさをチェックするには、式 simplify(left_side - right_side) == 0 が非常に便利です。差がゼロに単純化される場合、2 つの式は同一です。これは、AI によって生成された同一性または単純化を検証する最もクリーンな方法です。

SymPy の仮定: 同じ式、異なる結果

SymPy の微妙だが重要な機能は、その仮定システムです。シンボルを定義するときは、シンボルにプロパティを指定できます。symbols('x',positive=True) は x が正であることを示し、real=True は x が実数であることを示します。これらの仮定によって結果が変わる可能性があります。たとえば、x に関する仮定がない場合、式 √(x²) は sqrt(x**2) のままです (SymPy は x が負の値になる可能性があることを考慮しており、それが |x| でなければならないと認識しているため)。ただし、x が正であると定義されている場合、結果はそのまま x になります。これはエラーではなく、数学的厳密さです。√(x²) = |x| であり、x = x ではありません。

AI は、SymPy コードを生成するときにこれらの前提を省略したり、誤って仮定したりすることがよくあります。その結果、AI が生成するコードは、ユーザーが「期待する」単純化を行わない可能性があります。これは実際に、SymPy がより正確に動作することを意味します。したがって、単純化が「機能しない」と思われる場合は、まず問題の実際の数学的条件 (x は正か? 実数か? ゼロ以外か?) を検討し、それらの仮定をコードに追加します。仮定を正しく行うと、SymPy が正しい結果を返すことが保証されるだけでなく、数学的精度の一部である問題の領域について考える必要が生じます。

注意: SymPy が式を「単純化」できないのは、多くの場合欠点ではなく、数学的厳密性の問題です。必要な前提 (実証性、現実性) が与えられていないため、SymPy は最も一般的で最も安全な結果を保持します。期待した単純化が見られない場合は、まずシンボルの前提条件を確認してください。

要約すれば

SymPy は、AI の数学的出力を検証するための理想的な決定論的ツールです。最も強力なワークフロー: 戦略と説明は AI に、精度は SymPy に。 AI に SymPy コードを要求しますが、必ず出力を自分で実行してください。AI にコード出力が検証ではないと推測させることになります。結果が一致しない場合は、SymPy を信頼し、AI にエラーを見つけてもらいます。 identity は simplify(difference) == 0 で、積分は diff でクロスチェックします。

アプリケーションタスク

積分、方程式の解、および式の単純化 (3 つの別々の問題) を選択します。それぞれについて、AI に手動でソリューションを作成させ、次に SymPy コードを作成させます。実際の Python 環境 (ローカル インストールまたはオンライン ランナー) でコードを実行します。 SymPy の出力を AI の手動結果と比較します。少なくとも 1 つの矛盾を見つけてください。見つけたらAIに間違いを見つけてもらいましょう。プロセスに注目してください。

チェックリスト

  • [ ] 各問題に対する AI ソリューションと SymPy コードの両方を受け取りました。
  • [ ] 実際の Python 環境で SymPy コードを実行しました。
  • [ ] YZ の手動結果と SymPy の出力を比較しました。
  • [ ] SymPyで微分・積分の逆関数をクロスチェックしてみました。
  • [ ] ドメインと仮定 (正/実) を手動で追加しました。
  • [ ] 論争では、SymPy に頼って AI に間違いを見つけてもらいました。