package Predicate3_Pkg is type Priv is private; C: constant Priv; function Test (X: Priv) return Boolean; subtype Subt is Priv with Dynamic_Predicate => (Test (Subt)); function Wrong return Subt; function Good (X: Subt) return Boolean; private type Priv is new Integer; C: constant Priv := -1; function Test (X: Priv) return Boolean is (X > 0); function Wrong return Subt is (-1); function Good (X: Subt) return Boolean is (True); end Predicate3_Pkg;