:: {N:n, n:n?, B:b, b:b?, s:s, ss:s*, o:o, g:g, X:n, Y:n, Z:n}

"ABCD"   has "B"
"ABCD"  !has "B"
"ABCD"  ~has "B"
"ABCD" !~has "B"

"AbCD"   has "B"
"AbCD"  !has "B"
"AbCD"  ~has "B"
"AbCD" !~has "B"

"A CD"   has "B"
"A CD"  !has "B"
"A CD"  ~has "B"
"A CD" !~has "B"

null   has "B"
null  !has "B"
null  ~has "B"
null !~has "B"

"ABCD"   has ""
"ABCD"  !has ""
"ABCD"  ~has ""
"ABCD" !~has ""

"ABCD"   has null
"ABCD"  !has null
"ABCD"  ~has null
"ABCD" !~has null

""   has "B"
""  !has "B"
""  ~has "B"
"" !~has "B"

null   has "B"
null  !has "B"
null  ~has "B"
null !~has "B"

""   has ""
""  !has ""
""  ~has ""
"" !~has ""

null   has ""
null  !has ""
null  ~has ""
null !~has ""

""   has null
""  !has null
""  ~has null
"" !~has null

null   has null
null  !has null
null  ~has null
null !~has null

s   has "B"
s  !has "B"
s  ~has "B"
s !~has "B"

s   has ""
s  !has ""
s  ~has ""
s !~has ""

s   has null
s  !has null
s  ~has null
s !~has null

"B"   has s
"B"  !has s
"B"  ~has s
"B" !~has s

""   has s
""  !has s
""  ~has s
"" !~has s

null   has s
null  !has s
null  ~has s
null !~has s

"hello" & " world" has s
s has "hello" & " world"

"ABC" ! has "B"
"ABC" ~ has "b"
"ABC" ! ~has "b"
"ABC" !~ has "b"
"ABC" ! ~ has "b"

null not has null
null not~has null
null not ~has null
"ABCD" not has null
"ABCD" not~has null
"ABCD" not ~has null
null not has "B"
null not~has "B"
null not ~has "B"
"" not has null
"" not~has null
"" not ~has null
null not has ""
null not~has ""
null not ~has ""
"ABC" not has "b"
"ABC" not ~has "b"
"ABC" not~has "b"
s not has "B"
s not~has "B"
s not ~has "B"

// *** Lifting
:: {s:s*, ss:s**}

s has "B"
s has ""
s has null
s has s

"B" has s
"" has s
null has s

ss has "B"
ss has ""
ss has null
ss has s
