Skip to content

Commit 316c0e5

Browse files
author
Allan Wirth
committed
Add support for DatatypeSort
1 parent 27d50b6 commit 316c0e5

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

cvc5_pythonic_api/cvc5_pythonic.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8688,6 +8688,14 @@ def CreateDatatypes(*ds):
86888688
result.append(dref)
86898689
return tuple(result)
86908690

8691+
class DatatypeSort:
8692+
"""Unresolved datatype sorts."""
8693+
8694+
def __init__(self, name, ctx=None):
8695+
self.name = name
8696+
self.ctx = _get_ctx(ctx)
8697+
self.ast = self.ctx.tm.mkUnresolvedDatatypeSort(name)
8698+
86918699

86928700
class DatatypeSortRef(SortRef):
86938701
"""Datatype sorts."""

test/pgm_outputs/example_datatypes.py.out

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ t is a 'cons': True
1313

1414
[a = 51]
1515
proved
16+
17+
Sorts match: True
18+
Operation on resolved sort works: True

test/pgms/example_datatypes.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,18 @@
4242
solve(List.head(List.cons(a, List.nil)) > 50)
4343

4444
prove(Not(List.is_nil(List.cons(a, List.nil))))
45+
46+
print()
47+
48+
# Test DatatypeSort for unresolved datatype sorts.
49+
SomeType = Datatype('SomeType')
50+
SomeTypeSort = DatatypeSort('SomeType')
51+
SomeType.declare('nil')
52+
SomeType.declare('some', ('someof', SeqSort(SomeTypeSort), ))
53+
SomeTypeSort = SomeType.create()
54+
55+
nil = SomeTypeSort.nil
56+
some = SomeTypeSort.some(Unit(nil))
57+
58+
print("Sorts match:", SomeTypeSort == SomeTypeSort.someof(some)[0].sort())
59+
print("Operation on resolved sort works:", simplify(SomeTypeSort.is_nil(SomeTypeSort.someof(some)[0])))

0 commit comments

Comments
 (0)