Z3
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.
Installation
Section intitulée « Installation »npm i -D @genaiscript/plugin-z3pnpm add -D @genaiscript/plugin-z3yarn add -D @genaiscript/plugin-z3Si 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();Instance Z3
Section intitulée « Instance Z3 »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); // unsatOutil Z3
Section intitulée « Outil Z3 »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.
Agent Z3
Section intitulée « Agent Z3 »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.`;