/////////////////////////////////////////////////////////////////////////////// // generate axioms of the kind "forall x:U. {Int2U(U2Int(x))} Int2U(U2Int(x))==x" // (this makes use of the assumption that only well-typed terms are generated // by the SMT-solver, i.e., that U2Int is only applied to terms that actually // are of type int) protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) { //Contract.Requires(castFromU != null); //Contract.Requires(castToU != null); Contract.Ensures(Contract.Result <VCExpr>() != null); VCExpr /*!*/ eq = GenReverseCastEq(castToU, castFromU, out var var, out var triggers); return(Gen.Forall(HelperFuns.ToList(var), triggers, "cast:" + castFromU.Name, 1, eq)); }