from ..fodot.theory import Theory
from ..fodot.structure import GlobModel, Structure, Model
from typing import Self
from ._pure import *

class Z3GlobModelIterator:
    def __iter__(self) -> Self: ...
    def __next__(self) -> GlobModel: ...

class Z3ModelIterator:
    def __iter__(self) -> Self: ...
    def __next__(self) -> Model: ...
    def enable_skip_infinite(self) -> Self: ...
    def disable_skip_infinite(self) -> Self: ...
    def skip_infinite(self, skip: bool) -> Self: ...

class Z3Solver:
    def __init__(self, theory: Theory): ...
    def theory(self) -> Theory: ...
    def check(self) -> SatResult: ...
    def get_model(self) -> GlobModel | None: ...
    def propagate(self) -> Structure | None: ...
    def iter_glob_models(self) -> Z3GlobModelIterator: ...
    def iter_models(self) -> Z3ModelIterator: ...
