Skip to content

Give Predicate a distinct internal representation #2099

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 98 commits into from
Jan 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
0dce8e3
sketched out first draft of the new Predicate representation
Aug 27, 2020
a6525d5
Merge branch 'master' into PredicateNew
Aug 27, 2020
5992c81
Recursive and Corecursive instances for Predicate
ttuegel Aug 27, 2020
432a51c
Fixed and finished the implementation of fromPredicate
Aug 28, 2020
5f75c19
implemented more functions
Aug 28, 2020
0b5ec35
Merge branch 'master' into PredicateNew
MirceaS Aug 31, 2020
1c3532f
Implemented New Predicate functions
MirceaS Sep 1, 2020
b371e0c
further refinements
MirceaS Sep 8, 2020
c65e585
finished implementing substitute
MirceaS Sep 9, 2020
6d692d4
simplified definition of substitute
MirceaS Sep 10, 2020
fbcd3fc
small fix
MirceaS Sep 10, 2020
5f889bc
fixed multiAnd and Or functions
MirceaS Sep 10, 2020
fe0031a
implemented more functions
MirceaS Sep 14, 2020
af04a71
almost implemented mapVariables
MirceaS Sep 14, 2020
b2e1697
updated other files
MirceaS Sep 15, 2020
004dd3b
updated everything
MirceaS Sep 16, 2020
4c69f2b
updated everything2
MirceaS Sep 16, 2020
3c33122
Predicate done
MirceaS Sep 16, 2020
5151cce
resolved merge conflicts
MirceaS Sep 16, 2020
f801953
removed old Predicate
MirceaS Sep 16, 2020
2002f2a
stilified the code
MirceaS Sep 17, 2020
0b4fb39
hlint applied
MirceaS Sep 17, 2020
f8aa94c
fixed unit tests
MirceaS Sep 17, 2020
7f46604
hlinted and stylified
MirceaS Sep 18, 2020
c4ce9e8
small fix
MirceaS Sep 18, 2020
84262ef
synched with master
MirceaS Sep 18, 2020
fb9840c
test_KIte: Add a test for fully-abstract if-then-else
ttuegel Sep 23, 2020
4fe6220
Merge branch 'master' into PredicateNew
MirceaS Sep 30, 2020
20fa8d2
Merge branch 'PredicateNew' of github.com:kframework/kore into Predic…
MirceaS Sep 30, 2020
8223217
Merge branch 'master' into PredicateNew
MirceaS Sep 30, 2020
e1d6ecc
fixed test
MirceaS Sep 30, 2020
2e9544f
fixed tests
MirceaS Sep 30, 2020
1c80f5e
fixed syntax
MirceaS Oct 1, 2020
c68f82e
got rid of _PREDICATE
MirceaS Oct 1, 2020
899cc6a
Revert "got rid of _PREDICATE"
MirceaS Oct 2, 2020
f8aa750
removed most occurences of unwrapPredicate
MirceaS Oct 6, 2020
8efed6b
Merge branch 'master' into PredicateNew
MirceaS Oct 6, 2020
9003205
ran stylish
MirceaS Oct 6, 2020
eecb0ff
Merge branch 'master' into PredicateNew
MirceaS Oct 7, 2020
f8f8e98
fixed implementation of fromPredicate and other Predicate building fu…
MirceaS Oct 7, 2020
3da9426
fixed uses of fromPredicate
MirceaS Oct 8, 2020
599c181
addresses PR comments
MirceaS Oct 13, 2020
1c0ca3c
reverted unparser changes
MirceaS Oct 13, 2020
6fe45ea
made custom data type for HashMap pair
MirceaS Oct 13, 2020
aa9ae15
simplified the definition of one function
MirceaS Oct 15, 2020
06fcc18
WIP
ttuegel Oct 19, 2020
e573181
Merge branch 'PredicateNew' of github.com:kframework/kore into Predic…
MirceaS Oct 19, 2020
758127d
Merge branch 'master' into PredicateNew
MirceaS Oct 19, 2020
3fefbf5
Add tracing for THETEST
ttuegel Oct 20, 2020
56aec5a
Revert "Add tracing for THETEST"
MirceaS Nov 2, 2020
28fe869
removed junk file and pointless import
MirceaS Nov 2, 2020
13f5272
fixed looping issue
MirceaS Nov 2, 2020
cf575c5
fixed Predicate functions
MirceaS Nov 3, 2020
6780bf9
further fix
MirceaS Nov 3, 2020
46acf81
when turning equations into termLikes, we now require a sort
MirceaS Nov 6, 2020
33fc10b
stylish
MirceaS Nov 6, 2020
09eca68
removed bad test
MirceaS Nov 9, 2020
1ce468d
removed unused variables
MirceaS Nov 9, 2020
096eb1a
got rid of Unparser instances for types no longer unparserable
MirceaS Nov 10, 2020
9e92a23
fixed building issue
MirceaS Nov 11, 2020
6cbe5ab
test_mapVariables: Test that the correct function is passed to TermLi…
ttuegel Nov 13, 2020
a12fad9
Predicate.mapVariables: Convert through TermLike
ttuegel Nov 13, 2020
d365aac
Merge branch 'master' into PredicateNew
MirceaS Nov 23, 2020
22dfaf2
Merge branch 'master' into PredicateNew
MirceaS Nov 23, 2020
530b12f
readded Unparser instance for Conditionals
MirceaS Dec 3, 2020
0be24bd
Merge branch 'PredicateNew' of github.com:kframework/kore into Predic…
MirceaS Dec 3, 2020
0549168
Merge branch 'master' into PredicateNew
MirceaS Dec 9, 2020
f7eaec0
Merge branch 'master' into PredicateNew
MirceaS Dec 14, 2020
683ff98
Merge branch 'PredicateNew' of github.com:kframework/kore into Predic…
MirceaS Dec 15, 2020
a384bfe
Format with stylish-haskell
MirceaS Dec 15, 2020
d723671
fixed forgetSimplified issue
MirceaS Dec 16, 2020
617a2a2
Merge branch 'PredicateNew' of github.com:kframework/kore into Predic…
MirceaS Dec 16, 2020
d3c9f82
added kore.cabal back
MirceaS Dec 16, 2020
8dd37f0
Merge branch 'master' into PredicateNew
MirceaS Dec 16, 2020
5dbb9a8
Materialize Nix expressions
MirceaS Dec 16, 2020
1f52b91
removed "Created:" comments from golden files
MirceaS Dec 16, 2020
f7166ba
implemented functions to help with debugging
MirceaS Dec 16, 2020
7c71927
removed illegal Unparse instance
MirceaS Dec 17, 2020
2bec0c5
fixed Predicate depth function
MirceaS Dec 17, 2020
b5290f3
Format with stylish-haskell
MirceaS Dec 17, 2020
f1d52ec
fixed integration tests
MirceaS Dec 17, 2020
65d3da2
Merge branch 'master' into PredicateNew
MirceaS Dec 18, 2020
495f2fc
Merge branch 'master' into PredicateNew
MirceaS Jan 6, 2021
e190f52
fix of bug from master
MirceaS Jan 6, 2021
96fe0f6
Update kore/src/Kore/Attribute/PredicatePattern.hs
MirceaS Jan 8, 2021
954915a
Update kore/src/Kore/Internal/Predicate.hs
MirceaS Jan 8, 2021
480ef55
Update kore/src/Kore/Internal/Predicate.hs
MirceaS Jan 8, 2021
4144447
addressed PR comments
MirceaS Jan 8, 2021
a213fb1
Merge branch 'master' into PredicateNew
MirceaS Jan 8, 2021
93f4d6e
default.nix: Filter .cabal files in favor of package.yaml
ttuegel Jan 8, 2021
24777a2
reformatted the code
MirceaS Jan 13, 2021
82fb583
Merge branch 'master' into PredicateNew
MirceaS Jan 13, 2021
3d2cbd1
fixed integration test
MirceaS Jan 13, 2021
2d36b0f
Merge branch 'master' into PredicateNew
ttuegel Jan 13, 2021
c7394f1
Materialize Nix expressions
ttuegel Jan 13, 2021
27525a0
Merge branch 'master' into PredicateNew
MirceaS Jan 14, 2021
7bada88
Materialize Nix expressions
MirceaS Jan 14, 2021
9e349b6
empty commit
MirceaS Jan 14, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ let
"/*"
"!/stack.yaml"
"!/kore"
"*.cabal"
];
};
inherit checkMaterialization;
Expand Down
3 changes: 2 additions & 1 deletion kore/kore.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ cabal-version: 2.2
--
-- see: https://github.com/sol/hpack
--
-- hash: 3120f5e24384393d150b1db1b680ac8a0c5d310317b293ba3f29f6848b8c6af7
-- hash: 14a9c3fb13f5926dbd7132316a785e05c02d496c072bab9f8bd7533b1cbc8d41

name: kore
version: 0.37.0.0
Expand Down Expand Up @@ -90,6 +90,7 @@ library
Kore.Attribute.Pattern.Function
Kore.Attribute.Pattern.Functional
Kore.Attribute.Pattern.Simplified
Kore.Attribute.PredicatePattern
Kore.Attribute.Priority
Kore.Attribute.ProductionID
Kore.Attribute.RuleIndex
Expand Down
22 changes: 20 additions & 2 deletions kore/src/Kore/Attribute/Pattern.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,27 @@ import qualified GHC.Generics as GHC

import Kore.Attribute.Pattern.ConstructorLike
import Kore.Attribute.Pattern.Created
( Created (..)
, hasKnownCreator
)
import Kore.Attribute.Pattern.Defined
import Kore.Attribute.Pattern.FreeVariables hiding
( freeVariables
( Defined (..)
)
import Kore.Attribute.Pattern.FreeVariables
( FreeVariables
, HasFreeVariables
, bindVariable
, bindVariables
, emptyFreeVariables
, freeVariable
, getFreeElementVariables
, isFreeVariable
, mapFreeVariables
, nullFreeVariables
, toList
, toNames
, toSet
, traverseFreeVariables
)
import qualified Kore.Attribute.Pattern.FreeVariables as FreeVariables
( freeVariables
Expand Down
153 changes: 153 additions & 0 deletions kore/src/Kore/Attribute/PredicatePattern.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
{- |
Copyright : (c) Runtime Verification, 2020
License : NCSA

-}

{-# LANGUAGE UndecidableInstances #-}

module Kore.Attribute.PredicatePattern
( PredicatePattern (PredicatePattern, freeVariables)
-- simplified is excluded on purpose
, simplifiedAttribute
, isSimplified
, isFullySimplified
, setSimplified
, mapVariables
, traverseVariables
, deleteFreeVariable
, fromPattern
-- * Re-exports
, module Kore.Attribute.Pattern.FreeVariables
) where

import Prelude.Kore

import Control.DeepSeq
( NFData
)
import qualified Control.Lens as Lens
import Data.Generics.Product
import qualified Generics.SOP as SOP
import qualified GHC.Generics as GHC

import Kore.Attribute.Pattern
( Pattern
)
import qualified Kore.Attribute.Pattern as Pattern
import Kore.Attribute.Pattern.FreeVariables hiding
( freeVariables
)
import qualified Kore.Attribute.Pattern.FreeVariables as FreeVariables
( freeVariables
)
import Kore.Attribute.Pattern.Simplified hiding
( isFullySimplified
, isSimplified
)
import qualified Kore.Attribute.Pattern.Simplified as Simplified
( isFullySimplified
, isSimplified
)
import Kore.Attribute.Synthetic
import Kore.Debug
import qualified Kore.Internal.SideCondition.SideCondition as SideCondition
( Representation
)
import Kore.Syntax.Variable

{- | @Pattern@ are the attributes of a pattern collected during verification.
-}
data PredicatePattern variable =
PredicatePattern
{ freeVariables :: !(FreeVariables variable)
, simplified :: !Simplified
}
deriving (Eq, GHC.Generic, Show)

instance NFData variable => NFData (PredicatePattern variable)

instance Hashable variable => Hashable (PredicatePattern variable)

instance SOP.Generic (PredicatePattern variable)

instance SOP.HasDatatypeInfo (PredicatePattern variable)

instance Debug variable => Debug (PredicatePattern variable) where
debugPrecBrief _ _ = "_"

instance (Debug variable, Diff variable) => Diff (PredicatePattern variable)

instance
( Functor base
, Synthetic (FreeVariables variable) base
, Synthetic Simplified base
) => Synthetic (PredicatePattern variable) base
where
synthetic base = PredicatePattern
{ freeVariables = synthetic (freeVariables <$> base)
, simplified = synthetic (simplified <$> base)
}


simplifiedAttribute :: PredicatePattern variable -> Simplified
simplifiedAttribute PredicatePattern {simplified} = simplified

{- Checks whether the pattern is simplified relative to the given side
condition.
-}
isSimplified
:: SideCondition.Representation -> PredicatePattern variable -> Bool
isSimplified sideCondition = Simplified.isSimplified sideCondition . simplifiedAttribute

{- Checks whether the pattern is simplified relative to any side condition.
-}
isFullySimplified :: PredicatePattern variable -> Bool
isFullySimplified PredicatePattern {simplified} = Simplified.isFullySimplified simplified

setSimplified :: Simplified -> PredicatePattern variable -> PredicatePattern variable
setSimplified simplified patt = patt { simplified }

{- | Use the provided mapping to replace all variables in a 'Pattern'.

See also: 'traverseVariables'

-}
mapVariables
:: Ord variable2
=> AdjSomeVariableName (variable1 -> variable2)
-> PredicatePattern variable1
-> PredicatePattern variable2
mapVariables adj = Lens.over (field @"freeVariables") (mapFreeVariables adj)

{- | Use the provided traversal to replace the free variables in a 'Pattern'.

See also: 'mapVariables'

-}
traverseVariables
:: forall m variable1 variable2
. Monad m
=> Ord variable2
=> AdjSomeVariableName (variable1 -> m variable2)
-> PredicatePattern variable1
-> m (PredicatePattern variable2)
traverseVariables adj = field @"freeVariables" (traverseFreeVariables adj)

{- | Delete the given variable from the set of free variables.
-}
deleteFreeVariable
:: Ord variable
=> SomeVariable variable
-> PredicatePattern variable
-> PredicatePattern variable
deleteFreeVariable variable =
Lens.over (field @"freeVariables") (bindVariable variable)


instance HasFreeVariables (PredicatePattern variable) variable where
freeVariables = freeVariables

fromPattern :: Pattern variable -> PredicatePattern variable
fromPattern p =
PredicatePattern (Pattern.freeVariables p) (Pattern.simplifiedAttribute p)
14 changes: 7 additions & 7 deletions kore/src/Kore/Builtin/AssocComm/CeilSimplifier.hs
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,13 @@ newSetCeilSimplifier
(BuiltinAssocComm NormalizedSet variable)
(OrCondition variable)
newSetCeilSimplifier =
CeilSimplifier $ \ceil@Ceil { ceilResultSort, ceilChild } -> do
CeilSimplifier $ \ceil@Ceil { ceilChild } -> do
let mkInternalAc normalizedAc =
ceilChild { builtinAcChild = wrapAc normalizedAc }
mkNotMember element termLike =
mkInternalAc (fromElement element) { opaque = [termLike] }
& TermLike.mkInternalSet
& makeCeilPredicate ceilResultSort
& makeCeilPredicate
-- TODO (thomas.tuegel): Do not mark this simplified.
-- Marking here may prevent user-defined axioms from applying.
-- At present, we wouldn't apply such an axiom, anyway.
Expand All @@ -122,13 +122,13 @@ newMapCeilSimplifier
(BuiltinAssocComm NormalizedMap variable)
(OrCondition variable)
newMapCeilSimplifier =
CeilSimplifier $ \ceil@Ceil { ceilResultSort, ceilChild } -> do
CeilSimplifier $ \ceil@Ceil { ceilChild } -> do
let mkInternalAc normalizedAc =
ceilChild { builtinAcChild = wrapAc normalizedAc }
mkNotMember element termLike =
mkInternalAc (fromElement element') { opaque = [termLike] }
& TermLike.mkInternalMap
& makeCeilPredicate ceilResultSort
& makeCeilPredicate
-- TODO (thomas.tuegel): Do not mark this simplified.
-- Marking here may prevent user-defined axioms from applying.
-- At present, we wouldn't apply such an axiom, anyway.
Expand Down Expand Up @@ -185,7 +185,7 @@ newBuiltinAssocCommCeilSimplifier
(BuiltinAssocComm normalized variable)
(OrCondition variable)
newBuiltinAssocCommCeilSimplifier mkBuiltin mkNotMember =
CeilSimplifier $ \Ceil { ceilResultSort, ceilChild } -> do
CeilSimplifier $ \Ceil { ceilChild } -> do
let internalAc@InternalAc { builtinAcChild } = ceilChild
sideCondition <- Reader.ask
let normalizedAc = unwrapAc builtinAcChild
Expand All @@ -207,7 +207,7 @@ newBuiltinAssocCommCeilSimplifier mkBuiltin mkNotMember =
emptyNormalizedAc { opaque = [opaque1, opaque2] }
}
& mkBuiltin
& makeCeilPredicate ceilResultSort
& makeCeilPredicate
-- TODO (thomas.tuegel): Do not mark this simplified.
-- Marking here may prevent user-defined axioms from applying.
-- At present, we wouldn't apply such an axiom, anyway.
Expand Down Expand Up @@ -240,7 +240,7 @@ newBuiltinAssocCommCeilSimplifier mkBuiltin mkNotMember =

let makeEvaluateTerm, defineAbstractKey, defineOpaque
:: TermLike variable -> MaybeT simplifier (OrCondition variable)
makeEvaluateTerm = makeEvaluateTermCeil sideCondition ceilResultSort
makeEvaluateTerm = makeEvaluateTermCeil sideCondition
defineAbstractKey = makeEvaluateTerm
defineOpaque = makeEvaluateTerm

Expand Down
5 changes: 2 additions & 3 deletions kore/src/Kore/Builtin/Builtin.hs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ import Kore.Internal.Pattern as Pattern
, withCondition
)
import Kore.Internal.Predicate
( makeEqualsPredicate_
( makeEqualsPredicate
)
import qualified Kore.Internal.Predicate as Predicate
import qualified Kore.Internal.SideCondition as SideCondition
Expand Down Expand Up @@ -511,13 +511,12 @@ unifyEqualsUnsolved SimplificationType.And a b = do
orCondition <-
makeEvaluateTermCeil
SideCondition.topTODO
predicateSort
unified
predicate <- Monad.Unify.scatter orCondition
return (unified `Pattern.withCondition` predicate)
unifyEqualsUnsolved SimplificationType.Equals a b =
return Pattern.top
{predicate = Predicate.markSimplified $ makeEqualsPredicate_ a b}
{predicate = Predicate.markSimplified $ makeEqualsPredicate a b}

makeDomainValueTerm
:: InternalVariable variable
Expand Down
4 changes: 2 additions & 2 deletions kore/src/Kore/Builtin/Int.hs
Original file line number Diff line number Diff line change
Expand Up @@ -385,9 +385,9 @@ evalEq resultSort arguments@[_intLeft, _intRight] =
empty

mkCeilUnlessDefined termLike
| TermLike.isDefinedPattern termLike = Condition.topOf resultSort
| TermLike.isDefinedPattern termLike = Condition.top
| otherwise =
Condition.fromPredicate (makeCeilPredicate resultSort termLike)
Condition.fromPredicate (makeCeilPredicate termLike)
returnPattern = return . flip Pattern.andCondition conditions
conditions = foldMap mkCeilUnlessDefined arguments

Expand Down
4 changes: 2 additions & 2 deletions kore/src/Kore/Builtin/KEqual.hs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ import Kore.Internal.Pattern
)
import qualified Kore.Internal.Pattern as Pattern
import Kore.Internal.Predicate
( makeCeilPredicate_
( makeCeilPredicate
)
import qualified Kore.Internal.SideCondition as SideCondition
import Kore.Internal.Symbol
Expand Down Expand Up @@ -258,7 +258,7 @@ unifyIfThenElse unifyChildren a b =
worker a b <|> worker b a
where
takeCondition value condition' =
makeCeilPredicate_ (mkAnd (Bool.asInternal sort value) condition')
makeCeilPredicate (mkAnd (Bool.asInternal sort value) condition')
& Condition.fromPredicate
where
sort = termLikeSort condition'
Expand Down
7 changes: 3 additions & 4 deletions kore/src/Kore/Builtin/Map.hs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ import qualified Kore.Internal.TermLike as TermLike
import Kore.Sort
( Sort
)
import qualified Kore.Sort as Sort
import Kore.Step.Simplification.NotSimplifier
import Kore.Step.Simplification.Simplify as Simplifier
import Kore.Syntax.Sentence
Expand Down Expand Up @@ -340,9 +339,9 @@ evalInKeys resultSort arguments@[_key, _map] =
emptyMap <|> concreteMap <|> symbolicMap
where
mkCeilUnlessDefined termLike
| TermLike.isDefinedPattern termLike = Condition.topOf resultSort
| TermLike.isDefinedPattern termLike = Condition.top
| otherwise =
Condition.fromPredicate (makeCeilPredicate resultSort termLike)
Condition.fromPredicate (makeCeilPredicate termLike)

returnPattern = return . flip Pattern.andCondition conditions
conditions = foldMap mkCeilUnlessDefined arguments
Expand Down Expand Up @@ -616,7 +615,7 @@ unifyNotInKeys unifyChildren (NotSimplifier notSimplifier) a b =

defineTerm :: TermLike variable -> MaybeT unifier (Condition variable)
defineTerm termLike =
makeEvaluateTermCeil SideCondition.topTODO Sort.predicateSort termLike
makeEvaluateTermCeil SideCondition.topTODO termLike
>>= Unify.scatter
& lift

Expand Down
4 changes: 2 additions & 2 deletions kore/src/Kore/Builtin/Set.hs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ evalIn resultSort [_elem, _set] = do
returnIfTrueAndDefined result setTerm
| result = do
let condition =
Conditional.fromPredicate $ makeCeilPredicate resultSort setTerm
Conditional.fromPredicate $ makeCeilPredicate setTerm
trueWithCondition =
Pattern.andCondition
(asExpandedBoolPattern result)
Expand Down Expand Up @@ -347,7 +347,7 @@ evalDifference
_set2 <- expectBuiltinSet ctx _set2
let definedArgs =
filter (not . TermLike.isDefinedPattern) args
& map (makeCeilPredicate resultSort)
& map makeCeilPredicate
& makeMultipleAndPredicate
& Conditional.fromPredicate
let NormalizedAc
Expand Down
6 changes: 3 additions & 3 deletions kore/src/Kore/Equation/Application.hs
Original file line number Diff line number Diff line change
Expand Up @@ -651,11 +651,11 @@ instance InternalVariable variable => Pretty (CheckRequiresError variable) where
pretty checkRequiresError =
Pretty.vsep
[ "could not infer the equation requirement:"
, Pretty.indent 4 (unparse equationRequires)
, Pretty.indent 4 (pretty equationRequires)
, "and the matching requirement:"
, Pretty.indent 4 (unparse matchPredicate)
, Pretty.indent 4 (pretty matchPredicate)
, "from the side condition:"
, Pretty.indent 4 (unparse sideCondition)
, Pretty.indent 4 (pretty sideCondition)
]
where
CheckRequiresError { matchPredicate, equationRequires, sideCondition } =
Expand Down
Loading