Aller au contenu
A small, 8-bit style computer chip labeled as Z3 is centrally positioned, with fine lines linking it to three simple shapes: a circle containing a checkmark to suggest problem solving, a square featuring an inequality sign to indicate logical constraints, and a triangle with tiny gears inside to represent verifying programs. The image uses only blue, gray, black, white, and green, appears flat and geometric with a professional, minimalistic look, and has no background or human figures.

Z3

AI generated translation.

Z3 est un prouveur de théorèmes haute performance développé par Microsoft Research. C’est un outil intégré de GenAIScript. Z3 est utilisé pour résoudre des formules logiques et peut être employé pour diverses applications, notamment la vérification de programmes, la résolution de contraintes et l’exécution symbolique.

GenAIScript utilise le paquet npm z3-solver basé sur WebAssembly pour exécuter Z3.

Terminal window
npm i -D @genaiscript/plugin-z3

Si vous utilisez le plugin dans un environnement Node.JS, sans fichier d’entrée .genai..., vous devrez initialiser le runtime avant d’utiliser le plugin :

import { initialize } from "@genaiscript/runtime";
await initialize();

La méthode z3() crée une nouvelle instance de Z3. L’instance peut être utilisée pour exécuter des commandes Z3 et obtenir les résultats. L’instance z3 est un wrapper autour du package npm z3-solver. L’instance z3 possède la méthode run qui exécute la formule SMTLIB2 fournie et retourne le résultat.

import { z3 } from "@genaiscript/plugin-z3";
const z3 = await z3();
const res = await z3.run(`
(declare-const a Int)
(declare-fun f (Int Bool) Int)
(assert (< a 10))
(assert (< (f a true) 100))
(check-sat)
`);
console.log(res); // unsat

Le plugin d’outil z3 enveloppe Z3 en tant qu’outil LLM pouvant être utilisé dans GenAIScript. L’outil prend une formule SMTLIB2 en entrée et retourne la sortie de Z3.

import z3 from "@genaiscript/plugin-z3"
z3(env)
$`Solve the following problems using Z3:
(declare-const a Int)
(declare-fun f (Int Bool) Int)
(assert (< a 10))
(assert (< (f a true) 100))
(check-sat)

L’outil ne peut pas gérer des problèmes arbitraires, ce qui nous amène à l’agent.

Le script de l’agent z3 (dans system.agent-z3) encapsule l’outil z3 avec un LLM capable de (tenter de) formaliser des problèmes arbitraires en SMTLIB2.

script({
tools: ["agent_z3"],
});
$`Solve the following problems using Z3:
Imagine we have a number called 'a' that is smaller than 10.
We also have a special machine called 'f' that takes a number and a 'true'/'false' answer,
and it gives back another number.
When we put the number 'a' and the answer “true” into this machine,
the number it gives us is smaller than 100.`;