module injections fun injA [t] (r:t->t) { no disj x,y: t | x.r = y.r && some x.r } fun injB [t] (r:t->t) { all x: t | #x.~r =< 1 } assert same [t] { all r: t->t | injA (r) iff injB (r) } check same for 2