For detailed documentation, see chapter 8 in [Luo, 1994].
** Module lib_adt_basics Imports lib_sigma lib_setoid STR = ... : Type $SPEC : Type(SPEC) $make_SPEC : {Str:STR}(Str->Prop)->SPEC $SPEC_elim : {C_SPEC:SPEC->Type} ({Str:STR}{Ax:Str->Prop}C_SPEC (make_SPEC Str Ax))->{z:SPEC}C_SPEC z [[C_SPEC:SPEC->Type] [f_make_SPEC:{Str:STR}{Ax:Str->Prop}C_SPEC (make_SPEC Str Ax)][Str:STR] [Ax:Str->Prop] SPEC_elim C_SPEC f_make_SPEC (make_SPEC Str Ax) ==> f_make_SPEC Str Ax] Str = ... : SPEC->STR Ax = ... : {z:SPEC}(Str z)->Prop Spec = ... : STR->Type Model = ... : SPEC->Type(sigma) Consistent = ... : SPEC->Prop Impl = ... : {S|STR}(Spec S)->(Spec S)->Prop Sat = ... : {SP,SP'|SPEC}((Str SP')->Str SP)->Prop $IMPL1 : SPEC->SPEC->Type(IMPL1) $make_IMPL1 : {SP,SP'|SPEC}{refn:(Str SP')->Str SP}(Sat refn)->IMPL1|SP|SP' $IMPL1_elim : {SP,SP'|SPEC}{C_IMPL1:(IMPL1|SP|SP')->Type} ({refn:(Str SP')->Str SP}{sat:Sat refn} C_IMPL1 (make_IMPL1 refn sat))->{z:IMPL1|SP|SP'}C_IMPL1 z [[SP,SP'|SPEC][C_IMPL1:(IMPL1|SP|SP')->Type] [f_make_IMPL1:{refn:(Str SP')->Str SP}{sat:Sat refn} C_IMPL1 (make_IMPL1 refn sat)][refn:(Str SP')->Str SP][sat:Sat refn] IMPL1_elim C_IMPL1 f_make_IMPL1 (make_IMPL1 refn sat) ==> f_make_IMPL1 refn sat] refn = ... : {SP,SP'|SPEC}(IMPL1|SP|SP')->(Str SP')->Str SP sat = ... : {SP,SP'|SPEC}{z:IMPL1|SP|SP'}Sat (refn z) IMPL = ... : SPEC->SPEC->Type(IMPL1) Extend = ... : {SP:SPEC}{ext_str:(Str SP)->STR} [S'=Sigma (Str SP) ([s:Str SP]ext_str s)](S'->Prop)->SPEC Extend_AxOnly = ... : {SP:SPEC}((Str SP)->Prop)->SPEC Join = ... : {S|STR}(Spec S)->(Spec S)->SPEC Cross = ... : SPEC->SPEC->SPEC SigmaCirc = ... : {SP:SPEC}((Str SP)->SPEC)->SPEC Pi = ... : {SP:SPEC}((Str SP)->SPEC)->SPEC Con = ... : {S,S'|STR}(S'->S)->(Spec S')->Spec S Sel = ... : {S,S'|STR}(S'->S)->(Spec S)->Spec S' Abs = ... : {S|STR}(S->S->Prop)->(Spec S)->Spec S Hide = ... : {S|STR}{SP:SPEC}((Str SP)->S)->SPEC
An example of the the abstract datatype of stacks, with axiomatisation, proofs of congruence properties, and implementation as an array are also included.