{#abstractrefinements} ========================
Prop>. Int
-> Int
-> Int
@-} maxInt x y = if x <= y then y else x \end{code}
Prop>. Int
-> Int
-> Int
@-}
maxInt x y = if x <= y then y else x
\end{code}
[Key idea: ](http://goto.ucsd.edu/~rjhala/papers/abstract_refinement_types.html) `Int
` is just `{v:Int | (p v)}`
i.e., Abstract Refinement is an **uninterpreted function** in SMT logic
Parametric Refinements
----------------------
\begin{code}
{-@ maxInt :: forall
Prop>. Int
-> Int
-> Int
@-}
maxInt x y = if x <= y then y else x
\end{code}
**Check** and **Instantiate**
Using [SMT and Abstract Interpretation.](http://goto.ucsd.edu/~rjhala/papers/liquid_types.html)
Using Abstract Refinements
--------------------------
-