Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions cvc5_pythonic_api/cvc5_pythonic.py
Original file line number Diff line number Diff line change
Expand Up @@ -8688,6 +8688,14 @@ def CreateDatatypes(*ds):
result.append(dref)
return tuple(result)

class DatatypeSort:
"""Unresolved datatype sorts."""

def __init__(self, name, ctx=None):
self.name = name
self.ctx = _get_ctx(ctx)
self.ast = self.ctx.tm.mkUnresolvedDatatypeSort(name)


class DatatypeSortRef(SortRef):
"""Datatype sorts."""
Expand Down
3 changes: 3 additions & 0 deletions test/pgm_outputs/example_datatypes.py.out
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ t is a 'cons': True

[a = 51]
proved

Sorts match: True
Operation on resolved sort works: True
15 changes: 15 additions & 0 deletions test/pgms/example_datatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,18 @@
solve(List.head(List.cons(a, List.nil)) > 50)

prove(Not(List.is_nil(List.cons(a, List.nil))))

print()

# Test DatatypeSort for unresolved datatype sorts.
SomeType = Datatype('SomeType')
SomeTypeSort = DatatypeSort('SomeType')
SomeType.declare('nil')
SomeType.declare('some', ('someof', SeqSort(SomeTypeSort), ))
SomeTypeSort = SomeType.create()

nil = SomeTypeSort.nil
some = SomeTypeSort.some(Unit(nil))

print("Sorts match:", SomeTypeSort == SomeTypeSort.someof(some)[0].sort())
print("Operation on resolved sort works:", simplify(SomeTypeSort.is_nil(SomeTypeSort.someof(some)[0])))