Example #1
0
        ///////////////////////////////////////////////////////////////////////////////

        // 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));
        }