XSaiga 1.1.0.0 → 1.2.0.0
raw patch · 6 files changed
+2514/−6610 lines, 6 filesdep ~base
Dependency ranges changed: base
Files
- AGParser2.hs +717/−716
- Getts.hs +279/−276
- Main.hs +3/−2
- SolarmanTriplestore.hs +1312/−5413
- TypeAg2.hs +192/−192
- XSaiga.cabal +11/−11
AGParser2.hs view
@@ -1,716 +1,717 @@-module AGParser2 where -import Prelude hiding ((*>)) -import Text.PrettyPrint.HughesPJ as PPH hiding (empty) -- ((PPH.<+>), vcat, text, render,($$),nest,Doc) -import Data.List -import TypeAg2 -import Control.Monad -import Control.Applicative hiding ((<|>), (*>)) - - - - ----- ************************************ ----------------------- - -type Instance = IRec - -data SorI = S | I |NILL deriving (Eq,Ord,Show, Enum) - -- Synthesized or inherited or NILL - - -type IRec = (SorI, Id) - -- uniquely determines synthesized or inherited attribute for an NT - -data Useless = OF|ISEQUALTO deriving (Show, Eq) - -- for decorating the semantic rules - - - -data SRule_ = NT {iden :: Id, par :: NTType} | Rule {par' :: SeqType} | DRule {par'' :: SRule_ } - -type NTType = Id -> InsAttVals -> M Foo -type SeqType = Id -> InsAttVals -> [SemRule] -> Result -> M Foo -type AltType = NTType -type SemRule = (Instance,(InsAttVals, Id) -> InsAttVals) ------------- -data Tree a = Leaf (a,Instance) - | Branch [Tree a] - | SubNode ((NodeName, Instance), (Start1,End)) - deriving (Eq) - - -type NodeName = MemoL -type Start1 = (Int, InsAttVals) -type Start = ((Int,InsAttVals), [String]) -type End = (Int, InsAttVals) -type Atts = [AttValue] -- [(AttType, AttValue)] -type InsAttVals = [(Instance, Atts)] - - -type Mtable = [(MemoL - ,[(Start1,(Context,Result))] - ) - ] -type Result = [((Start1, End),[Tree MemoL])] - -type State = Mtable -type Context = ([MemoL],[(Int,[(MemoL, Int)])]) - -type M a = Start -> Context -> StateM a -type Seq a = Id -> InsAttVals -> [SemRule] -> Result -> Start -> Context -> StateM a -type Foo = (Context, Result) - --- ============================ -newtype StateM t = State { unState :: State -> (t,State) } - -instance Functor StateM where - fmap = liftM - -instance Applicative StateM where - pure = return - (<*>) = ap -- defined in Control.Monad - -instance Monad StateM where - -- defines state propagation - State m >>= k - = State (\s -> let (a,y) = m s in unState (k a) y) - return k = State (\s -> (k,s)) - - - -- extracts the state from the monad -get :: StateM State -get = State (\s -> (s,s)) -put :: State -> StateM () -put s = State (\_ -> ((),s)) -modify :: (State -> State) -> StateM () -modify sf = State (\s -> ((), sf s)) - --- ============================= - ---------------- ******************************************** --------------------------- - -(<|>) :: AltType -> AltType -> AltType -(p <|> q) idx inhx ((i,a),inp) c - = do (l1,m) <- p idx inhx ((i,[]),inp) c - (l2,n) <- q idx inhx ((i,[]),inp) c - return ((union (fst l1) (fst l2),[]) ,(m ++ n)) - --------------------------------------------------------- -(*>) :: SeqType -> SeqType -> SeqType -(p *> q) idx inhx semx resx - ((i,a),inp) cc - = do (l,m) <- p idx inhx semx resx - ((i,[]),inp) cc - let passCtxt e - = if e == i then cc - else empty_cuts - mergeCuts e prev new - = if e == i - then (union prev new) - else prev - - apply_to_all q [] l cc - = return ((fst l,[]),[]) - - apply_to_all q (r:rs) l cc - = do (l1,m) <- q `add_P` (r,cc) - (l2,n) <- apply_to_all q rs l cc - return ((union (fst l1) (fst l2),[]),( m ++ n)) - - q `add_P` (rp,cc) - = do let e = pickEnd rp - (l1,m) <- (q idx inhx semx resx (e,inp) (passCtxt (fst e))) - return ((mergeCuts (fst e) (fst l) (fst l1),[]),(addP m rp)) - - (apply_to_all q m l cc) -- CHANGE cc HERE - -pickEnd (((s,iA),(e,a)),t) = (e,[]) - -addP [] ((s1,e1),t1) = [] -addP ((((s2,inA2),(e2,synA2)),t2):restQ) (((s1,inA1),(e1,synA1)),t1) - = (((s1,[]),(e2,[])), a_P_Q_branch) : addP restQ (((s1,inA1),(e1,synA1)),t1) - - where - a_P_Q_branch = addToBranch (((s2,inA2),(e2,synA2)),t2) (((s1,inA1),(e1,synA1)),t1) - --------- ************* --------------- -addToBranch (q1,((SubNode (name2,q)):ts2)) - (p1,((SubNode (name1,p)):ts1)) - = [Branch [(SubNode (name1,p)),(SubNode (name2,q))]] - -addToBranch (q1,((Branch t2):ts2)) - (p1,((Branch t1):ts1)) - = [Branch (t1++t2)] - -addToBranch (q1,((Branch t2):ts)) - (p1,((SubNode (name1,p)):ts1)) - = [Branch ((SubNode (name1,p)):t2)] - -addToBranch (q1,((SubNode (name2,q)):ts2)) - (p1,((Branch t1):ts)) - = [Branch (t1++[(SubNode (name2,q))])] - - -addToBranch (q1,((SubNode (name2,q)):ts2)) - (p1,[Leaf (x,i)]) - = [Branch [(SubNode ((x,i) ,p1)),(SubNode (name2,q))]] -addToBranch (q1,[Leaf (x,i)]) - (p1,((SubNode (name1,p)):ts1)) - = [Branch [(SubNode (name1,p)),(SubNode ((x,i),q1))]] -addToBranch (q1,((Branch t2):ts)) - (p1,[Leaf (x,i)]) - = [Branch ((SubNode ((x,i),p1)):t2)] -addToBranch (q1,[Leaf (x,i)]) - (p1,((Branch t1):ts)) - = [Branch (t1++[(SubNode ((x,i),q1))])] -addToBranch (q1,[Leaf (x2,i2)]) - (p1,[Leaf (x1,i1)]) = [Branch [(SubNode ((x1,i1),p1)),(SubNode ((x2,i2),q1))]] - --------- ************* --------------- - - -empty_cuts = ([],[]) -empty :: [(Instance, Atts)] -> M Foo -empty atts (x,inp) l = return (empty_cuts,[((x,(fst x,atts)), [Leaf (Emp, (NILL,O0))])]) - -term :: String -> Instance -> [(Instance, Atts)] -> [(Instance, Atts)] -> M Foo -term c id atts iatts ((r,a),dInp) l - |r - 1 == length dInp = return (empty_cuts,[]) - |dInp!!(r - 1) == c = return (empty_cuts,[(((r,[]),(r+1,atts)),[Leaf (ALeaf c, id)])]) - |otherwise = return (empty_cuts,[]) - - -memoize name f id downAtts ((inp,dAtts),dInput) context - = do s <- get - case (lookupT name inp (snd context) s) of - Just lRes -> do let lookUpRes = addNode name (S, id) (inp,downAtts) (snd1 lRes) - return (fst1 lRes,lookUpRes) - Nothing - | funccount (snd context) inp name > (length dInput) - inp + 1 - -> return (([name],[]),[]) - | otherwise -> do let iC = ([],(incContext (snd context) name inp)) - (l,newRes) <- f id downAtts ((inp,dAtts),dInput) iC - -- let ((l,newRes),s1) = unState (f id downAtts (inp,dAtts) iC) s - let l1 = makeContext (fst l) (findContext (snd context) inp) - s1 <- get - let udtTab = udt (l1,newRes) s1 name (inp,downAtts) - let newFoundRes = addNode name (S, id) (inp,downAtts) newRes - put udtTab - return ( l1 ,newFoundRes) - - - - -findContext [] inp = [] -findContext ((st,rest):sr) inp| st == inp = [(st,rest)] - | otherwise = findContext sr inp - - - - -funccount [] inp name = 0 -funccount ((key,funcp):rest) inp name | key == inp = findf funcp - | otherwise = funccount rest inp name - - where - findf [] = 0 - findf ((tk,fc):rx) | tk == name = fc - | otherwise = findf rx - - -fst1 [(a,b)] = a -snd1 [(a,b)] = b - -makeContext [] [(st,((n,c):ncs))] = ([],[]) -makeContext (r:rs) [] = ((r:rs),[]) -makeContext [] [] = ([],[]) -makeContext (r:rs) [(st,((n,c):ncs))] = ((r:rs), [(st,makeContext_ (r:rs) ((n,c):ncs))]) - -makeContext_ [] ((n,c):ncs) = [] -makeContext_ (r:rs) ((n,c):ncs) = makeContext__ r ((n,c):ncs) ++ makeContext_ rs ((n,c):ncs) - -makeContext__ r [] = [] -makeContext__ r ((n,c):ncs) | r == n = (n,c): makeContext__ r ncs - | otherwise = makeContext__ r ncs - - -incContext [] name inp = [(inp,[(name,1)])] -incContext ((st,((n,c):nc)):sn) name inp - | st == inp = ((st, (addNT ((n,c):nc)) name inp ) :sn) - | otherwise = ((st,((n,c):nc)): incContext sn name inp ) - - -addNT [] name inp = [(name,1)] -addNT ((n,c):nc) name inp | n == name = ((n,(c + 1)):nc) - | otherwise = ((n,c):addNT nc name inp) - - -addNode name id (s',dA) [] - = [] -addNode name id (s',dA) oldRes -- ((((s,newIh),(e,atts)),t):rs) - = let res = packAmb oldRes - newSh x = [ ((sOri, snd id),attVal)| ((sOri, idOld),attVal)<- x] - in [(((s,newIh),(e, newSh atts)),[SubNode ((name, id),((s,nub dA),(e, newSh atts)))]) - | (((s,newIh),(e,atts)),t) <- oldRes] -mapName i [] = [] -mapName i ((i',r):rest) = (i,r): mapName i rest - - -packAmb [] = [] -packAmb [((s1,e1),t1)] = [((s1,e1),t1)] -packAmb [((s1,e1),t1),((s2,e2),t2)] | isEq (s1,e1) (s2,e2) = [((s2,(fst e2, groupAtts (snd e1 ++ snd e2))), t1++t2)] - | otherwise = [((s1,e1),t1),((s2,e2),t2)] - -packAmb (((s1,e1),t1):((s2,e2),t2):xs) | isEq (s1,e1) (s2,e2) = packAmb (((s2,(fst e2, groupAtts (snd e1 ++ snd e2))), t1++t2):xs) - | otherwise = ((s1,e1),t1):packAmb (((s2,e2),t2):xs) - -isEq ((s1,b1),(e1,y1)) ((s2,b2),(e2,y2)) - | s1 == s2 && e1 == e2 = True - | otherwise = False - - -lookupT name inp context mTable - | lookupT1 name inp context mTable == [] = Nothing - | otherwise = Just (lookupT1 name inp context mTable) - - -lookupT1 name inp context mTable | res_in_table == [] = [] - | otherwise = checkUsability inp context (lookupRes (res_in_table !! 0) inp) - - where - res_in_table = [pairs|(n,pairs) <- mTable,n == name] - - -lookupRes [] inp = [] -lookupRes (((i,dA),res):rs) inp | i == inp = [res] - | otherwise = lookupRes rs inp - - -checkUsability inp context [] = [] -checkUsability inp context [((re,sc),res)] | re == [] = [((re,sc),res)] - | otherwise = checkUsability_ (findInp inp context) (findInp inp sc) [((re,sc),res)] - - -findInp inp [] = [] -findInp inp ((s,c):sc) | s == inp = c - | otherwise = findInp inp sc - - -checkUsability_ [] [] [(sc,res)] = [(sc,res)] -checkUsability_ ((n,cs):ccs) [] [(sc,res)] = [(sc,res)] -- if lc at j is empty then re-use -checkUsability_ [] ((n1,cs1):scs) [(sc,res)] = [] -- if cc at j is empty then don't re-use -checkUsability_ ((n,cs):ccs) ((n1,cs1):scs) [(sc,res)] - | and $ condCheck ((n,cs):ccs) ((n1,cs1):scs) = [(sc,res)] - | otherwise = [] - - - -condCheck ((n,cs):ccs) [(n1,cs1)] = [condCheck_ ((n,cs):ccs) (n1,cs1)] -condCheck ((n,cs):ccs) ((n1,cs1):scs) = condCheck_ ((n,cs):ccs) (n1,cs1) : condCheck ((n,cs):ccs) scs - -condCheck_ [] (n1,cs1) = False -condCheck_ ((n,cs):ccs) (n1,cs1) - | n1 == n && cs >= cs1 = True - | n1 == n && cs < cs1 = False - | otherwise = condCheck_ ccs (n1,cs1) - - - -udt :: (Context, Result) -> State -> MemoL -> Start1 -> State -udt res mTable name (inp,dAtts) - = update mTable name (inp,dAtts) res - -update [] name (inp,dAtts) res = [(name,[((inp,dAtts), res)])] -update ((key, pairs):rest) name (inp,dAtts) res - | key == name = (key,my_merge (inp,dAtts) res pairs):rest - | otherwise = ((key, pairs): update rest name (inp,dAtts) res ) - - -my_merge (inp,dAtts) res [] = [((inp,nub dAtts), res)] -my_merge (inp,dAtts) res (((i,dA), es):rest) - |inp == i = ((inp,nub dAtts{-nub (dA ++ dAtts)-}), res):rest - |otherwise = ((i,dA), es): my_merge (inp,dAtts) res rest - - -pickResult ((c,r),t) = r - - ---------------- ************************* semantics of ATTRIBUTE GRAMMAR ************************* -------------------------- - -terminal syn semRules id inhAtts ((i,a),inp) c - = do syn (S,id) [((S,id),semRules)] inhAtts ((i,[]),inp) c - -nt :: NTType -> Id -> SeqType -nt fx idx id inhAtts semRules altFromSibs - = let groupRule'' id rules = [rule | (ud,rule) <- rules, id == ud] - ownInAtts = mapInherited (groupRule'' (I, idx) semRules) altFromSibs inhAtts id - in fx idx ownInAtts - -parser :: SeqType -> [SemRule] -> Id -> InsAttVals -> M Foo -parser synRule semRules id inhAtts i c - = do - s <- get - let ((e,altFromSibs),d) = - let sRule = groupRule'' (S, LHS) semRules - ((l,newRes),st) = unState ((synRule id inhAtts semRules altFromSibs) i c) s - groupRule'' id rules = [rule | (ud,rule) <- rules, id == ud] - in ((l, mapSynthesize sRule newRes inhAtts id),st) - put d - return (e,altFromSibs) - - - - -mapSynthesize [] res downAtts id = res -mapSynthesize sems res downAtts id - = let appSems' [] vals = [] - appSems' (r:rules) vals - = let [((ud, id'), atts)] = r (vals, id) - in [((ud, id), atts)] ++ appSems' rules vals - in [(((st,inAtts), (en,appSems' sems (findAtts t))),[t]) - |(((st,inAtts), (en,synAtts)),[t]) <- res] - - --- mapSem' [] _ _ = [] -mapInherited sems res [] id - = let appSems [] vals = [] - appSems (r:rules) vals = r (vals, id) ++ appSems rules vals - in concat [appSems sems (findAtts t) | (((st,inAtts), (en,synAtts)),[t]) <- res] - -mapInherited sems [] downAtts id - = let appSems [] vals = [] - appSems (r:rules) vals = r (vals, id) ++ appSems rules vals - in appSems sems downAtts -- concat ( map (appSems id sems) (group downAtts)) - -mapInherited sems res downAtts id - = let appSems [] vals = [] - appSems (r:rules) vals = r (vals, id) ++ appSems rules vals - in concat [appSems sems ((groupAtts downAtts) ++ synAtts ++ (findAtts t)) - | (((st,inAtts), (en,synAtts)),[t]) <- res] - --------------------------------------- -gMax [] = [] -gMax [(a,[b])] = [(a,[b])] - -gMax [(a,[b]),(a1,[b1])] | getAVAL b >= getAVAL b1 = [(a,[b])] - | otherwise = [(a1,[b1])] - -gMax ((a,[b]):(a1,[b1]):rest) | getAVAL b >= getAVAL b1 = gMax ((a,[b]):rest) - | otherwise = gMax ((a1,[b1]):rest) - - -groupAtts [] = [] -groupAtts [(a,b)] = [(a,b)] -groupAtts [(a,b),(a1,b1)] = [(a,b++b1)] -groupAtts ((a,b):(a1,b1):rest) = (a,b++b1): groupAtts rest - --------------------------------------- -findAtts (Branch (t:ts)) - = findAtts t ++ findAtts (Branch ts) -findAtts (SubNode ((n,i),((s,v'),(e,v)))) = v' ++ v -findAtts (Leaf (a,id)) = [] -findAtts (Branch []) = [] - -addAtts x y = x ++ y - --------------------------------------------------------- - - -rule_i = rule I -rule_s = rule S - -rule s_or_i typ oF pID isEq userFun listOfExp - = let formAtts id spec = (id, (forNode id . spec)) - forNode id atts = [(id, atts)] - resType = userFun listOfExp - in formAtts (s_or_i,pID) (setAtt (typ undefined) . resType) - - - ----- **** ----- - -synthesized = valOf S -inherited = valOf I - -valOf :: SorI -> (a -> AttValue) -> Useless -> Id -> [(Instance, Atts)] -> Id -> [AttValue] -valOf ud typ o_f x ivs x' | x == LHS = getAttVals (ud , x') ivs typ - | otherwise = getAttVals (ud , x ) ivs typ - -getAttVals :: Instance -> [(Instance, Atts)] -> (a -> AttValue) -> [AttValue] -getAttVals x ((i,v):ivs) typ = - let typeCheck typ t = if (typ undefined) == t then True else False - getAttVals_ typ (t:tvs) = if (typ undefined) == t then (t :getAttVals_ typ tvs) - else getAttVals_ typ tvs - getAttVals_ typ [] = [] -- ErrorVal {-- 100 --} "ERROR id found but no value" - in - if(i == x) then getAttVals_ typ v else getAttVals x ivs typ -getAttVals x [] typ = [ErrorVal {-- 200 --} "ERROR no id"] - - --------- ************************************** ------------ - -------------------------- user functions ------------------ -apply :: [(Instance,Atts)] -> Id -> ([(Instance,Atts)] -> Id -> AttValue) -> Int -apply y i x = getAVAL (x y i) -apply_ y i x = getB_OP (x y i) - -apply__ :: [(Instance,Atts)] -> Id -> ([(Instance,Atts)] -> Id -> AttValue) -> DisplayTree -apply__ y i x = getRVAL (x y i) - -applyMax y i x = getAVAL (foldr (getMax) (MaxVal 0) (x y i)) -getMax x y = MaxVal (max (getAVAL x) (getAVAL y)) - -findMax spec = \(atts,i) -> - MaxVal (foldr (max) 0 (map (applyMax atts i) spec)) -convertRep spec = \(atts,i) -> - RepVal (foldr (max) 0 (map (applyMax atts i) spec)) - -makeTree (x:xs) = \(atts,i) -> Res (B (map (apply__ atts i) (x:xs))) - -mt [a,b,c] = (B [a,b,c]) -mt [a] = (B [a]) - ------------ for arithmetic expr ----------------- -applyBiOp [e1,op,e2] - = \atts -> VAL ((getAtts getB_OP atts op ) (getAtts getAVAL atts e1 ) (getAtts getAVAL atts e2)) -getAtts f (y,i) x - = f (head (x y i)) - ------------ general copy ------------------------ -copy [b] - = \(atts,i) -> head (b atts i) -getTypVal ((a,b):abs) t | a undefined == t = b t - | otherwise = getTypVal abs t - - ------------ for arithmetic expr ----------------- - -toTree [b] = \(atts,i) -> Res (N ((map (apply atts i) [b])!!0)) - - - - --- JUNK TEST ----- - - - --------- MAIN ---------- ---------------- EXAMPLE EX-SPEC FOR TREE-REPLACEMENT ---------------- - -start = memoize Start - (parser - (nt tree T0) - [ - rule_i RepVal OF T0 ISEQUALTO convertRep [synthesized MaxVal OF T0] - ] - ) - -tree = memoize Tree - ( parser - (nt tree T1 *> nt tree T2 *> nt num T3) - [ rule_s MaxVal OF LHS ISEQUALTO findMax [ synthesized MaxVal OF T1, - synthesized MaxVal OF T2, - synthesized MaxVal OF T3 - ], - rule_i RepVal OF T1 ISEQUALTO convertRep [inherited RepVal OF LHS], - rule_i RepVal OF T2 ISEQUALTO convertRep [inherited RepVal OF LHS], - rule_i RepVal OF T3 ISEQUALTO convertRep [inherited RepVal OF LHS] - ] - <|> - parser - (nt num N1) - [ rule_i RepVal OF N1 ISEQUALTO convertRep [inherited RepVal OF LHS], - rule_s MaxVal OF LHS ISEQUALTO findMax [synthesized MaxVal OF N1] - ] - - - ) - - -num = memoize Num - ( - terminal (term "1") [MaxVal 1] <|> - terminal (term "2") [MaxVal 2] <|> - terminal (term "3") [MaxVal 3] <|> - terminal (term "4") [MaxVal 4] <|> - terminal (term "5") [MaxVal 5] - ) ------------------------------------------------- Arithmetic Expression ------------------------------------------------ - -eT - = memoize ET - ( - parser - (nt expr E1) - [rule_s VAL OF LHS ISEQUALTO copy [synthesized VAL OF E1]] - ) - -expr = memoize Expr - ( - parser - (nt expr E1 *> nt op O1 *> nt expr E2) - [rule_s VAL OF LHS ISEQUALTO applyBiOp [synthesized VAL OF E1, - synthesized B_OP OF O1, - synthesized VAL OF E2] - ] - - <|> - parser - (nt num N1) - [rule_s VAL OF LHS ISEQUALTO copy [synthesized MaxVal OF N1]] - ) - -op = memoize Op - ( - terminal (term "+") [B_OP (+)] <|> - terminal (term "-") [B_OP (-)] <|> - terminal (term "*") [B_OP (*)] <|> - terminal (term "/") [B_OP (div)] - ) - ------------------------------------------------- Arithmetic Expression ------------------------------------------------ - ------------ PrettyPrint ------------------------ -po :: (PP' a) => (String -> IO ()) -> a -> IO () -po act x = do - stuff <- pp' x - act $ render80 stuff - -render80 = renderStyle (style{lineLength = 80}) - - -class PP' a where - pp' :: a -> IO Doc - -instance PP' Doc where - pp' c = return c - -instance PP' Char where - pp' c = return $ text $ show c -instance PP' AttValue where - pp' (VAL i) = showio (VAL i) >>= return . text - pp' (B_OP i)= showio (B_OP i) >>= return .text - - -instance PP' Int where - pp' i = return $ text $ show i - -instance PP' Id where - pp' i = return $ text $ show i - -instance PP' a => PP' (Maybe a) where - pp' Nothing = return $ text "Nothing" - pp' (Just x) = pp' x >>= (\y -> return $ parens $ text "Just" PPH.<+> y) - -instance (PP' a, PP' b) => PP' (a,b) where - -- pp' (a,b) = parens $ pp' a PPH.<+> text "->" PPH.<+> pp' b - pp' (a,b) = pp' a >>= \z -> (pp' b >>= (\y -> return $ z PPH.<+> text "->" PPH.<+> y)) -instance PP' a => PP' [a] where - pp' [] = return $ brackets $ text "" - pp' (x:xs) = liftM sep $ (liftM2 (:)) (pp' x) (sequence [ pp' y | y <- xs ]) - -instance (Show t) => PP' (Tree t) where - -- pp' Empty = text "{_}" - pp' (Leaf x) = return $ text "Leaf" PPH.<+> text (show x) - pp' (Branch ts) = liftM2 (PPH.<+>) (return $ text "Branch") (liftM brackets $ liftM sep $ liftM (punctuate comma) $ sequence $ map pp' ts) - --pp' (SubNode (x,(s,e))) = return $ text "SubNode" PPH.<+> text (show x) PPH.<+> text (show (s,e)) - -- PPH.<+> pp' ts - -{-TODO: -format :: Mtable -> Doc -format t - = vcat - [ text (show s) - $$ - nest 3 (pp' [text "START at:" PPH.<+> pp' i PPH.<+> text "; Inherited atts:" PPH.<+> vcat [vcat [text (showID id0) PPH.<+> vcat [text (show ty0v0) |ty0v0 <-val0]|(id0,val0)<-inAt1]] PPH.<+> - text "" $$ vcat [{- text "Inherited Atts. -" - - $$ - vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-(nub inAtt2)]] - - $$-} nest 3 - ( text "END at:" PPH.<+> pp' end - $$ text "Synthesized Atts. -" - - $$ vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] - - $$ text "Packed Tree -" - - $$ pp' ts) - |(((st,inAtt2),(end,synAtts)), ts)<-rs] - - | ((i,inAt1),((cs,ct),rs)) <- sr ]) - - - | (s,sr) <- t ] --} - - -showID (x,y) = show y -- only the instance - - ---- ** printing ony own atts ** --- -{-TODO: -formatAtts :: MemoL -> Mtable -> Doc -formatAtts key t - = vcat - [ text (show s) - $$ - nest 3 (pp' [text "START at:" PPH.<+> pp' i PPH.<+> text "; Inherited atts:" PPH.<+> vcat [vcat [text (showID id0) PPH.<+> vcat [text (show ty0v0) |ty0v0 <-val0]|(id0,val0)<-inAt1]] PPH.<+> - text "" $$ vcat [nest 3 - ( text "END at:" PPH.<+> pp' end - $$ text "Synthesized Atts. -" - - $$ vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] - - -- $$ text "Packed Tree -" - - {- $$ pp' ts -} ) - |(((st,inAtt2),(end,synAtts)), ts)<-rs] - - | ((i,inAt1),((cs,ct),rs)) <- sr ]) - - - | (s,sr) <- t, s == key ] --} - -formatAttsFinalAlt :: MemoL -> Int -> State -> IO [Doc] -formatAttsFinalAlt key e t = - --return [pp' [vcat [(vcat [vcat [vcat [text (show ty1v1) |ty1v1<-val1] - sequence [(sequence [liftM vcat $ sequence [(liftM vcat $ sequence [liftM vcat $ sequence [liftM vcat $ sequence [liftM text (showio ty1v1) | ty1v1<-val1] - |(id1,val1)<-synAtts]] ) - |(((st,inAtt2),(end,synAtts)), ts)<-rs, end == e] - | ((i,inAt1),((cs,ct),rs)) <- sr ]) >>= pp' | (s,sr) <- t, s == key ] - -{-formatAttsFinal key t = - [(pp' [vcat [(vcat [vcat [vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] )|(((st,inAtt2),(end,synAtts)), ts)<-rs] - - | ((i,inAt1),((cs,ct),rs)) <- sr ]) | (s,sr) <- t, s == key ]-} - --- *************** for printing the fist element of the return pair *************** -{-TODO: -formatForFst ::Result -> Doc -formatForFst res = vcat - -- [text (show ty0v0) |ty0v0 <-val0]|(id0,val0)<-inAt1]] PPH.PPH.<+> text "" $$ vcat - - [ text "START at:" PPH.<+> pp' st - - {- - $$ text "Inherited Atts. -" - $$ vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-inAtt2]] - -} - - PPH.<+> text "END at:" PPH.<+> pp' end - $$ nest 3 - (text "Synthesized Atts. of" - - PPH.<+> vcat [vcat [text (showID id1) PPH.<+> text "::" PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] - - $$ pp' ts) - |(((st,inAtt2),(end,synAtts)), ts)<-res] - - --} --- *************** for printing the fist element of the return pair *************** - ------------ PrettyPrint -------------------------- - +{-# LANGUAGE Trustworthy #-}+module AGParser2 where+import Prelude hiding ((*>))+import Text.PrettyPrint.HughesPJ as PPH hiding (empty) -- ((PPH.<+>), vcat, text, render,($$),nest,Doc)+import Data.List+import TypeAg2+import Control.Monad+import Control.Applicative hiding ((<|>), (*>))+++++---- ************************************ -----------------------++type Instance = IRec+ +data SorI = S | I |NILL deriving (Eq,Ord,Show, Enum) + -- Synthesized or inherited or NILL+++type IRec = (SorI, Id) + -- uniquely determines synthesized or inherited attribute for an NT+ +data Useless = OF|ISEQUALTO deriving (Show, Eq)+ -- for decorating the semantic rules+++ +data SRule_ = NT {iden :: Id, par :: NTType} | Rule {par' :: SeqType} | DRule {par'' :: SRule_ } ++type NTType = Id -> InsAttVals -> M Foo+type SeqType = Id -> InsAttVals -> [SemRule] -> Result -> M Foo+type AltType = NTType+type SemRule = (Instance,(InsAttVals, Id) -> InsAttVals)+------------+data Tree a = Leaf (a,Instance)+ | Branch [Tree a] + | SubNode ((NodeName, Instance), (Start1,End))+ deriving (Eq)+++type NodeName = MemoL+type Start1 = (Int, InsAttVals)+type Start = ((Int,InsAttVals), [String])+type End = (Int, InsAttVals)+type Atts = [AttValue] -- [(AttType, AttValue)]+type InsAttVals = [(Instance, Atts)]+++type Mtable = [(MemoL+ ,[(Start1,(Context,Result))]+ )+ ] +type Result = [((Start1, End),[Tree MemoL])]++type State = Mtable+type Context = ([MemoL],[(Int,[(MemoL, Int)])])++type M a = Start -> Context -> StateM a+type Seq a = Id -> InsAttVals -> [SemRule] -> Result -> Start -> Context -> StateM a+type Foo = (Context, Result)++-- ============================+newtype StateM t = State { unState :: State -> (t,State) }++instance Functor StateM where+ fmap = liftM++instance Applicative StateM where+ pure = return+ (<*>) = ap -- defined in Control.Monad++instance Monad StateM where+ -- defines state propagation+ State m >>= k + = State (\s -> let (a,y) = m s in unState (k a) y)+ return k = State (\s -> (k,s))+++ -- extracts the state from the monad+get :: StateM State+get = State (\s -> (s,s))+put :: State -> StateM ()+put s = State (\_ -> ((),s))+modify :: (State -> State) -> StateM ()+modify sf = State (\s -> ((), sf s))++-- =============================++--------------- ******************************************** ---------------------------++(<|>) :: AltType -> AltType -> AltType+(p <|> q) idx inhx ((i,a),inp) c + = do (l1,m) <- p idx inhx ((i,[]),inp) c + (l2,n) <- q idx inhx ((i,[]),inp) c+ return ((union (fst l1) (fst l2),[]) ,(m ++ n))++--------------------------------------------------------+(*>) :: SeqType -> SeqType -> SeqType+(p *> q) idx inhx semx resx + ((i,a),inp) cc + = do (l,m) <- p idx inhx semx resx + ((i,[]),inp) cc + let passCtxt e + = if e == i then cc + else empty_cuts+ mergeCuts e prev new + = if e == i + then (union prev new) + else prev + + apply_to_all q [] l cc + = return ((fst l,[]),[])+ + apply_to_all q (r:rs) l cc + = do (l1,m) <- q `add_P` (r,cc)+ (l2,n) <- apply_to_all q rs l cc+ return ((union (fst l1) (fst l2),[]),( m ++ n))+ + q `add_P` (rp,cc) + = do let e = pickEnd rp+ (l1,m) <- (q idx inhx semx resx (e,inp) (passCtxt (fst e))) + return ((mergeCuts (fst e) (fst l) (fst l1),[]),(addP m rp)) + + (apply_to_all q m l cc) -- CHANGE cc HERE+ +pickEnd (((s,iA),(e,a)),t) = (e,[]) + +addP [] ((s1,e1),t1) = []+addP ((((s2,inA2),(e2,synA2)),t2):restQ) (((s1,inA1),(e1,synA1)),t1) + = (((s1,[]),(e2,[])), a_P_Q_branch) : addP restQ (((s1,inA1),(e1,synA1)),t1)+ + where+ a_P_Q_branch = addToBranch (((s2,inA2),(e2,synA2)),t2) (((s1,inA1),(e1,synA1)),t1)++-------- ************* ---------------+addToBranch (q1,((SubNode (name2,q)):ts2)) + (p1,((SubNode (name1,p)):ts1)) + = [Branch [(SubNode (name1,p)),(SubNode (name2,q))]]++addToBranch (q1,((Branch t2):ts2)) + (p1,((Branch t1):ts1))+ = [Branch (t1++t2)]++addToBranch (q1,((Branch t2):ts)) + (p1,((SubNode (name1,p)):ts1))+ = [Branch ((SubNode (name1,p)):t2)]++addToBranch (q1,((SubNode (name2,q)):ts2)) + (p1,((Branch t1):ts))+ = [Branch (t1++[(SubNode (name2,q))])]+ ++addToBranch (q1,((SubNode (name2,q)):ts2)) + (p1,[Leaf (x,i)])+ = [Branch [(SubNode ((x,i) ,p1)),(SubNode (name2,q))]]+addToBranch (q1,[Leaf (x,i)]) + (p1,((SubNode (name1,p)):ts1)) + = [Branch [(SubNode (name1,p)),(SubNode ((x,i),q1))]]+addToBranch (q1,((Branch t2):ts)) + (p1,[Leaf (x,i)])+ = [Branch ((SubNode ((x,i),p1)):t2)]+addToBranch (q1,[Leaf (x,i)]) + (p1,((Branch t1):ts))+ = [Branch (t1++[(SubNode ((x,i),q1))])]+addToBranch (q1,[Leaf (x2,i2)]) + (p1,[Leaf (x1,i1)]) = [Branch [(SubNode ((x1,i1),p1)),(SubNode ((x2,i2),q1))]]++-------- ************* ---------------+++empty_cuts = ([],[]) +empty :: [(Instance, Atts)] -> M Foo+empty atts (x,inp) l = return (empty_cuts,[((x,(fst x,atts)), [Leaf (Emp, (NILL,O0))])])++term :: String -> Instance -> [(Instance, Atts)] -> [(Instance, Atts)] -> M Foo+term c id atts iatts ((r,a),dInp) l + |r - 1 == length dInp = return (empty_cuts,[])+ |dInp!!(r - 1) == c = return (empty_cuts,[(((r,[]),(r+1,atts)),[Leaf (ALeaf c, id)])])+ |otherwise = return (empty_cuts,[]) ++ +memoize name f id downAtts ((inp,dAtts),dInput) context + = do s <- get + case (lookupT name inp (snd context) s) of + Just lRes -> do let lookUpRes = addNode name (S, id) (inp,downAtts) (snd1 lRes) + return (fst1 lRes,lookUpRes)+ Nothing+ | funccount (snd context) inp name > (length dInput) - inp + 1+ -> return (([name],[]),[])+ | otherwise -> do let iC = ([],(incContext (snd context) name inp))+ (l,newRes) <- f id downAtts ((inp,dAtts),dInput) iC + -- let ((l,newRes),s1) = unState (f id downAtts (inp,dAtts) iC) s+ let l1 = makeContext (fst l) (findContext (snd context) inp)+ s1 <- get+ let udtTab = udt (l1,newRes) s1 name (inp,downAtts) + let newFoundRes = addNode name (S, id) (inp,downAtts) newRes+ put udtTab+ return ( l1 ,newFoundRes)++ +++findContext [] inp = []+findContext ((st,rest):sr) inp| st == inp = [(st,rest)]+ | otherwise = findContext sr inp+ + + ++funccount [] inp name = 0+funccount ((key,funcp):rest) inp name | key == inp = findf funcp + | otherwise = funccount rest inp name++ where+ findf [] = 0+ findf ((tk,fc):rx) | tk == name = fc + | otherwise = findf rx + + +fst1 [(a,b)] = a+snd1 [(a,b)] = b ++makeContext [] [(st,((n,c):ncs))] = ([],[])+makeContext (r:rs) [] = ((r:rs),[])+makeContext [] [] = ([],[])+makeContext (r:rs) [(st,((n,c):ncs))] = ((r:rs), [(st,makeContext_ (r:rs) ((n,c):ncs))])++makeContext_ [] ((n,c):ncs) = []+makeContext_ (r:rs) ((n,c):ncs) = makeContext__ r ((n,c):ncs) ++ makeContext_ rs ((n,c):ncs)++makeContext__ r [] = []+makeContext__ r ((n,c):ncs) | r == n = (n,c): makeContext__ r ncs+ | otherwise = makeContext__ r ncs+++incContext [] name inp = [(inp,[(name,1)])]+incContext ((st,((n,c):nc)):sn) name inp + | st == inp = ((st, (addNT ((n,c):nc)) name inp ) :sn) + | otherwise = ((st,((n,c):nc)): incContext sn name inp )+ ++addNT [] name inp = [(name,1)]+addNT ((n,c):nc) name inp | n == name = ((n,(c + 1)):nc)+ | otherwise = ((n,c):addNT nc name inp)+ ++addNode name id (s',dA) [] + = [] +addNode name id (s',dA) oldRes -- ((((s,newIh),(e,atts)),t):rs) + = let res = packAmb oldRes+ newSh x = [ ((sOri, snd id),attVal)| ((sOri, idOld),attVal)<- x]+ in [(((s,newIh),(e, newSh atts)),[SubNode ((name, id),((s,nub dA),(e, newSh atts)))]) + | (((s,newIh),(e,atts)),t) <- oldRes]+mapName i [] = []+mapName i ((i',r):rest) = (i,r): mapName i rest+++packAmb [] = []+packAmb [((s1,e1),t1)] = [((s1,e1),t1)]+packAmb [((s1,e1),t1),((s2,e2),t2)] | isEq (s1,e1) (s2,e2) = [((s2,(fst e2, groupAtts (snd e1 ++ snd e2))), t1++t2)]+ | otherwise = [((s1,e1),t1),((s2,e2),t2)]++packAmb (((s1,e1),t1):((s2,e2),t2):xs) | isEq (s1,e1) (s2,e2) = packAmb (((s2,(fst e2, groupAtts (snd e1 ++ snd e2))), t1++t2):xs)+ | otherwise = ((s1,e1),t1):packAmb (((s2,e2),t2):xs)++isEq ((s1,b1),(e1,y1)) ((s2,b2),(e2,y2))+ | s1 == s2 && e1 == e2 = True+ | otherwise = False+ ++lookupT name inp context mTable + | lookupT1 name inp context mTable == [] = Nothing+ | otherwise = Just (lookupT1 name inp context mTable) +++lookupT1 name inp context mTable | res_in_table == [] = [] + | otherwise = checkUsability inp context (lookupRes (res_in_table !! 0) inp)+ + where + res_in_table = [pairs|(n,pairs) <- mTable,n == name]+++lookupRes [] inp = []+lookupRes (((i,dA),res):rs) inp | i == inp = [res]+ | otherwise = lookupRes rs inp +++checkUsability inp context [] = []+checkUsability inp context [((re,sc),res)] | re == [] = [((re,sc),res)]+ | otherwise = checkUsability_ (findInp inp context) (findInp inp sc) [((re,sc),res)]+++findInp inp [] = []+findInp inp ((s,c):sc) | s == inp = c+ | otherwise = findInp inp sc++ +checkUsability_ [] [] [(sc,res)] = [(sc,res)]+checkUsability_ ((n,cs):ccs) [] [(sc,res)] = [(sc,res)] -- if lc at j is empty then re-use+checkUsability_ [] ((n1,cs1):scs) [(sc,res)] = [] -- if cc at j is empty then don't re-use+checkUsability_ ((n,cs):ccs) ((n1,cs1):scs) [(sc,res)] + | and $ condCheck ((n,cs):ccs) ((n1,cs1):scs) = [(sc,res)]+ | otherwise = []+ + ++condCheck ((n,cs):ccs) [(n1,cs1)] = [condCheck_ ((n,cs):ccs) (n1,cs1)]+condCheck ((n,cs):ccs) ((n1,cs1):scs) = condCheck_ ((n,cs):ccs) (n1,cs1) : condCheck ((n,cs):ccs) scs++condCheck_ [] (n1,cs1) = False+condCheck_ ((n,cs):ccs) (n1,cs1) + | n1 == n && cs >= cs1 = True+ | n1 == n && cs < cs1 = False+ | otherwise = condCheck_ ccs (n1,cs1)+ +++udt :: (Context, Result) -> State -> MemoL -> Start1 -> State+udt res mTable name (inp,dAtts) + = update mTable name (inp,dAtts) res + +update [] name (inp,dAtts) res = [(name,[((inp,dAtts), res)])]+update ((key, pairs):rest) name (inp,dAtts) res + | key == name = (key,my_merge (inp,dAtts) res pairs):rest+ | otherwise = ((key, pairs): update rest name (inp,dAtts) res )+++my_merge (inp,dAtts) res [] = [((inp,nub dAtts), res)]+my_merge (inp,dAtts) res (((i,dA), es):rest) + |inp == i = ((inp,nub dAtts{-nub (dA ++ dAtts)-}), res):rest + |otherwise = ((i,dA), es): my_merge (inp,dAtts) res rest +++pickResult ((c,r),t) = r+++--------------- ************************* semantics of ATTRIBUTE GRAMMAR ************************* --------------------------++terminal syn semRules id inhAtts ((i,a),inp) c + = do syn (S,id) [((S,id),semRules)] inhAtts ((i,[]),inp) c++nt :: NTType -> Id -> SeqType+nt fx idx id inhAtts semRules altFromSibs + = let groupRule'' id rules = [rule | (ud,rule) <- rules, id == ud]+ ownInAtts = mapInherited (groupRule'' (I, idx) semRules) altFromSibs inhAtts id + in fx idx ownInAtts ++parser :: SeqType -> [SemRule] -> Id -> InsAttVals -> M Foo+parser synRule semRules id inhAtts i c+ = do+ s <- get+ let ((e,altFromSibs),d) =+ let sRule = groupRule'' (S, LHS) semRules+ ((l,newRes),st) = unState ((synRule id inhAtts semRules altFromSibs) i c) s+ groupRule'' id rules = [rule | (ud,rule) <- rules, id == ud]+ in ((l, mapSynthesize sRule newRes inhAtts id),st)+ put d+ return (e,altFromSibs)+ + + + +mapSynthesize [] res downAtts id = res+mapSynthesize sems res downAtts id+ = let appSems' [] vals = []+ appSems' (r:rules) vals + = let [((ud, id'), atts)] = r (vals, id) + in [((ud, id), atts)] ++ appSems' rules vals + in [(((st,inAtts), (en,appSems' sems (findAtts t))),[t]) + |(((st,inAtts), (en,synAtts)),[t]) <- res]+ ++-- mapSem' [] _ _ = []+mapInherited sems res [] id + = let appSems [] vals = []+ appSems (r:rules) vals = r (vals, id) ++ appSems rules vals + in concat [appSems sems (findAtts t) | (((st,inAtts), (en,synAtts)),[t]) <- res]+ +mapInherited sems [] downAtts id + = let appSems [] vals = []+ appSems (r:rules) vals = r (vals, id) ++ appSems rules vals + in appSems sems downAtts -- concat ( map (appSems id sems) (group downAtts))++mapInherited sems res downAtts id + = let appSems [] vals = []+ appSems (r:rules) vals = r (vals, id) ++ appSems rules vals + in concat [appSems sems ((groupAtts downAtts) ++ synAtts ++ (findAtts t)) + | (((st,inAtts), (en,synAtts)),[t]) <- res]++--------------------------------------+gMax [] = []+gMax [(a,[b])] = [(a,[b])]++gMax [(a,[b]),(a1,[b1])] | getAVAL b >= getAVAL b1 = [(a,[b])]+ | otherwise = [(a1,[b1])]++gMax ((a,[b]):(a1,[b1]):rest) | getAVAL b >= getAVAL b1 = gMax ((a,[b]):rest)+ | otherwise = gMax ((a1,[b1]):rest)+++groupAtts [] = []+groupAtts [(a,b)] = [(a,b)]+groupAtts [(a,b),(a1,b1)] = [(a,b++b1)]+groupAtts ((a,b):(a1,b1):rest) = (a,b++b1): groupAtts rest ++--------------------------------------+findAtts (Branch (t:ts)) + = findAtts t ++ findAtts (Branch ts)+findAtts (SubNode ((n,i),((s,v'),(e,v)))) = v' ++ v+findAtts (Leaf (a,id)) = [] +findAtts (Branch []) = []++addAtts x y = x ++ y++--------------------------------------------------------+++rule_i = rule I+rule_s = rule S++rule s_or_i typ oF pID isEq userFun listOfExp + = let formAtts id spec = (id, (forNode id . spec))+ forNode id atts = [(id, atts)]+ resType = userFun listOfExp+ in formAtts (s_or_i,pID) (setAtt (typ undefined) . resType)++++---- **** -----++synthesized = valOf S+inherited = valOf I++valOf :: SorI -> (a -> AttValue) -> Useless -> Id -> [(Instance, Atts)] -> Id -> [AttValue]+valOf ud typ o_f x ivs x' | x == LHS = getAttVals (ud , x') ivs typ+ | otherwise = getAttVals (ud , x ) ivs typ++getAttVals :: Instance -> [(Instance, Atts)] -> (a -> AttValue) -> [AttValue]+getAttVals x ((i,v):ivs) typ =+ let typeCheck typ t = if (typ undefined) == t then True else False+ getAttVals_ typ (t:tvs) = if (typ undefined) == t then (t :getAttVals_ typ tvs)+ else getAttVals_ typ tvs + getAttVals_ typ [] = [] -- ErrorVal {-- 100 --} "ERROR id found but no value"+ in + if(i == x) then getAttVals_ typ v else getAttVals x ivs typ+getAttVals x [] typ = [ErrorVal {-- 200 --} "ERROR no id"]++ +-------- ************************************** ------------++------------------------- user functions ------------------ +apply :: [(Instance,Atts)] -> Id -> ([(Instance,Atts)] -> Id -> AttValue) -> Int+apply y i x = getAVAL (x y i)+apply_ y i x = getB_OP (x y i)++apply__ :: [(Instance,Atts)] -> Id -> ([(Instance,Atts)] -> Id -> AttValue) -> DisplayTree+apply__ y i x = getRVAL (x y i)++applyMax y i x = getAVAL (foldr (getMax) (MaxVal 0) (x y i))+getMax x y = MaxVal (max (getAVAL x) (getAVAL y))++findMax spec = \(atts,i) -> + MaxVal (foldr (max) 0 (map (applyMax atts i) spec))+convertRep spec = \(atts,i) -> + RepVal (foldr (max) 0 (map (applyMax atts i) spec))++makeTree (x:xs) = \(atts,i) -> Res (B (map (apply__ atts i) (x:xs)))++mt [a,b,c] = (B [a,b,c]) +mt [a] = (B [a])++----------- for arithmetic expr ----------------- +applyBiOp [e1,op,e2] + = \atts -> VAL ((getAtts getB_OP atts op ) (getAtts getAVAL atts e1 ) (getAtts getAVAL atts e2))+getAtts f (y,i) x + = f (head (x y i))++----------- general copy ------------------------+copy [b] + = \(atts,i) -> head (b atts i)+getTypVal ((a,b):abs) t | a undefined == t = b t+ | otherwise = getTypVal abs t+++----------- for arithmetic expr ----------------- ++toTree [b] = \(atts,i) -> Res (N ((map (apply atts i) [b])!!0))++ +++-- JUNK TEST -----++++-------- MAIN ----------+--------------- EXAMPLE EX-SPEC FOR TREE-REPLACEMENT ----------------++start = memoize Start + (parser + (nt tree T0)+ [+ rule_i RepVal OF T0 ISEQUALTO convertRep [synthesized MaxVal OF T0]+ ]+ )+ +tree = memoize Tree + ( parser + (nt tree T1 *> nt tree T2 *> nt num T3)+ [ rule_s MaxVal OF LHS ISEQUALTO findMax [ synthesized MaxVal OF T1, + synthesized MaxVal OF T2,+ synthesized MaxVal OF T3+ ], + rule_i RepVal OF T1 ISEQUALTO convertRep [inherited RepVal OF LHS],+ rule_i RepVal OF T2 ISEQUALTO convertRep [inherited RepVal OF LHS],+ rule_i RepVal OF T3 ISEQUALTO convertRep [inherited RepVal OF LHS]+ ]+ <|> + parser + (nt num N1)+ [ rule_i RepVal OF N1 ISEQUALTO convertRep [inherited RepVal OF LHS],+ rule_s MaxVal OF LHS ISEQUALTO findMax [synthesized MaxVal OF N1]+ ] +++ )+ ++num = memoize Num+ (+ terminal (term "1") [MaxVal 1] <|> + terminal (term "2") [MaxVal 2] <|>+ terminal (term "3") [MaxVal 3] <|> + terminal (term "4") [MaxVal 4] <|> + terminal (term "5") [MaxVal 5] + )+------------------------------------------------ Arithmetic Expression ------------------------------------------------++eT + = memoize ET+ (+ parser+ (nt expr E1)+ [rule_s VAL OF LHS ISEQUALTO copy [synthesized VAL OF E1]]+ )+ +expr = memoize Expr+ (+ parser+ (nt expr E1 *> nt op O1 *> nt expr E2)+ [rule_s VAL OF LHS ISEQUALTO applyBiOp [synthesized VAL OF E1,+ synthesized B_OP OF O1,+ synthesized VAL OF E2] + ]+ + <|> + parser+ (nt num N1)+ [rule_s VAL OF LHS ISEQUALTO copy [synthesized MaxVal OF N1]]+ )++op = memoize Op+ (+ terminal (term "+") [B_OP (+)] <|> + terminal (term "-") [B_OP (-)] <|> + terminal (term "*") [B_OP (*)] <|> + terminal (term "/") [B_OP (div)] + )++------------------------------------------------ Arithmetic Expression ------------------------------------------------++----------- PrettyPrint ------------------------+po :: (PP' a) => (String -> IO ()) -> a -> IO ()+po act x = do+ stuff <- pp' x+ act $ render80 stuff+ +render80 = renderStyle (style{lineLength = 80})+++class PP' a where+ pp' :: a -> IO Doc++instance PP' Doc where+ pp' c = return c++instance PP' Char where+ pp' c = return $ text $ show c+instance PP' AttValue where+ pp' (VAL i) = showio (VAL i) >>= return . text+ pp' (B_OP i)= showio (B_OP i) >>= return .text+ + +instance PP' Int where+ pp' i = return $ text $ show i+ +instance PP' Id where+ pp' i = return $ text $ show i ++instance PP' a => PP' (Maybe a) where+ pp' Nothing = return $ text "Nothing"+ pp' (Just x) = pp' x >>= (\y -> return $ parens $ text "Just" PPH.<+> y)++instance (PP' a, PP' b) => PP' (a,b) where+ -- pp' (a,b) = parens $ pp' a PPH.<+> text "->" PPH.<+> pp' b+ pp' (a,b) = pp' a >>= \z -> (pp' b >>= (\y -> return $ z PPH.<+> text "->" PPH.<+> y))+instance PP' a => PP' [a] where+ pp' [] = return $ brackets $ text ""+ pp' (x:xs) = liftM sep $ (liftM2 (:)) (pp' x) (sequence [ pp' y | y <- xs ])+ +instance (Show t) => PP' (Tree t) where+ -- pp' Empty = text "{_}"+ pp' (Leaf x) = return $ text "Leaf" PPH.<+> text (show x)+ pp' (Branch ts) = liftM2 (PPH.<+>) (return $ text "Branch") (liftM brackets $ liftM sep $ liftM (punctuate comma) $ sequence $ map pp' ts)+ --pp' (SubNode (x,(s,e))) = return $ text "SubNode" PPH.<+> text (show x) PPH.<+> text (show (s,e)) + -- PPH.<+> pp' ts++{-TODO:+format :: Mtable -> Doc+format t+ = vcat+ [ text (show s) + $$ + nest 3 (pp' [text "START at:" PPH.<+> pp' i PPH.<+> text "; Inherited atts:" PPH.<+> vcat [vcat [text (showID id0) PPH.<+> vcat [text (show ty0v0) |ty0v0 <-val0]|(id0,val0)<-inAt1]] PPH.<+>+ text "" $$ vcat [{- text "Inherited Atts. -" + + $$ + vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-(nub inAtt2)]] + + $$-} nest 3+ ( text "END at:" PPH.<+> pp' end + $$ text "Synthesized Atts. -"+ + $$ vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] + + $$ text "Packed Tree -"+ + $$ pp' ts)+ |(((st,inAtt2),(end,synAtts)), ts)<-rs] + + | ((i,inAt1),((cs,ct),rs)) <- sr ])+ + + | (s,sr) <- t ]+-}+ ++showID (x,y) = show y -- only the instance+++--- ** printing ony own atts ** ---+{-TODO:+formatAtts :: MemoL -> Mtable -> Doc+formatAtts key t+ = vcat+ [ text (show s) + $$ + nest 3 (pp' [text "START at:" PPH.<+> pp' i PPH.<+> text "; Inherited atts:" PPH.<+> vcat [vcat [text (showID id0) PPH.<+> vcat [text (show ty0v0) |ty0v0 <-val0]|(id0,val0)<-inAt1]] PPH.<+>+ text "" $$ vcat [nest 3+ ( text "END at:" PPH.<+> pp' end + $$ text "Synthesized Atts. -"+ + $$ vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] + + -- $$ text "Packed Tree -"+ + {- $$ pp' ts -} )+ |(((st,inAtt2),(end,synAtts)), ts)<-rs] + + | ((i,inAt1),((cs,ct),rs)) <- sr ])+ + + | (s,sr) <- t, s == key ]+-}+ +formatAttsFinalAlt :: MemoL -> Int -> State -> IO [Doc]+formatAttsFinalAlt key e t = + --return [pp' [vcat [(vcat [vcat [vcat [text (show ty1v1) |ty1v1<-val1]+ sequence [(sequence [liftM vcat $ sequence [(liftM vcat $ sequence [liftM vcat $ sequence [liftM vcat $ sequence [liftM text (showio ty1v1) | ty1v1<-val1]+ |(id1,val1)<-synAtts]] )+ |(((st,inAtt2),(end,synAtts)), ts)<-rs, end == e] + | ((i,inAt1),((cs,ct),rs)) <- sr ]) >>= pp' | (s,sr) <- t, s == key ]++{-formatAttsFinal key t = + [(pp' [vcat [(vcat [vcat [vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]] )|(((st,inAtt2),(end,synAtts)), ts)<-rs] + + | ((i,inAt1),((cs,ct),rs)) <- sr ]) | (s,sr) <- t, s == key ]-}+ +-- *************** for printing the fist element of the return pair ***************+{-TODO:+formatForFst ::Result -> Doc+formatForFst res = vcat + -- [text (show ty0v0) |ty0v0 <-val0]|(id0,val0)<-inAt1]] PPH.PPH.<+> text "" $$ vcat + + [ text "START at:" PPH.<+> pp' st + + {-+ $$ text "Inherited Atts. -" + $$ vcat [vcat [text (showID id1) PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-inAtt2]] + -}+ + PPH.<+> text "END at:" PPH.<+> pp' end + $$ nest 3 + (text "Synthesized Atts. of"+ + PPH.<+> vcat [vcat [text (showID id1) PPH.<+> text "::" PPH.<+> vcat [text (show ty1v1) |ty1v1<-val1]|(id1,val1)<-synAtts]]+ + $$ pp' ts)+ |(((st,inAtt2),(end,synAtts)), ts)<-res] +++-}+-- *************** for printing the fist element of the return pair ***************++----------- PrettyPrint --------------------------+
Getts.hs view
@@ -1,276 +1,279 @@-{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE NoMonomorphismRestriction #-} - -module Getts where -import Data.List -import Control.Monad -import Debug.Trace - ---For endpoint query -import Data.RDF hiding (triple, Triple) -import Database.HSparql.Connection -import Database.HSparql.QueryGenerator -import Data.Text hiding (head, concat, map, zip, drop, length) - -import qualified Data.Map as M -import Data.IORef -import System.IO.Unsafe - -addUri namespace_uri = (namespace_uri ++) - ---getts returns all triples in the triple store that match the given parameters -class TripleStore m where - getts_1 :: m -> (Event, String, String) -> IO [String] - getts_2 :: m -> (Event, String, String) -> IO [String] - getts_3 :: m -> (Event, String, String) -> IO [String] - --getts_image computes the relation [(x,e)] such that e is an event of type ev_type - --and x is a subject of that event. This is a default implementation that can be overridden - --in instances. Output is expected to be sorted. - getts_image :: m -> String -> String -> IO Image - getts_image ev_data ev_type entity_type = do - evs <- getts_1 ev_data ("?", "type", ev_type) - getts_inverse ev_data entity_type evs - - --getts_inverse returns the entities of entity_type of the events in the list evs - getts_inverse :: m -> String -> [Event] -> IO Image - getts_inverse ev_data entity_type evs = do - pairs <- liftM concat $ mapM (\ev -> do - ents <- getts_3 ev_data (ev, entity_type,"?") - return $ zip ents (repeat ev)) evs - return $ condense $ sortFirst pairs - - --getts_members returns - getts_members :: (TripleStore m) => m -> String -> IO Image - getts_members ev_data set = do - evs_with_set_as_object <- getts_1 ev_data ("?", "object", set) - evs_with_type_membership <- getts_1 ev_data ("?", "type", "membership") - getts_inverse ev_data "subject" $ intersect evs_with_set_as_object evs_with_type_membership - - -sortFirst = sortBy (\x y -> compare (fst x) (fst y)) - -type Event = String -type Triple = (Event, String, String) -type Image = [(String,[Event])] - ---For the "In Program" triple store -instance TripleStore [Triple] where - getts_1 ev_data ("?", b, c) = return [x | (x,y,z) <- ev_data, b == y, c == z] - getts_2 ev_data (a, "?", c) = return [y | (x,y,z) <- ev_data, a == x, c == z] - getts_3 ev_data (a, b, "?") = return [z | (x,y,z) <- ev_data, a == x, b == y] - -data SPARQLBackend = SPARQL String String deriving (Ord, Eq) - ---the String in this instance is to be the endpoint that you wish to query -instance TripleStore SPARQLBackend where - --getts_1 = getts_1'' - getts_1 = memoIO getts_1'' - where - getts_1'' (SPARQL endpoint namespace_uri) ("?", b, c) = preprocess namespace_uri $ getts_1'(pack "?", pack (addUri namespace_uri b), pack (addUri namespace_uri c)) - where - getts_1' :: (t, Text, Text) -> IO [[BindingValue]] - getts_1' (a, b, c) = do - (Just s) <- selectQuery endpoint getts_1_query - return s - where - getts_1_query = do - x <- var - triple x (iriRef b) (iriRef c) - distinct - return SelectQuery { queryVars = [x] } - --getts_2 = getts_2'' - getts_2 = memoIO getts_2'' - where - getts_2'' (SPARQL endpoint namespace_uri) (a, "?", c) = preprocess namespace_uri $ getts_2'(pack (addUri namespace_uri a), pack "?", pack (addUri namespace_uri c)) - where - getts_2' :: (Text, Text, Text) -> IO [[BindingValue]] - getts_2' (a, b, c) = do - (Just s) <- selectQuery endpoint getts_2_query - return s - where - getts_2_query = do - x <- var - triple (iriRef a) x (iriRef c) - distinct - return SelectQuery { queryVars = [x] } - --getts_3 = getts_3'' - getts_3 = memoIO getts_3'' - where - getts_3'' (SPARQL endpoint namespace_uri) (a, b, "?") = preprocess namespace_uri $ getts_3'(pack (addUri namespace_uri a), pack (addUri namespace_uri b), pack "?") - where - getts_3' :: (Text, Text, Text) -> IO [[BindingValue]] - getts_3' (a, b, c) = do - (Just s) <- selectQuery endpoint getts_3_query - return s - where - getts_3_query = do - x <- var - triple (iriRef a) (iriRef b) x - distinct - return SelectQuery { queryVars = [x] } - --Efficient implementation of getts_image for SPARQL backend - getts_image = memoIO''' getts_image''' - where - getts_image''' (SPARQL endpoint namespace_uri) ev_type en_type = do - m <- selectQuery endpoint query - case m of - (Just res) -> return $ condense $ map (\[x, y] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y)) res - Nothing -> return [] - where - query :: Query SelectQuery - query = do - sol <- prefix (pack "sol") (iriRef (pack namespace_uri)) - ev <- var - subj <- var - triple ev (sol .:. (pack "type")) (sol .:. (pack ev_type)) - triple ev (sol .:. (pack en_type)) subj - orderNext subj - distinct - return SelectQuery { queryVars = [subj,ev] } - - --Efficient implementation of getts_inverse for SPARQL backend - getts_inverse = memoIO'' getts_inverse'' - where - getts_inverse'' (SPARQL endpoint namespace_uri) en_type evs = do - m <- selectQuery endpoint query - case m of - (Just res) -> return $ condense $ map (\[x, y] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y)) res - Nothing -> return [] - where - query = do - sol <- prefix (pack "sol") (iriRef (pack namespace_uri)) - subj <- var - ev <- var - triple ev (sol .:. (pack en_type)) subj - filterExpr $ regex ev $ (pack $ Data.List.intercalate "|" (map (++ "$") evs)) - --Data.List.foldr1 Database.HSparql.QueryGenerator.union $ map (\ev -> triple (sol .:. pack(ev)) (sol .:. pack("subject")) subj) evs -- UNION nesting problem - distinct - return SelectQuery { queryVars = [subj,ev] } - - --Efficient implementation of getts_members for SPARQL backend - - getts_members = memoIO' getts_members' - --getts_members = getts_members' - where - getts_members' (SPARQL endpoint namespace_uri) set = do - m <- selectQuery endpoint query - case m of - (Just res) -> return $ condense $ map (\[x, y] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y)) res - Nothing -> return [] - where - query :: Query SelectQuery - query = do - sol <- prefix (pack "sol") (iriRef (pack namespace_uri)) - ev <- var - subj <- var - triple ev (sol .:. (pack "type")) (sol .:. (pack "membership")) - triple ev (sol .:. (pack "subject")) subj - triple ev (sol .:. (pack "object")) (sol .:. (pack set)) - orderNext subj - distinct - return SelectQuery { queryVars = [subj,ev] } - - -removeUri :: String -> String -> String -removeUri namespace_uri = drop $ length namespace_uri - -preprocess :: String -> IO [[BindingValue]] -> IO [String] -preprocess namespace_uri bvals = bvals >>= \x -> return $ map (removeUri namespace_uri . deconstruct) $ concat x - - -deconstruct :: BindingValue -> String -deconstruct value = do - let (Bound node) = value - case node of - UNode strURI -> unpack strURI - LNode (PlainL strLit) -> unpack strLit - - - -memotable :: IORef (M.Map (SPARQLBackend,(String,String,String)) [String]) -memotable = unsafePerformIO $ newIORef M.empty - -memoIO ::(SPARQLBackend -> (String, String, String) -> IO [String]) -> SPARQLBackend -> (String, String, String) -> IO [String] -memoIO f a x = do - m <- readIORef memotable - case M.lookup (a,x) m of - Nothing -> f a x >>= \q -> (writeIORef memotable (M.insert (a,x) q m) >> return q) - Just r -> return r - -memotable' :: IORef (M.Map (SPARQLBackend,String) Image) -memotable' = unsafePerformIO $ newIORef M.empty - -memoIO' ::(SPARQLBackend -> (String) -> IO Image) -> SPARQLBackend -> (String) -> IO Image -memoIO' f a x = do - m <- readIORef memotable' - case M.lookup (a,x) m of - Nothing -> f a x >>= \q -> (writeIORef memotable' (M.insert (a,x) q m) >> return q) - Just r -> return r - -memotable'' :: IORef (M.Map (SPARQLBackend,String,[String]) Image) -memotable'' = unsafePerformIO $ newIORef M.empty - -memoIO'' ::(SPARQLBackend -> String -> [String] -> IO Image) -> SPARQLBackend -> String -> [String] -> IO Image -memoIO'' f a x y = do - m <- readIORef memotable'' - case M.lookup (a,x,y) m of - Nothing -> f a x y >>= \q -> (writeIORef memotable'' (M.insert (a,x,y) q m) >> return q) - Just r -> return r - -memotable''' :: IORef (M.Map (SPARQLBackend,String,String) Image) -memotable''' = unsafePerformIO $ newIORef M.empty - -memoIO''' ::(SPARQLBackend -> String -> String -> IO Image) -> SPARQLBackend -> String -> String -> IO Image -memoIO''' f a x y = do - m <- readIORef memotable''' - case M.lookup (a,x,y) m of - Nothing -> f a x y >>= \q -> (writeIORef memotable''' (M.insert (a,x,y) q m) >> return q) - Just r -> return r - - ---Get members of named set -get_members :: (TripleStore m) => m -> String -> IO Image -get_members = getts_members - ---Get all subjects of a given event type -get_subjs_of_event_type :: (TripleStore m) => m -> String -> IO Image -get_subjs_of_event_type ev_data ev_type = make_image ev_data ev_type "subject" - - -{-collect accepts a binary relation as input and computes the image img of each -element x in the projection of the left column of the relation, under the relation, -and returns all of these (x,img) pairs in a list - -Note: Since == is an equivalence relation, if multiple elements in the projection -of the left column are in the same equivalence class, only the first member of that -equivalence class that appears in the input list (as the left hand column of a tuple) -will appear in the output (as the left hand column of a tuple). - -That is, the first element of that equivalence class that appears in the input list -will be chosen to represent the entire equivalence class in the output. - --} - ---Faster collect: runs in n lg n time -collect = condense . sortFirst - ---condense computes the image under a sorted relation ---condense runs in O(n) time and is lazy, also is lazy in the list computed in each tuple -condense :: (Eq a, Ord a) => [(a, a)] -> [(a, [a])] -condense [] = [] -condense ((x,y):t) = (x, y:a):(condense r) - where - (a, r) = findall x t - findall x [] = ([], []) - findall x list@((t,y):ts) | x /= t = ([], list) - findall x ((t,y):ts) | x == t = let (a2, t2) = (findall x ts) in (y:a2, t2) - - ---make_image accepts an event type as input, determines all subjects for ---all events of that type, and computes the image under the relation ---for each subject as described in the collect function ---Arguments: triple store, Event type (i.e. join_rel), Entity type (i.e. subject, object) -make_image :: (TripleStore m) => m -> String -> String -> IO Image -make_image = getts_image - - +{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE NoMonomorphismRestriction #-}++module Getts where+import Data.List+import Control.Monad+import Debug.Trace++--For endpoint query+import Data.RDF hiding (triple, Triple)+import Database.HSparql.Connection+import Database.HSparql.QueryGenerator+import Data.Text hiding (head, concat, map, zip, drop, length)++import qualified Data.Map as M+import Data.IORef+import System.IO.Unsafe++addUri namespace_uri = (namespace_uri ++)++--getts returns all triples in the triple store that match the given parameters+class TripleStore m where+ getts_1 :: m -> (Event, String, String) -> IO [String]+ getts_2 :: m -> (Event, String, String) -> IO [String]+ getts_3 :: m -> (Event, String, String) -> IO [String]+ --getts_image computes the relation [(x,e)] such that e is an event of type ev_type+ --and x is a subject of that event. This is a default implementation that can be overridden+ --in instances. Output is expected to be sorted. TODO: Update this + getts_image :: m -> String -> String -> IO Image+ getts_image ev_data ev_type entity_type = do+ evs <- getts_1 ev_data ("?", "type", ev_type)+ getts_inverse ev_data entity_type evs+ + --getts_inverse returns the entities of entity_type of the events in the list evs+ getts_inverse :: m -> String -> [Event] -> IO Image+ getts_inverse ev_data entity_type evs = do+ pairs <- liftM concat $ mapM (\ev -> do+ ents <- getts_3 ev_data (ev, entity_type,"?")+ return $ zip ents (repeat ev)) evs+ return $ condense $ sortFirst pairs+ + --getts_members returns+ getts_members :: m -> String -> IO Image+ getts_members ev_data set = do+ evs_with_set_as_object <- getts_1 ev_data ("?", "object", set)+ evs_with_type_membership <- getts_1 ev_data ("?", "type", "membership")+ getts_inverse ev_data "subject" $ intersect evs_with_set_as_object evs_with_type_membership+ ++sortFirst = sortBy (\x y -> compare (fst x) (fst y))++type Event = String+type Triple = (Event, String, String)+type Image = [(String,[Event])]++--For the "In Program" triple store+instance TripleStore [Triple] where+ getts_1 ev_data ("?", b, c) = return [x | (x,y,z) <- ev_data, b == y, c == z]+ getts_2 ev_data (a, "?", c) = return [y | (x,y,z) <- ev_data, a == x, c == z]+ getts_3 ev_data (a, b, "?") = return [z | (x,y,z) <- ev_data, a == x, b == y]++data SPARQLBackend = SPARQL String String deriving (Ord, Eq)+ +--the String in this instance is to be the endpoint that you wish to query+instance TripleStore SPARQLBackend where+ --getts_1 = getts_1''+ getts_1 = memoIO getts_1''+ where+ getts_1'' (SPARQL endpoint namespace_uri) ("?", b, c) = preprocess namespace_uri $ getts_1'(pack "?", pack (addUri namespace_uri b), pack (addUri namespace_uri c))+ where+ getts_1' :: (t, Text, Text) -> IO [[BindingValue]]+ getts_1' (a, b, c) = do+ (Just s) <- selectQuery endpoint getts_1_query+ return s+ where+ getts_1_query = do + x <- var+ triple x (iriRef b) (iriRef c)+ distinct+ return SelectQuery { queryVars = [x] }+ --getts_2 = getts_2''+ getts_2 = memoIO getts_2''+ where+ getts_2'' (SPARQL endpoint namespace_uri) (a, "?", c) = preprocess namespace_uri $ getts_2'(pack (addUri namespace_uri a), pack "?", pack (addUri namespace_uri c))+ where+ getts_2' :: (Text, Text, Text) -> IO [[BindingValue]]+ getts_2' (a, b, c) = do+ (Just s) <- selectQuery endpoint getts_2_query + return s+ where+ getts_2_query = do + x <- var+ triple (iriRef a) x (iriRef c)+ distinct+ return SelectQuery { queryVars = [x] }+ --getts_3 = getts_3''+ getts_3 = memoIO getts_3''+ where+ getts_3'' (SPARQL endpoint namespace_uri) (a, b, "?") = preprocess namespace_uri $ getts_3'(pack (addUri namespace_uri a), pack (addUri namespace_uri b), pack "?")+ where+ getts_3' :: (Text, Text, Text) -> IO [[BindingValue]]+ getts_3' (a, b, c) = do+ (Just s) <- selectQuery endpoint getts_3_query + return s+ where+ getts_3_query = do + x <- var+ triple (iriRef a) (iriRef b) x+ distinct+ return SelectQuery { queryVars = [x] }+ --Efficient implementation of getts_image for SPARQL backend+ getts_image = memoIO''' getts_image'''+ where+ getts_image''' (SPARQL endpoint namespace_uri) ev_type en_type = do+ m <- selectQuery endpoint query+ case m of+ (Just res) -> return $ condense $ map (\[x, y] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y)) res+ Nothing -> return []+ where+ query :: Query SelectQuery+ query = do+ sol <- prefix (pack "sol") (iriRef (pack namespace_uri))+ ev <- var+ subj <- var+ triple ev (sol .:. (pack "type")) (sol .:. (pack ev_type))+ triple ev (sol .:. (pack en_type)) subj+ orderNext subj+ distinct+ return SelectQuery { queryVars = [subj,ev] }+ + --Efficient implementation of getts_inverse for SPARQL backend+ getts_inverse = memoIO'' getts_inverse''+ where+ getts_inverse'' (SPARQL endpoint namespace_uri) en_type evs = do+ m <- selectQuery endpoint query+ case m of+ (Just res) -> return $ condense $ map (\[x, y] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y)) res+ Nothing -> return []+ where+ query = do+ sol <- prefix (pack "sol") (iriRef (pack namespace_uri))+ subj <- var+ ev <- var+ triple ev (sol .:. (pack en_type)) subj+ filterExpr $ regex ev $ (pack $ Data.List.intercalate "|" (map (++ "$") evs))+ --Data.List.foldr1 Database.HSparql.QueryGenerator.union $ map (\ev -> triple (sol .:. pack(ev)) (sol .:. pack("subject")) subj) evs -- UNION nesting problem+ distinct+ return SelectQuery { queryVars = [subj,ev] } + + --Efficient implementation of getts_members for SPARQL backend+ + getts_members = memoIO' getts_members'+ --getts_members = getts_members'+ where+ getts_members' (SPARQL endpoint namespace_uri) set = do+ m <- selectQuery endpoint query+ case m of+ (Just res) -> return $ condense $ map (\[x, y] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y)) res+ Nothing -> return []+ where+ query :: Query SelectQuery+ query = do+ sol <- prefix (pack "sol") (iriRef (pack namespace_uri))+ ev <- var+ subj <- var+ triple ev (sol .:. (pack "type")) (sol .:. (pack "membership"))+ triple ev (sol .:. (pack "subject")) subj+ triple ev (sol .:. (pack "object")) (sol .:. (pack set))+ orderNext subj+ distinct+ return SelectQuery { queryVars = [subj,ev] }+ + +removeUri :: String -> String -> String +removeUri namespace_uri = drop $ length namespace_uri+ +preprocess :: String -> IO [[BindingValue]] -> IO [String]+preprocess namespace_uri bvals = bvals >>= \x -> return $ map (removeUri namespace_uri . deconstruct) $ concat x+++deconstruct :: BindingValue -> String+deconstruct value = do+ let (Bound node) = value+ case node of+ UNode strURI -> unpack strURI+ LNode (PlainL strLit) -> unpack strLit++++memotable :: IORef (M.Map (SPARQLBackend,(String,String,String)) [String])+memotable = unsafePerformIO $ newIORef M.empty++memoIO ::(SPARQLBackend -> (String, String, String) -> IO [String]) -> SPARQLBackend -> (String, String, String) -> IO [String]+memoIO f a x = do+ m <- readIORef memotable+ case M.lookup (a,x) m of+ Nothing -> f a x >>= \q -> (writeIORef memotable (M.insert (a,x) q m) >> return q)+ Just r -> return r+ +memotable' :: IORef (M.Map (SPARQLBackend,String) Image)+memotable' = unsafePerformIO $ newIORef M.empty++memoIO' ::(SPARQLBackend -> (String) -> IO Image) -> SPARQLBackend -> (String) -> IO Image+memoIO' f a x = do+ m <- readIORef memotable'+ case M.lookup (a,x) m of+ Nothing -> f a x >>= \q -> (writeIORef memotable' (M.insert (a,x) q m) >> return q)+ Just r -> return r+ +memotable'' :: IORef (M.Map (SPARQLBackend,String,[String]) Image)+memotable'' = unsafePerformIO $ newIORef M.empty++memoIO'' ::(SPARQLBackend -> String -> [String] -> IO Image) -> SPARQLBackend -> String -> [String] -> IO Image+memoIO'' f a x y = do+ m <- readIORef memotable''+ case M.lookup (a,x,y) m of+ Nothing -> f a x y >>= \q -> (writeIORef memotable'' (M.insert (a,x,y) q m) >> return q)+ Just r -> return r+ +memotable''' :: IORef (M.Map (SPARQLBackend,String,String) Image)+memotable''' = unsafePerformIO $ newIORef M.empty++memoIO''' ::(SPARQLBackend -> String -> String -> IO Image) -> SPARQLBackend -> String -> String -> IO Image+memoIO''' f a x y = do+ m <- readIORef memotable'''+ case M.lookup (a,x,y) m of+ Nothing -> f a x y >>= \q -> (writeIORef memotable''' (M.insert (a,x,y) q m) >> return q)+ Just r -> return r++ +--Get members of named set+get_members :: (TripleStore m) => m -> String -> IO Image+get_members = getts_members+ +--Get all subjects of a given event type+get_subjs_of_event_type :: (TripleStore m) => m -> String -> IO Image+get_subjs_of_event_type ev_data ev_type = make_image ev_data ev_type "subject"+++{-collect accepts a binary relation as input and computes the image img of each+element x in the projection of the left column of the relation, under the relation,+and returns all of these (x,img) pairs in a list++Note: Since == is an equivalence relation, if multiple elements in the projection+of the left column are in the same equivalence class, only the first member of that+equivalence class that appears in the input list (as the left hand column of a tuple)+will appear in the output (as the left hand column of a tuple).++That is, the first element of that equivalence class that appears in the input list+will be chosen to represent the entire equivalence class in the output.++-}+ +--Faster collect: runs in n lg n time+collect = condense . sortFirst+ +--condense computes the image under a sorted relation+--condense runs in O(n) time and is lazy, also is lazy in the list computed in each tuple+--TODO: Use Map.toList/fromList to simplify? Benchmark.+--In particular: Should unstableSortBy be used?+condense :: (Eq a, Ord a) => [(a, a)] -> [(a, [a])]+condense [] = []+condense ((x,y):t) = (x, y:a):(condense r)+ where + (a, r) = findall x t+ findall x [] = ([], [])+ findall x list@((t,y):ts) | x /= t = ([], list)+ findall x ((t,y):ts) | x == t = let (a2, t2) = (findall x ts) in (y:a2, t2)+++--make_image accepts an event type as input, determines all subjects for+--all events of that type, and computes the image under the relation+--for each subject as described in the collect function+--Arguments: triple store, Event type (i.e. join_rel), Entity type (i.e. subject, object)+make_image :: (TripleStore m) => m -> String -> String -> IO Image+make_image = getts_image + +
Main.hs view
@@ -1,4 +1,5 @@-#!/opt/csw/bin/runhaskell+{-# LANGUAGE Trustworthy #-}+ module Main where import qualified SolarmanTriplestore as App import Text.PrettyPrint.HughesPJ@@ -118,7 +119,7 @@ interpret' input = do let firstpass = interpret input if firstpass == "BLANKVALNOTUSED" then do- output <- App.main input+ output <- App.parse input let formatted = render $ vcat $ output if null formatted then return "Do not know that one yet, will work on it tonight" else return $ formatted else return firstpass
SolarmanTriplestore.hs view
@@ -1,5413 +1,1312 @@-{-# LANGUAGE NoMonomorphismRestriction #-} -module SolarmanTriplestore where - -import Prelude hiding ((*>)) -import Getts -import Data.List as List -import qualified Data.Set as Set -import AGParser2 -import TypeAg2 -import Control.Monad -import Debug.Trace - ---change between remoteData and localData ---dataStore = remoteData -dataStore = remoteData -- selects database - -endpoint_uri = "http://speechweb2.cs.uwindsor.ca/sparql" -namespace_uri = "http://solarman.richard.myweb.cs.uwindsor.ca#" -remoteData = SPARQL endpoint_uri namespace_uri - -localData = [("event1000", "object", "sol"), - ("event1000", "subject", "mercury"), - ("event1000", "type", "orbit_ev"), - ("event1001", "object", "sol"), - ("event1001", "subject", "venus"), - ("event1001", "type", "orbit_ev"), - ("event1002", "object", "sol"), - ("event1002", "subject", "earth"), - ("event1002", "type", "orbit_ev"), - ("event1003", "object", "sol"), - ("event1003", "subject", "mars"), - ("event1003", "type", "orbit_ev"), - ("event1004", "object", "sol"), - ("event1004", "subject", "jupiter"), - ("event1004", "type", "orbit_ev"), - ("event1005", "object", "sol"), - ("event1005", "subject", "saturn"), - ("event1005", "type", "orbit_ev"), - ("event1006", "object", "sol"), - ("event1006", "subject", "uranus"), - ("event1006", "type", "orbit_ev"), - ("event1007", "object", "sol"), - ("event1007", "subject", "neptune"), - ("event1007", "type", "orbit_ev"), - ("event1008", "object", "sol"), - ("event1008", "subject", "pluto"), - ("event1008", "type", "orbit_ev"), - ("event1009", "object", "earth"), - ("event1009", "subject", "luna"), - ("event1009", "type", "orbit_ev"), - ("event1010", "object", "mars"), - ("event1010", "subject", "phobos"), - ("event1010", "type", "orbit_ev"), - ("event1011", "object", "mars"), - ("event1011", "subject", "deimos"), - ("event1011", "type", "orbit_ev"), - ("event1012", "object", "jupiter"), - ("event1012", "subject", "almathea"), - ("event1012", "type", "orbit_ev"), - ("event1013", "object", "jupiter"), - ("event1013", "subject", "io"), - ("event1013", "type", "orbit_ev"), - ("event1014", "object", "jupiter"), - ("event1014", "subject", "europa"), - ("event1014", "type", "orbit_ev"), - ("event1015", "object", "jupiter"), - ("event1015", "subject", "ganymede"), - ("event1015", "type", "orbit_ev"), - ("event1016", "object", "jupiter"), - ("event1016", "subject", "callisto"), - ("event1016", "type", "orbit_ev"), - ("event1017", "object", "jupiter"), - ("event1017", "subject", "leda"), - ("event1017", "type", "orbit_ev"), - ("event1018", "object", "jupiter"), - ("event1018", "subject", "himalia"), - ("event1018", "type", "orbit_ev"), - ("event1019", "object", "jupiter"), - ("event1019", "subject", "lysithea"), - ("event1019", "type", "orbit_ev"), - ("event1020", "object", "jupiter"), - ("event1020", "subject", "elara"), - ("event1020", "type", "orbit_ev"), - ("event1021", "object", "jupiter"), - ("event1021", "subject", "ananke"), - ("event1021", "type", "orbit_ev"), - ("event1022", "object", "jupiter"), - ("event1022", "subject", "carme"), - ("event1022", "type", "orbit_ev"), - ("event1023", "object", "jupiter"), - ("event1023", "subject", "pasiphae"), - ("event1023", "type", "orbit_ev"), - ("event1024", "object", "jupiter"), - ("event1024", "subject", "sinope"), - ("event1024", "type", "orbit_ev"), - ("event1025", "object", "jupiter"), - ("event1025", "subject", "thebe"), - ("event1025", "type", "orbit_ev"), - ("event1026", "object", "saturn"), - ("event1026", "subject", "epimetheus"), - ("event1026", "type", "orbit_ev"), - ("event1027", "object", "saturn"), - ("event1027", "subject", "janus"), - ("event1027", "type", "orbit_ev"), - ("event1028", "object", "saturn"), - ("event1028", "subject", "mimas"), - ("event1028", "type", "orbit_ev"), - ("event1029", "object", "saturn"), - ("event1029", "subject", "enceladus"), - ("event1029", "type", "orbit_ev"), - ("event1030", "object", "saturn"), - ("event1030", "subject", "tethys"), - ("event1030", "type", "orbit_ev"), - ("event1031", "object", "saturn"), - ("event1031", "subject", "dione"), - ("event1031", "type", "orbit_ev"), - ("event1032", "object", "saturn"), - ("event1032", "subject", "rhea"), - ("event1032", "type", "orbit_ev"), - ("event1033", "object", "saturn"), - ("event1033", "subject", "titan"), - ("event1033", "type", "orbit_ev"), - ("event1034", "object", "saturn"), - ("event1034", "subject", "hyperion"), - ("event1034", "type", "orbit_ev"), - ("event1035", "object", "saturn"), - ("event1035", "subject", "iapetus"), - ("event1035", "type", "orbit_ev"), - ("event1036", "object", "saturn"), - ("event1036", "subject", "phoebe"), - ("event1036", "type", "orbit_ev"), - ("event1037", "object", "uranus"), - ("event1037", "subject", "miranda"), - ("event1037", "type", "orbit_ev"), - ("event1038", "object", "uranus"), - ("event1038", "subject", "ariel"), - ("event1038", "type", "orbit_ev"), - ("event1039", "object", "uranus"), - ("event1039", "subject", "umbriel"), - ("event1039", "type", "orbit_ev"), - ("event1040", "object", "uranus"), - ("event1040", "subject", "titania"), - ("event1040", "type", "orbit_ev"), - ("event1041", "object", "uranus"), - ("event1041", "subject", "oberon"), - ("event1041", "type", "orbit_ev"), - ("event1042", "object", "neptune"), - ("event1042", "subject", "triton"), - ("event1042", "type", "orbit_ev"), - ("event1043", "object", "neptune"), - ("event1043", "subject", "nereid"), - ("event1043", "type", "orbit_ev"), - ("event1044", "object", "pluto"), - ("event1044", "subject", "charon"), - ("event1044", "type", "orbit_ev"), - ("event1045", "location", "us_naval_observatory"), - ("event1045", "object", "phobos"), - ("event1045", "subject", "hall"), - ("event1045", "type", "discover_ev"), - ("event1045", "with_implement", "refractor_telescope_1"), - ("event1045", "year", "1877"), - ("event1046", "location", "us_naval_observatory"), - ("event1046", "object", "deimos"), - ("event1046", "subject", "hall"), - ("event1046", "type", "discover_ev"), - ("event1046", "with_implement", "refractor_telescope_1"), - ("event1046", "year", "1877"), - ("event1047", "location", "mt_hamilton"), - ("event1047", "object", "almathea"), - ("event1047", "subject", "bernard"), - ("event1047", "type", "discover_ev"), - ("event1047", "with_implement", "refractor_telescope_2"), - ("event1047", "year", "1892"), - ("event1048", "location", "padua"), - ("event1048", "object", "io"), - ("event1048", "subject", "galileo"), - ("event1048", "type", "discover_ev"), - ("event1048", "with_implement", "galilean_telescope_1"), - ("event1048", "year", "1610"), - ("event1049", "location", "padua"), - ("event1049", "object", "europa"), - ("event1049", "subject", "galileo"), - ("event1049", "type", "discover_ev"), - ("event1049", "with_implement", "galilean_telescope_1"), - ("event1049", "year", "1610"), - ("event1050", "location", "padua"), - ("event1050", "object", "ganymede"), - ("event1050", "subject", "galileo"), - ("event1050", "type", "discover_ev"), - ("event1050", "with_implement", "galilean_telescope_1"), - ("event1050", "year", "1610"), - ("event1051", "location", "padua"), - ("event1051", "object", "callisto"), - ("event1051", "subject", "galileo"), - ("event1051", "type", "discover_ev"), - ("event1051", "with_implement", "galilean_telescope_1"), - ("event1051", "year", "1610"), - ("event1052", "location", "mt_palomar"), - ("event1052", "object", "leda"), - ("event1052", "subject", "kowal"), - ("event1052", "type", "discover_ev"), - ("event1052", "with_implement", "schmidt_telescope"), - ("event1052", "year", "1974"), - ("event1053", "object", "thebe"), - ("event1053", "subject", "voyager_science_team"), - ("event1053", "type", "discover_ev"), - ("event1053", "with_implement", "voyager_1"), - ("event1053", "year", "1979"), - ("event1054", "location", "mt_hamilton"), - ("event1054", "object", "himalia"), - ("event1054", "subject", "perrine"), - ("event1054", "type", "discover_ev"), - ("event1054", "with_implement", "crossley_reflector_telescope"), - ("event1054", "year", "1904"), - ("event1055", "location", "mt_hamilton"), - ("event1055", "object", "elara"), - ("event1055", "subject", "perrine"), - ("event1055", "type", "discover_ev"), - ("event1055", "with_implement", "crossley_reflector_telescope"), - ("event1055", "year", "1905"), - ("event1056", "location", "mt_wilson"), - ("event1056", "object", "lysithea"), - ("event1056", "subject", "nicholson"), - ("event1056", "type", "discover_ev"), - ("event1056", "with_implement", "hooker_telescope"), - ("event1056", "year", "1938"), - ("event1057", "location", "mt_wilson"), - ("event1057", "object", "ananke"), - ("event1057", "subject", "nicholson"), - ("event1057", "type", "discover_ev"), - ("event1057", "with_implement", "hooker_telescope"), - ("event1057", "year", "1951"), - ("event1058", "location", "mt_wilson"), - ("event1058", "object", "carme"), - ("event1058", "subject", "nicholson"), - ("event1058", "type", "discover_ev"), - ("event1058", "with_implement", "hooker_telescope"), - ("event1058", "year", "1938"), - ("event1059", "location", "mt_hamilton"), - ("event1059", "object", "sinope"), - ("event1059", "subject", "nicholson"), - ("event1059", "type", "discover_ev"), - ("event1059", "with_implement", "refractor_telescope_2"), - ("event1059", "year", "1914"), - ("event1060", "location", "greenwich"), - ("event1060", "object", "pasiphae"), - ("event1060", "subject", "melotte"), - ("event1060", "type", "discover_ev"), - ("event1060", "with_implement", "cassegrain_telescope"), - ("event1060", "year", "1908"), - ("event1061", "location", "kitt_peak"), - ("event1061", "object", "epimetheus"), - ("event1061", "subject", "science_team_7"), - ("event1061", "type", "discover_ev"), - ("event1061", "year", "1977"), - ("event1062", "location", "liverpool"), - ("event1062", "object", "hyperion"), - ("event1062", "subject", "lassell"), - ("event1062", "type", "discover_ev"), - ("event1062", "year", "1848"), - ("event1063", "location", "pic_du_midi"), - ("event1063", "object", "janus"), - ("event1063", "subject", "dollfus"), - ("event1063", "type", "discover_ev"), - ("event1063", "with_implement", "telescope_1"), - ("event1063", "year", "1966"), - ("event1064", "location", "slough"), - ("event1064", "object", "mimas"), - ("event1064", "subject", "herschel"), - ("event1064", "type", "discover_ev"), - ("event1064", "with_implement", "reflector_telescope_1"), - ("event1064", "year", "1789"), - ("event1065", "location", "slough"), - ("event1065", "object", "enceladus"), - ("event1065", "subject", "herschel"), - ("event1065", "type", "discover_ev"), - ("event1065", "with_implement", "reflector_telescope_1"), - ("event1065", "year", "1789"), - ("event1066", "location", "slough"), - ("event1066", "object", "titania"), - ("event1066", "subject", "herschel"), - ("event1066", "type", "discover_ev"), - ("event1066", "year", "1787"), - ("event1067", "location", "slough"), - ("event1067", "object", "oberon"), - ("event1067", "subject", "herschel"), - ("event1067", "type", "discover_ev"), - ("event1067", "year", "1787"), - ("event1068", "location", "paris"), - ("event1068", "object", "tethys"), - ("event1068", "subject", "cassini"), - ("event1068", "type", "discover_ev"), - ("event1068", "with_implement", "aerial_telescope_1"), - ("event1068", "year", "1684"), - ("event1069", "location", "paris"), - ("event1069", "object", "dione"), - ("event1069", "subject", "cassini"), - ("event1069", "type", "discover_ev"), - ("event1069", "with_implement", "aerial_telescope_1"), - ("event1069", "year", "1684"), - ("event1070", "location", "paris"), - ("event1070", "object", "rhea"), - ("event1070", "subject", "cassini"), - ("event1070", "type", "discover_ev"), - ("event1070", "with_implement", "aerial_telescope_1"), - ("event1070", "year", "1672"), - ("event1071", "location", "paris"), - ("event1071", "object", "iapetus"), - ("event1071", "subject", "cassini"), - ("event1071", "type", "discover_ev"), - ("event1071", "with_implement", "aerial_telescope_1"), - ("event1071", "year", "1671"), - ("event1072", "location", "the_hague"), - ("event1072", "object", "titan"), - ("event1072", "subject", "huygens"), - ("event1072", "type", "discover_ev"), - ("event1072", "with_implement", "refractor_telescope_4"), - ("event1072", "year", "1655"), - ("event1073", "location", "cambridge"), - ("event1073", "object", "hyperion"), - ("event1073", "subject", "bond"), - ("event1073", "type", "discover_ev"), - ("event1073", "with_implement", "reflector_telescope_3"), - ("event1073", "year", "1848"), - ("event1074", "location", "arequipa"), - ("event1074", "object", "phoebe"), - ("event1074", "subject", "pickering"), - ("event1074", "type", "discover_ev"), - ("event1074", "with_implement", "bruce_astrograph"), - ("event1074", "year", "1898"), - ("event1075", "location", "fort_davis"), - ("event1075", "object", "miranda"), - ("event1075", "subject", "kuiper"), - ("event1075", "type", "discover_ev"), - ("event1075", "year", "1948"), - ("event1076", "location", "fort_davis"), - ("event1076", "object", "nereid"), - ("event1076", "subject", "kuiper"), - ("event1076", "type", "discover_ev"), - ("event1076", "with_implement", "ground_based_telescope_3"), - ("event1076", "year", "1949"), - ("event1077", "location", "liverpool"), - ("event1077", "object", "ariel"), - ("event1077", "subject", "lassell"), - ("event1077", "type", "discover_ev"), - ("event1077", "with_implement", "reflector_telescope_3"), - ("event1077", "year", "1851"), - ("event1078", "location", "liverpool"), - ("event1078", "object", "umbriel"), - ("event1078", "subject", "lassell"), - ("event1078", "type", "discover_ev"), - ("event1078", "with_implement", "reflector_telescope_3"), - ("event1078", "year", "1851"), - ("event1079", "type", "discover_ev"), - ("event1080", "object", "sun"), - ("event1080", "subject", "sol"), - ("event1080", "type", "membership"), - ("event1081", "object", "planet"), - ("event1081", "subject", "mercury"), - ("event1081", "type", "membership"), - ("event1082", "object", "planet"), - ("event1082", "subject", "venus"), - ("event1082", "type", "membership"), - ("event1083", "object", "planet"), - ("event1083", "subject", "earth"), - ("event1083", "type", "membership"), - ("event1084", "object", "planet"), - ("event1084", "subject", "mars"), - ("event1084", "type", "membership"), - ("event1085", "object", "planet"), - ("event1085", "subject", "jupiter"), - ("event1085", "type", "membership"), - ("event1086", "object", "planet"), - ("event1086", "subject", "saturn"), - ("event1086", "type", "membership"), - ("event1087", "object", "planet"), - ("event1087", "subject", "uranus"), - ("event1087", "type", "membership"), - ("event1088", "object", "planet"), - ("event1088", "subject", "neptune"), - ("event1088", "type", "membership"), - ("event1089", "object", "planet"), - ("event1089", "subject", "pluto"), - ("event1089", "type", "membership"), - ("event1090", "object", "moon"), - ("event1090", "subject", "luna"), - ("event1090", "type", "membership"), - ("event1091", "object", "moon"), - ("event1091", "subject", "phobos"), - ("event1091", "type", "membership"), - ("event1092", "object", "moon"), - ("event1092", "subject", "deimos"), - ("event1092", "type", "membership"), - ("event1093", "object", "moon"), - ("event1093", "subject", "almathea"), - ("event1093", "type", "membership"), - ("event1094", "object", "moon"), - ("event1094", "subject", "io"), - ("event1094", "type", "membership"), - ("event1095", "object", "moon"), - ("event1095", "subject", "europa"), - ("event1095", "type", "membership"), - ("event1096", "object", "moon"), - ("event1096", "subject", "ganymede"), - ("event1096", "type", "membership"), - ("event1097", "object", "moon"), - ("event1097", "subject", "callisto"), - ("event1097", "type", "membership"), - ("event1098", "object", "moon"), - ("event1098", "subject", "leda"), - ("event1098", "type", "membership"), - ("event1099", "object", "moon"), - ("event1099", "subject", "himalia"), - ("event1099", "type", "membership"), - ("event1100", "object", "moon"), - ("event1100", "subject", "lysithea"), - ("event1100", "type", "membership"), - ("event1101", "object", "moon"), - ("event1101", "subject", "elara"), - ("event1101", "type", "membership"), - ("event1102", "object", "moon"), - ("event1102", "subject", "ananke"), - ("event1102", "type", "membership"), - ("event1103", "object", "moon"), - ("event1103", "subject", "carme"), - ("event1103", "type", "membership"), - ("event1104", "object", "moon"), - ("event1104", "subject", "pasiphae"), - ("event1104", "type", "membership"), - ("event1105", "object", "moon"), - ("event1105", "subject", "sinope"), - ("event1105", "type", "membership"), - ("event1106", "object", "moon"), - ("event1106", "subject", "thebe"), - ("event1106", "type", "membership"), - ("event1107", "object", "moon"), - ("event1107", "subject", "epimetheus"), - ("event1107", "type", "membership"), - ("event1108", "object", "moon"), - ("event1108", "subject", "janus"), - ("event1108", "type", "membership"), - ("event1109", "object", "moon"), - ("event1109", "subject", "mimas"), - ("event1109", "type", "membership"), - ("event1110", "object", "moon"), - ("event1110", "subject", "enceladus"), - ("event1110", "type", "membership"), - ("event1111", "object", "moon"), - ("event1111", "subject", "tethys"), - ("event1111", "type", "membership"), - ("event1112", "object", "moon"), - ("event1112", "subject", "dione"), - ("event1112", "type", "membership"), - ("event1113", "object", "moon"), - ("event1113", "subject", "rhea"), - ("event1113", "type", "membership"), - ("event1114", "object", "moon"), - ("event1114", "subject", "titan"), - ("event1114", "type", "membership"), - ("event1115", "object", "moon"), - ("event1115", "subject", "hyperion"), - ("event1115", "type", "membership"), - ("event1116", "object", "moon"), - ("event1116", "subject", "iapetus"), - ("event1116", "type", "membership"), - ("event1117", "object", "moon"), - ("event1117", "subject", "phoebe"), - ("event1117", "type", "membership"), - ("event1118", "object", "moon"), - ("event1118", "subject", "miranda"), - ("event1118", "type", "membership"), - ("event1119", "object", "moon"), - ("event1119", "subject", "ariel"), - ("event1119", "type", "membership"), - ("event1120", "object", "moon"), - ("event1120", "subject", "umbriel"), - ("event1120", "type", "membership"), - ("event1121", "object", "moon"), - ("event1121", "subject", "titania"), - ("event1121", "type", "membership"), - ("event1122", "object", "moon"), - ("event1122", "subject", "oberon"), - ("event1122", "type", "membership"), - ("event1123", "object", "moon"), - ("event1123", "subject", "triton"), - ("event1123", "type", "membership"), - ("event1124", "object", "moon"), - ("event1124", "subject", "nereid"), - ("event1124", "type", "membership"), - ("event1125", "object", "moon"), - ("event1125", "subject", "charon"), - ("event1125", "type", "membership"), - ("event1126", "object", "person"), - ("event1126", "subject", "hall"), - ("event1126", "type", "membership"), - ("event1127", "object", "person"), - ("event1127", "subject", "bernard"), - ("event1127", "type", "membership"), - ("event1128", "object", "person"), - ("event1128", "subject", "galileo"), - ("event1128", "type", "membership"), - ("event1129", "object", "person"), - ("event1129", "subject", "kowal"), - ("event1129", "type", "membership"), - ("event1130", "object", "person"), - ("event1130", "subject", "perrine"), - ("event1130", "type", "membership"), - ("event1131", "object", "person"), - ("event1131", "subject", "nicholson"), - ("event1131", "type", "membership"), - ("event1132", "object", "person"), - ("event1132", "subject", "melotte"), - ("event1132", "type", "membership"), - ("event1133", "object", "person"), - ("event1133", "subject", "larson"), - ("event1133", "type", "membership"), - ("event1134", "object", "person"), - ("event1134", "subject", "fountain"), - ("event1134", "type", "membership"), - ("event1135", "object", "person"), - ("event1135", "subject", "dollfus"), - ("event1135", "type", "membership"), - ("event1136", "object", "person"), - ("event1136", "subject", "herschel"), - ("event1136", "type", "membership"), - ("event1137", "object", "person"), - ("event1137", "subject", "cassini"), - ("event1137", "type", "membership"), - ("event1138", "object", "person"), - ("event1138", "subject", "huygens"), - ("event1138", "type", "membership"), - ("event1139", "object", "person"), - ("event1139", "subject", "bond"), - ("event1139", "type", "membership"), - ("event1140", "object", "person"), - ("event1140", "subject", "pickering"), - ("event1140", "type", "membership"), - ("event1141", "object", "person"), - ("event1141", "subject", "kuiper"), - ("event1141", "type", "membership"), - ("event1142", "object", "person"), - ("event1142", "subject", "lassell"), - ("event1142", "type", "membership"), - ("event1143", "object", "atmospheric"), - ("event1143", "subject", "venus"), - ("event1143", "type", "membership"), - ("event1144", "object", "atmospheric"), - ("event1144", "subject", "earth"), - ("event1144", "type", "membership"), - ("event1145", "object", "atmospheric"), - ("event1145", "subject", "io"), - ("event1145", "type", "membership"), - ("event1146", "object", "atmospheric"), - ("event1146", "subject", "mars"), - ("event1146", "type", "membership"), - ("event1147", "object", "atmospheric"), - ("event1147", "subject", "titan"), - ("event1147", "type", "membership"), - ("event1148", "object", "atmospheric"), - ("event1148", "subject", "venus"), - ("event1148", "type", "membership"), - ("event1149", "object", "blue"), - ("event1149", "subject", "earth"), - ("event1149", "type", "membership"), - ("event1150", "object", "blue"), - ("event1150", "subject", "neptune"), - ("event1150", "type", "membership"), - ("event1151", "object", "blue"), - ("event1151", "subject", "saturn"), - ("event1151", "type", "membership"), - ("event1152", "object", "blue"), - ("event1152", "subject", "uranus"), - ("event1152", "type", "membership"), - ("event1153", "object", "depressed"), - ("event1153", "subject", "hall"), - ("event1153", "type", "membership"), - ("event1154", "object", "solid"), - ("event1154", "subject", "venus"), - ("event1154", "type", "membership"), - ("event1155", "object", "solid"), - ("event1155", "subject", "almathea"), - ("event1155", "type", "membership"), - ("event1156", "object", "solid"), - ("event1156", "subject", "ariel"), - ("event1156", "type", "membership"), - ("event1157", "object", "solid"), - ("event1157", "subject", "callisto"), - ("event1157", "type", "membership"), - ("event1158", "object", "solid"), - ("event1158", "subject", "charon"), - ("event1158", "type", "membership"), - ("event1159", "object", "solid"), - ("event1159", "subject", "deimos"), - ("event1159", "type", "membership"), - ("event1160", "object", "solid"), - ("event1160", "subject", "dione"), - ("event1160", "type", "membership"), - ("event1161", "object", "solid"), - ("event1161", "subject", "earth"), - ("event1161", "type", "membership"), - ("event1162", "object", "solid"), - ("event1162", "subject", "enceladus"), - ("event1162", "type", "membership"), - ("event1163", "object", "solid"), - ("event1163", "subject", "europa"), - ("event1163", "type", "membership"), - ("event1164", "object", "solid"), - ("event1164", "subject", "ganymede"), - ("event1164", "type", "membership"), - ("event1165", "object", "solid"), - ("event1165", "subject", "hyperion"), - ("event1165", "type", "membership"), - ("event1166", "object", "solid"), - ("event1166", "subject", "iapetus"), - ("event1166", "type", "membership"), - ("event1167", "object", "solid"), - ("event1167", "subject", "io"), - ("event1167", "type", "membership"), - ("event1168", "object", "solid"), - ("event1168", "subject", "janus"), - ("event1168", "type", "membership"), - ("event1169", "object", "solid"), - ("event1169", "subject", "jupiter"), - ("event1169", "type", "membership"), - ("event1170", "object", "solid"), - ("event1170", "subject", "pasiphae"), - ("event1170", "type", "membership"), - ("event1171", "object", "solid"), - ("event1171", "subject", "carme"), - ("event1171", "type", "membership"), - ("event1172", "object", "solid"), - ("event1172", "subject", "thebe"), - ("event1172", "type", "membership"), - ("event1173", "object", "solid"), - ("event1173", "subject", "sinope"), - ("event1173", "type", "membership"), - ("event1174", "object", "solid"), - ("event1174", "subject", "elara"), - ("event1174", "type", "membership"), - ("event1175", "object", "solid"), - ("event1175", "subject", "himalia"), - ("event1175", "type", "membership"), - ("event1176", "object", "solid"), - ("event1176", "subject", "lysithea"), - ("event1176", "type", "membership"), - ("event1177", "object", "solid"), - ("event1177", "subject", "leda"), - ("event1177", "type", "membership"), - ("event1178", "object", "solid"), - ("event1178", "subject", "ananke"), - ("event1178", "type", "membership"), - ("event1179", "object", "solid"), - ("event1179", "subject", "luna"), - ("event1179", "type", "membership"), - ("event1180", "object", "solid"), - ("event1180", "subject", "mars"), - ("event1180", "type", "membership"), - ("event1181", "object", "solid"), - ("event1181", "subject", "mercury"), - ("event1181", "type", "membership"), - ("event1182", "object", "solid"), - ("event1182", "subject", "mimas"), - ("event1182", "type", "membership"), - ("event1183", "object", "solid"), - ("event1183", "subject", "miranda"), - ("event1183", "type", "membership"), - ("event1184", "object", "solid"), - ("event1184", "subject", "neptune"), - ("event1184", "type", "membership"), - ("event1185", "object", "solid"), - ("event1185", "subject", "nereid"), - ("event1185", "type", "membership"), - ("event1186", "object", "solid"), - ("event1186", "subject", "oberon"), - ("event1186", "type", "membership"), - ("event1187", "object", "solid"), - ("event1187", "subject", "phobos"), - ("event1187", "type", "membership"), - ("event1188", "object", "solid"), - ("event1188", "subject", "phoebe"), - ("event1188", "type", "membership"), - ("event1189", "object", "solid"), - ("event1189", "subject", "pluto"), - ("event1189", "type", "membership"), - ("event1190", "object", "solid"), - ("event1190", "subject", "rhea"), - ("event1190", "type", "membership"), - ("event1191", "object", "solid"), - ("event1191", "subject", "saturn"), - ("event1191", "type", "membership"), - ("event1192", "object", "solid"), - ("event1192", "subject", "epimetheus"), - ("event1192", "type", "membership"), - ("event1193", "object", "solid"), - ("event1193", "subject", "tethys"), - ("event1193", "type", "membership"), - ("event1194", "object", "solid"), - ("event1194", "subject", "titan"), - ("event1194", "type", "membership"), - ("event1195", "object", "solid"), - ("event1195", "subject", "titania"), - ("event1195", "type", "membership"), - ("event1196", "object", "solid"), - ("event1196", "subject", "triton"), - ("event1196", "type", "membership"), - ("event1197", "object", "solid"), - ("event1197", "subject", "umbriel"), - ("event1197", "type", "membership"), - ("event1198", "object", "solid"), - ("event1198", "subject", "uranus"), - ("event1198", "type", "membership"), - ("event1199", "object", "solid"), - ("event1199", "subject", "venus"), - ("event1199", "type", "membership"), - ("event1200", "object", "brown"), - ("event1200", "subject", "venus"), - ("event1200", "type", "membership"), - ("event1201", "object", "brown"), - ("event1201", "subject", "mercury"), - ("event1201", "type", "membership"), - ("event1202", "object", "brown"), - ("event1202", "subject", "pluto"), - ("event1202", "type", "membership"), - ("event1203", "object", "brown"), - ("event1203", "subject", "venus"), - ("event1203", "type", "membership"), - ("event1204", "object", "gaseous"), - ("event1204", "subject", "jupiter"), - ("event1204", "type", "membership"), - ("event1205", "object", "gaseous"), - ("event1205", "subject", "neptune"), - ("event1205", "type", "membership"), - ("event1206", "object", "gaseous"), - ("event1206", "subject", "saturn"), - ("event1206", "type", "membership"), - ("event1207", "object", "gaseous"), - ("event1207", "subject", "uranus"), - ("event1207", "type", "membership"), - ("event1208", "object", "green"), - ("event1208", "subject", "earth"), - ("event1208", "type", "membership"), - ("event1209", "object", "green"), - ("event1209", "subject", "neptune"), - ("event1209", "type", "membership"), - ("event1210", "object", "green"), - ("event1210", "subject", "uranus"), - ("event1210", "type", "membership"), - ("event1211", "object", "red"), - ("event1211", "subject", "io"), - ("event1211", "type", "membership"), - ("event1212", "object", "red"), - ("event1212", "subject", "jupiter"), - ("event1212", "type", "membership"), - ("event1213", "object", "red"), - ("event1213", "subject", "mars"), - ("event1213", "type", "membership"), - ("event1214", "object", "red"), - ("event1214", "subject", "saturn"), - ("event1214", "type", "membership"), - ("event1215", "object", "ringed"), - ("event1215", "subject", "jupiter"), - ("event1215", "type", "membership"), - ("event1216", "object", "ringed"), - ("event1216", "subject", "neptune"), - ("event1216", "type", "membership"), - ("event1217", "object", "ringed"), - ("event1217", "subject", "saturn"), - ("event1217", "type", "membership"), - ("event1218", "object", "ringed"), - ("event1218", "subject", "uranus"), - ("event1218", "type", "membership"), - ("event1219", "object", "vacuumous"), - ("event1219", "subject", "venus"), - ("event1219", "type", "membership"), - ("event1220", "object", "vacuumous"), - ("event1220", "subject", "almathea"), - ("event1220", "type", "membership"), - ("event1221", "object", "vacuumous"), - ("event1221", "subject", "ariel"), - ("event1221", "type", "membership"), - ("event1222", "object", "vacuumous"), - ("event1222", "subject", "callisto"), - ("event1222", "type", "membership"), - ("event1223", "object", "vacuumous"), - ("event1223", "subject", "charon"), - ("event1223", "type", "membership"), - ("event1224", "object", "vacuumous"), - ("event1224", "subject", "deimos"), - ("event1224", "type", "membership"), - ("event1225", "object", "vacuumous"), - ("event1225", "subject", "dione"), - ("event1225", "type", "membership"), - ("event1226", "object", "vacuumous"), - ("event1226", "subject", "earth"), - ("event1226", "type", "membership"), - ("event1227", "object", "vacuumous"), - ("event1227", "subject", "enceladus"), - ("event1227", "type", "membership"), - ("event1228", "object", "vacuumous"), - ("event1228", "subject", "europa"), - ("event1228", "type", "membership"), - ("event1229", "object", "vacuumous"), - ("event1229", "subject", "ganymede"), - ("event1229", "type", "membership"), - ("event1230", "object", "vacuumous"), - ("event1230", "subject", "hyperion"), - ("event1230", "type", "membership"), - ("event1231", "object", "vacuumous"), - ("event1231", "subject", "iapetus"), - ("event1231", "type", "membership"), - ("event1232", "object", "vacuumous"), - ("event1232", "subject", "io"), - ("event1232", "type", "membership"), - ("event1233", "object", "vacuumous"), - ("event1233", "subject", "janus"), - ("event1233", "type", "membership"), - ("event1234", "object", "vacuumous"), - ("event1234", "subject", "jupiter"), - ("event1234", "type", "membership"), - ("event1235", "object", "vacuumous"), - ("event1235", "subject", "pasiphae"), - ("event1235", "type", "membership"), - ("event1236", "object", "vacuumous"), - ("event1236", "subject", "carme"), - ("event1236", "type", "membership"), - ("event1237", "object", "vacuumous"), - ("event1237", "subject", "thebe"), - ("event1237", "type", "membership"), - ("event1238", "object", "vacuumous"), - ("event1238", "subject", "sinope"), - ("event1238", "type", "membership"), - ("event1239", "object", "vacuumous"), - ("event1239", "subject", "elara"), - ("event1239", "type", "membership"), - ("event1240", "object", "vacuumous"), - ("event1240", "subject", "himalia"), - ("event1240", "type", "membership"), - ("event1241", "object", "vacuumous"), - ("event1241", "subject", "lysithea"), - ("event1241", "type", "membership"), - ("event1242", "object", "vacuumous"), - ("event1242", "subject", "leda"), - ("event1242", "type", "membership"), - ("event1243", "object", "vacuumous"), - ("event1243", "subject", "ananke"), - ("event1243", "type", "membership"), - ("event1244", "object", "vacuumous"), - ("event1244", "subject", "luna"), - ("event1244", "type", "membership"), - ("event1245", "object", "vacuumous"), - ("event1245", "subject", "mars"), - ("event1245", "type", "membership"), - ("event1246", "object", "vacuumous"), - ("event1246", "subject", "mercury"), - ("event1246", "type", "membership"), - ("event1247", "object", "vacuumous"), - ("event1247", "subject", "mimas"), - ("event1247", "type", "membership"), - ("event1248", "object", "vacuumous"), - ("event1248", "subject", "miranda"), - ("event1248", "type", "membership"), - ("event1249", "object", "vacuumous"), - ("event1249", "subject", "neptune"), - ("event1249", "type", "membership"), - ("event1250", "object", "vacuumous"), - ("event1250", "subject", "nereid"), - ("event1250", "type", "membership"), - ("event1251", "object", "vacuumous"), - ("event1251", "subject", "oberon"), - ("event1251", "type", "membership"), - ("event1252", "object", "vacuumous"), - ("event1252", "subject", "phobos"), - ("event1252", "type", "membership"), - ("event1253", "object", "vacuumous"), - ("event1253", "subject", "phoebe"), - ("event1253", "type", "membership"), - ("event1254", "object", "vacuumous"), - ("event1254", "subject", "pluto"), - ("event1254", "type", "membership"), - ("event1255", "object", "vacuumous"), - ("event1255", "subject", "rhea"), - ("event1255", "type", "membership"), - ("event1256", "object", "vacuumous"), - ("event1256", "subject", "saturn"), - ("event1256", "type", "membership"), - ("event1257", "object", "vacuumous"), - ("event1257", "subject", "epimetheus"), - ("event1257", "type", "membership"), - ("event1258", "object", "vacuumous"), - ("event1258", "subject", "tethys"), - ("event1258", "type", "membership"), - ("event1259", "object", "vacuumous"), - ("event1259", "subject", "titan"), - ("event1259", "type", "membership"), - ("event1260", "object", "vacuumous"), - ("event1260", "subject", "titania"), - ("event1260", "type", "membership"), - ("event1261", "object", "vacuumous"), - ("event1261", "subject", "triton"), - ("event1261", "type", "membership"), - ("event1262", "object", "vacuumous"), - ("event1262", "subject", "umbriel"), - ("event1262", "type", "membership"), - ("event1263", "object", "vacuumous"), - ("event1263", "subject", "uranus"), - ("event1263", "type", "membership"), - ("event1264", "object", "thing"), - ("event1264", "subject", "bernard"), - ("event1264", "type", "membership"), - ("event1265", "object", "thing"), - ("event1265", "subject", "bond"), - ("event1265", "type", "membership"), - ("event1266", "object", "thing"), - ("event1266", "subject", "venus"), - ("event1266", "type", "membership"), - ("event1267", "object", "thing"), - ("event1267", "subject", "cassini"), - ("event1267", "type", "membership"), - ("event1268", "object", "thing"), - ("event1268", "subject", "dollfus"), - ("event1268", "type", "membership"), - ("event1269", "object", "thing"), - ("event1269", "subject", "fountain"), - ("event1269", "type", "membership"), - ("event1270", "object", "thing"), - ("event1270", "subject", "galileo"), - ("event1270", "type", "membership"), - ("event1271", "object", "thing"), - ("event1271", "subject", "hall"), - ("event1271", "type", "membership"), - ("event1272", "object", "thing"), - ("event1272", "subject", "herschel"), - ("event1272", "type", "membership"), - ("event1273", "object", "thing"), - ("event1273", "subject", "huygens"), - ("event1273", "type", "membership"), - ("event1274", "object", "thing"), - ("event1274", "subject", "kowal"), - ("event1274", "type", "membership"), - ("event1275", "object", "thing"), - ("event1275", "subject", "kuiper"), - ("event1275", "type", "membership"), - ("event1276", "object", "thing"), - ("event1276", "subject", "larson"), - ("event1276", "type", "membership"), - ("event1277", "object", "thing"), - ("event1277", "subject", "lassell"), - ("event1277", "type", "membership"), - ("event1278", "object", "thing"), - ("event1278", "subject", "melotte"), - ("event1278", "type", "membership"), - ("event1279", "object", "thing"), - ("event1279", "subject", "nicholson"), - ("event1279", "type", "membership"), - ("event1280", "object", "thing"), - ("event1280", "subject", "perrine"), - ("event1280", "type", "membership"), - ("event1281", "object", "thing"), - ("event1281", "subject", "pickering"), - ("event1281", "type", "membership"), - ("event1282", "object", "thing"), - ("event1282", "subject", "almathea"), - ("event1282", "type", "membership"), - ("event1283", "object", "thing"), - ("event1283", "subject", "ariel"), - ("event1283", "type", "membership"), - ("event1284", "object", "thing"), - ("event1284", "subject", "callisto"), - ("event1284", "type", "membership"), - ("event1285", "object", "thing"), - ("event1285", "subject", "charon"), - ("event1285", "type", "membership"), - ("event1286", "object", "thing"), - ("event1286", "subject", "deimos"), - ("event1286", "type", "membership"), - ("event1287", "object", "thing"), - ("event1287", "subject", "dione"), - ("event1287", "type", "membership"), - ("event1288", "object", "thing"), - ("event1288", "subject", "earth"), - ("event1288", "type", "membership"), - ("event1289", "object", "thing"), - ("event1289", "subject", "enceladus"), - ("event1289", "type", "membership"), - ("event1290", "object", "thing"), - ("event1290", "subject", "europa"), - ("event1290", "type", "membership"), - ("event1291", "object", "thing"), - ("event1291", "subject", "ganymede"), - ("event1291", "type", "membership"), - ("event1292", "object", "thing"), - ("event1292", "subject", "hyperion"), - ("event1292", "type", "membership"), - ("event1293", "object", "thing"), - ("event1293", "subject", "iapetus"), - ("event1293", "type", "membership"), - ("event1294", "object", "thing"), - ("event1294", "subject", "io"), - ("event1294", "type", "membership"), - ("event1295", "object", "thing"), - ("event1295", "subject", "janus"), - ("event1295", "type", "membership"), - ("event1296", "object", "thing"), - ("event1296", "subject", "jupiter"), - ("event1296", "type", "membership"), - ("event1297", "object", "thing"), - ("event1297", "subject", "pasiphae"), - ("event1297", "type", "membership"), - ("event1298", "object", "thing"), - ("event1298", "subject", "carme"), - ("event1298", "type", "membership"), - ("event1299", "object", "thing"), - ("event1299", "subject", "thebe"), - ("event1299", "type", "membership"), - ("event1300", "object", "thing"), - ("event1300", "subject", "sinope"), - ("event1300", "type", "membership"), - ("event1301", "object", "thing"), - ("event1301", "subject", "elara"), - ("event1301", "type", "membership"), - ("event1302", "object", "thing"), - ("event1302", "subject", "himalia"), - ("event1302", "type", "membership"), - ("event1303", "object", "thing"), - ("event1303", "subject", "lysithea"), - ("event1303", "type", "membership"), - ("event1304", "object", "thing"), - ("event1304", "subject", "leda"), - ("event1304", "type", "membership"), - ("event1305", "object", "thing"), - ("event1305", "subject", "ananke"), - ("event1305", "type", "membership"), - ("event1306", "object", "thing"), - ("event1306", "subject", "luna"), - ("event1306", "type", "membership"), - ("event1307", "object", "thing"), - ("event1307", "subject", "mars"), - ("event1307", "type", "membership"), - ("event1308", "object", "thing"), - ("event1308", "subject", "mercury"), - ("event1308", "type", "membership"), - ("event1309", "object", "thing"), - ("event1309", "subject", "mimas"), - ("event1309", "type", "membership"), - ("event1310", "object", "thing"), - ("event1310", "subject", "miranda"), - ("event1310", "type", "membership"), - ("event1311", "object", "thing"), - ("event1311", "subject", "neptune"), - ("event1311", "type", "membership"), - ("event1312", "object", "thing"), - ("event1312", "subject", "nereid"), - ("event1312", "type", "membership"), - ("event1313", "object", "thing"), - ("event1313", "subject", "oberon"), - ("event1313", "type", "membership"), - ("event1314", "object", "thing"), - ("event1314", "subject", "phobos"), - ("event1314", "type", "membership"), - ("event1315", "object", "thing"), - ("event1315", "subject", "phoebe"), - ("event1315", "type", "membership"), - ("event1316", "object", "thing"), - ("event1316", "subject", "pluto"), - ("event1316", "type", "membership"), - ("event1317", "object", "thing"), - ("event1317", "subject", "rhea"), - ("event1317", "type", "membership"), - ("event1318", "object", "thing"), - ("event1318", "subject", "saturn"), - ("event1318", "type", "membership"), - ("event1319", "object", "thing"), - ("event1319", "subject", "epimetheus"), - ("event1319", "type", "membership"), - ("event1320", "object", "thing"), - ("event1320", "subject", "sol"), - ("event1320", "type", "membership"), - ("event1321", "object", "thing"), - ("event1321", "subject", "tethys"), - ("event1321", "type", "membership"), - ("event1322", "object", "thing"), - ("event1322", "subject", "titan"), - ("event1322", "type", "membership"), - ("event1323", "object", "thing"), - ("event1323", "subject", "titania"), - ("event1323", "type", "membership"), - ("event1324", "object", "thing"), - ("event1324", "subject", "triton"), - ("event1324", "type", "membership"), - ("event1325", "object", "thing"), - ("event1325", "subject", "umbriel"), - ("event1325", "type", "membership"), - ("event1326", "object", "thing"), - ("event1326", "subject", "uranus"), - ("event1326", "type", "membership"), - ("event1327", "object", "spin"), - ("event1327", "subject", "venus"), - ("event1327", "type", "membership"), - ("event1328", "object", "spin"), - ("event1328", "subject", "almathea"), - ("event1328", "type", "membership"), - ("event1329", "object", "spin"), - ("event1329", "subject", "ariel"), - ("event1329", "type", "membership"), - ("event1330", "object", "spin"), - ("event1330", "subject", "callisto"), - ("event1330", "type", "membership"), - ("event1331", "object", "spin"), - ("event1331", "subject", "charon"), - ("event1331", "type", "membership"), - ("event1332", "object", "spin"), - ("event1332", "subject", "deimos"), - ("event1332", "type", "membership"), - ("event1333", "object", "spin"), - ("event1333", "subject", "dione"), - ("event1333", "type", "membership"), - ("event1334", "object", "spin"), - ("event1334", "subject", "earth"), - ("event1334", "type", "membership"), - ("event1335", "object", "spin"), - ("event1335", "subject", "enceladus"), - ("event1335", "type", "membership"), - ("event1336", "object", "spin"), - ("event1336", "subject", "europa"), - ("event1336", "type", "membership"), - ("event1337", "object", "spin"), - ("event1337", "subject", "ganymede"), - ("event1337", "type", "membership"), - ("event1338", "object", "spin"), - ("event1338", "subject", "hyperion"), - ("event1338", "type", "membership"), - ("event1339", "object", "spin"), - ("event1339", "subject", "iapetus"), - ("event1339", "type", "membership"), - ("event1340", "object", "spin"), - ("event1340", "subject", "io"), - ("event1340", "type", "membership"), - ("event1341", "object", "spin"), - ("event1341", "subject", "janus"), - ("event1341", "type", "membership"), - ("event1342", "object", "spin"), - ("event1342", "subject", "jupiter"), - ("event1342", "type", "membership"), - ("event1343", "object", "spin"), - ("event1343", "subject", "pasiphae"), - ("event1343", "type", "membership"), - ("event1344", "object", "spin"), - ("event1344", "subject", "carme"), - ("event1344", "type", "membership"), - ("event1345", "object", "spin"), - ("event1345", "subject", "thebe"), - ("event1345", "type", "membership"), - ("event1346", "object", "spin"), - ("event1346", "subject", "sinope"), - ("event1346", "type", "membership"), - ("event1347", "object", "spin"), - ("event1347", "subject", "elara"), - ("event1347", "type", "membership"), - ("event1348", "object", "spin"), - ("event1348", "subject", "himalia"), - ("event1348", "type", "membership"), - ("event1349", "object", "spin"), - ("event1349", "subject", "lysithea"), - ("event1349", "type", "membership"), - ("event1350", "object", "spin"), - ("event1350", "subject", "leda"), - ("event1350", "type", "membership"), - ("event1351", "object", "spin"), - ("event1351", "subject", "ananke"), - ("event1351", "type", "membership"), - ("event1352", "object", "spin"), - ("event1352", "subject", "luna"), - ("event1352", "type", "membership"), - ("event1353", "object", "spin"), - ("event1353", "subject", "mars"), - ("event1353", "type", "membership"), - ("event1354", "object", "spin"), - ("event1354", "subject", "mercury"), - ("event1354", "type", "membership"), - ("event1355", "object", "spin"), - ("event1355", "subject", "mimas"), - ("event1355", "type", "membership"), - ("event1356", "object", "spin"), - ("event1356", "subject", "miranda"), - ("event1356", "type", "membership"), - ("event1357", "object", "spin"), - ("event1357", "subject", "neptune"), - ("event1357", "type", "membership"), - ("event1358", "object", "spin"), - ("event1358", "subject", "nereid"), - ("event1358", "type", "membership"), - ("event1359", "object", "spin"), - ("event1359", "subject", "oberon"), - ("event1359", "type", "membership"), - ("event1360", "object", "spin"), - ("event1360", "subject", "phobos"), - ("event1360", "type", "membership"), - ("event1361", "object", "spin"), - ("event1361", "subject", "phoebe"), - ("event1361", "type", "membership"), - ("event1362", "object", "spin"), - ("event1362", "subject", "pluto"), - ("event1362", "type", "membership"), - ("event1363", "object", "spin"), - ("event1363", "subject", "rhea"), - ("event1363", "type", "membership"), - ("event1364", "object", "spin"), - ("event1364", "subject", "saturn"), - ("event1364", "type", "membership"), - ("event1365", "object", "spin"), - ("event1365", "subject", "epimetheus"), - ("event1365", "type", "membership"), - ("event1366", "object", "spin"), - ("event1366", "subject", "sol"), - ("event1366", "type", "membership"), - ("event1367", "object", "spin"), - ("event1367", "subject", "tethys"), - ("event1367", "type", "membership"), - ("event1368", "object", "spin"), - ("event1368", "subject", "titan"), - ("event1368", "type", "membership"), - ("event1369", "object", "spin"), - ("event1369", "subject", "titania"), - ("event1369", "type", "membership"), - ("event1370", "object", "spin"), - ("event1370", "subject", "triton"), - ("event1370", "type", "membership"), - ("event1371", "object", "spin"), - ("event1371", "subject", "umbriel"), - ("event1371", "type", "membership"), - ("event1372", "object", "spin"), - ("event1372", "subject", "uranus"), - ("event1372", "type", "membership"), - ("event1373", "object", "jupiter"), - ("event1373", "subject", "adrastea"), - ("event1373", "type", "orbit_ev"), - ("event1374", "object", "jupiter"), - ("event1374", "subject", "metis"), - ("event1374", "type", "orbit_ev"), - ("event1375", "object", "jupiter"), - ("event1375", "subject", "callirrhoe"), - ("event1375", "type", "orbit_ev"), - ("event1376", "object", "jupiter"), - ("event1376", "subject", "themisto"), - ("event1376", "type", "orbit_ev"), - ("event1377", "object", "jupiter"), - ("event1377", "subject", "megaclite"), - ("event1377", "type", "orbit_ev"), - ("event1378", "object", "jupiter"), - ("event1378", "subject", "taygete"), - ("event1378", "type", "orbit_ev"), - ("event1379", "object", "jupiter"), - ("event1379", "subject", "chaldene"), - ("event1379", "type", "orbit_ev"), - ("event1380", "object", "jupiter"), - ("event1380", "subject", "harpalyke"), - ("event1380", "type", "orbit_ev"), - ("event1381", "object", "jupiter"), - ("event1381", "subject", "kalyke"), - ("event1381", "type", "orbit_ev"), - ("event1382", "object", "jupiter"), - ("event1382", "subject", "iocaste"), - ("event1382", "type", "orbit_ev"), - ("event1383", "object", "jupiter"), - ("event1383", "subject", "erinome"), - ("event1383", "type", "orbit_ev"), - ("event1384", "object", "jupiter"), - ("event1384", "subject", "isonoe"), - ("event1384", "type", "orbit_ev"), - ("event1385", "object", "jupiter"), - ("event1385", "subject", "praxidike"), - ("event1385", "type", "orbit_ev"), - ("event1386", "object", "jupiter"), - ("event1386", "subject", "autonoe"), - ("event1386", "type", "orbit_ev"), - ("event1387", "object", "jupiter"), - ("event1387", "subject", "thyone"), - ("event1387", "type", "orbit_ev"), - ("event1388", "object", "jupiter"), - ("event1388", "subject", "hermippe"), - ("event1388", "type", "orbit_ev"), - ("event1389", "object", "jupiter"), - ("event1389", "subject", "aitne"), - ("event1389", "type", "orbit_ev"), - ("event1390", "object", "jupiter"), - ("event1390", "subject", "eurydome"), - ("event1390", "type", "orbit_ev"), - ("event1391", "object", "jupiter"), - ("event1391", "subject", "euanthe"), - ("event1391", "type", "orbit_ev"), - ("event1392", "object", "jupiter"), - ("event1392", "subject", "euporie"), - ("event1392", "type", "orbit_ev"), - ("event1393", "object", "jupiter"), - ("event1393", "subject", "orthosie"), - ("event1393", "type", "orbit_ev"), - ("event1394", "object", "jupiter"), - ("event1394", "subject", "sponde"), - ("event1394", "type", "orbit_ev"), - ("event1395", "object", "jupiter"), - ("event1395", "subject", "kale"), - ("event1395", "type", "orbit_ev"), - ("event1396", "object", "jupiter"), - ("event1396", "subject", "pasithee"), - ("event1396", "type", "orbit_ev"), - ("event1397", "object", "jupiter"), - ("event1397", "subject", "hegemone"), - ("event1397", "type", "orbit_ev"), - ("event1398", "object", "jupiter"), - ("event1398", "subject", "mneme"), - ("event1398", "type", "orbit_ev"), - ("event1399", "object", "jupiter"), - ("event1399", "subject", "aoede"), - ("event1399", "type", "orbit_ev"), - ("event1400", "object", "jupiter"), - ("event1400", "subject", "thelxinoe"), - ("event1400", "type", "orbit_ev"), - ("event1401", "object", "jupiter"), - ("event1401", "subject", "arche"), - ("event1401", "type", "orbit_ev"), - ("event1402", "object", "jupiter"), - ("event1402", "subject", "kallichore"), - ("event1402", "type", "orbit_ev"), - ("event1403", "object", "jupiter"), - ("event1403", "subject", "helike"), - ("event1403", "type", "orbit_ev"), - ("event1404", "object", "jupiter"), - ("event1404", "subject", "carpo"), - ("event1404", "type", "orbit_ev"), - ("event1405", "object", "jupiter"), - ("event1405", "subject", "eukelade"), - ("event1405", "type", "orbit_ev"), - ("event1406", "object", "jupiter"), - ("event1406", "subject", "cyllene"), - ("event1406", "type", "orbit_ev"), - ("event1407", "object", "jupiter"), - ("event1407", "subject", "kore"), - ("event1407", "type", "orbit_ev"), - ("event1408", "object", "jupiter"), - ("event1408", "subject", "herse"), - ("event1408", "type", "orbit_ev"), - ("event1409", "object", "saturn"), - ("event1409", "subject", "helene"), - ("event1409", "type", "orbit_ev"), - ("event1410", "object", "saturn"), - ("event1410", "subject", "telesto"), - ("event1410", "type", "orbit_ev"), - ("event1411", "object", "saturn"), - ("event1411", "subject", "calypso"), - ("event1411", "type", "orbit_ev"), - ("event1412", "object", "saturn"), - ("event1412", "subject", "atlas"), - ("event1412", "type", "orbit_ev"), - ("event1413", "object", "saturn"), - ("event1413", "subject", "prometheus"), - ("event1413", "type", "orbit_ev"), - ("event1414", "object", "saturn"), - ("event1414", "subject", "pandora"), - ("event1414", "type", "orbit_ev"), - ("event1415", "object", "saturn"), - ("event1415", "subject", "pan"), - ("event1415", "type", "orbit_ev"), - ("event1416", "object", "saturn"), - ("event1416", "subject", "ymir"), - ("event1416", "type", "orbit_ev"), - ("event1417", "object", "saturn"), - ("event1417", "subject", "paaliaq"), - ("event1417", "type", "orbit_ev"), - ("event1418", "object", "saturn"), - ("event1418", "subject", "tarvos"), - ("event1418", "type", "orbit_ev"), - ("event1419", "object", "saturn"), - ("event1419", "subject", "ijiraq"), - ("event1419", "type", "orbit_ev"), - ("event1420", "object", "saturn"), - ("event1420", "subject", "suttungr"), - ("event1420", "type", "orbit_ev"), - ("event1421", "object", "saturn"), - ("event1421", "subject", "kiviuq"), - ("event1421", "type", "orbit_ev"), - ("event1422", "object", "saturn"), - ("event1422", "subject", "mundilfari"), - ("event1422", "type", "orbit_ev"), - ("event1423", "object", "saturn"), - ("event1423", "subject", "albiorix"), - ("event1423", "type", "orbit_ev"), - ("event1424", "object", "saturn"), - ("event1424", "subject", "skathi"), - ("event1424", "type", "orbit_ev"), - ("event1425", "object", "saturn"), - ("event1425", "subject", "erriapus"), - ("event1425", "type", "orbit_ev"), - ("event1426", "object", "saturn"), - ("event1426", "subject", "siarnaq"), - ("event1426", "type", "orbit_ev"), - ("event1427", "object", "saturn"), - ("event1427", "subject", "thrymr"), - ("event1427", "type", "orbit_ev"), - ("event1428", "object", "saturn"), - ("event1428", "subject", "narvi"), - ("event1428", "type", "orbit_ev"), - ("event1429", "object", "saturn"), - ("event1429", "subject", "methone"), - ("event1429", "type", "orbit_ev"), - ("event1430", "object", "saturn"), - ("event1430", "subject", "pallene"), - ("event1430", "type", "orbit_ev"), - ("event1431", "object", "saturn"), - ("event1431", "subject", "polydeuces"), - ("event1431", "type", "orbit_ev"), - ("event1432", "object", "saturn"), - ("event1432", "subject", "daphnis"), - ("event1432", "type", "orbit_ev"), - ("event1433", "object", "saturn"), - ("event1433", "subject", "aegir"), - ("event1433", "type", "orbit_ev"), - ("event1434", "object", "saturn"), - ("event1434", "subject", "bebhionn"), - ("event1434", "type", "orbit_ev"), - ("event1435", "object", "saturn"), - ("event1435", "subject", "bergelmir"), - ("event1435", "type", "orbit_ev"), - ("event1436", "object", "saturn"), - ("event1436", "subject", "bestla"), - ("event1436", "type", "orbit_ev"), - ("event1437", "object", "saturn"), - ("event1437", "subject", "farbauti"), - ("event1437", "type", "orbit_ev"), - ("event1438", "object", "saturn"), - ("event1438", "subject", "fenrir"), - ("event1438", "type", "orbit_ev"), - ("event1439", "object", "saturn"), - ("event1439", "subject", "fornjot"), - ("event1439", "type", "orbit_ev"), - ("event1440", "object", "saturn"), - ("event1440", "subject", "hati"), - ("event1440", "type", "orbit_ev"), - ("event1441", "object", "saturn"), - ("event1441", "subject", "hyrrokkin"), - ("event1441", "type", "orbit_ev"), - ("event1442", "object", "saturn"), - ("event1442", "subject", "kari"), - ("event1442", "type", "orbit_ev"), - ("event1443", "object", "saturn"), - ("event1443", "subject", "loge"), - ("event1443", "type", "orbit_ev"), - ("event1444", "object", "saturn"), - ("event1444", "subject", "skoll"), - ("event1444", "type", "orbit_ev"), - ("event1445", "object", "saturn"), - ("event1445", "subject", "surtur"), - ("event1445", "type", "orbit_ev"), - ("event1446", "object", "saturn"), - ("event1446", "subject", "anthe"), - ("event1446", "type", "orbit_ev"), - ("event1447", "object", "saturn"), - ("event1447", "subject", "jarnsaxa"), - ("event1447", "type", "orbit_ev"), - ("event1448", "object", "saturn"), - ("event1448", "object", "thing"), - ("event1448", "subject", "greip"), - ("event1448", "type", "membership"), - ("event1448", "type", "orbit_ev"), - ("event1449", "object", "saturn"), - ("event1449", "subject", "tarqeq"), - ("event1449", "type", "orbit_ev"), - ("event1450", "object", "saturn"), - ("event1450", "subject", "aegaeon"), - ("event1450", "type", "orbit_ev"), - ("event1451", "object", "uranus"), - ("event1451", "subject", "cordelia"), - ("event1451", "type", "orbit_ev"), - ("event1452", "object", "uranus"), - ("event1452", "subject", "ophelia"), - ("event1452", "type", "orbit_ev"), - ("event1453", "object", "uranus"), - ("event1453", "subject", "bianca"), - ("event1453", "type", "orbit_ev"), - ("event1454", "object", "uranus"), - ("event1454", "subject", "cressida"), - ("event1454", "type", "orbit_ev"), - ("event1455", "object", "uranus"), - ("event1455", "subject", "desdemona"), - ("event1455", "type", "orbit_ev"), - ("event1456", "object", "uranus"), - ("event1456", "subject", "juliet"), - ("event1456", "type", "orbit_ev"), - ("event1457", "object", "uranus"), - ("event1457", "subject", "portia"), - ("event1457", "type", "orbit_ev"), - ("event1458", "object", "uranus"), - ("event1458", "subject", "rosalind"), - ("event1458", "type", "orbit_ev"), - ("event1459", "object", "uranus"), - ("event1459", "subject", "belinda"), - ("event1459", "type", "orbit_ev"), - ("event1460", "object", "uranus"), - ("event1460", "subject", "puck"), - ("event1460", "type", "orbit_ev"), - ("event1461", "object", "uranus"), - ("event1461", "subject", "caliban"), - ("event1461", "type", "orbit_ev"), - ("event1462", "object", "uranus"), - ("event1462", "subject", "sycorax"), - ("event1462", "type", "orbit_ev"), - ("event1463", "object", "uranus"), - ("event1463", "subject", "prospero"), - ("event1463", "type", "orbit_ev"), - ("event1464", "object", "uranus"), - ("event1464", "subject", "setebos"), - ("event1464", "type", "orbit_ev"), - ("event1465", "object", "uranus"), - ("event1465", "subject", "stephano"), - ("event1465", "type", "orbit_ev"), - ("event1466", "object", "uranus"), - ("event1466", "subject", "trinculo"), - ("event1466", "type", "orbit_ev"), - ("event1467", "object", "uranus"), - ("event1467", "subject", "francisco"), - ("event1467", "type", "orbit_ev"), - ("event1468", "object", "uranus"), - ("event1468", "subject", "margaret"), - ("event1468", "type", "orbit_ev"), - ("event1469", "object", "uranus"), - ("event1469", "subject", "ferdinand"), - ("event1469", "type", "orbit_ev"), - ("event1470", "object", "uranus"), - ("event1470", "subject", "perdita"), - ("event1470", "type", "orbit_ev"), - ("event1471", "object", "uranus"), - ("event1471", "subject", "mab"), - ("event1471", "type", "orbit_ev"), - ("event1472", "object", "uranus"), - ("event1472", "subject", "cupid"), - ("event1472", "type", "orbit_ev"), - ("event1474", "object", "neptune"), - ("event1474", "subject", "naiad"), - ("event1474", "type", "orbit_ev"), - ("event1475", "object", "neptune"), - ("event1475", "subject", "thalassa"), - ("event1475", "type", "orbit_ev"), - ("event1476", "object", "neptune"), - ("event1476", "subject", "despina"), - ("event1476", "type", "orbit_ev"), - ("event1477", "object", "neptune"), - ("event1477", "subject", "galatea"), - ("event1477", "type", "orbit_ev"), - ("event1478", "object", "neptune"), - ("event1478", "subject", "larissa"), - ("event1478", "type", "orbit_ev"), - ("event1479", "object", "neptune"), - ("event1479", "subject", "proteus"), - ("event1479", "type", "orbit_ev"), - ("event1480", "object", "neptune"), - ("event1480", "subject", "halimede"), - ("event1480", "type", "orbit_ev"), - ("event1481", "object", "neptune"), - ("event1481", "subject", "psamathe"), - ("event1481", "type", "orbit_ev"), - ("event1482", "object", "neptune"), - ("event1482", "subject", "sao"), - ("event1482", "type", "orbit_ev"), - ("event1483", "object", "neptune"), - ("event1483", "subject", "laomedeia"), - ("event1483", "type", "orbit_ev"), - ("event1484", "object", "neptune"), - ("event1484", "subject", "neso"), - ("event1484", "type", "orbit_ev"), - ("event1485", "object", "pluto"), - ("event1485", "subject", "nix"), - ("event1485", "type", "orbit_ev"), - ("event1486", "object", "pluto"), - ("event1486", "subject", "hydra"), - ("event1486", "type", "orbit_ev"), - ("event1487", "object", "pluto"), - ("event1487", "subject", "kerberos"), - ("event1487", "type", "orbit_ev"), - ("event1488", "object", "pluto"), - ("event1488", "subject", "styx"), - ("event1488", "type", "orbit_ev"), - ("event1489", "object", "adrastea"), - ("event1489", "subject", "voyager_science_team"), - ("event1489", "type", "discover_ev"), - ("event1489", "with_implement", "voyager_2"), - ("event1489", "year", "1979"), - ("event1490", "object", "metis"), - ("event1490", "subject", "voyager_science_team"), - ("event1490", "type", "discover_ev"), - ("event1490", "with_implement", "voyager_1"), - ("event1490", "year", "1979"), - ("event1491", "location", "kitt_peak"), - ("event1491", "object", "callirrhoe"), - ("event1491", "subject", "science_team_1"), - ("event1491", "type", "discover_ev"), - ("event1491", "with_implement", "refractor_telescope_3"), - ("event1491", "year", "1999"), - ("event1492", "location", "mauna_kea"), - ("event1492", "object", "themisto"), - ("event1492", "subject", "science_team_2"), - ("event1492", "type", "discover_ev"), - ("event1492", "with_implement", "canada-france-hawaii_telescope"), - ("event1492", "with_implement", "subaru_reflector_telescope"), - ("event1492", "year", "1975"), - ("event1493", "location", "mauna_kea"), - ("event1493", "object", "megaclite"), - ("event1493", "subject", "science_team_3"), - ("event1493", "type", "discover_ev"), - ("event1493", "year", "2000"), - ("event1494", "location", "mauna_kea"), - ("event1494", "object", "taygete"), - ("event1494", "subject", "science_team_3"), - ("event1494", "type", "discover_ev"), - ("event1494", "year", "2000"), - ("event1495", "location", "mauna_kea"), - ("event1495", "object", "chaldene"), - ("event1495", "subject", "science_team_3"), - ("event1495", "type", "discover_ev"), - ("event1495", "year", "2000"), - ("event1496", "location", "mauna_kea"), - ("event1496", "object", "harpalyke"), - ("event1496", "subject", "science_team_3"), - ("event1496", "type", "discover_ev"), - ("event1496", "year", "2000"), - ("event1497", "location", "mauna_kea"), - ("event1497", "object", "kalyke"), - ("event1497", "subject", "science_team_3"), - ("event1497", "type", "discover_ev"), - ("event1497", "year", "2000"), - ("event1498", "location", "mauna_kea"), - ("event1498", "object", "iocaste"), - ("event1498", "subject", "science_team_3"), - ("event1498", "type", "discover_ev"), - ("event1498", "year", "2000"), - ("event1499", "location", "mauna_kea"), - ("event1499", "object", "erinome"), - ("event1499", "subject", "science_team_3"), - ("event1499", "type", "discover_ev"), - ("event1499", "year", "2000"), - ("event1500", "location", "mauna_kea"), - ("event1500", "object", "isonoe"), - ("event1500", "subject", "science_team_3"), - ("event1500", "type", "discover_ev"), - ("event1500", "year", "2000"), - ("event1501", "location", "mauna_kea"), - ("event1501", "object", "praxidike"), - ("event1501", "subject", "science_team_3"), - ("event1501", "type", "discover_ev"), - ("event1501", "year", "2000"), - ("event1502", "location", "mauna_kea"), - ("event1502", "object", "autonoe"), - ("event1502", "subject", "science_team_4"), - ("event1502", "type", "discover_ev"), - ("event1502", "year", "2001"), - ("event1503", "location", "mauna_kea"), - ("event1503", "object", "thyone"), - ("event1503", "subject", "science_team_4"), - ("event1503", "type", "discover_ev"), - ("event1503", "year", "2001"), - ("event1504", "location", "mauna_kea"), - ("event1504", "object", "hermippe"), - ("event1504", "subject", "science_team_4"), - ("event1504", "type", "discover_ev"), - ("event1504", "year", "2001"), - ("event1505", "location", "mauna_kea"), - ("event1505", "object", "aitne"), - ("event1505", "subject", "science_team_4"), - ("event1505", "type", "discover_ev"), - ("event1505", "year", "2001"), - ("event1506", "location", "mauna_kea"), - ("event1506", "object", "eurydome"), - ("event1506", "subject", "science_team_4"), - ("event1506", "type", "discover_ev"), - ("event1506", "year", "2001"), - ("event1507", "location", "mauna_kea"), - ("event1507", "object", "euanthe"), - ("event1507", "subject", "science_team_4"), - ("event1507", "type", "discover_ev"), - ("event1507", "year", "2001"), - ("event1508", "location", "mauna_kea"), - ("event1508", "object", "euporie"), - ("event1508", "subject", "science_team_4"), - ("event1508", "type", "discover_ev"), - ("event1508", "year", "2001"), - ("event1509", "location", "mauna_kea"), - ("event1509", "object", "orthosie"), - ("event1509", "subject", "science_team_4"), - ("event1509", "type", "discover_ev"), - ("event1509", "year", "2001"), - ("event1510", "location", "mauna_kea"), - ("event1510", "object", "sponde"), - ("event1510", "subject", "science_team_4"), - ("event1510", "type", "discover_ev"), - ("event1510", "year", "2001"), - ("event1511", "location", "mauna_kea"), - ("event1511", "object", "kale"), - ("event1511", "subject", "science_team_4"), - ("event1511", "type", "discover_ev"), - ("event1511", "year", "2001"), - ("event1512", "location", "mauna_kea"), - ("event1512", "object", "pasithee"), - ("event1512", "subject", "science_team_4"), - ("event1512", "type", "discover_ev"), - ("event1512", "year", "2001"), - ("event1513", "location", "mauna_kea"), - ("event1513", "object", "hegemone"), - ("event1513", "subject", "sheppard"), - ("event1513", "type", "discover_ev"), - ("event1513", "year", "2003"), - ("event1514", "location", "mauna_kea"), - ("event1514", "object", "mneme"), - ("event1514", "subject", "science_team_5"), - ("event1514", "type", "discover_ev"), - ("event1514", "year", "2003"), - ("event1515", "location", "mauna_kea"), - ("event1515", "object", "aoede"), - ("event1515", "subject", "sheppard"), - ("event1515", "type", "discover_ev"), - ("event1515", "year", "2003"), - ("event1516", "location", "mauna_kea"), - ("event1516", "object", "thelxinoe"), - ("event1516", "subject", "sheppard"), - ("event1516", "type", "discover_ev"), - ("event1516", "year", "2003"), - ("event1517", "location", "mauna_kea"), - ("event1517", "object", "arche"), - ("event1517", "subject", "sheppard"), - ("event1517", "type", "discover_ev"), - ("event1517", "year", "2002"), - ("event1518", "location", "mauna_kea"), - ("event1518", "object", "kallichore"), - ("event1518", "subject", "sheppard"), - ("event1518", "type", "discover_ev"), - ("event1518", "year", "2003"), - ("event1519", "location", "mauna_kea"), - ("event1519", "object", "helike"), - ("event1519", "subject", "sheppard"), - ("event1519", "type", "discover_ev"), - ("event1519", "year", "2003"), - ("event1520", "location", "mauna_kea"), - ("event1520", "object", "carpo"), - ("event1520", "subject", "sheppard"), - ("event1520", "type", "discover_ev"), - ("event1520", "year", "2003"), - ("event1521", "location", "mauna_kea"), - ("event1521", "object", "eukelade"), - ("event1521", "subject", "sheppard"), - ("event1521", "type", "discover_ev"), - ("event1521", "year", "2003"), - ("event1522", "location", "mauna_kea"), - ("event1522", "object", "cyllene"), - ("event1522", "subject", "sheppard"), - ("event1522", "type", "discover_ev"), - ("event1522", "year", "2003"), - ("event1523", "location", "mauna_kea"), - ("event1523", "object", "kore"), - ("event1523", "subject", "science_team_4"), - ("event1523", "type", "discover_ev"), - ("event1523", "year", "2003"), - ("event1524", "location", "mauna_kea"), - ("event1524", "object", "herse"), - ("event1524", "subject", "science_team_6"), - ("event1524", "type", "discover_ev"), - ("event1524", "year", "2003"), - ("event1525", "location", "pic_du_midi"), - ("event1525", "object", "helene"), - ("event1525", "subject", "science_team_8"), - ("event1525", "type", "discover_ev"), - ("event1525", "year", "1980"), - ("event1526", "location", "kitt_peak"), - ("event1526", "object", "telesto"), - ("event1526", "subject", "science_team_9"), - ("event1526", "type", "discover_ev"), - ("event1526", "with_implement", "ground_based_telescope_1"), - ("event1526", "year", "1980"), - ("event1527", "location", "flagstaff"), - ("event1527", "object", "calypso"), - ("event1527", "subject", "science_team_10"), - ("event1527", "type", "discover_ev"), - ("event1527", "with_implement", "ground_based_telescope_2"), - ("event1527", "year", "1980"), - ("event1528", "object", "atlas"), - ("event1528", "subject", "voyager_science_team"), - ("event1528", "type", "discover_ev"), - ("event1528", "with_implement", "voyager_1"), - ("event1528", "year", "1980"), - ("event1529", "object", "prometheus"), - ("event1529", "subject", "voyager_science_team"), - ("event1529", "type", "discover_ev"), - ("event1529", "with_implement", "voyager_1"), - ("event1529", "year", "1980"), - ("event1530", "object", "pandora"), - ("event1530", "subject", "voyager_science_team"), - ("event1530", "type", "discover_ev"), - ("event1530", "with_implement", "voyager_1"), - ("event1530", "year", "1980"), - ("event1531", "object", "pan"), - ("event1531", "subject", "showalter"), - ("event1531", "type", "discover_ev"), - ("event1531", "with_implement", "voyager_2"), - ("event1531", "year", "1990"), - ("event1532", "location", "la_silla"), - ("event1532", "object", "ymir"), - ("event1532", "subject", "science_team_11"), - ("event1532", "type", "discover_ev"), - ("event1532", "year", "2000"), - ("event1533", "location", "la_silla"), - ("event1533", "object", "paaliaq"), - ("event1533", "subject", "science_team_11"), - ("event1533", "type", "discover_ev"), - ("event1533", "year", "2000"), - ("event1534", "location", "mauna_kea"), - ("event1534", "object", "tarvos"), - ("event1534", "subject", "science_team_11"), - ("event1534", "type", "discover_ev"), - ("event1534", "with_implement", "canada-france-hawaii_telescope"), - ("event1534", "year", "2000"), - ("event1535", "location", "mauna_kea"), - ("event1535", "object", "ijiraq"), - ("event1535", "subject", "science_team_11"), - ("event1535", "type", "discover_ev"), - ("event1535", "with_implement", "canada-france-hawaii_telescope"), - ("event1535", "year", "2000"), - ("event1536", "location", "mauna_kea"), - ("event1536", "object", "suttungr"), - ("event1536", "subject", "science_team_11"), - ("event1536", "type", "discover_ev"), - ("event1536", "with_implement", "canada-france-hawaii_telescope"), - ("event1536", "year", "2000"), - ("event1537", "location", "la_silla"), - ("event1537", "object", "kiviuq"), - ("event1537", "subject", "science_team_11"), - ("event1537", "type", "discover_ev"), - ("event1537", "year", "2000"), - ("event1538", "location", "mauna_kea"), - ("event1538", "object", "mundilfari"), - ("event1538", "subject", "science_team_11"), - ("event1538", "type", "discover_ev"), - ("event1538", "with_implement", "canada-france-hawaii_telescope"), - ("event1538", "year", "2000"), - ("event1539", "location", "mt_hopkins"), - ("event1539", "object", "albiorix"), - ("event1539", "subject", "holman"), - ("event1539", "type", "discover_ev"), - ("event1539", "with_implement", "reflector_telescope_2"), - ("event1539", "year", "2000"), - ("event1540", "location", "mauna_kea"), - ("event1540", "object", "skathi"), - ("event1540", "subject", "science_team_11"), - ("event1540", "type", "discover_ev"), - ("event1540", "with_implement", "canada-france-hawaii_telescope"), - ("event1540", "year", "2000"), - ("event1541", "location", "mauna_kea"), - ("event1541", "object", "erriapus"), - ("event1541", "subject", "science_team_11"), - ("event1541", "type", "discover_ev"), - ("event1541", "with_implement", "canada-france-hawaii_telescope"), - ("event1541", "year", "2000"), - ("event1542", "location", "mauna_kea"), - ("event1542", "object", "siarnaq"), - ("event1542", "subject", "science_team_11"), - ("event1542", "type", "discover_ev"), - ("event1542", "with_implement", "canada-france-hawaii_telescope"), - ("event1542", "year", "2000"), - ("event1543", "location", "mauna_kea"), - ("event1543", "object", "thrymr"), - ("event1543", "subject", "science_team_11"), - ("event1543", "type", "discover_ev"), - ("event1543", "with_implement", "canada-france-hawaii_telescope"), - ("event1543", "year", "2000"), - ("event1544", "location", "mauna_kea"), - ("event1544", "object", "narvi"), - ("event1544", "subject", "science_team_4"), - ("event1544", "type", "discover_ev"), - ("event1544", "year", "2003"), - ("event1545", "object", "methone"), - ("event1545", "subject", "cassini_imaging_science_team"), - ("event1545", "type", "discover_ev"), - ("event1545", "with_implement", "cassini"), - ("event1545", "year", "2004"), - ("event1546", "object", "pallene"), - ("event1546", "subject", "cassini_imaging_science_team"), - ("event1546", "type", "discover_ev"), - ("event1546", "with_implement", "cassini"), - ("event1546", "year", "2004"), - ("event1547", "object", "polydeuces"), - ("event1547", "subject", "cassini_imaging_science_team"), - ("event1547", "type", "discover_ev"), - ("event1547", "with_implement", "cassini"), - ("event1547", "year", "2004"), - ("event1548", "object", "daphnis"), - ("event1548", "subject", "cassini_imaging_science_team"), - ("event1548", "type", "discover_ev"), - ("event1548", "with_implement", "cassini"), - ("event1548", "year", "2005"), - ("event1549", "location", "mauna_kea"), - ("event1549", "object", "aegir"), - ("event1549", "subject", "science_team_4"), - ("event1549", "type", "discover_ev"), - ("event1549", "with_implement", "subaru_reflector_telescope"), - ("event1549", "year", "2004"), - ("event1550", "location", "mauna_kea"), - ("event1550", "object", "bebhionn"), - ("event1550", "subject", "science_team_4"), - ("event1550", "type", "discover_ev"), - ("event1550", "with_implement", "subaru_reflector_telescope"), - ("event1550", "year", "2004"), - ("event1551", "location", "mauna_kea"), - ("event1551", "object", "bergelmir"), - ("event1551", "subject", "science_team_4"), - ("event1551", "type", "discover_ev"), - ("event1551", "with_implement", "subaru_reflector_telescope"), - ("event1551", "year", "2004"), - ("event1552", "location", "mauna_kea"), - ("event1552", "object", "bestla"), - ("event1552", "subject", "science_team_4"), - ("event1552", "type", "discover_ev"), - ("event1552", "with_implement", "subaru_reflector_telescope"), - ("event1552", "year", "2004"), - ("event1553", "location", "mauna_kea"), - ("event1553", "object", "farbauti"), - ("event1553", "subject", "science_team_4"), - ("event1553", "type", "discover_ev"), - ("event1553", "with_implement", "subaru_reflector_telescope"), - ("event1553", "year", "2004"), - ("event1554", "location", "mauna_kea"), - ("event1554", "object", "fenrir"), - ("event1554", "subject", "science_team_4"), - ("event1554", "type", "discover_ev"), - ("event1554", "with_implement", "subaru_reflector_telescope"), - ("event1554", "year", "2004"), - ("event1555", "location", "mauna_kea"), - ("event1555", "object", "fornjot"), - ("event1555", "subject", "science_team_4"), - ("event1555", "type", "discover_ev"), - ("event1555", "with_implement", "subaru_reflector_telescope"), - ("event1555", "year", "2004"), - ("event1556", "location", "mauna_kea"), - ("event1556", "object", "hati"), - ("event1556", "subject", "science_team_4"), - ("event1556", "type", "discover_ev"), - ("event1556", "with_implement", "subaru_reflector_telescope"), - ("event1556", "year", "2004"), - ("event1557", "location", "mauna_kea"), - ("event1557", "object", "hyrrokkin"), - ("event1557", "subject", "science_team_4"), - ("event1557", "type", "discover_ev"), - ("event1557", "with_implement", "subaru_reflector_telescope"), - ("event1557", "year", "2004"), - ("event1558", "location", "mauna_kea"), - ("event1558", "object", "kari"), - ("event1558", "subject", "science_team_4"), - ("event1558", "type", "discover_ev"), - ("event1558", "with_implement", "subaru_reflector_telescope"), - ("event1558", "year", "2006"), - ("event1559", "location", "mauna_kea"), - ("event1559", "object", "loge"), - ("event1559", "subject", "science_team_4"), - ("event1559", "type", "discover_ev"), - ("event1559", "with_implement", "subaru_reflector_telescope"), - ("event1559", "year", "2006"), - ("event1560", "location", "mauna_kea"), - ("event1560", "object", "skoll"), - ("event1560", "subject", "science_team_4"), - ("event1560", "type", "discover_ev"), - ("event1560", "with_implement", "subaru_reflector_telescope"), - ("event1560", "year", "2006"), - ("event1561", "location", "mauna_kea"), - ("event1561", "object", "surtur"), - ("event1561", "subject", "science_team_4"), - ("event1561", "type", "discover_ev"), - ("event1561", "with_implement", "subaru_reflector_telescope"), - ("event1561", "year", "2006"), - ("event1562", "object", "anthe"), - ("event1562", "subject", "cassini_imaging_science_team"), - ("event1562", "type", "discover_ev"), - ("event1562", "with_implement", "cassini"), - ("event1562", "year", "2007"), - ("event1563", "location", "mauna_kea"), - ("event1563", "object", "jarnsaxa"), - ("event1563", "subject", "science_team_4"), - ("event1563", "type", "discover_ev"), - ("event1563", "with_implement", "subaru_reflector_telescope"), - ("event1563", "year", "2006"), - ("event1564", "location", "mauna_kea"), - ("event1564", "object", "greip"), - ("event1564", "subject", "science_team_4"), - ("event1564", "type", "discover_ev"), - ("event1564", "with_implement", "subaru_reflector_telescope"), - ("event1564", "year", "2006"), - ("event1565", "location", "mauna_kea"), - ("event1565", "object", "tarqeq"), - ("event1565", "subject", "science_team_4"), - ("event1565", "type", "discover_ev"), - ("event1565", "with_implement", "subaru_reflector_telescope"), - ("event1565", "year", "2007"), - ("event1566", "object", "aegaeon"), - ("event1566", "subject", "cassini_imaging_science_team"), - ("event1566", "type", "discover_ev"), - ("event1566", "with_implement", "cassini"), - ("event1566", "year", "2008"), - ("event1567", "object", "cordelia"), - ("event1567", "subject", "voyager_science_team"), - ("event1567", "type", "discover_ev"), - ("event1567", "with_implement", "voyager_2"), - ("event1567", "year", "1986"), - ("event1568", "object", "ophelia"), - ("event1568", "subject", "voyager_science_team"), - ("event1568", "type", "discover_ev"), - ("event1568", "with_implement", "voyager_2"), - ("event1568", "year", "1986"), - ("event1569", "object", "bianca"), - ("event1569", "subject", "voyager_science_team"), - ("event1569", "type", "discover_ev"), - ("event1569", "with_implement", "voyager_2"), - ("event1569", "year", "1986"), - ("event1570", "object", "cressida"), - ("event1570", "subject", "voyager_science_team"), - ("event1570", "type", "discover_ev"), - ("event1570", "with_implement", "voyager_2"), - ("event1570", "year", "1986"), - ("event1571", "object", "desdemona"), - ("event1571", "subject", "voyager_science_team"), - ("event1571", "type", "discover_ev"), - ("event1571", "with_implement", "voyager_2"), - ("event1571", "year", "1986"), - ("event1572", "object", "juliet"), - ("event1572", "subject", "voyager_science_team"), - ("event1572", "type", "discover_ev"), - ("event1572", "with_implement", "voyager_2"), - ("event1572", "year", "1986"), - ("event1573", "object", "portia"), - ("event1573", "subject", "voyager_science_team"), - ("event1573", "type", "discover_ev"), - ("event1573", "with_implement", "voyager_2"), - ("event1573", "year", "1986"), - ("event1574", "object", "rosalind"), - ("event1574", "subject", "voyager_science_team"), - ("event1574", "type", "discover_ev"), - ("event1574", "with_implement", "voyager_2"), - ("event1574", "year", "1986"), - ("event1575", "object", "belinda"), - ("event1575", "subject", "voyager_science_team"), - ("event1575", "type", "discover_ev"), - ("event1575", "with_implement", "voyager_2"), - ("event1575", "year", "1986"), - ("event1576", "object", "puck"), - ("event1576", "subject", "voyager_science_team"), - ("event1576", "type", "discover_ev"), - ("event1576", "with_implement", "voyager_2"), - ("event1576", "year", "1985"), - ("event1577", "location", "mt_palomar"), - ("event1577", "object", "caliban"), - ("event1577", "subject", "science_team_12"), - ("event1577", "type", "discover_ev"), - ("event1577", "with_implement", "hale_telescope"), - ("event1577", "year", "1997"), - ("event1578", "location", "mt_palomar"), - ("event1578", "object", "sycorax"), - ("event1578", "subject", "science_team_12"), - ("event1578", "type", "discover_ev"), - ("event1578", "with_implement", "hale_telescope"), - ("event1578", "year", "1997"), - ("event1579", "location", "mauna_kea"), - ("event1579", "object", "prospero"), - ("event1579", "subject", "science_team_13"), - ("event1579", "type", "discover_ev"), - ("event1579", "with_implement", "canada-france-hawaii_telescope"), - ("event1579", "year", "1999"), - ("event1580", "location", "mauna_kea"), - ("event1580", "object", "setebos"), - ("event1580", "subject", "science_team_13"), - ("event1580", "type", "discover_ev"), - ("event1580", "with_implement", "canada-france-hawaii_telescope"), - ("event1580", "year", "1999"), - ("event1581", "location", "mauna_kea"), - ("event1581", "object", "stephano"), - ("event1581", "subject", "science_team_13"), - ("event1581", "type", "discover_ev"), - ("event1581", "with_implement", "canada-france-hawaii_telescope"), - ("event1581", "year", "1999"), - ("event1582", "location", "cerro_tololo"), - ("event1582", "object", "trinculo"), - ("event1582", "subject", "science_team_14"), - ("event1582", "type", "discover_ev"), - ("event1582", "with_implement", "reflector_telescope_4"), - ("event1582", "year", "2001"), - ("event1583", "location", "cerro_tololo"), - ("event1583", "object", "francisco"), - ("event1583", "subject", "science_team_15"), - ("event1583", "type", "discover_ev"), - ("event1583", "with_implement", "reflector_telescope_4"), - ("event1583", "year", "2001"), - ("event1584", "location", "mauna_kea"), - ("event1584", "object", "margaret"), - ("event1584", "subject", "science_team_16"), - ("event1584", "type", "discover_ev"), - ("event1584", "with_implement", "subaru_reflector_telescope"), - ("event1584", "year", "2003"), - ("event1585", "location", "cerro_tololo"), - ("event1585", "object", "ferdinand"), - ("event1585", "subject", "science_team_15"), - ("event1585", "type", "discover_ev"), - ("event1585", "with_implement", "reflector_telescope_4"), - ("event1585", "year", "2001"), - ("event1586", "object", "perdita"), - ("event1586", "subject", "karkoschka"), - ("event1586", "type", "discover_ev"), - ("event1586", "with_implement", "voyager_2"), - ("event1586", "year", "1986"), - ("event1587", "object", "mab"), - ("event1587", "subject", "science_team_17"), - ("event1587", "type", "discover_ev"), - ("event1587", "with_implement", "hubble_space_telescope"), - ("event1587", "year", "2003"), - ("event1588", "object", "cupid"), - ("event1588", "subject", "science_team_17"), - ("event1588", "type", "discover_ev"), - ("event1588", "with_implement", "hubble_space_telescope"), - ("event1588", "year", "2003"), - ("event1589", "location", "liverpool"), - ("event1589", "object", "triton"), - ("event1589", "subject", "lassell"), - ("event1589", "type", "discover_ev"), - ("event1589", "with_implement", "reflector_telescope_3"), - ("event1589", "year", "1846"), - ("event1590", "object", "naiad"), - ("event1590", "subject", "voyager_science_team"), - ("event1590", "type", "discover_ev"), - ("event1590", "with_implement", "voyager_2"), - ("event1590", "year", "1989"), - ("event1591", "object", "thalassa"), - ("event1591", "subject", "voyager_science_team"), - ("event1591", "type", "discover_ev"), - ("event1591", "with_implement", "voyager_2"), - ("event1591", "year", "1989"), - ("event1592", "object", "despina"), - ("event1592", "subject", "voyager_science_team"), - ("event1592", "type", "discover_ev"), - ("event1592", "with_implement", "voyager_2"), - ("event1592", "year", "1989"), - ("event1593", "object", "galatea"), - ("event1593", "subject", "voyager_science_team"), - ("event1593", "type", "discover_ev"), - ("event1593", "with_implement", "voyager_2"), - ("event1593", "year", "1989"), - ("event1594", "object", "larissa"), - ("event1594", "subject", "voyager_science_team"), - ("event1594", "type", "discover_ev"), - ("event1594", "with_implement", "voyager_2"), - ("event1594", "year", "1989"), - ("event1595", "object", "proteus"), - ("event1595", "subject", "voyager_science_team"), - ("event1595", "type", "discover_ev"), - ("event1595", "with_implement", "voyager_2"), - ("event1595", "year", "1989"), - ("event1596", "location", "cerro_tololo"), - ("event1596", "object", "halimede"), - ("event1596", "subject", "science_team_18"), - ("event1596", "type", "discover_ev"), - ("event1596", "with_implement", "blanco_telescope"), - ("event1596", "with_implement", "canada-france-hawaii_telescope"), - ("event1596", "year", "2002"), - ("event1597", "location", "mauna_kea"), - ("event1597", "object", "psamathe"), - ("event1597", "subject", "science_team_4"), - ("event1597", "type", "discover_ev"), - ("event1597", "with_implement", "subaru_reflector_telescope"), - ("event1597", "year", "2003"), - ("event1598", "location", "cerro_tololo"), - ("event1598", "object", "sao"), - ("event1598", "subject", "science_team_18"), - ("event1598", "type", "discover_ev"), - ("event1598", "with_implement", "blanco_telescope"), - ("event1598", "with_implement", "canada-france-hawaii_telescope"), - ("event1598", "year", "2002"), - ("event1599", "location", "cerro_tololo"), - ("event1599", "object", "laomedeia"), - ("event1599", "subject", "science_team_18"), - ("event1599", "type", "discover_ev"), - ("event1599", "with_implement", "blanco_telescope"), - ("event1599", "with_implement", "canada-france-hawaii_telescope"), - ("event1599", "year", "2002"), - ("event1600", "location", "cerro_tololo"), - ("event1600", "object", "neso"), - ("event1600", "subject", "science_team_18"), - ("event1600", "type", "discover_ev"), - ("event1600", "with_implement", "blanco_telescope"), - ("event1600", "year", "2002"), - ("event1601", "location", "flagstaff"), - ("event1601", "object", "charon"), - ("event1601", "subject", "christy"), - ("event1601", "type", "discover_ev"), - ("event1601", "year", "1978"), - ("event1602", "object", "nix"), - ("event1602", "subject", "science_team_19"), - ("event1602", "type", "discover_ev"), - ("event1602", "with_implement", "hubble_space_telescope"), - ("event1602", "year", "2005"), - ("event1603", "object", "hydra"), - ("event1603", "subject", "science_team_19"), - ("event1603", "type", "discover_ev"), - ("event1603", "with_implement", "hubble_space_telescope"), - ("event1603", "year", "2005"), - ("event1604", "object", "kerberos"), - ("event1604", "subject", "science_team_20"), - ("event1604", "type", "discover_ev"), - ("event1604", "with_implement", "hubble_space_telescope"), - ("event1604", "year", "2011"), - ("event1605", "object", "styx"), - ("event1605", "subject", "science_team_21"), - ("event1605", "type", "discover_ev"), - ("event1605", "with_implement", "hubble_space_telescope"), - ("event1605", "year", "2012"), - ("event1606", "object", "moon"), - ("event1606", "subject", "adrastea"), - ("event1606", "type", "membership"), - ("event1607", "object", "moon"), - ("event1607", "subject", "metis"), - ("event1607", "type", "membership"), - ("event1608", "object", "moon"), - ("event1608", "subject", "callirrhoe"), - ("event1608", "type", "membership"), - ("event1609", "object", "moon"), - ("event1609", "subject", "themisto"), - ("event1609", "type", "membership"), - ("event1610", "object", "moon"), - ("event1610", "subject", "megaclite"), - ("event1610", "type", "membership"), - ("event1611", "object", "moon"), - ("event1611", "subject", "taygete"), - ("event1611", "type", "membership"), - ("event1612", "object", "moon"), - ("event1612", "subject", "chaldene"), - ("event1612", "type", "membership"), - ("event1613", "object", "moon"), - ("event1613", "subject", "harpalyke"), - ("event1613", "type", "membership"), - ("event1614", "object", "moon"), - ("event1614", "subject", "kalyke"), - ("event1614", "type", "membership"), - ("event1615", "object", "moon"), - ("event1615", "subject", "iocaste"), - ("event1615", "type", "membership"), - ("event1616", "object", "moon"), - ("event1616", "subject", "erinome"), - ("event1616", "type", "membership"), - ("event1617", "object", "moon"), - ("event1617", "subject", "isonoe"), - ("event1617", "type", "membership"), - ("event1618", "object", "moon"), - ("event1618", "subject", "praxidike"), - ("event1618", "type", "membership"), - ("event1619", "object", "moon"), - ("event1619", "subject", "autonoe"), - ("event1619", "type", "membership"), - ("event1620", "object", "moon"), - ("event1620", "subject", "thyone"), - ("event1620", "type", "membership"), - ("event1621", "object", "moon"), - ("event1621", "subject", "hermippe"), - ("event1621", "type", "membership"), - ("event1622", "object", "moon"), - ("event1622", "subject", "aitne"), - ("event1622", "type", "membership"), - ("event1623", "object", "moon"), - ("event1623", "subject", "eurydome"), - ("event1623", "type", "membership"), - ("event1624", "object", "moon"), - ("event1624", "subject", "euanthe"), - ("event1624", "type", "membership"), - ("event1625", "object", "moon"), - ("event1625", "subject", "euporie"), - ("event1625", "type", "membership"), - ("event1626", "object", "moon"), - ("event1626", "subject", "orthosie"), - ("event1626", "type", "membership"), - ("event1627", "object", "moon"), - ("event1627", "subject", "sponde"), - ("event1627", "type", "membership"), - ("event1628", "object", "moon"), - ("event1628", "subject", "kale"), - ("event1628", "type", "membership"), - ("event1629", "object", "moon"), - ("event1629", "subject", "pasithee"), - ("event1629", "type", "membership"), - ("event1630", "object", "moon"), - ("event1630", "subject", "hegemone"), - ("event1630", "type", "membership"), - ("event1631", "object", "moon"), - ("event1631", "subject", "mneme"), - ("event1631", "type", "membership"), - ("event1632", "object", "moon"), - ("event1632", "subject", "aoede"), - ("event1632", "type", "membership"), - ("event1633", "object", "moon"), - ("event1633", "subject", "thelxinoe"), - ("event1633", "type", "membership"), - ("event1634", "object", "moon"), - ("event1634", "subject", "arche"), - ("event1634", "type", "membership"), - ("event1635", "object", "moon"), - ("event1635", "subject", "kallichore"), - ("event1635", "type", "membership"), - ("event1636", "object", "moon"), - ("event1636", "subject", "helike"), - ("event1636", "type", "membership"), - ("event1637", "object", "moon"), - ("event1637", "subject", "carpo"), - ("event1637", "type", "membership"), - ("event1638", "object", "moon"), - ("event1638", "subject", "eukelade"), - ("event1638", "type", "membership"), - ("event1639", "object", "moon"), - ("event1639", "subject", "cyllene"), - ("event1639", "type", "membership"), - ("event1640", "object", "moon"), - ("event1640", "subject", "kore"), - ("event1640", "type", "membership"), - ("event1641", "object", "moon"), - ("event1641", "subject", "herse"), - ("event1641", "type", "membership"), - ("event1642", "object", "moon"), - ("event1642", "subject", "helene"), - ("event1642", "type", "membership"), - ("event1643", "object", "moon"), - ("event1643", "subject", "telesto"), - ("event1643", "type", "membership"), - ("event1644", "object", "moon"), - ("event1644", "subject", "calypso"), - ("event1644", "type", "membership"), - ("event1645", "object", "moon"), - ("event1645", "subject", "atlas"), - ("event1645", "type", "membership"), - ("event1646", "object", "moon"), - ("event1646", "subject", "prometheus"), - ("event1646", "type", "membership"), - ("event1647", "object", "moon"), - ("event1647", "subject", "pandora"), - ("event1647", "type", "membership"), - ("event1648", "object", "moon"), - ("event1648", "subject", "pan"), - ("event1648", "type", "membership"), - ("event1649", "object", "moon"), - ("event1649", "subject", "ymir"), - ("event1649", "type", "membership"), - ("event1650", "object", "moon"), - ("event1650", "subject", "paaliaq"), - ("event1650", "type", "membership"), - ("event1651", "object", "moon"), - ("event1651", "subject", "tarvos"), - ("event1651", "type", "membership"), - ("event1652", "object", "moon"), - ("event1652", "subject", "ijiraq"), - ("event1652", "type", "membership"), - ("event1653", "object", "moon"), - ("event1653", "subject", "suttungr"), - ("event1653", "type", "membership"), - ("event1654", "object", "moon"), - ("event1654", "subject", "kiviuq"), - ("event1654", "type", "membership"), - ("event1655", "object", "moon"), - ("event1655", "subject", "mundilfari"), - ("event1655", "type", "membership"), - ("event1656", "object", "moon"), - ("event1656", "subject", "albiorix"), - ("event1656", "type", "membership"), - ("event1657", "object", "moon"), - ("event1657", "subject", "skathi"), - ("event1657", "type", "membership"), - ("event1658", "object", "moon"), - ("event1658", "subject", "erriapus"), - ("event1658", "type", "membership"), - ("event1659", "object", "moon"), - ("event1659", "subject", "siarnaq"), - ("event1659", "type", "membership"), - ("event1660", "object", "moon"), - ("event1660", "subject", "thrymr"), - ("event1660", "type", "membership"), - ("event1661", "object", "moon"), - ("event1661", "subject", "narvi"), - ("event1661", "type", "membership"), - ("event1662", "object", "moon"), - ("event1662", "subject", "methone"), - ("event1662", "type", "membership"), - ("event1663", "object", "moon"), - ("event1663", "subject", "pallene"), - ("event1663", "type", "membership"), - ("event1664", "object", "moon"), - ("event1664", "subject", "polydeuces"), - ("event1664", "type", "membership"), - ("event1665", "object", "moon"), - ("event1665", "subject", "daphnis"), - ("event1665", "type", "membership"), - ("event1666", "object", "moon"), - ("event1666", "subject", "aegir"), - ("event1666", "type", "membership"), - ("event1667", "object", "moon"), - ("event1667", "subject", "bebhionn"), - ("event1667", "type", "membership"), - ("event1668", "object", "moon"), - ("event1668", "subject", "bergelmir"), - ("event1668", "type", "membership"), - ("event1669", "object", "moon"), - ("event1669", "subject", "bestla"), - ("event1669", "type", "membership"), - ("event1670", "object", "moon"), - ("event1670", "subject", "farbauti"), - ("event1670", "type", "membership"), - ("event1671", "object", "moon"), - ("event1671", "subject", "fenrir"), - ("event1671", "type", "membership"), - ("event1672", "object", "moon"), - ("event1672", "subject", "fornjot"), - ("event1672", "type", "membership"), - ("event1673", "object", "moon"), - ("event1673", "subject", "hati"), - ("event1673", "type", "membership"), - ("event1674", "object", "moon"), - ("event1674", "subject", "hyrrokkin"), - ("event1674", "type", "membership"), - ("event1675", "object", "moon"), - ("event1675", "subject", "kari"), - ("event1675", "type", "membership"), - ("event1676", "object", "moon"), - ("event1676", "subject", "loge"), - ("event1676", "type", "membership"), - ("event1677", "object", "moon"), - ("event1677", "subject", "skoll"), - ("event1677", "type", "membership"), - ("event1678", "object", "moon"), - ("event1678", "subject", "surtur"), - ("event1678", "type", "membership"), - ("event1679", "object", "moon"), - ("event1679", "subject", "anthe"), - ("event1679", "type", "membership"), - ("event1680", "object", "moon"), - ("event1680", "subject", "jarnsaxa"), - ("event1680", "type", "membership"), - ("event1681", "object", "moon"), - ("event1681", "subject", "greip"), - ("event1681", "type", "membership"), - ("event1682", "object", "moon"), - ("event1682", "subject", "tarqeq"), - ("event1682", "type", "membership"), - ("event1683", "object", "moon"), - ("event1683", "subject", "aegaeon"), - ("event1683", "type", "membership"), - ("event1684", "object", "moon"), - ("event1684", "subject", "cordelia"), - ("event1684", "type", "membership"), - ("event1685", "object", "moon"), - ("event1685", "subject", "ophelia"), - ("event1685", "type", "membership"), - ("event1686", "object", "moon"), - ("event1686", "subject", "bianca"), - ("event1686", "type", "membership"), - ("event1687", "object", "moon"), - ("event1687", "subject", "cressida"), - ("event1687", "type", "membership"), - ("event1688", "object", "moon"), - ("event1688", "subject", "desdemona"), - ("event1688", "type", "membership"), - ("event1689", "object", "moon"), - ("event1689", "subject", "juliet"), - ("event1689", "type", "membership"), - ("event1690", "object", "moon"), - ("event1690", "subject", "portia"), - ("event1690", "type", "membership"), - ("event1691", "object", "moon"), - ("event1691", "subject", "rosalind"), - ("event1691", "type", "membership"), - ("event1692", "object", "moon"), - ("event1692", "subject", "belinda"), - ("event1692", "type", "membership"), - ("event1693", "object", "moon"), - ("event1693", "subject", "puck"), - ("event1693", "type", "membership"), - ("event1694", "object", "moon"), - ("event1694", "subject", "caliban"), - ("event1694", "type", "membership"), - ("event1695", "object", "moon"), - ("event1695", "subject", "sycorax"), - ("event1695", "type", "membership"), - ("event1696", "object", "moon"), - ("event1696", "subject", "prospero"), - ("event1696", "type", "membership"), - ("event1697", "object", "moon"), - ("event1697", "subject", "setebos"), - ("event1697", "type", "membership"), - ("event1698", "object", "moon"), - ("event1698", "subject", "stephano"), - ("event1698", "type", "membership"), - ("event1699", "object", "moon"), - ("event1699", "subject", "trinculo"), - ("event1699", "type", "membership"), - ("event1700", "object", "moon"), - ("event1700", "subject", "francisco"), - ("event1700", "type", "membership"), - ("event1701", "object", "moon"), - ("event1701", "subject", "margaret"), - ("event1701", "type", "membership"), - ("event1702", "object", "moon"), - ("event1702", "subject", "ferdinand"), - ("event1702", "type", "membership"), - ("event1703", "object", "moon"), - ("event1703", "subject", "perdita"), - ("event1703", "type", "membership"), - ("event1704", "object", "moon"), - ("event1704", "subject", "mab"), - ("event1704", "type", "membership"), - ("event1705", "object", "moon"), - ("event1705", "subject", "cupid"), - ("event1705", "type", "membership"), - ("event1707", "object", "moon"), - ("event1707", "subject", "naiad"), - ("event1707", "type", "membership"), - ("event1708", "object", "moon"), - ("event1708", "subject", "thalassa"), - ("event1708", "type", "membership"), - ("event1709", "object", "moon"), - ("event1709", "subject", "despina"), - ("event1709", "type", "membership"), - ("event1710", "object", "moon"), - ("event1710", "subject", "galatea"), - ("event1710", "type", "membership"), - ("event1711", "object", "moon"), - ("event1711", "subject", "larissa"), - ("event1711", "type", "membership"), - ("event1712", "object", "moon"), - ("event1712", "subject", "proteus"), - ("event1712", "type", "membership"), - ("event1713", "object", "moon"), - ("event1713", "subject", "halimede"), - ("event1713", "type", "membership"), - ("event1714", "object", "moon"), - ("event1714", "subject", "psamathe"), - ("event1714", "type", "membership"), - ("event1715", "object", "moon"), - ("event1715", "subject", "sao"), - ("event1715", "type", "membership"), - ("event1716", "object", "moon"), - ("event1716", "subject", "laomedeia"), - ("event1716", "type", "membership"), - ("event1717", "object", "moon"), - ("event1717", "subject", "neso"), - ("event1717", "type", "membership"), - ("event1718", "object", "moon"), - ("event1718", "subject", "nix"), - ("event1718", "type", "membership"), - ("event1719", "object", "moon"), - ("event1719", "subject", "hydra"), - ("event1719", "type", "membership"), - ("event1720", "object", "moon"), - ("event1720", "subject", "kerberos"), - ("event1720", "type", "membership"), - ("event1721", "object", "moon"), - ("event1721", "subject", "styx"), - ("event1721", "type", "membership"), - ("event1722", "object", "spin"), - ("event1722", "subject", "adrastea"), - ("event1722", "type", "membership"), - ("event1723", "object", "spin"), - ("event1723", "subject", "metis"), - ("event1723", "type", "membership"), - ("event1724", "object", "spin"), - ("event1724", "subject", "callirrhoe"), - ("event1724", "type", "membership"), - ("event1725", "object", "spin"), - ("event1725", "subject", "themisto"), - ("event1725", "type", "membership"), - ("event1726", "object", "spin"), - ("event1726", "subject", "megaclite"), - ("event1726", "type", "membership"), - ("event1727", "object", "spin"), - ("event1727", "subject", "taygete"), - ("event1727", "type", "membership"), - ("event1728", "object", "spin"), - ("event1728", "subject", "chaldene"), - ("event1728", "type", "membership"), - ("event1729", "object", "spin"), - ("event1729", "subject", "harpalyke"), - ("event1729", "type", "membership"), - ("event1730", "object", "spin"), - ("event1730", "subject", "kalyke"), - ("event1730", "type", "membership"), - ("event1731", "object", "spin"), - ("event1731", "subject", "iocaste"), - ("event1731", "type", "membership"), - ("event1732", "object", "spin"), - ("event1732", "subject", "erinome"), - ("event1732", "type", "membership"), - ("event1733", "object", "spin"), - ("event1733", "subject", "isonoe"), - ("event1733", "type", "membership"), - ("event1734", "object", "spin"), - ("event1734", "subject", "praxidike"), - ("event1734", "type", "membership"), - ("event1735", "object", "spin"), - ("event1735", "subject", "autonoe"), - ("event1735", "type", "membership"), - ("event1736", "object", "spin"), - ("event1736", "subject", "thyone"), - ("event1736", "type", "membership"), - ("event1737", "object", "spin"), - ("event1737", "subject", "hermippe"), - ("event1737", "type", "membership"), - ("event1738", "object", "spin"), - ("event1738", "subject", "aitne"), - ("event1738", "type", "membership"), - ("event1739", "object", "spin"), - ("event1739", "subject", "eurydome"), - ("event1739", "type", "membership"), - ("event1740", "object", "spin"), - ("event1740", "subject", "euanthe"), - ("event1740", "type", "membership"), - ("event1741", "object", "spin"), - ("event1741", "subject", "euporie"), - ("event1741", "type", "membership"), - ("event1742", "object", "spin"), - ("event1742", "subject", "orthosie"), - ("event1742", "type", "membership"), - ("event1743", "object", "spin"), - ("event1743", "subject", "sponde"), - ("event1743", "type", "membership"), - ("event1744", "object", "spin"), - ("event1744", "subject", "kale"), - ("event1744", "type", "membership"), - ("event1745", "object", "spin"), - ("event1745", "subject", "pasithee"), - ("event1745", "type", "membership"), - ("event1746", "object", "spin"), - ("event1746", "subject", "hegemone"), - ("event1746", "type", "membership"), - ("event1747", "object", "spin"), - ("event1747", "subject", "mneme"), - ("event1747", "type", "membership"), - ("event1748", "object", "spin"), - ("event1748", "subject", "aoede"), - ("event1748", "type", "membership"), - ("event1749", "object", "spin"), - ("event1749", "subject", "thelxinoe"), - ("event1749", "type", "membership"), - ("event1750", "object", "spin"), - ("event1750", "subject", "arche"), - ("event1750", "type", "membership"), - ("event1751", "object", "spin"), - ("event1751", "subject", "kallichore"), - ("event1751", "type", "membership"), - ("event1752", "object", "spin"), - ("event1752", "subject", "helike"), - ("event1752", "type", "membership"), - ("event1753", "object", "spin"), - ("event1753", "subject", "carpo"), - ("event1753", "type", "membership"), - ("event1754", "object", "spin"), - ("event1754", "subject", "eukelade"), - ("event1754", "type", "membership"), - ("event1755", "object", "spin"), - ("event1755", "subject", "cyllene"), - ("event1755", "type", "membership"), - ("event1756", "object", "spin"), - ("event1756", "subject", "kore"), - ("event1756", "type", "membership"), - ("event1757", "object", "spin"), - ("event1757", "subject", "herse"), - ("event1757", "type", "membership"), - ("event1758", "object", "spin"), - ("event1758", "subject", "helene"), - ("event1758", "type", "membership"), - ("event1759", "object", "spin"), - ("event1759", "subject", "telesto"), - ("event1759", "type", "membership"), - ("event1760", "object", "spin"), - ("event1760", "subject", "calypso"), - ("event1760", "type", "membership"), - ("event1761", "object", "spin"), - ("event1761", "subject", "atlas"), - ("event1761", "type", "membership"), - ("event1762", "object", "spin"), - ("event1762", "subject", "prometheus"), - ("event1762", "type", "membership"), - ("event1763", "object", "spin"), - ("event1763", "subject", "pandora"), - ("event1763", "type", "membership"), - ("event1764", "object", "spin"), - ("event1764", "subject", "pan"), - ("event1764", "type", "membership"), - ("event1765", "object", "spin"), - ("event1765", "subject", "ymir"), - ("event1765", "type", "membership"), - ("event1766", "object", "spin"), - ("event1766", "subject", "paaliaq"), - ("event1766", "type", "membership"), - ("event1767", "object", "spin"), - ("event1767", "subject", "tarvos"), - ("event1767", "type", "membership"), - ("event1768", "object", "spin"), - ("event1768", "subject", "ijiraq"), - ("event1768", "type", "membership"), - ("event1769", "object", "spin"), - ("event1769", "subject", "suttungr"), - ("event1769", "type", "membership"), - ("event1770", "object", "spin"), - ("event1770", "subject", "kiviuq"), - ("event1770", "type", "membership"), - ("event1771", "object", "spin"), - ("event1771", "subject", "mundilfari"), - ("event1771", "type", "membership"), - ("event1772", "object", "spin"), - ("event1772", "subject", "albiorix"), - ("event1772", "type", "membership"), - ("event1773", "object", "spin"), - ("event1773", "subject", "skathi"), - ("event1773", "type", "membership"), - ("event1774", "object", "spin"), - ("event1774", "subject", "erriapus"), - ("event1774", "type", "membership"), - ("event1775", "object", "spin"), - ("event1775", "subject", "siarnaq"), - ("event1775", "type", "membership"), - ("event1776", "object", "spin"), - ("event1776", "subject", "thrymr"), - ("event1776", "type", "membership"), - ("event1777", "object", "spin"), - ("event1777", "subject", "narvi"), - ("event1777", "type", "membership"), - ("event1778", "object", "spin"), - ("event1778", "subject", "methone"), - ("event1778", "type", "membership"), - ("event1779", "object", "spin"), - ("event1779", "subject", "pallene"), - ("event1779", "type", "membership"), - ("event1780", "object", "spin"), - ("event1780", "subject", "polydeuces"), - ("event1780", "type", "membership"), - ("event1781", "object", "spin"), - ("event1781", "subject", "daphnis"), - ("event1781", "type", "membership"), - ("event1782", "object", "spin"), - ("event1782", "subject", "aegir"), - ("event1782", "type", "membership"), - ("event1783", "object", "spin"), - ("event1783", "subject", "bebhionn"), - ("event1783", "type", "membership"), - ("event1784", "object", "spin"), - ("event1784", "subject", "bergelmir"), - ("event1784", "type", "membership"), - ("event1785", "object", "spin"), - ("event1785", "subject", "bestla"), - ("event1785", "type", "membership"), - ("event1786", "object", "spin"), - ("event1786", "subject", "farbauti"), - ("event1786", "type", "membership"), - ("event1787", "object", "spin"), - ("event1787", "subject", "fenrir"), - ("event1787", "type", "membership"), - ("event1788", "object", "spin"), - ("event1788", "subject", "fornjot"), - ("event1788", "type", "membership"), - ("event1789", "object", "spin"), - ("event1789", "subject", "hati"), - ("event1789", "type", "membership"), - ("event1790", "object", "spin"), - ("event1790", "subject", "hyrrokkin"), - ("event1790", "type", "membership"), - ("event1791", "object", "spin"), - ("event1791", "subject", "kari"), - ("event1791", "type", "membership"), - ("event1792", "object", "spin"), - ("event1792", "subject", "loge"), - ("event1792", "type", "membership"), - ("event1793", "object", "spin"), - ("event1793", "subject", "skoll"), - ("event1793", "type", "membership"), - ("event1794", "object", "spin"), - ("event1794", "subject", "surtur"), - ("event1794", "type", "membership"), - ("event1795", "object", "spin"), - ("event1795", "subject", "anthe"), - ("event1795", "type", "membership"), - ("event1796", "object", "spin"), - ("event1796", "subject", "jarnsaxa"), - ("event1796", "type", "membership"), - ("event1797", "object", "spin"), - ("event1797", "subject", "greip"), - ("event1797", "type", "membership"), - ("event1798", "object", "spin"), - ("event1798", "subject", "tarqeq"), - ("event1798", "type", "membership"), - ("event1799", "object", "spin"), - ("event1799", "subject", "aegaeon"), - ("event1799", "type", "membership"), - ("event1800", "object", "spin"), - ("event1800", "subject", "cordelia"), - ("event1800", "type", "membership"), - ("event1801", "object", "spin"), - ("event1801", "subject", "ophelia"), - ("event1801", "type", "membership"), - ("event1802", "object", "spin"), - ("event1802", "subject", "bianca"), - ("event1802", "type", "membership"), - ("event1803", "object", "spin"), - ("event1803", "subject", "cressida"), - ("event1803", "type", "membership"), - ("event1804", "object", "spin"), - ("event1804", "subject", "desdemona"), - ("event1804", "type", "membership"), - ("event1805", "object", "spin"), - ("event1805", "subject", "juliet"), - ("event1805", "type", "membership"), - ("event1806", "object", "spin"), - ("event1806", "subject", "portia"), - ("event1806", "type", "membership"), - ("event1807", "object", "spin"), - ("event1807", "subject", "rosalind"), - ("event1807", "type", "membership"), - ("event1808", "object", "spin"), - ("event1808", "subject", "belinda"), - ("event1808", "type", "membership"), - ("event1809", "object", "spin"), - ("event1809", "subject", "puck"), - ("event1809", "type", "membership"), - ("event1810", "object", "spin"), - ("event1810", "subject", "caliban"), - ("event1810", "type", "membership"), - ("event1811", "object", "spin"), - ("event1811", "subject", "sycorax"), - ("event1811", "type", "membership"), - ("event1812", "object", "spin"), - ("event1812", "subject", "prospero"), - ("event1812", "type", "membership"), - ("event1813", "object", "spin"), - ("event1813", "subject", "setebos"), - ("event1813", "type", "membership"), - ("event1814", "object", "spin"), - ("event1814", "subject", "stephano"), - ("event1814", "type", "membership"), - ("event1815", "object", "spin"), - ("event1815", "subject", "trinculo"), - ("event1815", "type", "membership"), - ("event1816", "object", "spin"), - ("event1816", "subject", "francisco"), - ("event1816", "type", "membership"), - ("event1817", "object", "spin"), - ("event1817", "subject", "margaret"), - ("event1817", "type", "membership"), - ("event1818", "object", "spin"), - ("event1818", "subject", "ferdinand"), - ("event1818", "type", "membership"), - ("event1819", "object", "spin"), - ("event1819", "subject", "perdita"), - ("event1819", "type", "membership"), - ("event1820", "object", "spin"), - ("event1820", "subject", "mab"), - ("event1820", "type", "membership"), - ("event1821", "object", "spin"), - ("event1821", "subject", "cupid"), - ("event1821", "type", "membership"), - ("event1823", "object", "spin"), - ("event1823", "subject", "naiad"), - ("event1823", "type", "membership"), - ("event1824", "object", "spin"), - ("event1824", "subject", "thalassa"), - ("event1824", "type", "membership"), - ("event1825", "object", "spin"), - ("event1825", "subject", "despina"), - ("event1825", "type", "membership"), - ("event1826", "object", "spin"), - ("event1826", "subject", "galatea"), - ("event1826", "type", "membership"), - ("event1827", "object", "spin"), - ("event1827", "subject", "larissa"), - ("event1827", "type", "membership"), - ("event1828", "object", "spin"), - ("event1828", "subject", "proteus"), - ("event1828", "type", "membership"), - ("event1829", "object", "spin"), - ("event1829", "subject", "halimede"), - ("event1829", "type", "membership"), - ("event1830", "object", "spin"), - ("event1830", "subject", "psamathe"), - ("event1830", "type", "membership"), - ("event1831", "object", "spin"), - ("event1831", "subject", "sao"), - ("event1831", "type", "membership"), - ("event1832", "object", "spin"), - ("event1832", "subject", "laomedeia"), - ("event1832", "type", "membership"), - ("event1833", "object", "spin"), - ("event1833", "subject", "neso"), - ("event1833", "type", "membership"), - ("event1834", "object", "spin"), - ("event1834", "subject", "nix"), - ("event1834", "type", "membership"), - ("event1835", "object", "spin"), - ("event1835", "subject", "hydra"), - ("event1835", "type", "membership"), - ("event1836", "object", "spin"), - ("event1836", "subject", "kerberos"), - ("event1836", "type", "membership"), - ("event1837", "object", "spin"), - ("event1837", "subject", "styx"), - ("event1837", "type", "membership"), - ("event1838", "object", "thing"), - ("event1838", "subject", "adrastea"), - ("event1838", "type", "membership"), - ("event1839", "object", "thing"), - ("event1839", "subject", "metis"), - ("event1839", "type", "membership"), - ("event1840", "object", "thing"), - ("event1840", "subject", "callirrhoe"), - ("event1840", "type", "membership"), - ("event1841", "object", "thing"), - ("event1841", "subject", "themisto"), - ("event1841", "type", "membership"), - ("event1842", "object", "thing"), - ("event1842", "subject", "megaclite"), - ("event1842", "type", "membership"), - ("event1843", "object", "thing"), - ("event1843", "subject", "taygete"), - ("event1843", "type", "membership"), - ("event1844", "object", "thing"), - ("event1844", "subject", "chaldene"), - ("event1844", "type", "membership"), - ("event1845", "object", "thing"), - ("event1845", "subject", "harpalyke"), - ("event1845", "type", "membership"), - ("event1846", "object", "thing"), - ("event1846", "subject", "kalyke"), - ("event1846", "type", "membership"), - ("event1847", "object", "thing"), - ("event1847", "subject", "iocaste"), - ("event1847", "type", "membership"), - ("event1848", "object", "thing"), - ("event1848", "subject", "erinome"), - ("event1848", "type", "membership"), - ("event1849", "object", "thing"), - ("event1849", "subject", "isonoe"), - ("event1849", "type", "membership"), - ("event1850", "object", "thing"), - ("event1850", "subject", "praxidike"), - ("event1850", "type", "membership"), - ("event1851", "object", "thing"), - ("event1851", "subject", "autonoe"), - ("event1851", "type", "membership"), - ("event1852", "object", "thing"), - ("event1852", "subject", "thyone"), - ("event1852", "type", "membership"), - ("event1853", "object", "thing"), - ("event1853", "subject", "hermippe"), - ("event1853", "type", "membership"), - ("event1854", "object", "thing"), - ("event1854", "subject", "aitne"), - ("event1854", "type", "membership"), - ("event1855", "object", "thing"), - ("event1855", "subject", "eurydome"), - ("event1855", "type", "membership"), - ("event1856", "object", "thing"), - ("event1856", "subject", "euanthe"), - ("event1856", "type", "membership"), - ("event1857", "object", "thing"), - ("event1857", "subject", "euporie"), - ("event1857", "type", "membership"), - ("event1858", "object", "thing"), - ("event1858", "subject", "orthosie"), - ("event1858", "type", "membership"), - ("event1859", "object", "thing"), - ("event1859", "subject", "sponde"), - ("event1859", "type", "membership"), - ("event1860", "object", "thing"), - ("event1860", "subject", "kale"), - ("event1860", "type", "membership"), - ("event1861", "object", "thing"), - ("event1861", "subject", "pasithee"), - ("event1861", "type", "membership"), - ("event1862", "object", "thing"), - ("event1862", "subject", "hegemone"), - ("event1862", "type", "membership"), - ("event1863", "object", "thing"), - ("event1863", "subject", "mneme"), - ("event1863", "type", "membership"), - ("event1864", "object", "thing"), - ("event1864", "subject", "aoede"), - ("event1864", "type", "membership"), - ("event1865", "object", "thing"), - ("event1865", "subject", "thelxinoe"), - ("event1865", "type", "membership"), - ("event1866", "object", "thing"), - ("event1866", "subject", "arche"), - ("event1866", "type", "membership"), - ("event1867", "object", "thing"), - ("event1867", "subject", "kallichore"), - ("event1867", "type", "membership"), - ("event1868", "object", "thing"), - ("event1868", "subject", "helike"), - ("event1868", "type", "membership"), - ("event1869", "object", "thing"), - ("event1869", "subject", "carpo"), - ("event1869", "type", "membership"), - ("event1870", "object", "thing"), - ("event1870", "subject", "eukelade"), - ("event1870", "type", "membership"), - ("event1871", "object", "thing"), - ("event1871", "subject", "cyllene"), - ("event1871", "type", "membership"), - ("event1872", "object", "thing"), - ("event1872", "subject", "kore"), - ("event1872", "type", "membership"), - ("event1873", "object", "thing"), - ("event1873", "subject", "herse"), - ("event1873", "type", "membership"), - ("event1874", "object", "thing"), - ("event1874", "subject", "helene"), - ("event1874", "type", "membership"), - ("event1875", "object", "thing"), - ("event1875", "subject", "telesto"), - ("event1875", "type", "membership"), - ("event1876", "object", "thing"), - ("event1876", "subject", "calypso"), - ("event1876", "type", "membership"), - ("event1877", "object", "thing"), - ("event1877", "subject", "atlas"), - ("event1877", "type", "membership"), - ("event1878", "object", "thing"), - ("event1878", "subject", "prometheus"), - ("event1878", "type", "membership"), - ("event1879", "object", "thing"), - ("event1879", "subject", "pandora"), - ("event1879", "type", "membership"), - ("event1880", "object", "thing"), - ("event1880", "subject", "pan"), - ("event1880", "type", "membership"), - ("event1881", "object", "thing"), - ("event1881", "subject", "ymir"), - ("event1881", "type", "membership"), - ("event1882", "object", "thing"), - ("event1882", "subject", "paaliaq"), - ("event1882", "type", "membership"), - ("event1883", "object", "thing"), - ("event1883", "subject", "tarvos"), - ("event1883", "type", "membership"), - ("event1884", "object", "thing"), - ("event1884", "subject", "ijiraq"), - ("event1884", "type", "membership"), - ("event1885", "object", "thing"), - ("event1885", "subject", "suttungr"), - ("event1885", "type", "membership"), - ("event1886", "object", "thing"), - ("event1886", "subject", "kiviuq"), - ("event1886", "type", "membership"), - ("event1887", "object", "thing"), - ("event1887", "subject", "mundilfari"), - ("event1887", "type", "membership"), - ("event1888", "object", "thing"), - ("event1888", "subject", "albiorix"), - ("event1888", "type", "membership"), - ("event1889", "object", "thing"), - ("event1889", "subject", "skathi"), - ("event1889", "type", "membership"), - ("event1890", "object", "thing"), - ("event1890", "subject", "erriapus"), - ("event1890", "type", "membership"), - ("event1891", "object", "thing"), - ("event1891", "subject", "siarnaq"), - ("event1891", "type", "membership"), - ("event1892", "object", "thing"), - ("event1892", "subject", "thrymr"), - ("event1892", "type", "membership"), - ("event1893", "object", "thing"), - ("event1893", "subject", "narvi"), - ("event1893", "type", "membership"), - ("event1894", "object", "thing"), - ("event1894", "subject", "methone"), - ("event1894", "type", "membership"), - ("event1895", "object", "thing"), - ("event1895", "subject", "pallene"), - ("event1895", "type", "membership"), - ("event1896", "object", "thing"), - ("event1896", "subject", "polydeuces"), - ("event1896", "type", "membership"), - ("event1897", "object", "thing"), - ("event1897", "subject", "daphnis"), - ("event1897", "type", "membership"), - ("event1898", "object", "thing"), - ("event1898", "subject", "aegir"), - ("event1898", "type", "membership"), - ("event1899", "object", "thing"), - ("event1899", "subject", "bebhionn"), - ("event1899", "type", "membership"), - ("event1900", "object", "thing"), - ("event1900", "subject", "bergelmir"), - ("event1900", "type", "membership"), - ("event1901", "object", "thing"), - ("event1901", "subject", "bestla"), - ("event1901", "type", "membership"), - ("event1902", "object", "thing"), - ("event1902", "subject", "farbauti"), - ("event1902", "type", "membership"), - ("event1903", "object", "thing"), - ("event1903", "subject", "fenrir"), - ("event1903", "type", "membership"), - ("event1904", "object", "thing"), - ("event1904", "subject", "fornjot"), - ("event1904", "type", "membership"), - ("event1905", "object", "thing"), - ("event1905", "subject", "hati"), - ("event1905", "type", "membership"), - ("event1906", "object", "thing"), - ("event1906", "subject", "hyrrokkin"), - ("event1906", "type", "membership"), - ("event1907", "object", "thing"), - ("event1907", "subject", "kari"), - ("event1907", "type", "membership"), - ("event1908", "object", "thing"), - ("event1908", "subject", "loge"), - ("event1908", "type", "membership"), - ("event1909", "object", "thing"), - ("event1909", "subject", "skoll"), - ("event1909", "type", "membership"), - ("event1910", "object", "thing"), - ("event1910", "subject", "surtur"), - ("event1910", "type", "membership"), - ("event1911", "object", "thing"), - ("event1911", "subject", "anthe"), - ("event1911", "type", "membership"), - ("event1912", "object", "thing"), - ("event1912", "subject", "jarnsaxa"), - ("event1912", "type", "membership"), - ("event1913", "subject", "greip"), - ("event1914", "object", "thing"), - ("event1914", "subject", "tarqeq"), - ("event1914", "type", "membership"), - ("event1915", "object", "thing"), - ("event1915", "subject", "aegaeon"), - ("event1915", "type", "membership"), - ("event1916", "object", "thing"), - ("event1916", "subject", "cordelia"), - ("event1916", "type", "membership"), - ("event1917", "object", "thing"), - ("event1917", "subject", "ophelia"), - ("event1917", "type", "membership"), - ("event1918", "object", "thing"), - ("event1918", "subject", "bianca"), - ("event1918", "type", "membership"), - ("event1919", "object", "thing"), - ("event1919", "subject", "cressida"), - ("event1919", "type", "membership"), - ("event1920", "object", "thing"), - ("event1920", "subject", "desdemona"), - ("event1920", "type", "membership"), - ("event1921", "object", "thing"), - ("event1921", "subject", "juliet"), - ("event1921", "type", "membership"), - ("event1922", "object", "thing"), - ("event1922", "subject", "portia"), - ("event1922", "type", "membership"), - ("event1923", "object", "thing"), - ("event1923", "subject", "rosalind"), - ("event1923", "type", "membership"), - ("event1924", "object", "thing"), - ("event1924", "subject", "belinda"), - ("event1924", "type", "membership"), - ("event1925", "object", "thing"), - ("event1925", "subject", "puck"), - ("event1925", "type", "membership"), - ("event1926", "object", "thing"), - ("event1926", "subject", "caliban"), - ("event1926", "type", "membership"), - ("event1927", "object", "thing"), - ("event1927", "subject", "sycorax"), - ("event1927", "type", "membership"), - ("event1928", "object", "thing"), - ("event1928", "subject", "prospero"), - ("event1928", "type", "membership"), - ("event1929", "object", "thing"), - ("event1929", "subject", "setebos"), - ("event1929", "type", "membership"), - ("event1930", "object", "thing"), - ("event1930", "subject", "stephano"), - ("event1930", "type", "membership"), - ("event1931", "object", "thing"), - ("event1931", "subject", "trinculo"), - ("event1931", "type", "membership"), - ("event1932", "object", "thing"), - ("event1932", "subject", "francisco"), - ("event1932", "type", "membership"), - ("event1933", "object", "thing"), - ("event1933", "subject", "margaret"), - ("event1933", "type", "membership"), - ("event1934", "object", "thing"), - ("event1934", "subject", "ferdinand"), - ("event1934", "type", "membership"), - ("event1935", "object", "thing"), - ("event1935", "subject", "perdita"), - ("event1935", "type", "membership"), - ("event1936", "object", "thing"), - ("event1936", "subject", "mab"), - ("event1936", "type", "membership"), - ("event1937", "object", "thing"), - ("event1937", "subject", "cupid"), - ("event1937", "type", "membership"), - ("event1939", "object", "thing"), - ("event1939", "subject", "naiad"), - ("event1939", "type", "membership"), - ("event1940", "object", "thing"), - ("event1940", "subject", "thalassa"), - ("event1940", "type", "membership"), - ("event1941", "object", "thing"), - ("event1941", "subject", "dethinga"), - ("event1941", "type", "membership"), - ("event1942", "object", "thing"), - ("event1942", "subject", "galatea"), - ("event1942", "type", "membership"), - ("event1943", "object", "thing"), - ("event1943", "subject", "larissa"), - ("event1943", "type", "membership"), - ("event1944", "object", "thing"), - ("event1944", "subject", "proteus"), - ("event1944", "type", "membership"), - ("event1945", "object", "thing"), - ("event1945", "subject", "halimede"), - ("event1945", "type", "membership"), - ("event1946", "object", "thing"), - ("event1946", "subject", "psamathe"), - ("event1946", "type", "membership"), - ("event1947", "object", "thing"), - ("event1947", "subject", "sao"), - ("event1947", "type", "membership"), - ("event1948", "object", "thing"), - ("event1948", "subject", "laomedeia"), - ("event1948", "type", "membership"), - ("event1949", "object", "thing"), - ("event1949", "subject", "neso"), - ("event1949", "type", "membership"), - ("event1950", "object", "thing"), - ("event1950", "subject", "nix"), - ("event1950", "type", "membership"), - ("event1951", "object", "thing"), - ("event1951", "subject", "hydra"), - ("event1951", "type", "membership"), - ("event1952", "object", "thing"), - ("event1952", "subject", "kerberos"), - ("event1952", "type", "membership"), - ("event1953", "object", "thing"), - ("event1953", "subject", "styx"), - ("event1953", "type", "membership"), - ("event1954", "object", "science_team"), - ("event1954", "subject", "voyager_science_team"), - ("event1954", "type", "membership"), - ("event1955", "object", "science_team"), - ("event1955", "subject", "cassini_imaging_science_team"), - ("event1955", "type", "membership"), - ("event1956", "object", "science_team"), - ("event1956", "subject", "science_team_1"), - ("event1956", "type", "membership"), - ("event1957", "object", "science_team"), - ("event1957", "subject", "science_team_2"), - ("event1957", "type", "membership"), - ("event1958", "object", "science_team"), - ("event1958", "subject", "science_team_3"), - ("event1958", "type", "membership"), - ("event1959", "object", "science_team"), - ("event1959", "subject", "science_team_4"), - ("event1959", "type", "membership"), - ("event1960", "object", "science_team"), - ("event1960", "subject", "science_team_5"), - ("event1960", "type", "membership"), - ("event1961", "object", "science_team"), - ("event1961", "subject", "science_team_6"), - ("event1961", "type", "membership"), - ("event1962", "object", "science_team"), - ("event1962", "subject", "science_team_7"), - ("event1962", "type", "membership"), - ("event1963", "object", "science_team"), - ("event1963", "subject", "science_team_8"), - ("event1963", "type", "membership"), - ("event1964", "object", "science_team"), - ("event1964", "subject", "science_team_9"), - ("event1964", "type", "membership"), - ("event1965", "object", "science_team"), - ("event1965", "subject", "science_team_10"), - ("event1965", "type", "membership"), - ("event1966", "object", "science_team"), - ("event1966", "subject", "science_team_11"), - ("event1966", "type", "membership"), - ("event1967", "object", "science_team"), - ("event1967", "subject", "science_team_12"), - ("event1967", "type", "membership"), - ("event1968", "object", "science_team"), - ("event1968", "subject", "science_team_13"), - ("event1968", "type", "membership"), - ("event1969", "object", "science_team"), - ("event1969", "subject", "science_team_14"), - ("event1969", "type", "membership"), - ("event1970", "object", "science_team"), - ("event1970", "subject", "science_team_15"), - ("event1970", "type", "membership"), - ("event1971", "object", "science_team"), - ("event1971", "subject", "science_team_16"), - ("event1971", "type", "membership"), - ("event1972", "object", "science_team"), - ("event1972", "subject", "science_team_17"), - ("event1972", "type", "membership"), - ("event1973", "object", "science_team"), - ("event1973", "subject", "science_team_18"), - ("event1973", "type", "membership"), - ("event1974", "object", "science_team"), - ("event1974", "subject", "science_team_19"), - ("event1974", "type", "membership"), - ("event1975", "object", "science_team"), - ("event1975", "subject", "science_team_20"), - ("event1975", "type", "membership"), - ("event1976", "object", "science_team"), - ("event1976", "subject", "science_team_21"), - ("event1976", "type", "membership"), - ("event1977", "object", "science_team_1"), - ("event1977", "subject", "scotti"), - ("event1977", "type", "membership"), - ("event1978", "object", "science_team_1"), - ("event1978", "subject", "spahr"), - ("event1978", "type", "membership"), - ("event1979", "object", "science_team_1"), - ("event1979", "subject", "mcmillan"), - ("event1979", "type", "membership"), - ("event1980", "object", "science_team_1"), - ("event1980", "subject", "larson"), - ("event1980", "type", "membership"), - ("event1981", "object", "science_team_1"), - ("event1981", "subject", "montani"), - ("event1981", "type", "membership"), - ("event1982", "object", "science_team_1"), - ("event1982", "subject", "gleason"), - ("event1982", "type", "membership"), - ("event1983", "object", "science_team_1"), - ("event1983", "subject", "gehrels"), - ("event1983", "type", "membership"), - ("event1984", "object", "science_team_2"), - ("event1984", "subject", "kowal"), - ("event1984", "type", "membership"), - ("event1985", "object", "science_team_2"), - ("event1985", "subject", "roemer"), - ("event1985", "type", "membership"), - ("event1986", "object", "science_team_3"), - ("event1986", "subject", "sheppard"), - ("event1986", "type", "membership"), - ("event1987", "object", "science_team_3"), - ("event1987", "subject", "jewitt"), - ("event1987", "type", "membership"), - ("event1988", "object", "science_team_3"), - ("event1988", "subject", "fernandez"), - ("event1988", "type", "membership"), - ("event1989", "object", "science_team_3"), - ("event1989", "subject", "magnier"), - ("event1989", "type", "membership"), - ("event1990", "object", "science_team_4"), - ("event1990", "subject", "sheppard"), - ("event1990", "type", "membership"), - ("event1991", "object", "science_team_4"), - ("event1991", "subject", "jewitt"), - ("event1991", "type", "membership"), - ("event1992", "object", "science_team_4"), - ("event1992", "subject", "kleyna"), - ("event1992", "type", "membership"), - ("event1993", "object", "science_team_5"), - ("event1993", "subject", "gladman"), - ("event1993", "type", "membership"), - ("event1994", "object", "science_team_5"), - ("event1994", "subject", "allen"), - ("event1994", "type", "membership"), - ("event1995", "object", "science_team_6"), - ("event1995", "subject", "gladman"), - ("event1995", "type", "membership"), - ("event1996", "object", "science_team_6"), - ("event1996", "subject", "kavelaars"), - ("event1996", "type", "membership"), - ("event1997", "object", "science_team_6"), - ("event1997", "subject", "petit"), - ("event1997", "type", "membership"), - ("event1998", "object", "science_team_6"), - ("event1998", "subject", "allen"), - ("event1998", "type", "membership"), - ("event1999", "object", "science_team_7"), - ("event1999", "subject", "fountain"), - ("event1999", "type", "membership"), - ("event2001", "object", "science_team_7"), - ("event2001", "subject", "larson"), - ("event2001", "type", "membership"), - ("event2002", "object", "science_team_8"), - ("event2002", "subject", "laques"), - ("event2002", "type", "membership"), - ("event2003", "object", "science_team_8"), - ("event2003", "subject", "lecacheux"), - ("event2003", "type", "membership"), - ("event2004", "object", "science_team_9"), - ("event2004", "subject", "smith"), - ("event2004", "type", "membership"), - ("event2005", "object", "science_team_9"), - ("event2005", "subject", "reitsema"), - ("event2005", "type", "membership"), - ("event2006", "object", "science_team_9"), - ("event2006", "subject", "larson"), - ("event2006", "type", "membership"), - ("event2007", "object", "science_team_9"), - ("event2007", "subject", "fountain"), - ("event2007", "type", "membership"), - ("event2008", "object", "science_team_10"), - ("event2008", "subject", "pascu"), - ("event2008", "type", "membership"), - ("event2009", "object", "science_team_10"), - ("event2009", "subject", "seidelmann"), - ("event2009", "type", "membership"), - ("event2010", "object", "science_team_10"), - ("event2010", "subject", "baum"), - ("event2010", "type", "membership"), - ("event2011", "object", "science_team_10"), - ("event2011", "subject", "currie"), - ("event2011", "type", "membership"), - ("event2012", "object", "science_team_11"), - ("event2012", "subject", "gladman"), - ("event2012", "type", "membership"), - ("event2013", "object", "science_team_11"), - ("event2013", "subject", "kavelaars"), - ("event2013", "type", "membership"), - ("event2014", "object", "science_team_11"), - ("event2014", "subject", "petit"), - ("event2014", "type", "membership"), - ("event2015", "object", "science_team_11"), - ("event2015", "subject", "scholl"), - ("event2015", "type", "membership"), - ("event2016", "object", "science_team_11"), - ("event2016", "subject", "holman"), - ("event2016", "type", "membership"), - ("event2017", "object", "science_team_11"), - ("event2017", "subject", "marsden"), - ("event2017", "type", "membership"), - ("event2018", "object", "science_team_11"), - ("event2018", "subject", "nicholson"), - ("event2018", "type", "membership"), - ("event2019", "object", "science_team_11"), - ("event2019", "subject", "burns"), - ("event2019", "type", "membership"), - ("event2020", "object", "science_team_12"), - ("event2020", "subject", "gladman"), - ("event2020", "type", "membership"), - ("event2021", "object", "science_team_12"), - ("event2021", "subject", "nicholson"), - ("event2021", "type", "membership"), - ("event2022", "object", "science_team_12"), - ("event2022", "subject", "burns"), - ("event2022", "type", "membership"), - ("event2023", "object", "science_team_12"), - ("event2023", "subject", "kavelaars"), - ("event2023", "type", "membership"), - ("event2024", "object", "science_team_13"), - ("event2024", "subject", "holman"), - ("event2024", "type", "membership"), - ("event2025", "object", "science_team_13"), - ("event2025", "subject", "kavelaars"), - ("event2025", "type", "membership"), - ("event2026", "object", "science_team_13"), - ("event2026", "subject", "gladman"), - ("event2026", "type", "membership"), - ("event2027", "object", "science_team_13"), - ("event2027", "subject", "petit"), - ("event2027", "type", "membership"), - ("event2028", "object", "science_team_13"), - ("event2028", "subject", "scholl"), - ("event2028", "type", "membership"), - ("event2029", "object", "science_team_14"), - ("event2029", "subject", "holman"), - ("event2029", "type", "membership"), - ("event2030", "object", "science_team_14"), - ("event2030", "subject", "kavelaars"), - ("event2030", "type", "membership"), - ("event2031", "object", "science_team_14"), - ("event2031", "subject", "milisavljevic"), - ("event2031", "type", "membership"), - ("event2032", "object", "science_team_15"), - ("event2032", "subject", "kavelaars"), - ("event2032", "type", "membership"), - ("event2033", "object", "science_team_15"), - ("event2033", "subject", "holman"), - ("event2033", "type", "membership"), - ("event2034", "object", "science_team_15"), - ("event2034", "subject", "milisavljevic"), - ("event2034", "type", "membership"), - ("event2035", "object", "science_team_15"), - ("event2035", "subject", "grav"), - ("event2035", "type", "membership"), - ("event2036", "object", "science_team_16"), - ("event2036", "subject", "sheppard"), - ("event2036", "type", "membership"), - ("event2037", "object", "science_team_16"), - ("event2037", "subject", "jewitt"), - ("event2037", "type", "membership"), - ("event2038", "object", "science_team_17"), - ("event2038", "subject", "showalter"), - ("event2038", "type", "membership"), - ("event2039", "object", "science_team_17"), - ("event2039", "subject", "lissauer"), - ("event2039", "type", "membership"), - ("event2040", "object", "science_team_18"), - ("event2040", "subject", "holman"), - ("event2040", "type", "membership"), - ("event2041", "object", "science_team_18"), - ("event2041", "subject", "kavelaars"), - ("event2041", "type", "membership"), - ("event2042", "object", "science_team_18"), - ("event2042", "subject", "grav"), - ("event2042", "type", "membership"), - ("event2043", "object", "science_team_18"), - ("event2043", "subject", "fraser"), - ("event2043", "type", "membership"), - ("event2044", "object", "science_team_18"), - ("event2044", "subject", "milisavljevic"), - ("event2044", "type", "membership"), - ("event2045", "object", "science_team_19"), - ("event2045", "subject", "weaver"), - ("event2045", "type", "membership"), - ("event2046", "object", "science_team_19"), - ("event2046", "subject", "stern"), - ("event2046", "type", "membership"), - ("event2047", "object", "science_team_19"), - ("event2047", "subject", "mutchler"), - ("event2047", "type", "membership"), - ("event2048", "object", "science_team_19"), - ("event2048", "subject", "steffl"), - ("event2048", "type", "membership"), - ("event2049", "object", "science_team_19"), - ("event2049", "subject", "buie"), - ("event2049", "type", "membership"), - ("event2050", "object", "science_team_19"), - ("event2050", "subject", "merline"), - ("event2050", "type", "membership"), - ("event2051", "object", "science_team_19"), - ("event2051", "subject", "spencer"), - ("event2051", "type", "membership"), - ("event2052", "object", "science_team_19"), - ("event2052", "subject", "young_e_f"), - ("event2052", "type", "membership"), - ("event2053", "object", "science_team_19"), - ("event2053", "subject", "young_l_a"), - ("event2053", "type", "membership"), - ("event2054", "object", "science_team_20"), - ("event2054", "subject", "showalter"), - ("event2054", "type", "membership"), - ("event2055", "object", "science_team_20"), - ("event2055", "subject", "hamilton"), - ("event2055", "type", "membership"), - ("event2056", "object", "science_team_20"), - ("event2056", "subject", "stern"), - ("event2056", "type", "membership"), - ("event2057", "object", "science_team_20"), - ("event2057", "subject", "weaver"), - ("event2057", "type", "membership"), - ("event2058", "object", "science_team_20"), - ("event2058", "subject", "steffl"), - ("event2058", "type", "membership"), - ("event2059", "object", "science_team_20"), - ("event2059", "subject", "young_l_a"), - ("event2059", "type", "membership"), - ("event2060", "object", "science_team_21"), - ("event2060", "subject", "showalter"), - ("event2060", "type", "membership"), - ("event2061", "object", "science_team_21"), - ("event2061", "subject", "weaver"), - ("event2061", "type", "membership"), - ("event2062", "object", "science_team_21"), - ("event2062", "subject", "stern"), - ("event2062", "type", "membership"), - ("event2063", "object", "science_team_21"), - ("event2063", "subject", "steffl"), - ("event2063", "type", "membership"), - ("event2064", "object", "science_team_21"), - ("event2064", "subject", "buie"), - ("event2064", "type", "membership"), - ("event2065", "object", "science_team_21"), - ("event2065", "subject", "merline"), - ("event2065", "type", "membership"), - ("event2066", "object", "science_team_21"), - ("event2066", "subject", "mutchler"), - ("event2066", "type", "membership"), - ("event2067", "object", "science_team_21"), - ("event2067", "subject", "soummer"), - ("event2067", "type", "membership"), - ("event2068", "object", "science_team_21"), - ("event2068", "subject", "throop"), - ("event2068", "type", "membership"), - ("event2069", "object", "person"), - ("event2069", "subject", "scotti"), - ("event2069", "type", "membership"), - ("event2070", "object", "person"), - ("event2070", "subject", "spahr"), - ("event2070", "type", "membership"), - ("event2071", "object", "person"), - ("event2071", "subject", "mcmillan"), - ("event2071", "type", "membership"), - ("event2072", "object", "person"), - ("event2072", "subject", "montani"), - ("event2072", "type", "membership"), - ("event2073", "object", "person"), - ("event2073", "subject", "gleason"), - ("event2073", "type", "membership"), - ("event2074", "object", "person"), - ("event2074", "subject", "gehrels"), - ("event2074", "type", "membership"), - ("event2075", "object", "person"), - ("event2075", "subject", "roemer"), - ("event2075", "type", "membership"), - ("event2076", "object", "person"), - ("event2076", "subject", "sheppard"), - ("event2076", "type", "membership"), - ("event2077", "object", "person"), - ("event2077", "subject", "jewitt"), - ("event2077", "type", "membership"), - ("event2078", "object", "person"), - ("event2078", "subject", "fernandez"), - ("event2078", "type", "membership"), - ("event2079", "object", "person"), - ("event2079", "subject", "magnier"), - ("event2079", "type", "membership"), - ("event2080", "object", "person"), - ("event2080", "subject", "kleyna"), - ("event2080", "type", "membership"), - ("event2081", "object", "person"), - ("event2081", "subject", "gladman"), - ("event2081", "type", "membership"), - ("event2082", "object", "person"), - ("event2082", "subject", "kavelaars"), - ("event2082", "type", "membership"), - ("event2083", "object", "person"), - ("event2083", "subject", "petit"), - ("event2083", "type", "membership"), - ("event2084", "object", "person"), - ("event2084", "subject", "allen"), - ("event2084", "type", "membership"), - ("event2085", "object", "person"), - ("event2085", "subject", "laques"), - ("event2085", "type", "membership"), - ("event2086", "object", "person"), - ("event2086", "subject", "lecacheux"), - ("event2086", "type", "membership"), - ("event2087", "object", "person"), - ("event2087", "subject", "smith"), - ("event2087", "type", "membership"), - ("event2088", "object", "person"), - ("event2088", "subject", "reitsema"), - ("event2088", "type", "membership"), - ("event2089", "object", "person"), - ("event2089", "subject", "pascu"), - ("event2089", "type", "membership"), - ("event2090", "object", "person"), - ("event2090", "subject", "seidelmann"), - ("event2090", "type", "membership"), - ("event2091", "object", "person"), - ("event2091", "subject", "baum"), - ("event2091", "type", "membership"), - ("event2092", "object", "person"), - ("event2092", "subject", "currie"), - ("event2092", "type", "membership"), - ("event2093", "object", "person"), - ("event2093", "subject", "showalter"), - ("event2093", "type", "membership"), - ("event2094", "object", "person"), - ("event2094", "subject", "scholl"), - ("event2094", "type", "membership"), - ("event2095", "object", "person"), - ("event2095", "subject", "holman"), - ("event2095", "type", "membership"), - ("event2096", "object", "person"), - ("event2096", "subject", "marsden"), - ("event2096", "type", "membership"), - ("event2097", "object", "person"), - ("event2097", "subject", "burns"), - ("event2097", "type", "membership"), - ("event2098", "object", "person"), - ("event2098", "subject", "milisavljevic"), - ("event2098", "type", "membership"), - ("event2099", "object", "person"), - ("event2099", "subject", "grav"), - ("event2099", "type", "membership"), - ("event2100", "object", "person"), - ("event2100", "subject", "karkoschka"), - ("event2100", "type", "membership"), - ("event2101", "object", "person"), - ("event2101", "subject", "showalter"), - ("event2101", "type", "membership"), - ("event2102", "object", "person"), - ("event2102", "subject", "lissauer"), - ("event2102", "type", "membership"), - ("event2103", "object", "person"), - ("event2103", "subject", "fraser"), - ("event2103", "type", "membership"), - ("event2104", "object", "person"), - ("event2104", "subject", "christy"), - ("event2104", "type", "membership"), - ("event2105", "object", "person"), - ("event2105", "subject", "weaver"), - ("event2105", "type", "membership"), - ("event2106", "object", "person"), - ("event2106", "subject", "stern"), - ("event2106", "type", "membership"), - ("event2107", "object", "person"), - ("event2107", "subject", "mutchler"), - ("event2107", "type", "membership"), - ("event2108", "object", "person"), - ("event2108", "subject", "steffl"), - ("event2108", "type", "membership"), - ("event2109", "object", "person"), - ("event2109", "subject", "buie"), - ("event2109", "type", "membership"), - ("event2110", "object", "person"), - ("event2110", "subject", "merline"), - ("event2110", "type", "membership"), - ("event2111", "object", "person"), - ("event2111", "subject", "spencer"), - ("event2111", "type", "membership"), - ("event2112", "object", "person"), - ("event2112", "subject", "young_e_f"), - ("event2112", "type", "membership"), - ("event2113", "object", "person"), - ("event2113", "subject", "young_l_a"), - ("event2113", "type", "membership"), - ("event2114", "object", "person"), - ("event2114", "subject", "hamilton"), - ("event2114", "type", "membership"), - ("event2115", "object", "person"), - ("event2115", "subject", "soummer"), - ("event2115", "type", "membership"), - ("event2116", "object", "person"), - ("event2116", "subject", "throop"), - ("event2116", "type", "membership"), - ("event2117", "object", "thing"), - ("event2117", "subject", "scotti"), - ("event2117", "type", "membership"), - ("event2118", "object", "thing"), - ("event2118", "subject", "spahr"), - ("event2118", "type", "membership"), - ("event2119", "object", "thing"), - ("event2119", "subject", "mcmillan"), - ("event2119", "type", "membership"), - ("event2120", "object", "thing"), - ("event2120", "subject", "montani"), - ("event2120", "type", "membership"), - ("event2121", "object", "thing"), - ("event2121", "subject", "gleason"), - ("event2121", "type", "membership"), - ("event2122", "object", "thing"), - ("event2122", "subject", "gehrels"), - ("event2122", "type", "membership"), - ("event2123", "object", "thing"), - ("event2123", "subject", "roemer"), - ("event2123", "type", "membership"), - ("event2124", "object", "thing"), - ("event2124", "subject", "sheppard"), - ("event2124", "type", "membership"), - ("event2125", "object", "thing"), - ("event2125", "subject", "jewitt"), - ("event2125", "type", "membership"), - ("event2126", "object", "thing"), - ("event2126", "subject", "fernandez"), - ("event2126", "type", "membership"), - ("event2127", "object", "thing"), - ("event2127", "subject", "magnier"), - ("event2127", "type", "membership"), - ("event2128", "object", "thing"), - ("event2128", "subject", "kleyna"), - ("event2128", "type", "membership"), - ("event2129", "object", "thing"), - ("event2129", "subject", "gladman"), - ("event2129", "type", "membership"), - ("event2130", "object", "thing"), - ("event2130", "subject", "kavelaars"), - ("event2130", "type", "membership"), - ("event2131", "object", "thing"), - ("event2131", "subject", "petit"), - ("event2131", "type", "membership"), - ("event2132", "object", "thing"), - ("event2132", "subject", "allen"), - ("event2132", "type", "membership"), - ("event2133", "object", "thing"), - ("event2133", "subject", "laques"), - ("event2133", "type", "membership"), - ("event2134", "object", "thing"), - ("event2134", "subject", "lecacheux"), - ("event2134", "type", "membership"), - ("event2135", "object", "thing"), - ("event2135", "subject", "smith"), - ("event2135", "type", "membership"), - ("event2136", "object", "thing"), - ("event2136", "subject", "reitsema"), - ("event2136", "type", "membership"), - ("event2137", "object", "thing"), - ("event2137", "subject", "pascu"), - ("event2137", "type", "membership"), - ("event2138", "object", "thing"), - ("event2138", "subject", "seidelmann"), - ("event2138", "type", "membership"), - ("event2139", "object", "thing"), - ("event2139", "subject", "baum"), - ("event2139", "type", "membership"), - ("event2140", "object", "thing"), - ("event2140", "subject", "currie"), - ("event2140", "type", "membership"), - ("event2141", "object", "thing"), - ("event2141", "subject", "showalter"), - ("event2141", "type", "membership"), - ("event2142", "object", "thing"), - ("event2142", "subject", "scholl"), - ("event2142", "type", "membership"), - ("event2143", "object", "thing"), - ("event2143", "subject", "holman"), - ("event2143", "type", "membership"), - ("event2144", "object", "thing"), - ("event2144", "subject", "marsden"), - ("event2144", "type", "membership"), - ("event2145", "object", "thing"), - ("event2145", "subject", "burns"), - ("event2145", "type", "membership"), - ("event2146", "object", "thing"), - ("event2146", "subject", "milisavljevic"), - ("event2146", "type", "membership"), - ("event2147", "object", "thing"), - ("event2147", "subject", "grav"), - ("event2147", "type", "membership"), - ("event2148", "object", "thing"), - ("event2148", "subject", "karkoschka"), - ("event2148", "type", "membership"), - ("event2149", "object", "thing"), - ("event2149", "subject", "showalter"), - ("event2149", "type", "membership"), - ("event2150", "object", "thing"), - ("event2150", "subject", "lissauer"), - ("event2150", "type", "membership"), - ("event2151", "object", "thing"), - ("event2151", "subject", "fraser"), - ("event2151", "type", "membership"), - ("event2152", "object", "thing"), - ("event2152", "subject", "christy"), - ("event2152", "type", "membership"), - ("event2153", "object", "thing"), - ("event2153", "subject", "weaver"), - ("event2153", "type", "membership"), - ("event2154", "object", "thing"), - ("event2154", "subject", "stern"), - ("event2154", "type", "membership"), - ("event2155", "object", "thing"), - ("event2155", "subject", "mutchler"), - ("event2155", "type", "membership"), - ("event2156", "object", "thing"), - ("event2156", "subject", "steffl"), - ("event2156", "type", "membership"), - ("event2157", "object", "thing"), - ("event2157", "subject", "buie"), - ("event2157", "type", "membership"), - ("event2158", "object", "thing"), - ("event2158", "subject", "merline"), - ("event2158", "type", "membership"), - ("event2159", "object", "thing"), - ("event2159", "subject", "spencer"), - ("event2159", "type", "membership"), - ("event2160", "object", "thing"), - ("event2160", "subject", "young_e_f"), - ("event2160", "type", "membership"), - ("event2161", "object", "thing"), - ("event2161", "subject", "young_l_a"), - ("event2161", "type", "membership"), - ("event2162", "object", "thing"), - ("event2162", "subject", "hamilton"), - ("event2162", "type", "membership"), - ("event2163", "object", "thing"), - ("event2163", "subject", "soummer"), - ("event2163", "type", "membership"), - ("event2164", "object", "thing"), - ("event2164", "subject", "throop"), - ("event2164", "type", "membership"), - ("event2165", "object", "telescope"), - ("event2165", "subject", "refractor_telescope_1"), - ("event2165", "type", "membership"), - ("event2166", "object", "telescope"), - ("event2166", "subject", "refractor_telescope_2"), - ("event2166", "type", "membership"), - ("event2167", "object", "telescope"), - ("event2167", "subject", "refractor_telescope_3"), - ("event2167", "type", "membership"), - ("event2168", "object", "telescope"), - ("event2168", "subject", "refractor_telescope_4"), - ("event2168", "type", "membership"), - ("event2169", "object", "telescope"), - ("event2169", "subject", "reflector_telescope_1"), - ("event2169", "type", "membership"), - ("event2170", "object", "telescope"), - ("event2170", "subject", "reflector_telescope_2"), - ("event2170", "type", "membership"), - ("event2171", "object", "telescope"), - ("event2171", "subject", "reflector_telescope_3"), - ("event2171", "type", "membership"), - ("event2172", "object", "telescope"), - ("event2172", "subject", "reflector_telescope_4"), - ("event2172", "type", "membership"), - ("event2173", "object", "telescope"), - ("event2173", "subject", "ground_based_telescope_1"), - ("event2173", "type", "membership"), - ("event2174", "object", "telescope"), - ("event2174", "subject", "ground_based_telescope_2"), - ("event2174", "type", "membership"), - ("event2175", "object", "telescope"), - ("event2175", "subject", "ground_based_telescope_3"), - ("event2175", "type", "membership"), - ("event2176", "object", "telescope"), - ("event2176", "subject", "galilean_telescope_1"), - ("event2176", "type", "membership"), - ("event2177", "object", "telescope"), - ("event2177", "subject", "crossley_reflector_telescope"), - ("event2177", "type", "membership"), - ("event2178", "object", "telescope"), - ("event2178", "subject", "cassegrain_telescope"), - ("event2178", "type", "membership"), - ("event2179", "object", "telescope"), - ("event2179", "subject", "hooker_telescope"), - ("event2179", "type", "membership"), - ("event2180", "object", "telescope"), - ("event2180", "subject", "schmidt_telescope"), - ("event2180", "type", "membership"), - ("event2181", "object", "telescope"), - ("event2181", "subject", "subaru_reflector_telescope"), - ("event2181", "type", "membership"), - ("event2182", "object", "telescope"), - ("event2182", "subject", "canada-france-hawaii_telescope"), - ("event2182", "type", "membership"), - ("event2183", "object", "telescope"), - ("event2183", "subject", "aerial_telescope_1"), - ("event2183", "type", "membership"), - ("event2184", "object", "telescope"), - ("event2184", "subject", "bruce_astrograph"), - ("event2184", "type", "membership"), - ("event2185", "object", "telescope"), - ("event2185", "subject", "telescope_1"), - ("event2185", "type", "membership"), - ("event2186", "object", "telescope"), - ("event2186", "subject", "hale_telescope"), - ("event2186", "type", "membership"), - ("event2187", "object", "telescope"), - ("event2187", "subject", "hubble_space_telescope"), - ("event2187", "type", "membership"), - ("event2188", "object", "telescope"), - ("event2188", "subject", "blanco_telescope"), - ("event2188", "type", "membership"), - ("event2189", "object", "refractor_telescope_1"), - ("event2189", "subject", "26_inch"), - ("event2189", "type", "length"), - ("event2190", "object", "refractor_telescope_2"), - ("event2190", "subject", "36_inch"), - ("event2190", "type", "length"), - ("event2191", "object", "refractor_telescope_3"), - ("event2191", "subject", "36_inch"), - ("event2191", "type", "length"), - ("event2192", "object", "reflector_telescope_1"), - ("event2192", "subject", "40_foot"), - ("event2192", "type", "length"), - ("event2193", "object", "reflector_telescope_2"), - ("event2193", "subject", "6.5_m"), - ("event2193", "type", "length"), - ("event2194", "object", "reflector_telescope_3"), - ("event2194", "subject", "24_inch"), - ("event2194", "type", "length"), - ("event2195", "object", "reflector_telescope_4"), - ("event2195", "subject", "4_m"), - ("event2195", "type", "length"), - ("event2196", "object", "crossley_reflector_telescope"), - ("event2196", "subject", "36_inch"), - ("event2196", "type", "length"), - ("event2197", "object", "cassegrain_telescope"), - ("event2197", "subject", "30_inch"), - ("event2197", "type", "length"), - ("event2198", "object", "hooker_telescope"), - ("event2198", "subject", "100_inch"), - ("event2198", "type", "length"), - ("event2199", "object", "schmidt_telescope"), - ("event2199", "subject", "122_cm"), - ("event2199", "type", "length"), - ("event2200", "object", "subaru_reflector_telescope"), - ("event2200", "subject", "8.2_m"), - ("event2200", "type", "length"), - ("event2201", "object", "canada-france-hawaii_telescope"), - ("event2201", "subject", "3.6_m"), - ("event2201", "type", "length"), - ("event2202", "object", "bruce_astrograph"), - ("event2202", "subject", "24_inch"), - ("event2202", "type", "length"), - ("event2203", "object", "telescope_1"), - ("event2203", "subject", "106_cm"), - ("event2203", "type", "length"), - ("event2204", "object", "hale_telescope"), - ("event2204", "subject", "200_inch"), - ("event2204", "type", "length"), - ("event2205", "object", "blanco_telescope"), - ("event2205", "subject", "4.0_m"), - ("event2205", "type", "length"), - ("event2206", "object", "spacecraft"), - ("event2206", "subject", "voyager_1"), - ("event2206", "type", "membership"), - ("event2207", "object", "spacecraft"), - ("event2207", "subject", "voyager_2"), - ("event2207", "type", "membership"), - ("event2208", "object", "spacecraft"), - ("event2208", "subject", "cassini"), - ("event2208", "type", "membership"), - ("event2209", "object", "thing"), - ("event2209", "subject", "refractor_telescope_1"), - ("event2209", "type", "membership"), - ("event2210", "object", "thing"), - ("event2210", "subject", "refractor_telescope_2"), - ("event2210", "type", "membership"), - ("event2211", "object", "thing"), - ("event2211", "subject", "refractor_telescope_3"), - ("event2211", "type", "membership"), - ("event2212", "object", "thing"), - ("event2212", "subject", "refractor_telescope_4"), - ("event2212", "type", "membership"), - ("event2213", "object", "thing"), - ("event2213", "subject", "reflector_telescope_1"), - ("event2213", "type", "membership"), - ("event2214", "object", "thing"), - ("event2214", "subject", "reflector_telescope_2"), - ("event2214", "type", "membership"), - ("event2215", "object", "thing"), - ("event2215", "subject", "reflector_telescope_3"), - ("event2215", "type", "membership"), - ("event2216", "object", "thing"), - ("event2216", "subject", "reflector_telescope_4"), - ("event2216", "type", "membership"), - ("event2217", "object", "thing"), - ("event2217", "subject", "ground_based_telescope_1"), - ("event2217", "type", "membership"), - ("event2218", "object", "thing"), - ("event2218", "subject", "ground_based_telescope_2"), - ("event2218", "type", "membership"), - ("event2219", "object", "thing"), - ("event2219", "subject", "ground_based_telescope_3"), - ("event2219", "type", "membership"), - ("event2220", "object", "thing"), - ("event2220", "subject", "galilean_telescope_1"), - ("event2220", "type", "membership"), - ("event2221", "object", "thing"), - ("event2221", "subject", "crossley_reflector_telescope"), - ("event2221", "type", "membership"), - ("event2222", "object", "thing"), - ("event2222", "subject", "cassegrain_telescope"), - ("event2222", "type", "membership"), - ("event2223", "object", "thing"), - ("event2223", "subject", "hooker_telescope"), - ("event2223", "type", "membership"), - ("event2224", "object", "thing"), - ("event2224", "subject", "schmidt_telescope"), - ("event2224", "type", "membership"), - ("event2225", "object", "thing"), - ("event2225", "subject", "subaru_reflector_telescope"), - ("event2225", "type", "membership"), - ("event2226", "object", "thing"), - ("event2226", "subject", "canada-france-hawaii_telescope"), - ("event2226", "type", "membership"), - ("event2227", "object", "thing"), - ("event2227", "subject", "aerial_telescope_1"), - ("event2227", "type", "membership"), - ("event2228", "object", "thing"), - ("event2228", "subject", "bruce_astrograph"), - ("event2228", "type", "membership"), - ("event2229", "object", "thing"), - ("event2229", "subject", "telescope_1"), - ("event2229", "type", "membership"), - ("event2230", "object", "thing"), - ("event2230", "subject", "hale_telescope"), - ("event2230", "type", "membership"), - ("event2231", "object", "thing"), - ("event2231", "subject", "hubble_space_telescope"), - ("event2231", "type", "membership"), - ("event2232", "object", "thing"), - ("event2232", "subject", "blanco_telescope"), - ("event2232", "type", "membership"), - ("event2233", "object", "thing"), - ("event2233", "subject", "voyager_1"), - ("event2233", "type", "membership"), - ("event2234", "object", "thing"), - ("event2234", "subject", "voyager_2"), - ("event2234", "type", "membership"), - ("event2235", "object", "thing"), - ("event2235", "subject", "cassini"), - ("event2235", "type", "membership"), - ("event2236", "object", "place"), - ("event2236", "subject", "us_naval_observatory"), - ("event2236", "type", "membership"), - ("event2237", "object", "place"), - ("event2237", "subject", "padua"), - ("event2237", "type", "membership"), - ("event2238", "object", "place"), - ("event2238", "subject", "mt_hamilton"), - ("event2238", "type", "membership"), - ("event2239", "object", "place"), - ("event2239", "subject", "greenwich"), - ("event2239", "type", "membership"), - ("event2240", "object", "place"), - ("event2240", "subject", "mt_wilson"), - ("event2240", "type", "membership"), - ("event2241", "object", "place"), - ("event2241", "subject", "mt_palomar"), - ("event2241", "type", "membership"), - ("event2242", "object", "place"), - ("event2242", "subject", "kitt_peak"), - ("event2242", "type", "membership"), - ("event2243", "object", "place"), - ("event2243", "subject", "mauna_kea"), - ("event2243", "type", "membership"), - ("event2244", "object", "place"), - ("event2244", "subject", "slough"), - ("event2244", "type", "membership"), - ("event2245", "object", "place"), - ("event2245", "subject", "paris"), - ("event2245", "type", "membership"), - ("event2246", "object", "place"), - ("event2246", "subject", "the_hague"), - ("event2246", "type", "membership"), - ("event2247", "object", "place"), - ("event2247", "subject", "cambridge"), - ("event2247", "type", "membership"), - ("event2248", "object", "place"), - ("event2248", "subject", "liverpool"), - ("event2248", "type", "membership"), - ("event2249", "object", "place"), - ("event2249", "subject", "arequipa"), - ("event2249", "type", "membership"), - ("event2250", "object", "place"), - ("event2250", "subject", "pic_du_midi"), - ("event2250", "type", "membership"), - ("event2251", "object", "place"), - ("event2251", "subject", "flagstaff"), - ("event2251", "type", "membership"), - ("event2252", "object", "place"), - ("event2252", "subject", "la_silla"), - ("event2252", "type", "membership"), - ("event2253", "object", "place"), - ("event2253", "subject", "mt_hopkins"), - ("event2253", "type", "membership"), - ("event2254", "object", "place"), - ("event2254", "subject", "fort_davis"), - ("event2254", "type", "membership"), - ("event2255", "object", "place"), - ("event2255", "subject", "cerro_tololo"), - ("event2255", "type", "membership")] - ---copied from gangster_v4: utility functions for making lists unique -subset s t = (s \\ t) == [] - -makeset x = Set.toList $ Set.fromList x - ---copied from gangster_v4: combinators -termor tmph1 tmph2 ents = - liftM List.nub $ liftM2 (++) (tmph1 ents) (tmph2 ents) --TODO: MERGE IMAGES PROPER - -termand tmph1 tmph2 ents = do - t1 <- tmph1 ents - t2 <- tmph2 ents - if t1 /= [] && t2 /= [] then return $ List.nub $ t1 ++ t2 else return [] - --May need to be changed to intersection? Don't think so: can't remove anything from nub (t1++t2) because all things are relevant to either t1 or t2 - --TODO: MERGE IMAGES PROPER (or do termphrases always preserve ents) - -intersect_entevimages eei1 eei2 - = [(subj2, evs2) | (subj1, evs1) <- eei1, (subj2, evs2) <- eei2, subj1 == subj2] - -that = nounand - -nounand = liftM2 intersect_entevimages - -nounor' s t = List.nub(s ++ t) -nounor = liftM2 nounor' - -{-a' nph vbph = - length (intersect nph vbph) /= 0-} -a = liftM2 intersect_entevimages - -every' nph vbph | subset (map fst nph) (map fst vbph) = intersect_entevimages nph vbph - | otherwise = [] - -every = liftM2 every' - -{- TODO: -no' nph vbph = - length (intersect nph vbph) == 0 -no = liftM2 no' --} - -{- TODO: -none' nph vbph = - no nph vbph -none = liftM2 none' --} - -one' nph vbph | length (res) == 1 = res - | otherwise = [] - where - res = intersect_entevimages nph vbph - -one = liftM2 one' - -two' nph vbph | length (res) == 2 = res - | otherwise = [] - where - res = intersect_entevimages nph vbph - -two = liftM2 two' - - ---which nph vbph = if result /= [] then result else "none." --- where result = unwords $ intersect nph vbph - -which nph vbph = do - nph_ <- nph - vbph_ <- vbph - let result = unwords $ map fst $ intersect_entevimages nph_ vbph_ - return $ if result /= [] then result else "none." - -how_many' nph vbph = - show $ length (intersect_entevimages nph vbph) -how_many = liftM2 how_many' - -who = which (person `nounor` science_team) - ---New -what' nph = if result /= [] then result else "nothing." - where result = unwords $ map fst nph -what = liftM what' - -with :: (IO Image -> IO Image) -> (String, IO Image -> IO Image) -with tmph = ("with_implement", tmph) - -make_pnoun noun = liftM $ make_pnoun' noun -make_pnoun' noun image = [(subj, evs) | (subj, evs) <- image, subj == noun] - ---New for new new semantics - ---TODO: Handle case where nothing is in props (return none) -make_prop_termphrase prop nph = do - list <- nph - props <- mapM (\(_,y) -> getts_inverse dataStore prop y >>= \loc -> return (map fst loc)) list - let finalList = unwords $ List.nub $ concat props - return $ if finalList /= [] then finalList else "nothing." - -where' = make_prop_termphrase "location" -when' = make_prop_termphrase "year" -how' = make_prop_termphrase "with_implement" -whatobj = make_prop_termphrase "object" - - ---end of copied from gangster_v4 - -sun = get_members dataStore ("sun") -planet = get_members dataStore ("planet") -moon = get_members dataStore ("moon") -person = get_members dataStore ("person") -thing = get_members dataStore ("thing") -telescope = get_members dataStore ("telescope") -science_team = get_members dataStore ("science_team") -spacecraft = get_members dataStore ("spacecraft") -place = get_members dataStore ("place") - -atmospheric = get_members dataStore ("atmospheric") -blue = get_members dataStore ("blue") -depressed = get_members dataStore ("depressed") -solid = get_members dataStore ("solid") -brown = get_members dataStore ("brown") -gaseous = get_members dataStore ("gaseous") -green = get_members dataStore ("green") -red = get_members dataStore ("red") -ringed = get_members dataStore ("ringed") -vacuumous = get_members dataStore ("vacuumous") -exists = thing -spin = get_members dataStore ("spin") - - -discover_intrans = get_subjs_of_event_type dataStore ("discover_ev") -orbit_intrans = get_subjs_of_event_type dataStore ("orbit_ev") - -discover = make_relation "discover_ev" -discovered = discover - -orbit = make_relation "orbit_ev" -orbited = orbit - ---For prepositional phrases -discover' = make_relation "discover_ev" -discovered' = discover' - -orbit' = make_relation "orbit_ev" -orbited' = orbit' - -hall = make_pnoun "hall" -phobos = make_pnoun "phobos" -mars = make_pnoun "mars" -refractor_telescope_1 = make_pnoun "refractor_telescope_1" - -make_relation ev_type tmph = make_filtered_relation dataStore ev_type [(["object"],tmph)] - - -{-make_inverted_relation :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> IO [String] -make_inverted_relation ev_data rel tmph = do - images <- make_image ev_data rel "object" - objPairs <- filterM (\(_, evs) -> - tmph $ liftM concat $ mapM (\ev -> getts_3 ev_data (ev, "subject", "?")) evs) images - return $ map fst objPairs-} - ---Prepositional filtering - ---filter_ev takes a list of ([String], IO [String] -> IO Bool) where the [String] is the list of identifiers corresponding ---to the data the preposition predicate needs to evaluate (e.g., for location predicates the list will contain "location", -{-filter_ev :: (TripleStore m) => m -> [([String], IO [String] -> IO Bool)] -> Event -> IO Bool -filter_ev ev_data [] ev = return True -filter_ev ev_data ((names,pred):list) ev = do - relevant_list <- mapM (\name -> getts_3 ev_data (ev, name, "?")) names - res <- pred $ return $ concat relevant_list - if res then filter_ev ev_data list ev else return False-} - ---Modified filter_ev to accommodate predicates like every, one, two, etc... ---The difference is that it concatenates the data the preposition predicate needs to evaluate across all events and ---applies the preposition predicate to that, so that all data is available to the predicate rather than just the subset ---given by a specific event ---TODO: new filter_Ev -{-filter_ev :: (TripleStore m) => m -> [([String], IO Image -> IO Image)] -> [Event] -> IO Bool -filter_ev _ [] _ = return True -filter_ev ev_data ((names,pred):list) evs = do - relevant_list <- mapM (\name -> getts_inverse ev_data name evs) names - res <- pred $ return $ concat $ relevant_list - if res /= [] then filter_ev ev_data list evs else return False-} - ---new filter_ev: Handles prepositional phrases (IN TESTING) -filter_ev :: (TripleStore m) => m -> [([String], IO Image -> IO Image)] -> [Event] -> IO Bool -filter_ev _ [] _ = return True -filter_ev ev_data ((names,pred):list) evs = do - relevant_list <- mapM (\name -> getts_inverse ev_data name evs) names - res <- pred $ return $ concat $ relevant_list - --NEW: Merge all events in predicate result for new query. Result will be a subset of evs. - let relevant_evs = List.nub $ concatMap snd res - if res /= [] then filter_ev ev_data list relevant_evs else return False - -{-make_filtered_relation :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> [([String], IO [String] -> IO Bool)] -> IO [String] -make_filtered_relation ev_data rel tmph preps = do - images <- make_image ev_data rel "subject" - subPairs <- filterM (\(_, evs) -> do - filtEvents <- filterM (filter_ev ev_data preps) evs - tmph $ liftM concat $ mapM (\ev -> getts_3 ev_data (ev, "object", "?")) filtEvents) images - return $ map fst subPairs-} - ---Modified version of make_filtered_relation to accomodate new filter_ev -make_filtered_relation :: (TripleStore m) => m -> String -> [([String], IO Image -> IO Image)] -> IO Image -make_filtered_relation ev_data rel preps = do - images <- make_image ev_data rel "subject" - filterM (\(_, evs) -> filter_ev ev_data preps evs) images - -{-make_inverted_filtered_relation :: (TripleStore m) => m -> String -> [([String], IO [String] -> IO Bool)] -> IO [String] -make_inverted_filtered_relation ev_data rel preps = do - images <- make_image ev_data rel "object" - objPairs <- filterM (\(_, evs) -> anyM (filter_ev ev_data preps) evs) images - return $ map fst objPairs - where - anyM :: (Monad m) => (a -> m Bool) -> [a] -> m Bool - anyM pred lst = foldM (\x y -> pred y >>= \res -> return $ x || res) False lst -} - ---Modified version of make_inverted_filtered_relation to accomodate new filter_ev -make_inverted_filtered_relation :: (TripleStore m) => m -> String -> [([String], IO Image -> IO Image)] -> IO Image -make_inverted_filtered_relation ev_data rel preps = do - images <- make_image ev_data rel "object" - filterM (\(_, evs) -> filter_ev ev_data preps evs) images - ---Copied from old solarman: -yesno' x = if x /= [] then "yes." else "no" -yesno = liftM yesno' - ---TODO: is this proper? -sand s1 s2 = do - r1 <- s1 - r2 <- s2 - return $ if r1 /= [] && r2 /= [] then List.nub $ r1 ++ r2 else [] - -{- -||----------------------------------------------------------------------------- -|| BASIC INTERPRETERS -||----------------------------------------------------------------------------- --} - - -pnoun = pre_processed Pnoun -cnoun = pre_processed Cnoun -adj = pre_processed Adj -det = pre_processed Det -intransvb = pre_processed Intransvb -transvb = pre_processed Transvb -linkingvb = pre_processed Linkingvb -relpron = pre_processed Relpron -termphjoin = pre_processed Termphjoin -verbphjoin = pre_processed Verbphjoin -nounjoin = pre_processed Nounjoin -indefpron = pre_processed Indefpron -{- -terminator = uninterpreted (SPECIAL_SYMBOL_TERM ".") - $orelse - uninterpreted (SPECIAL_SYMBOL_TERM "?") - $orelse - uninterpreted (SPECIAL_SYMBOL_TERM "\n") --} -sentjoin = pre_processed Sentjoin -quest1 = pre_processed Quest1 -quest2 = pre_processed Quest2 -quest3 = pre_processed Quest3 -quest4a = pre_processed Quest4a -quest4b = pre_processed Quest4b -quest5 = pre_processed Quest5 -quest6 = pre_processed Quest6 - ---NEW FOR PREPOSITIONAL PHRASES -prep = pre_processed Prepn -year = pre_processed Year - - -pre_processed key - = let formAlts altTerminals = memoize key (altTerminals) - formTerminal [x] = x - formTerminal (x:xs) = x <|> formTerminal xs - list_of_ters = [ terminal (term a) z - | (a,b,z) <- dictionary - , b == key] - in formAlts (formTerminal list_of_ters) - - -meaning_of p dInp key - = let dInput = words dInp - appParser = unState (p T0 [] ((1,[]), dInput) ([],[])) [] - upperBound = (length dInput) + 1 - in formFinal key upperBound (snd $ appParser) - -meaning_of_ p dInp key - = let dInput = words dInp - appParser = unState (p T0 [] ((1,[]), dInput) ([],[])) [] - upperBound = (length dInput) + 1 - in (snd $ appParser) - -formAtts key ePoint t - = concat $ concat $ concat $ concat - [[[[ val1 |(id1,val1)<-synAtts] - |(((st,inAtt2),(end,synAtts)), ts)<-rs, st == 1 && end == ePoint] - |((i,inAt1),((cs,ct),rs)) <- sr ] - |(s,sr) <- t, s == key ] -formFinal key ePoint t - = concat $ concat $ concat $ concat - [[[[ val1 |(id1,val1)<-synAtts] - |(((st,inAtt2),(end,synAtts)), ts)<-rs, st == 1 && end == ePoint] - |((i,inAt1),((cs,ct),rs)) <- sr ] - |(s,sr) <- t, s == key ] -{- -test p = unState (p ((1,[]),input) ([],[])) [] - -main = do putStr $ render80 $ formatAtts Question $ snd $ test (question T0 []) - -type Start1 = (Int, InsAttVals) -type Start = ((Int,InsAttVals), [String]) -type End = (Int, InsAttVals) -type Atts = [AttValue] -- [(AttType, AttValue)] -type InsAttVals = [(Instance, Atts)] - - - ,[(Start1,(Context,Result))] -type Mtable = [(MemoL - ) - ] -type Result = [((Start1, End),[Tree MemoL])] -||----------------------------------------------------------------------------- -|| THE ATTRIBUTE GRAMMAR -||----------------------------------------------------------------------------- --} - --- public <snouncla> = <cnoun> | <adjs> <cnoun>; -snouncla - = memoize Snouncla - (parser - (nt cnoun S3) - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO copy [synthesized NOUNCLA_VAL OF S3]] - <|> - parser (nt adjs S1 *> nt cnoun S2) - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO intrsct1 [synthesized ADJ_VAL OF S1, - synthesized NOUNCLA_VAL OF S2]] - - ) - -------------------------------------------------------------------------------- --- public <relnouncla> = <snouncla> <relpron> <joinvbph> | <snouncla>; -relnouncla - = memoize Relnouncla - (parser - (nt snouncla S1 *> nt relpron S2 *> nt joinvbph S3) - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_middle1[synthesized NOUNCLA_VAL OF S1, - synthesized RELPRON_VAL OF S2, - synthesized VERBPH_VAL OF S3]] - <|> - parser - (nt snouncla S4) - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO copy [synthesized NOUNCLA_VAL OF S4]] - ) ----------------------------------------------------------------------------- - - --- public <nouncla> = <relnouncla> <nounjoin> <nouncla> | <relnouncla> <relpron> <linkingvb> <nouncla> | <relnouncla>; -nouncla - = memoize Nouncla - (parser (nt relnouncla S1 *> nt nounjoin S2 *> nt nouncla S3) - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_middle2 [synthesized NOUNCLA_VAL OF S1, - synthesized NOUNJOIN_VAL OF S2, - synthesized NOUNCLA_VAL OF S3]] - <|> - parser (nt relnouncla S1 *> nt relpron S2 *> nt linkingvb S3 *> nt nouncla S4) --Does this make sense? Allows us to ask - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_middle3 [synthesized NOUNCLA_VAL OF S1, - synthesized RELPRON_VAL OF S2, - synthesized NOUNCLA_VAL OF S4]] - <|> - parser (nt relnouncla S1) - [rule_s NOUNCLA_VAL OF LHS ISEQUALTO copy [synthesized NOUNCLA_VAL OF S1]] - ) - ------------------------------------------------------------------------------- --- public <adjs> = <adj> <adjs> | <adj>; -adjs - = memoize Adjs - (parser (nt adj S1 *> nt adjs S2) - [rule_s ADJ_VAL OF LHS ISEQUALTO intrsct2 [synthesized ADJ_VAL OF S1, - synthesized ADJ_VAL OF S2]] - <|> - parser (nt adj S3) - [rule_s ADJ_VAL OF LHS ISEQUALTO copy [synthesized ADJ_VAL OF S3]] - ) ------------------------------------------------------------------------------- --- public <detph> = <indefpron> | <det> <nouncla>; -detph - = memoize Detph - (parser (nt indefpron S3) - [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S3]] - <|> - parser (nt det S1 *> nt nouncla S2) - [rule_s TERMPH_VAL OF LHS ISEQUALTO applydet [synthesized DET_VAL OF S1, - synthesized NOUNCLA_VAL OF S2]] - ) - ----------------------------------------------------------------------------------- - -{- - public <transvbph> = <transvb> - | <transvb> <preps> - | <transvb> <jointermph> - | <transvb> <jointermph> <preps> - | <linkingvb> <jointermph> <transvb> - | <linkingvb> <jointermph> <transvb> <preps>; - -} - -transvbph - = memoize Transvbph - (parser (nt transvb S1) --"discovered" - [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvb_no_tmph [synthesized VERB_VAL OF S1]] - <|> - parser (nt transvb S1 *> nt preps S2) --"discovered in..." - [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvb_no_tmph [synthesized VERB_VAL OF S1, - synthesized PREP_VAL OF S2]] - <|> - parser (nt transvb S1 *> nt jointermph S2) --"discovered phobos (and blah and blah and blah)" - [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbprep [synthesized VERB_VAL OF S1, - synthesized TERMPH_VAL OF S2]] - <|> - parser (nt transvb S1 *> nt jointermph S2 *> nt preps S3) --"discovered phobos in..." - [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbprep [synthesized VERB_VAL OF S1, - synthesized TERMPH_VAL OF S2, - synthesized PREP_VAL OF S3]] - <|> - parser (nt linkingvb S1 *> nt transvb S2) --"was discovered" - [rule_s VERBPH_VAL OF LHS ISEQUALTO drop3rdprep [synthesized LINKINGVB_VAL OF S1, - synthesized VERB_VAL OF S2]] - <|> - parser (nt linkingvb S1 *> nt transvb S2 *> nt preps S3) --"was discovered by hall in..." - [rule_s VERBPH_VAL OF LHS ISEQUALTO drop3rdprep [synthesized LINKINGVB_VAL OF S1, - synthesized VERB_VAL OF S2, - synthesized PREP_VAL OF S3]] - <|> - parser (nt linkingvb S1 *> nt jointermph S2 *> nt transvb S3) --"was phobos discovered" - [rule_s VERBPH_VAL OF LHS ISEQUALTO apply_quest_transvb_passive [synthesized LINKINGVB_VAL OF S1, - synthesized TERMPH_VAL OF S2, - synthesized VERB_VAL OF S3]] - <|> - parser (nt linkingvb S1 *> nt jointermph S2 *> nt transvb S3 *> nt preps S4) --"was phobos discovered in..." - [rule_s VERBPH_VAL OF LHS ISEQUALTO apply_quest_transvb_passive [synthesized LINKINGVB_VAL OF S1, - synthesized TERMPH_VAL OF S2, - synthesized VERB_VAL OF S3, - synthesized PREP_VAL OF S4]] - ) - ----------------------------------------------------------------------------------- ---NEW FOR PREPOSITIONAL PHRASES - --- public <preps> = <prepph> | <preph> <preps>; -preps - = memoize Preps - (parser (nt prepph S1) - [rule_s PREP_VAL OF LHS ISEQUALTO applyprep [synthesized PREPPH_VAL OF S1]] - <|> - parser (nt prepph S1 *> nt preps S2) - [rule_s PREP_VAL OF LHS ISEQUALTO applypreps [synthesized PREPPH_VAL OF S1, - synthesized PREP_VAL OF S2]] - ) - --- public <prepph> = <prep> <jointermph>; -prepph - = memoize Prepph - (parser (nt prep S1 *> nt jointermph S2) - [rule_s PREPPH_VAL OF LHS ISEQUALTO applyprepph [synthesized PREPN_VAL OF S1, - synthesized TERMPH_VAL OF S2]] - ) - ----------------------------------------------------------------------------------- - --- public <verbph> = <transvbph> | <intransvb> | <linkingvb> <det> <nouncla>; -verbph - = memoize Verbph - ( - parser (nt transvbph S4) - [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S4]] - <|> - parser (nt intransvb S5) - [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S5]] - <|> - parser (nt linkingvb S1 *> nt det S2 *> nt nouncla S3) - [rule_s VERBPH_VAL OF LHS ISEQUALTO applyvbph [synthesized NOUNCLA_VAL OF S3]] - ) ------------------------------------------------------------------------------------- --- public <termph> = <pnoun> | <detph> | <year>; -termph - = memoize Termph - ( - parser (nt pnoun S1) - [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S1]] - <|> - parser (nt detph S2) - [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S2]] - <|> - parser (nt year S3) - [rule_s TERMPH_VAL OF LHS ISEQUALTO applyyear [synthesized YEAR_VAL OF S3]] - ) - - ------------------------------------------------------------------------------------- --- public <jointermph> = <jointermph> <termphjoin> <jointermph> | <termph>; -jointermph - = memoize Jointermph - ( -{- parser (nt jointermph S1 *> nt termphjoin S2 *> nt termph S3) - [rule_s TERMPH_VAL OF LHS ISEQUALTO appjoin1 [synthesized TERMPH_VAL OF S1, - synthesized TERMPHJOIN_VAL OF S2, - synthesized TERMPH_VAL OF S3]] - <|> --} - parser (nt jointermph S1 *> nt termphjoin S2 *> nt jointermph S3) --"hall and galileo discovered...?" - [rule_s TERMPH_VAL OF LHS ISEQUALTO appjoin1 [synthesized TERMPH_VAL OF S1, - synthesized TERMPHJOIN_VAL OF S2, - synthesized TERMPH_VAL OF S3]] - <|> - parser (nt termph S4) - [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S4]] - ) ------------------------------------------------------------------------------------- --- public <joinvbph> = <verbph> <verbphjoin> <joinvbph> | <verbph>; -joinvbph - = memoize Joinvbph - ( - parser (nt verbph S1 *> nt verbphjoin S2 *> nt joinvbph S3) - [rule_s VERBPH_VAL OF LHS ISEQUALTO appjoin2 [synthesized VERBPH_VAL OF S1, - synthesized VBPHJOIN_VAL OF S2, - synthesized VERBPH_VAL OF S3]] - <|> - parser (nt verbph S4) - [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S4]] - ) ---------------------------------------------------------------------------- --- public <sent> = <jointermph> <joinvbph>; -sent - = memoize Sent - ( - parser (nt jointermph S1 *> nt joinvbph S2) - [rule_s SENT_VAL OF LHS ISEQUALTO apply_termphrase [synthesized TERMPH_VAL OF S1, - synthesized VERBPH_VAL OF S2]] - ) --- **************************************************************************** -- --- public <two_sent> = <sent> <sentjoin> <sent>; -two_sent - = memoize Two_sent - ( - parser (nt sent S1 *> nt sentjoin S2 *> nt sent S3) - [rule_s SENT_VAL OF LHS ISEQUALTO sent_val_comp [synthesized SENT_VAL OF S1, - synthesized SENTJOIN_VAL OF S2, - synthesized SENT_VAL OF S3]] - ) ------------------------------------------------------------------------------------- -{- - public <question> = <quest1> <sent> - | <quest6> <quest1> <sent> - | <quest5> <quest1> <sent> - | <quest2> <joinvbph> - | <quest5> <joinvbph> - | <quest3> <nouncla> - | <quest3> <nouncla> <joinvbph> - | <quest4> <nouncla> <joinvbph> - | <two_sent> - | <sent>; - --} -question - = memoize Question - ( - parser (nt quest1 S1 *> nt sent S2 ) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans1 [synthesized QUEST1_VAL OF S1, - synthesized SENT_VAL OF S2]] - <|> - parser (nt quest6 S1 *> nt quest1 S2 *> nt sent S3 ) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans5 [synthesized QUEST2_VAL OF S1, - synthesized QUEST1_VAL OF S2, - synthesized SENT_VAL OF S3]] - <|> - parser (nt quest5 S1 *> nt quest1 S2 *> nt sent S3 ) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans5 [synthesized QUEST2_VAL OF S1, - synthesized QUEST1_VAL OF S2, - synthesized SENT_VAL OF S3]] - <|> - parser (nt quest2 S1 *> nt joinvbph S2) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans2 [synthesized QUEST2_VAL OF S1, - synthesized VERBPH_VAL OF S2]] - <|> - parser (nt quest5 S1 *> nt joinvbph S2) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans2 [synthesized QUEST2_VAL OF S1, - synthesized VERBPH_VAL OF S2]] - <|> - parser (nt quest3 S1 *> nt nouncla S2 *> nt joinvbph S3) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans3 [synthesized QUEST3_VAL OF S1, - synthesized NOUNCLA_VAL OF S2, - synthesized VERBPH_VAL OF S3]] - <|> - parser (nt quest4 S1 *> nt nouncla S2 *> nt joinvbph S3) - [rule_s QUEST_VAL OF LHS ISEQUALTO ans3 [synthesized QUEST3_VAL OF S1, - synthesized NOUNCLA_VAL OF S2, - synthesized VERBPH_VAL OF S3]] - <|> - parser (nt two_sent S1) - [rule_s QUEST_VAL OF LHS ISEQUALTO truefalse [synthesized SENT_VAL OF S1]] - <|> - parser (nt sent S1) - [rule_s QUEST_VAL OF LHS ISEQUALTO truefalse [synthesized SENT_VAL OF S1]] - - ) - --- public <quest4> = <quest4a> <quest4b>; -quest4 = memoize Quest4 - ( - parser (nt quest4a S1 *> nt quest4b S2) - [rule_s QUEST3_VAL OF LHS ISEQUALTO copy [synthesized QUEST3_VAL OF S1]] - ) ---------------------------------------------------------------------------------- - -query = memoize Query - ( - parser (nt question S1) -- *> nt terminator S2) - [rule_s QUEST_VAL OF LHS ISEQUALTO copy [synthesized QUEST_VAL OF S1]] - ) - - - -{- -|| ----------------------------------------------------------------------------- -|| THE SEMANTICS - PART I : The attribute evaluation functions -||----------------------------------------------------------------------------- -applyBiOp [e1,op,e2] - = \atts -> VAL ((getAtts getB_OP atts op ) (getAtts getAVAL atts e1 ) (getAtts getAVAL atts e2)) - --} --- getAtts f (y,i) x = f (head (x y i)) --- copy [b] = \(atts,i) -> head (b atts i) - -intrsct1 [x, y] - = \atts -> NOUNCLA_VAL (liftM2 intersect_entevimages (getAtts getAVALS atts x) (getAtts getAVALS atts y)) - -intrsct2 [x, y] - = \atts -> ADJ_VAL (liftM2 intersect_entevimages (getAtts getAVALS atts x) (getAtts getAVALS atts y)) - -applydet [x, y] - = \atts -> TERMPH_VAL $ (getAtts getDVAL atts x) (getAtts getAVALS atts y) - ---make_trans_vb is very similar to make_relation. getBR must mean "get binary relation" ---getTVAL must mean "get predicate" i.e. what would be "phobos" in "discover phobos" ---Changed to get rid of make_trans_vb, since the getBR attribute was changed to not ---be a binary relation but instead a function that make_relation would give ---I.e., the kind of function that make_trans_vb would have generated, since they were ---nearly identical - ---NEW FOR PREPOSITIONAL PHRASES -applytransvbprep [x,y,z] atts = VERBPH_VAL $ make_filtered_relation dataStore reln ((["object"],predicate):preps) - where - reln = getAtts getBR atts x - predicate = getAtts getTVAL atts y - preps = getAtts getPREPVAL atts z - -applytransvbprep [x,y] atts = VERBPH_VAL $ make_filtered_relation dataStore reln [(["object"],predicate)] - where - reln = getAtts getBR atts x - predicate = getAtts getTVAL atts y - -applytransvb_no_tmph [x,y] atts = VERBPH_VAL $ make_filtered_relation dataStore reln preps - where - reln = getAtts getBR atts x - preps = getAtts getPREPVAL atts y - -applytransvb_no_tmph [x] atts = VERBPH_VAL $ make_filtered_relation dataStore reln [] - where - reln = getAtts getBR atts x - ---TODO: modify grammar so you can't ask "what was phobos discover", or if you can, make the answer sensible (e.g. hall, not phobos) -apply_quest_transvb_passive (x2:x3:x4:xs) atts = VERBPH_VAL $ termph $ make_inverted_filtered_relation dataStore reln preps - where - linkingvb = getAtts getLINKVAL atts x2 - termph = getAtts getTVAL atts x3 - reln = getAtts getBR atts x4 - preps = case xs of - [] -> [] - (x5:_) -> getAtts getPREPVAL atts x5 - -applyprepph [x, y] - = \atts -> PREPPH_VAL $ - let prep_names = getAtts getPREPNVAL atts x - termph = getAtts getTVAL atts y in - (prep_names, termph) - -applyprep [x] - = \atts -> PREP_VAL $ [(getAtts getPREPPHVAL atts x)] --[(["with_implement"], a telescope)] - -applypreps [x, y] - = \atts -> PREP_VAL $ (getAtts getPREPPHVAL atts x):(getAtts getPREPVAL atts y) - -applyyear [x] - = \atts -> TERMPH_VAL $ make_pnoun $ show $ getAtts getYEARVAL atts x - ---END PREPOSITIONAL PHRASES - -applyvbph [z] - = \atts -> VERBPH_VAL (getAtts getAVALS atts z) - -appjoin1 [x, y, z] - = \atts -> TERMPH_VAL $ (getAtts getTJVAL atts y) (getAtts getTVAL atts x) (getAtts getTVAL atts z) - -appjoin2 [x, y, z] - = \atts -> VERBPH_VAL ((getAtts getVJVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z)) - -apply_middle1 [x, y, z] - = \atts -> NOUNCLA_VAL ((getAtts getRELVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z)) - -apply_middle2 [x, y, z] - = \atts -> NOUNCLA_VAL ((getAtts getNJVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z)) - -apply_middle3 [x, y, z] - = \atts -> NOUNCLA_VAL ((getAtts getRELVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z)) - --- Think "a orbited by b" vs "b orbits a" -{-drop3rd [w, x, y, z] - = \atts -> VERBPH_VAL $ - let reln = getAtts getBR atts x in - let predicate = getAtts getTVAL atts z in - make_inverted_relation dataStore reln predicate-} - ---NEW FOR PREPOSITIONAL PHRASES -drop3rdprep (w:x:xs) atts = VERBPH_VAL $ make_inverted_filtered_relation dataStore reln preps - where - reln = getAtts getBR atts x - preps = case xs of - [] -> [] - (p:ps) -> getAtts getPREPVAL atts p ---END PREPOSITIONAL PHRASES - -apply_termphrase [x, y] - = \atts -> SENT_VAL ((getAtts getTVAL atts x) (getAtts getAVALS atts y)) - -sent_val_comp [s1, f, s2] - = \atts -> SENT_VAL ((getAtts getSJVAL atts f) (getAtts getSV atts s1) (getAtts getSV atts s2)) - -ans1 [x, y] - = \atts -> QUEST_VAL ((getAtts getQU1VAL atts x) (getAtts getSV atts y) ) - -ans2 [x, y] - = \atts -> QUEST_VAL ((getAtts getQU2VAL atts x) (getAtts getAVALS atts y)) - -ans3 [x, y, z] - = \atts -> QUEST_VAL ((getAtts getQU3VAL atts x) (getAtts getAVALS atts y) (getAtts getAVALS atts z)) - -ans5 [x, y, z] - = \atts -> QUEST_VAL ((getAtts getQU2VAL atts x) (getAtts getSV atts z)) - -truefalse [x] - = \atts -> QUEST_VAL $ do - bool <- (getAtts getSV atts x) - return $ if bool /= [] then "true." else "false." - - - - -{- -||----------------------------------------------------------------------------- -|| THE SEMANTICS - PART II : Functions used to obtain objects denoted by -|| proper nouns, verbs, etc. -||----------------------------------------------------------------------------- - -|| FUNCTION USED TO DEFINE OBJECTS ASSOCIATED WITH PROPER NOUNS --} ---test_wrt e s = e `elem` s - --- FUNCTION USED TO DEFINE MEANINGS OF VERBS IN TERMS OF RELATIONS ---make_trans_vb rel p = [x | (x, image_x) <- collect rel, p image_x] -- Similar to make_relation - -{- TERMINALS IN JSGF FORM - -<Prepn> = with | in | at | by; - -<Transvb> = discover | discovers | discovered | orbit | orbited | orbits; - -<Indefpron> = anyone | anything | anybody | someone | something | somebody | everyone | everything | everybody; - -<Quest5> = where | when | how; - -<Quest4b> = many; - -<Sentjoin> = and; - -<Linkingvb> = is | was | are | were; - -<Nounjoin> = and | or; - -<Verbphjoin> = and | or; - -<Quest3> = which | what; - -<Det> = the | a | one | an | some | any | every | all | two; - -<Termphjoin> = and | or; - -<Quest6> = what; - -<Intransvb> = exist | exists | spin | spins | orbit | orbits; - --} - -dictionary = [ - ("thing", Cnoun, [NOUNCLA_VAL thing]), - ("things", Cnoun, [NOUNCLA_VAL thing]), - ("planets", Cnoun, [NOUNCLA_VAL planet]), - ("planet", Cnoun, [NOUNCLA_VAL planet]), - ("person", Cnoun, [NOUNCLA_VAL person]), - ("sun", Cnoun, [NOUNCLA_VAL sun]), - ("moon", Cnoun, [NOUNCLA_VAL moon]), - ("moons", Cnoun, [NOUNCLA_VAL moon]), - ("satellite", Cnoun, [NOUNCLA_VAL moon]), - ("satellites", Cnoun, [NOUNCLA_VAL moon]), - ("atmospheric", Adj, [ADJ_VAL atmospheric]), - ("blue", Adj, [ADJ_VAL blue]), - ("solid", Adj, [ADJ_VAL solid]), - ("brown", Adj, [ADJ_VAL brown]), - ("gaseous", Adj, [ADJ_VAL gaseous]), - ("green", Adj, [ADJ_VAL green]), - ("red", Adj, [ADJ_VAL red]), - ("ringed", Adj, [ADJ_VAL ringed]), - ("vacuumous", Adj, [ADJ_VAL vacuumous]), - ("exist", Intransvb, [VERBPH_VAL thing]), - ("exists", Intransvb, [VERBPH_VAL thing]), - ("spin", Intransvb, [VERBPH_VAL spin]), - ("spins", Intransvb, [VERBPH_VAL spin]), - ("the", Det, [DET_VAL $ a]), - ("a", Det, [DET_VAL $ a]), - ("one", Det, [DET_VAL $ one]), - ("an", Det, [DET_VAL $ a]), - ("some", Det, [DET_VAL $ a]), - ("any", Det, [DET_VAL $ a]), - --("no", Det, [DET_VAL $ no]), - ("every", Det, [DET_VAL $ every]), - ("all", Det, [DET_VAL $ every]), - ("two", Det, [DET_VAL $ two]), - ("bernard", Pnoun, [TERMPH_VAL $ make_pnoun "bernard"]), - ("bond", Pnoun, [TERMPH_VAL $ make_pnoun "bond"]), - ("venus", Pnoun, [TERMPH_VAL $ make_pnoun "venus"]), - ("cassini", Pnoun, [TERMPH_VAL $ make_pnoun "cassini"]), - ("dollfus", Pnoun, [TERMPH_VAL $ make_pnoun "dollfus"]), - ("Fouuntain", Pnoun, [TERMPH_VAL $ make_pnoun "Fouuntain"]), - ("galileo", Pnoun, [TERMPH_VAL $ make_pnoun "galileo"]), - ("hall", Pnoun, [TERMPH_VAL $ make_pnoun "hall"]), - ("herschel", Pnoun, [TERMPH_VAL $ make_pnoun "herschel"]), - ("huygens", Pnoun, [TERMPH_VAL $ make_pnoun "huygens"]), - ("kowal", Pnoun, [TERMPH_VAL $ make_pnoun "kowal"]), - ("kuiper", Pnoun, [TERMPH_VAL $ make_pnoun "kuiper"]), - ("larsen", Pnoun, [TERMPH_VAL $ make_pnoun "larsen"]), - ("lassell", Pnoun, [TERMPH_VAL $ make_pnoun "lassell"]), - ("melotte", Pnoun, [TERMPH_VAL $ make_pnoun "melotte"]), - ("nicholson", Pnoun, [TERMPH_VAL $ make_pnoun "nicholson"]), - ("perrine", Pnoun, [TERMPH_VAL $ make_pnoun "perrine"]), - ("pickering", Pnoun, [TERMPH_VAL $ make_pnoun "pickering"]), - ("almathea", Pnoun, [TERMPH_VAL $ make_pnoun "almathea"]), - ("ariel", Pnoun, [TERMPH_VAL $ make_pnoun "ariel"]), - ("callisto", Pnoun, [TERMPH_VAL $ make_pnoun "callisto"]), - ("charon", Pnoun, [TERMPH_VAL $ make_pnoun "charon"]), - ("deimos", Pnoun, [TERMPH_VAL $ make_pnoun "deimos"]), - ("dione", Pnoun, [TERMPH_VAL $ make_pnoun "dione"]), - ("earth", Pnoun, [TERMPH_VAL $ make_pnoun "earth"]), - ("enceladus", Pnoun, [TERMPH_VAL $ make_pnoun "enceladus"]), - ("europa", Pnoun, [TERMPH_VAL $ make_pnoun "europa"]), - ("ganymede", Pnoun, [TERMPH_VAL $ make_pnoun "ganymede"]), - ("hyperion", Pnoun, [TERMPH_VAL $ make_pnoun "hyperion"]), - ("iapetus", Pnoun, [TERMPH_VAL $ make_pnoun "iapetus"]), - ("io", Pnoun, [TERMPH_VAL $ make_pnoun "io"]), - ("janus", Pnoun, [TERMPH_VAL $ make_pnoun "janus"]), - ("jupiter", Pnoun, [TERMPH_VAL $ make_pnoun "jupiter"]), - ("jupitereighth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitereighth"]), - ("jupitereleventh", Pnoun, [TERMPH_VAL $ make_pnoun "jupitereleventh"]), - ("jupiterfourteenth", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterfourteenth"]), - ("jupiterninth", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterninth"]), - ("jupiterseventh", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterseventh"]), - ("jupitersixth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitersixth"]), - ("jupitertenth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitertenth"]), - ("jupiterthirteenth", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterthirteenth"]), - ("jupitertwelfth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitertwelfth"]), - ("luna", Pnoun, [TERMPH_VAL $ make_pnoun "luna"]), - ("mars", Pnoun, [TERMPH_VAL $ make_pnoun "mars"]), - ("mercury", Pnoun, [TERMPH_VAL $ make_pnoun "mercury"]), - ("mimas", Pnoun, [TERMPH_VAL $ make_pnoun "mimas"]), - ("miranda", Pnoun, [TERMPH_VAL $ make_pnoun "miranda"]), - ("neptune", Pnoun, [TERMPH_VAL $ make_pnoun "neptune"]), - ("nereid", Pnoun, [TERMPH_VAL $ make_pnoun "nereid"]), - ("oberon", Pnoun, [TERMPH_VAL $ make_pnoun "oberon"]), - ("phobos", Pnoun, [TERMPH_VAL $ make_pnoun "phobos"]), - ("phoebe", Pnoun, [TERMPH_VAL $ make_pnoun "phoebe"]), - ("pluto", Pnoun, [TERMPH_VAL $ make_pnoun "pluto"]), - ("rhea", Pnoun, [TERMPH_VAL $ make_pnoun "rhea"]), - ("saturn", Pnoun, [TERMPH_VAL $ make_pnoun "saturn"]), - ("saturnfirst", Pnoun, [TERMPH_VAL $ make_pnoun "saturnfirst"]), - ("sol", Pnoun, [TERMPH_VAL $ make_pnoun "sol"]), - ("tethys", Pnoun, [TERMPH_VAL $ make_pnoun "tethys"]), - ("titan", Pnoun, [TERMPH_VAL $ make_pnoun "titan"]), - ("titania", Pnoun, [TERMPH_VAL $ make_pnoun "titania"]), - ("triton", Pnoun, [TERMPH_VAL $ make_pnoun "triton"]), - ("umbriel", Pnoun, [TERMPH_VAL $ make_pnoun "umbriel"]), - ("uranus", Pnoun, [TERMPH_VAL $ make_pnoun "uranus"]), - ("venus", Pnoun, [TERMPH_VAL $ make_pnoun "venus"]), - ("discover", Transvb, [VERB_VAL ("discover_ev")]), - ("discovers", Transvb, [VERB_VAL ("discover_ev")]), - ("discovered", Transvb, [VERB_VAL ("discover_ev")]), - ("orbit", Transvb, [VERB_VAL ("orbit_ev")]), - ("orbited", Transvb, [VERB_VAL ("orbit_ev")]), - ("orbits", Transvb, [VERB_VAL ("orbit_ev")]), - ("is", Linkingvb, [LINKINGVB_VAL id]), - ("was", Linkingvb, [LINKINGVB_VAL id]), - ("are", Linkingvb, [LINKINGVB_VAL id]), - ("were", Linkingvb, [LINKINGVB_VAL id]), - ("that", Relpron, [RELPRON_VAL $ that]), - ("who", Relpron, [RELPRON_VAL $ that]), - ("which", Relpron, [RELPRON_VAL $ that]), - ("and", Verbphjoin,[VBPHJOIN_VAL $ nounand]), - ("or", Verbphjoin,[VBPHJOIN_VAL $ nounor]), - ("and", Nounjoin, [NOUNJOIN_VAL $ nounand]), - ("or", Nounjoin, [NOUNJOIN_VAL $ nounor]), - ("and", Termphjoin,[TERMPHJOIN_VAL termand]), - ("or", Termphjoin,[TERMPHJOIN_VAL termor]), - ("and", Sentjoin, [SENTJOIN_VAL $ sand]), - ("does", Quest1, [QUEST1_VAL $ yesno]), - ("did", Quest1 , [QUEST1_VAL $ yesno]), - ("do", Quest1, [QUEST1_VAL $ yesno]), - ("what", Quest2, [QUEST2_VAL $ what]), - ("who", Quest2, [QUEST2_VAL $ who]), - ("what", Quest6, [QUEST2_VAL $ whatobj]), - ("where", Quest5, [QUEST2_VAL $ where']), - ("when", Quest5, [QUEST2_VAL $ when']), - ("how", Quest5, [QUEST2_VAL $ how']), - ("which", Quest3, [QUEST3_VAL which]), - ("what", Quest3, [QUEST3_VAL which]), - ("how", Quest4a, [QUEST3_VAL $ how_many]), - ("many", Quest4b, [QUEST3_VAL $ how_many]), - ("human", Cnoun, meaning_of nouncla "person" Nouncla), - ("discoverer", Cnoun, [NOUNCLA_VAL discover_intrans]), - ("discoverers", Cnoun, [NOUNCLA_VAL discover_intrans]), - ("humans", Cnoun, meaning_of nouncla "person" Nouncla), - ("people", Cnoun, meaning_of nouncla "person" Nouncla), - ("orbit", Intransvb, [VERBPH_VAL $ orbit_intrans]), - ("orbits", Intransvb, [VERBPH_VAL $ orbit_intrans]), - ("anyone", Indefpron,meaning_of detph "a person" Detph), - ("anything", Indefpron,meaning_of detph "a thing" Detph), - ("anybody", Indefpron,meaning_of detph "a person" Detph), - ("someone", Indefpron,meaning_of detph "a person" Detph), - ("something", Indefpron,meaning_of detph "a thing" Detph), - ("somebody", Indefpron,meaning_of detph "a person" Detph), - ("everyone", Indefpron,meaning_of detph "every person" Detph), - ("everything", Indefpron,meaning_of detph "every thing" Detph), - ("everybody", Indefpron,meaning_of detph "every person" Detph), - --("nobody", Indefpron,meaning_of detph "no person" Detph), - --("noone", Indefpron,meaning_of detph "no person" Detph), - --Begin prepositional stuff-- - ("with", Prepn, [PREPN_VAL ["with_implement"]]), - ("in", Prepn, [PREPN_VAL ["location","year"]]), - ("at", Prepn, [PREPN_VAL ["location"]]), - ("by", Prepn, [PREPN_VAL ["subject"]]), - --Begin telescope stuff-- - ("telescope", Cnoun, [NOUNCLA_VAL telescope]), - ("telescopes", Cnoun, [NOUNCLA_VAL telescope]), - ("cassegrain_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "cassegrain_telescope"]), - ("hooker_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "hooker_telescope"]), - ("schmidt_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "schmidt_telescope"]), - ("subaru_reflector_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "subaru_reflector_telescope"]), - ("canada-france-hawaii_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "canada-france-hawaii_telescope"]), - ("aerial_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "aerial_telescope_1"]), - ("bruce_astrograph", Pnoun,[TERMPH_VAL $ make_pnoun "bruce_astrograph"]), - ("telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "telescope_1"]), - ("hale_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "hale_telescope"]), - ("hubble_space_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "hubble_space_telescope"]), - ("blanco_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "blanco_telescope"]), - ("crossley_reflector_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "crossley_reflector_telescope"]), - ("refractor_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_1"]), - ("refractor_telescope_2", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_2"]), - ("refractor_telescope_3", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_3"]), - ("refractor_telescope_4", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_4"]), - ("reflector_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_1"]), - ("reflector_telescope_2", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_2"]), - ("reflector_telescope_3", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_3"]), - ("reflector_telescope_4", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_4"]), - ("ground_based_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "ground_based_telescope_1"]), - ("ground_based_telescope_2", Pnoun,[TERMPH_VAL $ make_pnoun "ground_based_telescope_2"]), - ("ground_based_telescope_3", Pnoun,[TERMPH_VAL $ make_pnoun "ground_based_telescope_3"]), - ("galilean_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "galilean_telescope_1"]), - --Begin science team stuff - ("team", Cnoun, [NOUNCLA_VAL science_team]), - ("teams", Cnoun, [NOUNCLA_VAL science_team]), - ("voyager_science_team", Pnoun,[TERMPH_VAL $ make_pnoun "voyager_science_team"]), - ("cassini_imaging_science_team", Pnoun,[TERMPH_VAL $ make_pnoun "cassini_imaging_science_team"]), - ("science_team_1", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_1"]), - ("science_team_2", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_2"]), - ("science_team_3", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_3"]), - ("science_team_4", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_4"]), - ("science_team_5", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_5"]), - ("science_team_6", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_6"]), - ("science_team_7", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_7"]), - ("science_team_8", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_8"]), - ("science_team_9", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_9"]), - ("science_team_10", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_10"]), - ("science_team_11", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_11"]), - ("science_team_12", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_12"]), - ("science_team_13", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_13"]), - ("science_team_14", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_14"]), - ("science_team_15", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_15"]), - ("science_team_16", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_16"]), - ("science_team_17", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_17"]), - ("science_team_18", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_18"]), - ("science_team_19", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_19"]), - ("science_team_20", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_20"]), - ("science_team_21", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_21"]), - --Begin new people stuff-- - ("larson", Pnoun, [TERMPH_VAL $ make_pnoun "larson"]), - ("fountain", Pnoun, [TERMPH_VAL $ make_pnoun "fountain"]), - ("scotti", Pnoun, [TERMPH_VAL $ make_pnoun "scotti"]), - ("spahr", Pnoun, [TERMPH_VAL $ make_pnoun "spahr"]), - ("mcmillan", Pnoun, [TERMPH_VAL $ make_pnoun "mcmillan"]), - ("montani", Pnoun, [TERMPH_VAL $ make_pnoun "montani"]), - ("gleason", Pnoun, [TERMPH_VAL $ make_pnoun "gleason"]), - ("gehrels", Pnoun, [TERMPH_VAL $ make_pnoun "gehrels"]), - ("roemer", Pnoun, [TERMPH_VAL $ make_pnoun "roemer"]), - ("sheppard", Pnoun, [TERMPH_VAL $ make_pnoun "sheppard"]), - ("jewitt", Pnoun, [TERMPH_VAL $ make_pnoun "jewitt"]), - ("fernandez", Pnoun, [TERMPH_VAL $ make_pnoun "fernandez"]), - ("magnier", Pnoun, [TERMPH_VAL $ make_pnoun "magnier"]), - ("kleyna", Pnoun, [TERMPH_VAL $ make_pnoun "kleyna"]), - ("gladman", Pnoun, [TERMPH_VAL $ make_pnoun "gladman"]), - ("kavelaars", Pnoun, [TERMPH_VAL $ make_pnoun "kavelaars"]), - ("petit", Pnoun, [TERMPH_VAL $ make_pnoun "petit"]), - ("allen", Pnoun, [TERMPH_VAL $ make_pnoun "allen"]), - ("laques", Pnoun, [TERMPH_VAL $ make_pnoun "laques"]), - ("lecacheux", Pnoun, [TERMPH_VAL $ make_pnoun "lecacheux"]), - ("smith", Pnoun, [TERMPH_VAL $ make_pnoun "smith"]), - ("reitsema", Pnoun, [TERMPH_VAL $ make_pnoun "reitsema"]), - ("pascu", Pnoun, [TERMPH_VAL $ make_pnoun "pascu"]), - ("seidelmann", Pnoun, [TERMPH_VAL $ make_pnoun "seidelmann"]), - ("baum", Pnoun, [TERMPH_VAL $ make_pnoun "baum"]), - ("currie", Pnoun, [TERMPH_VAL $ make_pnoun "currie"]), - ("showalter", Pnoun, [TERMPH_VAL $ make_pnoun "showalter"]), - ("scholl", Pnoun, [TERMPH_VAL $ make_pnoun "scholl"]), - ("holman", Pnoun, [TERMPH_VAL $ make_pnoun "holman"]), - ("marsden", Pnoun, [TERMPH_VAL $ make_pnoun "marsden"]), - ("burns", Pnoun, [TERMPH_VAL $ make_pnoun "burns"]), - ("milisavljevic", Pnoun, [TERMPH_VAL $ make_pnoun "milisavljevic"]), - ("grav", Pnoun, [TERMPH_VAL $ make_pnoun "grav"]), - ("karkoschka", Pnoun, [TERMPH_VAL $ make_pnoun "karkoschka"]), - ("lissauer", Pnoun, [TERMPH_VAL $ make_pnoun "lissauer"]), - ("fraser", Pnoun, [TERMPH_VAL $ make_pnoun "fraser"]), - ("christy", Pnoun, [TERMPH_VAL $ make_pnoun "christy"]), - ("weaver", Pnoun, [TERMPH_VAL $ make_pnoun "weaver"]), - ("stern", Pnoun, [TERMPH_VAL $ make_pnoun "stern"]), - ("mutchler", Pnoun, [TERMPH_VAL $ make_pnoun "mutchler"]), - ("steffl", Pnoun, [TERMPH_VAL $ make_pnoun "steffl"]), - ("buie", Pnoun, [TERMPH_VAL $ make_pnoun "buie"]), - ("merline", Pnoun, [TERMPH_VAL $ make_pnoun "merline"]), - ("spencer", Pnoun, [TERMPH_VAL $ make_pnoun "spencer"]), - ("young_e_f", Pnoun, [TERMPH_VAL $ make_pnoun "young_e_f"]), - ("young_l_a", Pnoun, [TERMPH_VAL $ make_pnoun "young_l_a"]), - ("hamilton", Pnoun, [TERMPH_VAL $ make_pnoun "hamilton"]), - ("soummer", Pnoun, [TERMPH_VAL $ make_pnoun "soummer"]), - ("throop", Pnoun, [TERMPH_VAL $ make_pnoun "throop"]), - --Begin new spacecraft stuff-- - ("spacecraft", Cnoun, [NOUNCLA_VAL spacecraft]), - ("spacecrafts", Cnoun, [NOUNCLA_VAL spacecraft]), - ("voyager_1", Pnoun, [TERMPH_VAL $ make_pnoun "voyager_1"]), - ("voyager_2", Pnoun, [TERMPH_VAL $ make_pnoun "voyager_2"]), - ("cassini", Pnoun, [TERMPH_VAL $ make_pnoun "voyager_2"]), - --Begin new places stuff-- - ("place", Cnoun, [NOUNCLA_VAL place]), - ("places", Cnoun, [NOUNCLA_VAL place]), - ("mt_hopkins", Pnoun, [TERMPH_VAL $ make_pnoun "mt_hopkins"]), - ("fort_davis", Pnoun, [TERMPH_VAL $ make_pnoun "fort_davis"]), - ("cerro_tololo", Pnoun, [TERMPH_VAL $ make_pnoun "cerro_tololo"]), - ("us_naval_observatory", Pnoun, [TERMPH_VAL $ make_pnoun "us_naval_observatory"]), - ("padua", Pnoun, [TERMPH_VAL $ make_pnoun "padua"]), - ("mt_hamilton", Pnoun, [TERMPH_VAL $ make_pnoun "mt_hamilton"]), - ("greenwich", Pnoun, [TERMPH_VAL $ make_pnoun "greenwich"]), - ("mt_wilson", Pnoun, [TERMPH_VAL $ make_pnoun "mt_wilson"]), - ("mt_palomar", Pnoun, [TERMPH_VAL $ make_pnoun "mt_palomar"]), - ("kitt_peak", Pnoun, [TERMPH_VAL $ make_pnoun "kitt_peak"]), - ("mauna_kea", Pnoun, [TERMPH_VAL $ make_pnoun "mauna_kea"]), - ("slough", Pnoun, [TERMPH_VAL $ make_pnoun "slough"]), - ("paris", Pnoun, [TERMPH_VAL $ make_pnoun "paris"]), - ("the_hague", Pnoun, [TERMPH_VAL $ make_pnoun "the_hague"]), - ("cambridge", Pnoun, [TERMPH_VAL $ make_pnoun "cambridge"]), - ("liverpool", Pnoun, [TERMPH_VAL $ make_pnoun "liverpool"]), - ("arequipa", Pnoun, [TERMPH_VAL $ make_pnoun "arequipa"]), - ("pic_du_midi", Pnoun, [TERMPH_VAL $ make_pnoun "pic_du_midi"]), - ("flagstaff", Pnoun, [TERMPH_VAL $ make_pnoun "flagstaff"]), - ("la_silla", Pnoun, [TERMPH_VAL $ make_pnoun "la_silla"]), - --Begin new moons stuff-- - ("himalia", Pnoun, [TERMPH_VAL $ make_pnoun "himalia"]), - ("elara", Pnoun, [TERMPH_VAL $ make_pnoun "elara"]), - ("pasiphae", Pnoun, [TERMPH_VAL $ make_pnoun "pasiphae"]), - ("sinope", Pnoun, [TERMPH_VAL $ make_pnoun "sinope"]), - ("lysithea", Pnoun, [TERMPH_VAL $ make_pnoun "lysithea"]), - ("carme", Pnoun, [TERMPH_VAL $ make_pnoun "carme"]), - ("ananke", Pnoun, [TERMPH_VAL $ make_pnoun "ananke"]), - ("leda", Pnoun, [TERMPH_VAL $ make_pnoun "leda"]), - ("thebe", Pnoun, [TERMPH_VAL $ make_pnoun "thebe"]), - ("adrastea", Pnoun, [TERMPH_VAL $ make_pnoun "adrastea"]), - ("metis", Pnoun, [TERMPH_VAL $ make_pnoun "metis"]), - ("callirrhoe", Pnoun, [TERMPH_VAL $ make_pnoun "callirrhoe"]), - ("themisto", Pnoun, [TERMPH_VAL $ make_pnoun "themisto"]), - ("megaclite", Pnoun, [TERMPH_VAL $ make_pnoun "megaclite"]), - ("taygete", Pnoun, [TERMPH_VAL $ make_pnoun "taygete"]), - ("chaldene", Pnoun, [TERMPH_VAL $ make_pnoun "chaldene"]), - ("harpalyke", Pnoun, [TERMPH_VAL $ make_pnoun "harpalyke"]), - ("kalyke", Pnoun, [TERMPH_VAL $ make_pnoun "kalyke"]), - ("iocaste", Pnoun, [TERMPH_VAL $ make_pnoun "iocaste"]), - ("erinome", Pnoun, [TERMPH_VAL $ make_pnoun "erinome"]), - ("isonoe", Pnoun, [TERMPH_VAL $ make_pnoun "isonoe"]), - ("praxidike", Pnoun, [TERMPH_VAL $ make_pnoun "praxidike"]), - ("autonoe", Pnoun, [TERMPH_VAL $ make_pnoun "autonoe"]), - ("thyone", Pnoun, [TERMPH_VAL $ make_pnoun "thyone"]), - ("hermippe", Pnoun, [TERMPH_VAL $ make_pnoun "hermippe"]), - ("aitne", Pnoun, [TERMPH_VAL $ make_pnoun "aitne"]), - ("eurydome", Pnoun, [TERMPH_VAL $ make_pnoun "eurydome"]), - ("euanthe", Pnoun, [TERMPH_VAL $ make_pnoun "euanthe"]), - ("euporie", Pnoun, [TERMPH_VAL $ make_pnoun "euporie"]), - ("orthosie", Pnoun, [TERMPH_VAL $ make_pnoun "orthosie"]), - ("sponde", Pnoun, [TERMPH_VAL $ make_pnoun "sponde"]), - ("kale", Pnoun, [TERMPH_VAL $ make_pnoun "kale"]), - ("pasithee", Pnoun, [TERMPH_VAL $ make_pnoun "pasithee"]), - ("hegemone", Pnoun, [TERMPH_VAL $ make_pnoun "hegemone"]), - ("mneme", Pnoun, [TERMPH_VAL $ make_pnoun "mneme"]), - ("aoede", Pnoun, [TERMPH_VAL $ make_pnoun "aoede"]), - ("thelxinoe", Pnoun, [TERMPH_VAL $ make_pnoun "thelxinoe"]), - ("arche", Pnoun, [TERMPH_VAL $ make_pnoun "arche"]), - ("kallichore", Pnoun, [TERMPH_VAL $ make_pnoun "kallichore"]), - ("helike", Pnoun, [TERMPH_VAL $ make_pnoun "helike"]), - ("carpo", Pnoun, [TERMPH_VAL $ make_pnoun "carpo"]), - ("eukelade", Pnoun, [TERMPH_VAL $ make_pnoun "eukelade"]), - ("cyllene", Pnoun, [TERMPH_VAL $ make_pnoun "cyllene"]), - ("kore", Pnoun, [TERMPH_VAL $ make_pnoun "kore"]), - ("herse", Pnoun, [TERMPH_VAL $ make_pnoun "herse"]), - ("epimetheus", Pnoun, [TERMPH_VAL $ make_pnoun "epimetheus"]), - ("helene", Pnoun, [TERMPH_VAL $ make_pnoun "helene"]), - ("telesto", Pnoun, [TERMPH_VAL $ make_pnoun "telesto"]), - ("calypso", Pnoun, [TERMPH_VAL $ make_pnoun "calypso"]), - ("atlas", Pnoun, [TERMPH_VAL $ make_pnoun "atlas"]), - ("prometheus", Pnoun, [TERMPH_VAL $ make_pnoun "prometheus"]), - ("pandora", Pnoun, [TERMPH_VAL $ make_pnoun "pandora"]), - ("pan", Pnoun, [TERMPH_VAL $ make_pnoun "pan"]), - ("ymir", Pnoun, [TERMPH_VAL $ make_pnoun "ymir"]), - ("paaliaq", Pnoun, [TERMPH_VAL $ make_pnoun "paaliaq"]), - ("tarvos", Pnoun, [TERMPH_VAL $ make_pnoun "tarvos"]), - ("ijiraq", Pnoun, [TERMPH_VAL $ make_pnoun "ijiraq"]), - ("suttungr", Pnoun, [TERMPH_VAL $ make_pnoun "suttungr"]), - ("kiviuq", Pnoun, [TERMPH_VAL $ make_pnoun "kiviuq"]), - ("mundilfari", Pnoun, [TERMPH_VAL $ make_pnoun "mundilfari"]), - ("albiorix", Pnoun, [TERMPH_VAL $ make_pnoun "albiorix"]), - ("skathi", Pnoun, [TERMPH_VAL $ make_pnoun "skathi"]), - ("erriapus", Pnoun, [TERMPH_VAL $ make_pnoun "erriapus"]), - ("siarnaq", Pnoun, [TERMPH_VAL $ make_pnoun "siarnaq"]), - ("thrymr", Pnoun, [TERMPH_VAL $ make_pnoun "thrymr"]), - ("narvi", Pnoun, [TERMPH_VAL $ make_pnoun "narvi"]), - ("methone", Pnoun, [TERMPH_VAL $ make_pnoun "methone"]), - ("pallene", Pnoun, [TERMPH_VAL $ make_pnoun "pallene"]), - ("polydeuces", Pnoun, [TERMPH_VAL $ make_pnoun "polydeuces"]), - ("daphnis", Pnoun, [TERMPH_VAL $ make_pnoun "daphnis"]), - ("aegir", Pnoun, [TERMPH_VAL $ make_pnoun "aegir"]), - ("bebhionn", Pnoun, [TERMPH_VAL $ make_pnoun "bebhionn"]), - ("bergelmir", Pnoun, [TERMPH_VAL $ make_pnoun "bergelmir"]), - ("bestla", Pnoun, [TERMPH_VAL $ make_pnoun "bestla"]), - ("farbauti", Pnoun, [TERMPH_VAL $ make_pnoun "farbauti"]), - ("fenrir", Pnoun, [TERMPH_VAL $ make_pnoun "fenrir"]), - ("fornjot", Pnoun, [TERMPH_VAL $ make_pnoun "fornjot"]), - ("hati", Pnoun, [TERMPH_VAL $ make_pnoun "hati"]), - ("hyrrokkin", Pnoun, [TERMPH_VAL $ make_pnoun "hyrrokkin"]), - ("kari", Pnoun, [TERMPH_VAL $ make_pnoun "kari"]), - ("loge", Pnoun, [TERMPH_VAL $ make_pnoun "loge"]), - ("skoll", Pnoun, [TERMPH_VAL $ make_pnoun "skoll"]), - ("surtur", Pnoun, [TERMPH_VAL $ make_pnoun "surtur"]), - ("anthe", Pnoun, [TERMPH_VAL $ make_pnoun "anthe"]), - ("jarnsaxa", Pnoun, [TERMPH_VAL $ make_pnoun "jarnsaxa"]), - ("greip", Pnoun, [TERMPH_VAL $ make_pnoun "greip"]), - ("tarqeq", Pnoun, [TERMPH_VAL $ make_pnoun "tarqeq"]), - ("aegaeon", Pnoun, [TERMPH_VAL $ make_pnoun "aegaeon"]), - ("cordelia", Pnoun, [TERMPH_VAL $ make_pnoun "cordelia"]), - ("ophelia", Pnoun, [TERMPH_VAL $ make_pnoun "ophelia"]), - ("bianca", Pnoun, [TERMPH_VAL $ make_pnoun "bianca"]), - ("cressida", Pnoun, [TERMPH_VAL $ make_pnoun "cressida"]), - ("desdemona", Pnoun, [TERMPH_VAL $ make_pnoun "desdemona"]), - ("juliet", Pnoun, [TERMPH_VAL $ make_pnoun "juliet"]), - ("portia", Pnoun, [TERMPH_VAL $ make_pnoun "portia"]), - ("rosalind", Pnoun, [TERMPH_VAL $ make_pnoun "rosalind"]), - ("belinda", Pnoun, [TERMPH_VAL $ make_pnoun "belinda"]), - ("puck", Pnoun, [TERMPH_VAL $ make_pnoun "puck"]), - ("caliban", Pnoun, [TERMPH_VAL $ make_pnoun "caliban"]), - ("sycorax", Pnoun, [TERMPH_VAL $ make_pnoun "sycorax"]), - ("prospero", Pnoun, [TERMPH_VAL $ make_pnoun "prospero"]), - ("setebos", Pnoun, [TERMPH_VAL $ make_pnoun "setebos"]), - ("stephano", Pnoun, [TERMPH_VAL $ make_pnoun "stephano"]), - ("trinculo", Pnoun, [TERMPH_VAL $ make_pnoun "trinculo"]), - ("francisco", Pnoun, [TERMPH_VAL $ make_pnoun "francisco"]), - ("margaret", Pnoun, [TERMPH_VAL $ make_pnoun "margaret"]), - ("ferdinand", Pnoun, [TERMPH_VAL $ make_pnoun "ferdinand"]), - ("perdita", Pnoun, [TERMPH_VAL $ make_pnoun "perdita"]), - ("mab", Pnoun, [TERMPH_VAL $ make_pnoun "mab"]), - ("cupid", Pnoun, [TERMPH_VAL $ make_pnoun "cupid"]), - ("triton", Pnoun, [TERMPH_VAL $ make_pnoun "triton"]), - ("naiad", Pnoun, [TERMPH_VAL $ make_pnoun "naiad"]), - ("thalassa", Pnoun, [TERMPH_VAL $ make_pnoun "thalassa"]), - ("despina", Pnoun, [TERMPH_VAL $ make_pnoun "despina"]), - ("galatea", Pnoun, [TERMPH_VAL $ make_pnoun "galatea"]), - ("larissa", Pnoun, [TERMPH_VAL $ make_pnoun "larissa"]), - ("proteus", Pnoun, [TERMPH_VAL $ make_pnoun "proteus"]), - ("halimede", Pnoun, [TERMPH_VAL $ make_pnoun "halimede"]), - ("psamathe", Pnoun, [TERMPH_VAL $ make_pnoun "psamathe"]), - ("sao", Pnoun, [TERMPH_VAL $ make_pnoun "sao"]), - ("laomedeia", Pnoun, [TERMPH_VAL $ make_pnoun "laomedeia"]), - ("neso", Pnoun, [TERMPH_VAL $ make_pnoun "neso"]), - ("nix", Pnoun, [TERMPH_VAL $ make_pnoun "nix"]), - ("hydra", Pnoun, [TERMPH_VAL $ make_pnoun "hydra"]), - ("kerberos", Pnoun, [TERMPH_VAL $ make_pnoun "kerberos"]), - ("styx", Pnoun, [TERMPH_VAL $ make_pnoun "styx"]) - - ] ++ list_of_years - -{-Major hack: Since the basic unit that the parser understands is strings (not characters), we have to manually add all years that we can query into the dictionary... -That is, we can't make the parser understand "1984" and "1245" by having it recognize four numbers, instead it must recognize the entire string of numbers at once -as a terminal (i.e., "1984" would be a terminal, not a non-terminal composed of "1", "9", "8", and "4"). Therefore, all possible strings must be added to the dictionary so that the parser can match them. - -**this might need to be altered** --} - -list_of_years = map (\n -> (show n, Year, [YEAR_VAL n])) $ concat [[1000 + x, 2000 + x] | x <- [0..999]] - ---test1 p p_ inp = do putStr $ render80 $ format{-Atts p_-} $ snd $ unState (p T0 [] ((1,[]),words inp) ([],[])) [] -test p input = unState (p ((1,[]),input) ([],[])) [] - - - -main i = formatAttsFinalAlt Question ((length (words i))+1) $ snd $ test (question T0 []) (words i) - -findStart st ((s,ss):rest) | s == st = [(s,ss)] - | otherwise = findStart st rest -findStart st [] = [] - -input = words i1 - -i1 = "which moons that were discovered by hall orbit mars" -- OK -i2 = "who discovered a moon that orbits mars" -- OK -i3 = "did hall discover every moon that orbits mars" -- OK -i4 = "how many moons were discovered by hall and kuiper" -- OK -i5 = "how many moons were discovered by hall or kuiper" -- OK -i6 = "every moon was discovered by a person" -- OK -i7 = "which planets are orbited by a moon that was discovered by galileo" -- OK -i8 = "which moons were discovered by nobody" -- OK -i9 = "is every planet orbited by a moon" -- Broken in original too -i10 = "which planets are orbited by two moons" -- OK -i11 = "who was the discoverer of phobos" -- Broken in original too -i12 = "hall discovered a moon that orbits mars" -- OK -i13 = "which moons that orbit mars were discovered by hall" -- OK -i14 = "every moon orbits every planet" -- OK -i15 = "every planet is orbited by a moon" -- OK -i16 = "a planet is orbited by a moon" -- OK -i17 = "does phobos orbit mars" -- OK --- -i18 = "did hall discover deimos or phobos and miranda" -- Broken in original too -i19 = "did hall discover deimos or phobos and miranda or deimos and deimos" -- Broken in original too +{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE Trustworthy #-}+module SolarmanTriplestore where++import Prelude hiding ((*>))+import Getts+import Data.List as List+import qualified Data.Set as Set+import AGParser2+import TypeAg2+import Control.Monad+import Debug.Trace+import qualified LocalData as Local++--change between remoteData and localData+--dataStore = Local.localData+dataStore = remoteData -- selects database++endpoint_uri = "http://speechweb2.cs.uwindsor.ca/sparql"+namespace_uri = "http://solarman.richard.myweb.cs.uwindsor.ca#"+remoteData = SPARQL endpoint_uri namespace_uri+ +--copied from gangster_v4: utility functions for making lists unique+subset s t = (s \\ t) == []++makeset x = Set.toList $ Set.fromList x+ +--copied from gangster_v4: combinators+termor tmph1 tmph2 ents =+ liftM List.nub $ liftM2 (++) (tmph1 ents) (tmph2 ents) --TODO: MERGE IMAGES PROPER++termand tmph1 tmph2 ents = do+ t1 <- tmph1 ents+ t2 <- tmph2 ents+ if t1 /= [] && t2 /= [] then return $ List.nub $ t1 ++ t2 else return []+ --May need to be changed to intersection? Don't think so: can't remove anything from nub (t1++t2) because all things are relevant to either t1 or t2+ --TODO: MERGE IMAGES PROPER (or do termphrases always preserve ents)++intersect_entevimages eei1 eei2 + = [(subj2, evs2) | (subj1, evs1) <- eei1, (subj2, evs2) <- eei2, subj1 == subj2]+ +that = nounand++nounand = liftM2 intersect_entevimages++nounor' s t = List.nub(s ++ t)+nounor = liftM2 nounor'+ +{-a' nph vbph =+ length (intersect nph vbph) /= 0-}+a = liftM2 intersect_entevimages +any' = a+the = a+some = a+an = a++every' nph vbph | subset (map fst nph) (map fst vbph) = intersect_entevimages nph vbph+ | otherwise = []++every = liftM2 every'++{- TODO: +no' nph vbph =+ length (intersect nph vbph) == 0+no = liftM2 no'+-}+ +{- TODO:+none' nph vbph =+ no nph vbph+none = liftM2 none'+-}+ +one' nph vbph | length (res) == 1 = res+ | otherwise = []+ where+ res = intersect_entevimages nph vbph+ +one = liftM2 one'++two' nph vbph | length (res) == 2 = res+ | otherwise = []+ where+ res = intersect_entevimages nph vbph+ +two = liftM2 two'+ ++--which nph vbph = if result /= [] then result else "none."+-- where result = unwords $ intersect nph vbph++which nph vbph = do+ nph_ <- nph+ vbph_ <- vbph+ let result = unwords $ map fst $ intersect_entevimages nph_ vbph_+ return $ if result /= [] then result else "none."+ +how_many' nph vbph =+ show $ length (intersect_entevimages nph vbph)+how_many = liftM2 how_many'++who = which ((get_members dataStore "person") `nounor` (get_members dataStore "science_team"))++--New+what' nph = if result /= [] then result else "nothing."+ where result = unwords $ map fst nph+what = liftM what'++with :: (IO Image -> IO Image) -> ([String], IO Image -> IO Image)+with tmph = (["with_implement"], tmph)++by tmph = (["subject"], tmph)++at tmph = (["location"], tmph)++in' tmph = (["location", "year"], make_pnoun $ show tmph)++make_pnoun noun = liftM $ make_pnoun' noun+make_pnoun' noun image = [(subj, evs) | (subj, evs) <- image, subj == noun]++--New for new new semantics++--TODO: Handle case where nothing is in props (return none)+make_prop_termphrase prop nph = do+ list <- nph+ props <- mapM (\(_,y) -> getts_inverse dataStore prop y >>= \loc -> return (map fst loc)) list+ let finalList = unwords $ List.nub $ concat props+ return $ if finalList /= [] then finalList else "nothing."++where' = make_prop_termphrase "location"+when' = make_prop_termphrase "year"+how' = make_prop_termphrase "with_implement"+whatobj = make_prop_termphrase "object"+++--end of copied from gangster_v4++{-+sun = get_members dataStore ("sun")+planet = get_members dataStore ("planet")+moon = get_members dataStore ("moon")+person = get_members dataStore ("person")+thing = get_members dataStore ("thing")+telescope = get_members dataStore ("telescope")+science_team = get_members dataStore ("science_team")+spacecraft = get_members dataStore ("spacecraft")+place = get_members dataStore ("place")++atmospheric = get_members dataStore ("atmospheric")+blue = get_members dataStore ("blue")+depressed = get_members dataStore ("depressed")+solid = get_members dataStore ("solid")+brown = get_members dataStore ("brown")+gaseous = get_members dataStore ("gaseous")+green = get_members dataStore ("green")+red = get_members dataStore ("red")+ringed = get_members dataStore ("ringed")+vacuumous = get_members dataStore ("vacuumous")+exists = thing+spin = get_members dataStore ("spin")+-}+++{-+discover_intrans = get_subjs_of_event_type dataStore ("discover_ev")+orbit_intrans = get_subjs_of_event_type dataStore ("orbit_ev")+-}++{-discover = make_relation "discover_ev" +discovered = discover++orbit = make_relation "orbit_ev" +orbited = orbit-}++--For prepositional phrases+{-discover' = make_relation "discover_ev"+discovered' = discover'++orbit' = make_relation "orbit_ev" +orbited' = orbit'-}++{-hall = make_pnoun "hall"+phobos = make_pnoun "phobos"+mars = make_pnoun "mars"+refractor_telescope_1 = make_pnoun "refractor_telescope_1"+-}++make_relation ev_type tmph = make_filtered_relation dataStore ev_type [(["object"],tmph)]++ +{-make_inverted_relation :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> IO [String]+make_inverted_relation ev_data rel tmph = do+ images <- make_image ev_data rel "object"+ objPairs <- filterM (\(_, evs) ->+ tmph $ liftM concat $ mapM (\ev -> getts_3 ev_data (ev, "subject", "?")) evs) images+ return $ map fst objPairs-}+ +--Prepositional filtering++--filter_ev takes a list of ([String], IO [String] -> IO Bool) where the [String] is the list of identifiers corresponding+--to the data the preposition predicate needs to evaluate (e.g., for location predicates the list will contain "location",+{-filter_ev :: (TripleStore m) => m -> [([String], IO [String] -> IO Bool)] -> Event -> IO Bool+filter_ev ev_data [] ev = return True+filter_ev ev_data ((names,pred):list) ev = do+ relevant_list <- mapM (\name -> getts_3 ev_data (ev, name, "?")) names+ res <- pred $ return $ concat relevant_list+ if res then filter_ev ev_data list ev else return False-}+ +--Modified filter_ev to accommodate predicates like every, one, two, etc...+--The difference is that it concatenates the data the preposition predicate needs to evaluate across all events and+--applies the preposition predicate to that, so that all data is available to the predicate rather than just the subset+--given by a specific event+--TODO: new filter_Ev+{-filter_ev :: (TripleStore m) => m -> [([String], IO Image -> IO Image)] -> [Event] -> IO Bool+filter_ev _ [] _ = return True+filter_ev ev_data ((names,pred):list) evs = do+ relevant_list <- mapM (\name -> getts_inverse ev_data name evs) names+ res <- pred $ return $ concat $ relevant_list+ if res /= [] then filter_ev ev_data list evs else return False-}+ +--new filter_ev: Handles prepositional phrases (IN TESTING)+filter_ev :: (TripleStore m) => m -> [([String], IO Image -> IO Image)] -> [Event] -> IO Bool+filter_ev _ [] _ = return True+filter_ev ev_data ((names,pred):list) evs = do+ relevant_list <- mapM (\name -> getts_inverse ev_data name evs) names+ res <- pred $ return $ concat $ relevant_list+ --NEW: Merge all events in predicate result for new query. Result will be a subset of evs.+ let relevant_evs = List.nub $ concatMap snd res + if res /= [] then filter_ev ev_data list relevant_evs else return False++{-make_filtered_relation :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> [([String], IO [String] -> IO Bool)] -> IO [String]+make_filtered_relation ev_data rel tmph preps = do+ images <- make_image ev_data rel "subject"+ subPairs <- filterM (\(_, evs) -> do+ filtEvents <- filterM (filter_ev ev_data preps) evs+ tmph $ liftM concat $ mapM (\ev -> getts_3 ev_data (ev, "object", "?")) filtEvents) images+ return $ map fst subPairs-}+ +--Modified version of make_filtered_relation to accomodate new filter_ev+make_filtered_relation :: (TripleStore m) => m -> String -> [([String], IO Image -> IO Image)] -> IO Image+make_filtered_relation ev_data rel preps = do+ images <- make_image ev_data rel "subject"+ filterM (\(_, evs) -> filter_ev ev_data preps evs) images+ +{-make_inverted_filtered_relation :: (TripleStore m) => m -> String -> [([String], IO [String] -> IO Bool)] -> IO [String]+make_inverted_filtered_relation ev_data rel preps = do+ images <- make_image ev_data rel "object"+ objPairs <- filterM (\(_, evs) -> anyM (filter_ev ev_data preps) evs) images+ return $ map fst objPairs+ where+ anyM :: (Monad m) => (a -> m Bool) -> [a] -> m Bool+ anyM pred lst = foldM (\x y -> pred y >>= \res -> return $ x || res) False lst -}++--Modified version of make_inverted_filtered_relation to accomodate new filter_ev+make_inverted_filtered_relation :: (TripleStore m) => m -> String -> [([String], IO Image -> IO Image)] -> IO Image+make_inverted_filtered_relation ev_data rel preps = do+ images <- make_image ev_data rel "object"+ filterM (\(_, evs) -> filter_ev ev_data preps evs) images++--Copied from old solarman:+yesno' x = if x /= [] then "yes." else "no"+yesno = liftM yesno'++does = yesno+did = yesno+do' = yesno+was = yesno+is = yesno+were = yesno+are = yesno++--TODO: is this proper? +sand s1 s2 = do+ r1 <- s1+ r2 <- s2+ return $ if r1 /= [] && r2 /= [] then List.nub $ r1 ++ r2 else []++{-+||-----------------------------------------------------------------------------+|| BASIC INTERPRETERS+||-----------------------------------------------------------------------------+-}+++pnoun = pre_processed Pnoun+cnoun = pre_processed Cnoun+adj = pre_processed Adj+det = pre_processed Det+intransvb = pre_processed Intransvb+transvb = pre_processed Transvb+linkingvb = pre_processed Linkingvb+relpron = pre_processed Relpron+termphjoin = pre_processed Termphjoin+verbphjoin = pre_processed Verbphjoin+nounjoin = pre_processed Nounjoin+indefpron = pre_processed Indefpron+{-+terminator = uninterpreted (SPECIAL_SYMBOL_TERM ".")+ $orelse+ uninterpreted (SPECIAL_SYMBOL_TERM "?")+ $orelse+ uninterpreted (SPECIAL_SYMBOL_TERM "\n")+-}+sentjoin = pre_processed Sentjoin+quest1 = pre_processed Quest1+quest2 = pre_processed Quest2+quest3 = pre_processed Quest3+quest4a = pre_processed Quest4a+quest4b = pre_processed Quest4b+quest5 = pre_processed Quest5+quest6 = pre_processed Quest6++--NEW FOR PREPOSITIONAL PHRASES+prep = pre_processed Prepn+year = pre_processed Year+++pre_processed key + = let formAlts altTerminals = memoize key (altTerminals) + formTerminal [x] = x+ formTerminal (x:xs) = x <|> formTerminal xs+ list_of_ters = [ terminal (term a) z + | (a,b,z) <- dictionary+ , b == key]+ in formAlts (formTerminal list_of_ters)+++meaning_of p dInp key+ = let dInput = words dInp+ appParser = unState (p T0 [] ((1,[]), dInput) ([],[])) [] + upperBound = (length dInput) + 1+ in formFinal key upperBound (snd $ appParser) ++meaning_of_ p dInp key+ = let dInput = words dInp+ appParser = unState (p T0 [] ((1,[]), dInput) ([],[])) [] + upperBound = (length dInput) + 1+ in (snd $ appParser) ++formAtts key ePoint t + = concat $ concat $ concat $ concat + [[[[ val1 |(id1,val1)<-synAtts]+ |(((st,inAtt2),(end,synAtts)), ts)<-rs, st == 1 && end == ePoint] + |((i,inAt1),((cs,ct),rs)) <- sr ]+ |(s,sr) <- t, s == key ]+formFinal key ePoint t + = concat $ concat $ concat $ concat + [[[[ val1 |(id1,val1)<-synAtts]+ |(((st,inAtt2),(end,synAtts)), ts)<-rs, st == 1 && end == ePoint] + |((i,inAt1),((cs,ct),rs)) <- sr ]+ |(s,sr) <- t, s == key ] +{-+test p = unState (p ((1,[]),input) ([],[])) [] ++main = do putStr $ render80 $ formatAtts Question $ snd $ test (question T0 [])++type Start1 = (Int, InsAttVals)+type Start = ((Int,InsAttVals), [String])+type End = (Int, InsAttVals)+type Atts = [AttValue] -- [(AttType, AttValue)]+type InsAttVals = [(Instance, Atts)]+++ ,[(Start1,(Context,Result))]+type Mtable = [(MemoL+ )+ ] +type Result = [((Start1, End),[Tree MemoL])]+||-----------------------------------------------------------------------------+|| THE ATTRIBUTE GRAMMAR+||-----------------------------------------------------------------------------+-}++-- public <snouncla> = <cnoun> | <adjs> <cnoun>;+snouncla + = memoize Snouncla+ (parser+ (nt cnoun S3) + [rule_s NOUNCLA_VAL OF LHS ISEQUALTO copy [synthesized NOUNCLA_VAL OF S3]]+ <|>+ parser (nt adjs S1 *> nt cnoun S2)+ [rule_s NOUNCLA_VAL OF LHS ISEQUALTO intrsct1 [synthesized ADJ_VAL OF S1,+ synthesized NOUNCLA_VAL OF S2]]+ + )++-------------------------------------------------------------------------------+-- public <relnouncla> = <snouncla> <relpron> <joinvbph> | <snouncla>;+relnouncla + = memoize Relnouncla+ (parser + (nt snouncla S1 *> nt relpron S2 *> nt joinvbph S3)+ [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_middle1[synthesized NOUNCLA_VAL OF S1,+ synthesized RELPRON_VAL OF S2,+ synthesized VERBPH_VAL OF S3]]+ <|> + parser+ (nt snouncla S4)+ [rule_s NOUNCLA_VAL OF LHS ISEQUALTO copy [synthesized NOUNCLA_VAL OF S4]]+ )+----------------------------------------------------------------------------+++-- public <nouncla> = <relnouncla> <nounjoin> <nouncla> | <relnouncla> <relpron> <linkingvb> <nouncla> | <relnouncla>;+nouncla + = memoize Nouncla + (parser (nt relnouncla S1 *> nt nounjoin S2 *> nt nouncla S3)+ [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_middle2 [synthesized NOUNCLA_VAL OF S1,+ synthesized NOUNJOIN_VAL OF S2,+ synthesized NOUNCLA_VAL OF S3]]+ <|>+ parser (nt relnouncla S1 *> nt relpron S2 *> nt linkingvb S3 *> nt nouncla S4) --Does this make sense? Allows us to ask "which moon that was discovered by hall that is moon orbits mars"+ [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_middle3 [synthesized NOUNCLA_VAL OF S1,+ synthesized RELPRON_VAL OF S2,+ synthesized NOUNCLA_VAL OF S4]]+ <|>+ parser (nt relnouncla S1)+ [rule_s NOUNCLA_VAL OF LHS ISEQUALTO copy [synthesized NOUNCLA_VAL OF S1]]+ )++------------------------------------------------------------------------------+-- public <adjs> = <adj> <adjs> | <adj>;+adjs + = memoize Adjs + (parser (nt adj S1 *> nt adjs S2)+ [rule_s ADJ_VAL OF LHS ISEQUALTO intrsct2 [synthesized ADJ_VAL OF S1,+ synthesized ADJ_VAL OF S2]]+ <|>+ parser (nt adj S3)+ [rule_s ADJ_VAL OF LHS ISEQUALTO copy [synthesized ADJ_VAL OF S3]]+ )+------------------------------------------------------------------------------+-- public <detph> = <indefpron> | <det> <nouncla>;+detph + = memoize Detph+ (parser (nt indefpron S3)+ [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S3]]+ <|>+ parser (nt det S1 *> nt nouncla S2)+ [rule_s TERMPH_VAL OF LHS ISEQUALTO applydet [synthesized DET_VAL OF S1,+ synthesized NOUNCLA_VAL OF S2]]+ ) ++----------------------------------------------------------------------------------++{-+ public <transvbph> = <transvb>+ | <transvb> <preps>+ | <transvb> <jointermph>+ | <transvb> <jointermph> <preps>+ | <linkingvb> <jointermph> <transvb>+ | <linkingvb> <jointermph> <transvb> <preps>;+ -}++transvbph + = memoize Transvbph+ (parser (nt transvb S1) --"discovered"+ [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvb_no_tmph [synthesized VERB_VAL OF S1]]+ <|>+ parser (nt transvb S1 *> nt preps S2) --"discovered in..."+ [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvb_no_tmph [synthesized VERB_VAL OF S1,+ synthesized PREP_VAL OF S2]]+ <|>+ parser (nt transvb S1 *> nt jointermph S2) --"discovered phobos (and blah and blah and blah)"+ [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbprep [synthesized VERB_VAL OF S1,+ synthesized TERMPH_VAL OF S2]]+ <|>+ parser (nt transvb S1 *> nt jointermph S2 *> nt preps S3) --"discovered phobos in..."+ [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbprep [synthesized VERB_VAL OF S1,+ synthesized TERMPH_VAL OF S2,+ synthesized PREP_VAL OF S3]]+ <|>+ parser (nt linkingvb S1 *> nt transvb S2) --"was discovered"+ [rule_s VERBPH_VAL OF LHS ISEQUALTO drop3rdprep [synthesized LINKINGVB_VAL OF S1,+ synthesized VERB_VAL OF S2]]+ <|>+ parser (nt linkingvb S1 *> nt transvb S2 *> nt preps S3) --"was discovered by hall in..."+ [rule_s VERBPH_VAL OF LHS ISEQUALTO drop3rdprep [synthesized LINKINGVB_VAL OF S1,+ synthesized VERB_VAL OF S2,+ synthesized PREP_VAL OF S3]]+ <|>+ parser (nt linkingvb S1 *> nt jointermph S2 *> nt transvb S3) --"was phobos discovered"+ [rule_s VERBPH_VAL OF LHS ISEQUALTO apply_quest_transvb_passive [synthesized LINKINGVB_VAL OF S1,+ synthesized TERMPH_VAL OF S2,+ synthesized VERB_VAL OF S3]]+ <|>+ parser (nt linkingvb S1 *> nt jointermph S2 *> nt transvb S3 *> nt preps S4) --"was phobos discovered in..."+ [rule_s VERBPH_VAL OF LHS ISEQUALTO apply_quest_transvb_passive [synthesized LINKINGVB_VAL OF S1,+ synthesized TERMPH_VAL OF S2,+ synthesized VERB_VAL OF S3,+ synthesized PREP_VAL OF S4]]+ )+ +----------------------------------------------------------------------------------+--NEW FOR PREPOSITIONAL PHRASES++-- public <preps> = <prepph> | <preph> <preps>;+preps+ = memoize Preps+ (parser (nt prepph S1)+ [rule_s PREP_VAL OF LHS ISEQUALTO applyprep [synthesized PREPPH_VAL OF S1]]+ <|>+ parser (nt prepph S1 *> nt preps S2)+ [rule_s PREP_VAL OF LHS ISEQUALTO applypreps [synthesized PREPPH_VAL OF S1,+ synthesized PREP_VAL OF S2]]+ )++-- public <prepph> = <prep> <jointermph>; +prepph+ = memoize Prepph+ (parser (nt prep S1 *> nt jointermph S2)+ [rule_s PREPPH_VAL OF LHS ISEQUALTO applyprepph [synthesized PREPN_VAL OF S1,+ synthesized TERMPH_VAL OF S2]]+ )++----------------------------------------------------------------------------------++-- public <verbph> = <transvbph> | <intransvb> | <linkingvb> <det> <nouncla>;+verbph + = memoize Verbph+ (+ parser (nt transvbph S4)+ [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S4]]+ <|>+ parser (nt intransvb S5)+ [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S5]]+ <|>+ parser (nt linkingvb S1 *> nt det S2 *> nt nouncla S3)+ [rule_s VERBPH_VAL OF LHS ISEQUALTO applyvbph [synthesized NOUNCLA_VAL OF S3]]+ )+------------------------------------------------------------------------------------+-- public <termph> = <pnoun> | <detph> | <year>;+termph + = memoize Termph + (+ parser (nt pnoun S1) + [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S1]]+ <|> + parser (nt detph S2)+ [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S2]]+ <|>+ parser (nt year S3)+ [rule_s TERMPH_VAL OF LHS ISEQUALTO applyyear [synthesized YEAR_VAL OF S3]]+ )+ ++------------------------------------------------------------------------------------+-- public <jointermph> = <jointermph> <termphjoin> <jointermph> | <termph>;+jointermph + = memoize Jointermph + (+{- parser (nt jointermph S1 *> nt termphjoin S2 *> nt termph S3)+ [rule_s TERMPH_VAL OF LHS ISEQUALTO appjoin1 [synthesized TERMPH_VAL OF S1,+ synthesized TERMPHJOIN_VAL OF S2,+ synthesized TERMPH_VAL OF S3]]+ <|>+-}+ parser (nt jointermph S1 *> nt termphjoin S2 *> nt jointermph S3) --"hall and galileo discovered...?"+ [rule_s TERMPH_VAL OF LHS ISEQUALTO appjoin1 [synthesized TERMPH_VAL OF S1,+ synthesized TERMPHJOIN_VAL OF S2,+ synthesized TERMPH_VAL OF S3]]+ <|>+ parser (nt termph S4)+ [rule_s TERMPH_VAL OF LHS ISEQUALTO copy [synthesized TERMPH_VAL OF S4]]+ )+------------------------------------------------------------------------------------+-- public <joinvbph> = <verbph> <verbphjoin> <joinvbph> | <verbph>;+joinvbph + = memoize Joinvbph + (+ parser (nt verbph S1 *> nt verbphjoin S2 *> nt joinvbph S3)+ [rule_s VERBPH_VAL OF LHS ISEQUALTO appjoin2 [synthesized VERBPH_VAL OF S1,+ synthesized VBPHJOIN_VAL OF S2,+ synthesized VERBPH_VAL OF S3]]+ <|>+ parser (nt verbph S4)+ [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S4]]+ )+---------------------------------------------------------------------------+-- public <sent> = <jointermph> <joinvbph>;+sent + = memoize Sent+ (+ parser (nt jointermph S1 *> nt joinvbph S2)+ [rule_s SENT_VAL OF LHS ISEQUALTO apply_termphrase [synthesized TERMPH_VAL OF S1,+ synthesized VERBPH_VAL OF S2]]+ )+-- **************************************************************************** --+-- public <two_sent> = <sent> <sentjoin> <sent>;+two_sent + = memoize Two_sent+ (+ parser (nt sent S1 *> nt sentjoin S2 *> nt sent S3)+ [rule_s SENT_VAL OF LHS ISEQUALTO sent_val_comp [synthesized SENT_VAL OF S1,+ synthesized SENTJOIN_VAL OF S2,+ synthesized SENT_VAL OF S3]] + )+------------------------------------------------------------------------------------+{-+ public <question> = <quest1> <sent>+ | <quest6> <quest1> <sent>+ | <quest5> <quest1> <sent>+ | <quest2> <joinvbph>+ | <quest5> <joinvbph>+ | <quest3> <nouncla>+ | <quest3> <nouncla> <joinvbph>+ | <quest4> <nouncla> <joinvbph>+ | <two_sent>+ | <sent>;++-}+question + = memoize Question + (+ parser (nt quest1 S1 *> nt sent S2 )+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans1 [synthesized QUEST1_VAL OF S1,+ synthesized SENT_VAL OF S2]] + <|>+ parser (nt quest6 S1 *> nt quest1 S2 *> nt sent S3 )+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans5 [synthesized QUEST2_VAL OF S1,+ synthesized QUEST1_VAL OF S2,+ synthesized SENT_VAL OF S3]] + <|>+ parser (nt quest5 S1 *> nt quest1 S2 *> nt sent S3 )+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans5 [synthesized QUEST2_VAL OF S1,+ synthesized QUEST1_VAL OF S2,+ synthesized SENT_VAL OF S3]] + <|>+ parser (nt quest2 S1 *> nt joinvbph S2)+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans2 [synthesized QUEST2_VAL OF S1,+ synthesized VERBPH_VAL OF S2]] + <|>+ parser (nt quest5 S1 *> nt joinvbph S2)+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans2 [synthesized QUEST2_VAL OF S1,+ synthesized VERBPH_VAL OF S2]] + <|>+ parser (nt quest3 S1 *> nt nouncla S2 *> nt joinvbph S3)+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans3 [synthesized QUEST3_VAL OF S1,+ synthesized NOUNCLA_VAL OF S2,+ synthesized VERBPH_VAL OF S3]]+ <|>+ parser (nt quest4 S1 *> nt nouncla S2 *> nt joinvbph S3)+ [rule_s QUEST_VAL OF LHS ISEQUALTO ans3 [synthesized QUEST3_VAL OF S1,+ synthesized NOUNCLA_VAL OF S2,+ synthesized VERBPH_VAL OF S3]]+ <|>+ parser (nt two_sent S1)+ [rule_s QUEST_VAL OF LHS ISEQUALTO truefalse [synthesized SENT_VAL OF S1]] + <|>+ parser (nt sent S1)+ [rule_s QUEST_VAL OF LHS ISEQUALTO truefalse [synthesized SENT_VAL OF S1]]++ )++-- public <quest4> = <quest4a> <quest4b>;+quest4 = memoize Quest4 + (+ parser (nt quest4a S1 *> nt quest4b S2) + [rule_s QUEST3_VAL OF LHS ISEQUALTO copy [synthesized QUEST3_VAL OF S1]] + )+---------------------------------------------------------------------------------++query = memoize Query+ (+ parser (nt question S1) -- *> nt terminator S2)+ [rule_s QUEST_VAL OF LHS ISEQUALTO copy [synthesized QUEST_VAL OF S1]]+ )++++{-+|| -----------------------------------------------------------------------------+|| THE SEMANTICS - PART I : The attribute evaluation functions+||-----------------------------------------------------------------------------+applyBiOp [e1,op,e2] + = \atts -> VAL ((getAtts getB_OP atts op ) (getAtts getAVAL atts e1 ) (getAtts getAVAL atts e2))++-}+-- getAtts f (y,i) x = f (head (x y i))+-- copy [b] = \(atts,i) -> head (b atts i)++intrsct1 [x, y] + = \atts -> NOUNCLA_VAL (liftM2 intersect_entevimages (getAtts getAVALS atts x) (getAtts getAVALS atts y))++intrsct2 [x, y] + = \atts -> ADJ_VAL (liftM2 intersect_entevimages (getAtts getAVALS atts x) (getAtts getAVALS atts y))++applydet [x, y] + = \atts -> TERMPH_VAL $ (getAtts getDVAL atts x) (getAtts getAVALS atts y)+ +--make_trans_vb is very similar to make_relation. getBR must mean "get binary relation"+--getTVAL must mean "get predicate" i.e. what would be "phobos" in "discover phobos"+--Changed to get rid of make_trans_vb, since the getBR attribute was changed to not +--be a binary relation but instead a function that make_relation would give+--I.e., the kind of function that make_trans_vb would have generated, since they were+--nearly identical++--NEW FOR PREPOSITIONAL PHRASES+applytransvbprep [x,y,z] atts = VERBPH_VAL $ make_filtered_relation dataStore reln ((["object"],predicate):preps)+ where + reln = getAtts getBR atts x+ predicate = getAtts getTVAL atts y+ preps = getAtts getPREPVAL atts z+ +applytransvbprep [x,y] atts = VERBPH_VAL $ make_filtered_relation dataStore reln [(["object"],predicate)]+ where+ reln = getAtts getBR atts x+ predicate = getAtts getTVAL atts y++applytransvb_no_tmph [x,y] atts = VERBPH_VAL $ make_filtered_relation dataStore reln preps+ where+ reln = getAtts getBR atts x+ preps = getAtts getPREPVAL atts y++applytransvb_no_tmph [x] atts = VERBPH_VAL $ make_filtered_relation dataStore reln []+ where+ reln = getAtts getBR atts x++--TODO: modify grammar so you can't ask "what was phobos discover", or if you can, make the answer sensible (e.g. hall, not phobos)+apply_quest_transvb_passive (x2:x3:x4:xs) atts = VERBPH_VAL $ termph $ make_inverted_filtered_relation dataStore reln preps+ where+ linkingvb = getAtts getLINKVAL atts x2+ termph = getAtts getTVAL atts x3+ reln = getAtts getBR atts x4+ preps = case xs of+ [] -> []+ (x5:_) -> getAtts getPREPVAL atts x5+ +applyprepph [x, y]+ = \atts -> PREPPH_VAL $+ let prep_names = getAtts getPREPNVAL atts x+ termph = getAtts getTVAL atts y in+ (prep_names, termph)+ +applyprep [x]+ = \atts -> PREP_VAL $ [(getAtts getPREPPHVAL atts x)] --[(["with_implement"], a telescope)]+ +applypreps [x, y]+ = \atts -> PREP_VAL $ (getAtts getPREPPHVAL atts x):(getAtts getPREPVAL atts y)+ +applyyear [x]+ = \atts -> TERMPH_VAL $ make_pnoun $ show $ getAtts getYEARVAL atts x+ +--END PREPOSITIONAL PHRASES+ +applyvbph [z] + = \atts -> VERBPH_VAL (getAtts getAVALS atts z)+ +appjoin1 [x, y, z] + = \atts -> TERMPH_VAL $ (getAtts getTJVAL atts y) (getAtts getTVAL atts x) (getAtts getTVAL atts z)++appjoin2 [x, y, z] + = \atts -> VERBPH_VAL ((getAtts getVJVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z))++apply_middle1 [x, y, z] + = \atts -> NOUNCLA_VAL ((getAtts getRELVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z))++apply_middle2 [x, y, z] + = \atts -> NOUNCLA_VAL ((getAtts getNJVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z))++apply_middle3 [x, y, z] + = \atts -> NOUNCLA_VAL ((getAtts getRELVAL atts y) (getAtts getAVALS atts x) (getAtts getAVALS atts z))++-- Think "a orbited by b" vs "b orbits a"+{-drop3rd [w, x, y, z] + = \atts -> VERBPH_VAL $+ let reln = getAtts getBR atts x in+ let predicate = getAtts getTVAL atts z in+ make_inverted_relation dataStore reln predicate-}++--NEW FOR PREPOSITIONAL PHRASES+drop3rdprep (w:x:xs) atts = VERBPH_VAL $ make_inverted_filtered_relation dataStore reln preps+ where+ reln = getAtts getBR atts x+ preps = case xs of + [] -> []+ (p:ps) -> getAtts getPREPVAL atts p+--END PREPOSITIONAL PHRASES+ +apply_termphrase [x, y] + = \atts -> SENT_VAL ((getAtts getTVAL atts x) (getAtts getAVALS atts y))+ +sent_val_comp [s1, f, s2] + = \atts -> SENT_VAL ((getAtts getSJVAL atts f) (getAtts getSV atts s1) (getAtts getSV atts s2))++ans1 [x, y] + = \atts -> QUEST_VAL ((getAtts getQU1VAL atts x) (getAtts getSV atts y) )++ans2 [x, y] + = \atts -> QUEST_VAL ((getAtts getQU2VAL atts x) (getAtts getAVALS atts y))++ans3 [x, y, z] + = \atts -> QUEST_VAL ((getAtts getQU3VAL atts x) (getAtts getAVALS atts y) (getAtts getAVALS atts z))++ans5 [x, y, z] + = \atts -> QUEST_VAL ((getAtts getQU2VAL atts x) (getAtts getSV atts z))+ +truefalse [x] + = \atts -> QUEST_VAL $ do+ bool <- (getAtts getSV atts x)+ return $ if bool /= [] then "true." else "false."+ +++ +{-+||-----------------------------------------------------------------------------+|| THE SEMANTICS - PART II : Functions used to obtain objects denoted by +|| proper nouns, verbs, etc.+||-----------------------------------------------------------------------------++|| FUNCTION USED TO DEFINE OBJECTS ASSOCIATED WITH PROPER NOUNS+-}+--test_wrt e s = e `elem` s++-- FUNCTION USED TO DEFINE MEANINGS OF VERBS IN TERMS OF RELATIONS+--make_trans_vb rel p = [x | (x, image_x) <- collect rel, p image_x] -- Similar to make_relation++{- TERMINALS IN JSGF FORM++<Prepn> = with | in | at | by;++<Transvb> = discover | discovers | discovered | orbit | orbited | orbits;++<Indefpron> = anyone | anything | anybody | someone | something | somebody | everyone | everything | everybody;++<Quest5> = where | when | how;++<Quest4b> = many;++<Sentjoin> = and;++<Linkingvb> = is | was | are | were;++<Nounjoin> = and | or;++<Verbphjoin> = and | or;++<Quest3> = which | what;++<Det> = the | a | one | an | some | any | every | all | two;++<Termphjoin> = and | or;++<Quest6> = what;++<Intransvb> = exist | exists | spin | spins;++-}++dictionary = [+ ("thing", Cnoun, [NOUNCLA_VAL $ get_members dataStore "thing"]),+ ("things", Cnoun, [NOUNCLA_VAL $ get_members dataStore "thing"]),+ ("planets", Cnoun, [NOUNCLA_VAL $ get_members dataStore "planet"]),+ ("planet", Cnoun, [NOUNCLA_VAL $ get_members dataStore "planet"]),+ ("person", Cnoun, [NOUNCLA_VAL $ get_members dataStore "person"]), + ("sun", Cnoun, [NOUNCLA_VAL $ get_members dataStore "sun"]), + ("moon", Cnoun, [NOUNCLA_VAL $ get_members dataStore "moon"]), + ("moons", Cnoun, [NOUNCLA_VAL $ get_members dataStore "moon"]),+ ("satellite", Cnoun, [NOUNCLA_VAL $ get_members dataStore "moon"]),+ ("satellites", Cnoun, [NOUNCLA_VAL $ get_members dataStore "moon"]),+ ("atmospheric", Adj, [ADJ_VAL $ get_members dataStore "atmospheric"]),+ ("blue", Adj, [ADJ_VAL $ get_members dataStore "blue"]),+ ("solid", Adj, [ADJ_VAL $ get_members dataStore "solid"]), + ("brown", Adj, [ADJ_VAL $ get_members dataStore "brown"]), + ("gaseous", Adj, [ADJ_VAL $ get_members dataStore "gaseous"]), + ("green", Adj, [ADJ_VAL $ get_members dataStore "green"]), + ("red", Adj, [ADJ_VAL $ get_members dataStore "red"]), + ("ringed", Adj, [ADJ_VAL $ get_members dataStore "ringed"]), + ("vacuumous", Adj, [ADJ_VAL $ get_members dataStore "vacuumous"]),+ ("exist", Intransvb, [VERBPH_VAL $ get_members dataStore "thing"]),+ ("exists", Intransvb, [VERBPH_VAL $ get_members dataStore "thing"]),+ ("spin", Intransvb, [VERBPH_VAL $ get_members dataStore "spin"]),+ ("spins", Intransvb, [VERBPH_VAL $ get_members dataStore "spin"]),+ ("the", Det, [DET_VAL $ the]),+ ("a", Det, [DET_VAL $ a]),+ ("one", Det, [DET_VAL $ one]), + ("an", Det, [DET_VAL $ a]), + ("some", Det, [DET_VAL $ a]), + ("any", Det, [DET_VAL $ a]), + --("no", Det, [DET_VAL $ no]), + ("every", Det, [DET_VAL $ every]), + ("all", Det, [DET_VAL $ every]), + ("two", Det, [DET_VAL $ two]),+ ("bernard", Pnoun, [TERMPH_VAL $ make_pnoun "bernard"]),+ ("bond", Pnoun, [TERMPH_VAL $ make_pnoun "bond"]),+ ("venus", Pnoun, [TERMPH_VAL $ make_pnoun "venus"]),+ ("cassini", Pnoun, [TERMPH_VAL $ make_pnoun "cassini"]),+ ("dollfus", Pnoun, [TERMPH_VAL $ make_pnoun "dollfus"]),+ --("fouuntain", Pnoun, [TERMPH_VAL $ make_pnoun "Fouuntain"]),+ ("galileo", Pnoun, [TERMPH_VAL $ make_pnoun "galileo"]),+ ("hall", Pnoun, [TERMPH_VAL $ make_pnoun "hall"]),+ ("herschel", Pnoun, [TERMPH_VAL $ make_pnoun "herschel"]),+ ("huygens", Pnoun, [TERMPH_VAL $ make_pnoun "huygens"]),+ ("kowal", Pnoun, [TERMPH_VAL $ make_pnoun "kowal"]),+ ("kuiper", Pnoun, [TERMPH_VAL $ make_pnoun "kuiper"]),+ ("larsen", Pnoun, [TERMPH_VAL $ make_pnoun "larsen"]),+ ("lassell", Pnoun, [TERMPH_VAL $ make_pnoun "lassell"]),+ ("melotte", Pnoun, [TERMPH_VAL $ make_pnoun "melotte"]),+ ("nicholson", Pnoun, [TERMPH_VAL $ make_pnoun "nicholson"]),+ ("perrine", Pnoun, [TERMPH_VAL $ make_pnoun "perrine"]),+ ("pickering", Pnoun, [TERMPH_VAL $ make_pnoun "pickering"]),+ ("almathea", Pnoun, [TERMPH_VAL $ make_pnoun "almathea"]),+ ("ariel", Pnoun, [TERMPH_VAL $ make_pnoun "ariel"]),+ ("callisto", Pnoun, [TERMPH_VAL $ make_pnoun "callisto"]),+ ("charon", Pnoun, [TERMPH_VAL $ make_pnoun "charon"]),+ ("deimos", Pnoun, [TERMPH_VAL $ make_pnoun "deimos"]),+ ("dione", Pnoun, [TERMPH_VAL $ make_pnoun "dione"]),+ ("earth", Pnoun, [TERMPH_VAL $ make_pnoun "earth"]),+ ("enceladus", Pnoun, [TERMPH_VAL $ make_pnoun "enceladus"]),+ ("europa", Pnoun, [TERMPH_VAL $ make_pnoun "europa"]),+ ("ganymede", Pnoun, [TERMPH_VAL $ make_pnoun "ganymede"]),+ ("hyperion", Pnoun, [TERMPH_VAL $ make_pnoun "hyperion"]),+ ("iapetus", Pnoun, [TERMPH_VAL $ make_pnoun "iapetus"]),+ ("io", Pnoun, [TERMPH_VAL $ make_pnoun "io"]),+ ("janus", Pnoun, [TERMPH_VAL $ make_pnoun "janus"]),+ ("jupiter", Pnoun, [TERMPH_VAL $ make_pnoun "jupiter"]),+ ("jupitereighth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitereighth"]),+ ("jupitereleventh", Pnoun, [TERMPH_VAL $ make_pnoun "jupitereleventh"]),+ ("jupiterfourteenth", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterfourteenth"]),+ ("jupiterninth", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterninth"]),+ ("jupiterseventh", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterseventh"]),+ ("jupitersixth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitersixth"]),+ ("jupitertenth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitertenth"]),+ ("jupiterthirteenth", Pnoun, [TERMPH_VAL $ make_pnoun "jupiterthirteenth"]),+ ("jupitertwelfth", Pnoun, [TERMPH_VAL $ make_pnoun "jupitertwelfth"]),+ ("luna", Pnoun, [TERMPH_VAL $ make_pnoun "luna"]),+ ("mars", Pnoun, [TERMPH_VAL $ make_pnoun "mars"]),+ ("mercury", Pnoun, [TERMPH_VAL $ make_pnoun "mercury"]),+ ("mimas", Pnoun, [TERMPH_VAL $ make_pnoun "mimas"]),+ ("miranda", Pnoun, [TERMPH_VAL $ make_pnoun "miranda"]),+ ("neptune", Pnoun, [TERMPH_VAL $ make_pnoun "neptune"]),+ ("nereid", Pnoun, [TERMPH_VAL $ make_pnoun "nereid"]),+ ("oberon", Pnoun, [TERMPH_VAL $ make_pnoun "oberon"]),+ ("phobos", Pnoun, [TERMPH_VAL $ make_pnoun "phobos"]),+ ("phoebe", Pnoun, [TERMPH_VAL $ make_pnoun "phoebe"]),+ ("pluto", Pnoun, [TERMPH_VAL $ make_pnoun "pluto"]),+ ("rhea", Pnoun, [TERMPH_VAL $ make_pnoun "rhea"]),+ ("saturn", Pnoun, [TERMPH_VAL $ make_pnoun "saturn"]),+ ("saturnfirst", Pnoun, [TERMPH_VAL $ make_pnoun "saturnfirst"]),+ ("sol", Pnoun, [TERMPH_VAL $ make_pnoun "sol"]),+ ("tethys", Pnoun, [TERMPH_VAL $ make_pnoun "tethys"]),+ ("titan", Pnoun, [TERMPH_VAL $ make_pnoun "titan"]),+ ("titania", Pnoun, [TERMPH_VAL $ make_pnoun "titania"]),+ ("triton", Pnoun, [TERMPH_VAL $ make_pnoun "triton"]),+ ("umbriel", Pnoun, [TERMPH_VAL $ make_pnoun "umbriel"]),+ ("uranus", Pnoun, [TERMPH_VAL $ make_pnoun "uranus"]),+ ("venus", Pnoun, [TERMPH_VAL $ make_pnoun "venus"]),+ ("discover", Transvb, [VERB_VAL ("discover_ev")]),+ ("discovers", Transvb, [VERB_VAL ("discover_ev")]),+ ("discovered", Transvb, [VERB_VAL ("discover_ev")]),+ ("orbit", Transvb, [VERB_VAL ("orbit_ev")]),+ ("orbited", Transvb, [VERB_VAL ("orbit_ev")]),+ ("orbits", Transvb, [VERB_VAL ("orbit_ev")]),+ ("is", Linkingvb, [LINKINGVB_VAL id]),+ ("was", Linkingvb, [LINKINGVB_VAL id]), + ("are", Linkingvb, [LINKINGVB_VAL id]),+ ("were", Linkingvb, [LINKINGVB_VAL id]),+ ("that", Relpron, [RELPRON_VAL $ that]),+ ("who", Relpron, [RELPRON_VAL $ that]),+ ("which", Relpron, [RELPRON_VAL $ that]),+ ("and", Verbphjoin,[VBPHJOIN_VAL $ nounand]),+ ("or", Verbphjoin,[VBPHJOIN_VAL $ nounor]),+ ("and", Nounjoin, [NOUNJOIN_VAL $ nounand]),+ ("or", Nounjoin, [NOUNJOIN_VAL $ nounor]),+ ("and", Termphjoin,[TERMPHJOIN_VAL termand]),+ ("or", Termphjoin,[TERMPHJOIN_VAL termor]), + ("and", Sentjoin, [SENTJOIN_VAL $ sand]),+ ("does", Quest1, [QUEST1_VAL $ yesno]),+ ("did", Quest1 , [QUEST1_VAL $ yesno]),+ ("do", Quest1, [QUEST1_VAL $ yesno]),+ ("is", Quest1, [QUEST1_VAL $ yesno]),+ ("was", Quest1, [QUEST1_VAL $ yesno]),+ ("are", Quest1, [QUEST1_VAL $ yesno]), + ("were", Quest1, [QUEST1_VAL $ yesno]), + ("what", Quest2, [QUEST2_VAL $ what]),+ ("who", Quest2, [QUEST2_VAL $ who]),+ ("what", Quest6, [QUEST2_VAL $ whatobj]),+ ("where", Quest5, [QUEST2_VAL $ where']),+ ("when", Quest5, [QUEST2_VAL $ when']),+ ("how", Quest5, [QUEST2_VAL $ how']),+ ("which", Quest3, [QUEST3_VAL which]),+ ("what", Quest3, [QUEST3_VAL which]),+ ("how", Quest4a, [QUEST3_VAL $ how_many]),+ ("many", Quest4b, [QUEST3_VAL $ how_many]),+ ("human", Cnoun, meaning_of nouncla "person" Nouncla),+ ("discoverer", Cnoun, [NOUNCLA_VAL $ get_subjs_of_event_type dataStore "discover_ev"]),+ ("discoverers", Cnoun, [NOUNCLA_VAL $ get_subjs_of_event_type dataStore "discover_ev"]), + ("humans", Cnoun, meaning_of nouncla "person" Nouncla), + ("people", Cnoun, meaning_of nouncla "person" Nouncla),+ --("orbit", Intransvb, [VERBPH_VAL $ get_subjs_of_event_type dataStore "orbit_ev"]), + --("orbits", Intransvb, [VERBPH_VAL $ get_subjs_of_event_type dataStore "orbit_ev"]),+ ("anyone", Indefpron,meaning_of detph "a person" Detph),+ ("anything", Indefpron,meaning_of detph "a thing" Detph),+ ("anybody", Indefpron,meaning_of detph "a person" Detph),+ ("someone", Indefpron,meaning_of detph "a person" Detph),+ ("something", Indefpron,meaning_of detph "a thing" Detph),+ ("somebody", Indefpron,meaning_of detph "a person" Detph),+ ("everyone", Indefpron,meaning_of detph "every person" Detph),+ ("everything", Indefpron,meaning_of detph "every thing" Detph),+ ("everybody", Indefpron,meaning_of detph "every person" Detph),+ --("nobody", Indefpron,meaning_of detph "no person" Detph),+ --("noone", Indefpron,meaning_of detph "no person" Detph),+ --Begin prepositional stuff--+ ("with", Prepn, [PREPN_VAL ["with_implement"]]),+ ("in", Prepn, [PREPN_VAL ["location","year"]]),+ ("at", Prepn, [PREPN_VAL ["location"]]),+ ("by", Prepn, [PREPN_VAL ["subject"]]),+ --Begin telescope stuff--+ ("telescope", Cnoun, [NOUNCLA_VAL $ get_members dataStore "telescope"]),+ ("telescopes", Cnoun, [NOUNCLA_VAL $ get_members dataStore "telescope"]),+ ("cassegrain_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "cassegrain_telescope"]),+ ("hooker_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "hooker_telescope"]),+ ("schmidt_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "schmidt_telescope"]),+ ("subaru_reflector_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "subaru_reflector_telescope"]),+ ("canada-france-hawaii_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "canada-france-hawaii_telescope"]),+ ("aerial_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "aerial_telescope_1"]),+ ("bruce_astrograph", Pnoun,[TERMPH_VAL $ make_pnoun "bruce_astrograph"]),+ ("telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "telescope_1"]),+ ("hale_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "hale_telescope"]),+ ("hubble_space_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "hubble_space_telescope"]),+ ("blanco_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "blanco_telescope"]),+ ("crossley_reflector_telescope", Pnoun,[TERMPH_VAL $ make_pnoun "crossley_reflector_telescope"]),+ ("refractor_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_1"]),+ ("refractor_telescope_2", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_2"]),+ ("refractor_telescope_3", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_3"]),+ ("refractor_telescope_4", Pnoun,[TERMPH_VAL $ make_pnoun "refractor_telescope_4"]),+ ("reflector_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_1"]),+ ("reflector_telescope_2", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_2"]),+ ("reflector_telescope_3", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_3"]),+ ("reflector_telescope_4", Pnoun,[TERMPH_VAL $ make_pnoun "reflector_telescope_4"]),+ ("ground_based_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "ground_based_telescope_1"]),+ ("ground_based_telescope_2", Pnoun,[TERMPH_VAL $ make_pnoun "ground_based_telescope_2"]),+ ("ground_based_telescope_3", Pnoun,[TERMPH_VAL $ make_pnoun "ground_based_telescope_3"]),+ ("galilean_telescope_1", Pnoun,[TERMPH_VAL $ make_pnoun "galilean_telescope_1"]),+ --Begin science team stuff+ ("team", Cnoun, [NOUNCLA_VAL $ get_members dataStore "science_team"]),+ ("teams", Cnoun, [NOUNCLA_VAL $ get_members dataStore "science_team"]),+ ("voyager_science_team", Pnoun,[TERMPH_VAL $ make_pnoun "voyager_science_team"]),+ ("cassini_imaging_science_team", Pnoun,[TERMPH_VAL $ make_pnoun "cassini_imaging_science_team"]),+ ("science_team_1", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_1"]),+ ("science_team_2", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_2"]),+ ("science_team_3", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_3"]),+ ("science_team_4", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_4"]),+ ("science_team_5", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_5"]),+ ("science_team_6", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_6"]),+ ("science_team_7", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_7"]),+ ("science_team_8", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_8"]),+ ("science_team_9", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_9"]),+ ("science_team_10", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_10"]),+ ("science_team_11", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_11"]),+ ("science_team_12", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_12"]),+ ("science_team_13", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_13"]),+ ("science_team_14", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_14"]),+ ("science_team_15", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_15"]),+ ("science_team_16", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_16"]),+ ("science_team_17", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_17"]),+ ("science_team_18", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_18"]),+ ("science_team_19", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_19"]),+ ("science_team_20", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_20"]),+ ("science_team_21", Pnoun,[TERMPH_VAL $ make_pnoun "science_team_21"]),+ --Begin new people stuff--+ ("larson", Pnoun, [TERMPH_VAL $ make_pnoun "larson"]),+ ("fountain", Pnoun, [TERMPH_VAL $ make_pnoun "fountain"]),+ ("scotti", Pnoun, [TERMPH_VAL $ make_pnoun "scotti"]),+ ("spahr", Pnoun, [TERMPH_VAL $ make_pnoun "spahr"]),+ ("mcmillan", Pnoun, [TERMPH_VAL $ make_pnoun "mcmillan"]),+ ("montani", Pnoun, [TERMPH_VAL $ make_pnoun "montani"]),+ ("gleason", Pnoun, [TERMPH_VAL $ make_pnoun "gleason"]),+ ("gehrels", Pnoun, [TERMPH_VAL $ make_pnoun "gehrels"]),+ ("roemer", Pnoun, [TERMPH_VAL $ make_pnoun "roemer"]),+ ("sheppard", Pnoun, [TERMPH_VAL $ make_pnoun "sheppard"]),+ ("jewitt", Pnoun, [TERMPH_VAL $ make_pnoun "jewitt"]),+ ("fernandez", Pnoun, [TERMPH_VAL $ make_pnoun "fernandez"]),+ ("magnier", Pnoun, [TERMPH_VAL $ make_pnoun "magnier"]),+ ("kleyna", Pnoun, [TERMPH_VAL $ make_pnoun "kleyna"]),+ ("gladman", Pnoun, [TERMPH_VAL $ make_pnoun "gladman"]),+ ("kavelaars", Pnoun, [TERMPH_VAL $ make_pnoun "kavelaars"]),+ ("petit", Pnoun, [TERMPH_VAL $ make_pnoun "petit"]),+ ("allen", Pnoun, [TERMPH_VAL $ make_pnoun "allen"]),+ ("laques", Pnoun, [TERMPH_VAL $ make_pnoun "laques"]),+ ("lecacheux", Pnoun, [TERMPH_VAL $ make_pnoun "lecacheux"]),+ ("smith", Pnoun, [TERMPH_VAL $ make_pnoun "smith"]),+ ("reitsema", Pnoun, [TERMPH_VAL $ make_pnoun "reitsema"]),+ ("pascu", Pnoun, [TERMPH_VAL $ make_pnoun "pascu"]),+ ("seidelmann", Pnoun, [TERMPH_VAL $ make_pnoun "seidelmann"]),+ ("baum", Pnoun, [TERMPH_VAL $ make_pnoun "baum"]),+ ("currie", Pnoun, [TERMPH_VAL $ make_pnoun "currie"]),+ ("showalter", Pnoun, [TERMPH_VAL $ make_pnoun "showalter"]),+ ("scholl", Pnoun, [TERMPH_VAL $ make_pnoun "scholl"]),+ ("holman", Pnoun, [TERMPH_VAL $ make_pnoun "holman"]),+ ("marsden", Pnoun, [TERMPH_VAL $ make_pnoun "marsden"]),+ ("burns", Pnoun, [TERMPH_VAL $ make_pnoun "burns"]),+ ("milisavljevic", Pnoun, [TERMPH_VAL $ make_pnoun "milisavljevic"]),+ ("grav", Pnoun, [TERMPH_VAL $ make_pnoun "grav"]),+ ("karkoschka", Pnoun, [TERMPH_VAL $ make_pnoun "karkoschka"]),+ ("lissauer", Pnoun, [TERMPH_VAL $ make_pnoun "lissauer"]),+ ("fraser", Pnoun, [TERMPH_VAL $ make_pnoun "fraser"]),+ ("christy", Pnoun, [TERMPH_VAL $ make_pnoun "christy"]),+ ("weaver", Pnoun, [TERMPH_VAL $ make_pnoun "weaver"]),+ ("stern", Pnoun, [TERMPH_VAL $ make_pnoun "stern"]),+ ("mutchler", Pnoun, [TERMPH_VAL $ make_pnoun "mutchler"]),+ ("steffl", Pnoun, [TERMPH_VAL $ make_pnoun "steffl"]),+ ("buie", Pnoun, [TERMPH_VAL $ make_pnoun "buie"]),+ ("merline", Pnoun, [TERMPH_VAL $ make_pnoun "merline"]),+ ("spencer", Pnoun, [TERMPH_VAL $ make_pnoun "spencer"]),+ ("young_e_f", Pnoun, [TERMPH_VAL $ make_pnoun "young_e_f"]),+ ("young_l_a", Pnoun, [TERMPH_VAL $ make_pnoun "young_l_a"]),+ ("hamilton", Pnoun, [TERMPH_VAL $ make_pnoun "hamilton"]),+ ("soummer", Pnoun, [TERMPH_VAL $ make_pnoun "soummer"]),+ ("throop", Pnoun, [TERMPH_VAL $ make_pnoun "throop"]),+ --Begin new spacecraft stuff--+ ("spacecraft", Cnoun, [NOUNCLA_VAL $ get_members dataStore "spacecraft"]),+ ("spacecrafts", Cnoun, [NOUNCLA_VAL $ get_members dataStore "spacecraft"]),+ ("voyager_1", Pnoun, [TERMPH_VAL $ make_pnoun "voyager_1"]),+ ("voyager_2", Pnoun, [TERMPH_VAL $ make_pnoun "voyager_2"]),+ ("cassini", Pnoun, [TERMPH_VAL $ make_pnoun "voyager_2"]),+ --Begin new places stuff--+ ("place", Cnoun, [NOUNCLA_VAL $ get_members dataStore "place"]),+ ("places", Cnoun, [NOUNCLA_VAL $ get_members dataStore "place"]),+ ("mt_hopkins", Pnoun, [TERMPH_VAL $ make_pnoun "mt_hopkins"]),+ ("fort_davis", Pnoun, [TERMPH_VAL $ make_pnoun "fort_davis"]),+ ("cerro_tololo", Pnoun, [TERMPH_VAL $ make_pnoun "cerro_tololo"]),+ ("us_naval_observatory", Pnoun, [TERMPH_VAL $ make_pnoun "us_naval_observatory"]),+ ("padua", Pnoun, [TERMPH_VAL $ make_pnoun "padua"]),+ ("mt_hamilton", Pnoun, [TERMPH_VAL $ make_pnoun "mt_hamilton"]),+ ("greenwich", Pnoun, [TERMPH_VAL $ make_pnoun "greenwich"]),+ ("mt_wilson", Pnoun, [TERMPH_VAL $ make_pnoun "mt_wilson"]),+ ("mt_palomar", Pnoun, [TERMPH_VAL $ make_pnoun "mt_palomar"]),+ ("kitt_peak", Pnoun, [TERMPH_VAL $ make_pnoun "kitt_peak"]),+ ("mauna_kea", Pnoun, [TERMPH_VAL $ make_pnoun "mauna_kea"]),+ ("slough", Pnoun, [TERMPH_VAL $ make_pnoun "slough"]),+ ("paris", Pnoun, [TERMPH_VAL $ make_pnoun "paris"]),+ ("the_hague", Pnoun, [TERMPH_VAL $ make_pnoun "the_hague"]),+ ("cambridge", Pnoun, [TERMPH_VAL $ make_pnoun "cambridge"]),+ ("liverpool", Pnoun, [TERMPH_VAL $ make_pnoun "liverpool"]),+ ("arequipa", Pnoun, [TERMPH_VAL $ make_pnoun "arequipa"]),+ ("pic_du_midi", Pnoun, [TERMPH_VAL $ make_pnoun "pic_du_midi"]),+ ("flagstaff", Pnoun, [TERMPH_VAL $ make_pnoun "flagstaff"]),+ ("la_silla", Pnoun, [TERMPH_VAL $ make_pnoun "la_silla"]),+ --Begin new moons stuff--+ ("himalia", Pnoun, [TERMPH_VAL $ make_pnoun "himalia"]),+ ("elara", Pnoun, [TERMPH_VAL $ make_pnoun "elara"]),+ ("pasiphae", Pnoun, [TERMPH_VAL $ make_pnoun "pasiphae"]),+ ("sinope", Pnoun, [TERMPH_VAL $ make_pnoun "sinope"]),+ ("lysithea", Pnoun, [TERMPH_VAL $ make_pnoun "lysithea"]),+ ("carme", Pnoun, [TERMPH_VAL $ make_pnoun "carme"]),+ ("ananke", Pnoun, [TERMPH_VAL $ make_pnoun "ananke"]),+ ("leda", Pnoun, [TERMPH_VAL $ make_pnoun "leda"]),+ ("thebe", Pnoun, [TERMPH_VAL $ make_pnoun "thebe"]),+ ("adrastea", Pnoun, [TERMPH_VAL $ make_pnoun "adrastea"]),+ ("metis", Pnoun, [TERMPH_VAL $ make_pnoun "metis"]),+ ("callirrhoe", Pnoun, [TERMPH_VAL $ make_pnoun "callirrhoe"]),+ ("themisto", Pnoun, [TERMPH_VAL $ make_pnoun "themisto"]),+ ("megaclite", Pnoun, [TERMPH_VAL $ make_pnoun "megaclite"]),+ ("taygete", Pnoun, [TERMPH_VAL $ make_pnoun "taygete"]),+ ("chaldene", Pnoun, [TERMPH_VAL $ make_pnoun "chaldene"]),+ ("harpalyke", Pnoun, [TERMPH_VAL $ make_pnoun "harpalyke"]),+ ("kalyke", Pnoun, [TERMPH_VAL $ make_pnoun "kalyke"]),+ ("iocaste", Pnoun, [TERMPH_VAL $ make_pnoun "iocaste"]),+ ("erinome", Pnoun, [TERMPH_VAL $ make_pnoun "erinome"]),+ ("isonoe", Pnoun, [TERMPH_VAL $ make_pnoun "isonoe"]),+ ("praxidike", Pnoun, [TERMPH_VAL $ make_pnoun "praxidike"]),+ ("autonoe", Pnoun, [TERMPH_VAL $ make_pnoun "autonoe"]),+ ("thyone", Pnoun, [TERMPH_VAL $ make_pnoun "thyone"]),+ ("hermippe", Pnoun, [TERMPH_VAL $ make_pnoun "hermippe"]),+ ("aitne", Pnoun, [TERMPH_VAL $ make_pnoun "aitne"]),+ ("eurydome", Pnoun, [TERMPH_VAL $ make_pnoun "eurydome"]),+ ("euanthe", Pnoun, [TERMPH_VAL $ make_pnoun "euanthe"]),+ ("euporie", Pnoun, [TERMPH_VAL $ make_pnoun "euporie"]),+ ("orthosie", Pnoun, [TERMPH_VAL $ make_pnoun "orthosie"]),+ ("sponde", Pnoun, [TERMPH_VAL $ make_pnoun "sponde"]),+ ("kale", Pnoun, [TERMPH_VAL $ make_pnoun "kale"]),+ ("pasithee", Pnoun, [TERMPH_VAL $ make_pnoun "pasithee"]),+ ("hegemone", Pnoun, [TERMPH_VAL $ make_pnoun "hegemone"]),+ ("mneme", Pnoun, [TERMPH_VAL $ make_pnoun "mneme"]),+ ("aoede", Pnoun, [TERMPH_VAL $ make_pnoun "aoede"]),+ ("thelxinoe", Pnoun, [TERMPH_VAL $ make_pnoun "thelxinoe"]),+ ("arche", Pnoun, [TERMPH_VAL $ make_pnoun "arche"]),+ ("kallichore", Pnoun, [TERMPH_VAL $ make_pnoun "kallichore"]),+ ("helike", Pnoun, [TERMPH_VAL $ make_pnoun "helike"]),+ ("carpo", Pnoun, [TERMPH_VAL $ make_pnoun "carpo"]),+ ("eukelade", Pnoun, [TERMPH_VAL $ make_pnoun "eukelade"]),+ ("cyllene", Pnoun, [TERMPH_VAL $ make_pnoun "cyllene"]),+ ("kore", Pnoun, [TERMPH_VAL $ make_pnoun "kore"]),+ ("herse", Pnoun, [TERMPH_VAL $ make_pnoun "herse"]),+ ("epimetheus", Pnoun, [TERMPH_VAL $ make_pnoun "epimetheus"]),+ ("helene", Pnoun, [TERMPH_VAL $ make_pnoun "helene"]),+ ("telesto", Pnoun, [TERMPH_VAL $ make_pnoun "telesto"]),+ ("calypso", Pnoun, [TERMPH_VAL $ make_pnoun "calypso"]),+ ("atlas", Pnoun, [TERMPH_VAL $ make_pnoun "atlas"]),+ ("prometheus", Pnoun, [TERMPH_VAL $ make_pnoun "prometheus"]),+ ("pandora", Pnoun, [TERMPH_VAL $ make_pnoun "pandora"]),+ ("pan", Pnoun, [TERMPH_VAL $ make_pnoun "pan"]),+ ("ymir", Pnoun, [TERMPH_VAL $ make_pnoun "ymir"]),+ ("paaliaq", Pnoun, [TERMPH_VAL $ make_pnoun "paaliaq"]),+ ("tarvos", Pnoun, [TERMPH_VAL $ make_pnoun "tarvos"]),+ ("ijiraq", Pnoun, [TERMPH_VAL $ make_pnoun "ijiraq"]),+ ("suttungr", Pnoun, [TERMPH_VAL $ make_pnoun "suttungr"]),+ ("kiviuq", Pnoun, [TERMPH_VAL $ make_pnoun "kiviuq"]),+ ("mundilfari", Pnoun, [TERMPH_VAL $ make_pnoun "mundilfari"]),+ ("albiorix", Pnoun, [TERMPH_VAL $ make_pnoun "albiorix"]),+ ("skathi", Pnoun, [TERMPH_VAL $ make_pnoun "skathi"]),+ ("erriapus", Pnoun, [TERMPH_VAL $ make_pnoun "erriapus"]),+ ("siarnaq", Pnoun, [TERMPH_VAL $ make_pnoun "siarnaq"]),+ ("thrymr", Pnoun, [TERMPH_VAL $ make_pnoun "thrymr"]),+ ("narvi", Pnoun, [TERMPH_VAL $ make_pnoun "narvi"]),+ ("methone", Pnoun, [TERMPH_VAL $ make_pnoun "methone"]),+ ("pallene", Pnoun, [TERMPH_VAL $ make_pnoun "pallene"]),+ ("polydeuces", Pnoun, [TERMPH_VAL $ make_pnoun "polydeuces"]),+ ("daphnis", Pnoun, [TERMPH_VAL $ make_pnoun "daphnis"]),+ ("aegir", Pnoun, [TERMPH_VAL $ make_pnoun "aegir"]),+ ("bebhionn", Pnoun, [TERMPH_VAL $ make_pnoun "bebhionn"]),+ ("bergelmir", Pnoun, [TERMPH_VAL $ make_pnoun "bergelmir"]),+ ("bestla", Pnoun, [TERMPH_VAL $ make_pnoun "bestla"]),+ ("farbauti", Pnoun, [TERMPH_VAL $ make_pnoun "farbauti"]),+ ("fenrir", Pnoun, [TERMPH_VAL $ make_pnoun "fenrir"]),+ ("fornjot", Pnoun, [TERMPH_VAL $ make_pnoun "fornjot"]),+ ("hati", Pnoun, [TERMPH_VAL $ make_pnoun "hati"]),+ ("hyrrokkin", Pnoun, [TERMPH_VAL $ make_pnoun "hyrrokkin"]),+ ("kari", Pnoun, [TERMPH_VAL $ make_pnoun "kari"]),+ ("loge", Pnoun, [TERMPH_VAL $ make_pnoun "loge"]),+ ("skoll", Pnoun, [TERMPH_VAL $ make_pnoun "skoll"]),+ ("surtur", Pnoun, [TERMPH_VAL $ make_pnoun "surtur"]),+ ("anthe", Pnoun, [TERMPH_VAL $ make_pnoun "anthe"]),+ ("jarnsaxa", Pnoun, [TERMPH_VAL $ make_pnoun "jarnsaxa"]),+ ("greip", Pnoun, [TERMPH_VAL $ make_pnoun "greip"]),+ ("tarqeq", Pnoun, [TERMPH_VAL $ make_pnoun "tarqeq"]),+ ("aegaeon", Pnoun, [TERMPH_VAL $ make_pnoun "aegaeon"]),+ ("cordelia", Pnoun, [TERMPH_VAL $ make_pnoun "cordelia"]),+ ("ophelia", Pnoun, [TERMPH_VAL $ make_pnoun "ophelia"]),+ ("bianca", Pnoun, [TERMPH_VAL $ make_pnoun "bianca"]),+ ("cressida", Pnoun, [TERMPH_VAL $ make_pnoun "cressida"]),+ ("desdemona", Pnoun, [TERMPH_VAL $ make_pnoun "desdemona"]),+ ("juliet", Pnoun, [TERMPH_VAL $ make_pnoun "juliet"]),+ ("portia", Pnoun, [TERMPH_VAL $ make_pnoun "portia"]),+ ("rosalind", Pnoun, [TERMPH_VAL $ make_pnoun "rosalind"]),+ ("belinda", Pnoun, [TERMPH_VAL $ make_pnoun "belinda"]),+ ("puck", Pnoun, [TERMPH_VAL $ make_pnoun "puck"]),+ ("caliban", Pnoun, [TERMPH_VAL $ make_pnoun "caliban"]),+ ("sycorax", Pnoun, [TERMPH_VAL $ make_pnoun "sycorax"]),+ ("prospero", Pnoun, [TERMPH_VAL $ make_pnoun "prospero"]),+ ("setebos", Pnoun, [TERMPH_VAL $ make_pnoun "setebos"]),+ ("stephano", Pnoun, [TERMPH_VAL $ make_pnoun "stephano"]),+ ("trinculo", Pnoun, [TERMPH_VAL $ make_pnoun "trinculo"]),+ ("francisco", Pnoun, [TERMPH_VAL $ make_pnoun "francisco"]),+ ("margaret", Pnoun, [TERMPH_VAL $ make_pnoun "margaret"]),+ ("ferdinand", Pnoun, [TERMPH_VAL $ make_pnoun "ferdinand"]),+ ("perdita", Pnoun, [TERMPH_VAL $ make_pnoun "perdita"]),+ ("mab", Pnoun, [TERMPH_VAL $ make_pnoun "mab"]),+ ("cupid", Pnoun, [TERMPH_VAL $ make_pnoun "cupid"]),+ ("triton", Pnoun, [TERMPH_VAL $ make_pnoun "triton"]),+ ("naiad", Pnoun, [TERMPH_VAL $ make_pnoun "naiad"]),+ ("thalassa", Pnoun, [TERMPH_VAL $ make_pnoun "thalassa"]),+ ("despina", Pnoun, [TERMPH_VAL $ make_pnoun "despina"]),+ ("galatea", Pnoun, [TERMPH_VAL $ make_pnoun "galatea"]),+ ("larissa", Pnoun, [TERMPH_VAL $ make_pnoun "larissa"]),+ ("proteus", Pnoun, [TERMPH_VAL $ make_pnoun "proteus"]),+ ("halimede", Pnoun, [TERMPH_VAL $ make_pnoun "halimede"]),+ ("psamathe", Pnoun, [TERMPH_VAL $ make_pnoun "psamathe"]),+ ("sao", Pnoun, [TERMPH_VAL $ make_pnoun "sao"]),+ ("laomedeia", Pnoun, [TERMPH_VAL $ make_pnoun "laomedeia"]),+ ("neso", Pnoun, [TERMPH_VAL $ make_pnoun "neso"]),+ ("nix", Pnoun, [TERMPH_VAL $ make_pnoun "nix"]),+ ("hydra", Pnoun, [TERMPH_VAL $ make_pnoun "hydra"]),+ ("kerberos", Pnoun, [TERMPH_VAL $ make_pnoun "kerberos"]),+ ("styx", Pnoun, [TERMPH_VAL $ make_pnoun "styx"])++ ] ++ list_of_years+ +{-Major hack: Since the basic unit that the parser understands is strings (not characters), we have to manually add all years that we can query into the dictionary...+That is, we can't make the parser understand "1984" and "1245" by having it recognize four numbers, instead it must recognize the entire string of numbers at once+as a terminal (i.e., "1984" would be a terminal, not a non-terminal composed of "1", "9", "8", and "4"). Therefore, all possible strings must be added to the dictionary so that the parser can match them.++**this might need to be altered**+-}++list_of_years = map (\n -> (show n, Year, [YEAR_VAL n])) $ concat [[1000 + x, 2000 + x] | x <- [0..999]]+ +--test1 p p_ inp = do putStr $ render80 $ format{-Atts p_-} $ snd $ unState (p T0 [] ((1,[]),words inp) ([],[])) [] +test p input = unState (p ((1,[]),input) ([],[])) [] ++++parse i = formatAttsFinalAlt Question ((length (words i))+1) $ snd $ test (question T0 []) (words i)+ +findStart st ((s,ss):rest) | s == st = [(s,ss)]+ | otherwise = findStart st rest+findStart st [] = [] ++input = words i1++i1 = "which moons that were discovered by hall orbit mars" -- OK+i2 = "who discovered a moon that orbits mars" -- OK+i3 = "did hall discover every moon that orbits mars" -- OK+i4 = "how many moons were discovered by hall and kuiper" -- OK+i5 = "how many moons were discovered by hall or kuiper" -- OK+i6 = "every moon was discovered by a person" -- OK+i7 = "which planets are orbited by a moon that was discovered by galileo" -- OK+i8 = "which moons were discovered by nobody" -- OK+i9 = "is every planet orbited by a moon" -- Broken in original too+i10 = "which planets are orbited by two moons" -- OK+i11 = "who was the discoverer of phobos" -- Broken in original too+i12 = "hall discovered a moon that orbits mars" -- OK+i13 = "which moons that orbit mars were discovered by hall" -- OK+i14 = "every moon orbits every planet" -- OK+i15 = "every planet is orbited by a moon" -- OK+i16 = "a planet is orbited by a moon" -- OK+i17 = "does phobos orbit mars" -- OK+--+i18 = "did hall discover deimos or phobos and miranda" -- Broken in original too+i19 = "did hall discover deimos or phobos and miranda or deimos and deimos" -- Broken in original too
TypeAg2.hs view
@@ -1,192 +1,192 @@-module TypeAg2 where - -import System.IO.Unsafe -import Getts - -data AttValue = VAL {getAVAL :: Int} - | MaxVal {getAVAL :: Int} - | SubVal {getAVAL :: Int} - | RepVal {getAVAL :: Int} - | Res {getRVAL :: DisplayTree} - | B_OP {getB_OP :: (Int -> Int -> Int)} - | U_OP {getU_OP :: (Int -> Int)} - | SENT_VAL {getSV :: IO ES} - | ErrorVal {getEVAL :: String} - | NOUNCLA_VAL {getAVALS :: IO ES} - | VERBPH_VAL {getAVALS :: IO ES} - | ADJ_VAL {getAVALS :: IO ES} - | TERMPH_VAL {getTVAL :: (IO ES -> IO ES)} - | DET_VAL {getDVAL :: (IO ES -> IO ES -> IO ES)} - | VERB_VAL {getBR :: Relation} - | RELPRON_VAL {getRELVAL :: (IO ES -> IO ES -> IO ES)} - | NOUNJOIN_VAL {getNJVAL :: (IO ES -> IO ES -> IO ES)} - | VBPHJOIN_VAL {getVJVAL :: (IO ES -> IO ES -> IO ES)} - | TERMPHJOIN_VAL {getTJVAL :: ((IO ES -> IO ES) -> (IO ES -> IO ES) -> (IO ES -> IO ES)) } - | PREP_VAL {getPREPVAL :: ([([String], IO ES -> IO ES)])} -- used in "hall discovered phobos with a telescope" as "with". - | PREPN_VAL {getPREPNVAL :: [String]} --used for mapping between prepositions and their corresponding identifiers in the database. I.e., "in" -> ["location", "year"] - | PREPPH_VAL {getPREPPHVAL :: ([String], IO ES -> IO ES)} - | LINKINGVB_VAL {getLINKVAL :: (IO ES -> IO ES)} - | SENTJOIN_VAL {getSJVAL :: (IO ES -> IO ES -> IO ES)} - | DOT_VAL {getDOTVAL :: IO String} - | QM_VAL {getQMVAL :: IO String} - | QUEST_VAL {getQUVAL :: IO String} - | QUEST1_VAL {getQU1VAL :: (IO ES -> IO String)} - | QUEST2_VAL {getQU2VAL :: (IO ES -> IO String)} - | QUEST3_VAL {getQU3VAL :: (IO ES -> IO ES -> IO String)} - | YEAR_VAL {getYEARVAL :: Int} - --- | RESULT [sys_message] -data MemoL = Start | Tree | Num | Emp | ALeaf String | Expr | Op | ET - | Pnoun|Cnoun|Adj|Det|Intransvb|Transvb|Linkingvb|Relpron|Termphjoin|Verbphjoin|Nounjoin|Preps|Prepph|Prepn|Indefpron|Sentjoin|Quest1|Quest2|Quest3|Quest4a|Quest4b - | Snouncla|Relnouncla|Nouncla|Adjs|Detph|Transvbph|Verbph|Termph|Jointermph|Joinvbph|Sent|Two_sent|Question|Quest4|Query|Year|Quest5|Quest6 - deriving (Eq,Ord,Show) - -data Id = O0|S0 |S1|S2|S3|S4|S5|S6|S7|S8|S9|T0|T1 | T2 | T3 |T4 | N1| N2 | N3 | E0 |E1 |E2 | O1| LHS deriving (Eq,Ord,Show, Enum) - -- basic IDs for identifying each NT - -{- - -attFunc - = [ - (VAL,getAVAL), (MaxVal,getAVAL), (SubVal,getAVAL), (RepVal,getAVAL), (Res,getRVAL), (B_OP,getB_OP),(U_OP,getU_OP),(SENT_VAL,getSV),(ErrorVal,getEVAL), - (NOUNCLA_VAL,getAVALS),(VERBPH_VAL,getAVALS),(ADJ_VAL,getAVALS),(TERMPH_VAL,getTVAL),(DET_VAL,getDVAL),(VERB_VAL,getBR),(RELPRON_VAL,getRELVAL),(NOUNJOIN_VAL,getNJVAL), - (VBPHJOIN_VAL,getVJVAL),(TERMPHJOIN_VAL,getTJVAL),(PREP_VAL,getPREPVAL),(LINKINGVB_VAL,getLINKVAL),(SENTJOIN_VAL,getSJVAL),(DOT_VAL,getDOTVAL),(QM_VAL,getQMVAL),(QUEST1_VAL,getQU1VAL), - (QUEST2_VAL,getQU2VAL),(QUEST3_VAL,getQU3VAL) - ] --} -type Entity = String -type ES = Image -- [Int] ---type Bin_Rel = [(Entity,Entity)] -- [(Int, Int)] ---type Relation = (ES -> Bool) -> ES -type Relation = String - -data DisplayTree = B [DisplayTree] - | N Int - deriving (Show, Eq) - - ---instance Show AttValue where - -showio :: AttValue -> IO String -showio (VAL j) = return $ "VAL " ++ show j -showio (MaxVal j) = return $ "MaxVal " ++ show j -showio (SubVal j) = return $ "SubVal " ++ show j -showio (RepVal j) = return $ "RepVal " ++ show j -showio (Res j) = return $ "Tree: " ++ show j -showio (B_OP j) = return $ "B_OP" -showio (U_OP j) = return $ "U_OP" -showio (SENT_VAL j) = j >>= return . show -showio (ErrorVal j) = return j -showio (NOUNCLA_VAL j) = j >>= return . (++) "NOUNCLA_VAL " . unwords . map fst -showio (VERBPH_VAL j) = j >>= return . (++) "VERBPH_VAL " . unwords . map fst -showio (ADJ_VAL j) = j >>= return . (++) "ADJ_VAL " . unwords . map fst -showio (TERMPH_VAL j) = return "TERMPH_VAL " -showio (DET_VAL j) = return "DET_VAL " -showio (VERB_VAL j) = return $ "VERB_VAL " ++ j -showio (RELPRON_VAL j) = return "RELPRON_VAL " -showio (NOUNJOIN_VAL j) = return "NOUNJOIN_VAL " -showio (VBPHJOIN_VAL j) = return "VBPHJOIN_VAL " -showio (TERMPHJOIN_VAL j) = return "TERMPHJOIN_VAL " -showio (PREP_VAL j) = return "PREP_VAL " -showio (LINKINGVB_VAL j) = return "LINKINGVB_VAL " -showio (SENTJOIN_VAL j) = return "SENTJOIN_VAL " -showio (DOT_VAL j) = j -showio (QM_VAL j) = j -showio (QUEST_VAL j) = j -showio (QUEST1_VAL j) = return "QUEST1_VAL" -showio (QUEST2_VAL j) = return "QUEST2_VAL" -showio (QUEST3_VAL j) = return "SENTJOIN_VAL" - -instance Eq AttValue where - (VAL j) == (VAL j') = True - (MaxVal j) == (MaxVal j') = True - (SubVal j) == (SubVal j') = True - (RepVal j) == (RepVal j') = True - (Res j) == (Res j') = True - (B_OP j) == (B_OP j') = True - (U_OP j) == (U_OP j') = True - (SENT_VAL j) == (SENT_VAL j') = True - (NOUNCLA_VAL j) == (NOUNCLA_VAL j') = True - (VERBPH_VAL j) == (VERBPH_VAL j') = True - (ADJ_VAL j) == (ADJ_VAL j') = True - (TERMPH_VAL j) == (TERMPH_VAL j') = True - (DET_VAL j) == (DET_VAL j') = True - (VERB_VAL j) == (VERB_VAL j') = True - (RELPRON_VAL j) == (RELPRON_VAL j') = True - (NOUNJOIN_VAL j) == (NOUNJOIN_VAL j') = True - (VBPHJOIN_VAL j) == (VBPHJOIN_VAL j') = True - (TERMPHJOIN_VAL j) == (TERMPHJOIN_VAL j') = True - (LINKINGVB_VAL j) == (LINKINGVB_VAL j') = True - (SENTJOIN_VAL j) == (SENTJOIN_VAL j') = True - (DOT_VAL j) == (DOT_VAL j') = True - (QM_VAL j) == (QM_VAL j') = True - (QUEST_VAL j) == (QUEST_VAL j') = True - (QUEST1_VAL j) == (QUEST1_VAL j') = True - (QUEST2_VAL j) == (QUEST2_VAL j') = True - (QUEST3_VAL j) == (QUEST3_VAL j') = True - (PREP_VAL s1) == (PREP_VAL s) = True - (PREPN_VAL s1) == (PREPN_VAL s) = True - (PREPPH_VAL s1) == (PREPPH_VAL s) = True - (YEAR_VAL s1) == (YEAR_VAL s) = True - _ == _ = False - - - - - - ---------- *********************** -------------- --- needs to be simplified -- -setAtt (MaxVal s1) (MaxVal s) = [MaxVal s] -setAtt (MaxVal s1) (SubVal s) = [MaxVal s] -setAtt (MaxVal s1) (RepVal s) = [MaxVal s] -setAtt (MaxVal s1) (VAL s) = [MaxVal s] -setAtt (MaxVal s1) (ErrorVal s) = [ErrorVal s] - -setAtt (SubVal s1) (MaxVal s) = [SubVal s] -setAtt (SubVal s1) (SubVal s) = [SubVal s] -setAtt (SubVal s1) (RepVal s) = [SubVal s] -setAtt (SubVal s1) (VAL s) = [SubVal s] -setAtt (SubVal s1) (ErrorVal s) = [ErrorVal s] - -setAtt (RepVal s1) (MaxVal s) = [RepVal s] -setAtt (RepVal s1) (SubVal s) = [RepVal s] -setAtt (RepVal s1) (RepVal s) = [RepVal s] -setAtt (RepVal s1) (VAL s) = [RepVal s] -setAtt (RepVal s1) (ErrorVal s) = [ErrorVal s] - -setAtt (VAL s1) (VAL s) = [VAL s] -setAtt (VAL s1) (MaxVal s) = [VAL s] -setAtt (VAL s1) (SubVal s) = [VAL s] -setAtt (VAL s1) (RepVal s) = [VAL s] -setAtt (VAL s1) (ErrorVal s) = [ErrorVal s] - - -setAtt (Res s1) (Res s) = [Res s] -setAtt (Res s1) (ErrorVal s) = [ErrorVal s] -setAtt (ErrorVal s1) (ErrorVal s) = [ErrorVal s] - -setAtt (NOUNCLA_VAL s1) (NOUNCLA_VAL s) = [NOUNCLA_VAL s] -setAtt (ADJ_VAL s1) (ADJ_VAL s) = [ADJ_VAL s] -setAtt (TERMPH_VAL s1) (TERMPH_VAL s) = [TERMPH_VAL s] -setAtt (VERBPH_VAL s1) (VERBPH_VAL s) = [VERBPH_VAL s] -setAtt (SENT_VAL s1) (SENT_VAL s) = [SENT_VAL s] -setAtt (QUEST_VAL s1) (QUEST_VAL s) = [QUEST_VAL s] -setAtt (QUEST1_VAL s1) (QUEST1_VAL s) = [QUEST1_VAL s] -setAtt (QUEST2_VAL s1) (QUEST2_VAL s) = [QUEST2_VAL s] -setAtt (QUEST3_VAL s1) (QUEST3_VAL s) = [QUEST3_VAL s] - -setAtt (PREP_VAL s1) (PREP_VAL s) = [PREP_VAL s] -setAtt (PREPN_VAL s1) (PREPN_VAL s) = [PREPN_VAL s] -setAtt (PREPPH_VAL s1) (PREPPH_VAL s) = [PREPPH_VAL s] -setAtt (YEAR_VAL s1) (YEAR_VAL s) = [YEAR_VAL s] - - ---------- *********************** -------------- - - - - - - - +{-# LANGUAGE Trustworthy #-}+module TypeAg2 where++import Getts++data AttValue = VAL {getAVAL :: Int} + | MaxVal {getAVAL :: Int} + | SubVal {getAVAL :: Int}+ | RepVal {getAVAL :: Int}+ | Res {getRVAL :: DisplayTree}+ | B_OP {getB_OP :: (Int -> Int -> Int)} + | U_OP {getU_OP :: (Int -> Int)} + | SENT_VAL {getSV :: IO ES}+ | ErrorVal {getEVAL :: String} + | NOUNCLA_VAL {getAVALS :: IO ES} + | VERBPH_VAL {getAVALS :: IO ES} + | ADJ_VAL {getAVALS :: IO ES} + | TERMPH_VAL {getTVAL :: (IO ES -> IO ES)} + | DET_VAL {getDVAL :: (IO ES -> IO ES -> IO ES)} + | VERB_VAL {getBR :: Relation} + | RELPRON_VAL {getRELVAL :: (IO ES -> IO ES -> IO ES)} + | NOUNJOIN_VAL {getNJVAL :: (IO ES -> IO ES -> IO ES)}+ | VBPHJOIN_VAL {getVJVAL :: (IO ES -> IO ES -> IO ES)} + | TERMPHJOIN_VAL {getTJVAL :: ((IO ES -> IO ES) -> (IO ES -> IO ES) -> (IO ES -> IO ES)) }+ | PREP_VAL {getPREPVAL :: ([([String], IO ES -> IO ES)])} -- used in "hall discovered phobos with a telescope" as "with". + | PREPN_VAL {getPREPNVAL :: [String]} --used for mapping between prepositions and their corresponding identifiers in the database. I.e., "in" -> ["location", "year"]+ | PREPPH_VAL {getPREPPHVAL :: ([String], IO ES -> IO ES)}+ | LINKINGVB_VAL {getLINKVAL :: (IO ES -> IO ES)}+ | SENTJOIN_VAL {getSJVAL :: (IO ES -> IO ES -> IO ES)}+ | DOT_VAL {getDOTVAL :: IO String}+ | QM_VAL {getQMVAL :: IO String}+ | QUEST_VAL {getQUVAL :: IO String}+ | QUEST1_VAL {getQU1VAL :: (IO ES -> IO String)}+ | QUEST2_VAL {getQU2VAL :: (IO ES -> IO String)}+ | QUEST3_VAL {getQU3VAL :: (IO ES -> IO ES -> IO String)}+ | YEAR_VAL {getYEARVAL :: Int}++-- | RESULT [sys_message]+data MemoL = Start | Tree | Num | Emp | ALeaf String | Expr | Op | ET+ | Pnoun|Cnoun|Adj|Det|Intransvb|Transvb|Linkingvb|Relpron|Termphjoin|Verbphjoin|Nounjoin|Preps|Prepph|Prepn|Indefpron|Sentjoin|Quest1|Quest2|Quest3|Quest4a|Quest4b+ | Snouncla|Relnouncla|Nouncla|Adjs|Detph|Transvbph|Verbph|Termph|Jointermph|Joinvbph|Sent|Two_sent|Question|Quest4|Query|Year|Quest5|Quest6+ deriving (Eq,Ord,Show)++data Id = O0|S0 |S1|S2|S3|S4|S5|S6|S7|S8|S9|T0|T1 | T2 | T3 |T4 | N1| N2 | N3 | E0 |E1 |E2 | O1| LHS deriving (Eq,Ord,Show, Enum)+ -- basic IDs for identifying each NT ++{-++attFunc + = [+ (VAL,getAVAL), (MaxVal,getAVAL), (SubVal,getAVAL), (RepVal,getAVAL), (Res,getRVAL), (B_OP,getB_OP),(U_OP,getU_OP),(SENT_VAL,getSV),(ErrorVal,getEVAL),+ (NOUNCLA_VAL,getAVALS),(VERBPH_VAL,getAVALS),(ADJ_VAL,getAVALS),(TERMPH_VAL,getTVAL),(DET_VAL,getDVAL),(VERB_VAL,getBR),(RELPRON_VAL,getRELVAL),(NOUNJOIN_VAL,getNJVAL),+ (VBPHJOIN_VAL,getVJVAL),(TERMPHJOIN_VAL,getTJVAL),(PREP_VAL,getPREPVAL),(LINKINGVB_VAL,getLINKVAL),(SENTJOIN_VAL,getSJVAL),(DOT_VAL,getDOTVAL),(QM_VAL,getQMVAL),(QUEST1_VAL,getQU1VAL),+ (QUEST2_VAL,getQU2VAL),(QUEST3_VAL,getQU3VAL) + ]+-}+type Entity = String +type ES = Image -- [Int]+--type Bin_Rel = [(Entity,Entity)] -- [(Int, Int)]+--type Relation = (ES -> Bool) -> ES+type Relation = String++data DisplayTree = B [DisplayTree]+ | N Int+ deriving (Show, Eq)+++--instance Show AttValue where++showio :: AttValue -> IO String+showio (VAL j) = return $ "VAL " ++ show j+showio (MaxVal j) = return $ "MaxVal " ++ show j+showio (SubVal j) = return $ "SubVal " ++ show j+showio (RepVal j) = return $ "RepVal " ++ show j+showio (Res j) = return $ "Tree: " ++ show j+showio (B_OP j) = return $ "B_OP"+showio (U_OP j) = return $ "U_OP"+showio (SENT_VAL j) = j >>= return . show +showio (ErrorVal j) = return j+showio (NOUNCLA_VAL j) = j >>= return . (++) "NOUNCLA_VAL " . unwords . map fst+showio (VERBPH_VAL j) = j >>= return . (++) "VERBPH_VAL " . unwords . map fst+showio (ADJ_VAL j) = j >>= return . (++) "ADJ_VAL " . unwords . map fst+showio (TERMPH_VAL j) = return "TERMPH_VAL " +showio (DET_VAL j) = return "DET_VAL " +showio (VERB_VAL j) = return $ "VERB_VAL " ++ j+showio (RELPRON_VAL j) = return "RELPRON_VAL "+showio (NOUNJOIN_VAL j) = return "NOUNJOIN_VAL "+showio (VBPHJOIN_VAL j) = return "VBPHJOIN_VAL "+showio (TERMPHJOIN_VAL j) = return "TERMPHJOIN_VAL "+showio (PREP_VAL j) = return "PREP_VAL "+showio (LINKINGVB_VAL j) = return "LINKINGVB_VAL "+showio (SENTJOIN_VAL j) = return "SENTJOIN_VAL "+showio (DOT_VAL j) = j +showio (QM_VAL j) = j +showio (QUEST_VAL j) = j +showio (QUEST1_VAL j) = return "QUEST1_VAL"+showio (QUEST2_VAL j) = return "QUEST2_VAL"+showio (QUEST3_VAL j) = return "SENTJOIN_VAL"++instance Eq AttValue where+ (VAL j) == (VAL j') = True+ (MaxVal j) == (MaxVal j') = True+ (SubVal j) == (SubVal j') = True+ (RepVal j) == (RepVal j') = True+ (Res j) == (Res j') = True+ (B_OP j) == (B_OP j') = True+ (U_OP j) == (U_OP j') = True+ (SENT_VAL j) == (SENT_VAL j') = True+ (NOUNCLA_VAL j) == (NOUNCLA_VAL j') = True+ (VERBPH_VAL j) == (VERBPH_VAL j') = True+ (ADJ_VAL j) == (ADJ_VAL j') = True+ (TERMPH_VAL j) == (TERMPH_VAL j') = True+ (DET_VAL j) == (DET_VAL j') = True+ (VERB_VAL j) == (VERB_VAL j') = True+ (RELPRON_VAL j) == (RELPRON_VAL j') = True+ (NOUNJOIN_VAL j) == (NOUNJOIN_VAL j') = True+ (VBPHJOIN_VAL j) == (VBPHJOIN_VAL j') = True+ (TERMPHJOIN_VAL j) == (TERMPHJOIN_VAL j') = True+ (LINKINGVB_VAL j) == (LINKINGVB_VAL j') = True+ (SENTJOIN_VAL j) == (SENTJOIN_VAL j') = True+ (DOT_VAL j) == (DOT_VAL j') = True+ (QM_VAL j) == (QM_VAL j') = True+ (QUEST_VAL j) == (QUEST_VAL j') = True+ (QUEST1_VAL j) == (QUEST1_VAL j') = True+ (QUEST2_VAL j) == (QUEST2_VAL j') = True+ (QUEST3_VAL j) == (QUEST3_VAL j') = True+ (PREP_VAL s1) == (PREP_VAL s) = True+ (PREPN_VAL s1) == (PREPN_VAL s) = True+ (PREPPH_VAL s1) == (PREPPH_VAL s) = True+ (YEAR_VAL s1) == (YEAR_VAL s) = True+ _ == _ = False+++++++--------- *********************** --------------+-- needs to be simplified --+setAtt (MaxVal s1) (MaxVal s) = [MaxVal s] +setAtt (MaxVal s1) (SubVal s) = [MaxVal s] +setAtt (MaxVal s1) (RepVal s) = [MaxVal s] +setAtt (MaxVal s1) (VAL s) = [MaxVal s] +setAtt (MaxVal s1) (ErrorVal s) = [ErrorVal s] ++setAtt (SubVal s1) (MaxVal s) = [SubVal s] +setAtt (SubVal s1) (SubVal s) = [SubVal s] +setAtt (SubVal s1) (RepVal s) = [SubVal s]+setAtt (SubVal s1) (VAL s) = [SubVal s]+setAtt (SubVal s1) (ErrorVal s) = [ErrorVal s] ++setAtt (RepVal s1) (MaxVal s) = [RepVal s] +setAtt (RepVal s1) (SubVal s) = [RepVal s] +setAtt (RepVal s1) (RepVal s) = [RepVal s]+setAtt (RepVal s1) (VAL s) = [RepVal s]+setAtt (RepVal s1) (ErrorVal s) = [ErrorVal s] ++setAtt (VAL s1) (VAL s) = [VAL s] +setAtt (VAL s1) (MaxVal s) = [VAL s] +setAtt (VAL s1) (SubVal s) = [VAL s] +setAtt (VAL s1) (RepVal s) = [VAL s] +setAtt (VAL s1) (ErrorVal s) = [ErrorVal s] +++setAtt (Res s1) (Res s) = [Res s] +setAtt (Res s1) (ErrorVal s) = [ErrorVal s] +setAtt (ErrorVal s1) (ErrorVal s) = [ErrorVal s] ++setAtt (NOUNCLA_VAL s1) (NOUNCLA_VAL s) = [NOUNCLA_VAL s] +setAtt (ADJ_VAL s1) (ADJ_VAL s) = [ADJ_VAL s] +setAtt (TERMPH_VAL s1) (TERMPH_VAL s) = [TERMPH_VAL s] +setAtt (VERBPH_VAL s1) (VERBPH_VAL s) = [VERBPH_VAL s] +setAtt (SENT_VAL s1) (SENT_VAL s) = [SENT_VAL s] +setAtt (QUEST_VAL s1) (QUEST_VAL s) = [QUEST_VAL s]+setAtt (QUEST1_VAL s1) (QUEST1_VAL s) = [QUEST1_VAL s]+setAtt (QUEST2_VAL s1) (QUEST2_VAL s) = [QUEST2_VAL s]+setAtt (QUEST3_VAL s1) (QUEST3_VAL s) = [QUEST3_VAL s]++setAtt (PREP_VAL s1) (PREP_VAL s) = [PREP_VAL s]+setAtt (PREPN_VAL s1) (PREPN_VAL s) = [PREPN_VAL s]+setAtt (PREPPH_VAL s1) (PREPPH_VAL s) = [PREPPH_VAL s]+setAtt (YEAR_VAL s1) (YEAR_VAL s) = [YEAR_VAL s]+++--------- *********************** --------------+++++++
XSaiga.cabal view
@@ -1,20 +1,20 @@--- Initial XSaiga.cabal generated by cabal init. For further +-- Initial XSaiga.cabal generated by cabal init. For further -- documentation, see http://haskell.org/cabal/users-guide/ name: XSaiga -version: 1.1.0.0 +version: 1.2.0.0 synopsis: An implementation of a polynomial-time top-down parser suitable for NLP --- description: +-- description: homepage: http://hafiz.myweb.cs.uwindsor.ca/proHome.html license: BSD3 license-file: LICENSE author: Dr. Rahmatullah Hafiz, Dr. Richard Frost (rfrost@cogeco.ca), Shane Peelar, Paul Callaghan, and Eric Matthews maintainer: peelar@uwindsor.ca --- copyright: -category: Parsing, Natural Language Processing, Memoization, ParserCombinators, Attribute Grammars, Text +-- copyright: +category: Parsing, Natural Language Processing, Memoization, ParserCombinators, Attribute Grammars, Text build-type: Simple cabal-version: >=1.8 -x-revision: 3 +--x-revision: 5 description: This package contains a Haskell implementation of the X-SAIGA project's parser combinators. The combinators @@ -37,11 +37,11 @@ \[4] <http://speechweb2.cs.uwindsor.ca/solarman/demo_sparql.html> Library - build-depends: base >=4.6 && <= 4.8.1.0, pretty, hsparql >=0.2, rdf4h, text, containers - exposed-modules: AGParser2, TypeAg2 + build-depends: base >=4.6 && <= 4.9.0.0, pretty, hsparql >=0.2, rdf4h, text, containers + exposed-modules: Getts, AGParser2, TypeAg2, SolarmanTriplestore Executable Solarman - main-is: Main.hs - other-modules: SolarmanTriplestore Getts + main-is: Main.hs + --other-modules: SolarmanTriplestore build-depends: base >=4.6, containers >=0.5, pretty >=1.1, cgi >=3001.1, rdf4h >=1.2, hsparql >=0.2, text >=0.11 - extensions: DoAndIfThenElse + extensions: DoAndIfThenElse,FlexibleInstances,NoMonomorphismRestriction