Skip to content

Commit

Permalink
Parameterize Reft with the variable type
Browse files Browse the repository at this point in the history
  • Loading branch information
facundominguez committed Sep 30, 2024
1 parent 4233197 commit 474642b
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 36 deletions.
6 changes: 4 additions & 2 deletions src/Language/Fixpoint/Solver/EnvironmentReduction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,12 @@ import Language.Fixpoint.Types.Names
import Language.Fixpoint.Types.PrettyPrint
import Language.Fixpoint.Types.Refinements
( Brel(..)
, Expr(..)
, ExprV(..)
, Expr
, KVar(..)
, SortedReft(..)
, Subst(..)
, Subst
, SubstV(..)
, pattern PTrue
, pattern PFalse
, dropECst
Expand Down
1 change: 1 addition & 0 deletions src/Language/Fixpoint/Solver/Interpreter.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE PatternGuards #-}
{-# LANGUAGE RecordWildCards #-}
Expand Down
2 changes: 1 addition & 1 deletion src/Language/Fixpoint/Solver/Prettify.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import Language.Fixpoint.Types.Names
)
import Language.Fixpoint.Types.PrettyPrint
import Language.Fixpoint.Types.Refinements
( Expr(..)
( ExprV(..)
, pattern PFalse
, Reft
, SortedReft(..)
Expand Down
72 changes: 42 additions & 30 deletions src/Language/Fixpoint/Types/Refinements.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,18 @@ module Language.Fixpoint.Types.Refinements (
, Constant (..)
, Bop (..)
, Brel (..)
, Expr (..), Pred
, ExprV (..), Pred
, Expr
, GradInfo (..)
, pattern PTrue, pattern PTop, pattern PFalse, pattern EBot
, pattern ETimes, pattern ERTimes, pattern EDiv, pattern ERDiv
, pattern EEq
, KVar (..)
, Subst (..)
, Subst
, SubstV (..)
, KVSub (..)
, Reft (..)
, Reft
, ReftV (..)
, SortedReft (..)

-- * Constructing Terms
Expand Down Expand Up @@ -148,7 +151,7 @@ instance NFData Constant
instance NFData SymConst
instance NFData Brel
instance NFData Bop
instance NFData Expr
instance NFData v => NFData (ExprV v)
instance NFData Reft
instance NFData SortedReft

Expand Down Expand Up @@ -181,7 +184,7 @@ instance (Hashable k, Eq k, B.Binary k, B.Binary v) => B.Binary (M.HashMap k v)
get = M.fromList <$> B.get

instance B.Binary Subst
instance B.Binary Expr
instance B.Binary v => B.Binary (ExprV v)
instance B.Binary Reft


Expand Down Expand Up @@ -263,8 +266,12 @@ instance Hashable Reft
--------------------------------------------------------------------------------
-- | Substitutions -------------------------------------------------------------
--------------------------------------------------------------------------------
newtype Subst = Su (M.HashMap Symbol Expr)
deriving (Eq, Data, Ord, Typeable, Generic, ToJSON, FromJSON)
type Subst = SubstV Symbol
newtype SubstV v = Su (M.HashMap Symbol (ExprV v))
deriving (Eq, Data, Ord, Typeable, Generic)

instance ToJSON Subst
instance FromJSON Subst

instance Show Subst where
show = showFix
Expand Down Expand Up @@ -319,28 +326,31 @@ instance FromJSON Bop where
instance FromJSON Expr where


data Expr = ESym !SymConst
type Expr = ExprV Symbol

data ExprV v
= ESym !SymConst
| ECon !Constant
| EVar !Symbol
| EApp !Expr !Expr
| ENeg !Expr
| EBin !Bop !Expr !Expr
| EIte !Expr !Expr !Expr
| ECst !Expr !Sort
| ELam !(Symbol, Sort) !Expr
| ETApp !Expr !Sort
| ETAbs !Expr !Symbol
| PAnd ![Expr]
| POr ![Expr]
| PNot !Expr
| PImp !Expr !Expr
| PIff !Expr !Expr
| PAtom !Brel !Expr !Expr
| EVar !v
| EApp !(ExprV v) !(ExprV v)
| ENeg !(ExprV v)
| EBin !Bop !(ExprV v) !(ExprV v)
| EIte !(ExprV v) !(ExprV v) !(ExprV v)
| ECst !(ExprV v) !Sort
| ELam !(Symbol, Sort) !(ExprV v)
| ETApp !(ExprV v) !Sort
| ETAbs !(ExprV v) !Symbol
| PAnd ![ExprV v]
| POr ![ExprV v]
| PNot !(ExprV v)
| PImp !(ExprV v) !(ExprV v)
| PIff !(ExprV v) !(ExprV v)
| PAtom !Brel !(ExprV v) !(ExprV v)
| PKVar !KVar !Subst
| PAll ![(Symbol, Sort)] !Expr
| PExist ![(Symbol, Sort)] !Expr
| PGrad !KVar !Subst !GradInfo !Expr
| ECoerc !Sort !Sort !Expr
| PAll ![(Symbol, Sort)] !(ExprV v)
| PExist ![(Symbol, Sort)] !(ExprV v)
| PGrad !KVar !Subst !GradInfo !(ExprV v)
| ECoerc !Sort !Sort !(ExprV v)
deriving (Eq, Show, Ord, Data, Typeable, Generic)

onEverySubexpr :: (Expr -> Expr) -> Expr -> Expr
Expand Down Expand Up @@ -511,9 +521,11 @@ debruijnIndex = go
go (PGrad _ _ _ e) = go e
go (ECoerc _ _ e) = go e

-- | Parsed refinement of @Symbol@ as @Expr@
-- e.g. in '{v: _ | e }' v is the @Symbol@ and e the @Expr@
newtype Reft = Reft (Symbol, Expr)
type Reft = ReftV Symbol

-- | Refinement of @v@ satisfying a predicate
-- e.g. in '{x: _ | e }' x is the @Symbol@ and e the @ExprV v@
newtype ReftV v = Reft (Symbol, ExprV v)
deriving (Eq, Ord, Data, Typeable, Generic)

data SortedReft = RR { sr_sort :: !Sort, sr_reft :: !Reft }
Expand Down
3 changes: 2 additions & 1 deletion src/Language/Fixpoint/Types/Templates.hs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{-# LANGUAGE FlexibleInstances #-}
module Language.Fixpoint.Types.Templates (

anything, Templates, makeTemplates,
Expand Down Expand Up @@ -103,4 +104,4 @@ instance Monoid Templates where
mempty = TExprs []

instance PPrint Templates where
pprintTidy _ = text . show
pprintTidy _ = text . show
1 change: 1 addition & 0 deletions tests/tasty/Arbitrary.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TupleSections #-}

{-# OPTIONS_GHC -Wno-orphans #-}
Expand Down
2 changes: 1 addition & 1 deletion tests/tasty/InterpretTests.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module InterpretTests (tests) where

import Arbitrary ()
import Language.Fixpoint.Types.Refinements (Expr (..))
import Language.Fixpoint.Types.Refinements (Expr)
import qualified SimplifyInterpreter
import Test.Tasty
( TestTree,
Expand Down
2 changes: 1 addition & 1 deletion tests/tasty/SimplifyTests.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module SimplifyTests (tests) where

import Arbitrary (subexprs)
import Language.Fixpoint.Types.Refinements (Bop (Minus), Constant (I), Expr (..))
import Language.Fixpoint.Types.Refinements (Bop (Minus), Constant (I), Expr, ExprV (..))
import qualified SimplifyInterpreter
import qualified SimplifyPLE
import Test.Tasty
Expand Down

0 comments on commit 474642b

Please sign in to comment.