class Z3::SeqExpr

Z3 has no String sort of its own - a String is a Seq(Char), and ‘str.++` is the same operation as `seq.++`. The Exprs still don’t share a hierarchy, because the Ruby side of them doesn’t: a SeqExpr should read like a Ruby Array and a StringExpr like a Ruby String, and those two have no common ancestor either. Where a seq and a string operation really are one Z3 operation, they share the LowLevel call, not a superclass.

That split is what settles the element-versus-subsequence question. Every Z3 seq operation takes a subsequence, but Ruby’s Array#include? / index take an element, and Ruby wins - as it does everywhere the two disagree: a bare element is wrapped into a one element sequence, while a SeqExpr of this very sort or a Ruby Array is taken as the subsequence it already is.