kdrag.datatype.datatype_match_
- kdrag.datatype.datatype_match_(x, *cases, default=None)
Pattern matching for datatypes.
>>> import kdrag.theories.nat as nat >>> x = smt.Const("x", nat.Nat) >>> x.match_((nat.S(x), nat.S(x)), (nat.one, nat.one), default=x) If(is(S, x), S(pred(x)), If(And(is(S, x), is(Z, pred(x))), S(Z), x))
>>> import kdrag.theories.list as list_ >>> IntList = list_.List(smt.IntSort()) >>> l = smt.Const("l", IntList) >>> x,y,z = smt.Ints("x y z") >>> l.match_((IntList.Nil, 0), (IntList.Cons(x, l), 1 + x)) If(is(Nil, l), 0, If(is(Cons, l), 1 + head(l), unreachable!...))