import lexer_example
@with_lexer(foo_lexer)
grammar foo_grammar {
    @main_rule main_rule <- Example("example")

}

@abstract class FooNode : Node {
    v : LogicVar
}

@abstract class SomeNode : FooNode {

    @abstract fun test_prop (): Bool
}

class Example : SomeNode {

    fun test_prop (): Bool = true

    @export fun solve (): Bool = (%domain(node.v, [null])) and (
        %predicate(BareSomeNode.test_prop, node.v)
    ).solve()
}
