@@ -60,9 +60,6 @@ import Data.Generics.Product
60
60
import Data.Generics.Wrapped
61
61
( _Unwrapped
62
62
)
63
- import Data.Kind
64
- ( Type
65
- )
66
63
import Data.List.Extra
67
64
( groupSortOn
68
65
, sortOn
@@ -162,7 +159,6 @@ import Kore.Step.Transition
162
159
import qualified Kore.Step.Transition as Transition
163
160
import Kore.Strategies.ProofState hiding
164
161
( Prim
165
- , ProofState
166
162
, proofState
167
163
)
168
164
import qualified Kore.Strategies.ProofState as ProofState
@@ -190,8 +186,7 @@ See also: 'Strategy.pickFinal', 'extractUnproven'
190
186
-}
191
187
unprovenNodes
192
188
:: forall goal a
193
- . ProofState. ProofState a ~ ProofState goal a
194
- => Strategy. ExecutionGraph (ProofState goal a ) (Rule goal )
189
+ . Strategy. ExecutionGraph (ProofState a ) (Rule goal )
195
190
-> MultiOr. MultiOr a
196
191
unprovenNodes executionGraph =
197
192
MultiOr. MultiOr
@@ -202,14 +197,12 @@ unprovenNodes executionGraph =
202
197
-}
203
198
proven
204
199
:: forall goal a
205
- . ProofState. ProofState a ~ ProofState goal a
206
- => Strategy. ExecutionGraph (ProofState goal a ) (Rule goal )
200
+ . Strategy. ExecutionGraph (ProofState a ) (Rule goal )
207
201
-> Bool
208
202
proven = Foldable. null . unprovenNodes
209
203
210
204
class Goal goal where
211
205
type Prim goal
212
- type ProofState goal :: Type -> Type
213
206
214
207
goalToRule :: goal -> Rule goal
215
208
default goalToRule
@@ -220,8 +213,8 @@ class Goal goal where
220
213
transitionRule
221
214
:: (MonadCatch m , MonadSimplify m )
222
215
=> Prim goal
223
- -> ProofState goal goal
224
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
216
+ -> ProofState goal
217
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
225
218
226
219
strategy
227
220
:: goal
@@ -286,7 +279,6 @@ Things to note when implementing your own:
286
279
287
280
instance Goal OnePathRule where
288
281
type Prim OnePathRule = ProofState. Prim (Rule OnePathRule )
289
- type ProofState OnePathRule = ProofState. ProofState
290
282
291
283
goalToRule =
292
284
OnePathRewriteRule
@@ -321,7 +313,7 @@ deriveParOnePath
321
313
=> [Rule OnePathRule ]
322
314
-> OnePathRule
323
315
-> Strategy. TransitionT (Rule OnePathRule ) simplifier
324
- (ProofState OnePathRule OnePathRule )
316
+ (ProofState OnePathRule )
325
317
deriveParOnePath rules =
326
318
derivePar _Unwrapped OnePathRewriteRule rewrites
327
319
where
@@ -332,7 +324,7 @@ deriveSeqOnePath
332
324
=> [Rule OnePathRule ]
333
325
-> OnePathRule
334
326
-> Strategy. TransitionT (Rule OnePathRule ) simplifier
335
- (ProofState OnePathRule OnePathRule )
327
+ (ProofState OnePathRule )
336
328
deriveSeqOnePath rules =
337
329
deriveSeq _Unwrapped OnePathRewriteRule rewrites
338
330
where
@@ -346,7 +338,6 @@ instance ClaimExtractor OnePathRule where
346
338
347
339
instance Goal AllPathRule where
348
340
type Prim AllPathRule = ProofState. Prim (Rule AllPathRule )
349
- type ProofState AllPathRule = ProofState. ProofState
350
341
351
342
goalToRule =
352
343
AllPathRewriteRule
@@ -381,7 +372,7 @@ deriveParAllPath
381
372
=> [Rule AllPathRule ]
382
373
-> AllPathRule
383
374
-> Strategy. TransitionT (Rule AllPathRule ) simplifier
384
- (ProofState AllPathRule AllPathRule )
375
+ (ProofState AllPathRule )
385
376
deriveParAllPath rules =
386
377
derivePar _Unwrapped AllPathRewriteRule rewrites
387
378
where
@@ -392,7 +383,7 @@ deriveSeqAllPath
392
383
=> [Rule AllPathRule ]
393
384
-> AllPathRule
394
385
-> Strategy. TransitionT (Rule AllPathRule ) simplifier
395
- (ProofState AllPathRule AllPathRule )
386
+ (ProofState AllPathRule )
396
387
deriveSeqAllPath rules =
397
388
deriveSeq _Unwrapped AllPathRewriteRule rewrites
398
389
where
@@ -406,7 +397,6 @@ instance ClaimExtractor AllPathRule where
406
397
407
398
instance Goal ReachabilityRule where
408
399
type Prim ReachabilityRule = ProofState. Prim (Rule ReachabilityRule )
409
- type ProofState ReachabilityRule = ProofState. ProofState
410
400
411
401
goalToRule (OnePath rule) =
412
402
ReachabilityRewriteRule
@@ -420,18 +410,11 @@ instance Goal ReachabilityRule where
420
410
$ getAllPathRule rule
421
411
422
412
transitionRule
423
- :: (MonadCatch m , MonadSimplify m )
424
- => Prim ReachabilityRule
425
- -> ProofState
426
- ReachabilityRule
427
- ReachabilityRule
428
- -> Strategy. TransitionT
429
- (Rule ReachabilityRule )
430
- m
431
- ( ProofState
432
- ReachabilityRule
433
- ReachabilityRule
434
- )
413
+ :: (MonadCatch m , MonadSimplify m )
414
+ => Prim ReachabilityRule
415
+ -> ProofState ReachabilityRule
416
+ -> Strategy. TransitionT (Rule ReachabilityRule ) m
417
+ (ProofState ReachabilityRule )
435
418
transitionRule = logTransitionRule $ \ prim proofstate ->
436
419
case proofstate of
437
420
Goal (OnePath rule) ->
@@ -520,14 +503,10 @@ reachabilityAllPathStrategy strategy' =
520
503
ruleAllPathToRuleReachability
521
504
strategy'
522
505
523
- allPathProofState
524
- :: ProofState AllPathRule AllPathRule
525
- -> ProofState ReachabilityRule ReachabilityRule
506
+ allPathProofState :: ProofState AllPathRule -> ProofState ReachabilityRule
526
507
allPathProofState = fmap AllPath
527
508
528
- onePathProofState
529
- :: ProofState OnePathRule OnePathRule
530
- -> ProofState ReachabilityRule ReachabilityRule
509
+ onePathProofState :: ProofState OnePathRule -> ProofState ReachabilityRule
531
510
onePathProofState = fmap OnePath
532
511
533
512
primRuleOnePath
@@ -568,36 +547,35 @@ data TransitionRuleTemplate monad goal =
568
547
{ simplifyTemplate
569
548
:: goal -> Strategy.TransitionT (Rule goal) monad goal
570
549
, checkImplicationTemplate
571
- :: (forall x. x -> ProofState goal x)
550
+ :: (forall x. x -> ProofState x)
572
551
-> goal
573
- -> Strategy.TransitionT (Rule goal) monad (ProofState goal goal )
552
+ -> Strategy.TransitionT (Rule goal) monad (ProofState goal)
574
553
, isTriviallyValidTemplate :: goal -> Bool
575
554
, deriveParTemplate
576
555
:: [Rule goal ]
577
556
-> goal
578
- -> Strategy. TransitionT (Rule goal ) monad (ProofState goal goal )
557
+ -> Strategy. TransitionT (Rule goal ) monad (ProofState goal )
579
558
, deriveSeqTemplate
580
559
:: [Rule goal ]
581
560
-> goal
582
- -> Strategy. TransitionT (Rule goal ) monad (ProofState goal goal )
561
+ -> Strategy. TransitionT (Rule goal ) monad (ProofState goal )
583
562
}
584
563
564
+ type TransitionRule m goal =
565
+ Prim goal
566
+ -> ProofState goal
567
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
568
+
585
569
logTransitionRule
586
- :: forall m goal
570
+ :: forall m
587
571
. MonadSimplify m
588
- => goal ~ ReachabilityRule
589
- => ( Prim goal
590
- -> ProofState goal goal
591
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
592
- )
593
- -> ( Prim goal
594
- -> ProofState goal goal
595
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
596
- )
597
- logTransitionRule rule prim proofState = case proofState of
598
- Goal goal -> logWith goal
599
- GoalRemainder goal -> logWith goal
600
- _ -> rule prim proofState
572
+ => TransitionRule m ReachabilityRule
573
+ -> TransitionRule m ReachabilityRule
574
+ logTransitionRule rule prim proofState =
575
+ case proofState of
576
+ Goal goal -> logWith goal
577
+ GoalRemainder goal -> logWith goal
578
+ _ -> rule prim proofState
601
579
where
602
580
logWith goal = case prim of
603
581
Simplify ->
@@ -614,12 +592,9 @@ logTransitionRule rule prim proofState = case proofState of
614
592
transitionRuleTemplate
615
593
:: forall m goal
616
594
. MonadSimplify m
617
- => ProofState goal goal ~ ProofState. ProofState goal
618
595
=> Prim goal ~ ProofState. Prim (Rule goal )
619
596
=> TransitionRuleTemplate m goal
620
- -> Prim goal
621
- -> ProofState goal goal
622
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
597
+ -> TransitionRule m goal
623
598
transitionRuleTemplate
624
599
TransitionRuleTemplate
625
600
{ simplifyTemplate
@@ -633,8 +608,8 @@ transitionRuleTemplate
633
608
where
634
609
transitionRuleWorker
635
610
:: Prim goal
636
- -> ProofState goal goal
637
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
611
+ -> ProofState goal
612
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
638
613
transitionRuleWorker CheckProven Proven = empty
639
614
transitionRuleWorker CheckGoalRemainder (GoalRemainder _) = empty
640
615
@@ -799,11 +774,10 @@ checkImplication
799
774
:: forall goal m
800
775
. MonadSimplify m
801
776
=> MonadCatch m
802
- => ProofState. ProofState goal ~ ProofState goal goal
803
777
=> Lens' goal (RulePattern VariableName )
804
- -> (forall x . x -> ProofState goal x )
778
+ -> (forall x . x -> ProofState x )
805
779
-> goal
806
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
780
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
807
781
checkImplication lensRulePattern mkState goal =
808
782
goal
809
783
& Lens. traverseOf lensRulePattern (Compose . checkImplicationWorker)
@@ -812,7 +786,7 @@ checkImplication lensRulePattern mkState goal =
812
786
where
813
787
checkImplicationWorker
814
788
:: RulePattern VariableName
815
- -> m (ProofState goal (RulePattern VariableName ))
789
+ -> m (ProofState (RulePattern VariableName ))
816
790
checkImplicationWorker (snd . Step. refreshRule mempty -> rulePattern) =
817
791
do
818
792
removal <- removalPatterns destination configuration existentials
@@ -882,12 +856,11 @@ instance Exception WithConfiguration
882
856
derivePar
883
857
:: forall m goal
884
858
. (MonadCatch m , MonadSimplify m )
885
- => ProofState. ProofState goal ~ ProofState goal goal
886
859
=> Lens' goal (RulePattern VariableName )
887
860
-> (RewriteRule RewritingVariableName -> Rule goal )
888
861
-> [RewriteRule RewritingVariableName ]
889
862
-> goal
890
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
863
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
891
864
derivePar lensRulePattern mkRule =
892
865
deriveWith lensRulePattern mkRule
893
866
$ Step. applyRewriteRulesParallel Unification. unificationProcedure
@@ -901,13 +874,12 @@ type Deriver monad =
901
874
deriveWith
902
875
:: forall m goal
903
876
. MonadCatch m
904
- => ProofState. ProofState goal ~ ProofState goal goal
905
877
=> Lens' goal (RulePattern VariableName )
906
878
-> (RewriteRule RewritingVariableName -> Rule goal )
907
879
-> Deriver m
908
880
-> [RewriteRule RewritingVariableName ]
909
881
-> goal
910
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
882
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
911
883
deriveWith lensRulePattern mkRule takeStep rewrites goal =
912
884
getCompose
913
885
$ Lens. forOf lensRulePattern goal
@@ -922,12 +894,11 @@ deriveWith lensRulePattern mkRule takeStep rewrites goal =
922
894
deriveSeq
923
895
:: forall m goal
924
896
. (MonadCatch m , MonadSimplify m )
925
- => ProofState. ProofState goal ~ ProofState goal goal
926
897
=> Lens' goal (RulePattern VariableName )
927
898
-> (RewriteRule RewritingVariableName -> Rule goal )
928
899
-> [RewriteRule RewritingVariableName ]
929
900
-> goal
930
- -> Strategy. TransitionT (Rule goal ) m (ProofState goal goal )
901
+ -> Strategy. TransitionT (Rule goal ) m (ProofState goal )
931
902
deriveSeq lensRulePattern mkRule =
932
903
deriveWith lensRulePattern mkRule . flip
933
904
$ Step. applyRewriteRulesSequence Unification. unificationProcedure
@@ -1055,15 +1026,14 @@ debugProofStateBracket
1055
1026
. MonadLog monad
1056
1027
=> ToReachabilityRule goal
1057
1028
=> Coercible (Rule goal ) (RewriteRule RewritingVariableName )
1058
- => ProofState goal goal ~ ProofState. ProofState goal
1059
1029
=> Prim goal ~ ProofState. Prim (Rule goal )
1060
- => ProofState goal goal
1030
+ => ProofState goal
1061
1031
-- ^ current proof state
1062
1032
-> Prim goal
1063
1033
-- ^ transition
1064
- -> monad (ProofState goal goal )
1034
+ -> monad (ProofState goal )
1065
1035
-- ^ action to be computed
1066
- -> monad (ProofState goal goal )
1036
+ -> monad (ProofState goal )
1067
1037
debugProofStateBracket
1068
1038
(fmap toReachabilityRule -> proofState)
1069
1039
(coerce -> transition)
@@ -1083,13 +1053,12 @@ debugProofStateFinal
1083
1053
=> MonadLog monad
1084
1054
=> ToReachabilityRule goal
1085
1055
=> Coercible (Rule goal ) (RewriteRule RewritingVariableName )
1086
- => ProofState goal goal ~ ProofState. ProofState goal
1087
1056
=> Prim goal ~ ProofState. Prim (Rule goal )
1088
- => ProofState goal goal
1057
+ => ProofState goal
1089
1058
-- ^ current proof state
1090
1059
-> Prim goal
1091
1060
-- ^ transition
1092
- -> monad (ProofState goal goal )
1061
+ -> monad (ProofState goal )
1093
1062
debugProofStateFinal
1094
1063
(fmap toReachabilityRule -> proofState)
1095
1064
(coerce -> transition)
@@ -1106,18 +1075,9 @@ withDebugProofState
1106
1075
. MonadLog monad
1107
1076
=> ToReachabilityRule goal
1108
1077
=> Coercible (Rule goal ) (RewriteRule RewritingVariableName )
1109
- => ProofState goal goal ~ ProofState. ProofState goal
1110
1078
=> Prim goal ~ ProofState. Prim (Rule goal )
1111
- =>
1112
- ( Prim goal
1113
- -> ProofState goal goal
1114
- -> Strategy. TransitionT (Rule goal ) monad (ProofState goal goal )
1115
- )
1116
- ->
1117
- ( Prim goal
1118
- -> ProofState goal goal
1119
- -> Strategy. TransitionT (Rule goal ) monad (ProofState goal goal )
1120
- )
1079
+ => TransitionRule monad goal
1080
+ -> TransitionRule monad goal
1121
1081
withDebugProofState transitionFunc =
1122
1082
\ transition state ->
1123
1083
Transition. orElse
0 commit comments