1generic
2   type Value_Type is private;
3package Predicate4_Pkg is
4  type MT (Has : Boolean := False) is record
5     case Has is
6        when False =>
7           null;
8        when True =>
9           MX : Value_Type;
10     end case;
11  end record;
12
13  function Foo (M : MT) return Boolean is (not M.Has);
14  subtype LT is MT with Dynamic_Predicate => not LT.Has;
15  function Bar (M : MT) return Boolean is (Foo (M));
16end;
17