From 591a24d755e2a67b58bb2dd5b78e1e1c242f111e Mon Sep 17 00:00:00 2001 From: Felix Dilke Date: Tue, 10 Feb 2026 16:39:10 +0000 Subject: [PATCH] refining the tuple calculations --- haskell-experiments/src/Datalog/NaiveQE.hs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/haskell-experiments/src/Datalog/NaiveQE.hs b/haskell-experiments/src/Datalog/NaiveQE.hs index 226be63..6192a9f 100644 --- a/haskell-experiments/src/Datalog/NaiveQE.hs +++ b/haskell-experiments/src/Datalog/NaiveQE.hs @@ -18,6 +18,9 @@ import Datalog.DatalogParser import Control.Exception import Data.Maybe import Utility.Utility +import Control.Monad(guard) +import Data.Set (Set) +import Data.Set qualified as Set data (DatalogDB db) => NaiveQE db = NaiveQE { @@ -64,7 +67,13 @@ computeHerbrand db = amalgamateRelationSub newFacts relation = foldr amalgamateRule newFacts (_rules relation) where amalgamateRule :: RelationRule -> NewFacts -> NewFacts - amalgamateRule (RelationRule headVars body) newFacts = - -- allMaps headVars (allConstants db) - newFacts + amalgamateRule (RelationRule headVars body) newFacts = + newFacts where + (facts, changed) = newFacts + knownTuples :: Set [Constant] = _tuples $ facts Map.! (_name relation) + extraTuples = do + varmap <- allMaps headVars (Set.toList $ allConstants db) + let tuple = (\name -> varmap Map.! name) <$> headVars + guard $ not $ Set.member tuple knownTuples + return varmap