fgi_mod!{
type Seq = (
rec Seq.
foralli (X,Y): NmSet.
forallt T:type.
(+ T[X][Y]
+ (exists (X1,X2,X3) :NmSet | (X1%X2%X3=X).
exists (Y1,Y2,Y3,Y4):NmSet | (Y1%Y2%Y3%Y4=Y).
x Nm[X1] x Nat x Ref[Y1](Seq[X2][Y2])
x Ref[Y3](Seq[X3][Y4]))
)
);
idxtm bin = #x:Nm.{x,@1} % {x,@2};
idxtm max = #X:NmSet.(bin X);
idxtm map = #X:NmSet.(bin X);
idxtm filter = #X:NmSet.(bin X);
fn is_empty:(
Thk[0] foralli (X,Y):NmSet. forallt T:type.
0 (Seq[X][Y] T) ->
{ 0; Y }
F Bool
) = {
unimplemented
}
fn is_empty_shallow:(
Thk[0] foralli (X,Y):NmSet. forallt T:type.
0 (Seq[X][Y] T) ->
{ 0; 0 }
F Bool
) = {
unimplemented
}
fn is_singleton:(
Thk[0] foralli (X,Y):NmSet. forallt T:type.
0 (Seq[X][Y] T) ->
{ 0; 0 }
0 F Bool
) = {
unimplemented
}
fn monoid:(
Thk[0] foralli (X,Y):NmSet.
forallt (T,S):type.
0 (Seq[X][Y] T) ->
0 (Thk[0] 0 T -> 0 F S) ->
0 (Thk[0] 0 S -> 0 S -> 0 F S) ->
{bin X; Y}
0 F S
) = {
unimplemented
}
}