3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-05-17 15:39:27 +00:00

Add Z3_mk_polymorphic_datatype to Python, .NET, Go, and TypeScript bindings (#9181)

* Add Z3_mk_polymorphic_datatype to Python, .NET, Go, and TypeScript bindings

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/13ef481d-61f5-47e1-8659-59cd91692fdd

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Improve Python error message for polymorphic datatype self-reference check

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/13ef481d-61f5-47e1-8659-59cd91692fdd

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
Copilot 2026-03-31 14:15:34 -07:00 committed by GitHub
parent 56eeb5b52c
commit 56a8259717
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 292 additions and 0 deletions

View file

@ -562,6 +562,63 @@ namespace Microsoft.Z3
}
}
/// <summary>
/// Create a type variable sort for use as a parameter in polymorphic datatypes.
/// </summary>
/// <param name="name">name of the type variable</param>
public Sort MkTypeVariable(Symbol name)
{
Debug.Assert(name != null);
CheckContextMatch(name);
return new Sort(this, Native.Z3_mk_type_variable(nCtx, name.NativeObject));
}
/// <summary>
/// Create a type variable sort for use as a parameter in polymorphic datatypes.
/// </summary>
/// <param name="name">name of the type variable</param>
public Sort MkTypeVariable(string name)
{
using var symbol = MkSymbol(name);
return MkTypeVariable(symbol);
}
/// <summary>
/// Create a polymorphic datatype sort with explicit type parameters.
/// Type parameters should be sorts created with <see cref="MkTypeVariable"/>.
/// </summary>
/// <param name="name">name of the datatype sort</param>
/// <param name="typeParams">array of type variable sorts</param>
/// <param name="constructors">array of constructors</param>
public DatatypeSort MkPolymorphicDatatypeSort(Symbol name, Sort[] typeParams, Constructor[] constructors)
{
Debug.Assert(name != null);
Debug.Assert(typeParams != null);
Debug.Assert(constructors != null);
Debug.Assert(constructors.All(c => c != null));
CheckContextMatch(name);
CheckContextMatch<Sort>(typeParams);
CheckContextMatch<Constructor>(constructors);
return new DatatypeSort(this,
Native.Z3_mk_polymorphic_datatype(nCtx, name.NativeObject,
(uint)typeParams.Length, AST.ArrayToNative(typeParams),
(uint)constructors.Length, Z3Object.ArrayToNative(constructors)));
}
/// <summary>
/// Create a polymorphic datatype sort with explicit type parameters.
/// Type parameters should be sorts created with <see cref="MkTypeVariable"/>.
/// </summary>
/// <param name="name">name of the datatype sort</param>
/// <param name="typeParams">array of type variable sorts</param>
/// <param name="constructors">array of constructors</param>
public DatatypeSort MkPolymorphicDatatypeSort(string name, Sort[] typeParams, Constructor[] constructors)
{
using var symbol = MkSymbol(name);
return MkPolymorphicDatatypeSort(symbol, typeParams, constructors);
}
/// <summary>
/// Update a datatype field at expression t with value v.
/// The function performs a record update at t. The field